@xdxer/dingtalk-agent 0.1.4-beta.9 → 0.1.5-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +229 -0
- package/README.en.md +89 -324
- package/README.md +88 -674
- package/dist/bin/dingtalk-agent.js +207 -21
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-audit.js +1014 -89
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-enhance.js +41 -8
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +299 -0
- package/dist/src/agent-platform.js.map +1 -0
- package/dist/src/config.js +1 -7
- package/dist/src/config.js.map +1 -1
- package/dist/src/development-workspace.js +31 -5
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/doctor.js +74 -15
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/host-detect.js +146 -0
- package/dist/src/host-detect.js.map +1 -0
- package/dist/src/instruction-path.js +270 -0
- package/dist/src/instruction-path.js.map +1 -0
- package/dist/src/multica-deploy.js +78 -20
- package/dist/src/multica-deploy.js.map +1 -1
- package/dist/src/multica-provider.js +1 -1
- package/dist/src/multica-provider.js.map +1 -1
- package/dist/src/opencode-evals.js +710 -225
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/opencode-isolation.js +124 -0
- package/dist/src/opencode-isolation.js.map +1 -0
- package/dist/src/opencode-provider.js +1 -0
- package/dist/src/opencode-provider.js.map +1 -1
- package/dist/src/opencode-workspace.js +21 -10
- package/dist/src/opencode-workspace.js.map +1 -1
- package/dist/src/remote-state-evals.js +2 -1
- package/dist/src/remote-state-evals.js.map +1 -1
- package/dist/src/robot-evals.js +2 -1
- package/dist/src/robot-evals.js.map +1 -1
- package/dist/src/setup.js +6 -5
- package/dist/src/setup.js.map +1 -1
- package/dist/src/skill-manager.js +141 -12
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/skills.js +2 -1
- package/dist/src/skills.js.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/upgrade.js +23 -27
- package/dist/src/upgrade.js.map +1 -1
- package/dist/src/version.js +73 -0
- package/dist/src/version.js.map +1 -0
- package/docs/ARCHITECTURE.md +232 -0
- package/docs/INSTALLATION.md +3 -3
- package/docs/PRIOR-ART.md +122 -0
- package/docs/SELF-TEST.md +182 -0
- package/docs/assets/agent-delivery-lifecycle.svg +103 -0
- package/docs/schemas/agent-platform.schema.json +13 -0
- package/docs/schemas/project.schema.json +3 -0
- package/docs/schemas/release-readiness.schema.json +2 -1
- package/evals/README.md +17 -0
- package/examples/agents/README.md +43 -0
- package/examples/agents/fde-coach/AGENTS.md +26 -17
- package/examples/agents/release-manager/AGENTS.md +26 -17
- package/lab/README.md +3 -3
- package/lab/agent-eval/catalog.json +5 -5
- package/lab/agent-eval/classic-failures.json +9 -9
- package/lab/agent-eval/completion-gate-regression.json +6 -6
- package/lab/agent-eval/remote-state-workspace/opencode.json +1 -1
- package/lab/agent-eval/workspace/AGENTS.md +1 -1
- package/lab/project-workspace/fake-multica-provider.mjs +17 -6
- package/lab/project-workspace/opencode-provider-suite.json +2 -2
- package/lab/robot-eval/suite.json +1 -1
- package/lab/robot-eval/workspace/AGENTS.md +1 -1
- package/lab/schemas/agent-eval-catalog.schema.json +1 -1
- package/package.json +18 -13
- package/skills/README.md +23 -0
- package/skills/core/dingtalk-agent-compose/SKILL.md +151 -0
- package/skills/core/dingtalk-agent-compose/assets/AGENTS.template.md +35 -0
- package/skills/core/dingtalk-agent-compose/assets/role-skill.template.md +32 -0
- package/skills/core/dingtalk-agent-compose/evals/evals.json +129 -0
- package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/agent-definition-contract.md +3 -3
- package/skills/core/dingtalk-agent-compose/references/host-loading-contract.md +58 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/claude-code.md +48 -0
- package/skills/core/dingtalk-agent-compose/references/hosts/opencode.md +77 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/SKILL.md +57 -8
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/assets/eval-catalog.template.json +1 -1
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/evals/evals.json +22 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/eval-topology.md +14 -0
- package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/evidence-contract.md +21 -0
- package/skills/core/dingtalk-agent-eval/references/failure-to-case.md +35 -0
- package/skills/core/dingtalk-agent-eval/references/interactive-debug-channels.md +93 -0
- package/skills/core/dingtalk-agent-eval/references/local-connector-smoke.md +75 -0
- package/skills/core/dingtalk-basic-behavior/SKILL.md +87 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/memory-and-evolution.md +12 -0
- package/skills/core/dingtalk-basic-behavior/references/risk-authority-and-privacy.md +62 -0
- package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/task-lifecycle.md +15 -3
- package/skills/core/dingtalk-basic-behavior/references/truth-and-recovery.md +65 -0
- package/skills/platforms/deap/PLATFORM.md +3 -0
- package/skills/platforms/multica-dingtalk/PLATFORM.md +40 -0
- package/skills/{dingtalk-agent-boot-multica → platforms/multica-dingtalk/dingtalk-agent-boot-multica}/SKILL.md +4 -4
- package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/SKILL.md +1 -1
- package/skills/platforms/multica-dingtalk/multica-external/SKILL.md +282 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/bootstrap.sh +78 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/multica_ext.py +1180 -0
- package/docs/SECOND-AGENT-ACCEPTANCE.md +0 -62
- package/docs/architecture/agent-memory-topology.png +0 -0
- package/docs/architecture/agent-memory-topology.svg +0 -132
- package/docs/architecture/dingtalk-agent-blueprint.png +0 -0
- package/docs/architecture/durable-async-agent-runtime.png +0 -0
- package/docs/architecture/general-agent-kernel-topology.png +0 -0
- package/docs/architecture/provider-bound-development-workspace.png +0 -0
- package/docs/architecture/task-completion-gate.png +0 -0
- package/skills/dingtalk-agent-compose/SKILL.md +0 -110
- package/skills/dingtalk-agent-compose/assets/AGENTS.template.md +0 -26
- package/skills/dingtalk-agent-compose/assets/role-skill.template.md +0 -24
- package/skills/dingtalk-agent-compose/evals/evals.json +0 -94
- package/skills/dingtalk-agent-compose/references/opencode-host-contract.md +0 -65
- package/skills/dingtalk-basic-behavior/SKILL.md +0 -146
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.local.template.json +0 -0
- /package/skills/{dingtalk-agent-compose/assets → core/dingtalk-agent-compose/assets/hosts/opencode}/opencode.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/storage-routing.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/scenario-taxonomy.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/storage-modes.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/task-checkpoint.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/action-contract.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/event-to-behavior.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/perception-and-gates.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/runtime-modes.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/multica-deployment-contract.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/promotion-observation-contract.md +0 -0
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# 一小时复制第二个岗位 Agent
|
|
2
|
-
|
|
3
|
-
## 结论
|
|
4
|
-
|
|
5
|
-
第二个 Agent 不复制运行时,只复制一份 Agent kit 并替换四类绑定:`AGENTS.md`、Role Skills、Field/存储、DWS authority。事件监听不在本流程内;没有事件时 Agent 仍以 Direct/Mounted Session 正常工作,有可信事件时再进入同一个 Prepared Runtime。
|
|
6
|
-
|
|
7
|
-
仓库提供两份已通过同一合同的实例:
|
|
8
|
-
|
|
9
|
-
- `examples/agents/fde-coach`:FDE 教练;
|
|
10
|
-
- `examples/agents/release-manager`:发布经理。
|
|
11
|
-
|
|
12
|
-
两者共享 Basic Behavior、Invocation、Session/Run/Wait、双半闸门与 Receipt;Definition、Role Skill、Field、Session state、记忆和权限完全隔离。
|
|
13
|
-
|
|
14
|
-
## 60 分钟执行表
|
|
15
|
-
|
|
16
|
-
| 时间 | 开发者动作 | 验收标准 |
|
|
17
|
-
|---|---|---|
|
|
18
|
-
| 0–10 分钟 | 复制任一 example,改目录名 | 原 example 不被覆盖,新目录不含 `.dingtalk-agent` |
|
|
19
|
-
| 10–20 分钟 | 改 `AGENTS.md` 的身份、服务对象、职责、交付与拒绝边界 | 另一个 Agent 能回答“我是谁、负责什么、不做什么” |
|
|
20
|
-
| 20–30 分钟 | 新建/改名 `skills/<role>/SKILL.md` | 目录名等于 frontmatter `name`;只含岗位方法,不重复基础行为 |
|
|
21
|
-
| 30–40 分钟 | 配置 Field、存储路由和 DWS authority | 使用可信 ID;不同 Agent 不共用 state root、业务 scope 或生产权限 |
|
|
22
|
-
| 40–50 分钟 | 先 `dta bootstrap --json`,需要 Prepared Run 时再显式 `dta init` | Direct 默认 ready/partial 可解释;init 采用 `AGENTS.md` 并发现 Role Skill |
|
|
23
|
-
| 50–60 分钟 | 跑合同/mock Lab,检查冻结快照和隔离 | 无可信 target 不外发;两个 Agent 的 Definition/Session/记忆/权限不串 |
|
|
24
|
-
|
|
25
|
-
## 最小操作
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
cp -R examples/agents/release-manager /path/to/my-agent
|
|
29
|
-
cd /path/to/my-agent
|
|
30
|
-
|
|
31
|
-
# 先验证本体;这一步不要求 Workspace,也不产生钉钉副作用
|
|
32
|
-
dta bootstrap --json
|
|
33
|
-
|
|
34
|
-
# 只有需要可信事件和 Prepared Run 时才初始化一次
|
|
35
|
-
dta init
|
|
36
|
-
dta bootstrap --json
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
首次 `init` 会优先采用已有 `AGENTS.md`,发现 `skills/*/SKILL.md`,并保留已有 `fields/default/field.json`。初始化后新增 Skill 不会自动热启用:离线评审后把 Skill name 加入 `.dingtalk-agent/workspace.json#skills`,由新 Session 重新冻结。
|
|
40
|
-
|
|
41
|
-
## 自动化验收
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
npm run typecheck
|
|
45
|
-
npm run eval:contract
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
合同 42 会从两份 example 分别创建临时 Workspace,并检查:
|
|
49
|
-
|
|
50
|
-
1. 初始化前 Direct bootstrap 可工作且没有可信 target;
|
|
51
|
-
2. 初始化后 `AGENTS.md`、Role Skill 与显式 Field 被正确采用;
|
|
52
|
-
3. 两个 Definition、DWS profile、Session ID 不同,共享 Basic Behavior hash;
|
|
53
|
-
4. FDE 的 Task Checkpoint 与 Memory Candidate 在发布经理 state root 中不可见;
|
|
54
|
-
5. 两者都通过同一 fake-DWS Lab 的 Action/Receipt/平台回读合同。
|
|
55
|
-
|
|
56
|
-
2026-07-16 本地基线为 42/42,通过;双 Agent 合同自动执行约 2–3 秒。这个数字证明模板化装配和隔离可自动验证,不代表真实账号、专用群、AI 表格和钉钉文档已接通。真实 L4 仍需为每个 Agent 提供专用测试对象、allowlist 和明确 `--live --yes` 授权。
|
|
57
|
-
|
|
58
|
-
## 验收边界
|
|
59
|
-
|
|
60
|
-
- 通过:开发者只改本体、岗位 Skill、存储/Field/authority,即可得到第二个结构完整、状态隔离的 Agent;
|
|
61
|
-
- 不包含:Webhook、定时器、personal-event listener 等触发端;
|
|
62
|
-
- 不冒充:mock 平台可见不等于真实钉钉送达,真实写入必须另走 Lab L3/L4 晋级门禁。
|
|
Binary file
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 900" width="1440" height="900" role="img" aria-labelledby="title desc">
|
|
2
|
-
<title id="title">dingtalk-agent 三层语义记忆与控制状态拓扑</title>
|
|
3
|
-
<desc id="desc">Agent Run 按需读写三层语义记忆:Session 工作记忆、钉钉原生业务记忆、长期知识;Wait、锁、generation、幂等和 Receipt 位于独立控制状态;Git 用于定义与 Skill 的版本发布,不作为运行时锁或 PCB。</desc>
|
|
4
|
-
<style>
|
|
5
|
-
text { font-family:'Helvetica Neue',Helvetica,Arial,'PingFang SC','Microsoft YaHei',sans-serif; }
|
|
6
|
-
.title { fill:#111827;font-size:28px;font-weight:700; }
|
|
7
|
-
.subtitle { fill:#6b7280;font-size:14px; }
|
|
8
|
-
.lane { fill:#475569;font-size:12px;font-weight:700;letter-spacing:.08em; }
|
|
9
|
-
.node-title { fill:#111827;font-size:16px;font-weight:700; }
|
|
10
|
-
.node-sub { fill:#4b5563;font-size:12px; }
|
|
11
|
-
.small { fill:#64748b;font-size:11px; }
|
|
12
|
-
.label { fill:#475569;font-size:11px;font-weight:600; }
|
|
13
|
-
</style>
|
|
14
|
-
<defs>
|
|
15
|
-
<marker id="blue" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,10 3.5,0 7" fill="#2563eb"/></marker>
|
|
16
|
-
<marker id="green" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,10 3.5,0 7" fill="#059669"/></marker>
|
|
17
|
-
<marker id="purple" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,10 3.5,0 7" fill="#7c3aed"/></marker>
|
|
18
|
-
<marker id="rose" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto"><polygon points="0 0,10 3.5,0 7" fill="#dc2626"/></marker>
|
|
19
|
-
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%"><feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#0f172a" flood-opacity=".10"/></filter>
|
|
20
|
-
</defs>
|
|
21
|
-
|
|
22
|
-
<rect width="1440" height="900" fill="#ffffff"/>
|
|
23
|
-
<text x="40" y="48" class="title">三层语义记忆,各归各的介质</text>
|
|
24
|
-
<text x="40" y="75" class="subtitle">语义记忆服务“想起什么”;控制状态保证“只执行一次、从正确位置继续”。两者必须分开。</text>
|
|
25
|
-
|
|
26
|
-
<rect x="30" y="105" width="300" height="620" rx="14" fill="#eff6ff" stroke="#60a5fa" stroke-width="1.6"/>
|
|
27
|
-
<text x="50" y="132" class="lane">AGENT RUNTIME</text>
|
|
28
|
-
|
|
29
|
-
<rect x="70" y="180" width="220" height="122" rx="12" fill="#ffffff" stroke="#60a5fa" stroke-width="2.2" filter="url(#shadow)"/>
|
|
30
|
-
<rect x="74" y="184" width="212" height="114" rx="9" fill="none" stroke="#60a5fa" stroke-width=".8" opacity=".5"/>
|
|
31
|
-
<text x="180" y="218" text-anchor="middle" class="node-title">Agent Run</text>
|
|
32
|
-
<text x="180" y="243" text-anchor="middle" class="node-sub">一次事件唤醒</text>
|
|
33
|
-
<text x="180" y="265" text-anchor="middle" class="node-sub">推理 · 工具 · ActionRequest</text>
|
|
34
|
-
<text x="180" y="286" text-anchor="middle" class="small">沙箱可丢弃</text>
|
|
35
|
-
|
|
36
|
-
<rect x="70" y="355" width="220" height="132" rx="10" fill="#faf5ff" stroke="#c084fc" stroke-width="1.7"/>
|
|
37
|
-
<text x="180" y="388" text-anchor="middle" class="node-title">Session</text>
|
|
38
|
-
<text x="180" y="412" text-anchor="middle" class="node-sub">一件事的稳定语义边界</text>
|
|
39
|
-
<text x="180" y="435" text-anchor="middle" class="node-sub">goal · checkpoint · next</text>
|
|
40
|
-
<text x="180" y="457" text-anchor="middle" class="node-sub">waitFor · evidence</text>
|
|
41
|
-
<text x="180" y="478" text-anchor="middle" class="small">跨 Run,不跨事项</text>
|
|
42
|
-
|
|
43
|
-
<rect x="70" y="540" width="220" height="128" rx="10" fill="#fef2f2" stroke="#f87171" stroke-width="1.8" stroke-dasharray="6 4"/>
|
|
44
|
-
<text x="180" y="572" text-anchor="middle" class="node-title">Control State Client</text>
|
|
45
|
-
<text x="180" y="596" text-anchor="middle" class="node-sub">claim · resume · commit</text>
|
|
46
|
-
<text x="180" y="619" text-anchor="middle" class="node-sub">不暴露平台凭据</text>
|
|
47
|
-
<text x="180" y="643" text-anchor="middle" class="small">通过宿主原子接口读写</text>
|
|
48
|
-
|
|
49
|
-
<path d="M180 302 L180 355" fill="none" stroke="#2563eb" stroke-width="2" marker-end="url(#blue)"/>
|
|
50
|
-
<path d="M180 487 L180 540" fill="none" stroke="#dc2626" stroke-width="1.8" marker-end="url(#rose)"/>
|
|
51
|
-
|
|
52
|
-
<rect x="365" y="105" width="645" height="620" rx="14" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1.2" stroke-dasharray="7 5"/>
|
|
53
|
-
<text x="385" y="132" class="lane">THREE SEMANTIC MEMORY TIERS</text>
|
|
54
|
-
|
|
55
|
-
<rect x="405" y="165" width="565" height="138" rx="12" fill="#eff6ff" stroke="#93c5fd" stroke-width="1.8" filter="url(#shadow)"/>
|
|
56
|
-
<rect x="425" y="184" width="78" height="34" rx="17" fill="#2563eb"/><text x="464" y="207" text-anchor="middle" fill="#ffffff" font-size="13" font-weight="700">L1 短期</text>
|
|
57
|
-
<text x="525" y="205" class="node-title">Session 工作记忆</text>
|
|
58
|
-
<text x="425" y="242" class="node-sub">介质:宿主 state root / 原子本地存储;可生成 Markdown checkpoint 供人审阅</text>
|
|
59
|
-
<text x="425" y="267" class="node-sub">内容:当前目标、做到哪、下一步、在等什么、已有哪些证据</text>
|
|
60
|
-
<text x="425" y="289" class="small">高频更新 · 事项结束后归档/压缩 · 不承担锁和幂等</text>
|
|
61
|
-
|
|
62
|
-
<rect x="405" y="348" width="565" height="138" rx="12" fill="#f0fdfa" stroke="#5eead4" stroke-width="1.8" filter="url(#shadow)"/>
|
|
63
|
-
<rect x="425" y="367" width="78" height="34" rx="17" fill="#0f766e"/><text x="464" y="390" text-anchor="middle" fill="#ffffff" font-size="13" font-weight="700">L2 工作</text>
|
|
64
|
-
<text x="525" y="388" class="node-title">钉钉原生业务记忆</text>
|
|
65
|
-
<text x="425" y="425" class="node-sub">介质:AI 表格宽表 / Todo / Calendar / 业务系统的唯一事实源</text>
|
|
66
|
-
<text x="425" y="450" class="node-sub">内容:日报摘要、待办快照、互动记录、可聚合的业务热数据</text>
|
|
67
|
-
<text x="425" y="472" class="small">结构化查询 · 跨 Agent 可读 · ID 与 schema 必须显式绑定</text>
|
|
68
|
-
|
|
69
|
-
<rect x="405" y="531" width="565" height="138" rx="12" fill="#f0fdf4" stroke="#86efac" stroke-width="1.8" filter="url(#shadow)"/>
|
|
70
|
-
<rect x="425" y="550" width="78" height="34" rx="17" fill="#15803d"/><text x="464" y="573" text-anchor="middle" fill="#ffffff" font-size="13" font-weight="700">L3 长期</text>
|
|
71
|
-
<text x="525" y="571" class="node-title">知识与能力资产</text>
|
|
72
|
-
<text x="425" y="608" class="node-sub">介质:钉钉文档树 / 知识库 / Wiki;按来源、范围与版本治理</text>
|
|
73
|
-
<text x="425" y="633" class="node-sub">内容:身份、职责、Skill、SOP、人物模式、错误库、稳定知识</text>
|
|
74
|
-
<text x="425" y="655" class="small">低频写入 · 需证据与准入 · 新 Run 才加载已发布版本</text>
|
|
75
|
-
|
|
76
|
-
<path d="M405 220 L330 220" fill="none" stroke="#059669" stroke-width="1.8" marker-end="url(#green)"/>
|
|
77
|
-
<path d="M330 258 L405 258" fill="none" stroke="#059669" stroke-width="1.6" stroke-dasharray="5 3" marker-end="url(#green)"/>
|
|
78
|
-
<rect x="342" y="194" width="52" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="368" y="209" text-anchor="middle" class="label">read</text>
|
|
79
|
-
<rect x="342" y="266" width="52" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="368" y="281" text-anchor="middle" class="label">write</text>
|
|
80
|
-
|
|
81
|
-
<path d="M405 400 L330 400" fill="none" stroke="#059669" stroke-width="1.8" marker-end="url(#green)"/>
|
|
82
|
-
<path d="M330 444 L405 444" fill="none" stroke="#059669" stroke-width="1.6" stroke-dasharray="5 3" marker-end="url(#green)"/>
|
|
83
|
-
<rect x="337" y="374" width="62" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="368" y="389" text-anchor="middle" class="label">query</text>
|
|
84
|
-
<rect x="342" y="452" width="52" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="368" y="467" text-anchor="middle" class="label">write</text>
|
|
85
|
-
|
|
86
|
-
<path d="M405 583 L330 583" fill="none" stroke="#059669" stroke-width="1.8" marker-end="url(#green)"/>
|
|
87
|
-
<path d="M330 627 L405 627" fill="none" stroke="#059669" stroke-width="1.6" stroke-dasharray="5 3" marker-end="url(#green)"/>
|
|
88
|
-
<rect x="342" y="557" width="52" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="368" y="572" text-anchor="middle" class="label">load</text>
|
|
89
|
-
<rect x="335" y="635" width="66" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="368" y="650" text-anchor="middle" class="label">propose</text>
|
|
90
|
-
|
|
91
|
-
<path d="M687 303 L687 348" fill="none" stroke="#7c3aed" stroke-width="1.7" marker-end="url(#purple)"/>
|
|
92
|
-
<path d="M687 486 L687 531" fill="none" stroke="#7c3aed" stroke-width="1.7" marker-end="url(#purple)"/>
|
|
93
|
-
<rect x="700" y="316" width="78" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="739" y="331" text-anchor="middle" class="label">结构化</text>
|
|
94
|
-
<rect x="700" y="499" width="78" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="739" y="514" text-anchor="middle" class="label">验证沉淀</text>
|
|
95
|
-
|
|
96
|
-
<rect x="1045" y="105" width="365" height="320" rx="14" fill="#fef2f2" stroke="#f87171" stroke-width="1.6" stroke-dasharray="7 5"/>
|
|
97
|
-
<text x="1065" y="132" fill="#b91c1c" font-size="12" font-weight="700" letter-spacing=".08em">CONTROL PLANE · 不是记忆</text>
|
|
98
|
-
<text x="1227" y="173" text-anchor="middle" class="node-title">宿主控制状态</text>
|
|
99
|
-
|
|
100
|
-
<rect x="1080" y="200" width="295" height="176" rx="10" fill="#ffffff" stroke="#fca5a5" stroke-width="1.5"/>
|
|
101
|
-
<text x="1105" y="230" class="node-sub">• EventIndex / delivery claim</text>
|
|
102
|
-
<text x="1105" y="258" class="node-sub">• Wait / correlation / timer</text>
|
|
103
|
-
<text x="1105" y="286" class="node-sub">• lock / generation / cancellation</text>
|
|
104
|
-
<text x="1105" y="314" class="node-sub">• idempotency key / action budget</text>
|
|
105
|
-
<text x="1105" y="342" class="node-sub">• Action intent / attempt / receipt</text>
|
|
106
|
-
<text x="1227" y="366" text-anchor="middle" class="small">需要 CAS / 原子写 / 可恢复语义</text>
|
|
107
|
-
|
|
108
|
-
<path d="M1045 270 L1018 270 L1018 708 L320 708 L320 604 L290 604" fill="none" stroke="#dc2626" stroke-width="1.8" marker-end="url(#rose)"/>
|
|
109
|
-
<rect x="925" y="681" width="88" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="969" y="696" text-anchor="middle" class="label">atomic state</text>
|
|
110
|
-
|
|
111
|
-
<rect x="1045" y="465" width="365" height="260" rx="14" fill="#faf5ff" stroke="#c084fc" stroke-width="1.6"/>
|
|
112
|
-
<text x="1065" y="492" fill="#7e22ce" font-size="12" font-weight="700" letter-spacing=".08em">GIT RELEASE PLANE</text>
|
|
113
|
-
<text x="1227" y="535" text-anchor="middle" class="node-title">定义与 Skill 的版本面</text>
|
|
114
|
-
<text x="1080" y="574" class="node-sub">• Agent Definition / Skill 源码与快照</text>
|
|
115
|
-
<text x="1080" y="603" class="node-sub">• 候选改进、评审、发布、回滚</text>
|
|
116
|
-
<text x="1080" y="632" class="node-sub">• 人可干预的语义 checkpoint 导出</text>
|
|
117
|
-
<rect x="1080" y="656" width="295" height="42" rx="8" fill="#ffffff" stroke="#d8b4fe" stroke-width="1.2"/>
|
|
118
|
-
<text x="1227" y="675" text-anchor="middle" fill="#7e22ce" font-size="12" font-weight="700">Git ≠ runtime lock / Wait / PCB authority</text>
|
|
119
|
-
<text x="1227" y="692" text-anchor="middle" class="small">发布是双向的,运行控制仍归宿主</text>
|
|
120
|
-
|
|
121
|
-
<path d="M1045 585 L1000 585 L1000 600 L970 600" fill="none" stroke="#7c3aed" stroke-width="1.7" stroke-dasharray="5 3" marker-end="url(#purple)"/>
|
|
122
|
-
<rect x="980" y="556" width="63" height="20" rx="5" fill="#ffffff" opacity=".96"/><text x="1011" y="571" text-anchor="middle" class="label">publish</text>
|
|
123
|
-
|
|
124
|
-
<rect x="30" y="765" width="1380" height="78" rx="10" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1"/>
|
|
125
|
-
<text x="50" y="792" fill="#111827" font-size="13" font-weight="700">介质选择原则</text>
|
|
126
|
-
<text x="50" y="821" fill="#334155" font-size="14">当前事项 → Session | 可统计业务事实 → 原生表/任务/日历 | 稳定可复用知识 → 文档/Wiki | 并发与副作用 → Control State | 发布与回滚 → Git</text>
|
|
127
|
-
|
|
128
|
-
<line x1="40" y1="873" x2="76" y2="873" stroke="#059669" stroke-width="1.8" marker-end="url(#green)"/><text x="84" y="877" class="small">读取</text>
|
|
129
|
-
<line x1="150" y1="873" x2="186" y2="873" stroke="#059669" stroke-width="1.6" stroke-dasharray="5 3" marker-end="url(#green)"/><text x="194" y="877" class="small">写入</text>
|
|
130
|
-
<line x1="265" y1="873" x2="301" y2="873" stroke="#7c3aed" stroke-width="1.7" marker-end="url(#purple)"/><text x="309" y="877" class="small">压缩 / 发布</text>
|
|
131
|
-
<line x1="440" y1="873" x2="476" y2="873" stroke="#dc2626" stroke-width="1.8" marker-end="url(#rose)"/><text x="484" y="877" class="small">原子控制</text>
|
|
132
|
-
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: dingtalk-agent-compose
|
|
3
|
-
description: 当用户要把 GitHub 仓库、本地文件夹或钉钉文档定义成一个 XXX Agent,或要审计、补齐、优化 Agent 的 AGENTS.md、本体职责、岗位 Skills、记忆/知识/产物存储与 DWS 权限绑定时使用。即使尚未 init Workspace,也按 dingtalk-agent 的 AgentDefinition 范式给出可运行的最小装配方案;不负责事件触发器。
|
|
4
|
-
compatibility: Requires dingtalk-agent on PATH; remote DingTalk documents require authenticated dws.
|
|
5
|
-
metadata:
|
|
6
|
-
version: "0.5.0"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# 装配一个可工作的 XXX Agent
|
|
10
|
-
|
|
11
|
-
把用户已有的仓库、目录或钉钉文档整理成两部分:**本体(body + role skills)**和**存储路由(memory + knowledge + artifacts + private state)**。复用 dta 的 Basic Behavior、Invocation、Session/Run/Wait 与 Action Gate,不复制一套新运行时。
|
|
12
|
-
|
|
13
|
-
## 工作顺序
|
|
14
|
-
|
|
15
|
-
1. 识别来源和运行方式:GitHub 先由宿主 clone/checkout,本 Skill 不接管凭证;本地目录直接读取;钉钉文档只承担 memory/knowledge 等远端语义状态。本体 `AGENTS.md` 与 Role Skills 保持在本地、可版本化。
|
|
16
|
-
2. 对已有仓库优先运行 `dta agent enhance --project-name <name> --role-skill <role> --dry-run --json`。它只生成 `agent-enhancement-plan@1`,不会写文件、访问 DWS 或创建 Trigger。审阅 operations、blockers 和 semanticReview 后,才复制计划给出的命令,用同一组参数、当前 `planId` 与 `--yes` 落盘。
|
|
17
|
-
3. apply 只允许本地文件副作用:先把被更新的旧文件备份到 `.dingtalk-agent/backups/agent-enhance/<operationId>/`,再写入并按 hash 回读;自定义 private state 目录必须同步进入 `.gitignore`。输入漂移、planId 过期、非法 Role 路径、未知 OpenCode instruction、路径越界或 symlink 都必须 fail closed。不要跳过 plan,也不要把 `--yes` 写进无人审阅的默认脚本。
|
|
18
|
-
4. 审核本体:优先使用 `AGENTS.md` 表达长期身份、职责、交付物、拒绝边界和协作方式。CLI 只补骨架,绝不虚构这些语义;只要 `AGENTS.md` 或 Role Skill 仍含模板 `<...>`,`agent audit` 必须保持 `partial`。
|
|
19
|
-
5. 审核能力:Basic Behavior 是所有钉钉员工共享且**每个 Session 必须加载**的协议;岗位知识和流程拆到独立 Role/Workflow Skill。目录可发现不等于正文已加载,必须为目标 Agent Host 生成可验证的加载合同。不要把 FDE、招聘、事故处理等岗位方法写回 Basic Skill。
|
|
20
|
-
6. 审核存储:明确工作记忆、业务事实、长期知识、产物和宿主私有控制状态分别去哪。介质可以换,语义层与控制状态不能混。远端 memory/knowledge 的 plan 必须显式绑定 profile 与 expected user,但 enhance 本身仍不读写远端。
|
|
21
|
-
7. 运行 `dta bootstrap --bindings agent.bindings.json --json` 和 `dta agent audit --bindings agent.bindings.json --require-skill <role> --json`。静态配置和真实语义通过后再加 `--verify-load --yes`;不能把“写出了文件”或“目录存在”当成装配完成。
|
|
22
|
-
|
|
23
|
-
## Agent Host 加载合同
|
|
24
|
-
|
|
25
|
-
装配结果必须同时存在两层:`skills/` 是 dta 的 Definition/发布源,目标 Host 的原生目录是运行时 exposure。只写一句“请应用某 Skill”或只把 `SKILL.md` 放进目录都不是完成。
|
|
26
|
-
|
|
27
|
-
OpenCode 的最小合同是:
|
|
28
|
-
|
|
29
|
-
```text
|
|
30
|
-
.agents/skills/dingtalk-basic-behavior/SKILL.md
|
|
31
|
-
opencode.json#instructions = [".agents/skills/dingtalk-basic-behavior/SKILL.md"]
|
|
32
|
-
opencode.json#permission.skill.dingtalk-basic-behavior = "allow"
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Why:OpenCode 会发现 `.agents/skills/<name>/SKILL.md`,但 Skill 正文默认按需加载;Basic Behavior 是每条消息都要经过的社会与安全协议,不能依赖模型是否主动调用 `skill`。因此 Basic 用 `instructions` 强制注入,Role Skill 保持按任务触发。完整配置、Role Skill exposure 和验收命令见 [opencode-host-contract.md](references/opencode-host-contract.md),可从 [opencode.template.json](assets/opencode.template.json) 裁剪。
|
|
36
|
-
|
|
37
|
-
任何 `ready` 结论都必须保留以下证据:Basic Skill 的 name/version/hash、Host resolved config、项目内发现路径和一次随机 load probe。`agent-audit@1` 会把 Definition、Storage、Host exposure 与 load gate 分开报告;load gate 失败时,后续回答再像员工也只能算本体 Prompt 命中,不能算 Skill 生效。
|
|
38
|
-
|
|
39
|
-
## 可复制装配命令
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
# GitHub 仓库由宿主先 checkout;默认只生成改造计划,零写入
|
|
43
|
-
dta agent enhance --project-name <agent-name> \
|
|
44
|
-
--role-skill <role-skill-name> --dry-run --json
|
|
45
|
-
|
|
46
|
-
# 审阅后执行 plan.apply.command;必须使用当前 planId + 显式 yes
|
|
47
|
-
dta agent enhance --project-name <agent-name> \
|
|
48
|
-
--role-skill <role-skill-name> \
|
|
49
|
-
--plan-id <current-plan-id> --yes --json
|
|
50
|
-
|
|
51
|
-
# 填完 AGENTS.md 与 Role Skill 的真实身份、职责、SOP 和验收后再水合
|
|
52
|
-
dta bootstrap --bindings agent.bindings.json --json
|
|
53
|
-
|
|
54
|
-
# 静态审计只读本地文件,不调用模型、不访问 DWS
|
|
55
|
-
dta agent audit --bindings agent.bindings.json \
|
|
56
|
-
--require-skill <role-skill-name> --json
|
|
57
|
-
|
|
58
|
-
# 取得 Basic Skill 真实加载证据;只调用本地 OpenCode,不访问钉钉
|
|
59
|
-
dta agent audit --bindings agent.bindings.json \
|
|
60
|
-
--require-skill <role-skill-name> --verify-load --yes --json
|
|
61
|
-
|
|
62
|
-
# 远端 memory/knowledge 另用 storage eval 取得身份与独立回读证据
|
|
63
|
-
dta agent audit --bindings agent.bindings.json \
|
|
64
|
-
--require-skill <role-skill-name> \
|
|
65
|
-
--load-report <agent-audit-load-evidence.json> \
|
|
66
|
-
--remote-report <remote-state-report.json> --json
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
`agent.bindings.json` 是可版本化的推荐入口,schema 为 `dingtalk-agent/agent-bindings@1`;它不保存凭据,只保存 Provider 路由和可信身份约束。等价配置仍可由宿主 `context`、环境变量或 Workspace manifest 提供。优先级见 [agent-definition-contract.md](references/agent-definition-contract.md),介质选择见 [storage-routing.md](references/storage-routing.md)。
|
|
70
|
-
|
|
71
|
-
空目录或手工装配仍可从本目录的 bindings、AGENTS、Role Skill 与 OpenCode assets 开始,但已有仓库必须优先用 enhance 做合并、备份和漂移保护,避免机械复制覆盖用户内容。
|
|
72
|
-
|
|
73
|
-
## 从材料落成 Prepared Agent
|
|
74
|
-
|
|
75
|
-
开发者授权创建长期 Workspace 时,优先整理成下面的最小目录:
|
|
76
|
-
|
|
77
|
-
```text
|
|
78
|
-
my-agent/
|
|
79
|
-
├── AGENTS.md 身份、职责、交付、拒绝边界
|
|
80
|
-
├── agent.bindings.json Definition 与语义存储路由
|
|
81
|
-
├── opencode.json OpenCode 强制 Basic Skill 的 Host 合同
|
|
82
|
-
├── .agents/skills/ OpenCode 的 Skill exposure
|
|
83
|
-
├── MEMORY.md 已评审的长期语义记忆
|
|
84
|
-
├── knowledge/INDEX.md 知识入口
|
|
85
|
-
├── skills/<role>/SKILL.md 一个或多个岗位 Skill
|
|
86
|
-
└── fields/default/field.json 可信会话、出口与演进边界
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
普通本地 Agent 到这里即可工作,不需要 `dta init`。只有开发者明确要 Prepared Run、可信事件与长期 Workspace 时才初始化;初始化不得覆盖已有材料。创建 Session 后 Definition 和 Skill manifest 已冻结:新加 Skill 由新 Session 生效,绝不热注入当前 Run。
|
|
90
|
-
|
|
91
|
-
仓库内的 `examples/agents/fde-coach` 与 `examples/agents/release-manager` 是同一内核的两份最小实例。复制时只替换本体、Role Skills、Field/存储绑定和 DWS authority;Basic Behavior、Session/Run/Wait、双半闸门与 Receipt 协议保持共享。
|
|
92
|
-
|
|
93
|
-
## 本体审核标准
|
|
94
|
-
|
|
95
|
-
本体至少让另一个 Agent 能回答:我是谁;我对谁服务;我负责交付什么;什么不归我;何时需要确认;允许使用哪些 Role Skills 和资源。可从 [AGENTS.template.md](assets/AGENTS.template.md) 最小化裁剪,不要用一篇巨型 Prompt 混入 Basic Skill 的完整行为答案、事件监听、API 参数、运行时锁或临时任务进度。
|
|
96
|
-
|
|
97
|
-
## 输出格式
|
|
98
|
-
|
|
99
|
-
```text
|
|
100
|
-
状态:ready / partial
|
|
101
|
-
本体:来源、缺口、建议改动
|
|
102
|
-
能力:Basic Skill 强制加载合同 + Role Skills(可叠加项)
|
|
103
|
-
存储:memory / knowledge / artifacts / private state
|
|
104
|
-
权限:DWS profile、expected user、写入 allowlist(若有)
|
|
105
|
-
命令:一组可复制的 bootstrap / agent audit 命令
|
|
106
|
-
验收:`agent-audit@1` ready;Host resolved config 命中 Basic Skill;随机 load probe 精确通过;Definition hash 稳定;远端模式另有身份与独立 readback;两 Agent 不串 Skill/Session/存储/权限;无可信 target 不外发
|
|
107
|
-
非范围:事件监听、定时器、Webhook
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
若来源不完整,默认给出 `partial` 和最小缺口;不要为了得到 `ready` 擅自虚构身份、职责、资源 ID 或权限。`enhance plan ready` 只表示“结构改造可以安全执行”,不等于 `agent-audit@1 ready`。
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# <Agent 名称>
|
|
2
|
-
|
|
3
|
-
## 身份与服务对象
|
|
4
|
-
|
|
5
|
-
- 我是:<岗位/角色>
|
|
6
|
-
- 服务:<人群、团队或工作场域>
|
|
7
|
-
- 目标:<长期目标>
|
|
8
|
-
|
|
9
|
-
## 职责
|
|
10
|
-
|
|
11
|
-
- Owns:<主动负责的事项>
|
|
12
|
-
- Delivers:<可观察的交付物>
|
|
13
|
-
- Refuses:<明确不做或必须升级确认的事项>
|
|
14
|
-
|
|
15
|
-
## 协作方式
|
|
16
|
-
|
|
17
|
-
- 基础钉钉行为由 Agent Host 强制加载 `dingtalk-basic-behavior`;本文不复制其行为规则。
|
|
18
|
-
- 通过 <Role Skill names> 执行岗位方法;这些 Skill 必须进入目标 Host 的原生 exposure。
|
|
19
|
-
- OpenCode 装配必须由 `opencode.json#instructions` 注入 Basic Skill,并通过 load probe 验收。
|
|
20
|
-
|
|
21
|
-
## 资源与记忆边界
|
|
22
|
-
|
|
23
|
-
- 工作记忆:<route>
|
|
24
|
-
- 长期知识:<route>
|
|
25
|
-
- 产物:<route>
|
|
26
|
-
- 不在本文保存运行时锁、幂等键、Wait 或 Receipt。
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: <role-skill-name>
|
|
3
|
-
description: 当需要执行 <岗位职责或工作流> 时使用;不负责基础钉钉响应资格、目标选择或宿主控制状态。
|
|
4
|
-
metadata:
|
|
5
|
-
version: "0.1.0"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# <Role Skill 名称>
|
|
9
|
-
|
|
10
|
-
## 适用范围
|
|
11
|
-
|
|
12
|
-
- 负责:<领域判断、输入与交付物>
|
|
13
|
-
- 不负责:事件触发、身份推断、消息目标、Wait/Receipt/锁与幂等
|
|
14
|
-
|
|
15
|
-
## 工作流程
|
|
16
|
-
|
|
17
|
-
1. 检查 <领域输入> 是否完整;只在阻塞时问一个问题。
|
|
18
|
-
2. 按 <领域方法/SOP> 形成可核验产物。
|
|
19
|
-
3. 回读产物或权威系统,区分“已生成”“已保存”“已验证完成”。
|
|
20
|
-
|
|
21
|
-
## 验收
|
|
22
|
-
|
|
23
|
-
- <可观察结果 1>
|
|
24
|
-
- <可观察结果 2>
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "dingtalk-agent-compose",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "我有一个 GitHub 上的招聘助手仓库,想用 dta 变成可以持续工作的 Agent。请告诉我最小要补什么,触发器先不做。",
|
|
7
|
-
"expected_output": "要求宿主先 checkout;检查 AGENTS.md、Role Skills、memory/knowledge/artifacts/private state 与 authority;不自动 init,不把触发器纳入 dta。",
|
|
8
|
-
"files": [],
|
|
9
|
-
"expectations": [
|
|
10
|
-
"使用 agent.bindings@1 显式声明本体、能力和存储",
|
|
11
|
-
"普通本地 Agent 不自动 init",
|
|
12
|
-
"事件触发器明确排除在装配范围外"
|
|
13
|
-
]
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"id": 2,
|
|
17
|
-
"prompt": "这个本地目录已经有 AGENTS.md 和 skills/,帮我判断能不能作为 XXX Agent,并给出验证命令。",
|
|
18
|
-
"expected_output": "运行 bootstrap 和 agent audit;依据稳定 check/missing/repairs 判断;说明 Basic 与 Role Skills 可叠加及 Session 冻结边界。",
|
|
19
|
-
"files": [],
|
|
20
|
-
"expectations": [
|
|
21
|
-
"先生成或复核 agent.bindings.json",
|
|
22
|
-
"使用 dta agent audit 输出 partial/ready 和精确修复项",
|
|
23
|
-
"Basic 与 Role Skills 的加载策略被清楚区分"
|
|
24
|
-
]
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"id": 3,
|
|
28
|
-
"prompt": "员工本体和 Role Skills 放本地,记忆与知识放两篇钉钉文档,怎么配置和验收?",
|
|
29
|
-
"expected_output": "使用远端 bindings 模板,memory/knowledge 配 dingtalk-doc,本体与 Skills 保持本地;控制状态仍放宿主私有原子存储;storage eval 独立验收后把报告交给 agent audit。",
|
|
30
|
-
"files": [],
|
|
31
|
-
"expectations": [
|
|
32
|
-
"本体与 Role Skills 保持本地可版本化",
|
|
33
|
-
"远端只承载语义状态,不承载控制状态或凭据",
|
|
34
|
-
"静态 audit 不触发 DWS,远端 ready 依赖独立 readback 报告"
|
|
35
|
-
]
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"id": 4,
|
|
39
|
-
"prompt": "我要把这个招聘 Agent 交给 OpenCode 跑,仓库里已经有 AGENTS.md 和 skills/recruiting/SKILL.md。请完成 Host 组装并告诉我怎么证明 Basic Skill 每轮真的加载了。",
|
|
40
|
-
"expected_output": "创建 .agents/skills exposure;用 opencode.json#instructions 强制注入 dingtalk-basic-behavior,并允许 Role Skill;通过 resolved config、项目发现路径、hash/version 和随机 load probe 验收,不能只说目录存在。",
|
|
41
|
-
"files": [],
|
|
42
|
-
"expectations": [
|
|
43
|
-
"Basic source 与 exposure 的 name/version/hash 一致",
|
|
44
|
-
"Basic instruction 唯一且 permission=allow",
|
|
45
|
-
"dta agent audit --verify-load --yes 取得随机 probe 证据"
|
|
46
|
-
]
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"id": 5,
|
|
50
|
-
"prompt": "我在一个空目录里,想在一小时内做出本地发布经理 Agent。请给我从文件到验收通过的最短路径。",
|
|
51
|
-
"expected_output": "创建 AGENTS.md、一个 release-manager Role Skill、MEMORY.md、knowledge/INDEX.md、agent.bindings.json、OpenCode exposure/config;先静态 audit,再 verify-load;不要求 Workspace init 或 DWS。",
|
|
52
|
-
"files": [],
|
|
53
|
-
"expectations": [
|
|
54
|
-
"给出本地 bindings 与最小文件树",
|
|
55
|
-
"先 partial 修复再进行有模型的 load 验收",
|
|
56
|
-
"最终 ready 以 Definition、Storage、Host 和 load 四类证据共同决定"
|
|
57
|
-
]
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"id": 6,
|
|
61
|
-
"prompt": "我把 memory 改成钉钉文档后,agent audit 能不能只看本地缓存就直接说 ready?",
|
|
62
|
-
"expected_output": "不能;静态 audit 默认不读 DWS且保持 partial,必须由授权的 storage eval 验证 expected user、文档类型、hash、独立回读和模型使用,再通过 --remote-report 绑定证据。",
|
|
63
|
-
"files": [],
|
|
64
|
-
"expectations": [
|
|
65
|
-
"拒绝把缓存或 manifest 当远端事实",
|
|
66
|
-
"要求 identity/type/hash/readback/model-use 独立证据",
|
|
67
|
-
"控制状态保持 host atomic store 且不远端投影"
|
|
68
|
-
]
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"id": 7,
|
|
72
|
-
"prompt": "这个仓库已经有自己的 opencode.json、.gitignore 和一些 Skills。请帮我把它增强成发布经理 Agent,但先让我看会改什么,不要覆盖已有配置。",
|
|
73
|
-
"expected_output": "先运行 agent enhance dry-run,审阅稳定 plan;不手工覆盖已有文件。确认后用当前 plan-id + yes 应用,检查操作级备份、语义合并和写后 hash;模板语义仍需人工完成。",
|
|
74
|
-
"files": [],
|
|
75
|
-
"expectations": [
|
|
76
|
-
"默认 plan 对本地文件、DWS 和 Trigger 都零副作用",
|
|
77
|
-
"apply 必须绑定当前 planId,非法 Role 路径、输入漂移或 symlink 时 fail closed",
|
|
78
|
-
"保留 OpenCode 未知键和已有权限;非字符串 instruction 拒绝而不是静默删除",
|
|
79
|
-
"备份与自定义 private state 都被 gitignore,且 plan ready 不冒充 Agent ready"
|
|
80
|
-
]
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
"id": 8,
|
|
84
|
-
"prompt": "用 dta 给我生成了 AGENTS.md 和招聘 Skill,为什么 audit 还是 partial?文件不是都已经创建了吗?",
|
|
85
|
-
"expected_output": "解释结构落盘不是语义完成:模板中的身份、职责、交付物、拒绝边界、领域 SOP 和验收仍是占位符;填入真实内容后复跑静态 audit,最后用 verify-load 证明 Basic 真加载。",
|
|
86
|
-
"files": [],
|
|
87
|
-
"expectations": [
|
|
88
|
-
"指出 definition.semantic-contract 与 skill.role.<name>.semantic 是独立硬门禁",
|
|
89
|
-
"不替用户虚构岗位语义或为了 ready 删除断言",
|
|
90
|
-
"区分文件存在、语义完整、Host exposure 和模型真加载四个结论"
|
|
91
|
-
]
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# OpenCode Agent Host 加载合同
|
|
2
|
-
|
|
3
|
-
## 两个目录面
|
|
4
|
-
|
|
5
|
-
```text
|
|
6
|
-
skills/<role>/SKILL.md dta Definition / Git 发布源
|
|
7
|
-
.agents/skills/<role>/SKILL.md OpenCode 项目 exposure
|
|
8
|
-
.agents/skills/dingtalk-basic-behavior OpenCode 必需 Basic exposure
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
两者允许通过宿主物化或相对 symlink 关联,但不能长期手工维护两份独立内容。装配时记录源路径、目标路径和 `SKILL.md` hash;源升级后重新物化并重新评测。
|
|
12
|
-
|
|
13
|
-
## Basic 必须无条件加载
|
|
14
|
-
|
|
15
|
-
OpenCode 原生 Skill 是按需加载机制。岗位 Skill 适合按任务触发,Basic Behavior 不适合:响应资格、目标边界、澄清、完成声明和记忆路由必须在每次处理消息前成立。
|
|
16
|
-
|
|
17
|
-
在 Agent 根目录创建:
|
|
18
|
-
|
|
19
|
-
```json
|
|
20
|
-
{
|
|
21
|
-
"$schema": "https://opencode.ai/config.json",
|
|
22
|
-
"instructions": [
|
|
23
|
-
".agents/skills/dingtalk-basic-behavior/SKILL.md"
|
|
24
|
-
],
|
|
25
|
-
"permission": {
|
|
26
|
-
"skill": {
|
|
27
|
-
"dingtalk-basic-behavior": "allow"
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
如果已有 `opencode.json`,合并 `instructions` 和 `permission.skill`,不要覆盖模型、Agent、工具、插件或已有 Role Skill 配置。Basic 路径只能出现一次。
|
|
34
|
-
|
|
35
|
-
## Role Skill 按职责叠加
|
|
36
|
-
|
|
37
|
-
把 Agent Definition 声明的每个 Role Skill 暴露到 `.agents/skills/<name>/SKILL.md`,目录名必须等于 frontmatter `name`,并在 `permission.skill` 中允许。Role Skill 不默认加入全局 `instructions`;只有明确要求该岗位方法贯穿每个 Session 时,才把它升级为 required instruction,并在 Definition 中记录原因。
|
|
38
|
-
|
|
39
|
-
## 精准验收
|
|
40
|
-
|
|
41
|
-
静态检查:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
opencode debug config
|
|
45
|
-
opencode debug skill
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
必须同时满足:
|
|
49
|
-
|
|
50
|
-
1. resolved `instructions` 包含 Basic Skill 的项目相对路径;
|
|
51
|
-
2. `debug skill` 的 `location` 指向当前 Agent 根目录,而不是开发机上同名全局 Skill;
|
|
52
|
-
3. 物化 `SKILL.md` 的 name/version/hash 与装配源一致;
|
|
53
|
-
4. 用隔离 Workspace 为 Basic 正文追加每 Run 随机 probe,OpenCode 必须精确回显,without-skill baseline 不得命中;
|
|
54
|
-
5. 行为题不在 `AGENTS.md` 中复制预期答案,load gate 与行为分数分开。
|
|
55
|
-
|
|
56
|
-
推荐先执行无钉钉副作用的 OpenCode A/B,再晋级 DWS Robot smoke。目录存在、模型知道 Skill 名、回答碰巧正确,都不能替代以上证据。
|
|
57
|
-
|
|
58
|
-
推荐用统一审计入口保存这四类证据:
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
dta agent audit --bindings agent.bindings.json \
|
|
62
|
-
--require-skill <role-skill-name> --verify-load --yes --json
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
静态检查失败时报告为 `partial`,并列出精确 check ID 与修复动作;随机 probe、resolved config、发现路径或 canonical hash 任一失败都不能得到 `ready`。该命令只运行隔离 OpenCode 评测,`dingtalkSideEffect` 固定为 `false`。
|