transformContextText
SUPPORT · function · Runtime value
Apply a text transform to a fragment value, including strings nested inside objects.
Structured values are walked through a JSON round trip, which is what the budget measurement serializes later; values that JSON cannot represent are therefore not preserved.
Import
import { transformContextText } from '@jangts/agent-core/support';import { transformContextText } from '@jangts/agent-core/support';Other public entry points:@jangts/agent-core, @jangts/agent-core/types, @jangts/agent-core/support, @jangts/agent-core/support/context.
Definition
Call
transformContextText(fragment: ContextFragment, transform: (text: string) => string): ContextFragmentApply a text transform to a fragment value, including strings nested inside objects.
Structured values are walked through a JSON round trip, which is what the budget measurement serializes later; values that JSON cannot represent are therefore not preserved.
| Parameter | Type | Passing | Description |
|---|---|---|---|
fragment | ContextFragment | Required | — |
transform | (text: string) => string | Required | — |
Fields of fragment
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Required | Unique, stable id matching ^[a-z][a-zA-Z0-9:._-]*$; duplicates are rejected. |
sourceId | string | Required | Owning source (module or registration) used to explain where the content came from. |
trust | ContextTrust | Required | Producer trust level. user and tool content cannot become a system message. |
lifetime | ContextLifetime | Required | Declared validity window of this content. |
maxChars | number | Required | Hard upper bound in JSON characters; must be a positive safe integer. |
role | "system" | "user" | Required | Message slot the fragment occupies when assembled. |
value | string | Record<string, unknown> | Required | Rendered content. A system message accepts a string only, never a record. |
Returns: ContextFragment.
Return value structure
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Required | Unique, stable id matching ^[a-z][a-zA-Z0-9:._-]*$; duplicates are rejected. |
sourceId | string | Required | Owning source (module or registration) used to explain where the content came from. |
trust | ContextTrust | Required | Producer trust level. user and tool content cannot become a system message. |
lifetime | ContextLifetime | Required | Declared validity window of this content. |
maxChars | number | Required | Hard upper bound in JSON characters; must be a positive safe integer. |
role | "system" | "user" | Required | Message slot the fragment occupies when assembled. |
value | string | Record<string, unknown> | Required | Rendered content. A system message accepts a string only, never a record. |
Examples
- Context assembly: configure stable metadata once: Support binds fragment metadata, formatting, and order in advance, and requests supply only the changing business input.
Configure once, then supply only question and history
Beginner · Node.js
import { Support } from '@jangts/agent-core';
type Input = { question: string; history: readonly { role: string; content: string }[] };
const builder = Support.defineContextFragments<Input>([
{ id: 'question', sourceId: 'request', trust: 'user', lifetime: 'turn', maxChars: 1000,
role: 'user', format: input => input.question },
{ id: 'history', sourceId: 'conversation', trust: 'user', lifetime: 'turn', maxChars: 10000,
role: 'user', format: input => ({ messages: input.history }) },
], { maxInputChars: 1200 });
const context = builder.build({ input: { question: '服务状态?', history: [] } });
console.log(context.messages);import { Support } from '@jangts/agent-core';
const builder = Support.defineContextFragments([
{ id: 'question', sourceId: 'request', trust: 'user', lifetime: 'turn', maxChars: 1000,
role: 'user', format: input => input.question },
{ id: 'history', sourceId: 'conversation', trust: 'user', lifetime: 'turn', maxChars: 10000,
role: 'user', format: input => ({ messages: input.history }) },
], { maxInputChars: 1200 });
const context = builder.build({ input: { question: '服务状态?', history: [] } });
console.log(context.messages);The same builder produces a plan in advance
Configuration · Node.js
import { Support } from '@jangts/agent-core';
type Input = { question: string; history: readonly { role: string; content: string }[] };
const builder = Support.defineContextFragments<Input>([
{ id: 'question', sourceId: 'request', trust: 'user', lifetime: 'turn', maxChars: 1000,
role: 'user', format: input => input.question },
{ id: 'history', sourceId: 'conversation', trust: 'user', lifetime: 'turn', maxChars: 10000,
role: 'user', format: input => ({ messages: input.history }) },
], { maxInputChars: 1200 });
const input = { question: '服务状态?', history: [] };
const plan = builder.plan({ input });
const expanded = builder.fragments(input);
console.log(plan.maxInputChars, expanded.map(fragment => fragment.id));
const largerRequest = builder.build({ input, maxInputChars: 2000 });
console.log(largerRequest.maxInputChars);import { Support } from '@jangts/agent-core';
const builder = Support.defineContextFragments([
{ id: 'question', sourceId: 'request', trust: 'user', lifetime: 'turn', maxChars: 1000,
role: 'user', format: input => input.question },
{ id: 'history', sourceId: 'conversation', trust: 'user', lifetime: 'turn', maxChars: 10000,
role: 'user', format: input => ({ messages: input.history }) },
], { maxInputChars: 1200 });
const input = { question: '服务状态?', history: [] };
const plan = builder.plan({ input });
const expanded = builder.fragments(input);
console.log(plan.maxInputChars, expanded.map(fragment => fragment.id));
const largerRequest = builder.build({ input, maxInputChars: 2000 });
console.log(largerRequest.maxInputChars);Reuse a metadata catalog and request contribution slots
Extension · Node.js
import { Support } from '@jangts/agent-core';
import type { ContextFragment } from '@jangts/agent-core/types';
type Input = { question: string; evidence: string };
const builder = Support.defineContextAssembly<Input, 'question', 'evidence'>([
{ kind: 'fragment', id: 'question', format: input => input.question },
{ kind: 'contributions', placement: 'evidence' },
], {
maxInputChars: 2000,
fragment(id, value): ContextFragment { return { id, sourceId: 'request', trust: 'user', lifetime: 'turn', role: 'user', maxChars: 1000, value }; },
contributions: { evidence(input) { return [{ id: 'evidence', sourceId: 'service', trust: 'server', lifetime: 'turn', role: 'user', maxChars: 1000, value: input.evidence }]; } },
});
console.log(builder.build({ input: { question: '状态?', evidence: '最近检查:正常' } }).messages);import { Support } from '@jangts/agent-core';
const builder = Support.defineContextAssembly([
{ kind: 'fragment', id: 'question', format: input => input.question },
{ kind: 'contributions', placement: 'evidence' },
], {
maxInputChars: 2000,
fragment(id, value) { return { id, sourceId: 'request', trust: 'user', lifetime: 'turn', role: 'user', maxChars: 1000, value }; },
contributions: { evidence(input) { return [{ id: 'evidence', sourceId: 'service', trust: 'server', lifetime: 'turn', role: 'user', maxChars: 1000, value: input.evidence }]; } },
});
console.log(builder.build({ input: { question: '状态?', evidence: '最近检查:正常' } }).messages);