@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.
- package/LICENSE +21 -0
- package/README.md +247 -76
- package/dist/bin/dingtalk-agent.js +763 -0
- package/dist/bin/dingtalk-agent.js.map +1 -0
- package/dist/src/actions.js +562 -0
- package/dist/src/actions.js.map +1 -0
- package/dist/src/boot.js +70 -0
- package/dist/src/boot.js.map +1 -0
- package/dist/src/bootstrap.js +144 -0
- package/dist/src/bootstrap.js.map +1 -0
- package/dist/src/config.js +86 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/doctor.js +166 -0
- package/dist/src/doctor.js.map +1 -0
- package/dist/src/driver.js +45 -0
- package/dist/src/driver.js.map +1 -0
- package/{src → dist/src}/duty.js +42 -44
- package/dist/src/duty.js.map +1 -0
- package/dist/src/dws.js +270 -0
- package/dist/src/dws.js.map +1 -0
- package/dist/src/events.js +233 -0
- package/dist/src/events.js.map +1 -0
- package/dist/src/fields.js +132 -0
- package/dist/src/fields.js.map +1 -0
- package/dist/src/init.js +41 -0
- package/dist/src/init.js.map +1 -0
- package/dist/src/kb.js +240 -0
- package/dist/src/kb.js.map +1 -0
- package/dist/src/package-root.js +17 -0
- package/dist/src/package-root.js.map +1 -0
- package/dist/src/runs.js +79 -0
- package/dist/src/runs.js.map +1 -0
- package/dist/src/sessions.js +668 -0
- package/dist/src/sessions.js.map +1 -0
- package/dist/src/setup.js +101 -0
- package/dist/src/setup.js.map +1 -0
- package/dist/src/skill-manager.js +288 -0
- package/dist/src/skill-manager.js.map +1 -0
- package/dist/src/skills.js +200 -0
- package/dist/src/skills.js.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/waits.js +945 -0
- package/dist/src/waits.js.map +1 -0
- package/dist/src/workspace.js +173 -0
- package/dist/src/workspace.js.map +1 -0
- package/docs/ARCHITECTURE.md +217 -0
- package/docs/INSTALLATION.md +135 -0
- package/docs/MINIMAL-WORKSPACE-V1.md +172 -0
- package/docs/OPEN-SOURCE-REFERENCES.md +107 -0
- package/docs/SELF-TEST.md +252 -0
- package/docs/architecture/dingtalk-agent-blueprint.png +0 -0
- package/docs/architecture/dingtalk-agent-blueprint.svg +144 -0
- package/docs/architecture/durable-async-agent-runtime.png +0 -0
- package/docs/architecture/durable-async-agent-runtime.svg +234 -0
- package/docs//345/206/205/347/275/221/345/256/236/347/233/270.md +77 -0
- package/evals/baselines/2026-07-14/behavior-summary.json +28 -0
- package/evals/baselines/2026-07-14/contract-summary.json +18 -0
- package/evals/baselines/2026-07-14/live-canary-summary.json +25 -0
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/SKILL.md +72 -0
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/action-contract.md +31 -0
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/event-to-behavior.md +22 -0
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/memory-and-evolution.md +25 -0
- package/evals/baselines/2026-07-15/dingtalk-basic-behavior-0.3.0/references/runtime-modes.md +34 -0
- package/evals/baselines/2026-07-15/task-lifecycle-summary.json +50 -0
- package/evals/evals.json +316 -0
- package/evals/fixtures/dm-ambiguous-send.json +4 -0
- package/evals/fixtures/dm-blocked.json +4 -0
- package/evals/fixtures/dm-clear.json +4 -0
- package/evals/fixtures/dm-discussion.json +4 -0
- package/evals/fixtures/dm-doc-write-no-tool.json +4 -0
- package/evals/fixtures/dm-long-task-ack.json +4 -0
- package/evals/fixtures/dm-nonblocking-gap.json +4 -0
- package/evals/fixtures/dm-structured-task.json +4 -0
- package/evals/fixtures/group.json +10 -0
- package/evals/fixtures/mentioned.json +3 -0
- package/evals/run-contract-evals.mjs +1106 -0
- package/evals/run-shadow-evals.mjs +267 -0
- package/evals/runners/README.md +66 -0
- package/evals/runners/claude-shadow.mjs +533 -0
- package/evals/schemas/action-request.schema.json +77 -0
- package/evals/shadow-evals.json +133 -0
- package/package.json +28 -6
- package/skills/AGENTS.md +21 -3
- package/skills/dingtalk-basic-behavior/SKILL.md +86 -0
- package/skills/dingtalk-basic-behavior/assets/task-checkpoint.md +37 -0
- package/skills/dingtalk-basic-behavior/references/action-contract.md +31 -0
- package/skills/dingtalk-basic-behavior/references/event-to-behavior.md +24 -0
- package/skills/dingtalk-basic-behavior/references/memory-and-evolution.md +27 -0
- package/skills/dingtalk-basic-behavior/references/runtime-modes.md +34 -0
- package/skills/dingtalk-basic-behavior/references/task-lifecycle.md +108 -0
- package/skills//345/237/272/347/241/200/350/241/214/344/270/272.md +44 -0
- package/skills//345/277/203/350/267/263.md +11 -0
- package/skills//346/266/210/346/201/257.md +14 -14
- package/skills//350/257/204/346/265/213.md +14 -1
- package/skills//351/222/211/351/222/211.md +3 -2
- package/templates/behaviors/basic.json +68 -0
- package/templates/fields/default/field.json +25 -0
- package/bin/dingtalk-agent.js +0 -289
- package/src/boot.js +0 -65
- package/src/config.js +0 -42
- package/src/dws.js +0 -192
- package/src/init.js +0 -84
- package/src/kb.js +0 -221
- 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
|
-
|
|
5
|
+
**让 AI Agent 像钉钉里的可靠同事一样感知、判断、行动与留痕。**
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/@xdxer/dingtalk-agent)
|
|
8
|
+
[](https://github.com/D1-2004/dingtalk-agent/actions/workflows/ci.yml)
|
|
9
|
+
[](https://nodejs.org/)
|
|
10
|
+
[](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
|
+

|
|
4
25
|
|
|
5
|
-
|
|
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
|
-
|
|
44
|
+
npx --yes @xdxer/dingtalk-agent@beta setup
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`setup` 会按顺序完成四件事:
|
|
9
48
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
| 同步 | `push` 本地 → 钉钉(**给人看**) | `pull` 钉钉 → 本地(**给我 grep**) |
|
|
44
|
-
| 冲突了 | 远端被人改过 → **停下来问** | 远端赢,本地缓存**可丢弃** |
|
|
93
|
+
```bash
|
|
94
|
+
dingtalk-agent bootstrap --json
|
|
95
|
+
```
|
|
45
96
|
|
|
46
|
-
|
|
97
|
+
只有可信事件宿主需要冻结目标并建立 Prepared Run:
|
|
47
98
|
|
|
48
99
|
```bash
|
|
49
|
-
|
|
50
|
-
dingtalk-agent
|
|
51
|
-
dingtalk-agent
|
|
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
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
169
|
+
### 事件驱动的异步进程
|
|
76
170
|
|
|
77
|
-
|
|
78
|
-
duty --run <值班>
|
|
79
|
-
todo 把待办【拉全】(翻页,不漏循环件)
|
|
171
|
+
每条新信号可以启动一个新沙箱,但同一件事仍回到同一个 Session:
|
|
80
172
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
182
|
+
`ask` 后当前 Run 结束;匹配事件到达时,宿主恢复原 Session 并创建新 Run。系统持久化显式 checkpoint,而不是序列化 JavaScript 或模型的隐藏调用栈。
|
|
88
183
|
|
|
89
|
-
|
|
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
|
-
|
|
96
|
-
- `fb` = **用户层**(主人认不认)
|
|
192
|
+
## 数字员工行为协议
|
|
97
193
|
|
|
98
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
- `
|
|
120
|
-
-
|
|
121
|
-
-
|
|
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)
|