Archived
@activity-sdk(§8.2 / ADR-004): - 基座六件接口(契约 / 交互 / 记忆 / 数据 / 工具 / LLM)—— 活动看到的全部世界 - defineActivity() 的 ABI;本地开发宿主(mock 工具表 + 模拟工位 + 录制夹具), 宿主自身就守三规矩:裸调用拒发、视图含脚本拒推、监听无时限拒登记 activities/quote-intake —— 统一报价 A1 · RFQ 需求分析(flow): - 契约七件 / 步序声明五步(LLM 抽取 → 条件跳步补全 → 查历史价 → DMN 打标 → 验收放行) - 三分类规则 P-03 落 DMN 决策表(C 优先于 A,命中行留痕) - 台账声明两对象、监听时限必配、SLA 落 Harness depcruise 实测拦下活动包越界 import(activities → apps 双向隔离), 测试遂按边界拆分:活动侧只用 @sdk/@contracts/@sfeel 358 个测试通过,门禁五道全绿 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
33 lines
1.4 KiB
TypeScript
33 lines
1.4 KiB
TypeScript
/**
|
|
* `defineActivity()` —— 活动包的 ABI 入口(ADR-004)。
|
|
*
|
|
* 「单文件 ESM,**默认导出** `defineActivity()` 的返回值;能力全部注入(基座六件句柄),
|
|
* **零环境能力**;静态审扫描产物 import 与全局引用。」
|
|
*/
|
|
import type { ActivityBase } from './base.ts';
|
|
|
|
/** 活动的运行结论 —— 提交放行是唯一的成功出路 */
|
|
export type ActivityOutcome =
|
|
/** 判定成果已齐,提交放行(必交付物齐备、判据全绿只是可提交) */
|
|
| { readonly kind: 'submit'; readonly deliverable: string; readonly rationale: string }
|
|
/** 等外界:已立监听,回合到此为止 */
|
|
| { readonly kind: 'await'; readonly reason: string }
|
|
/** 无法推进,申报受阻待人 */
|
|
| { readonly kind: 'blocked'; readonly reason: string };
|
|
|
|
export type ActivityDefinition = {
|
|
readonly name: string;
|
|
/** 范式只存在于引擎层;此处声明是给装载器看的 */
|
|
readonly paradigm: 'loop' | 'flow';
|
|
/**
|
|
* 一个回合的推进。由**引擎**驱动调用 —— 活动不自转、不自设 maxSteps;
|
|
* 预算与熔断由基座在环外强制。
|
|
*/
|
|
run(base: ActivityBase): Promise<ActivityOutcome>;
|
|
};
|
|
|
|
export function defineActivity(definition: ActivityDefinition): ActivityDefinition {
|
|
if (definition.name.trim() === '') throw new Error('活动必须有名字');
|
|
return Object.freeze(definition);
|
|
}
|