@xdxer/dingtalk-agent 0.1.1 → 0.1.2
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/README.md +81 -80
- package/dist/bin/dingtalk-agent.js +685 -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/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/skill-manager.js +273 -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 +207 -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 +293 -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 +1031 -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/README.md
CHANGED
|
@@ -1,124 +1,125 @@
|
|
|
1
1
|
# dingtalk-agent
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
让 Claude Code、Codex 或其他 Agent 在获得一个全局 Skill 后,像钉钉里的真实同事一样处理消息和协作事项。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
它不内置模型,也不复制 DWS:
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
- Basic Behavior Skill 判断何时响应、追问、沉默,以及如何使用记忆;
|
|
8
|
+
- `dingtalk-agent` 包装需要目标冻结、幂等、回读和状态迁移的员工级动作;
|
|
9
|
+
- DWS 负责钉钉消息、文档、待办、日历等具体产品能力。
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
dingtalk-agent init # 铺出工作区
|
|
12
|
-
# 填 ontology/self/ 的三件套
|
|
13
|
-
dingtalk-agent boot # 真去摸一遍工位,拉不到就 BOOT FAIL
|
|
14
|
-
```
|
|
11
|
+

|
|
15
12
|
|
|
16
|
-
|
|
13
|
+
## 两步开始
|
|
17
14
|
|
|
18
|
-
|
|
15
|
+
```bash
|
|
16
|
+
npm i -g @xdxer/dingtalk-agent
|
|
17
|
+
dingtalk-agent skill install
|
|
18
|
+
```
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|---|---|---|
|
|
22
|
-
| **CLI** | **拦** | 标准动作:可程序化、可强制、可验证。**撞上去没得商量** |
|
|
23
|
-
| **Skill** | **劝** | 判断:只有 LLM 能做的——该不该答、话题归属、怎么写点评 |
|
|
24
|
-
| **本体** | **记** | 我是谁 + 我知道什么。`git clone` 就带走 |
|
|
20
|
+
这会安装一个 canonical Skill:
|
|
25
21
|
|
|
26
|
-
|
|
22
|
+
```text
|
|
23
|
+
~/.agents/skills/dingtalk-basic-behavior/ # Codex 直接发现
|
|
24
|
+
~/.claude/skills/dingtalk-basic-behavior # 相对 symlink → canonical
|
|
25
|
+
```
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
它不会初始化当前目录,也不会修改项目的 `AGENTS.md`、`CLAUDE.md` 或 `.gitignore`。新 Agent 会话会自动发现 Skill;检查状态:
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
```bash
|
|
30
|
+
dingtalk-agent skill status
|
|
31
|
+
```
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
2. **昨天教它的,今天还记得吗?** → **存储**。答否,永远是新来的。
|
|
34
|
-
3. **它干的事,能查、能撤、能追责吗?** → **身份**。答否,没人敢让它真干活。
|
|
33
|
+
## 每个 Agent Session
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
普通会话不要求 init:
|
|
37
36
|
|
|
38
|
-
|
|
37
|
+
```bash
|
|
38
|
+
dingtalk-agent bootstrap --json
|
|
39
|
+
```
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|---|---|---|
|
|
42
|
-
| 真值在 | **Git**(本地) | **钉钉**(远端) |
|
|
43
|
-
| 同步 | `push` 本地 → 钉钉(**给人看**) | `pull` 钉钉 → 本地(**给我 grep**) |
|
|
44
|
-
| 冲突了 | 远端被人改过 → **停下来问** | 远端赢,本地缓存**可丢弃** |
|
|
41
|
+
如果当前目录存在 `WORKSPACE.md`、`MEMORY.md`、`knowledge/INDEX.md`,bootstrap 会直接挂载;都不存在也不是错误,不会自动创建文件。
|
|
45
42
|
|
|
46
|
-
|
|
43
|
+
也可显式选择存储:
|
|
47
44
|
|
|
48
45
|
```bash
|
|
49
|
-
|
|
50
|
-
dingtalk-agent
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
dingtalk-agent
|
|
54
|
-
dingtalk-
|
|
46
|
+
# 本地开发:直接挂载,不复制
|
|
47
|
+
dingtalk-agent bootstrap --storage local-dir:/path/to/workspace --json
|
|
48
|
+
|
|
49
|
+
# 远端员工:DWS probe 后拉成隐藏只读快照
|
|
50
|
+
dingtalk-agent bootstrap \
|
|
51
|
+
--storage 'dingtalk-doc:<nodeId-or-url>' \
|
|
52
|
+
--state-dir /path/to/session-state \
|
|
53
|
+
--json
|
|
55
54
|
```
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
`dingtalk:wiki:<spaceId>` · `local:<路径>`
|
|
56
|
+
## 三种模式
|
|
59
57
|
|
|
60
|
-
|
|
58
|
+
| 模式 | 是否需要 init | 用途 |
|
|
59
|
+
|---|---:|---|
|
|
60
|
+
| Direct Session | 否 | 普通 Claude Code/Codex 会话;应用同事行为,按需使用 DWS |
|
|
61
|
+
| Mounted Session | 否 | 读取已有本地或钉钉文档中的身份、记忆、知识 |
|
|
62
|
+
| Prepared Run | 是,一次 | 可信事件宿主冻结目标、身份、Session/Run、Wait、预算和回执 |
|
|
61
63
|
|
|
62
|
-
|
|
63
|
-
2. **重排版不是漂移。** 钉钉会重写 markdown——用行级 diff 判漂移会**每次都误报**,
|
|
64
|
-
然后你就会开始无脑 `--force`,**真漂移也一起覆盖掉**。判据是"剥掉符号后的文字流"。
|
|
65
|
-
3. **缓存不新鲜就不许用。** *拿着过期快照回答,比说"我不知道"危险得多。*
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## 命令面
|
|
64
|
+
只有第三种模式需要显式初始化:
|
|
70
65
|
|
|
66
|
+
```bash
|
|
67
|
+
mkdir fde-coach && cd fde-coach
|
|
68
|
+
dingtalk-agent init # contextId 可省略,由目录名稳定派生
|
|
69
|
+
dingtalk-agent prepare --event-file event.json --json
|
|
71
70
|
```
|
|
72
|
-
init 铺出工作区
|
|
73
|
-
boot 冷启动:真去摸工位,拉不到就 BOOT FAIL
|
|
74
71
|
|
|
75
|
-
|
|
72
|
+
重复 `init` 只检查现有 Workspace,不重绑 Context、不复制 Skill、不覆盖用户内容。
|
|
76
73
|
|
|
77
|
-
|
|
78
|
-
duty --run <值班>
|
|
79
|
-
todo 把待办【拉全】(翻页,不漏循环件)
|
|
74
|
+
## 员工级原子行为
|
|
80
75
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
76
|
+
Prepared Run 目前只开放四个消息行为:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
dingtalk-agent act ack
|
|
80
|
+
dingtalk-agent act reply --text-file reply.txt
|
|
81
|
+
dingtalk-agent act ask --text "一个真正阻塞的问题"
|
|
82
|
+
dingtalk-agent act silence --reason unmentioned
|
|
85
83
|
```
|
|
86
84
|
|
|
87
|
-
|
|
85
|
+
- `ack` 是“看到了且需要时间”,不等于接单或完成;
|
|
86
|
+
- `reply` 只交付给原消息;CLI 没有 `--to`;
|
|
87
|
+
- `ask` 一次只问一个阻塞问题,并由宿主建立等待;
|
|
88
|
+
- `silence` 是有意识地不打扰,也有本地回执。
|
|
88
89
|
|
|
89
|
-
|
|
90
|
+
文档写、待办创建等裸 API 不在这里重复包装。只有当一个员工意图需要固定作用域、权限、幂等、回读、状态迁移或跨产品组合时,才值得成为新的 `dingtalk-agent` 动作。
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
## 新任务承接
|
|
92
93
|
|
|
93
|
-
|
|
94
|
+
Basic Behavior 使用一条极简协议:`UNDERSTAND → CLARIFY → PLAN → EXECUTE → WAIT → VERIFY → COMPLETE`。“澄清”先在内部检查目标、交付物、完成条件和权限;信息完整就直接做,只有阻塞才向人问一个问题。
|
|
94
95
|
|
|
95
|
-
|
|
96
|
-
- `fb` = **用户层**(主人认不认)
|
|
96
|
+
跨消息、等待依赖或已经产生副作用的事项才写 task checkpoint;单轮问答不建状态。Prepared Run 使用 `$DTA_SESSION/memory/task.md`,本地 Mounted Session 只写显式配置的 state root,远端钉钉文档必须通过授权 Provider 写入并回读。控制面的 Wait、锁、幂等和 Receipt 不进入 Markdown。详见 [任务承接与 Checkpoint](skills/dingtalk-basic-behavior/references/task-lifecycle.md)。
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
## 可选事件宿主
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
`listen` 只是开发联调适配器,不是 Agent 的主入口:
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
```bash
|
|
103
|
+
dingtalk-agent help runtime
|
|
104
|
+
dingtalk-agent help adapters
|
|
105
|
+
```
|
|
103
106
|
|
|
104
|
-
|
|
105
|
-
2. **渐进披露。** 上下文是成本,步数是延迟。*"能不能做到"只是及格线,"几步做到"才是分数。*
|
|
106
|
-
3. **本体不乱动。** 骨骼可以长,但不能天天重接。
|
|
107
|
-
4. **驱动靠心跳,不靠待办。** *待办是给人的,心跳是 Agent 的生理。*
|
|
108
|
-
把"永远做不完的义务"塞进"有终态的待办",链一断就**静默漏执行且不自知**。
|
|
109
|
-
5. **不许本地自证。** 回平台真派一次,**而且要看执行过程**。
|
|
110
|
-
6. **环境正面修,不绕过。**
|
|
107
|
+
云端 Driver、Claude Code 插件或本地 DWS 都可以提供事件;它们从标准化事件以后共享同一 Session/Run/Action 内核和唯一外发 owner。
|
|
111
108
|
|
|
112
|
-
|
|
113
|
-
> **规矩是为了让事情成立,不是为了守规矩。**
|
|
109
|
+
## 自测
|
|
114
110
|
|
|
115
|
-
|
|
111
|
+
```bash
|
|
112
|
+
npm ci
|
|
113
|
+
npm run typecheck
|
|
114
|
+
npm run eval:contract
|
|
115
|
+
```
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
当前确定性合同包含 26 个场景,覆盖全局 Skill 安装与生命周期、无 init bootstrap、本地/远端 Storage、类型闸门、Direct Session 外发闸门,以及原有的 Session、Wait、幂等、目标防篡改和 Skill 冻结。评测页面见 [review.html](evals/results/contract/review.html)。
|
|
118
118
|
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
119
|
+
- [代码与运行架构](docs/ARCHITECTURE.md)
|
|
120
|
+
- [最小 Workspace 决策记录](docs/MINIMAL-WORKSPACE-V1.md)
|
|
121
|
+
- [自测与持续进化](docs/SELF-TEST.md)
|
|
122
|
+
- [开源项目差异与共同范式](docs/OPEN-SOURCE-REFERENCES.md)
|
|
122
123
|
|
|
123
124
|
## License
|
|
124
125
|
|