@mycodemap/mycodemap 0.1.0 → 0.1.1

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 (64) hide show
  1. package/CHANGELOG.md +86 -6
  2. package/README.md +172 -80
  3. package/dist/cli/commands/cycles.d.ts.map +1 -1
  4. package/dist/cli/commands/cycles.js +2 -0
  5. package/dist/cli/commands/cycles.js.map +1 -1
  6. package/dist/cli/commands/init.d.ts.map +1 -1
  7. package/dist/cli/commands/init.js +3 -1
  8. package/dist/cli/commands/init.js.map +1 -1
  9. package/dist/cli/commands/logs.d.ts +5 -0
  10. package/dist/cli/commands/logs.d.ts.map +1 -0
  11. package/dist/cli/commands/logs.js +189 -0
  12. package/dist/cli/commands/logs.js.map +1 -0
  13. package/dist/cli/commands/report.d.ts +12 -0
  14. package/dist/cli/commands/report.d.ts.map +1 -0
  15. package/dist/cli/commands/report.js +158 -0
  16. package/dist/cli/commands/report.js.map +1 -0
  17. package/dist/cli/commands/watch-foreground.d.ts.map +1 -1
  18. package/dist/cli/commands/watch-foreground.js +2 -0
  19. package/dist/cli/commands/watch-foreground.js.map +1 -1
  20. package/dist/cli/commands/watch.d.ts.map +1 -1
  21. package/dist/cli/commands/watch.js +2 -0
  22. package/dist/cli/commands/watch.js.map +1 -1
  23. package/dist/cli/first-run-guide.d.ts +23 -0
  24. package/dist/cli/first-run-guide.d.ts.map +1 -0
  25. package/dist/cli/first-run-guide.js +83 -0
  26. package/dist/cli/first-run-guide.js.map +1 -0
  27. package/dist/cli/index.js +63 -0
  28. package/dist/cli/index.js.map +1 -1
  29. package/dist/cli/platform-check.d.ts +21 -0
  30. package/dist/cli/platform-check.d.ts.map +1 -0
  31. package/dist/cli/platform-check.js +94 -0
  32. package/dist/cli/platform-check.js.map +1 -0
  33. package/dist/cli/tree-sitter-check.d.ts +35 -0
  34. package/dist/cli/tree-sitter-check.d.ts.map +1 -0
  35. package/dist/cli/tree-sitter-check.js +133 -0
  36. package/dist/cli/tree-sitter-check.js.map +1 -0
  37. package/dist/cli/utils/sanitize.d.ts +54 -0
  38. package/dist/cli/utils/sanitize.d.ts.map +1 -0
  39. package/dist/cli/utils/sanitize.js +131 -0
  40. package/dist/cli/utils/sanitize.js.map +1 -0
  41. package/docs/AI_ASSISTANT_SETUP.md +743 -0
  42. package/docs/CI_GATEWAY_DESIGN.md +784 -0
  43. package/docs/OMC_TEAM_DEBUG_REPORT.md +285 -0
  44. package/docs/PUBLISH_NPM_DESIGN_FINAL.md +485 -0
  45. package/docs/REFACTOR_ARCHITECTURE_OVERVIEW.md +552 -0
  46. package/docs/REFACTOR_CONFIDENCE_DESIGN.md +244 -0
  47. package/docs/REFACTOR_GIT_ANALYZER_DESIGN.md +785 -0
  48. package/docs/REFACTOR_ORCHESTRATOR_DESIGN.md +1065 -0
  49. package/docs/REFACTOR_REQUIREMENTS.md +970 -0
  50. package/docs/REFACTOR_RESULT_FUSION_DESIGN.md +315 -0
  51. package/docs/REFACTOR_TEST_LINKER_DESIGN.md +311 -0
  52. package/docs/SETUP_GUIDE.md +407 -0
  53. package/docs/archive/AI_INTEGRATION_GUIDE_ARCHIVED.md +385 -0
  54. package/docs/archive/PUBLISH_NPM_DESIGN_V1.md +1693 -0
  55. package/docs/archive/PUBLISH_NPM_DESIGN_V2.md +390 -0
  56. package/docs/archive/TASK_DESIGN_COVERAGE_REPORT.md +314 -0
  57. package/docs/plans/POST_TASK_PLAN.md +129 -0
  58. package/docs/plans/archive/2026-03-03-deps-path-extension-fix.md +186 -0
  59. package/examples/README.md +61 -0
  60. package/examples/claude/codemap-skill.md +94 -0
  61. package/examples/codex/codemap-agent.md +66 -0
  62. package/examples/copilot/copilot-instructions.md +24 -0
  63. package/examples/kimi/codemap-skill.md +92 -0
  64. package/package.json +5 -3
@@ -0,0 +1,285 @@
1
+ # OMC Team 模式与 Claude Code 不兼容问题分析报告
2
+
3
+ > 生成时间:2026-03-07
4
+ > 分析范围:OMC team 模式 + Claude Code 集成
5
+
6
+ ---
7
+
8
+ ## 1. 问题现象
9
+
10
+ ### 1.1 观察到的症状
11
+
12
+ 从 trace 数据显示:
13
+ - **worker-1**: spawn 了 **11 次**
14
+ - **worker-2**: spawn 了 **3 次**
15
+ - 主 session 在 16:08 结束,reason: "other"
16
+
17
+ ### 1.2 影响
18
+
19
+ - 资源快速耗尽(内存、进程)
20
+ - Claude Code 主进程可能因资源压力退出
21
+ - 任务完成状态不稳定
22
+
23
+ ---
24
+
25
+ ## 2. 根本原因分析
26
+
27
+ ### 2.1 架构问题:V1 Runtime 的 Watchdog 循环
28
+
29
+ **问题位置**: `runtime.ts:518-647` (watchdogCliWorkers 函数)
30
+
31
+ **问题描述**:
32
+ ```
33
+ watchdog tick 循环逻辑:
34
+ 1. 检查 workers 的 done.json 信号
35
+ 2. 如果有信号 -> markTaskFromDone -> killWorkerPane -> spawnWorkerForTask (如果有 pending 任务)
36
+ 3. 如果 worker 死了 -> applyDeadPaneTransition -> requeue -> spawnWorkerForTask
37
+ ```
38
+
39
+ **Bug**: 当任务完成后,watchdog 会立即 spawn 新的 worker 来执行其他 pending 任务。这导致:
40
+ - Worker 刚完成就被 kill
41
+ - 立即创建新 worker
42
+ - 如果任务列表只有 1 个任务,也会反复创建同一个 worker
43
+
44
+ ### 2.2 状态同步问题
45
+
46
+ **问题**: `markTaskFromDone()` 更新任务状态为 completed,但可能存在:
47
+ - 文件系统写入延迟
48
+ - 状态读取不一致
49
+ - 导致 `allTasksTerminal()` 错误判断
50
+
51
+ ### 2.3 Session 管理问题
52
+
53
+ **观察**:
54
+ - Session 在 16:08 结束 (reason: "other")
55
+ - Workers 在 16:07 完成后反复重建
56
+ - 主 session 可能因资源压力或错误退出
57
+
58
+ ### 2.4 Claude Code 原生 team 集成问题
59
+
60
+ 从 config.json 可见:
61
+ - Workers 使用 `in-process` backend (`"backendType": "in-process"`)
62
+ - 这意味着 workers 运行在同一个 Claude Code 进程内
63
+ - 当 worker 完成后返回结果时,可能触发主进程重新 spawn
64
+
65
+ ---
66
+
67
+ ## 3. 具体问题点
68
+
69
+ ### 问题 1: Watchdog 立即重新分配任务
70
+
71
+ **代码位置**: `runtime.ts:559-565`
72
+ ```typescript
73
+ if (signal) {
74
+ // ... 处理完成信号
75
+ await killWorkerPane(runtime, wName, active.paneId);
76
+ if (!(await allTasksTerminal(runtime))) {
77
+ const nextTaskIndexValue = await nextPendingTaskIndex(runtime);
78
+ if (nextTaskIndexValue != null) {
79
+ await spawnWorkerForTask(runtime, wName, nextTaskIndexValue); // 立即 spawn!
80
+ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ **问题**: 任务完成后立即 spawn 新 worker,没有给主 session 任何喘息机会
86
+
87
+ ### 问题 2: Worker 复用逻辑缺失
88
+
89
+ **代码位置**: `runtime.ts:421-426`
90
+ ```typescript
91
+ const maxConcurrentWorkers = agentTypes.length;
92
+ for (let i = 0; i < maxConcurrentWorkers; i++) {
93
+ const taskIndex = await nextPendingTaskIndex(runtime);
94
+ if (taskIndex == null) break;
95
+ await spawnWorkerForTask(runtime, workerName(i), taskIndex);
96
+ }
97
+ ```
98
+
99
+ **问题**: 每次都创建新的 workerName,而不是复用已有的 worker
100
+
101
+ ### 问题 3: In-Process Workers 的状态管理
102
+
103
+ **代码位置**: config.json
104
+ ```json
105
+ {
106
+ "backendType": "in-process"
107
+ }
108
+ ```
109
+
110
+ **问题**: in-process workers 完成后会返回结果给主 agent,这可能触发某种重新调度的 hook,导致反复 spawn
111
+
112
+ ### 问题 4: 缺乏资源限制
113
+
114
+ **问题**: 没有机制限制:
115
+ - 单个 worker 的最大执行时间
116
+ - 总 worker spawn 次数
117
+ - 内存使用上限
118
+
119
+ ---
120
+
121
+ ## 4. 修复方案
122
+
123
+ ### 4.1 方案 A: 启用 V2 Runtime (推荐)
124
+
125
+ **原理**: V2 runtime 使用事件驱动架构,避免轮询问题
126
+
127
+ **操作**:
128
+ ```bash
129
+ export OMC_RUNTIME_V2=1
130
+ # 然后重新运行 team
131
+ ```
132
+
133
+ **预期效果**:
134
+ - 更稳定的任务状态管理
135
+ - 事件驱动而非轮询
136
+ - 减少不必要的 worker 重建
137
+
138
+ ### 4.2 方案 B: 修复 V1 Runtime
139
+
140
+ #### B.1 添加冷却期
141
+
142
+ **修改位置**: `runtime.ts:559-565`
143
+
144
+ ```typescript
145
+ // 在 killWorkerPane 后添加延迟
146
+ await killWorkerPane(runtime, wName, active.paneId);
147
+
148
+ // 添加冷却期,避免立即重新 spawn
149
+ await new Promise(resolve => setTimeout(resolve, 2000));
150
+
151
+ if (!(await allTasksTerminal(runtime))) {
152
+ // ... existing logic
153
+ }
154
+ ```
155
+
156
+ #### B.2 添加 Worker 池机制
157
+
158
+ **修改位置**: `runtime.ts` - 新增 worker 池状态
159
+
160
+ ```typescript
161
+ interface WorkerPool {
162
+ availableWorkers: string[]; // 可复用的 worker 名称
163
+ activeWorkers: Map<string, ActiveWorkerState>;
164
+ }
165
+
166
+ // 在 spawnWorkerForTask 中复用
167
+ async function spawnWorkerForTask(...) {
168
+ // 先检查池中是否有可用 worker
169
+ if (runtime.workerPool.availableWorkers.length > 0) {
170
+ const reusableWorkerName = runtime.workerPool.availableWorkers.pop();
171
+ // 复用该 worker
172
+ }
173
+ // 否则创建新 worker
174
+ }
175
+ ```
176
+
177
+ #### B.3 添加资源限制
178
+
179
+ **修改位置**: `runtime.ts` - 新增限制配置
180
+
181
+ ```typescript
182
+ const MAX_WORKER_SPAWNS = 20; // 最多 spawn 次数
183
+ const WORKER_COOLDOWN_MS = 3000; // 冷却期
184
+
185
+ // 在 watchdog 中跟踪 spawn 次数
186
+ let workerSpawnCount = 0;
187
+
188
+ async function spawnWorkerForTask(...) {
189
+ if (workerSpawnCount >= MAX_WORKER_SPAWNS) {
190
+ console.warn('[watchdog] Max worker spawn limit reached');
191
+ return '';
192
+ }
193
+ workerSpawnCount++;
194
+ // ... existing logic
195
+ }
196
+ ```
197
+
198
+ ### 4.3 方案 C: 修复 Claude Code 集成
199
+
200
+ #### C.1 修改 worker hook 逻辑
201
+
202
+ **修改位置**: `src/hooks/team-worker-hook.ts`
203
+
204
+ 确保 worker 完成后:
205
+ 1. 写入 done.json
206
+ 2. **不自动退出** (等待主 session 指示)
207
+ 3. 进入空闲状态等待新任务
208
+
209
+ #### C.2 添加状态一致性检查
210
+
211
+ **修改位置**: `runtime.ts:allTasksTerminal()`
212
+
213
+ ```typescript
214
+ export async function allTasksTerminal(runtime: TeamRuntime): Promise<boolean> {
215
+ const root = stateRoot(runtime.cwd, runtime.teamName);
216
+
217
+ // 多次重试读取确保一致性
218
+ for (let retry = 0; retry < 3; retry++) {
219
+ let allTerminal = true;
220
+ for (let i = 0; i < runtime.config.tasks.length; i++) {
221
+ const task = await readTask(root, String(i + 1));
222
+ if (!task) return false; // 任务文件不存在
223
+ if (task.status !== 'completed' && task.status !== 'failed') {
224
+ allTerminal = false;
225
+ }
226
+ }
227
+ if (allTerminal) return true;
228
+ await new Promise(r => setTimeout(r, 100)); // 等待状态稳定
229
+ }
230
+ return false;
231
+ }
232
+ ```
233
+
234
+ ---
235
+
236
+ ## 5. 实施建议
237
+
238
+ ### 优先级
239
+
240
+ | 优先级 | 修复项 | 难度 | 预期效果 |
241
+ |--------|--------|------|----------|
242
+ | P0 | 启用 V2 Runtime | 低 | 立即改善 |
243
+ | P1 | 添加冷却期 | 中 | 减少频繁重建 |
244
+ | P2 | Worker 池机制 | 高 | 根本解决 |
245
+ | P3 | 资源限制 | 中 | 防止资源耗尽 |
246
+
247
+ ### 验证方法
248
+
249
+ ```bash
250
+ # 1. 检查 OMC_RUNTIME_V2 是否启用
251
+ echo $OMC_RUNTIME_V2
252
+
253
+ # 2. 运行 team 并监控 spawn 次数
254
+ /team 3:executor "test task"
255
+
256
+ # 3. 观察日志中 worker spawn 次数
257
+ # 修复前: worker-1 spawn 11 次
258
+ # 修复后: worker-1 spawn 1-2 次
259
+ ```
260
+
261
+ ---
262
+
263
+ ## 6. 附录:相关代码位置
264
+
265
+ | 文件 | 说明 |
266
+ |------|------|
267
+ | `src/team/runtime.ts` | V1 runtime 核心逻辑 |
268
+ | `src/team/runtime-v2.ts` | V2 runtime (事件驱动) |
269
+ | `src/hooks/team-worker-hook.ts` | Worker 生命周期 hook |
270
+ | `src/hooks/team-leader-nudge-hook.ts` | 主 session 状态 hook |
271
+ | `src/team/tmux-session.ts` | tmux 会话管理 |
272
+ | `src/team/task-file-ops.ts` | 任务文件操作 |
273
+
274
+ ---
275
+
276
+ ## 7. 结论
277
+
278
+ OMC team 模式与 Claude Code 不兼容的主要原因是:
279
+
280
+ 1. **V1 runtime 的 watchdog 逻辑缺陷** - 任务完成后立即重新 spawn worker
281
+ 2. **缺乏 worker 复用机制** - 每次都创建新 worker
282
+ 3. **资源限制缺失** - 没有防止无限 spawn 的保护
283
+ 4. **In-process workers 状态同步问题** - 主进程可能因资源压力退出
284
+
285
+ **推荐优先尝试方案 A (启用 V2 Runtime)**,这是最简单且最可能立即见效的方案。