Skip to content
English

InteractionProtocol ​

KIT · class · 运行时值

Web/AI payload family. HTTP/SSE framing and actual command execution remain separate ports.

Every command registered here gets the envelope's discriminator forced to its own id, so a payload cannot claim one command while carrying another command's data.

导入 ​

ts
import { Interaction } from '@jangts/agent-core/kits/interaction';
js
import { Interaction } from '@jangts/agent-core/kits/interaction';

其他公开入口:@jangts/agent-core、@jangts/agent-core/types、@jangts/agent-core/kits/interaction、@jangts/agent-core/kits。

定义 ​

ts
class InteractionProtocol<Value, Result, Args, Id>

泛型参数 ​

类型参数约束默认类型
ValueobjectRecord<string, unknown>
Result—Value
Argsunknown[][]
Idstringstring

构造函数 ​

ts
new InteractionProtocol<Value extends object = Record<string, unknown>, Result = Value, Args extends unknown[] = [], Id extends string = string>(definition: InteractionProtocolDefinition<Value, Result, Args, Id>): InteractionProtocol<Value, Result, Args, Id>
参数类型传递说明
definitionInteractionProtocolDefinition<Value, Result, Args, Id>必需—
definition 的字段
字段类型必需说明
descriptionstring | undefined可省略只读。见类型定义及调用场景。
tagsreadonly string[] | undefined可省略只读。Diagnostic tags attached to rejections from this command. Diagnostic tags attached to every rejection from this catalog.
errorProtocolReason<Value, Args> | undefined可省略只读。Rejection wording for the command as a whole.
fieldsreadonly string[] | Readonly<Record<string, ProtocolField>> | undefined可省略只读。Field declarations by name, or an ordered list of field names.
versionnumber | undefined可省略只读。Protocol version, used to reject incompatible registrations.
format((value: Value, ...args: Args) => Result) | undefined可省略只读。Formats the validated value into the command result.
categoryInteractionCategory | undefined可省略只读。Declared purpose; validated against the frozen category list.
terminalboolean | undefined可省略只读。Marks a command that ends the interaction.
additionalPropertiesboolean | undefined可省略只读。Whether fields outside the declaration are rejected; defaults to the compiler policy.
optionalPresence"own" | "defined" | undefined可省略只读。'defined' rejects an explicitly undefined optional property; 'own' preserves its presence.
checksreadonly ProtocolCheck<Value, Args>[] | undefined可省略只读。Declarative rejection rules, evaluated in order after the structural checks.
refine((value: Value, ...args: Args) => void) | undefined可省略只读。Domain checks/bindings only; invoked after structural and declarative checks.
modeFieldstring | undefined可省略只读。Field carrying the mode selector, when modes are used.
unknownErrorstring | Error | undefined可省略只读。Rejection wording for an unknown command selector.
modeErrorstring | Error | undefined可省略只读。Rejection wording for a command used outside its declared modes.
ownershipErrorstring | Error | undefined可省略只读。Rejection wording for a model-supplied owned field.
commandFieldstring必需只读。Field carrying the command id; also the canonical key in normalized output.
commandAliasesreadonly string[] | undefined可省略只读。Accepted only on input. Schema and normalized output always use commandField.
selectionErrorProtocolReason<Value, Args> | undefined可省略只读。Rejection wording when a payload selects no command.
commandsReadonly<Record<Id, CommandDefinition<Value, Result, Args>>>必需只读。见类型定义及调用场景。

返回: InteractionProtocol<Value, Result, Args, Id>。

静态属性 ​

字段类型必需说明
categoriesreadonly InteractionCategory[]必需只读。见类型定义及调用场景。

实例属性 ​

字段类型必需说明
commandFieldstring必需只读。Field carrying the command id in a payload.
commandSelectorsreadonly string[]必需只读。Accepted selector names: the command field first, then any declared aliases.
commandsCommandCatalog<Value, Result, Args, Id>必需只读。Sealed catalog of the compiled commands.
modelJsonSchemaRecord<string, unknown>必需只读。JSON schema for the model, expressed as a union of the per-command schemas.
inputJsonSchemaRecord<string, unknown>必需只读。Strict JSON schema for transport input, expressed as a union of per-command schemas.

成员目录 ​

成员用途
define静态。完整输入输出见下方重载。
Commands静态。完整输入输出见下方重载。
defineCommand静态。完整输入输出见下方重载。
commandSchema静态。完整输入输出见下方重载。
bind静态。完整输入输出见下方重载。
parseParse a payload and return only the result.
receiveRetain the selected command id separately from a formatter's output.

成员详情 ​

define ​

静态成员。

ts
InteractionProtocol.define<Value extends object = Record<string, unknown>, Result = Value, Args extends unknown[] = [], Id extends string = string>(definition: InteractionProtocolDefinition<Value, Result, Args, Id>): InteractionProtocol<Value, Result, Args, Id>

Construct a protocol from one definition.

类型参数约束默认类型
ValueobjectRecord<string, unknown>
Result—Value
Argsunknown[][]
Idstringstring
参数类型传递说明
definitionInteractionProtocolDefinition<Value, Result, Args, Id>必需—
definition 的字段
字段类型必需说明
descriptionstring | undefined可省略只读。见类型定义及调用场景。
tagsreadonly string[] | undefined可省略只读。Diagnostic tags attached to rejections from this command. Diagnostic tags attached to every rejection from this catalog.
errorProtocolReason<Value, Args> | undefined可省略只读。Rejection wording for the command as a whole.
fieldsreadonly string[] | Readonly<Record<string, ProtocolField>> | undefined可省略只读。Field declarations by name, or an ordered list of field names.
versionnumber | undefined可省略只读。Protocol version, used to reject incompatible registrations.
format((value: Value, ...args: Args) => Result) | undefined可省略只读。Formats the validated value into the command result.
categoryInteractionCategory | undefined可省略只读。Declared purpose; validated against the frozen category list.
terminalboolean | undefined可省略只读。Marks a command that ends the interaction.
additionalPropertiesboolean | undefined可省略只读。Whether fields outside the declaration are rejected; defaults to the compiler policy.
optionalPresence"own" | "defined" | undefined可省略只读。'defined' rejects an explicitly undefined optional property; 'own' preserves its presence.
checksreadonly ProtocolCheck<Value, Args>[] | undefined可省略只读。Declarative rejection rules, evaluated in order after the structural checks.
refine((value: Value, ...args: Args) => void) | undefined可省略只读。Domain checks/bindings only; invoked after structural and declarative checks.
modeFieldstring | undefined可省略只读。Field carrying the mode selector, when modes are used.
unknownErrorstring | Error | undefined可省略只读。Rejection wording for an unknown command selector.
modeErrorstring | Error | undefined可省略只读。Rejection wording for a command used outside its declared modes.
ownershipErrorstring | Error | undefined可省略只读。Rejection wording for a model-supplied owned field.
commandFieldstring必需只读。Field carrying the command id; also the canonical key in normalized output.
commandAliasesreadonly string[] | undefined可省略只读。Accepted only on input. Schema and normalized output always use commandField.
selectionErrorProtocolReason<Value, Args> | undefined可省略只读。Rejection wording when a payload selects no command.
commandsReadonly<Record<Id, CommandDefinition<Value, Result, Args>>>必需只读。见类型定义及调用场景。

返回: InteractionProtocol<Value, Result, Args, Id>。

Commands ​

静态成员。

ts
new InteractionProtocol.Commands<Value extends object = Record<string, unknown>, Result = Value, Args extends unknown[] = [], Id extends string = string>(definitions: Iterable<readonly [Id, Command<Value, Result, Args>]>, options?: CommandCatalogOptions): CommandCatalog<Value, Result, Args, Id>
参数类型传递说明
definitionsIterable<readonly [Id, Command<Value, Result, Args>]>必需—
optionsCommandCatalogOptions可省略—
options 的字段
字段类型必需说明
modeFieldstring | undefined可省略只读。Field carrying the mode selector, when modes are used.
unknownErrorstring | Error | undefined可省略只读。Rejection wording for an unknown command selector.
modeErrorstring | Error | undefined可省略只读。Rejection wording for a command used outside its declared modes.
ownershipErrorstring | Error | undefined可省略只读。Rejection wording for a model-supplied owned field.
tagsreadonly string[] | undefined可省略只读。Diagnostic tags attached to every rejection from this catalog.

返回: CommandCatalog<Value, Result, Args, Id>。

defineCommand ​

静态成员。

ts
InteractionProtocol.defineCommand<Value extends object = Record<string, unknown>, Result = Value, Args extends unknown[] = []>(definition: CommandDefinition<Value, Result, Args>): Command<Value, Result, Args>

Compile declarations once. Parsing is synchronous and never executes a registered tool.

Two schemas are produced from one declaration: modelJsonSchema marks only fields the model must fill, while inputJsonSchema marks every required field. A discriminator, when present, is prepended as a required constant field.

类型参数约束默认类型
ValueobjectRecord<string, unknown>
Result—Value
Argsunknown[][]
参数类型传递说明
definitionCommandDefinition<Value, Result, Args>必需—
definition 的字段
字段类型必需说明
categoryInteractionCategory | undefined可省略只读。Declared purpose; validated against the frozen category list.
versionnumber | undefined可省略只读。Protocol version, used to reject incompatible registrations.
descriptionstring | undefined可省略只读。见类型定义及调用场景。
terminalboolean | undefined可省略只读。Marks a command that ends the interaction.
discriminator{ readonly field: string; readonly value: string; } | undefined可省略只读。Constant field identifying the command; its value is forced to the command id.
fieldsreadonly string[] | Readonly<Record<string, ProtocolField>>必需只读。Field declarations by name, or an ordered list of field names.
ownedFieldsreadonly string[] | undefined可省略只读。Fields the program writes; may name fields not declared in fields.
additionalPropertiesboolean | undefined可省略只读。Whether fields outside the declaration are rejected; defaults to the compiler policy.
optionalPresence"own" | "defined" | undefined可省略只读。'defined' rejects an explicitly undefined optional property; 'own' preserves its presence.
modesreadonly string[] | undefined可省略只读。App-declared modes in which the command is available.
errorProtocolReason<Value, Args> | undefined可省略只读。Rejection wording for the command as a whole.
tagsreadonly string[] | undefined可省略只读。Diagnostic tags attached to rejections from this command.
checksreadonly ProtocolCheck<Value, Args>[] | undefined可省略只读。Declarative rejection rules, evaluated in order after the structural checks.
refine((value: Value, ...args: Args) => void) | undefined可省略只读。Domain checks/bindings only; invoked after structural and declarative checks.
format((value: Value, ...args: Args) => Result) | undefined可省略只读。Formats the validated value into the command result.

返回: Command<Value, Result, Args>。

返回值结构
字段类型必需说明
categoryInteractionCategory | undefined可省略只读。见类型定义及调用场景。
versionnumber | undefined可省略只读。见类型定义及调用场景。
descriptionstring | undefined可省略只读。见类型定义及调用场景。
terminalboolean | undefined可省略只读。见类型定义及调用场景。
fieldSchemasRecord<string, unknown>必需只读。Per-field schemas, including the forced discriminator field.
modelJsonSchemaRecord<string, unknown>必需只读。Schema for model output; only modelRequired fields are required here.
inputJsonSchemaRecord<string, unknown>必需只读。Schema for runtime input; every required field is required here.
modesreadonly string[] | undefined可省略只读。见类型定义及调用场景。
ownedFieldsreadonly string[]必需只读。Field names the program owns; the model must not supply them.
keys(value: Record<string, unknown>) => string[]必需Selector values carried by value, used to resolve the command before parsing.
assert(value: Value, ...args: Args) => void必需Validates without formatting; throws on the first failed check.
parse(value: Value, ...args: Args) => Result必需Validates and returns the formatted result.

commandSchema ​

静态成员。

ts
InteractionProtocol.commandSchema(id: string, protocol: ProtocolShape, discriminator?: string): Record<string, unknown>

Build a JSON schema for one command id.

Prefer compiled schemas; retain the existing open-schema contract for dynamic host protocols. A protocol without fieldSchemas falls back to an open object that only pins the discriminator, which keeps legacy hosts working without weakening compiled ones.

参数类型传递说明
idstring必需—
protocolProtocolShape必需—
discriminatorstring可省略—
protocol 的字段
字段类型必需说明
modelJsonSchemaRecord<string, unknown> | undefined可省略只读。Optional schema for model output.
inputJsonSchemaRecord<string, unknown> | undefined可省略只读。Optional schema for runtime input.
fieldSchemasRecord<string, unknown> | undefined可省略只读。Optional per-field schemas.
keys(value: Record<string, unknown>) => string[]必需Selector values carried by value.

返回: Record<string, unknown>。

bind ​

静态成员。

ts
InteractionProtocol.bind<Value extends object, Parsed, Args extends unknown[], Id extends string, Context, Output>(protocol: { readonly commands: Pick<InteractionProtocol<Value, Parsed, Args, Id>["commands"], "manifest">; receive(value: Value, ...args: Args): { id: Id; result: Parsed; }; }, handlers: InteractionHandlers<Id, Parsed, Context, Output>): Readonly<{ catalog: readonly Readonly<{ id: string; category: InteractionCategory | undefined; description: string | undefined; terminal: boolean | undefined; modes: readonly string[] | undefined; }>[]; dispatch(value: Value, context: Context, ...args: Args): Output; }>

Bind every registered transfer command to a local handler. Models cannot add handlers.

类型参数约束默认类型
Valueobject—
Parsed——
Argsunknown[]—
Idstring—
Context——
Output——
参数类型传递说明
protocol{ readonly commands: Pick<InteractionProtocol<Value, Parsed, Args, Id>["commands"], "manifest">; receive(value: Value, ...args: Args): { id: Id; result: Parsed; }; }必需—
handlersReadonly<Record<Id, (value: Parsed, context: Context) => Output>>必需—
protocol 的字段
字段类型必需说明
commandsPick<CommandCatalog<Value, Parsed, Args, Id>, "manifest">必需只读。见类型定义及调用场景。
receive(value: Value, ...args: Args) => { id: Id; result: Parsed; }必需见类型定义及调用场景。

返回: Readonly<{ catalog: readonly Readonly<{ id: string; category: InteractionCategory \| undefined; description: string \| undefined; terminal: boolean \| undefined; modes: readonly string[] \| undefined; }>[]; dispatch(value: Value, context: Context, ...args: Args): Output; }>。

返回值结构
字段类型必需说明
catalogreadonly Readonly<{ id: string; category: InteractionCategory | undefined; description: string | undefined; terminal: boolean | undefined; modes: readonly string[] | undefined; }>[]必需见类型定义及调用场景。
dispatch(value: Value, context: Context, ...args: Args) => Output必需见类型定义及调用场景。

parse ​

实例方法。

Parse a payload and return only the result.

ts
parse(value: Value, ...args: Args): Result

Parse a payload and return only the result.

参数类型传递说明
valueValue必需—
argsArgs剩余参数—

返回: Result。

等待后的值: Awaited<Result>。

receive ​

实例方法。

Retain the selected command id separately from a formatter's output.

ts
receive(value: Value, ...args: Args): { id: Id; result: Result; }

Retain the selected command id separately from a formatter's output.

参数类型传递说明
valueValue必需—
argsArgs剩余参数—

返回: { id: Id; result: Result; }。

返回值结构
字段类型必需说明
idId必需见类型定义及调用场景。
resultResult必需见类型定义及调用场景。

使用示例 ​

先定义一种说明命令并校验 ​

入门 · Node.js

ts
import { Interaction } from '@jangts/agent-core/kits/interaction';
const protocol = Interaction.define({
  commandField: 'type', commands: {
    reply: { category: 'presentation', description: '展示已确认说明', fields: { text: { required: true, jsonSchema: { type: 'string' } } },
      checks: [{ occur: value => typeof value.text !== 'string', error: 'text 必须是字符串' }] },
  },
});
console.log(protocol.receive({ type: 'reply', text: '普通对象也能实现接口。' }));
console.log(protocol.modelJsonSchema);
js
import { Interaction } from '@jangts/agent-core/kits/interaction';
const protocol = Interaction.define({
    commandField: 'type', commands: {
        reply: { category: 'presentation', description: '展示已确认说明', fields: { text: { required: true, jsonSchema: { type: 'string' } } },
            checks: [{ occur: value => typeof value.text !== 'string', error: 'text 必须是字符串' }] },
    },
});
console.log(protocol.receive({ type: 'reply', text: '普通对象也能实现接口。' }));
console.log(protocol.modelJsonSchema);

保留同一协议,增加完整 handler 绑定 ​

配置 · Node.js

ts
import { Interaction } from '@jangts/agent-core/kits/interaction';
const protocol = Interaction.define({
  commandField: 'type', commands: {
    reply: { category: 'presentation', description: '展示已确认说明', fields: { text: { required: true, jsonSchema: { type: 'string' } } }, checks: [{ occur: value => typeof value.text !== 'string', error: 'text 必须是字符串' }] },
    unavailable: { category: 'receipt', description: '说明资料不可用', fields: {} },
  },
});
const dispatcher = Interaction.bind(protocol, {
  reply: value => '说明:' + String(value.text),
  unavailable: () => '资料暂不可用',
});
console.log(dispatcher.dispatch({ type: 'reply', text: '普通对象也能实现接口。' }, undefined));
console.log(dispatcher.catalog);
js
import { Interaction } from '@jangts/agent-core/kits/interaction';
const protocol = Interaction.define({
    commandField: 'type', commands: {
        reply: { category: 'presentation', description: '展示已确认说明', fields: { text: { required: true, jsonSchema: { type: 'string' } } }, checks: [{ occur: value => typeof value.text !== 'string', error: 'text 必须是字符串' }] },
        unavailable: { category: 'receipt', description: '说明资料不可用', fields: {} },
    },
});
const dispatcher = Interaction.bind(protocol, {
    reply: value => '说明:' + String(value.text),
    unavailable: () => '资料暂不可用',
});
console.log(dispatcher.dispatch({ type: 'reply', text: '普通对象也能实现接口。' }, undefined));
console.log(dispatcher.catalog);

直接复用单命令与批量编译入口 ​

扩展 · Node.js

使用 Interaction 时选择器由它生成;自行用 defineCommand 时也可以显式提供 discriminator。此例没有执行任何工具。

ts
import { defineCommand, compileCommands, commandSchema, CommandCatalog } from '@jangts/agent-core/kits/interaction';
const reply = defineCommand({ fields: { text: { required: true } }, checks: [{ occur: value => typeof value.text !== 'string', error: '需要文本' }] });
console.log(reply.parse({ text: '接口说明' }));
const compiled = compileCommands({ reply: { fields: { text: { required: true } } } });
const commands = new CommandCatalog(Object.entries(compiled));
console.log(commandSchema('reply', commands.require('reply')), commands.manifest());
js
import { defineCommand, compileCommands, commandSchema, CommandCatalog } from '@jangts/agent-core/kits/interaction';
const reply = defineCommand({ fields: { text: { required: true } }, checks: [{ occur: value => typeof value.text !== 'string', error: '需要文本' }] });
console.log(reply.parse({ text: '接口说明' }));
const compiled = compileCommands({ reply: { fields: { text: { required: true } } } });
const commands = new CommandCatalog(Object.entries(compiled));
console.log(commandSchema('reply', commands.require('reply')), commands.manifest());

相关策略源码 ​

相关定义 ​

接口参考、使用示例与开发指南。