This repository has been archived on 2026-09-13. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
BPOS-TMP-REPO/packages/activity-sdk/src/define.ts
T
JCAI Main AgentandClaude Opus 5 c6cdb4c310 M5(完成): @activity-sdk 与首个活动包 quote-intake
@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
2026-07-27 02:09:43 +08:00

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);
}