Skip to content
中文

splitTextBlocks ​

KIT · function · Runtime value

Split long plain text on structural boundaries.

Headings and horizontal rules start a new block, blank lines end the current one, and all other lines break only when the target size would be exceeded. A single line longer than the target becomes its own block so that paging can cut it into fragments later without splitting the line into unrelated sections. Concatenating every block reproduces the input exactly: no truncation, padding or dropped whitespace.

The input must be plain text; binaries and rich documents are read elsewhere.

Import ​

ts
import { splitTextBlocks } from '@jangts/agent-core/kits/text-blocks';
js
import { splitTextBlocks } from '@jangts/agent-core/kits/text-blocks';

Other public entry points:@jangts/agent-core/types, @jangts/agent-core/kits, @jangts/agent-core/kits/text-blocks.

Definition ​

Call ​

ts
splitTextBlocks(text: string, options: TextBlockOptions): TextBlock[]

Split long plain text on structural boundaries.

Headings and horizontal rules start a new block, blank lines end the current one, and all other lines break only when the target size would be exceeded. A single line longer than the target becomes its own block so that paging can cut it into fragments later without splitting the line into unrelated sections. Concatenating every block reproduces the input exactly: no truncation, padding or dropped whitespace.

The input must be plain text; binaries and rich documents are read elsewhere.

ParameterTypePassingDescription
textstringRequired—
optionsTextBlockOptionsRequired—
Fields of options
FieldTypeRequiredDescription
targetCharsnumberRequiredRead-only. Target block size in characters; only a single over-long line may exceed it.

Returns: TextBlock[].

Examples ​

First split a short document with two sections ​

Beginner · Node.js

The example only demonstrates the splitting contract; paging windows, context budgets and prompts still belong to the App.

ts
import { TextBlocks } from '@jangts/agent-core/kits/text-blocks';
const text = '# 概览\n\n' + '说明内容\n'.repeat(4) + '\n## 细节\n\n' + '更多内容\n'.repeat(4);
const blocks = TextBlocks.split(text, { targetChars: 40 });
console.log(blocks.map(block => [block.number, block.start, block.end]));
console.log(blocks.map(block => block.text).join('') === text);
js
import { TextBlocks } from '@jangts/agent-core/kits/text-blocks';
const text = '# 概览\n\n' + '说明内容\n'.repeat(4) + '\n## 细节\n\n' + '更多内容\n'.repeat(4);
const blocks = TextBlocks.split(text, { targetChars: 40 });
console.log(blocks.map(block => [block.number, block.start, block.end]));
console.log(blocks.map(block => block.text).join('') === text);

Page through blocks and record coverage ​

Configuration · Node.js

Block boundaries are not a fixed character window; record each block start/end instead of inferring character positions.

ts
import { TextBlocks, type TextBlock } from '@jangts/agent-core/kits/text-blocks';
const text = '# 报告\n\n' + '记录内容\n'.repeat(200);
const blocks = TextBlocks.split(text, { targetChars: 4000 });
const page = (offset: number, limit: number): { blocks: TextBlock[]; nextOffset?: number } => ({
  blocks: blocks.slice(offset, offset + limit),
  nextOffset: offset + limit < blocks.length ? offset + limit : undefined,
});
const first = page(0, 2);
console.log(first.blocks.map(block => block.number), first.nextOffset);
js
import { TextBlocks } from '@jangts/agent-core/kits/text-blocks';
const text = '# 报告\n\n' + '记录内容\n'.repeat(200);
const blocks = TextBlocks.split(text, { targetChars: 4000 });
const page = (offset, limit) => ({
    blocks: blocks.slice(offset, offset + limit),
    nextOffset: offset + limit < blocks.length ? offset + limit : undefined,
});
const first = page(0, 2);
console.log(first.blocks.map(block => block.number), first.nextOffset);

API reference, usage examples and developer guides.