@xdxer/dingtalk-agent 0.1.4-beta.7 → 0.1.4-beta.9
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 +35 -0
- package/README.en.md +395 -0
- package/README.md +466 -36
- package/dist/bin/dingtalk-agent.js +1071 -340
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/actions.js +98 -14
- package/dist/src/actions.js.map +1 -1
- package/dist/src/agent-audit.js +460 -0
- package/dist/src/agent-audit.js.map +1 -0
- package/dist/src/agent-bindings.js +132 -0
- package/dist/src/agent-bindings.js.map +1 -0
- package/dist/src/agent-definition.js +182 -0
- package/dist/src/agent-definition.js.map +1 -0
- package/dist/src/agent-enhance.js +678 -0
- package/dist/src/agent-enhance.js.map +1 -0
- package/dist/src/bootstrap.js +125 -17
- package/dist/src/bootstrap.js.map +1 -1
- package/dist/src/development-workspace.js +729 -0
- package/dist/src/development-workspace.js.map +1 -0
- package/dist/src/dws.js +145 -0
- package/dist/src/dws.js.map +1 -1
- package/dist/src/eval-evidence.js +193 -0
- package/dist/src/eval-evidence.js.map +1 -0
- package/dist/src/init.js +1 -1
- package/dist/src/init.js.map +1 -1
- package/dist/src/invocation.js +36 -0
- package/dist/src/invocation.js.map +1 -0
- package/dist/src/lab.js +679 -0
- package/dist/src/lab.js.map +1 -0
- package/dist/src/lease.js +100 -0
- package/dist/src/lease.js.map +1 -0
- package/dist/src/memory/candidates.js +451 -0
- package/dist/src/memory/candidates.js.map +1 -0
- package/dist/src/memory/completion-evidence.js +536 -0
- package/dist/src/memory/completion-evidence.js.map +1 -0
- package/dist/src/memory/operational.js +263 -0
- package/dist/src/memory/operational.js.map +1 -0
- package/dist/src/memory/remote-state.js +478 -0
- package/dist/src/memory/remote-state.js.map +1 -0
- package/dist/src/memory/task-checkpoints.js +204 -0
- package/dist/src/memory/task-checkpoints.js.map +1 -0
- package/dist/src/multica-deploy.js +1480 -0
- package/dist/src/multica-deploy.js.map +1 -0
- package/dist/src/multica-provider.js +685 -0
- package/dist/src/multica-provider.js.map +1 -0
- package/dist/src/opencode-evals.js +1062 -0
- package/dist/src/opencode-evals.js.map +1 -0
- package/dist/src/opencode-provider.js +531 -0
- package/dist/src/opencode-provider.js.map +1 -0
- package/dist/src/opencode-workspace.js +197 -0
- package/dist/src/opencode-workspace.js.map +1 -0
- package/dist/src/perception.js +225 -0
- package/dist/src/perception.js.map +1 -0
- package/dist/src/personal-event-evals.js +595 -0
- package/dist/src/personal-event-evals.js.map +1 -0
- package/dist/src/promotion.js +786 -0
- package/dist/src/promotion.js.map +1 -0
- package/dist/src/remote-semantic-state-live-evals.js +888 -0
- package/dist/src/remote-semantic-state-live-evals.js.map +1 -0
- package/dist/src/remote-semantic-state-worker.js +38 -0
- package/dist/src/remote-semantic-state-worker.js.map +1 -0
- package/dist/src/remote-state-evals.js +501 -0
- package/dist/src/remote-state-evals.js.map +1 -0
- package/dist/src/response-gate.js +51 -0
- package/dist/src/response-gate.js.map +1 -0
- package/dist/src/robot-evals.js +770 -0
- package/dist/src/robot-evals.js.map +1 -0
- package/dist/src/sessions.js +66 -105
- package/dist/src/sessions.js.map +1 -1
- package/dist/src/skill-manager.js +25 -16
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/skills.js.map +1 -1
- package/dist/src/storage-evals.js +26 -0
- package/dist/src/storage-evals.js.map +1 -0
- package/dist/src/types.js.map +1 -1
- package/dist/src/waits.js +5 -1
- package/dist/src/waits.js.map +1 -1
- package/dist/src/workspace.js +28 -3
- package/dist/src/workspace.js.map +1 -1
- package/docs/INSTALLATION.md +47 -0
- package/docs/SECOND-AGENT-ACCEPTANCE.md +62 -0
- package/docs/architecture/agent-memory-topology.png +0 -0
- package/docs/architecture/agent-memory-topology.svg +132 -0
- package/docs/architecture/general-agent-kernel-topology.png +0 -0
- package/docs/architecture/general-agent-kernel-topology.svg +149 -0
- package/docs/architecture/provider-bound-development-workspace.png +0 -0
- package/docs/architecture/provider-bound-development-workspace.svg +141 -0
- package/docs/architecture/task-completion-gate.png +0 -0
- package/docs/architecture/task-completion-gate.svg +191 -0
- package/docs/schemas/agent-audit-load-evidence.schema.json +14 -0
- package/docs/schemas/agent-audit.schema.json +92 -0
- package/docs/schemas/agent-bindings.schema.json +54 -0
- package/docs/schemas/agent-definition.schema.json +78 -0
- package/docs/schemas/agent-enhancement-plan.schema.json +88 -0
- package/docs/schemas/agent-enhancement-receipt.schema.json +37 -0
- package/docs/schemas/enriched-invocation.schema.json +46 -0
- package/docs/schemas/eval-candidate-plan.schema.json +28 -0
- package/docs/schemas/eval-candidate-result.schema.json +20 -0
- package/docs/schemas/eval-candidate.schema.json +30 -0
- package/docs/schemas/invocation.schema.json +19 -0
- package/docs/schemas/memory-candidate-proposal.schema.json +18 -0
- package/docs/schemas/memory-candidate.schema.json +76 -0
- package/docs/schemas/memory-publish-target.schema.json +25 -0
- package/docs/schemas/multica-deployment-list.schema.json +29 -0
- package/docs/schemas/multica-deployment-operation.schema.json +51 -0
- package/docs/schemas/multica-deployment-plan.schema.json +70 -0
- package/docs/schemas/multica-deployment-receipt.schema.json +87 -0
- package/docs/schemas/multica-deployment-status.schema.json +23 -0
- package/docs/schemas/multica-workspace-inspection.schema.json +77 -0
- package/docs/schemas/multica-workspace-plan.schema.json +68 -0
- package/docs/schemas/multica-workspace-resource-list.schema.json +27 -0
- package/docs/schemas/multica-workspace-status.schema.json +34 -0
- package/docs/schemas/observation.schema.json +21 -0
- package/docs/schemas/operational-memory-provider.schema.json +36 -0
- package/docs/schemas/operational-memory-record.schema.json +24 -0
- package/docs/schemas/perception-input.schema.json +56 -0
- package/docs/schemas/project.schema.json +112 -0
- package/docs/schemas/promotion-list.schema.json +36 -0
- package/docs/schemas/promotion-plan.schema.json +60 -0
- package/docs/schemas/promotion-policy.schema.json +29 -0
- package/docs/schemas/promotion-receipt.schema.json +43 -0
- package/docs/schemas/promotion-status.schema.json +23 -0
- package/docs/schemas/release-readiness.schema.json +65 -0
- package/docs/schemas/remote-semantic-state-live-eval.schema.json +60 -0
- package/docs/schemas/remote-semantic-state-manifest.schema.json +79 -0
- package/docs/schemas/remote-semantic-state-provider.schema.json +98 -0
- package/docs/schemas/response-gate.schema.json +20 -0
- package/docs/schemas/task-checkpoint.schema.json +71 -0
- package/docs/schemas/task-completion-evidence.schema.json +154 -0
- package/docs/schemas/workspace-doctor.schema.json +56 -0
- package/docs/schemas/workspace-state.schema.json +39 -0
- package/evals/baselines/2026-07-16/opencode-basic-010-completion-summary.json +123 -0
- package/evals/baselines/2026-07-16/opencode-basic-skill-required-summary.json +69 -0
- package/evals/baselines/2026-07-16/opencode-multi-surface-summary.json +63 -0
- package/evals/baselines/2026-07-16/remote-state-live-summary.json +70 -0
- package/evals/baselines/2026-07-17/agent-enhance-opencode-dogfood-summary.json +98 -0
- package/evals/baselines/2026-07-17/personal-event-live-readiness-summary.json +68 -0
- package/examples/agents/fde-coach/AGENTS.md +26 -0
- package/examples/agents/fde-coach/MEMORY.md +3 -0
- package/examples/agents/fde-coach/fields/default/field.json +24 -0
- package/examples/agents/fde-coach/knowledge/INDEX.md +4 -0
- package/examples/agents/fde-coach/skills/fde-coach/SKILL.md +13 -0
- package/examples/agents/release-manager/AGENTS.md +26 -0
- package/examples/agents/release-manager/MEMORY.md +3 -0
- package/examples/agents/release-manager/fields/default/field.json +24 -0
- package/examples/agents/release-manager/knowledge/INDEX.md +4 -0
- package/examples/agents/release-manager/skills/release-manager/SKILL.md +13 -0
- package/lab/README.md +109 -0
- package/lab/agent-eval/catalog.json +91 -0
- package/lab/agent-eval/classic-failures.json +177 -0
- package/lab/agent-eval/completion-gate-regression.json +99 -0
- package/lab/agent-eval/personal-event-live.example.json +94 -0
- package/lab/agent-eval/remote-semantic-state-live.example.json +70 -0
- package/lab/agent-eval/remote-semantic-state-provider.fixture.json +47 -0
- package/lab/agent-eval/remote-state-workspace/AGENTS.md +8 -0
- package/lab/agent-eval/remote-state-workspace/opencode.json +7 -0
- package/lab/agent-eval/remote-state-workspace/skills/remote-state-operator/SKILL.md +13 -0
- package/lab/agent-eval/remote-state.example.json +31 -0
- package/lab/agent-eval/workspace/AGENTS.md +7 -0
- package/lab/agent-eval/workspace/MEMORY.md +4 -0
- package/lab/agent-eval/workspace/artifacts/pending-review.md +3 -0
- package/lab/agent-eval/workspace/knowledge/INDEX.md +4 -0
- package/lab/agent-eval/workspace/opencode.json +20 -0
- package/lab/manifest.example.json +27 -0
- package/lab/manifest.personal-event.example.json +27 -0
- package/lab/project-workspace/README.md +11 -0
- package/lab/project-workspace/fake-multica-provider.mjs +266 -0
- package/lab/project-workspace/multica-deploy.fixture.json +29 -0
- package/lab/project-workspace/multica-readonly.fixture.json +69 -0
- package/lab/project-workspace/observation.fixture.json +14 -0
- package/lab/project-workspace/opencode-provider-suite.json +65 -0
- package/lab/project-workspace/project.fixture.json +44 -0
- package/lab/project-workspace/promotion-policy.fixture.json +15 -0
- package/lab/robot-eval/pool.example.json +30 -0
- package/lab/robot-eval/suite.json +123 -0
- package/lab/robot-eval/workspace/AGENTS.md +21 -0
- package/lab/robot-eval/workspace/MEMORY.md +3 -0
- package/lab/robot-eval/workspace/knowledge/INDEX.md +5 -0
- package/lab/robot-eval/workspace/opencode.json +22 -0
- package/lab/schemas/agent-eval-catalog.schema.json +47 -0
- package/lab/schemas/lab-manifest.schema.json +70 -0
- package/lab/schemas/personal-event-eval.schema.json +91 -0
- package/lab/schemas/remote-state-eval.schema.json +66 -0
- package/lab/schemas/robot-eval-suite.schema.json +184 -0
- package/lab/schemas/robot-pool.schema.json +56 -0
- package/package.json +30 -14
- package/skills/dingtalk-agent-boot-multica/SKILL.md +40 -0
- package/skills/dingtalk-agent-compose/SKILL.md +110 -0
- package/skills/dingtalk-agent-compose/assets/AGENTS.template.md +26 -0
- package/skills/dingtalk-agent-compose/assets/agent.bindings.dingtalk-doc.template.json +13 -0
- package/skills/dingtalk-agent-compose/assets/agent.bindings.local.template.json +13 -0
- package/skills/dingtalk-agent-compose/assets/opencode.template.json +12 -0
- package/skills/dingtalk-agent-compose/assets/role-skill.template.md +24 -0
- package/skills/dingtalk-agent-compose/evals/evals.json +94 -0
- package/skills/dingtalk-agent-compose/references/agent-definition-contract.md +55 -0
- package/skills/dingtalk-agent-compose/references/opencode-host-contract.md +65 -0
- package/skills/dingtalk-agent-compose/references/storage-routing.md +20 -0
- package/skills/dingtalk-agent-deploy/SKILL.md +60 -0
- package/skills/dingtalk-agent-deploy/references/multica-deployment-contract.md +49 -0
- package/skills/dingtalk-agent-deploy/references/promotion-observation-contract.md +49 -0
- package/skills/dingtalk-agent-eval/SKILL.md +116 -0
- package/skills/dingtalk-agent-eval/assets/eval-catalog.template.json +18 -0
- package/skills/dingtalk-agent-eval/evals/evals.json +61 -0
- package/skills/dingtalk-agent-eval/references/eval-topology.md +34 -0
- package/skills/dingtalk-agent-eval/references/evidence-contract.md +31 -0
- package/skills/dingtalk-agent-eval/references/scenario-taxonomy.md +25 -0
- package/skills/dingtalk-agent-eval/references/storage-modes.md +75 -0
- package/skills/dingtalk-basic-behavior/SKILL.md +63 -3
- package/skills/dingtalk-basic-behavior/assets/memory-candidate-proposal.json +10 -0
- package/skills/dingtalk-basic-behavior/assets/{task-checkpoint.md → task-checkpoint.json} +2 -21
- package/skills/dingtalk-basic-behavior/references/action-contract.md +2 -0
- package/skills/dingtalk-basic-behavior/references/memory-and-evolution.md +15 -1
- package/skills/dingtalk-basic-behavior/references/perception-and-gates.md +28 -0
- package/skills/dingtalk-basic-behavior/references/task-lifecycle.md +32 -7
- package/dist/src/boot.js +0 -70
- package/dist/src/boot.js.map +0 -1
- package/dist/src/duty.js +0 -74
- package/dist/src/duty.js.map +0 -1
- package/dist/src/kb.js +0 -240
- package/dist/src/kb.js.map +0 -1
- package/dist/src/runs.js +0 -79
- package/dist/src/runs.js.map +0 -1
- package/docs/ARCHITECTURE.md +0 -219
- package/docs/MINIMAL-WORKSPACE-V1.md +0 -172
- package/docs/OPEN-SOURCE-REFERENCES.md +0 -107
- package/docs/SELF-TEST.md +0 -252
- package/docs//345/206/205/347/275/221/345/256/236/347/233/270.md +0 -77
- package/evals/baselines/2026-07-14/behavior-summary.json +0 -28
- package/evals/baselines/2026-07-14/contract-summary.json +0 -18
- package/evals/baselines/2026-07-14/live-canary-summary.json +0 -25
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/SKILL.md +0 -72
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/action-contract.md +0 -31
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/event-to-behavior.md +0 -22
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/memory-and-evolution.md +0 -25
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/runtime-modes.md +0 -34
- package/evals/baselines/2026-07-15/task-lifecycle-summary.json +0 -50
- package/evals/evals.json +0 -339
- package/evals/fixtures/dm-ambiguous-send.json +0 -4
- package/evals/fixtures/dm-blocked.json +0 -4
- package/evals/fixtures/dm-clear.json +0 -4
- package/evals/fixtures/dm-discussion.json +0 -4
- package/evals/fixtures/dm-doc-write-no-tool.json +0 -4
- package/evals/fixtures/dm-long-task-ack.json +0 -4
- package/evals/fixtures/dm-nonblocking-gap.json +0 -4
- package/evals/fixtures/dm-structured-task.json +0 -4
- package/evals/fixtures/group.json +0 -10
- package/evals/fixtures/mentioned.json +0 -3
- package/evals/run-contract-evals.mjs +0 -1169
- package/evals/run-shadow-evals.mjs +0 -267
- package/evals/runners/README.md +0 -66
- package/evals/runners/claude-shadow.mjs +0 -533
- package/evals/schemas/action-request.schema.json +0 -77
- package/evals/shadow-evals.json +0 -133
- package/skills/AGENTS.md +0 -104
- package/skills//344/273/273/345/212/241.md +0 -48
- package/skills//345/237/272/347/241/200/350/241/214/344/270/272.md +0 -44
- package/skills//345/277/203/350/267/263.md +0 -79
- package/skills//346/266/210/346/201/257.md +0 -50
- package/skills//347/237/245/350/257/206.md +0 -55
- package/skills//350/257/204/346/265/213.md +0 -62
- package/skills//351/222/211/351/222/211.md +0 -64
- package/templates/ontology/index.md +0 -24
- package/templates/ontology/self/access.md +0 -38
- package/templates/ontology/self/role-spec.md +0 -34
- package/templates/ontology/self/workspace.md +0 -41
package/README.md
CHANGED
|
@@ -2,39 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|
# dingtalk-agent
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**所有钉钉数字员工共享的行为内核。**
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/@xdxer/dingtalk-agent)
|
|
8
8
|
[](https://github.com/D1-2004/dingtalk-agent/actions/workflows/ci.yml)
|
|
9
9
|
[](https://nodejs.org/)
|
|
10
10
|
[](LICENSE)
|
|
11
11
|
|
|
12
|
-
[快速开始](#两分钟开始) · [
|
|
12
|
+
[定位](#定位) · [快速开始](#两分钟开始) · [所有 Agent](#从一个-agent-到所有-agent) · [双半闸门](#闸门的两半) · [三层记忆](#三层语义记忆) · [真实联调](#真实世界联调)
|
|
13
|
+
|
|
14
|
+
[English](README.en.md) · 简体中文
|
|
13
15
|
|
|
14
16
|
</div>
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
## 定位
|
|
19
|
+
|
|
20
|
+
**DWS 给 Agent 钉钉的系统调用;dingtalk-agent(dta)给所有 Agent 一套可继承、可冻结、可验证的员工行为内核。** 它不负责事件从哪里来,也不复制钉钉能力;它从标准化 Invocation 开始,把员工定义、感知补齐、响应资格、Session/Run 状态、Action 闸门和效果证据组织为一个 Skill-first 行为容器。
|
|
21
|
+
|
|
22
|
+

|
|
17
23
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
```text
|
|
25
|
+
Agent Host + dta Kernel + Agent Definition + Basic Behavior + Role Skills + DWS
|
|
26
|
+
= 一个可以持续工作的钉钉数字员工
|
|
27
|
+
```
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
| 层 | 负责什么 | 不负责什么 |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| **Agent Definition** | 我是谁、负责什么、服务谁、能用哪些 Skill/资源/权限 | 不保存当前 Run,不从消息正文猜 ID |
|
|
32
|
+
| **Basic + Role Skills** | 何时说/问/静默,以及岗位任务怎么做 | 不绕过身份、目标和副作用门禁 |
|
|
33
|
+
| **dta Kernel** | Invocation、感知补齐、Session/Run/Wait、Action Gate、Receipt | 不内置模型,不监听所有事件,不复制 DWS |
|
|
34
|
+
| **DWS** | 消息、文档、待办、日历、表格等平台能力 | 不替 Agent 决定应不应该做、对谁做 |
|
|
23
35
|
|
|
24
|
-
|
|
36
|
+
Claude Code、Codex 或其他 Agent Host 都能使用这套内核;触发 Adapter、模型、沙箱、岗位 Skill 与存储 Provider 都可以替换。
|
|
25
37
|
|
|
26
38
|
## 为什么需要它
|
|
27
39
|
|
|
28
|
-
|
|
40
|
+
如果开发者只是偶尔手工调用一次钉钉能力,DWS 已经足够;如果要把 Agent 逐步发展成真正干活的数字员工,还必须长期维护**员工本体 + 员工状态 + 受约束的行动边界**。“会调用钉钉 API”不等于“会像员工一样工作”,真实协作还要求 Agent:
|
|
29
41
|
|
|
30
42
|
- 群里未被提及时默认不抢话,被 `@` 或私聊时才获得响应资格;
|
|
31
43
|
- 信息完整就直接交付,只有真正阻塞时才问一个问题;
|
|
32
44
|
- 不从消息正文猜收件人、身份、文档 ID 或权限;
|
|
33
45
|
- 长任务能确认收到、等待依赖、从下一条事件继续,而不是假装一直在线;
|
|
34
46
|
- 区分“命令执行过”“平台写入成功”“回读可见”和“对方确认”;
|
|
35
|
-
-
|
|
47
|
+
- 将任务状态、长期记忆、运行时锁和幂等回执放在正确的介质。
|
|
36
48
|
|
|
37
|
-
|
|
49
|
+
本项目把这些约束从巨型 Prompt 中拆出来:**Skill 劝,CLI 拦,DWS 做。** 必须成立的规则进入代码;需要语义判断的行为留在 Skill;具体钉钉产品能力继续由 DWS 执行。
|
|
50
|
+
|
|
51
|
+
> beta.9 集成线已完成 Basic 0.10.0/0.9.4 模型回归、宿主签发 Completion Evidence、远端语义状态冷启动与 Live-ready runner、开发者 Golden Path、已有仓库安全 enhance、Provider-bound Workspace W1–W5、Completion grader 加固、Phase 9 personal-event Live-ready runner 与隔离安装验收,共有 60 个确定性合同。Phase 8 的已记录样本通过当时的安全和产物硬门禁,但未证明 0.10.0 有稳定模型增益;Phase 15 又把矛盾完成声明和增益判定收紧为显式 fail-closed 策略,且不重写历史分数。本次 beta 明确豁免真实 personal-event、远端状态与 Multica Live 作为发布门禁,不把本地或 fake-Provider 证据冒充真实平台通过;发布面只包含 npm `beta`、Git Tag 与 GitHub Pre-release,不创建 Trigger 或钉钉/Multica 副作用。
|
|
38
52
|
|
|
39
53
|
## 两分钟开始
|
|
40
54
|
|
|
@@ -72,6 +86,14 @@ dta upgrade --dry-run # 只查看目标版本和将执行的命令
|
|
|
72
86
|
|
|
73
87
|
升级完成后,新的 CLI 会自动重新执行 setup,复核 PATH、DWS、Skill 与三个 Agent 客户端。
|
|
74
88
|
|
|
89
|
+
从源码准备 beta 时,使用确定性 release readiness:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
npm run release:check
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
它会生成真实 npm tarball,在全新 HOME/prefix 中离线安装,再运行 `setup/doctor/bootstrap/lab eval` plan、同 tarball 强制升级和显式回滚 dry-run。测试只用 fake DWS 和 fake skills installer,不发送钉钉消息、不访问 Multica、不创建 Trigger,也不执行 npm publish、Tag 或 GitHub Release。
|
|
96
|
+
|
|
75
97
|
安装后推荐使用短命令 `dta`;完整名称 `dingtalk-agent` 与它完全等价。错误会同时输出原因和一条可复制的 `提示:`,命令或子命令拼错时会给出最接近的建议。
|
|
76
98
|
|
|
77
99
|
安装后,Skill 只有一份 canonical copy:
|
|
@@ -133,6 +155,9 @@ dta prepare --event-file event.json --json
|
|
|
133
155
|
|
|
134
156
|
```bash
|
|
135
157
|
dingtalk-agent bootstrap --storage local-dir:/path/to/workspace --json
|
|
158
|
+
|
|
159
|
+
# 等价的新名称;GitHub 仓库先由宿主 checkout
|
|
160
|
+
dingtalk-agent bootstrap --agent local-dir:/path/to/checkout --json
|
|
136
161
|
```
|
|
137
162
|
|
|
138
163
|
远端内容由 DWS 探测并拉成隐藏的只读快照:
|
|
@@ -144,6 +169,19 @@ dingtalk-agent bootstrap \
|
|
|
144
169
|
--json
|
|
145
170
|
```
|
|
146
171
|
|
|
172
|
+
本体、岗位 Skill 和持久化可以独立路由,不要求绑死在同一介质:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
dta bootstrap \
|
|
176
|
+
--agent local-dir:/path/to/agent \
|
|
177
|
+
--skills local-dir:/path/to/agent/skills \
|
|
178
|
+
--memory local-md:MEMORY.md \
|
|
179
|
+
--knowledge 'dingtalk-doc:<knowledge-node>' \
|
|
180
|
+
--artifacts local-dir:/path/to/artifacts --json
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
也可以由宿主 context、环境变量或 Workspace 提供。优先级固定为:**CLI 显式参数 > 宿主 context > 环境变量 > Workspace > 目录约定**。环境变量为 `DTA_AGENT_SOURCE`、`DTA_MEMORY_STORAGE`、`DTA_KNOWLEDGE_STORAGE`、`DTA_SKILLS_SOURCE`、`DTA_ARTIFACTS_STORAGE`、`DTA_STATE_DIR`、`DTA_DWS_PROFILE` 和 `DTA_EXPECTED_USER_ID`;输出中的 `definition.configuration` 会保留每项来源。
|
|
184
|
+
|
|
147
185
|
### 四个消息原子行为
|
|
148
186
|
|
|
149
187
|
Prepared Run 只开放四个消息动作:
|
|
@@ -166,23 +204,210 @@ dingtalk-agent act silence --reason unmentioned
|
|
|
166
204
|
|
|
167
205
|
## 架构
|
|
168
206
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
207
|
+

|
|
208
|
+
|
|
209
|
+
dta 的边界从标准化 `InvocationContext` 开始。消息监听、定时器、Webhook 或其它触发器在外部;它们只需提供可信 actor、target、conversation、mode 与 sessionKey。没有可信事件时默认进入 `direct`,Agent 仍像正在和用户对话的员工一样正常工作,但不会凭空获得一个可外发的钉钉目标。
|
|
210
|
+
|
|
211
|
+
## 从一个 Agent 到所有 Agent
|
|
212
|
+
|
|
213
|
+
任何数字员工都绕不开四件事:**感知、身份、执行记忆、受约束的行动**。因此,复制一个 Agent 不应复制整套 Prompt 和脚本,而应组装同一个内核:
|
|
214
|
+
|
|
215
|
+
| 可共享 | 按 Agent 叠加 |
|
|
216
|
+
|---|---|
|
|
217
|
+
| Basic Behavior、Invocation、Session/Run/Wait、双半闸门、Receipt 协议 | 身份、职责、服务对象、Role Skills、知识源、业务事实源、权限 allowlist |
|
|
218
|
+
|
|
219
|
+
`Agent Definition` 是这组差异的一等合同,至少描述:
|
|
220
|
+
|
|
221
|
+
```text
|
|
222
|
+
identity + responsibilities + serviceScope + roleSkills
|
|
223
|
+
+ storageBindings + authority + refusalBoundaries
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Session 创建时冻结 Definition 与 Skill snapshot;在线 Run 可以提出记忆或 Skill candidate,但不能热修改当前身份、权限和已启用 Skill。这样 FDE 教练、招聘助理与运维助手可以共用内核,又不会互相污染职责和数据。
|
|
227
|
+
|
|
228
|
+
### 角色身份、执行身份与委托
|
|
229
|
+
|
|
230
|
+
**我们的一个 Agent = 角色本体或委托 + 沙箱中的实际 DWS 执行身份 + Workspace/Skills + 可恢复状态;机器人、真实 IM 或标准大脑只是输入渠道,不是 Agent 本体。**
|
|
231
|
+
|
|
232
|
+
这里有两条必须分开的身份轴:
|
|
233
|
+
|
|
234
|
+
| 身份轴 | 回答什么 | 可能形态 |
|
|
235
|
+
|---|---|---|
|
|
236
|
+
| **角色/委托身份** | 我是什么角色、要完成什么、服务谁、受谁委托、允许做什么 | 固定岗位;代表某人/团队工作的受托 Agent |
|
|
237
|
+
| **DWS 执行身份** | 沙箱里实际由哪个钉钉账号读取或写入 | 跟随当前聊天者;固定为专用员工/服务账号 |
|
|
238
|
+
|
|
239
|
+
两者相同时,Agent 是以自己的平台身份履行自己的职责,可视为“本体模式”;两者不同时,是明确的委托关系。委托不会扩大权限:动作必须同时满足角色职责、委托范围和实际 DWS 身份权限,平台回执也必须记录真实执行者,不能把“代表谁”写成“实际由谁执行”。
|
|
240
|
+
|
|
241
|
+
当前 `agent-definition@1` 会把 `authority.dwsProfile/expectedUserId` 冻结到 Session。固定身份直接来自 Workspace;“跟随聊天者”由可信宿主在 Session 创建前通过 context/显式配置注入,进入 Session 后同样不可漂移。角色、委托方和职责目前由 `AGENTS.md`/Role Skill 表达;后续若要自动审计委托链,应再把 principal、delegator 和 binding mode 升级为结构化合同,而不是从自然语言或消息正文猜测。
|
|
242
|
+
|
|
243
|
+
无论消息来自机器人 connector、真实 personal-event,还是另一个标准化大脑/Agent Host,进入 dta 后都应归一成 Invocation。机器人渠道下也仍像同事一样回复;渠道只决定可获得的 envelope 和谁拥有外发权,不改变角色本体。
|
|
244
|
+
|
|
245
|
+
### 用仓库或文件夹定义 XXX Agent
|
|
246
|
+
|
|
247
|
+
最小可工作装配只有两组输入:
|
|
248
|
+
|
|
249
|
+
```text
|
|
250
|
+
本体:本地 AGENTS.md + Basic Behavior + 本地 Role Skills
|
|
251
|
+
路由:memory + knowledge + artifacts + private state + DWS authority
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
GitHub 作为版本化发布面:宿主负责 clone、凭证和更新,dta 从本地 checkout 读取本体并记录 HEAD;普通文件夹直接挂载。memory/knowledge 可以继续留在本地,也可以路由到专用钉钉文档;`agent.bindings.json` 把这些选择固化为 [`agent-bindings@1`](docs/schemas/agent-bindings.schema.json)。Prepared Session 首次创建时冻结 [`AgentDefinition`](docs/schemas/agent-definition.schema.json),后续消息生成 [`InvocationContext`](docs/schemas/invocation.schema.json)。
|
|
255
|
+
|
|
256
|
+
需要让 Agent 辅导已有材料按这个范式补齐时,可额外安装装配 Skill:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
dta skill install dingtalk-agent-compose
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
它会辅导并安全补齐 `AGENTS.md`、Role Skill、storage bindings、Agent Project 和 OpenCode exposure,再由 `dta agent audit` 输出稳定的 `agent-audit@1`、`ready/partial` 与逐项修复动作;不会自动初始化 Workspace,也不把监听、定时器或 Webhook 收进 dta。
|
|
263
|
+
|
|
264
|
+
已有仓库先用 `agent enhance`,不要直接复制模板覆盖文件:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
# 默认只生成 agent-enhancement-plan@1,不写文件、不访问 DWS
|
|
268
|
+
dta agent enhance --project-name release-agent \
|
|
269
|
+
--role-skill release-manager --dry-run --json
|
|
270
|
+
|
|
271
|
+
# 审阅 operations / blockers / semanticReview 后,使用计划返回的当前 planId
|
|
272
|
+
dta agent enhance --project-name release-agent \
|
|
273
|
+
--role-skill release-manager \
|
|
274
|
+
--plan-id <current-plan-id> --yes --json
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
apply 只修改本地 Agent 目录;更新旧文件前会备份到 `.dingtalk-agent/backups/agent-enhance/<operationId>/`,自定义 `stateDir` 会同步进入 `.gitignore`,输入漂移、过期 plan、非法 Role 路径、未知 OpenCode instruction、路径越界或 symlink 会在覆盖前失败。新建模板仍含待填写的岗位语义,所以 Receipt 的 audit 会保持 `partial`:只有真实身份、职责、交付物、拒绝边界、Role SOP 与验收都填完,`definition.semantic-contract` / `skill.role.<name>.semantic` 才通过。换句话说,`enhance plan ready` 只是“可以安全装修”,不是“数字员工已经毕业”。计划与 Receipt 分别遵循 [`agent-enhancement-plan@1`](docs/schemas/agent-enhancement-plan.schema.json) 和 [`agent-enhancement-receipt@1`](docs/schemas/agent-enhancement-receipt.schema.json)。
|
|
278
|
+
|
|
279
|
+
对 OpenCode,`ready` 还有一个硬条件:`.agents/skills/dingtalk-basic-behavior/SKILL.md` 只是项目 exposure,必须再由 `opencode.json#instructions` 强制注入正文。OpenCode 原生 Skill 默认按需加载,而 Basic Behavior 每条消息都必须生效;因此不能用“目录存在”或“`debug skill` 能看到”冒充已加载。compose 会要求 resolved config、项目路径/hash/version 和随机 load probe 四项证据;Role Skills 仍按岗位任务触发。
|
|
280
|
+
|
|
281
|
+
最短验收链路是:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
dta bootstrap --bindings agent.bindings.json --json
|
|
285
|
+
|
|
286
|
+
# 纯本地静态审计:零模型、零 DWS;缺口返回 partial 和退出码 2
|
|
287
|
+
dta agent audit --bindings agent.bindings.json \
|
|
288
|
+
--require-skill <role-skill-name> --json
|
|
289
|
+
|
|
290
|
+
# 只运行隔离 OpenCode load probe;仍不访问钉钉
|
|
291
|
+
dta agent audit --bindings agent.bindings.json \
|
|
292
|
+
--require-skill <role-skill-name> --verify-load --yes --json
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
这条链路已经用 `examples/agents/release-manager` 做过一次真实本地 dogfood:OpenCode 1.17.14 + `deepseek/deepseek-chat` 的 with-skill 随机探针精确加载 1/1,without-skill 未猜中 1/1,最终 audit 从只缺 `host.load-probe` 的 `partial` 收敛为 `ready`。这只证明“组装与加载链路可走通”,不证明岗位任务质量或稳定行为增益;脱敏证据见 [`agent-enhance-opencode-dogfood-summary.json`](evals/baselines/2026-07-17/agent-enhance-opencode-dogfood-summary.json)。
|
|
296
|
+
|
|
297
|
+
远端 memory/knowledge 不会因“本地缓存存在”直接变成 ready:必须先用授权的 storage eval 验证 DWS 身份、文档类型、hash、独立回读和模型使用,再通过 `--remote-report` 绑定证据。Wait、generation、幂等键、Receipt 与凭据始终留在宿主原子存储。
|
|
298
|
+
|
|
299
|
+
### 一个 Project,多个开发 Workspace
|
|
300
|
+
|
|
301
|
+
`agent.bindings.json` 描述 Agent 本体与存储路由;项目根的 [`dingtalk-agent.json`](docs/schemas/project.schema.json) 进一步声明“同一份 Agent 在哪些开发环境中工作”。一个 Development Workspace 只绑定一个 Host Provider,但 memory/knowledge/artifacts 仍可分别使用不同 Storage Provider:
|
|
302
|
+
|
|
303
|
+
```text
|
|
304
|
+
Agent Project
|
|
305
|
+
├── local-dev ── Host: OpenCode ── Storage: local-md/local-dir
|
|
306
|
+
├── multica-dev ── Host: Multica ── Storage: dingtalk-doc/local-dir
|
|
307
|
+
└── legacy-prepared ── 旧 workspace@1 的只读兼容视图
|
|
184
308
|
```
|
|
185
309
|
|
|
310
|
+
W1 提供完全只读的发现与诊断:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
dta info --json
|
|
314
|
+
dta workspace list --json
|
|
315
|
+
dta workspace show local-dev --json
|
|
316
|
+
dta workspace doctor local-dev --json
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
CLI 会从任意子目录向上发现 Project,回读 Provider、配置来源、`desiredHash/observedHash` 和 [`workspace-state@1`](docs/schemas/workspace-state.schema.json)。doctor 只检查指定 Workspace:未安装 Multica 不会让 `local-dev` 失败;Provider、源码、managed bytes 或 desired hash 漂移则 fail closed。
|
|
320
|
+
|
|
321
|
+
OpenCode W2 在 W1 之上增加受管开发环境。`create` 默认只给 plan;`--yes` 才在 gitignored 目录原子物化并独立回读。`run/eval` 都使用仓库外临时 sandbox,只有随机 Basic load probe、Session directory 和硬门禁证据通过后,Provider state 才能进入 `ready`:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
dta workspace create local-dev --dry-run --json
|
|
325
|
+
dta workspace create local-dev --yes --json
|
|
326
|
+
dta workspace use local-dev --json
|
|
327
|
+
dta workspace run local-dev --prompt-file prompt.md --execute --yes --json
|
|
328
|
+
dta workspace eval local-dev --suite evals/core.json --runs 3 --execute --yes --json
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
`workspace run` 固定零工具;文件/Artifact 工具只在 eval case 的隔离权限中开放。W2 会写本地 managed Workspace、selection、state 和 evidence,但不调用 DWS。CI、评测和未来 deploy 不能依赖 `current-workspace`,必须显式选择名称。
|
|
332
|
+
|
|
333
|
+
Multica W3 先开放受控远端读取。`plan` 完全不启动 Multica;`inspect/remote-list` 必须显式确认后,固定使用声明的 profile、workspace ID、runtime ID 和可选 agent ID 回读 auth、Workspace、Runtime、Agent、Skill catalog/assignment。已有 Agent 必须由 `agentIdFrom` 或上一份可信 state 绑定,绝不按显示名自动认领:
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
dta workspace plan multica-dev --json
|
|
337
|
+
dta workspace inspect multica-dev --execute --yes --json
|
|
338
|
+
dta workspace remote-list multica-dev --execute --yes --json
|
|
339
|
+
dta workspace status multica-dev --json
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
回读证据只保存最小资源事实和原始输出 hash,不保存 Token、邮箱、Server URL 明文、Agent instructions/runtime config 或 Skill content。身份、默认 Workspace、scope、稳定 ID、Skill 唯一性或 evidence hash 任一不符都 fail closed;成功后 state 仍是 `verifying`,`readyForApply=true` 只表示可以进入 W4 规划。
|
|
343
|
+
|
|
344
|
+
W4 用 `dta deploy` 把这份可信 inspection 变成 plan-bound apply。dry-run 固定 profile/workspace/runtime/Agent/Definition/Skill tree hash 和 forward/rollback 最大写预算,apply 前重新回读同一条 ID 链;只有显式 `--plan-id` 与 `--yes` 才会创建或更新。CLI 会精确同步受管 Boot、Basic、Role Skill 完整树和唯一 assignment,再通过专用 Issue 回读 Skill tool trace 与精确 JSON response;两个证据都通过才从 `verifying` 进入 `ready`:
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
dta deploy --workspace multica-dev --dry-run --json
|
|
348
|
+
dta deploy --workspace multica-dev --plan-id <plan-id> --yes --json
|
|
349
|
+
dta deploy --workspace multica-dev --status --json
|
|
350
|
+
dta deploy --workspace multica-dev --status --execute --yes --json
|
|
351
|
+
dta deploy --workspace multica-dev --list --json
|
|
352
|
+
dta deploy --workspace multica-dev --retire --dry-run --json
|
|
353
|
+
dta deploy --workspace multica-dev --retire --plan-id <plan-id> --yes --json
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
写命令超时会保存 operation/Receipt 并进入 `reconciling`;后续 status 只独立回读,不盲重试或把不确定操作回滚。Agent create 若没返回 ID,只能逐个读取稳定候选 ID,并在唯一完整 instructions/runtime 指纹匹配时恢复绑定,不能按显示名认领。确认失败只回滚当前 operation 的受管修改;retire 只归档精确 Agent,不删除 Skill、Issue、语义存储或历史证据。部署不创建机器人、Webhook、定时器或其他 Trigger。`dingtalk-agent-deploy` Skill 只辅导调用这组稳定 CLI,不直接调用 Multica 写命令,也不保存登录凭据。
|
|
357
|
+
|
|
358
|
+
W5 把 W2 的指定 Eval evidence 与 W4 Receipt 串成显式 Promotion 链。Policy 冻结源/目标 Workspace、suite、最少 runs、必须 case 和四个证据面;dry-run 重算 Definition/Skill、managed Workspace、plan/suite/report 与 deployment hash,零 Provider 调用。只有当前 planId 和显式确认才委托 W4 deploy,Promotion Receipt 会绑定 source、Eval、历史 deployment Receipt 与最终 observed hash。
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
dta promote --policy promotion-policy.json --route local-dev-to-multica-dev --dry-run --json
|
|
362
|
+
dta promote --policy promotion-policy.json --route local-dev-to-multica-dev \
|
|
363
|
+
--plan-id <plan-id> --yes --json
|
|
364
|
+
dta promote --status --promotion-id <promotion-id> --json
|
|
365
|
+
dta promote --list --json
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
`observe` 只把与已 promoted `observedHash` 精确匹配的脱敏反馈写成 gitignored Eval candidate,且固定为 `proposed`、必须人工评审、不可直接进入 suite、未发布。它不修改 AGENTS.md、Prompt、Basic/Role Skill 或 Trigger。
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
dta observe --promotion-id <promotion-id> --input observation.json --dry-run --json
|
|
372
|
+
dta observe --promotion-id <promotion-id> --input observation.json --yes --json
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
可复制的双 Provider 声明见 [`lab/project-workspace/project.fixture.json`](lab/project-workspace/project.fixture.json),脱敏只读回归数据见 [`multica-readonly.fixture.json`](lab/project-workspace/multica-readonly.fixture.json),W4 stateful fake 数据见 [`multica-deploy.fixture.json`](lab/project-workspace/multica-deploy.fixture.json),W5 Policy 示例见 [`promotion-policy.fixture.json`](lab/project-workspace/promotion-policy.fixture.json)。Manifest/state 禁止保存 token、Secret、cookie、密码或凭据;`*From` 字段只记录 `env:VAR` 来源,不把解析值写回 Git。当前合同证明本地编排与 fail-closed 行为,不等于真实 Multica Live apply/promotion 已通过。
|
|
376
|
+
|
|
377
|
+
### 一小时复制第二个 Agent
|
|
378
|
+
|
|
379
|
+
仓库提供 `examples/agents/fde-coach` 与 `examples/agents/release-manager` 两份最小 Agent kit。开发者复制一个目录,只改 `AGENTS.md`、`skills/<role>/SKILL.md` 与 `agent.bindings.json`,物化 Host exposure 后即可审计;普通本地 Agent 不需要 `init`。
|
|
380
|
+
|
|
381
|
+
```bash
|
|
382
|
+
cp -R examples/agents/release-manager /path/to/my-agent
|
|
383
|
+
cd /path/to/my-agent
|
|
384
|
+
dta bootstrap --bindings agent.bindings.json --json
|
|
385
|
+
dta agent audit --bindings agent.bindings.json \
|
|
386
|
+
--require-skill <role-skill-name> --verify-load --yes --json
|
|
387
|
+
# 只有可信事件 / Prepared Run 需要时,才另行执行一次 dta init
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
新 Skill 不会热注入当前 Session:初始化后新增岗位 Skill,需要离线评审并加入 `.dingtalk-agent/workspace.json#skills`,由新 Session 重新冻结。合同 42 会用两份 kit 实际验证 Definition、Role Skill、Field、Session、Task Checkpoint、Memory Candidate 和 DWS profile 不串,并让两者通过同一 fake-DWS Lab。完整 60 分钟步骤与边界见[第二个岗位 Agent 验收](docs/SECOND-AGENT-ACCEPTANCE.md)。
|
|
391
|
+
|
|
392
|
+
## 闸门的两半
|
|
393
|
+
|
|
394
|
+
| 安全半闸门:不犯错 | 贴心半闸门:做得好 |
|
|
395
|
+
|---|---|
|
|
396
|
+
| 先判断 mention / DM / ambient 是否有响应资格 | 自动补齐引用原文、群上下文和参与人 |
|
|
397
|
+
| target、actor、conversation 只来自可信 Invocation | 附件下载、OCR/正文提取,连发消息合并 |
|
|
398
|
+
| 外发前重验身份、权限、generation 与动作预算 | userId 解析成可读身份,但权限仍按可信 ID |
|
|
399
|
+
| 幂等、Intent/Attempt/Receipt 与平台回读 | 中期回执、安静时段、会议免打扰、任务切换收口 |
|
|
400
|
+
|
|
401
|
+
贴心层不替模型做岗位判断,而是生成带 `status / source / fetchedAt / confidence / truncated / reason` 的 `EnrichedInvocation`,让每个 Skill 都从完整、可追溯的现场开始。首批已经实现 quote、同人连发 burst、identity 三个 Enricher;预处理失败时显式标记 `missing/rejected`,不能把“没取到”解释为“不存在”。
|
|
402
|
+
|
|
403
|
+
可信宿主可把补齐结果作为独立输入提供,正文仍不获得权限:
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
dta prepare --event-file event.json --perception-file perception.json --json
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
Prepared Run 会先冻结 `response-gate.json`,再冻结 `enriched-invocation.json`;同一 eventId 不能在重放时偷换 perception。Action Gate 在副作用前复验两者的 hash。
|
|
410
|
+
|
|
186
411
|
### 事件驱动的异步进程
|
|
187
412
|
|
|
188
413
|
每条新信号可以启动一个新沙箱,但同一件事仍回到同一个 Session:
|
|
@@ -198,16 +423,71 @@ Receipt = 可审计的外部效果证据
|
|
|
198
423
|
|
|
199
424
|
`ask` 后当前 Run 结束;匹配事件到达时,宿主恢复原 Session 并创建新 Run。系统持久化显式 checkpoint,而不是序列化 JavaScript 或模型的隐藏调用栈。
|
|
200
425
|
|
|
201
|
-
|
|
426
|
+
## 三层语义记忆
|
|
202
427
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
428
|
+

|
|
429
|
+
|
|
430
|
+
三层记忆回答“应该想起什么”,控制状态回答“从哪里继续、是否已经执行”。
|
|
431
|
+
|
|
432
|
+
| 层 | 介质 | 存什么 |
|
|
433
|
+
|---|---|---|
|
|
434
|
+
| **L1 Session 工作记忆** | 宿主 state root,可投影为 Markdown checkpoint | 当前目标、做到哪、下一步、等待条件、证据 |
|
|
435
|
+
| **L2 业务工作记忆** | AI 表格宽表、Todo、Calendar 或业务事实源 | 摘要、待办、互动记录、可聚合的热数据 |
|
|
436
|
+
| **L3 长期知识** | 钉钉文档树、知识库、Wiki | Definition、Skill、SOP、人物模式、错误库 |
|
|
437
|
+
| **Control State(不是记忆)** | 宿主原子存储 | EventIndex、Wait、锁、generation、幂等键、Action Receipt |
|
|
438
|
+
| **Git Release Plane** | Git | Definition/Skill 源码、候选、快照、评审、发布与回滚 |
|
|
439
|
+
|
|
440
|
+
原方法论中“Git 双向同步”的价值保留在**人可审查、可干预、可发布和可回滚**;但 Git 不承担 runtime lock、Wait 或 PCB 权威。文档同样适合语义协作,却没有可靠 CAS,因此不能承担并发控制和副作用去重。
|
|
441
|
+
|
|
442
|
+
L1 已提供最小原子接口。只有事项确实跨 Run 时才使用;`taskId` 固定为 `sessionId`,`scopeId` 固定为 `contextId`:
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
dingtalk-agent task show --json
|
|
446
|
+
dingtalk-agent task checkpoint --input checkpoint.json --expect-revision 0 --json
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
Checkpoint 写入 Session state root 的 `memory/task.json`,由 CLI 校验状态迁移、revision CAS、当前 Run 身份并回读;下一 Run 得到 `context/task-checkpoint.json` 投影。它不保存 Wait、锁、generation、幂等键或 Receipt。
|
|
206
450
|
|
|
207
|
-
|
|
451
|
+
L2 首个 Provider 是 AI 表格宽表。开发者提供一个 [`OperationalMemoryProvider`](docs/schemas/operational-memory-provider.schema.json),把 baseId/tableId 和十个 fieldId 显式映射好;profile/expectedUserId 可放配置,也可由 `DTA_DWS_PROFILE` / `DTA_EXPECTED_USER_ID` 注入:
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
dingtalk-agent memory operational upsert \
|
|
455
|
+
--provider operational-provider.json \
|
|
456
|
+
--input operational-record.json
|
|
457
|
+
|
|
458
|
+
# 确认 dry-run 后才执行真实写入
|
|
459
|
+
dingtalk-agent memory operational upsert \
|
|
460
|
+
--provider operational-provider.json \
|
|
461
|
+
--input operational-record.json --live --yes --json
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
Provider 按 `key + scopeId` 定位唯一行,只使用 fieldId;首次 create、后续 update,最后都按 recordId 独立回读。DWS 身份不符、多行冲突、没有可回读 recordId 或 cells 漂移都会 fail closed/标为 uncertain。Prepared Run 不能直接调用它绕过 Action Gate。
|
|
465
|
+
|
|
466
|
+
L3 用候选发布流阻止在线自我改写:
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
# 在线 Run 只提候选
|
|
470
|
+
dingtalk-agent memory candidate propose --input candidate.json --json
|
|
471
|
+
|
|
472
|
+
# 离线 reviewer 决策
|
|
473
|
+
dingtalk-agent memory candidate review \
|
|
474
|
+
--id <candidateId> --decision approve --reviewer <reviewer> \
|
|
475
|
+
--reason "来源已核验" --expect-revision 1 --json
|
|
476
|
+
|
|
477
|
+
# 先 dry-run 取得 currentTargetHash,再发布到显式 target
|
|
478
|
+
dingtalk-agent memory candidate publish \
|
|
479
|
+
--id <candidateId> --target publish-target.json --expect-revision 2 --json
|
|
480
|
+
dingtalk-agent memory candidate publish \
|
|
481
|
+
--id <candidateId> --target publish-target.json --expect-revision 2 \
|
|
482
|
+
--expect-target-hash <hash> --yes --json
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
[`MemoryPublishTarget`](docs/schemas/memory-publish-target.schema.json) 支持 `local-md:` 和 `dingtalk-doc:`。本地/Git 工作树走 lease、原子替换和回读,但不会自动 commit/push;钉钉文档必须再加 `--live --yes`,只追加唯一 marker 并全文回读,回执明确声明 Markdown 端只是 best-effort 并发检查。发布不会热修改当前 Session,只有新 Session 重新水合。
|
|
208
486
|
|
|
209
487
|
## 数字员工行为协议
|
|
210
488
|
|
|
489
|
+

|
|
490
|
+
|
|
211
491
|
新任务遵循:
|
|
212
492
|
|
|
213
493
|
```text
|
|
@@ -222,9 +502,11 @@ UNDERSTAND → CLARIFY → PLAN → EXECUTE → WAIT → VERIFY → COMPLETE
|
|
|
222
502
|
- **VERIFY**:通过工具结果和必要回读区分生成、保存、送达与确认;
|
|
223
503
|
- **COMPLETE**:回到原线程交付结果、证据、遗留项和下一责任人。
|
|
224
504
|
|
|
505
|
+
`CLARIFY` 是条件分支,不是固定开场;`COMPLETE` 也不是模型可以自行宣布的结果。跨 Run 任务必须先从 `working` 进入 `verifying`,再把每项 `doneWhen` 对应到文件检查、Workspace/Artifact 断言、Action Receipt、平台回读或人工确认。回复声称“已创建”不构成证据;CLI 会拒绝 `working → completed` 和无证据的完成 checkpoint。
|
|
506
|
+
|
|
225
507
|
只有跨消息、等待依赖、已经产生副作用、需要换沙箱接手或用户明确要求跟踪的事项才创建 checkpoint。单轮问答不制造“伪任务”。
|
|
226
508
|
|
|
227
|
-
##
|
|
509
|
+
## 开发者拿到 dta 后还需要什么
|
|
228
510
|
|
|
229
511
|
```text
|
|
230
512
|
Basic Behavior Skill 每个钉钉员工共享的社交与安全底座
|
|
@@ -238,7 +520,15 @@ dingtalk-agent CLI 需要强约束的员工级事务边界
|
|
|
238
520
|
DWS 钉钉标准产品能力
|
|
239
521
|
```
|
|
240
522
|
|
|
241
|
-
|
|
523
|
+
最小实例只需再补三样:
|
|
524
|
+
|
|
525
|
+
1. **Agent Definition**:身份、职责、服务范围、拒绝边界和权限;
|
|
526
|
+
2. **Role Skills**:这个岗位如何完成评价、招聘、周报或事故处理;
|
|
527
|
+
3. **Storage bindings**:memory、knowledge、artifacts、宿主 state 与可信 DWS authority 的明确路由;
|
|
528
|
+
|
|
529
|
+
事件触发 Adapter 是独立部署面,不属于 Agent 本体:需要自动运行时再接 personal-event、Webhook 或定时器;普通 direct 会话无需先部署监听器。
|
|
530
|
+
|
|
531
|
+
这意味着一个 FDE 教练只需在基础行为之上叠加教练身份、评价方法与学员资料;基础层无需知道 FDE 业务细节。完整的 Definition 合同、模块落点和阶段计划见[从一个 Agent 到所有 Agent 实施方案](docs/plans/2026-07-16/general-agent-kernel-and-live-lab.md)。
|
|
242
532
|
|
|
243
533
|
## 常用命令
|
|
244
534
|
|
|
@@ -253,20 +543,135 @@ dingtalk-agent init
|
|
|
253
543
|
dingtalk-agent prepare --event-file event.json --json
|
|
254
544
|
dingtalk-agent help runtime
|
|
255
545
|
dingtalk-agent help adapters
|
|
256
|
-
dingtalk-agent eval contract
|
|
257
546
|
```
|
|
258
547
|
|
|
259
548
|
`listen` 是可选的开发联调 Adapter,不是 Agent 主进程。云端 Driver、Claude Code 插件或本地 DWS 都可以提供事件,并从标准化事件之后复用同一 Session / Run / Action 内核。
|
|
260
549
|
|
|
550
|
+
## 真实世界联调
|
|
551
|
+
|
|
552
|
+
真实环境不是最后补一条 smoke,而是和通用合同同为 P0。验证按五级晋级:
|
|
553
|
+
|
|
554
|
+
| 级别 | 环境 | 证明什么 |
|
|
555
|
+
|---|---|---|
|
|
556
|
+
| L0 | fixture + 真 CLI | 合同、状态机、目标防篡改、幂等 |
|
|
557
|
+
| L1 | 模型 shadow | Skill 是否带来行为增益;绝不外发 |
|
|
558
|
+
| L2 | fake DWS + 真 Action Gate | Intent/Attempt/Receipt、超时恢复,不污染钉钉 |
|
|
559
|
+
| L3 | 专用机器人 connector | 真实连接、Workspace、表达、送达与平台回读 |
|
|
560
|
+
| L4 | 测试同事/群 + personal event + dta Broker | 完整 envelope、目标、身份、Wait/Resume、单一出口 |
|
|
561
|
+
|
|
562
|
+
机器人 connector 自己拥有外发权,只能证明连接和体验;完整运行时必须由 dta Broker 独占外发,并验证可信 target、重复投递、Receipt 和独立平台回读。Live 一律使用测试资源、allowlist、唯一 marker、固定预算和 teardown,详细拓扑与首批场景见[实施方案](docs/plans/2026-07-16/general-agent-kernel-and-live-lab.md#7-真实世界联调与测试环境)。
|
|
563
|
+
|
|
564
|
+
Lab Harness 默认不会碰真实钉钉:
|
|
565
|
+
|
|
566
|
+
```bash
|
|
567
|
+
export DTA_LAB_FAKE_DWS=1
|
|
568
|
+
export DTA_LAB_FAKE_DWS_PATH=/absolute/path/to/test-bin/dws
|
|
569
|
+
dta lab doctor --manifest lab/manifest.local.json
|
|
570
|
+
dta lab run --manifest lab/manifest.local.json \
|
|
571
|
+
--event-file evals/fixtures/mentioned.json --case-id mention-reply \
|
|
572
|
+
--reply 'Mock Lab 已完成。'
|
|
573
|
+
dta lab verify --evidence .dingtalk-agent/lab-results/<run-id>
|
|
574
|
+
dta lab teardown --manifest lab/manifest.local.json \
|
|
575
|
+
--evidence .dingtalk-agent/lab-results/<run-id>
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
`robot-connect` 与 `personal-event` 会产生真实副作用,除了 manifest 的专用资源和 allowlist,还必须显式传 `--live --yes`。完整说明见 [Lab Runbook](lab/README.md)。
|
|
579
|
+
|
|
580
|
+
完整 personal-event suite 使用 [`personal-event-eval@1`](lab/schemas/personal-event-eval.schema.json),把 Basic + Role Skill、响应资格、Wait/Resume、重复事件、Perception、Receipt 和 teardown 放进同一条证据链。事件仍由外部 Adapter 捕获;dta 不创建订阅或触发器。默认命令只生成本地 plan,只有本地 suite 的 `liveAuthorized=yes` 与三重 CLI 确认同时满足才执行:
|
|
581
|
+
|
|
582
|
+
```bash
|
|
583
|
+
dta lab eval --engine personal-event \
|
|
584
|
+
--workspace <agent-workspace> \
|
|
585
|
+
--suite .dingtalk-agent/personal-event-live.local.json --json
|
|
586
|
+
|
|
587
|
+
dta lab eval --engine personal-event \
|
|
588
|
+
--workspace <agent-workspace> \
|
|
589
|
+
--suite .dingtalk-agent/personal-event-live.local.json \
|
|
590
|
+
--execute --live --yes --json
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
占位 suite 见 [`personal-event-live.example.json`](lab/agent-eval/personal-event-live.example.json),脱敏本地证据见 [`personal-event-live-readiness-summary.json`](evals/baselines/2026-07-17/personal-event-live-readiness-summary.json)。每条回复必须按同一 messageId 回读精确正文;duplicate 只能复用原 Run/Action/Attempt,不能新增外发。当前合同用 fake DWS 通过 8/8 场景、7 个物理 Run、5 次新增外发,并拒绝 messageId 正确但正文被改写的回读;这证明 Harness 已可执行,不证明真实个人事件已接收或真实消息已送达。
|
|
594
|
+
|
|
595
|
+
可复用机器人行为评测使用独立 Robot Pool;默认只生成计划,不启动 connector:
|
|
596
|
+
|
|
597
|
+
```bash
|
|
598
|
+
dta lab eval \
|
|
599
|
+
--pool .dingtalk-agent/robot-pool.local.json \
|
|
600
|
+
--suite lab/robot-eval/suite.json --lanes stateless --json
|
|
601
|
+
|
|
602
|
+
# 确认专用机器人、allowlist、模型和预算后才真实执行
|
|
603
|
+
dta lab eval \
|
|
604
|
+
--pool .dingtalk-agent/robot-pool.local.json \
|
|
605
|
+
--suite lab/robot-eval/suite.json --lanes stateless \
|
|
606
|
+
--live --yes --json
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
Pool 最多 3 个前缀机器人,固定 OpenCode + `deepseek/*`;每次运行物化隔离工作区、安装当前 Basic Behavior、先让全部 connector healthy,再发送唯一 marker,最后按 `robotClientId` 停止并回读 `not_running`。它验证真实机器人体验,不替代 personal-event 的可信 target、幂等与 Receipt 验收。
|
|
610
|
+
|
|
611
|
+
在产生真实钉钉消息前,先用无 DWS 副作用的 OpenCode A/B 验证 Host 组装:
|
|
612
|
+
|
|
613
|
+
```bash
|
|
614
|
+
# 默认只看计划
|
|
615
|
+
dta lab eval --engine opencode \
|
|
616
|
+
--workspace lab/robot-eval/workspace \
|
|
617
|
+
--suite lab/robot-eval/suite.json --lanes stateless --runs 3 --json
|
|
618
|
+
|
|
619
|
+
# 调用固定 DeepSeek 模型;不开放 Agent 工具,不连接钉钉
|
|
620
|
+
dta lab eval --engine opencode \
|
|
621
|
+
--workspace lab/robot-eval/workspace \
|
|
622
|
+
--suite lab/robot-eval/suite.json --lanes stateless --runs 3 \
|
|
623
|
+
--execute --yes --json
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
每组使用隔离 Workspace:with-skill 通过 `instructions` 强制注入带随机 nonce 的 Basic Skill 快照,without-skill 移除正文并禁用同名 Skill。报告把 load gate、行为得分、baseline、Session 实际目录、工具调用、时延和 token 分开;load gate 失败时,行为回答再正确也不能算 Skill 生效。
|
|
627
|
+
|
|
628
|
+
2026-07-16 的 OpenCode 1.17.14 + DeepSeek 三轮基线中,Basic 0.9.2 的随机加载探针与隔离目录门禁为 3/3,with-skill 行为为 17/18,without-skill 为 14/18。剩余失败是目标防伪造答复泄露“回读路径”这一控制面术语,因此行为发布门禁保持失败;详见[脱敏基线摘要](evals/baselines/2026-07-16/opencode-basic-skill-required-summary.json),不以总分掩盖该缺口。
|
|
629
|
+
|
|
630
|
+
新的经典事故集可按 case 精确回归,并允许显式的本地文件工具:
|
|
631
|
+
|
|
632
|
+
```bash
|
|
633
|
+
dta lab eval --engine opencode \
|
|
634
|
+
--workspace lab/agent-eval/workspace \
|
|
635
|
+
--suite lab/agent-eval/classic-failures.json \
|
|
636
|
+
--cases requester-only-authorization,workspace-artifact \
|
|
637
|
+
--runs 1 --execute --yes --json
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
2026-07-16 的 OpenCode 1.17.14 + DeepSeek 开发回归覆盖 9 个经典 case。Basic 0.9.4 的加载门禁通过;8 个 case 在完整轮次通过,唯一的正确拒绝因短语枚举漏判,改为受限正则 + 独立原因/禁止项后针对性通过。产物 case 只开放 `read/write/edit`,本次实际只调用 `write`;Workspace/Artifact/Filesystem 7/7 后置条件通过,并把两个文件及 sha256 复制进证据包。可写沙箱位于仓库外的系统临时目录,runner 会规范化并审计每个工具路径,防止 OpenCode 沿父级 Git 根写入真实工作树。组合验收为当前 9/9 有通过证据,但不冒充同一轮统计结论;详见[脱敏多证据摘要](evals/baselines/2026-07-16/opencode-multi-surface-summary.json)。
|
|
641
|
+
|
|
642
|
+
同一套方法也覆盖“本体在本地、语义状态在钉钉文档”的 Agent:
|
|
643
|
+
|
|
644
|
+
```bash
|
|
645
|
+
cp lab/agent-eval/remote-state.example.json \
|
|
646
|
+
.dingtalk-agent/remote-state.local.json
|
|
647
|
+
|
|
648
|
+
# 先看计划;不会读取 DWS,也不会调用模型
|
|
649
|
+
dta lab eval --engine storage \
|
|
650
|
+
--workspace lab/agent-eval/remote-state-workspace \
|
|
651
|
+
--suite .dingtalk-agent/remote-state.local.json --json
|
|
652
|
+
|
|
653
|
+
# 读取两篇专用文档、验证 OpenCode;--live 再追加一个唯一写探针
|
|
654
|
+
dta lab eval --engine storage \
|
|
655
|
+
--workspace lab/agent-eval/remote-state-workspace \
|
|
656
|
+
--suite .dingtalk-agent/remote-state.local.json \
|
|
657
|
+
--execute --live --yes --json
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
2026-07-16 的真实 DWS canary 使用两篇专用 `adoc`:本地 `AGENTS.md + remote-state-operator` 的 Definition 为 ready,Basic 0.9.4 由 OpenCode instructions 强制加载;memory/knowledge 的远端、mount、缓存和 manifest hash 全部一致,DeepSeek 零工具返回两个只存在于远端文档的探针值,唯一写 marker 经全文回读后按 Markdown 文字流计数为 1。确定性合同同时证明错误 DWS 身份、非 adoc 和 bootstrap 后远端漂移会 fail closed。第一次字节级 marker 比较曾因钉钉转义 `_`/`]` 产生假阴性,runner 已改为文字流比较;没有把命令成功当成写入成功,也没有推断删除权限。详见[脱敏远端状态摘要](evals/baselines/2026-07-16/remote-state-live-summary.json)。
|
|
661
|
+
|
|
261
662
|
## 评测与验证
|
|
262
663
|
|
|
664
|
+
仓库内置 [`dingtalk-agent-eval`](skills/dingtalk-agent-eval/SKILL.md) Skill,把评测固定为“被测 Definition → Basic Skill 加载门禁 → 场景目录 → 隔离执行 → 多证据面断言 → 晋级”的流程。项目 Coding Agent 在修改评测、Lab、Workspace、产物或远端状态时会由 `AGENTS.md` 强制加载它;开发者也可以把该 Skill 复制到自己的 Agent 仓库复用。
|
|
665
|
+
|
|
666
|
+
场景不按日期或岗位堆放,而按七条稳定成立条件分类:Host 加载、会话行为、身份与出口、任务生命周期、记忆与存储、工作区与产物、平台可靠性。目录见 [`lab/agent-eval/catalog.json`](lab/agent-eval/catalog.json)。回复只是一个证据面;case 若声明创建文件、Workspace 或钉钉文档状态,就必须分别检查本地路径/内容/hash、Definition/Skill 路由,以及 DWS 独立回读。安全硬门禁失败不能被总分平均掉。
|
|
667
|
+
|
|
263
668
|
```bash
|
|
264
669
|
npm ci
|
|
265
670
|
npm run typecheck
|
|
266
671
|
npm run eval:contract
|
|
267
672
|
```
|
|
268
673
|
|
|
269
|
-
当前确定性合同包含 **
|
|
674
|
+
当前确定性合同包含 **60 个场景**,覆盖:
|
|
270
675
|
|
|
271
676
|
- 通过 `npx skills` 委托全局 Skill 安装、发现、重装和卸载;
|
|
272
677
|
- 首次 setup、用户级 PATH、DWS 版本/认证和三端客户端发现;
|
|
@@ -276,6 +681,25 @@ npm run eval:contract
|
|
|
276
681
|
- Direct Session 外发边界;
|
|
277
682
|
- Session continuation、Wait、幂等和目标防篡改;
|
|
278
683
|
- Skill 冻结、动作预算和 Receipt。
|
|
684
|
+
- Lab 单一出口、路径/Live 门禁,以及 fake DWS 的完整证据与 teardown。
|
|
685
|
+
- quote/burst/identity 感知补齐、Response Gate 与 perception 防篡改。
|
|
686
|
+
- Task checkpoint 的 Session 作用域、revision CAS、跨 Run 投影与控制状态隔离。
|
|
687
|
+
- AI 表格 Operational Memory 的 dry-run、单行 upsert、身份校验与 recordId 回读。
|
|
688
|
+
- Memory Candidate 的在线提议、离线评审、本地/钉钉文档发布与 Session 冻结。
|
|
689
|
+
- 两个岗位 Agent 的 Definition/Role Skill/Field/Session/记忆/权限隔离与同合同 Lab 验收。
|
|
690
|
+
- 最多三个前缀机器人同时 healthy、OpenCode/DeepSeek 固定、marker 回收、确定性判分和精确 teardown。
|
|
691
|
+
- OpenCode `instructions` 强制加载 Basic Skill、随机 load probe、with/without 对照、隔离 Session 目录和零工具调用。
|
|
692
|
+
- 逐 case 最小工具权限,以及回复、Filesystem、Workspace、Artifact、受限正则和证据快照的联合判定。
|
|
693
|
+
- 本地 Agent Definition + 钉钉文档 memory/knowledge 的身份、类型、独立 cache manifest、远端漂移、写后回读和零工具模型探针。
|
|
694
|
+
- L1 钉钉文档语义镜像、L2 AI 表格热状态、L3 钉钉文档知识的双进程冷启动恢复,以及 identity/type/drift/slot/cache/control-state fail closed。
|
|
695
|
+
- Phase 11B 默认零副作用的远端状态 Live runner,以及 Phase 9 personal-event 的 Basic/Role Skill、@/ambient、duplicate、Wait/Resume、`/stop`、Perception、正文回读和 teardown。
|
|
696
|
+
- Developer Golden Path 的 bindings、精确 repair、与当前 Definition/Host 绑定的 load evidence、远端 fail-closed audit,以及第二个岗位 Agent 无内核改动复制。
|
|
697
|
+
- 已有仓库 `agent enhance` 的 plan/current-plan-id/backup/hash 回读、语义占位符门禁、配置保留、幂等和漂移/symlink fail-closed。
|
|
698
|
+
- Project/Development Workspace 根发现、OpenCode/Multica Provider 隔离、legacy adapter、配置/hash 回读、只读 CLI 与 state 漂移关闭。
|
|
699
|
+
- Workspace-bound OpenCode create/use/run/eval、随机 load probe、四面证据、双 Workspace 防串线、managed drift 与原子冷启动重建。
|
|
700
|
+
- Completion grader 对中英文完成/否定/条件/转述和矛盾语境的判定,以及 case 级 `completionClaim` 硬门禁。
|
|
701
|
+
- suite 预声明的三轮 `comparisonPolicy`:总体提升、改进场景数和退化上限必须同时满足,单个正 delta 不再证明增益。
|
|
702
|
+
- Multica W3–W5 的只读回读、plan-bound apply、Promotion/Observation,以及真实 npm tarball 的隔离安装、升级和回滚验收。
|
|
279
703
|
|
|
280
704
|
模型行为还可通过 Claude shadow 做 with-skill / baseline 对照;它只允许读取冻结输入并输出 ActionRequest,不产生任何钉钉副作用。完整晋级门禁见 [自测与持续进化](docs/SELF-TEST.md)。
|
|
281
705
|
|
|
@@ -285,6 +709,10 @@ npm run eval:contract
|
|
|
285
709
|
bin/ CLI composition root
|
|
286
710
|
src/ TypeScript runtime
|
|
287
711
|
skills/dingtalk-basic-behavior/ 可安装的基础行为 Skill
|
|
712
|
+
skills/dingtalk-agent-compose/ XXX Agent 装配与优化 Skill
|
|
713
|
+
skills/dingtalk-agent-eval/ 场景分类、多证据断言与晋级 Skill
|
|
714
|
+
examples/agents/ 可复制的 FDE 教练与发布经理 Agent kit
|
|
715
|
+
lab/ 评测目录、联调 manifest、schema 与 runbook
|
|
288
716
|
templates/ Workspace 与行为模板
|
|
289
717
|
evals/ 合同、fixture 与 shadow runner
|
|
290
718
|
docs/ 架构、决策和调研文档
|
|
@@ -293,10 +721,12 @@ docs/ 架构、决策和调研文档
|
|
|
293
721
|
|
|
294
722
|
## 深入阅读
|
|
295
723
|
|
|
724
|
+
- [从一个 Agent 到所有 Agent:行为内核与真实联调环境实施方案](docs/plans/2026-07-16/general-agent-kernel-and-live-lab.md)
|
|
296
725
|
- [代码与运行架构](docs/ARCHITECTURE.md)
|
|
297
726
|
- [安装与首次使用](docs/INSTALLATION.md)
|
|
298
727
|
- [最小 Workspace 决策记录](docs/MINIMAL-WORKSPACE-V1.md)
|
|
299
728
|
- [自测与持续进化](docs/SELF-TEST.md)
|
|
729
|
+
- [一小时复制第二个岗位 Agent](docs/SECOND-AGENT-ACCEPTANCE.md)
|
|
300
730
|
- [开源项目差异与共同范式](docs/OPEN-SOURCE-REFERENCES.md)
|
|
301
731
|
- [贡献指南](CONTRIBUTING.md)
|
|
302
732
|
- [安全策略](SECURITY.md)
|
|
@@ -308,7 +738,7 @@ docs/ 架构、决策和调研文档
|
|
|
308
738
|
- 不复制整个 DWS 命令面;
|
|
309
739
|
- 不把钉钉文档当锁、事务数据库或副作用回执;
|
|
310
740
|
- 不允许在线 Run 自动扩大身份、权限或启用新 Skill;
|
|
311
|
-
-
|
|
741
|
+
- `bootstrap` 对 `dingtalk-doc` 只读水合;远端发布必须经过候选评审、显式授权 Provider 与写后回读。
|
|
312
742
|
|
|
313
743
|
## License
|
|
314
744
|
|