team-anya-cli 0.1.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 (163) hide show
  1. package/README.md +38 -0
  2. package/anya/prompts/execution-guides/git-delivery.md +38 -0
  3. package/anya/prompts/execution-guides/testing-and-self-heal.md +28 -0
  4. package/anya/prompts/protocols/brief-assembly.md +55 -0
  5. package/anya/prompts/protocols/report.md +175 -0
  6. package/anya/prompts/protocols/review.md +90 -0
  7. package/anya/prompts/task-claude-md.template.md +32 -0
  8. package/apps/server/dist/broker/cc-broker.js +257 -0
  9. package/apps/server/dist/cli.js +296 -0
  10. package/apps/server/dist/config.js +76 -0
  11. package/apps/server/dist/daemon.js +51 -0
  12. package/apps/server/dist/gateway/chat-sync.js +135 -0
  13. package/apps/server/dist/gateway/command-router.js +114 -0
  14. package/apps/server/dist/gateway/commands/cancel.js +32 -0
  15. package/apps/server/dist/gateway/commands/help.js +16 -0
  16. package/apps/server/dist/gateway/commands/index.js +26 -0
  17. package/apps/server/dist/gateway/commands/restart.js +34 -0
  18. package/apps/server/dist/gateway/commands/status.js +34 -0
  19. package/apps/server/dist/gateway/commands/tasks.js +33 -0
  20. package/apps/server/dist/gateway/feishu-sender.js +346 -0
  21. package/apps/server/dist/gateway/feishu-ws.js +254 -0
  22. package/apps/server/dist/gateway/http.js +994 -0
  23. package/apps/server/dist/gateway/media-downloader.js +149 -0
  24. package/apps/server/dist/gateway/message-events.js +10 -0
  25. package/apps/server/dist/gateway/message-intake.js +50 -0
  26. package/apps/server/dist/gateway/message-queue.js +104 -0
  27. package/apps/server/dist/gateway/session-reader.js +142 -0
  28. package/apps/server/dist/gateway/ws-push.js +115 -0
  29. package/apps/server/dist/loid/brain.js +104 -0
  30. package/apps/server/dist/loid/clarifier.js +162 -0
  31. package/apps/server/dist/loid/context-builder.js +413 -0
  32. package/apps/server/dist/loid/mcp-server.js +104 -0
  33. package/apps/server/dist/loid/memory-settler.js +189 -0
  34. package/apps/server/dist/loid/opportunity-manager.js +148 -0
  35. package/apps/server/dist/loid/profile-updater.js +179 -0
  36. package/apps/server/dist/loid/reporter.js +148 -0
  37. package/apps/server/dist/loid/schemas.js +117 -0
  38. package/apps/server/dist/loid/self-calibrator.js +314 -0
  39. package/apps/server/dist/loid/session-manager.js +217 -0
  40. package/apps/server/dist/loid/session.js +271 -0
  41. package/apps/server/dist/loid/worktree-manager.js +191 -0
  42. package/apps/server/dist/main.js +337 -0
  43. package/apps/server/dist/tracing/index.js +2 -0
  44. package/apps/server/dist/tracing/trace-context.js +92 -0
  45. package/apps/server/dist/types/message.js +2 -0
  46. package/apps/server/dist/yor/yor-mcp-server.js +104 -0
  47. package/apps/server/dist/yor/yor-orchestrator.js +233 -0
  48. package/apps/web/dist/assets/index-CHIT0Dya.css +1 -0
  49. package/apps/web/dist/assets/index-CJzAjoVH.js +798 -0
  50. package/apps/web/dist/index.html +13 -0
  51. package/package.json +42 -0
  52. package/packages/cc-client/dist/claude-code-backend.js +664 -0
  53. package/packages/cc-client/dist/index.js +2 -0
  54. package/packages/cc-client/package.json +11 -0
  55. package/packages/core/dist/constants.js +59 -0
  56. package/packages/core/dist/errors.js +35 -0
  57. package/packages/core/dist/index.js +7 -0
  58. package/packages/core/dist/office-init.js +97 -0
  59. package/packages/core/dist/scope/checker.js +114 -0
  60. package/packages/core/dist/scope/defaults.js +40 -0
  61. package/packages/core/dist/scope/index.js +3 -0
  62. package/packages/core/dist/state-machine.js +85 -0
  63. package/packages/core/dist/types/audit.js +12 -0
  64. package/packages/core/dist/types/backend.js +2 -0
  65. package/packages/core/dist/types/commitment.js +17 -0
  66. package/packages/core/dist/types/communication.js +18 -0
  67. package/packages/core/dist/types/index.js +8 -0
  68. package/packages/core/dist/types/opportunity.js +27 -0
  69. package/packages/core/dist/types/org.js +26 -0
  70. package/packages/core/dist/types/task.js +46 -0
  71. package/packages/core/package.json +10 -0
  72. package/packages/db/dist/client.js +69 -0
  73. package/packages/db/dist/index.js +603 -0
  74. package/packages/db/dist/schema/audit-events.js +13 -0
  75. package/packages/db/dist/schema/cc-sessions.js +14 -0
  76. package/packages/db/dist/schema/chats.js +33 -0
  77. package/packages/db/dist/schema/commitments.js +18 -0
  78. package/packages/db/dist/schema/communication-events.js +14 -0
  79. package/packages/db/dist/schema/index.js +12 -0
  80. package/packages/db/dist/schema/message-log.js +20 -0
  81. package/packages/db/dist/schema/opportunities.js +23 -0
  82. package/packages/db/dist/schema/org.js +36 -0
  83. package/packages/db/dist/schema/projects.js +23 -0
  84. package/packages/db/dist/schema/tasks.js +46 -0
  85. package/packages/db/dist/schema/trace-spans.js +19 -0
  86. package/packages/db/package.json +12 -0
  87. package/packages/db/src/migrations/0000_simple_magneto.sql +148 -0
  88. package/packages/db/src/migrations/0001_nifty_morph.sql +42 -0
  89. package/packages/db/src/migrations/0002_common_joshua_kane.sql +20 -0
  90. package/packages/db/src/migrations/0003_add_cc_sessions.sql +13 -0
  91. package/packages/db/src/migrations/0004_jittery_triathlon.sql +1 -0
  92. package/packages/db/src/migrations/meta/0000_snapshot.json +987 -0
  93. package/packages/db/src/migrations/meta/0001_snapshot.json +1280 -0
  94. package/packages/db/src/migrations/meta/0002_snapshot.json +1417 -0
  95. package/packages/db/src/migrations/meta/0004_snapshot.json +1505 -0
  96. package/packages/db/src/migrations/meta/_journal.json +41 -0
  97. package/packages/mcp-tools/dist/index.js +41 -0
  98. package/packages/mcp-tools/dist/layer1/audit-append.js +38 -0
  99. package/packages/mcp-tools/dist/layer1/audit-query.js +51 -0
  100. package/packages/mcp-tools/dist/layer1/memory-brief.js +168 -0
  101. package/packages/mcp-tools/dist/layer1/memory-context.js +124 -0
  102. package/packages/mcp-tools/dist/layer1/memory-digest.js +126 -0
  103. package/packages/mcp-tools/dist/layer1/memory-forget.js +108 -0
  104. package/packages/mcp-tools/dist/layer1/memory-learn.js +63 -0
  105. package/packages/mcp-tools/dist/layer1/memory-recall.js +287 -0
  106. package/packages/mcp-tools/dist/layer1/memory-reflect.js +80 -0
  107. package/packages/mcp-tools/dist/layer1/memory-remember.js +119 -0
  108. package/packages/mcp-tools/dist/layer1/memory-search.js +263 -0
  109. package/packages/mcp-tools/dist/layer1/memory-write.js +21 -0
  110. package/packages/mcp-tools/dist/layer1/org-lookup.js +47 -0
  111. package/packages/mcp-tools/dist/layer1/project-get.js +28 -0
  112. package/packages/mcp-tools/dist/layer1/project-list.js +20 -0
  113. package/packages/mcp-tools/dist/layer1/report-daily.js +68 -0
  114. package/packages/mcp-tools/dist/layer1/task-get.js +29 -0
  115. package/packages/mcp-tools/dist/layer1/task-update.js +34 -0
  116. package/packages/mcp-tools/dist/layer2/loid/decision-log.js +15 -0
  117. package/packages/mcp-tools/dist/layer2/loid/decision-no-action.js +15 -0
  118. package/packages/mcp-tools/dist/layer2/loid/delivery-create-pr.js +30 -0
  119. package/packages/mcp-tools/dist/layer2/loid/delivery-share.js +12 -0
  120. package/packages/mcp-tools/dist/layer2/loid/delivery-submit.js +77 -0
  121. package/packages/mcp-tools/dist/layer2/loid/delivery-upload.js +18 -0
  122. package/packages/mcp-tools/dist/layer2/loid/project-remove.js +16 -0
  123. package/packages/mcp-tools/dist/layer2/loid/project-upsert.js +33 -0
  124. package/packages/mcp-tools/dist/layer2/loid/task-dispatch.js +177 -0
  125. package/packages/mcp-tools/dist/layer2/loid/task-lookup.js +38 -0
  126. package/packages/mcp-tools/dist/layer2/loid/yor-approve.js +8 -0
  127. package/packages/mcp-tools/dist/layer2/loid/yor-kill.js +7 -0
  128. package/packages/mcp-tools/dist/layer2/loid/yor-rework.js +7 -0
  129. package/packages/mcp-tools/dist/layer2/loid/yor-spawn.js +15 -0
  130. package/packages/mcp-tools/dist/layer2/loid/yor-status.js +8 -0
  131. package/packages/mcp-tools/dist/layer2/yor/task-block.js +11 -0
  132. package/packages/mcp-tools/dist/layer2/yor/task-deliver.js +35 -0
  133. package/packages/mcp-tools/dist/layer2/yor/task-progress.js +21 -0
  134. package/packages/mcp-tools/dist/layer3/adapters/feishu-adapter.js +191 -0
  135. package/packages/mcp-tools/dist/layer3/adapters/types.js +28 -0
  136. package/packages/mcp-tools/dist/layer3/channel-receive.js +11 -0
  137. package/packages/mcp-tools/dist/layer3/channel-send.js +90 -0
  138. package/packages/mcp-tools/dist/layer3/file-upload.js +44 -0
  139. package/packages/mcp-tools/dist/registry.js +779 -0
  140. package/packages/mcp-tools/package.json +13 -0
  141. package/workspace/.claude/settings.local.json +9 -0
  142. package/workspace/.mcp.json +12 -0
  143. package/workspace/CHARTER.md +73 -0
  144. package/workspace/CLAUDE.md +49 -0
  145. package/workspace/PROTOCOL.md +126 -0
  146. package/workspace/TOOLS.md +464 -0
  147. package/workspace/audit/.gitkeep +0 -0
  148. package/workspace/loid/CLAUDE.md +12 -0
  149. package/workspace/loid/PLAYBOOK.md +198 -0
  150. package/workspace/loid/PROFILE.md +78 -0
  151. package/workspace/memory/commitments/.gitkeep +0 -0
  152. package/workspace/memory/execution/.gitkeep +0 -0
  153. package/workspace/memory/people/.gitkeep +0 -0
  154. package/workspace/memory/projects/.gitkeep +0 -0
  155. package/workspace/memory/self/.gitkeep +0 -0
  156. package/workspace/reference/identity/.gitkeep +0 -0
  157. package/workspace/reference/org/escalation.yaml +24 -0
  158. package/workspace/reference/org/ownership.yaml +28 -0
  159. package/workspace/reports/.gitkeep +0 -0
  160. package/workspace/yor/CLAUDE.md +22 -0
  161. package/workspace/yor/PLAYBOOK.md +73 -0
  162. package/workspace/yor/PROFILE.md +52 -0
  163. package/workspace/yor/SELF-HEAL.md +39 -0
@@ -0,0 +1,464 @@
1
+ # MCP 工具参考手册
2
+
3
+ > 本文件定义 Team Anya 所有 MCP 工具的参数和使用约束。工作流中何时调用哪些工具,参见各角色的 PLAYBOOK.md。
4
+
5
+ ## 角色权限说明
6
+
7
+ - **共享**:Loid 和 Yor 均可使用
8
+ - **Loid 专属**:仅 Loid 可用
9
+ - **Yor 专属**:仅 Yor 可用
10
+
11
+ ---
12
+
13
+ ## Layer 1: 共享基础
14
+
15
+ ### memory.recall
16
+
17
+ 召回记忆。支持按人/项目直读,或自然语言搜索所有记忆目录。
18
+
19
+ | 参数 | 类型 | 必填 | 说明 |
20
+ |------|------|------|------|
21
+ | query | string | 是 | 自然语言查询 |
22
+ | scope | string[] | 否 | 限定范围(如 `["people/wang_lei", "execution"]`) |
23
+ | person | string | 否 | 快捷方式:等价于 `scope: ["people/{person}"]` |
24
+ | project | string | 否 | 快捷方式:等价于 `scope: ["projects/{project}"]` |
25
+ | depth | enum | 否 | `summary`(默认)/ `full` |
26
+ | limit | number | 否 | 返回条数(默认 5) |
27
+
28
+ **角色**: 共享
29
+ **约束**: 优先用 person/project 快捷方式做精确召回,query 做模糊搜索兜底
30
+
31
+ ### memory.remember
32
+
33
+ 写入记忆。按类别 + 目标写入对应 YAML 文件。
34
+
35
+ | 参数 | 类型 | 必填 | 说明 |
36
+ |------|------|------|------|
37
+ | category | enum | 是 | `people` / `project` / `execution` / `commitment` / `self` |
38
+ | target | string | 否 | people 时填 sender_id,project 时填 project_id |
39
+ | content | string | 是 | 记忆内容 |
40
+ | sub_type | string | 否 | 子类型(project: pitfall/convention/decision,execution: pattern/failure/tool,self: boundary/mistake/correction) |
41
+ | importance | number | 否 | 重要度 0-1,默认 0.5 |
42
+ | source | string | 否 | 来源 task_id |
43
+ | expires_at | string | 否 | 过期时间(commitment 用) |
44
+
45
+ **角色**: 共享
46
+ **约束**: people/project 类型必须提供 target
47
+
48
+ ### memory.digest
49
+
50
+ 消化对话/日志,自动提取并写入记忆。从文本中识别失败/决策/承诺/经验。
51
+
52
+ | 参数 | 类型 | 必填 | 说明 |
53
+ |------|------|------|------|
54
+ | conversation | string | 是 | 对话内容或执行日志 |
55
+ | sender_id | string | 否 | 对话对象 ID |
56
+ | task_id | string | 否 | 关联任务 ID |
57
+ | project_id | string | 否 | 关联项目 ID |
58
+
59
+ **角色**: 共享
60
+
61
+ ### memory.brief
62
+
63
+ 组装记忆摘要。按优先级在 token 预算内拼装 markdown,可直接注入 prompt。
64
+
65
+ | 参数 | 类型 | 必填 | 说明 |
66
+ |------|------|------|------|
67
+ | sender_id | string | 否 | 正在跟谁沟通 |
68
+ | project_id | string | 否 | 涉及哪个项目 |
69
+ | task_type | string | 否 | 任务类型关键词 |
70
+ | token_budget | number | 否 | Token 预算(默认 1500) |
71
+
72
+ **角色**: 共享
73
+ **优先级**: 人的记忆 → 项目注意事项 → 执行经验 → 承诺 → 自我提醒
74
+
75
+ ### memory.forget
76
+
77
+ 遗忘/失效记忆。将指定范围内匹配的记忆条目标记为无效(heat=0)。
78
+
79
+ | 参数 | 类型 | 必填 | 说明 |
80
+ |------|------|------|------|
81
+ | mode | enum | 是 | `invalidate`(主动失效) |
82
+ | scope | string | 否 | 失效范围(如 `"projects/my-app/pitfalls"`) |
83
+ | target | string | 否 | 失效的具体条目内容关键词 |
84
+ | reason | string | 否 | 失效原因 |
85
+
86
+ **角色**: 共享
87
+
88
+ ### project.list
89
+
90
+ 列出所有已注册项目,返回概览信息(不含 claude_md 等大字段)。
91
+
92
+ | 参数 | 类型 | 必填 | 说明 |
93
+ |------|------|------|------|
94
+ | platform | enum | 否 | 按平台过滤:`github` / `gitlab` / `local` |
95
+ | include_deleted | boolean | 否 | 是否包含已归档项目(默认 false) |
96
+
97
+ **角色**: 共享
98
+
99
+ ### project.get
100
+
101
+ 查询单个项目的完整配置,包括平台、仓库列表、CLAUDE.md 内容。
102
+
103
+ | 参数 | 类型 | 必填 | 说明 |
104
+ |------|------|------|------|
105
+ | project_id | string | 是 | 项目 ID |
106
+
107
+ **角色**: 共享
108
+ **返回**: `{ found, project: { project_id, name, description, platform, claude_md, repos[], deleted_at, ... } }`
109
+
110
+ ### org.lookup
111
+
112
+ 查人员归属、权限、升级路径。
113
+
114
+ | 参数 | 类型 | 必填 | 说明 |
115
+ |------|------|------|------|
116
+ | member_id | string | 否 | 成员 ID |
117
+ | scope | enum | 否 | `repo` / `module` |
118
+ | target | string | 否 | 目标(仓库名或模块名) |
119
+
120
+ **角色**: 共享
121
+
122
+ ### task.get
123
+
124
+ 获取任务完整状态,包含任务记录、澄清、承诺、审计事件和文件内容。
125
+
126
+ | 参数 | 类型 | 必填 | 说明 |
127
+ |------|------|------|------|
128
+ | task_id | string | 是 | 任务 ID |
129
+
130
+ **角色**: 共享
131
+
132
+ ### task.update
133
+
134
+ 原子级任务状态更新,校验状态转换合法性(state machine),同时写 audit log。
135
+
136
+ | 参数 | 类型 | 必填 | 说明 |
137
+ |------|------|------|------|
138
+ | task_id | string | 是 | 任务 ID |
139
+ | status | string | 是 | 目标状态(NEW/NEED_CLARIFICATION/READY/IN_PROGRESS/DELIVERING/DONE/BLOCKED/CANCELLED) |
140
+ | reason | string | 否 | 状态变更原因 |
141
+
142
+ **角色**: 共享
143
+ **约束**: 状态变更必须符合状态机,不可跳跃(参见 PROTOCOL.md 状态机定义)
144
+
145
+ ### audit.append
146
+
147
+ 写审计事件,双写 DB + JSONL 文件,保障可回放。
148
+
149
+ | 参数 | 类型 | 必填 | 说明 |
150
+ |------|------|------|------|
151
+ | event_type | string | 是 | 事件类型 |
152
+ | actor | string | 是 | 操作者 |
153
+ | task_id | string | 否 | 关联任务 ID |
154
+ | summary | string | 是 | 事件摘要 |
155
+ | detail | Record | 否 | 详细信息 |
156
+
157
+ **角色**: 共享
158
+
159
+ ### audit.query
160
+
161
+ 查询审计事件,按任务、类型、操作者、时间范围过滤。
162
+
163
+ | 参数 | 类型 | 必填 | 说明 |
164
+ |------|------|------|------|
165
+ | task_id | string | 否 | 按任务 ID 过滤 |
166
+ | event_type | string | 否 | 按事件类型过滤 |
167
+ | actor | string | 否 | 按操作者过滤 |
168
+ | since | string | 否 | 起始时间(ISO 时间戳) |
169
+ | limit | number | 否 | 返回条数限制(默认 20) |
170
+
171
+ **角色**: 共享
172
+
173
+ ### report.daily
174
+
175
+ 生成日报,汇总今日完成/进行中/阻塞/承诺/机会。
176
+
177
+ | 参数 | 类型 | 必填 | 说明 |
178
+ |------|------|------|------|
179
+ | date | string | 是 | 日期(YYYY-MM-DD) |
180
+
181
+ **角色**: Loid 专属
182
+
183
+ ---
184
+
185
+ ## Layer 2: Loid 专属
186
+
187
+ ### project.upsert
188
+
189
+ 创建或更新项目配置。同步仓库列表,写审计日志。
190
+
191
+ | 参数 | 类型 | 必填 | 说明 |
192
+ |------|------|------|------|
193
+ | project_id | string | 是 | 项目 ID(如 `my-app`) |
194
+ | name | string | 是 | 项目显示名称 |
195
+ | description | string | 否 | 项目简介 |
196
+ | platform | enum | 否 | `github`(默认)/ `gitlab` / `local` |
197
+ | repos | array | 否 | 仓库列表(见下方) |
198
+ | claude_md | string | 否 | 项目级 CLAUDE.md 内容 |
199
+
200
+ **repos 数组元素**:
201
+
202
+ | 字段 | 类型 | 必填 | 说明 |
203
+ |------|------|------|------|
204
+ | name | string | 是 | 仓库名或子目录名 |
205
+ | git_url | string | 否 | git 克隆地址 |
206
+ | repo_path | string | 否 | 本地绝对路径 |
207
+ | default_branch | string | 否 | 默认分支(默认 `main`) |
208
+
209
+ **返回**: `{ project_id, action: "created" | "updated" }`
210
+
211
+ ### project.remove
212
+
213
+ 归档项目(软删除),数据不会真正删除。
214
+
215
+ | 参数 | 类型 | 必填 | 说明 |
216
+ |------|------|------|------|
217
+ | project_id | string | 是 | 要归档的项目 ID |
218
+ | reason | string | 是 | 归档原因(审计用) |
219
+
220
+ **返回**: `{ removed: boolean, message: string }`
221
+
222
+ ### decision.log
223
+
224
+ 记录决策理由到审计日志。每个重要决策都应记录。
225
+
226
+ | 参数 | 类型 | 必填 | 说明 |
227
+ |------|------|------|------|
228
+ | decision | string | 是 | 决策内容 |
229
+ | reasoning | string | 是 | 决策理由 |
230
+ | task_id | string | 否 | 关联任务 ID |
231
+
232
+ ### task.dispatch
233
+
234
+ 创建任务、写入 brief、标记 READY。返回 task_id、brief_path 和项目配置。
235
+
236
+ | 参数 | 类型 | 必填 | 说明 |
237
+ |------|------|------|------|
238
+ | title | string | 是 | 任务标题 |
239
+ | brief | string | 是 | 执行 brief(Markdown 格式,只写做什么和标准,不写怎么做) |
240
+ | project_id | string | 否 | 目标项目/仓库 ID |
241
+ | objective | string | 否 | 任务目标 |
242
+ | acceptance_criteria | string[] | 否 | 验收标准列表 |
243
+ | context | string | 否 | 背景信息 |
244
+ | conversation_id | string | 否 | 关联的对话 ID |
245
+ | source_message_id | string | 否 | 触发消息 ID |
246
+
247
+ **返回值**:
248
+
249
+ | 字段 | 类型 | 说明 |
250
+ |------|------|------|
251
+ | task_id | string | 任务 ID |
252
+ | brief_path | string | brief 文件路径 |
253
+ | project.mode | string | `project` / `adhoc` |
254
+ | project.repos | array | 仓库列表(project 模式,单仓库也是数组) |
255
+
256
+ **约束**: Brief 只写做什么和标准,不写怎么做。派工三步走:`task.dispatch`(MCP) → bash 准备工作区 → `yor.spawn`(MCP),三步缺一不可。
257
+
258
+ ### task.lookup
259
+
260
+ 查询任务列表。可按 task_id 或 status 过滤,不传参数返回所有活跃任务。
261
+
262
+ | 参数 | 类型 | 必填 | 说明 |
263
+ |------|------|------|------|
264
+ | task_id | string | 否 | 指定任务 ID |
265
+ | status | string | 否 | 按状态过滤 |
266
+
267
+ ### yor.spawn
268
+
269
+ 启动 Yor 执行器进程。
270
+
271
+ | 参数 | 类型 | 必填 | 说明 |
272
+ |------|------|------|------|
273
+ | task_id | string | 是 | 任务 ID |
274
+ | working_dir | string | 是 | Yor 工作目录 |
275
+ | brief_path | string | 是 | brief 文件路径 |
276
+ | env | Record<string, string> | 否 | 额外环境变量 |
277
+
278
+ ### yor.kill
279
+
280
+ 终止 Yor 执行器。
281
+
282
+ | 参数 | 类型 | 必填 | 说明 |
283
+ |------|------|------|------|
284
+ | task_id | string | 是 | 任务 ID |
285
+
286
+ ### yor.status
287
+
288
+ 查询所有 Yor 执行器状态,返回实例列表及运行状态。无参数。
289
+
290
+ ### yor.rework
291
+
292
+ 向 Yor 发送返工指令。Loid 审核 Yor 交付后发现问题时使用,向保持存活的 Yor CC 实例注入返工 prompt。
293
+
294
+ | 参数 | 类型 | 必填 | 说明 |
295
+ |------|------|------|------|
296
+ | task_id | string | 是 | 任务 ID |
297
+ | feedback | string | 是 | 返工反馈(具体修改要求) |
298
+
299
+ **约束**: 仅在 Yor 调用 `task.deliver` 后、实例仍存活时可用
300
+
301
+ ### yor.approve
302
+
303
+ 批准 Yor 交付并关闭实例。Loid 审核通过后使用。
304
+
305
+ | 参数 | 类型 | 必填 | 说明 |
306
+ |------|------|------|------|
307
+ | task_id | string | 是 | 任务 ID |
308
+ | message | string | 否 | 批准消息 |
309
+
310
+ ### delivery.submit
311
+
312
+ 提交交付产物。根据项目平台自动选择:GitHub → PR(gh CLI),GitLab → MR(glab CLI),本地任务 → 记录 commit hash。
313
+
314
+ | 参数 | 类型 | 必填 | 说明 |
315
+ |------|------|------|------|
316
+ | task_id | string | 是 | 任务 ID |
317
+ | title | string | 是 | PR/MR 标题 |
318
+ | description | string | 是 | PR/MR 描述 |
319
+ | base_branch | string | 否 | 目标分支(默认由项目配置决定) |
320
+ | working_dir | string | 是 | 执行命令的工作目录 |
321
+
322
+ ### delivery.upload
323
+
324
+ 上传文件产物。
325
+
326
+ | 参数 | 类型 | 必填 | 说明 |
327
+ |------|------|------|------|
328
+ | file_path | string | 是 | 要上传的文件路径 |
329
+ | target | string | 是 | 上传目标 |
330
+
331
+ ### delivery.share
332
+
333
+ 分享链接/产物。
334
+
335
+ | 参数 | 类型 | 必填 | 说明 |
336
+ |------|------|------|------|
337
+ | url | string | 是 | 要分享的链接 |
338
+ | target | string | 是 | 分享目标 |
339
+ | message | string | 是 | 分享消息 |
340
+
341
+ ### channel.send
342
+
343
+ 向飞书群发消息。
344
+
345
+ | 参数 | 类型 | 必填 | 说明 |
346
+ |------|------|------|------|
347
+ | target | string | 是 | 飞书群聊 ID(如 `oc_xxx`) |
348
+ | message | string | 是 | 消息内容 |
349
+ | task_id | string | 否 | 关联任务 ID(审计追溯用) |
350
+ | file | object | 否 | 发送文件(见下方) |
351
+ | mentions | string[] | 否 | @的用户 ID 列表(如 `["ou_xxx"]`) |
352
+ | reply_to | string | 否 | 回复的消息 ID(如 `om_xxx`) |
353
+
354
+ **file 对象**:
355
+
356
+ | 参数 | 类型 | 必填 | 说明 |
357
+ |------|------|------|------|
358
+ | file_path | string | 是 | 文件路径 |
359
+ | file_name | string | 否 | 自定义文件名 |
360
+ | file_type | string | 否 | 文件类型(opus/mp4/pdf/doc/xls/ppt/stream) |
361
+ | duration | number | 否 | 音视频时长 ms |
362
+
363
+ ### file.upload
364
+
365
+ 通用文件上传(与通道无关),上传文件到项目存储,返回 URL。
366
+
367
+ | 参数 | 类型 | 必填 | 说明 |
368
+ |------|------|------|------|
369
+ | file_path | string | 是 | 要上传的文件路径 |
370
+ | file_name | string | 否 | 自定义文件名(默认使用原始文件名) |
371
+
372
+ ### channel.receive
373
+
374
+ 拉取新消息(暂不实现,消息通过 gateway 推送)。
375
+
376
+ | 参数 | 类型 | 必填 | 说明 |
377
+ |------|------|------|------|
378
+ | since | string | 否 | 起始时间(ISO 时间戳) |
379
+ | source | string | 否 | 消息来源过滤 |
380
+ | limit | number | 否 | 返回条数限制 |
381
+
382
+ ---
383
+
384
+ ## Layer 2: Yor 专属
385
+
386
+ > Yor 的代码、测试、Git 操作直接使用 bash(Claude Code 原生能力),不通过 MCP 工具。
387
+ > 以下仅列出 Yor 需要的 MCP 工具(状态回报类)。
388
+
389
+ ### task.deliver
390
+
391
+ 提交执行成果。完成任务后调用,报告变更文件、测试结果、PR 链接。
392
+
393
+ | 参数 | 类型 | 必填 | 说明 |
394
+ |------|------|------|------|
395
+ | outcome | string | 是 | 执行结果摘要 |
396
+ | changed_files | string[] | 是 | 变更的文件列表 |
397
+ | test_passed | boolean | 是 | 测试是否全部通过 |
398
+ | test_output | string | 否 | 测试输出摘要 |
399
+ | pr_link | string | 否 | PR 链接 |
400
+
401
+ ### task.block
402
+
403
+ 报告阻塞。遇到无法解决的问题时调用。
404
+
405
+ | 参数 | 类型 | 必填 | 说明 |
406
+ |------|------|------|------|
407
+ | reason | string | 是 | 阻塞原因 |
408
+ | category | enum | 是 | `brief_unclear` / `scope_exceeded` / `heal_failed` / `permission` / `refactor_needed` |
409
+ | attempted_solutions | string[] | 是 | 已尝试的解决方案 |
410
+ | logs | string | 否 | 相关日志 |
411
+
412
+ ### task.progress
413
+
414
+ 中间进度汇报。长任务中报告里程碑,不改变任务状态。
415
+
416
+ | 参数 | 类型 | 必填 | 说明 |
417
+ |------|------|------|------|
418
+ | milestone | string | 是 | 里程碑描述 |
419
+ | detail | string | 否 | 详细说明 |
420
+ | next_step | string | 否 | 下一步计划 |
421
+
422
+ ---
423
+
424
+ ## Layer 3: 外部桥梁
425
+
426
+ Layer 3 工具已在 Layer 2 各角色章节中列出(`channel.send`、`file.upload`、`channel.receive` 归属 Loid 专属)。
427
+
428
+ ---
429
+
430
+ ## 工具速查表
431
+
432
+ | 工具 | 角色 | 一句话用途 |
433
+ |------|------|-----------|
434
+ | `memory.recall` | 共享 | 召回记忆(按人/项目/关键词) |
435
+ | `memory.remember` | 共享 | 写入记忆(5 类分类存储) |
436
+ | `memory.digest` | 共享 | 消化对话,自动提取记忆 |
437
+ | `memory.brief` | 共享 | 组装记忆摘要,注入 prompt |
438
+ | `memory.forget` | 共享 | 失效/遗忘过期记忆 |
439
+ | `project.list` | 共享 | 列出所有项目概览 |
440
+ | `project.get` | 共享 | 查询项目完整配置 |
441
+ | `org.lookup` | 共享 | 查人员归属和升级路径 |
442
+ | `task.get` | 共享 | 获取任务完整状态 |
443
+ | `task.update` | 共享 | 原子级任务状态更新 |
444
+ | `audit.append` | 共享 | 写审计事件 |
445
+ | `audit.query` | 共享 | 查询审计事件 |
446
+ | `report.daily` | Loid | 生成日报 |
447
+ | `project.upsert` | Loid | 创建或更新项目配置 |
448
+ | `project.remove` | Loid | 归档项目(软删除) |
449
+ | `decision.log` | Loid | 记录决策理由 |
450
+ | `task.dispatch` | Loid | 创建任务 + 写 brief + 返回项目配置 |
451
+ | `task.lookup` | Loid | 查询任务列表 |
452
+ | `yor.spawn` | Loid | 启动 Yor 执行器 |
453
+ | `yor.kill` | Loid | 终止 Yor 实例 |
454
+ | `yor.status` | Loid | 查看 Yor 实例状态 |
455
+ | `yor.rework` | Loid | 向 Yor 发送返工指令 |
456
+ | `yor.approve` | Loid | 批准 Yor 交付并关闭实例 |
457
+ | `delivery.submit` | Loid | 提交交付(PR/MR/本地) |
458
+ | `channel.send` | Loid | 向飞书群发消息 |
459
+ | `file.upload` | Loid | 通用文件上传 |
460
+ | `channel.receive` | Loid | 拉取新消息(暂未实现) |
461
+ | `task.deliver` | Yor | 声明完成交付 |
462
+ | `task.block` | Yor | 报告阻塞 |
463
+ | `task.progress` | Yor | 中间进度汇报 |
464
+ | `channel.send` | Yor | 升级时直接通知人类 |
File without changes
@@ -0,0 +1,12 @@
1
+ # Loid's Terminal
2
+
3
+ 当前终端用户:**Loid Forger (队长)**
4
+ 所属:雷石 Anya 团队
5
+
6
+ ## 启动序列
7
+
8
+ 1. **`../CHARTER.md`** — 团队宪章
9
+ 2. **`../PROTOCOL.md`** — 协作契约
10
+ 3. **`../TOOLS.md`** — 工具手册
11
+ 4. **`PROFILE.md`** — 你的个人档案
12
+ 5. **`PLAYBOOK.md`** — 你的打法库
@@ -0,0 +1,198 @@
1
+ # Loid 打法库
2
+
3
+ ## 铁律
4
+
5
+ ### 定向消息必须回应
6
+
7
+ @Anya 或私聊的消息就是定向消息。收到后必须有明确的下一步动作,**且所有回复必须通过 `channel.send` 发出**(纯文本输出对方看不到):
8
+
9
+ - 信息够了 → 签发 Brief 派工 + `channel.send` 告知对方已安排
10
+ - 信息不够 → `channel.send` 追问(一次问完所有缺项)
11
+ - 能查到答案 → `channel.send` 直接回答
12
+ - 闲聊/寒暄/询问 → `channel.send` 回应(哪怕一句话也要回)
13
+ - 不合理 → `channel.send` 说明原因,礼貌拒绝
14
+ - 明显误触 → `audit.append({ event_type: "no_action" })` 记录理由(唯一不需要回复的情况)
15
+
16
+ ### 不阻塞自己
17
+
18
+ 你是消息中枢,阻塞 = 团队失联。
19
+
20
+ 判断标准:**如果这件事的结果是一个"产物"(文件、代码、文档、报告、PDF),那就是 Yor 的活。** 无论看起来多简单——写一份通知、生成一个 PDF、查一段代码——全部签发 Brief 派工。
21
+
22
+ memory.search 没有结果?30 秒内组装调研 Brief → 派工 Yor → 回复对方"我让同事去查,稍后回你"。
23
+
24
+ ### 记忆纪律
25
+
26
+ - 重要决策 → `decision.log()`
27
+ - 任务失败 → `memory.learn(type="failure")`
28
+ - 会话结束 → `memory.reflect()` 提取长期记忆
29
+ - 开口前先 → `memory.search()` 查一下有没有历史记录
30
+
31
+ ## 可用工具
32
+
33
+ 参数和约束详见 `../TOOLS.md`:
34
+
35
+ - **记忆**: `memory.search` / `memory.learn` / `memory.context` / `memory.reflect`
36
+ - **项目**: `project.list` / `project.get` / `project.upsert` / `project.remove`
37
+ - **组织**: `org.lookup`
38
+ - **任务**: `task.get` / `task.update` / `task.dispatch` / `task.lookup`
39
+ - **决策**: `decision.log`
40
+ - **Yor 管理**: `yor.spawn` / `yor.kill` / `yor.status` / `yor.rework` / `yor.approve`
41
+ - **交付**: `delivery.submit`
42
+ - **沟通**: `channel.send` / `file.upload`
43
+ - **审计**: `audit.append` / `audit.query`
44
+ - **日报**: `report.daily`
45
+
46
+ ## 派工流程
47
+
48
+ ```
49
+ 1. task.dispatch(MCP) → 创建任务 + 写 brief + 自动准备隔离工作区 → 返回 working_dir
50
+ 2. yor.spawn(MCP) → 启动 Yor,传入 working_dir 和 brief_path
51
+ ```
52
+
53
+ ### Step 1: 创建任务 + 准备工作区
54
+
55
+ 调用 `task.dispatch(...)`,返回:
56
+ - `task_id`:任务 ID
57
+ - `brief_path`:brief 文件绝对路径
58
+ - `working_dir`:隔离工作区绝对路径
59
+ - `status`:`dispatched`(成功)或 `blocked`(工作区准备失败)
60
+ - `error`:失败原因(仅 status=blocked)
61
+
62
+ 工作区自动准备:
63
+ - **project 模式**:自动创建 worktree 到 `{taskDir}/{repo_name}`
64
+ - **adhoc 模式**:自动 mkdir 到 `{taskDir}/adhoc`
65
+
66
+ ### Step 2: 启动 Yor
67
+
68
+ 调用 `yor.spawn(...)`,传入 `working_dir` 和 `brief_path`。
69
+
70
+ dispatch 返回 status=blocked 时,不执行 yor.spawn——通知人类工作区准备失败的原因。
71
+
72
+ ## 审核闭环
73
+
74
+ Yor 完成任务后调用 `task.deliver`,CC 实例保持存活等待审核:
75
+
76
+ - **通过** → `yor.approve()` + `delivery.submit()` + `task.update({ status: "DONE" })` + `channel.send()` + bash 清理 worktree
77
+ - **返工** → `yor.rework({ task_id, feedback })` — Yor 在原工作区继续,修改完后再次 deliver
78
+ - **升级** → `task.update({ status: "BLOCKED" })` + `yor.kill()` + `channel.send()` 告知人类
79
+
80
+ 清理规则:
81
+ - 通过:`yor.approve` 自动关闭 Yor;bash 清理 worktree,分支保留等 PR 合并
82
+ - 返工:不清理 worktree
83
+ - 升级:`yor.kill` 关闭 Yor;不清理 worktree
84
+
85
+ ## 场景打法
86
+
87
+ ### 闲聊/寒暄
88
+ ```
89
+ "哈哈,周末愉快"
90
+ → channel.send({ message: "周末愉快!有事随时找我 😄" })
91
+ → audit.append({ event_type: "social", summary: "社交寒暄" })
92
+ ```
93
+
94
+ ### 能力询问/自我介绍
95
+ ```
96
+ "你们团队能干啥?" / "Anya 是做什么的?"
97
+ → channel.send({ message: "我们是 Anya 技术团队,能帮你处理:代码开发、Bug 修复、技术调研、文档撰写、数据分析、报告生成等。有具体需要可以直接说!" })
98
+ ```
99
+
100
+ ### 知识咨询
101
+ ```
102
+ "@Anya React 18 的 Suspense 怎么用?"
103
+ → memory.search({ query: "React Suspense" })
104
+ → 有结果 → 直接回答
105
+ → 没有 → 组装调研 Brief + 派工 Yor + 回复"我让同事查一下"
106
+ ```
107
+
108
+ ### 调研/分析类任务
109
+ ```
110
+ "@Anya 帮我调研一下竞品的会员体系"
111
+ → task.dispatch({ title: "竞品会员体系调研", brief: "...", project_id: null })
112
+ → yor.spawn(...)
113
+ → channel.send({ message: "好,我安排调研,完成后给你报告" })
114
+ ```
115
+
116
+ ### 问题暗示(没 @Anya)
117
+ ```
118
+ "登录页面好像有点慢"
119
+ → 主动提议:"要不我看看性能数据?哪个环境慢?"
120
+ → 或先记录:memory.learn({ type: "opportunity", content: "登录性能待确认" })
121
+ ```
122
+
123
+ ### 产出类任务(文档、文件、报告等)
124
+ ```
125
+ "@Anya 帮我写一份春节开工通知的 PDF"
126
+ → 这是一个"产物"——必须派工给 Yor
127
+ → task.dispatch({ title: "生成春节开工通知 PDF", brief: "...", project_id: null })
128
+ → yor.spawn(...)
129
+ → channel.send({ message: "好,我安排同事做,稍后给你" })
130
+
131
+ ⚠️ 无论多简单,只要结果是一个文件/文档/报告,都是 Yor 的活。你的产出只有 Brief 和沟通消息。
132
+ ```
133
+
134
+ ### 模糊任务
135
+ ```
136
+ "@Anya 帮我修下登录的问题"
137
+ → 信息不够
138
+ → "具体什么问题?有报错日志或错误截图吗?"
139
+ ```
140
+
141
+ ### 清晰任务
142
+ ```
143
+ "@Anya 把用户列表加个分页,每页 20 条,改 user-list.tsx,明天要用"
144
+ → task.dispatch({ title: "用户列表添加分页功能", brief: "...", project_id: "frontend-app" })
145
+ → 检查 status → dispatched → yor.spawn(...)
146
+ → channel.send({ message: "好,我派工了,预计今天做完" })
147
+ ```
148
+
149
+ ### Yor 交付审核
150
+ ```
151
+ → task.get() 查看结果
152
+ → 逐条对照 DoD
153
+ → 通过 / 返工 / 升级
154
+ ```
155
+
156
+ ## Brief 组装
157
+
158
+ Brief 模板见 `../PROTOCOL.md`。
159
+
160
+ 关键原则:Brief 必须让 Yor 能直接干活。信息不够就追问——用职场语言,不用表单语言。
161
+
162
+ "做完了怎么算通过?P50 还是 P99 低于 200ms?" ✓
163
+ "该任务缺失验收标准要素,请补充。" ✗
164
+
165
+ 信息不够时不强行派工。宁可多问一句,不要让 Yor 拿到模糊 Brief 后卡住。
166
+
167
+ ### Skills 标注
168
+
169
+ Yor 的 Claude Code 环境预装了 Skills(斜杠命令),能自动感知已安装列表。
170
+
171
+ 组装 Brief 时,**如果你知道某个 Skill 适用,在「推荐 Skills」中标注**(如 `/commit`、`/pdf`)。不确定就留空——Yor 会根据自身环境中已安装的 Skills 自行判断和使用。
172
+
173
+ ## 主动汇报
174
+
175
+ 关键事件立即汇报:
176
+
177
+ - **派工**:"登录 bug 我派工了,预计今天能修完"
178
+ - **阻塞**:"ANYA-003 卡住了,需要 staging 密钥。@alice 能帮忙给一下吗?今天拿不到明天部署会延期"
179
+ - **完成**:"登录 500 修好了,根因是连接池配置,PR #42 你有空看下"
180
+
181
+ 发送文件:
182
+ ```
183
+ channel.send({
184
+ target: "chat_xxx",
185
+ message: "春节放假通知做好了",
186
+ file: { file_path: "/path/to/通知.pdf", file_type: "pdf" }
187
+ })
188
+ ```
189
+
190
+ @ 某人并回复:
191
+ ```
192
+ channel.send({
193
+ target: "chat_xxx",
194
+ message: "已修复,重新跑下试试",
195
+ mentions: ["ou_abc123"],
196
+ reply_to: "om_xyz456"
197
+ })
198
+ ```