Skip to content
English

Delivery:顺序交付与显式结束 ​

每个交付阶段明确 continue 或 complete;一个阶段完成后立即结束。

defineDelivery 接受 createState、stages、missingResult,以及可选 beforeStage。deliver(input, execution) 同步返回 Result。beforeStage 与该阶段 handle 交错执行;不是先跑完所有 hook 再跑 handler。没有任何阶段交付时抛出 missingResult() 返回的错误。

执行前后检查 AbortSignal;所有 handler 都必须同步。阶段名、状态、优先级和是否允许发布是 App 的语义,不是 Core 的全局交付协议。

由简到繁的同业务示例 ​

交付一段已经确认的文本 ​

入门 · Node.js

ts
import { Delivery } from '@jangts/agent-core/kits/delivery';
const delivery = Delivery.defineDelivery({
  createState: (input: string) => ({ text: input }),
  stages: [{ id: 'publish', handle: (state: { text: string }) => ({ type: 'complete' as const, value: state.text }) }],
  missingResult: () => new Error('没有可交付结果'),
});
console.log(delivery.deliver('已完成的答复', { signal: new AbortController().signal }));
js
import { Delivery } from '@jangts/agent-core/kits/delivery';
const delivery = Delivery.defineDelivery({
    createState: (input) => ({ text: input }),
    stages: [{ id: 'publish', handle: (state) => ({ type: 'complete', value: state.text }) }],
    missingResult: () => new Error('没有可交付结果'),
});
console.log(delivery.deliver('已完成的答复', { signal: new AbortController().signal }));

增加校验阶段,保留同一个 deliver ​

配置 · Node.js

ts
import { Delivery } from '@jangts/agent-core/kits/delivery';
const delivery = Delivery.defineDelivery({
  createState: (input: string) => ({ text: input.trim() }),
  stages: [
    { id: 'check', handle(state: { text: string }) {
      if (!state.text) throw new Error('答复为空');
      return { type: 'continue' as const };
    } },
    { id: 'publish', handle: (state: { text: string }) => ({ type: 'complete' as const, value: state.text }) },
  ],
  beforeStage: ({ stageId }: { stageId: string }) => { console.log('阶段', stageId); },
  missingResult: () => new Error('没有可交付结果'),
});
console.log(delivery.deliver(' 已完成的答复 ', { signal: new AbortController().signal }));
js
import { Delivery } from '@jangts/agent-core/kits/delivery';
const delivery = Delivery.defineDelivery({
    createState: (input) => ({ text: input.trim() }),
    stages: [
        { id: 'check', handle(state) {
                if (!state.text)
                    throw new Error('答复为空');
                return { type: 'continue' };
            } },
        { id: 'publish', handle: (state) => ({ type: 'complete', value: state.text }) },
    ],
    beforeStage: ({ stageId }) => { console.log('阶段', stageId); },
    missingResult: () => new Error('没有可交付结果'),
});
console.log(delivery.deliver(' 已完成的答复 ', { signal: new AbortController().signal }));

策略与实现 ​

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