@xdxer/dingtalk-agent 0.1.1 → 0.1.4-beta.0

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.
Files changed (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +247 -76
  3. package/dist/bin/dingtalk-agent.js +763 -0
  4. package/dist/bin/dingtalk-agent.js.map +1 -0
  5. package/dist/src/actions.js +562 -0
  6. package/dist/src/actions.js.map +1 -0
  7. package/dist/src/boot.js +70 -0
  8. package/dist/src/boot.js.map +1 -0
  9. package/dist/src/bootstrap.js +144 -0
  10. package/dist/src/bootstrap.js.map +1 -0
  11. package/dist/src/config.js +86 -0
  12. package/dist/src/config.js.map +1 -0
  13. package/dist/src/doctor.js +166 -0
  14. package/dist/src/doctor.js.map +1 -0
  15. package/dist/src/driver.js +45 -0
  16. package/dist/src/driver.js.map +1 -0
  17. package/{src → dist/src}/duty.js +42 -44
  18. package/dist/src/duty.js.map +1 -0
  19. package/dist/src/dws.js +270 -0
  20. package/dist/src/dws.js.map +1 -0
  21. package/dist/src/events.js +233 -0
  22. package/dist/src/events.js.map +1 -0
  23. package/dist/src/fields.js +132 -0
  24. package/dist/src/fields.js.map +1 -0
  25. package/dist/src/init.js +41 -0
  26. package/dist/src/init.js.map +1 -0
  27. package/dist/src/kb.js +240 -0
  28. package/dist/src/kb.js.map +1 -0
  29. package/dist/src/package-root.js +17 -0
  30. package/dist/src/package-root.js.map +1 -0
  31. package/dist/src/runs.js +79 -0
  32. package/dist/src/runs.js.map +1 -0
  33. package/dist/src/sessions.js +668 -0
  34. package/dist/src/sessions.js.map +1 -0
  35. package/dist/src/setup.js +101 -0
  36. package/dist/src/setup.js.map +1 -0
  37. package/dist/src/skill-manager.js +288 -0
  38. package/dist/src/skill-manager.js.map +1 -0
  39. package/dist/src/skills.js +200 -0
  40. package/dist/src/skills.js.map +1 -0
  41. package/dist/src/types.js +2 -0
  42. package/dist/src/types.js.map +1 -0
  43. package/dist/src/waits.js +945 -0
  44. package/dist/src/waits.js.map +1 -0
  45. package/dist/src/workspace.js +173 -0
  46. package/dist/src/workspace.js.map +1 -0
  47. package/docs/ARCHITECTURE.md +217 -0
  48. package/docs/INSTALLATION.md +135 -0
  49. package/docs/MINIMAL-WORKSPACE-V1.md +172 -0
  50. package/docs/OPEN-SOURCE-REFERENCES.md +107 -0
  51. package/docs/SELF-TEST.md +252 -0
  52. package/docs/architecture/dingtalk-agent-blueprint.png +0 -0
  53. package/docs/architecture/dingtalk-agent-blueprint.svg +144 -0
  54. package/docs/architecture/durable-async-agent-runtime.png +0 -0
  55. package/docs/architecture/durable-async-agent-runtime.svg +234 -0
  56. package/docs//345/206/205/347/275/221/345/256/236/347/233/270.md +77 -0
  57. package/evals/baselines/2026-07-14/behavior-summary.json +28 -0
  58. package/evals/baselines/2026-07-14/contract-summary.json +18 -0
  59. package/evals/baselines/2026-07-14/live-canary-summary.json +25 -0
  60. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/SKILL.md +72 -0
  61. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/action-contract.md +31 -0
  62. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/event-to-behavior.md +22 -0
  63. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/memory-and-evolution.md +25 -0
  64. package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/runtime-modes.md +34 -0
  65. package/evals/baselines/2026-07-15/task-lifecycle-summary.json +50 -0
  66. package/evals/evals.json +316 -0
  67. package/evals/fixtures/dm-ambiguous-send.json +4 -0
  68. package/evals/fixtures/dm-blocked.json +4 -0
  69. package/evals/fixtures/dm-clear.json +4 -0
  70. package/evals/fixtures/dm-discussion.json +4 -0
  71. package/evals/fixtures/dm-doc-write-no-tool.json +4 -0
  72. package/evals/fixtures/dm-long-task-ack.json +4 -0
  73. package/evals/fixtures/dm-nonblocking-gap.json +4 -0
  74. package/evals/fixtures/dm-structured-task.json +4 -0
  75. package/evals/fixtures/group.json +10 -0
  76. package/evals/fixtures/mentioned.json +3 -0
  77. package/evals/run-contract-evals.mjs +1106 -0
  78. package/evals/run-shadow-evals.mjs +267 -0
  79. package/evals/runners/README.md +66 -0
  80. package/evals/runners/claude-shadow.mjs +533 -0
  81. package/evals/schemas/action-request.schema.json +77 -0
  82. package/evals/shadow-evals.json +133 -0
  83. package/package.json +28 -6
  84. package/skills/AGENTS.md +21 -3
  85. package/skills/dingtalk-basic-behavior/SKILL.md +86 -0
  86. package/skills/dingtalk-basic-behavior/assets/task-checkpoint.md +37 -0
  87. package/skills/dingtalk-basic-behavior/references/action-contract.md +31 -0
  88. package/skills/dingtalk-basic-behavior/references/event-to-behavior.md +24 -0
  89. package/skills/dingtalk-basic-behavior/references/memory-and-evolution.md +27 -0
  90. package/skills/dingtalk-basic-behavior/references/runtime-modes.md +34 -0
  91. package/skills/dingtalk-basic-behavior/references/task-lifecycle.md +108 -0
  92. package/skills//345/237/272/347/241/200/350/241/214/344/270/272.md +44 -0
  93. package/skills//345/277/203/350/267/263.md +11 -0
  94. package/skills//346/266/210/346/201/257.md +14 -14
  95. package/skills//350/257/204/346/265/213.md +14 -1
  96. package/skills//351/222/211/351/222/211.md +3 -2
  97. package/templates/behaviors/basic.json +68 -0
  98. package/templates/fields/default/field.json +25 -0
  99. package/bin/dingtalk-agent.js +0 -289
  100. package/src/boot.js +0 -65
  101. package/src/config.js +0 -42
  102. package/src/dws.js +0 -192
  103. package/src/init.js +0 -84
  104. package/src/kb.js +0 -221
  105. package/src/runs.js +0 -77
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 dingtalk-agent contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,125 +1,296 @@
1
+ <div align="center">
2
+
1
3
  # dingtalk-agent
2
4
 
3
- **钉钉数字员工的标准范式:CLI(拦)+ Skill(劝)。**
5
+ **让 AI Agent 像钉钉里的可靠同事一样感知、判断、行动与留痕。**
6
+
7
+ [![npm](https://img.shields.io/npm/v/%40xdxer%2Fdingtalk-agent?logo=npm&color=cb3837)](https://www.npmjs.com/package/@xdxer/dingtalk-agent)
8
+ [![CI](https://github.com/D1-2004/dingtalk-agent/actions/workflows/ci.yml/badge.svg)](https://github.com/D1-2004/dingtalk-agent/actions/workflows/ci.yml)
9
+ [![Node.js](https://img.shields.io/node/v/%40xdxer%2Fdingtalk-agent)](https://nodejs.org/)
10
+ [![License](https://img.shields.io/badge/license-MIT-2ea44f)](LICENSE)
11
+
12
+ [快速开始](#两分钟开始) · [核心模型](#核心模型) · [架构](#架构) · [行为协议](#数字员工行为协议) · [评测](#评测与验证)
13
+
14
+ </div>
15
+
16
+ `dingtalk-agent` 是一个 **Skill-first 的钉钉数字员工行为框架**。它不内置模型,也不复制 DWS;它把“像同事一样工作”拆成三层:
17
+
18
+ - **Basic Behavior Skill**:判断何时响应、追问、确认或保持沉默;
19
+ - **CLI Runtime**:冻结身份、目标和事务边界,提供可审计的员工级原子动作;
20
+ - **DWS**:执行钉钉消息、文档、待办、日历等具体产品能力。
21
+
22
+ 它可以被 Claude Code、Codex 或其他 Agent Host 使用,也可以作为更完整数字员工系统的基础蓝本。
23
+
24
+ ![dingtalk-agent Skill-first 架构](docs/architecture/dingtalk-agent-blueprint.png)
4
25
 
5
- 零运行时依赖。任何 Coding Agent(Claude Code / Codex / …)`init` 即用。
26
+ ## 为什么需要它
27
+
28
+ “会调用钉钉 API”不等于“会像员工一样工作”。真实协作还要求 Agent:
29
+
30
+ - 群里未被提及时默认不抢话,被 `@` 或私聊时才获得响应资格;
31
+ - 信息完整就直接交付,只有真正阻塞时才问一个问题;
32
+ - 不从消息正文猜收件人、身份、文档 ID 或权限;
33
+ - 长任务能确认收到、等待依赖、从下一条事件继续,而不是假装一直在线;
34
+ - 区分“命令执行过”“平台写入成功”“回读可见”和“对方确认”;
35
+ - 将任务状态、长期记忆、运行时锁和幂等回执放在正确的存储层。
36
+
37
+ 本项目把这些约束从一段巨型 Prompt 中拆出来:**Skill 负责判断,CLI 负责硬边界,DWS 负责平台能力。**
38
+
39
+ ## 两分钟开始
40
+
41
+ > 要求 Node.js 18.3+。不需要先全局安装命令;`npx` 是不会受 PATH 影响的 bootstrap 入口。
6
42
 
7
43
  ```bash
8
- npm i -g dingtalk-agent
44
+ npx --yes @xdxer/dingtalk-agent@beta setup
45
+ ```
46
+
47
+ `setup` 会按顺序完成四件事:
9
48
 
10
- mkdir my-agent && cd my-agent
11
- dingtalk-agent init # 铺出工作区
12
- # ontology/self/ 的三件套
13
- dingtalk-agent boot # 真去摸一遍工位,拉不到就 BOOT FAIL
49
+ 1. CLI 安装到用户目录 `~/.local/bin`,必要时幂等补充 shell PATH;
50
+ 2. 检查 Node.js、DWS 版本和 `dws auth status`;
51
+ 3. 安装并验证 Basic Behavior Skill;
52
+ 4. 报告 Claude Code、Codex、OpenCode 是否能够发现 Skill。
53
+
54
+ 当前终端尚未加载新 PATH 时,setup 会打印一条可直接执行的 `export PATH=...`。验证结果:
55
+
56
+ ```bash
57
+ dingtalk-agent doctor
14
58
  ```
15
59
 
16
- ---
60
+ 安装后,Skill 只有一份 canonical copy:
17
61
 
18
- ## 范式
62
+ ```text
63
+ ~/.agents/skills/dingtalk-basic-behavior/ # Codex、OpenCode 直接发现
64
+ ~/.claude/skills/dingtalk-basic-behavior # Claude Code → canonical 相对链接
65
+ ```
19
66
 
20
- | | | |
21
- |---|---|---|
22
- | **CLI** | **拦** | 标准动作:可程序化、可强制、可验证。**撞上去没得商量** |
23
- | **Skill** | **劝** | 判断:只有 LLM 能做的——该不该答、话题归属、怎么写点评 |
24
- | **本体** | **记** | 我是谁 + 我知道什么。`git clone` 就带走 |
67
+ 如果只想临时运行、不做用户级安装,任何命令都可以通过 npm exec 执行:
68
+
69
+ ```bash
70
+ npx --yes @xdxer/dingtalk-agent@beta doctor
71
+ npx --yes @xdxer/dingtalk-agent@beta skill install
72
+ ```
25
73
 
26
- **分界线:凡是能程序化的,收进 CLI;凡是需要判断的,留在 Skill。**
74
+ 也兼容开放的 `skills` CLI。仓库有访问权限时,可只安装 Skill 到三个客户端:
27
75
 
28
- 因为文档会被漏读、误读、自我说服;**撞到闸门上就没得商量。**
76
+ ```bash
77
+ npx skills add D1-2004/dingtalk-agent \
78
+ --skill dingtalk-basic-behavior --global --yes \
79
+ --agent claude-code --agent codex --agent opencode
80
+ ```
29
81
 
30
- ## 三个判定(现场可测)
82
+ 从本地 checkout 安装则使用:
31
83
 
32
- 1. **不喊它,它自己会动吗?** → **事件**。答否,只是聊天框。
33
- 2. **昨天教它的,今天还记得吗?** **存储**。答否,永远是新来的。
34
- 3. **它干的事,能查、能撤、能追责吗?** **身份**。答否,没人敢让它真干活。
84
+ ```bash
85
+ npx skills add ./skills/dingtalk-basic-behavior \
86
+ --global --yes --agent claude-code --agent codex --agent opencode
87
+ ```
35
88
 
36
- ---
89
+ `npx skills` 只安装行为说明,不安装 `dingtalk-agent` CLI,也不检查 DWS;需要真实执行钉钉动作时仍应运行 `setup` 或 `doctor`。完整排障见 [安装与首次使用](docs/INSTALLATION.md)。
37
90
 
38
- ## 知识库:所有权决定真值方向
91
+ 普通 Agent 会话无需初始化项目。进入任意目录后可直接发现上下文:
39
92
 
40
- | | **owned**(我的本体) | **external**(别人维护的) |
41
- |---|---|---|
42
- | 真值在 | **Git**(本地) | **钉钉**(远端) |
43
- | 同步 | `push` 本地 → 钉钉(**给人看**) | `pull` 钉钉 → 本地(**给我 grep**) |
44
- | 冲突了 | 远端被人改过 → **停下来问** | 远端赢,本地缓存**可丢弃** |
93
+ ```bash
94
+ dingtalk-agent bootstrap --json
95
+ ```
45
96
 
46
- **Git 是常量层,钉钉是可替换的暴露层。**
97
+ 只有可信事件宿主需要冻结目标并建立 Prepared Run:
47
98
 
48
99
  ```bash
49
- dingtalk-agent kb mount --name 公司知识库 --from dingtalk:doc:<folderId> --own external
50
- dingtalk-agent kb mount --name 本体 --from dingtalk:doc:<folderId> --own owned --local ontology
51
- dingtalk-agent kb mount --name 团队wiki --from local:/path/to/wiki --sync none
100
+ mkdir fde-coach && cd fde-coach
101
+ dingtalk-agent init
102
+ dingtalk-agent prepare --event-file event.json --json
103
+ ```
104
+
105
+ ## 核心模型
106
+
107
+ ### 三种运行模式
52
108
 
53
- dingtalk-agent kb sync # 同步(漂移检测,绝不盲覆盖)
54
- dingtalk-agent kb search "<关键词>" # 跨所有挂载点搜(过期缓存会警告)
109
+ | 模式 | 初始化 | 上下文 | 适用场景 |
110
+ |---|---:|---|---|
111
+ | **Direct Session** | 不需要 | 当前请求与宿主提供的信息 | 普通 Claude Code / Codex 会话 |
112
+ | **Mounted Session** | 不需要 | 本地 Markdown 或钉钉文档快照 | 带身份、记忆和知识的长期员工 |
113
+ | **Prepared Run** | Workspace 一次性初始化 | 可信事件冻结的目标、身份与策略 | 自动化事件处理和强可靠外发 |
114
+
115
+ 本地内容直接挂载,不复制:
116
+
117
+ ```bash
118
+ dingtalk-agent bootstrap --storage local-dir:/path/to/workspace --json
55
119
  ```
56
120
 
57
- 三种源:`dingtalk:doc:<folderId>`(最常见——很多组织根本没建"知识库")·
58
- `dingtalk:wiki:<spaceId>` · `local:<路径>`
121
+ 远端内容由 DWS 探测并拉成隐藏的只读快照:
59
122
 
60
- **三个硬约束**(全是踩出来的):
123
+ ```bash
124
+ dingtalk-agent bootstrap \
125
+ --storage 'dingtalk-doc:<node-id-or-url>' \
126
+ --state-dir /path/to/session-state \
127
+ --json
128
+ ```
61
129
 
62
- 1. **绝不双向自动 merge。** 一个方向是真值,另一个是投影。
63
- 2. **重排版不是漂移。** 钉钉会重写 markdown——用行级 diff 判漂移会**每次都误报**,
64
- 然后你就会开始无脑 `--force`,**真漂移也一起覆盖掉**。判据是"剥掉符号后的文字流"。
65
- 3. **缓存不新鲜就不许用。** *拿着过期快照回答,比说"我不知道"危险得多。*
130
+ ### 四个消息原子行为
66
131
 
67
- ---
132
+ Prepared Run 只开放四个消息动作:
68
133
 
69
- ## 命令面
134
+ ```bash
135
+ dingtalk-agent act ack
136
+ dingtalk-agent act reply --text-file reply.txt
137
+ dingtalk-agent act ask --text "一个真正阻塞的问题"
138
+ dingtalk-agent act silence --reason unmentioned
139
+ ```
70
140
 
141
+ | 动作 | 员工语义 | 关键边界 |
142
+ |---|---|---|
143
+ | `ack` | 看到了,确实需要时间处理 | 不等于接单、承诺或完成 |
144
+ | `reply` | 已有可交付结果 | 只回复原消息,CLI 没有 `--to` |
145
+ | `ask` | 缺少阻塞信息 | 一次只问一个问题,随后释放沙箱等待事件 |
146
+ | `silence` | 有意识地不打扰 | 仍留下结构化 reason 和本地回执 |
147
+
148
+ 文档写入、待办创建等能力继续由 DWS 提供。只有当一个员工意图需要固定作用域、权限、幂等、回读、状态迁移或跨产品组合时,才值得包装成新的 CLI 动作。
149
+
150
+ ## 架构
151
+
152
+ ```mermaid
153
+ flowchart TB
154
+ SIGNAL["钉钉消息 / @ / DM / 心跳"] --> HOST["Claude Code / Codex / Agent Host"]
155
+ BASIC["Basic Behavior Skill\n响应资格与员工协议"] --> HOST
156
+ ROLE["岗位 / Workflow Skill\nFDE、周报、事故处理"] --> HOST
157
+ HOST --> BOOT["bootstrap\n按需水合身份、记忆与知识"]
158
+ BOOT --> LOCAL["Local Markdown"]
159
+ BOOT --> DOC["DingTalk Doc Snapshot"]
160
+ HOST --> MODE{"可信事件?"}
161
+ MODE -- "否" --> DIRECT["Direct / Mounted Session"]
162
+ MODE -- "是" --> RUNTIME["Prepared Run Runtime\nSession / Run / Wait / Gate"]
163
+ RUNTIME --> ACTION["ack / reply / ask / silence"]
164
+ DIRECT --> DWS["DWS"]
165
+ ACTION --> DWS
166
+ DWS --> PRODUCTS["消息 / 文档 / 待办 / 日历"]
71
167
  ```
72
- init 铺出工作区
73
- boot 冷启动:真去摸工位,拉不到就 BOOT FAIL
74
168
 
75
- kb mount / list / sync / search
169
+ ### 事件驱动的异步进程
76
170
 
77
- duty --check 一拍两问之一(无事静默,退出码 0)
78
- duty --run <值班>
79
- todo 把待办【拉全】(翻页,不漏循环件)
171
+ 每条新信号可以启动一个新沙箱,但同一件事仍回到同一个 Session:
80
172
 
81
- log --did … --asked … --conv X --issue X --msg X 答完落一行
82
- feedback --kind 纠正|追问|认可 --text … --conv X 主人的下一句话
83
- runs --conv <会话> 拉出整条对话流(训练素材)
84
- evolve 这周该改什么
173
+ ```text
174
+ Field / Workspace = 长期身份、知识与 Skill(Heap)
175
+ Session = 一件工作的显式上下文(Stack)
176
+ Run = 一次事件唤醒的新沙箱
177
+ Wait = await continuation,由宿主持久化和恢复
178
+ Action = 受约束的系统调用
179
+ Receipt = 可审计的外部效果证据
85
180
  ```
86
181
 
87
- ## 留痕:三个硬 ID
182
+ `ask` 后当前 Run 结束;匹配事件到达时,宿主恢复原 Session 并创建新 Run。系统持久化显式 checkpoint,而不是序列化 JavaScript 或模型的隐藏调用栈。
88
183
 
89
- 每行运行记录钉住 `issue`(翻得出运行过程)· `conv`(**拉得出整条对话流**)· `msg`(定位到那一句)。
184
+ ### 存储边界
90
185
 
91
- **缺了这三个,记录就只是一堆"我做了什么",出了问题什么也追不到。**
186
+ | Markdown / 钉钉文档 | 宿主状态存储 |
187
+ |---|---|
188
+ | 身份、长期知识、社交记忆、任务 checkpoint、Skill 候选 | EventIndex、Wait、锁、generation、幂等键、Action intent/receipt |
92
189
 
93
- 而且两个成败必须**分开**:
190
+ Why:文档适合人和 Agent 共同审查,但没有可靠 CAS;请求超时也不能证明写失败,因此不能承担并发控制或副作用去重。
94
191
 
95
- - `r` = **引擎层**(命令跑通没有)
96
- - `fb` = **用户层**(主人认不认)
192
+ ## 数字员工行为协议
97
193
 
98
- **引擎跑通 ≠ 答对 ≠ 主人满意。只看 `r`,你会看到一片绿,然后什么也进化不了。**
194
+ 新任务遵循:
99
195
 
100
- ---
196
+ ```text
197
+ UNDERSTAND → CLARIFY → PLAN → EXECUTE → WAIT → VERIFY → COMPLETE
198
+ ```
199
+
200
+ - **UNDERSTAND**:从当前消息和可信 continuation 还原目标、交付物、范围、完成条件、权限与时点;
201
+ - **CLARIFY**:先查线程、附件、Workspace 和岗位 Skill;信息足够就做,真阻塞才问;
202
+ - **PLAN**:单步任务不表演计划,多步任务建立 2~5 个可观察检查点;
203
+ - **EXECUTE**:外部副作用前重新核对对象、权限、幂等和最新状态;
204
+ - **WAIT**:记录等待谁、什么输入、从哪里继续,然后释放沙箱;
205
+ - **VERIFY**:通过工具结果和必要回读区分生成、保存、送达与确认;
206
+ - **COMPLETE**:回到原线程交付结果、证据、遗留项和下一责任人。
207
+
208
+ 只有跨消息、等待依赖、已经产生副作用、需要换沙箱接手或用户明确要求跟踪的事项才创建 checkpoint。单轮问答不制造“伪任务”。
209
+
210
+ ## Skill、CLI 与 DWS 如何组合
211
+
212
+ ```text
213
+ Basic Behavior Skill 每个钉钉员工共享的社交与安全底座
214
+ +
215
+ Role / Workflow Skill 某个岗位如何完成 FDE 评价、周报、事故处理
216
+ +
217
+ Agent Definition 身份、服务对象、知识源、记忆与权限
218
+ +
219
+ dingtalk-agent CLI 需要强约束的员工级事务边界
220
+ +
221
+ DWS 钉钉标准产品能力
222
+ ```
101
223
 
102
- ## 六条铁律
224
+ 这意味着一个 FDE 教练只需在基础行为之上叠加教练身份、评价方法与学员资料;基础层无需知道任何 FDE 业务细节。
103
225
 
104
- 1. **人能读。** 裸 ID 必须紧跟中文名。*技能不是私有格式,是人和 Agent 的共同契约。*
105
- 2. **渐进披露。** 上下文是成本,步数是延迟。*"能不能做到"只是及格线,"几步做到"才是分数。*
106
- 3. **本体不乱动。** 骨骼可以长,但不能天天重接。
107
- 4. **驱动靠心跳,不靠待办。** *待办是给人的,心跳是 Agent 的生理。*
108
- 把"永远做不完的义务"塞进"有终态的待办",链一断就**静默漏执行且不自知**。
109
- 5. **不许本地自证。** 回平台真派一次,**而且要看执行过程**。
110
- 6. **环境正面修,不绕过。**
226
+ ## 常用命令
227
+
228
+ ```bash
229
+ dingtalk-agent --help
230
+ dingtalk-agent doctor
231
+ dingtalk-agent setup
232
+ dingtalk-agent skill install
233
+ dingtalk-agent skill status
234
+ dingtalk-agent bootstrap --json
235
+ dingtalk-agent init
236
+ dingtalk-agent prepare --event-file event.json --json
237
+ dingtalk-agent help runtime
238
+ dingtalk-agent help adapters
239
+ dingtalk-agent eval contract
240
+ ```
241
+
242
+ `listen` 是可选的开发联调 Adapter,不是 Agent 主进程。云端 Driver、Claude Code 插件或本地 DWS 都可以提供事件,并从标准化事件之后复用同一 Session / Run / Action 内核。
243
+
244
+ ## 评测与验证
245
+
246
+ ```bash
247
+ npm ci
248
+ npm run typecheck
249
+ npm run eval:contract
250
+ ```
251
+
252
+ 当前确定性合同包含 **28 个场景**,覆盖:
253
+
254
+ - 全局 Skill 安装、发现、升级和漂移保护;
255
+ - 首次 setup、用户级 PATH、DWS 版本/认证和三端客户端发现;
256
+ - 无 init bootstrap、本地/远端 Storage 与类型闸门;
257
+ - Direct Session 外发边界;
258
+ - Session continuation、Wait、幂等和目标防篡改;
259
+ - Skill 冻结、动作预算和 Receipt。
260
+
261
+ 模型行为还可通过 Claude shadow 做 with-skill / baseline 对照;它只允许读取冻结输入并输出 ActionRequest,不产生任何钉钉副作用。完整晋级门禁见 [自测与持续进化](docs/SELF-TEST.md)。
262
+
263
+ ## 项目结构
264
+
265
+ ```text
266
+ bin/ CLI composition root
267
+ src/ TypeScript runtime
268
+ skills/dingtalk-basic-behavior/ 可安装的基础行为 Skill
269
+ templates/ Workspace 与行为模板
270
+ evals/ 合同、fixture 与 shadow runner
271
+ docs/ 架构、决策和调研文档
272
+ .github/ CI 与协作模板
273
+ ```
111
274
 
112
- > **一条例外**:当一条自定的约束成了阻塞,先解阻塞。
113
- > **规矩是为了让事情成立,不是为了守规矩。**
275
+ ## 深入阅读
114
276
 
115
- ---
277
+ - [代码与运行架构](docs/ARCHITECTURE.md)
278
+ - [安装与首次使用](docs/INSTALLATION.md)
279
+ - [最小 Workspace 决策记录](docs/MINIMAL-WORKSPACE-V1.md)
280
+ - [自测与持续进化](docs/SELF-TEST.md)
281
+ - [开源项目差异与共同范式](docs/OPEN-SOURCE-REFERENCES.md)
282
+ - [贡献指南](CONTRIBUTING.md)
283
+ - [安全策略](SECURITY.md)
116
284
 
117
- ## 依赖
285
+ ## 当前边界
118
286
 
119
- - `node >= 18.3`
120
- - `dws` —— 钉钉的 CLI(Agent 在钉钉上的行动界面)
121
- - **零 npm 运行时依赖**
287
+ - 不把 `listen` 作为 Agent 的强制主入口;
288
+ - 不自动初始化或污染任意代码仓库;
289
+ - 不复制整个 DWS 命令面;
290
+ - 不把钉钉文档当锁、事务数据库或副作用回执;
291
+ - 不允许在线 Run 自动扩大身份、权限或启用新 Skill;
292
+ - 当前 `dingtalk-doc` 只读水合,远端写入必须经过显式授权 Provider 并回读。
122
293
 
123
294
  ## License
124
295
 
125
- MIT
296
+ [MIT](LICENSE)