macro-agent 0.0.11 → 0.0.12

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 (408) hide show
  1. package/.macro-agent/teams/self-driving/prompts/grinder.md +27 -0
  2. package/.macro-agent/teams/self-driving/prompts/judge.md +27 -0
  3. package/.macro-agent/teams/self-driving/prompts/planner.md +33 -0
  4. package/.macro-agent/teams/self-driving/roles/grinder.yaml +17 -0
  5. package/.macro-agent/teams/self-driving/roles/judge.yaml +24 -0
  6. package/.macro-agent/teams/self-driving/roles/planner.yaml +18 -0
  7. package/.macro-agent/teams/self-driving/team.yaml +103 -0
  8. package/.macro-agent/teams/structured/prompts/developer.md +26 -0
  9. package/.macro-agent/teams/structured/prompts/lead.md +25 -0
  10. package/.macro-agent/teams/structured/prompts/reviewer.md +24 -0
  11. package/.macro-agent/teams/structured/roles/developer.yaml +12 -0
  12. package/.macro-agent/teams/structured/roles/lead.yaml +11 -0
  13. package/.macro-agent/teams/structured/roles/reviewer.yaml +19 -0
  14. package/.macro-agent/teams/structured/team.yaml +89 -0
  15. package/.sudocode/issues.jsonl +6 -0
  16. package/.sudocode/specs.jsonl +7 -0
  17. package/CLAUDE.md +110 -30
  18. package/README.md +60 -3
  19. package/dist/acp/macro-agent.d.ts +4 -0
  20. package/dist/acp/macro-agent.d.ts.map +1 -1
  21. package/dist/acp/macro-agent.js +50 -4
  22. package/dist/acp/macro-agent.js.map +1 -1
  23. package/dist/acp/session-mapper.d.ts +20 -1
  24. package/dist/acp/session-mapper.d.ts.map +1 -1
  25. package/dist/acp/session-mapper.js +90 -1
  26. package/dist/acp/session-mapper.js.map +1 -1
  27. package/dist/acp/types.d.ts +24 -1
  28. package/dist/acp/types.d.ts.map +1 -1
  29. package/dist/acp/types.js.map +1 -1
  30. package/dist/agent/agent-manager.d.ts +25 -1
  31. package/dist/agent/agent-manager.d.ts.map +1 -1
  32. package/dist/agent/agent-manager.js +93 -7
  33. package/dist/agent/agent-manager.js.map +1 -1
  34. package/dist/agent/types.d.ts +22 -0
  35. package/dist/agent/types.d.ts.map +1 -1
  36. package/dist/agent/types.js.map +1 -1
  37. package/dist/agent-detection/command-builder.d.ts +30 -0
  38. package/dist/agent-detection/command-builder.d.ts.map +1 -0
  39. package/dist/agent-detection/command-builder.js +71 -0
  40. package/dist/agent-detection/command-builder.js.map +1 -0
  41. package/dist/agent-detection/detector.d.ts +84 -0
  42. package/dist/agent-detection/detector.d.ts.map +1 -0
  43. package/dist/agent-detection/detector.js +240 -0
  44. package/dist/agent-detection/detector.js.map +1 -0
  45. package/dist/agent-detection/index.d.ts +12 -0
  46. package/dist/agent-detection/index.d.ts.map +1 -0
  47. package/dist/agent-detection/index.js +14 -0
  48. package/dist/agent-detection/index.js.map +1 -0
  49. package/dist/agent-detection/registry.d.ts +53 -0
  50. package/dist/agent-detection/registry.d.ts.map +1 -0
  51. package/dist/agent-detection/registry.js +177 -0
  52. package/dist/agent-detection/registry.js.map +1 -0
  53. package/dist/agent-detection/types.d.ts +121 -0
  54. package/dist/agent-detection/types.d.ts.map +1 -0
  55. package/dist/agent-detection/types.js +20 -0
  56. package/dist/agent-detection/types.js.map +1 -0
  57. package/dist/api/server.d.ts.map +1 -1
  58. package/dist/api/server.js +95 -0
  59. package/dist/api/server.js.map +1 -1
  60. package/dist/cli/index.js +29 -0
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/mcp.js +38 -0
  63. package/dist/cli/mcp.js.map +1 -1
  64. package/dist/config/index.d.ts +2 -0
  65. package/dist/config/index.d.ts.map +1 -0
  66. package/dist/config/index.js +2 -0
  67. package/dist/config/index.js.map +1 -0
  68. package/dist/config/project-config.d.ts +46 -0
  69. package/dist/config/project-config.d.ts.map +1 -0
  70. package/dist/config/project-config.js +68 -0
  71. package/dist/config/project-config.js.map +1 -0
  72. package/dist/lifecycle/cascade.d.ts +1 -1
  73. package/dist/lifecycle/cascade.d.ts.map +1 -1
  74. package/dist/lifecycle/handlers/index.d.ts +4 -0
  75. package/dist/lifecycle/handlers/index.d.ts.map +1 -1
  76. package/dist/lifecycle/handlers/index.js +2 -0
  77. package/dist/lifecycle/handlers/index.js.map +1 -1
  78. package/dist/lifecycle/handlers/worker.d.ts +4 -0
  79. package/dist/lifecycle/handlers/worker.d.ts.map +1 -1
  80. package/dist/lifecycle/handlers/worker.js +35 -3
  81. package/dist/lifecycle/handlers/worker.js.map +1 -1
  82. package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
  83. package/dist/map/adapter/acp-over-map.js +32 -2
  84. package/dist/map/adapter/acp-over-map.js.map +1 -1
  85. package/dist/map/adapter/event-translator.d.ts.map +1 -1
  86. package/dist/map/adapter/event-translator.js +1 -0
  87. package/dist/map/adapter/event-translator.js.map +1 -1
  88. package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
  89. package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
  90. package/dist/map/adapter/extensions/agent-detection.js +91 -0
  91. package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
  92. package/dist/map/adapter/extensions/index.d.ts +10 -1
  93. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  94. package/dist/map/adapter/extensions/index.js +39 -0
  95. package/dist/map/adapter/extensions/index.js.map +1 -1
  96. package/dist/map/adapter/extensions/resume.d.ts +47 -0
  97. package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
  98. package/dist/map/adapter/extensions/resume.js +59 -0
  99. package/dist/map/adapter/extensions/resume.js.map +1 -0
  100. package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
  101. package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
  102. package/dist/map/adapter/extensions/workspace-files.js +338 -0
  103. package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
  104. package/dist/mcp/mcp-server.d.ts +6 -0
  105. package/dist/mcp/mcp-server.d.ts.map +1 -1
  106. package/dist/mcp/mcp-server.js +45 -0
  107. package/dist/mcp/mcp-server.js.map +1 -1
  108. package/dist/mcp/tools/claim_task.d.ts +35 -0
  109. package/dist/mcp/tools/claim_task.d.ts.map +1 -0
  110. package/dist/mcp/tools/claim_task.js +58 -0
  111. package/dist/mcp/tools/claim_task.js.map +1 -0
  112. package/dist/mcp/tools/done.d.ts +11 -2
  113. package/dist/mcp/tools/done.d.ts.map +1 -1
  114. package/dist/mcp/tools/done.js +15 -10
  115. package/dist/mcp/tools/done.js.map +1 -1
  116. package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
  117. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
  118. package/dist/mcp/tools/list_claimable_tasks.js +63 -0
  119. package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
  120. package/dist/mcp/tools/unclaim_task.d.ts +31 -0
  121. package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
  122. package/dist/mcp/tools/unclaim_task.js +47 -0
  123. package/dist/mcp/tools/unclaim_task.js.map +1 -0
  124. package/dist/metrics/index.d.ts +2 -0
  125. package/dist/metrics/index.d.ts.map +1 -0
  126. package/dist/metrics/index.js +2 -0
  127. package/dist/metrics/index.js.map +1 -0
  128. package/dist/metrics/metrics.d.ts +79 -0
  129. package/dist/metrics/metrics.d.ts.map +1 -0
  130. package/dist/metrics/metrics.js +166 -0
  131. package/dist/metrics/metrics.js.map +1 -0
  132. package/dist/roles/capabilities.d.ts +1 -0
  133. package/dist/roles/capabilities.d.ts.map +1 -1
  134. package/dist/roles/capabilities.js +3 -0
  135. package/dist/roles/capabilities.js.map +1 -1
  136. package/dist/roles/types.d.ts +1 -1
  137. package/dist/roles/types.d.ts.map +1 -1
  138. package/dist/router/message-router.d.ts +41 -0
  139. package/dist/router/message-router.d.ts.map +1 -1
  140. package/dist/router/message-router.js +136 -5
  141. package/dist/router/message-router.js.map +1 -1
  142. package/dist/store/event-store.d.ts +8 -1
  143. package/dist/store/event-store.d.ts.map +1 -1
  144. package/dist/store/event-store.js +120 -4
  145. package/dist/store/event-store.js.map +1 -1
  146. package/dist/store/types/agents.d.ts +1 -1
  147. package/dist/store/types/agents.d.ts.map +1 -1
  148. package/dist/store/types/events.d.ts +1 -1
  149. package/dist/store/types/events.d.ts.map +1 -1
  150. package/dist/store/types/events.js.map +1 -1
  151. package/dist/store/types/index.d.ts +1 -0
  152. package/dist/store/types/index.d.ts.map +1 -1
  153. package/dist/store/types/index.js +1 -0
  154. package/dist/store/types/index.js.map +1 -1
  155. package/dist/store/types/sessions.d.ts +44 -0
  156. package/dist/store/types/sessions.d.ts.map +1 -0
  157. package/dist/store/types/sessions.js +9 -0
  158. package/dist/store/types/sessions.js.map +1 -0
  159. package/dist/store/types/tasks.d.ts +2 -0
  160. package/dist/store/types/tasks.d.ts.map +1 -1
  161. package/dist/task/backend/memory.d.ts +4 -1
  162. package/dist/task/backend/memory.d.ts.map +1 -1
  163. package/dist/task/backend/memory.js +81 -0
  164. package/dist/task/backend/memory.js.map +1 -1
  165. package/dist/task/backend/types.d.ts +30 -0
  166. package/dist/task/backend/types.d.ts.map +1 -1
  167. package/dist/task/backend/types.js.map +1 -1
  168. package/dist/teams/index.d.ts +4 -0
  169. package/dist/teams/index.d.ts.map +1 -0
  170. package/dist/teams/index.js +4 -0
  171. package/dist/teams/index.js.map +1 -0
  172. package/dist/teams/team-loader.d.ts +20 -0
  173. package/dist/teams/team-loader.d.ts.map +1 -0
  174. package/dist/teams/team-loader.js +293 -0
  175. package/dist/teams/team-loader.js.map +1 -0
  176. package/dist/teams/team-runtime.d.ts +139 -0
  177. package/dist/teams/team-runtime.d.ts.map +1 -0
  178. package/dist/teams/team-runtime.js +613 -0
  179. package/dist/teams/team-runtime.js.map +1 -0
  180. package/dist/teams/types.d.ts +266 -0
  181. package/dist/teams/types.d.ts.map +1 -0
  182. package/dist/teams/types.js +20 -0
  183. package/dist/teams/types.js.map +1 -0
  184. package/dist/workspace/dataplane-adapter.d.ts +1 -1
  185. package/dist/workspace/dataplane-adapter.d.ts.map +1 -1
  186. package/dist/workspace/dataplane-adapter.js +1 -1
  187. package/dist/workspace/dataplane-adapter.js.map +1 -1
  188. package/dist/workspace/index.d.ts +1 -1
  189. package/dist/workspace/index.d.ts.map +1 -1
  190. package/dist/workspace/strategies/index.d.ts +6 -0
  191. package/dist/workspace/strategies/index.d.ts.map +1 -0
  192. package/dist/workspace/strategies/index.js +5 -0
  193. package/dist/workspace/strategies/index.js.map +1 -0
  194. package/dist/workspace/strategies/optimistic.d.ts +26 -0
  195. package/dist/workspace/strategies/optimistic.d.ts.map +1 -0
  196. package/dist/workspace/strategies/optimistic.js +121 -0
  197. package/dist/workspace/strategies/optimistic.js.map +1 -0
  198. package/dist/workspace/strategies/queue.d.ts +26 -0
  199. package/dist/workspace/strategies/queue.d.ts.map +1 -0
  200. package/dist/workspace/strategies/queue.js +67 -0
  201. package/dist/workspace/strategies/queue.js.map +1 -0
  202. package/dist/workspace/strategies/registry.d.ts +37 -0
  203. package/dist/workspace/strategies/registry.d.ts.map +1 -0
  204. package/dist/workspace/strategies/registry.js +63 -0
  205. package/dist/workspace/strategies/registry.js.map +1 -0
  206. package/dist/workspace/strategies/trunk.d.ts +20 -0
  207. package/dist/workspace/strategies/trunk.d.ts.map +1 -0
  208. package/dist/workspace/strategies/trunk.js +108 -0
  209. package/dist/workspace/strategies/trunk.js.map +1 -0
  210. package/dist/workspace/strategies/types.d.ts +104 -0
  211. package/dist/workspace/strategies/types.d.ts.map +1 -0
  212. package/dist/workspace/strategies/types.js +11 -0
  213. package/dist/workspace/strategies/types.js.map +1 -0
  214. package/dist/workspace/types.d.ts +1 -1
  215. package/dist/workspace/types.d.ts.map +1 -1
  216. package/dist/workspace/workspace-manager.d.ts +1 -1
  217. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  218. package/docs/implementation-details.md +1127 -0
  219. package/docs/implementation-summary.md +448 -0
  220. package/docs/plan-self-driving-support.md +433 -0
  221. package/docs/spec-self-driving-support.md +462 -0
  222. package/docs/team-templates.md +860 -0
  223. package/docs/teams.md +233 -0
  224. package/package.json +4 -2
  225. package/src/acp/__tests__/integration.test.ts +161 -1
  226. package/src/acp/__tests__/macro-agent.test.ts +95 -0
  227. package/src/acp/__tests__/session-persistence.test.ts +276 -0
  228. package/src/acp/macro-agent.ts +79 -7
  229. package/src/acp/session-mapper.ts +108 -1
  230. package/src/acp/types.ts +33 -1
  231. package/src/agent/agent-manager.ts +158 -6
  232. package/src/agent/types.ts +27 -0
  233. package/src/agent-detection/__tests__/command-builder.test.ts +336 -0
  234. package/src/agent-detection/__tests__/detector.test.ts +768 -0
  235. package/src/agent-detection/__tests__/registry.test.ts +254 -0
  236. package/src/agent-detection/command-builder.ts +90 -0
  237. package/src/agent-detection/detector.ts +307 -0
  238. package/src/agent-detection/index.ts +36 -0
  239. package/src/agent-detection/registry.ts +200 -0
  240. package/src/agent-detection/types.ts +184 -0
  241. package/src/api/server.ts +110 -0
  242. package/src/cli/index.ts +44 -0
  243. package/src/cli/mcp.ts +47 -0
  244. package/src/config/index.ts +9 -0
  245. package/src/config/project-config.ts +107 -0
  246. package/src/lifecycle/cascade.ts +1 -1
  247. package/src/lifecycle/handlers/index.ts +8 -0
  248. package/src/lifecycle/handlers/worker.ts +48 -3
  249. package/src/map/adapter/__tests__/extensions.test.ts +359 -0
  250. package/src/map/adapter/__tests__/workspace-files.test.ts +673 -0
  251. package/src/map/adapter/acp-over-map.ts +45 -2
  252. package/src/map/adapter/event-translator.ts +1 -0
  253. package/src/map/adapter/extensions/agent-detection.ts +201 -0
  254. package/src/map/adapter/extensions/index.ts +63 -0
  255. package/src/map/adapter/extensions/resume.ts +114 -0
  256. package/src/map/adapter/extensions/workspace-files.ts +449 -0
  257. package/src/mcp/mcp-server.ts +67 -0
  258. package/src/mcp/tools/claim_task.ts +86 -0
  259. package/src/mcp/tools/done.ts +24 -10
  260. package/src/mcp/tools/list_claimable_tasks.ts +93 -0
  261. package/src/mcp/tools/unclaim_task.ts +71 -0
  262. package/src/metrics/index.ts +9 -0
  263. package/src/metrics/metrics.ts +280 -0
  264. package/src/roles/capabilities.ts +3 -0
  265. package/src/roles/types.ts +2 -1
  266. package/src/router/__tests__/message-router.test.ts +561 -0
  267. package/src/router/message-router.ts +223 -6
  268. package/src/store/event-store.ts +151 -3
  269. package/src/store/types/agents.ts +1 -1
  270. package/src/store/types/events.ts +2 -1
  271. package/src/store/types/index.ts +1 -0
  272. package/src/store/types/sessions.ts +53 -0
  273. package/src/store/types/tasks.ts +3 -0
  274. package/src/task/backend/memory.ts +116 -0
  275. package/src/task/backend/types.ts +43 -0
  276. package/src/teams/__tests__/cross-subsystem.integration.test.ts +983 -0
  277. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +553 -0
  278. package/src/teams/__tests__/team-system.test.ts +1280 -0
  279. package/src/teams/index.ts +13 -0
  280. package/src/teams/team-loader.ts +434 -0
  281. package/src/teams/team-runtime.ts +727 -0
  282. package/src/teams/types.ts +377 -0
  283. package/src/workspace/dataplane-adapter.ts +1 -1
  284. package/src/workspace/index.ts +1 -1
  285. package/src/workspace/strategies/index.ts +18 -0
  286. package/src/workspace/strategies/optimistic.ts +136 -0
  287. package/src/workspace/strategies/queue.ts +81 -0
  288. package/src/workspace/strategies/registry.ts +89 -0
  289. package/src/workspace/strategies/trunk.ts +123 -0
  290. package/src/workspace/strategies/types.ts +145 -0
  291. package/src/workspace/types.ts +1 -1
  292. package/src/workspace/workspace-manager.ts +1 -1
  293. package/.claude/settings.local.json +0 -59
  294. package/dist/map/utils/address-translation.d.ts +0 -99
  295. package/dist/map/utils/address-translation.d.ts.map +0 -1
  296. package/dist/map/utils/address-translation.js +0 -285
  297. package/dist/map/utils/address-translation.js.map +0 -1
  298. package/dist/map/utils/index.d.ts +0 -7
  299. package/dist/map/utils/index.d.ts.map +0 -1
  300. package/dist/map/utils/index.js +0 -7
  301. package/dist/map/utils/index.js.map +0 -1
  302. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  303. package/references/acp-factory-ref/LICENSE +0 -21
  304. package/references/acp-factory-ref/README.md +0 -341
  305. package/references/acp-factory-ref/package-lock.json +0 -3102
  306. package/references/acp-factory-ref/package.json +0 -96
  307. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  308. package/references/acp-factory-ref/python/LICENSE +0 -21
  309. package/references/acp-factory-ref/python/Makefile +0 -57
  310. package/references/acp-factory-ref/python/README.md +0 -253
  311. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  312. package/references/acp-factory-ref/python/tests/__init__.py +0 -0
  313. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  314. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  315. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  316. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  317. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  318. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  319. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  320. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  321. package/references/claude-code-acp/.prettierrc.json +0 -4
  322. package/references/claude-code-acp/CHANGELOG.md +0 -249
  323. package/references/claude-code-acp/LICENSE +0 -222
  324. package/references/claude-code-acp/README.md +0 -53
  325. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  326. package/references/claude-code-acp/eslint.config.js +0 -48
  327. package/references/claude-code-acp/package-lock.json +0 -4570
  328. package/references/claude-code-acp/package.json +0 -88
  329. package/references/claude-code-acp/scripts/release.sh +0 -119
  330. package/references/claude-code-acp/src/acp-agent.ts +0 -2065
  331. package/references/claude-code-acp/src/index.ts +0 -26
  332. package/references/claude-code-acp/src/lib.ts +0 -38
  333. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  334. package/references/claude-code-acp/src/settings.ts +0 -522
  335. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  336. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  337. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  338. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  339. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  340. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  341. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  342. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  343. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  344. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  345. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  346. package/references/claude-code-acp/src/tools.ts +0 -819
  347. package/references/claude-code-acp/src/utils.ts +0 -171
  348. package/references/claude-code-acp/tsconfig.json +0 -18
  349. package/references/claude-code-acp/vitest.config.ts +0 -19
  350. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -111
  351. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
  352. package/references/multi-agent-protocol/LICENSE +0 -21
  353. package/references/multi-agent-protocol/README.md +0 -113
  354. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
  355. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  356. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  357. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  358. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  359. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  360. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  361. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  362. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  363. package/references/multi-agent-protocol/docs/09-authentication.md +0 -680
  364. package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
  365. package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
  366. package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
  367. package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
  368. package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
  369. package/references/multi-agent-protocol/docs-site/README.md +0 -82
  370. package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
  371. package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
  372. package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
  373. package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
  374. package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
  375. package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
  376. package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
  377. package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
  378. package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
  379. package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
  380. package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
  381. package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
  382. package/references/multi-agent-protocol/docs-site/index.md +0 -136
  383. package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
  384. package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
  385. package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
  386. package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
  387. package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
  388. package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
  389. package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
  390. package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
  391. package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
  392. package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
  393. package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
  394. package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
  395. package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
  396. package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
  397. package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
  398. package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
  399. package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
  400. package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
  401. package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
  402. package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
  403. package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
  404. package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
  405. package/references/multi-agent-protocol/package-lock.json +0 -3886
  406. package/references/multi-agent-protocol/package.json +0 -56
  407. package/references/multi-agent-protocol/schema/meta.json +0 -467
  408. package/references/multi-agent-protocol/schema/schema.json +0 -2558
@@ -1,479 +0,0 @@
1
- /**
2
- * Tests for fork-related helper methods in ClaudeAcpAgent.
3
- *
4
- * Since the methods are private, we test them by:
5
- * 1. Creating a test subclass that exposes the private methods
6
- * 2. Testing the file manipulation logic directly
7
- */
8
-
9
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
10
- import { ClaudeAcpAgent } from "../acp-agent.js";
11
- import type { AgentSideConnection } from "@agentclientprotocol/sdk";
12
- import * as fs from "node:fs";
13
- import * as path from "node:path";
14
- import * as os from "node:os";
15
-
16
- // Create a test subclass that exposes private methods for testing
17
- class TestableClaudeAcpAgent extends ClaudeAcpAgent {
18
- // Expose private methods for testing
19
- public testExtractInternalSessionId(filePath: string): string | null {
20
- return (this as any).extractInternalSessionId(filePath);
21
- }
22
-
23
- public testPromoteToFullSession(filePath: string): boolean {
24
- return (this as any).promoteToFullSession(filePath);
25
- }
26
-
27
- public testUpdateSessionIdInFile(filePath: string, newSessionId: string): boolean {
28
- return (this as any).updateSessionIdInFile(filePath, newSessionId);
29
- }
30
-
31
- public testGetSessionDirPath(cwd: string): string {
32
- return (this as any).getSessionDirPath(cwd);
33
- }
34
-
35
- public testGetSessionFilePath(sessionId: string, cwd: string): string {
36
- return (this as any).getSessionFilePath(sessionId, cwd);
37
- }
38
-
39
- public async testDiscoverCliSessionId(
40
- sessionDir: string,
41
- beforeFiles: Set<string>,
42
- fallbackId: string,
43
- timeout?: number
44
- ): Promise<string> {
45
- return (this as any).discoverCliSessionId(sessionDir, beforeFiles, fallbackId, timeout);
46
- }
47
-
48
- public async testWaitForSessionFile(filePath: string, timeout: number): Promise<boolean> {
49
- return (this as any).waitForSessionFile(filePath, timeout);
50
- }
51
- }
52
-
53
- describe("ClaudeAcpAgent fork helpers", () => {
54
- let tempDir: string;
55
- let agent: TestableClaudeAcpAgent;
56
- const mockLogger = {
57
- log: vi.fn(),
58
- error: vi.fn(),
59
- };
60
-
61
- // Create a minimal mock client
62
- const mockClient = {
63
- sessionUpdate: vi.fn(),
64
- readTextFile: vi.fn(),
65
- writeTextFile: vi.fn(),
66
- requestPermission: vi.fn(),
67
- } as unknown as AgentSideConnection;
68
-
69
- beforeEach(async () => {
70
- tempDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), "acp-agent-fork-test-"));
71
- agent = new TestableClaudeAcpAgent(mockClient, mockLogger);
72
- vi.clearAllMocks();
73
- });
74
-
75
- afterEach(async () => {
76
- await fs.promises.rm(tempDir, { recursive: true, force: true });
77
- });
78
-
79
- describe("extractInternalSessionId", () => {
80
- it("should extract UUID sessionId from valid JSONL file", async () => {
81
- const filePath = path.join(tempDir, "session.jsonl");
82
- const sessionId = "12345678-1234-1234-1234-123456789abc";
83
-
84
- await fs.promises.writeFile(
85
- filePath,
86
- JSON.stringify({ sessionId, type: "init" }) + "\n"
87
- );
88
-
89
- const result = agent.testExtractInternalSessionId(filePath);
90
- expect(result).toBe(sessionId);
91
- });
92
-
93
- it("should return null for non-existent file", () => {
94
- const result = agent.testExtractInternalSessionId(path.join(tempDir, "nonexistent.jsonl"));
95
- expect(result).toBeNull();
96
- });
97
-
98
- it("should return null for file without sessionId", async () => {
99
- const filePath = path.join(tempDir, "session.jsonl");
100
- await fs.promises.writeFile(
101
- filePath,
102
- JSON.stringify({ type: "init" }) + "\n"
103
- );
104
-
105
- const result = agent.testExtractInternalSessionId(filePath);
106
- expect(result).toBeNull();
107
- });
108
-
109
- it("should return null for non-UUID sessionId", async () => {
110
- const filePath = path.join(tempDir, "session.jsonl");
111
- await fs.promises.writeFile(
112
- filePath,
113
- JSON.stringify({ sessionId: "not-a-uuid", type: "init" }) + "\n"
114
- );
115
-
116
- const result = agent.testExtractInternalSessionId(filePath);
117
- expect(result).toBeNull();
118
- });
119
-
120
- it("should handle empty file", async () => {
121
- const filePath = path.join(tempDir, "session.jsonl");
122
- await fs.promises.writeFile(filePath, "");
123
-
124
- const result = agent.testExtractInternalSessionId(filePath);
125
- expect(result).toBeNull();
126
- });
127
-
128
- it("should find sessionId from first non-empty line", async () => {
129
- const filePath = path.join(tempDir, "session.jsonl");
130
- const sessionId = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
131
-
132
- await fs.promises.writeFile(
133
- filePath,
134
- "\n\n" + JSON.stringify({ sessionId, type: "init" }) + "\n"
135
- );
136
-
137
- const result = agent.testExtractInternalSessionId(filePath);
138
- expect(result).toBe(sessionId);
139
- });
140
- });
141
-
142
- describe("promoteToFullSession", () => {
143
- it("should change isSidechain from true to false", async () => {
144
- const filePath = path.join(tempDir, "session.jsonl");
145
- const lines = [
146
- JSON.stringify({ sessionId: "test-id", isSidechain: true }),
147
- JSON.stringify({ type: "message", content: "hello" }),
148
- ];
149
- await fs.promises.writeFile(filePath, lines.join("\n"));
150
-
151
- const result = agent.testPromoteToFullSession(filePath);
152
- expect(result).toBe(true);
153
-
154
- const content = await fs.promises.readFile(filePath, "utf-8");
155
- const parsedLines = content.split("\n").map(line => JSON.parse(line));
156
-
157
- expect(parsedLines[0].isSidechain).toBe(false);
158
- expect(parsedLines[1].content).toBe("hello");
159
- });
160
-
161
- it("should return false for non-existent file", () => {
162
- const result = agent.testPromoteToFullSession(path.join(tempDir, "nonexistent.jsonl"));
163
- expect(result).toBe(false);
164
- });
165
-
166
- it("should preserve other fields when promoting", async () => {
167
- const filePath = path.join(tempDir, "session.jsonl");
168
- const original = {
169
- sessionId: "test-id",
170
- isSidechain: true,
171
- cwd: "/some/path",
172
- model: "claude-3",
173
- };
174
- await fs.promises.writeFile(filePath, JSON.stringify(original));
175
-
176
- agent.testPromoteToFullSession(filePath);
177
-
178
- const content = await fs.promises.readFile(filePath, "utf-8");
179
- const parsed = JSON.parse(content);
180
-
181
- expect(parsed.sessionId).toBe("test-id");
182
- expect(parsed.isSidechain).toBe(false);
183
- expect(parsed.cwd).toBe("/some/path");
184
- expect(parsed.model).toBe("claude-3");
185
- });
186
-
187
- it("should handle file without isSidechain field", async () => {
188
- const filePath = path.join(tempDir, "session.jsonl");
189
- await fs.promises.writeFile(
190
- filePath,
191
- JSON.stringify({ sessionId: "test-id", type: "init" })
192
- );
193
-
194
- const result = agent.testPromoteToFullSession(filePath);
195
- expect(result).toBe(true);
196
-
197
- const content = await fs.promises.readFile(filePath, "utf-8");
198
- const parsed = JSON.parse(content);
199
- expect(parsed.isSidechain).toBeUndefined();
200
- });
201
-
202
- it("should log success message", async () => {
203
- const filePath = path.join(tempDir, "session.jsonl");
204
- await fs.promises.writeFile(
205
- filePath,
206
- JSON.stringify({ sessionId: "test-id", isSidechain: true })
207
- );
208
-
209
- agent.testPromoteToFullSession(filePath);
210
-
211
- expect(mockLogger.log).toHaveBeenCalledWith(
212
- expect.stringContaining("Promoted sidechain to full session")
213
- );
214
- });
215
- });
216
-
217
- describe("updateSessionIdInFile", () => {
218
- it("should update sessionId in all lines", async () => {
219
- const filePath = path.join(tempDir, "session.jsonl");
220
- const oldId = "old-session-id";
221
- const newId = "new-session-id";
222
-
223
- const lines = [
224
- JSON.stringify({ sessionId: oldId, type: "init" }),
225
- JSON.stringify({ sessionId: oldId, type: "message", content: "hello" }),
226
- JSON.stringify({ sessionId: oldId, type: "tool_use", name: "Read" }),
227
- ];
228
- await fs.promises.writeFile(filePath, lines.join("\n"));
229
-
230
- const result = agent.testUpdateSessionIdInFile(filePath, newId);
231
- expect(result).toBe(true);
232
-
233
- const content = await fs.promises.readFile(filePath, "utf-8");
234
- const parsedLines = content.split("\n").map(line => JSON.parse(line));
235
-
236
- for (const line of parsedLines) {
237
- expect(line.sessionId).toBe(newId);
238
- }
239
- });
240
-
241
- it("should return false for non-existent file", () => {
242
- const result = agent.testUpdateSessionIdInFile(
243
- path.join(tempDir, "nonexistent.jsonl"),
244
- "new-id"
245
- );
246
- expect(result).toBe(false);
247
- });
248
-
249
- it("should preserve lines without sessionId", async () => {
250
- const filePath = path.join(tempDir, "session.jsonl");
251
- const lines = [
252
- JSON.stringify({ sessionId: "old-id", type: "init" }),
253
- JSON.stringify({ type: "comment", text: "no sessionId here" }),
254
- ];
255
- await fs.promises.writeFile(filePath, lines.join("\n"));
256
-
257
- agent.testUpdateSessionIdInFile(filePath, "new-id");
258
-
259
- const content = await fs.promises.readFile(filePath, "utf-8");
260
- const parsedLines = content.split("\n").map(line => JSON.parse(line));
261
-
262
- expect(parsedLines[0].sessionId).toBe("new-id");
263
- expect(parsedLines[1].sessionId).toBeUndefined();
264
- expect(parsedLines[1].text).toBe("no sessionId here");
265
- });
266
-
267
- it("should handle empty lines gracefully", async () => {
268
- const filePath = path.join(tempDir, "session.jsonl");
269
- const content = JSON.stringify({ sessionId: "old-id" }) + "\n\n" + JSON.stringify({ sessionId: "old-id" });
270
- await fs.promises.writeFile(filePath, content);
271
-
272
- const result = agent.testUpdateSessionIdInFile(filePath, "new-id");
273
- expect(result).toBe(true);
274
-
275
- const newContent = await fs.promises.readFile(filePath, "utf-8");
276
- const lines = newContent.split("\n");
277
-
278
- expect(JSON.parse(lines[0]).sessionId).toBe("new-id");
279
- expect(lines[1]).toBe(""); // Empty line preserved
280
- expect(JSON.parse(lines[2]).sessionId).toBe("new-id");
281
- });
282
-
283
- it("should log success message", async () => {
284
- const filePath = path.join(tempDir, "session.jsonl");
285
- await fs.promises.writeFile(
286
- filePath,
287
- JSON.stringify({ sessionId: "old-id" })
288
- );
289
-
290
- agent.testUpdateSessionIdInFile(filePath, "new-id");
291
-
292
- expect(mockLogger.log).toHaveBeenCalledWith(
293
- expect.stringContaining("Updated session ID in file")
294
- );
295
- });
296
- });
297
-
298
- describe("getSessionDirPath", () => {
299
- it("should compute correct path with cwd hash", () => {
300
- const result = agent.testGetSessionDirPath("/private/tmp");
301
- const homeDir = os.homedir();
302
-
303
- expect(result).toBe(`${homeDir}/.claude/projects/-private-tmp`);
304
- });
305
-
306
- it("should replace both / and _ with -", () => {
307
- // Use tempDir which exists
308
- const testDir = path.join(tempDir, "my_project");
309
- fs.mkdirSync(testDir, { recursive: true });
310
-
311
- const result = agent.testGetSessionDirPath(testDir);
312
- const realPath = fs.realpathSync(testDir);
313
- const expectedHash = realPath.replace(/[/_]/g, "-");
314
-
315
- expect(result).toBe(`${os.homedir()}/.claude/projects/${expectedHash}`);
316
- });
317
-
318
- it("should resolve symlinks", () => {
319
- // /var on macOS is a symlink to /private/var
320
- const result = agent.testGetSessionDirPath("/var/tmp");
321
- const homeDir = os.homedir();
322
-
323
- // Should use the resolved path
324
- expect(result).toBe(`${homeDir}/.claude/projects/-private-var-tmp`);
325
- });
326
- });
327
-
328
- describe("getSessionFilePath", () => {
329
- it("should append sessionId.jsonl to session dir", () => {
330
- const result = agent.testGetSessionFilePath("my-session-id", "/private/tmp");
331
- const homeDir = os.homedir();
332
-
333
- expect(result).toBe(`${homeDir}/.claude/projects/-private-tmp/my-session-id.jsonl`);
334
- });
335
- });
336
-
337
- describe("waitForSessionFile", () => {
338
- it("should return true immediately if file exists", async () => {
339
- const filePath = path.join(tempDir, "session.jsonl");
340
- await fs.promises.writeFile(filePath, "{}");
341
-
342
- const start = Date.now();
343
- const result = await agent.testWaitForSessionFile(filePath, 1000);
344
- const elapsed = Date.now() - start;
345
-
346
- expect(result).toBe(true);
347
- expect(elapsed).toBeLessThan(200);
348
- });
349
-
350
- it("should return true when file appears before timeout", async () => {
351
- const filePath = path.join(tempDir, "session.jsonl");
352
-
353
- // Create file after 200ms
354
- setTimeout(async () => {
355
- await fs.promises.writeFile(filePath, "{}");
356
- }, 200);
357
-
358
- const start = Date.now();
359
- const result = await agent.testWaitForSessionFile(filePath, 2000);
360
- const elapsed = Date.now() - start;
361
-
362
- expect(result).toBe(true);
363
- expect(elapsed).toBeGreaterThanOrEqual(200);
364
- expect(elapsed).toBeLessThan(2000);
365
- });
366
-
367
- it("should return false when timeout expires", async () => {
368
- const filePath = path.join(tempDir, "nonexistent.jsonl");
369
-
370
- const start = Date.now();
371
- const result = await agent.testWaitForSessionFile(filePath, 300);
372
- const elapsed = Date.now() - start;
373
-
374
- expect(result).toBe(false);
375
- expect(elapsed).toBeGreaterThanOrEqual(300);
376
- expect(elapsed).toBeLessThan(500);
377
- });
378
- });
379
-
380
- describe("discoverCliSessionId", () => {
381
- it("should find new agent-xxx file", async () => {
382
- const sessionDir = path.join(tempDir, "sessions");
383
- await fs.promises.mkdir(sessionDir, { recursive: true });
384
-
385
- const beforeFiles = new Set<string>();
386
-
387
- // Create an agent-xxx file
388
- const agentFile = "agent-abc123.jsonl";
389
- await fs.promises.writeFile(path.join(sessionDir, agentFile), "{}");
390
-
391
- const result = await agent.testDiscoverCliSessionId(sessionDir, beforeFiles, "fallback", 1000);
392
-
393
- expect(result).toBe("agent-abc123");
394
- });
395
-
396
- it("should ignore non-agent files", async () => {
397
- const sessionDir = path.join(tempDir, "sessions");
398
- await fs.promises.mkdir(sessionDir, { recursive: true });
399
-
400
- const beforeFiles = new Set<string>();
401
-
402
- // Create a UUID-named file (not agent-xxx)
403
- const uuidFile = "12345678-1234-1234-1234-123456789abc.jsonl";
404
- await fs.promises.writeFile(path.join(sessionDir, uuidFile), "{}");
405
-
406
- const result = await agent.testDiscoverCliSessionId(sessionDir, beforeFiles, "fallback", 500);
407
-
408
- expect(result).toBe("fallback");
409
- });
410
-
411
- it("should return fallback when no new files found", async () => {
412
- const sessionDir = path.join(tempDir, "sessions");
413
- await fs.promises.mkdir(sessionDir, { recursive: true });
414
-
415
- const beforeFiles = new Set<string>();
416
-
417
- const result = await agent.testDiscoverCliSessionId(sessionDir, beforeFiles, "fallback-id", 300);
418
-
419
- expect(result).toBe("fallback-id");
420
- });
421
-
422
- it("should ignore files that existed before", async () => {
423
- const sessionDir = path.join(tempDir, "sessions");
424
- await fs.promises.mkdir(sessionDir, { recursive: true });
425
-
426
- // Create file before
427
- const existingFile = "agent-existing.jsonl";
428
- await fs.promises.writeFile(path.join(sessionDir, existingFile), "{}");
429
-
430
- const beforeFiles = new Set<string>([existingFile]);
431
-
432
- const result = await agent.testDiscoverCliSessionId(sessionDir, beforeFiles, "fallback", 300);
433
-
434
- expect(result).toBe("fallback");
435
- });
436
-
437
- it("should return newest file when multiple agent files appear", async () => {
438
- const sessionDir = path.join(tempDir, "sessions");
439
- await fs.promises.mkdir(sessionDir, { recursive: true });
440
-
441
- const beforeFiles = new Set<string>();
442
-
443
- // Create first file - use hex chars to match agent-[a-f0-9]+ pattern
444
- const firstPath = path.join(sessionDir, "agent-aaa111.jsonl");
445
- await fs.promises.writeFile(firstPath, "{}");
446
-
447
- // Wait a bit to ensure different mtime, then create second file
448
- await new Promise(resolve => setTimeout(resolve, 100));
449
- const secondPath = path.join(sessionDir, "agent-bbb222.jsonl");
450
- await fs.promises.writeFile(secondPath, "{}");
451
-
452
- // Verify files exist before calling discover
453
- expect(fs.existsSync(firstPath)).toBe(true);
454
- expect(fs.existsSync(secondPath)).toBe(true);
455
-
456
- const result = await agent.testDiscoverCliSessionId(sessionDir, beforeFiles, "fallback", 1000);
457
-
458
- expect(result).toBe("agent-bbb222");
459
- });
460
-
461
- it("should handle non-existent session directory initially", async () => {
462
- const sessionDir = path.join(tempDir, "nonexistent-dir");
463
- const beforeFiles = new Set<string>();
464
-
465
- // Start the discovery in parallel with file creation
466
- const discoverPromise = agent.testDiscoverCliSessionId(sessionDir, beforeFiles, "fallback", 2000);
467
-
468
- // Create directory and file after 200ms (within the 2000ms timeout)
469
- // Use hex chars to match agent-[a-f0-9]+ pattern
470
- await new Promise(resolve => setTimeout(resolve, 200));
471
- await fs.promises.mkdir(sessionDir, { recursive: true });
472
- await fs.promises.writeFile(path.join(sessionDir, "agent-ccc333.jsonl"), "{}");
473
-
474
- const result = await discoverPromise;
475
-
476
- expect(result).toBe("agent-ccc333");
477
- });
478
- });
479
- });