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,349 +0,0 @@
1
- """
2
- E2E tests for Codex agent integration.
3
-
4
- These tests use the real Codex CLI and require:
5
- 1. @zed-industries/codex-acp installed
6
- 2. Codex authenticated (via browser auth, OPENAI_API_KEY, or CODEX_API_KEY)
7
-
8
- Run with: RUN_E2E_TESTS=true pytest tests/e2e/test_codex_e2e.py -v
9
- """
10
-
11
- import os
12
- import shutil
13
- import tempfile
14
-
15
- import pytest
16
-
17
- from acp_factory import AgentFactory, AgentHandle, ExtendedSessionUpdate
18
-
19
- # Skip all tests if RUN_E2E_TESTS is not set
20
- pytestmark = pytest.mark.skipif(
21
- os.environ.get("RUN_E2E_TESTS") != "true",
22
- reason="E2E tests require RUN_E2E_TESTS=true",
23
- )
24
-
25
-
26
- @pytest.fixture(scope="module")
27
- async def agent_handle() -> AgentHandle:
28
- """Spawn Codex agent once for the module."""
29
- handle = await AgentFactory.spawn("codex")
30
- yield handle
31
- await handle.close()
32
-
33
-
34
- class TestCodexAgentInitialization:
35
- """Tests for agent initialization."""
36
-
37
- def test_should_have_codex_registered_in_factory(self) -> None:
38
- """Codex should be registered in factory."""
39
- config = AgentFactory.get_config("codex")
40
- assert config is not None
41
- assert config.command == "npx"
42
- assert "@zed-industries/codex-acp" in config.args
43
-
44
- @pytest.mark.asyncio
45
- async def test_should_spawn_codex_agent_successfully(
46
- self, agent_handle: AgentHandle
47
- ) -> None:
48
- """Agent should spawn successfully."""
49
- assert agent_handle is not None
50
- assert agent_handle.capabilities is not None
51
-
52
- @pytest.mark.asyncio
53
- async def test_should_advertise_capabilities(
54
- self, agent_handle: AgentHandle
55
- ) -> None:
56
- """Agent should advertise capabilities."""
57
- print(f"Codex capabilities: {agent_handle.capabilities}")
58
- assert agent_handle.capabilities is not None
59
-
60
-
61
- class TestCodexSessionManagement:
62
- """Tests for session management."""
63
-
64
- @pytest.mark.asyncio
65
- async def test_should_create_a_new_session(
66
- self, agent_handle: AgentHandle
67
- ) -> None:
68
- """Should create a new session."""
69
- temp_dir = tempfile.mkdtemp(prefix="codex-session-")
70
- try:
71
- session = await agent_handle.create_session(temp_dir)
72
- assert session is not None
73
- assert session.id is not None
74
- assert session.cwd == temp_dir
75
- finally:
76
- shutil.rmtree(temp_dir, ignore_errors=True)
77
-
78
- @pytest.mark.asyncio
79
- async def test_should_create_multiple_sessions(
80
- self, agent_handle: AgentHandle
81
- ) -> None:
82
- """Should create multiple independent sessions."""
83
- temp_dir = tempfile.mkdtemp(prefix="codex-multi-")
84
- try:
85
- session1 = await agent_handle.create_session(temp_dir)
86
- session2 = await agent_handle.create_session(temp_dir)
87
-
88
- assert session1.id is not None
89
- assert session2.id is not None
90
- assert session1.id != session2.id
91
- finally:
92
- shutil.rmtree(temp_dir, ignore_errors=True)
93
-
94
-
95
- class TestCodexBasicPrompting:
96
- """Tests for basic prompting functionality."""
97
-
98
- @pytest.mark.asyncio
99
- async def test_should_respond_to_a_simple_prompt(
100
- self, agent_handle: AgentHandle
101
- ) -> None:
102
- """Should respond to a simple prompt."""
103
- temp_dir = tempfile.mkdtemp(prefix="codex-prompt-")
104
- try:
105
- session = await agent_handle.create_session(temp_dir)
106
- updates: list[ExtendedSessionUpdate] = []
107
-
108
- async for update in session.prompt(
109
- "What is 2 + 2? Reply with just the number."
110
- ):
111
- updates.append(update)
112
-
113
- # Should have received some updates
114
- assert len(updates) > 0
115
-
116
- # Check for agent message chunks
117
- message_chunks = [
118
- u for u in updates if u.get("sessionUpdate") == "agent_message_chunk"
119
- ]
120
- assert len(message_chunks) > 0
121
- finally:
122
- shutil.rmtree(temp_dir, ignore_errors=True)
123
-
124
- @pytest.mark.asyncio
125
- async def test_should_handle_multi_turn_conversation(
126
- self, agent_handle: AgentHandle
127
- ) -> None:
128
- """Should handle multi-turn conversation with context."""
129
- temp_dir = tempfile.mkdtemp(prefix="codex-multi-turn-")
130
- try:
131
- session = await agent_handle.create_session(temp_dir)
132
-
133
- # First turn
134
- updates1: list[ExtendedSessionUpdate] = []
135
- async for update in session.prompt(
136
- "Remember the word 'banana'. Just say 'I will remember banana'."
137
- ):
138
- updates1.append(update)
139
- assert len(updates1) > 0
140
-
141
- # Second turn - recall
142
- updates2: list[ExtendedSessionUpdate] = []
143
- response_text = ""
144
- async for update in session.prompt(
145
- "What word did I ask you to remember? Just say the word."
146
- ):
147
- updates2.append(update)
148
- if update.get("sessionUpdate") == "agent_message_chunk":
149
- content = update.get("content", {})
150
- if isinstance(content, dict) and content.get("type") == "text":
151
- response_text += content.get("text", "")
152
-
153
- assert len(updates2) > 0
154
- assert "banana" in response_text.lower()
155
- finally:
156
- shutil.rmtree(temp_dir, ignore_errors=True)
157
-
158
- @pytest.mark.asyncio
159
- async def test_should_handle_streaming_responses(
160
- self, agent_handle: AgentHandle
161
- ) -> None:
162
- """Should handle streaming responses."""
163
- temp_dir = tempfile.mkdtemp(prefix="codex-stream-")
164
- try:
165
- session = await agent_handle.create_session(temp_dir)
166
- updates: list[ExtendedSessionUpdate] = []
167
- text_content = ""
168
-
169
- async for update in session.prompt(
170
- "Count from 1 to 5, each number on a new line."
171
- ):
172
- updates.append(update)
173
- if update.get("sessionUpdate") == "agent_message_chunk":
174
- content = update.get("content", {})
175
- if isinstance(content, dict) and content.get("type") == "text":
176
- text_content += content.get("text", "")
177
-
178
- # Should have multiple streaming chunks
179
- message_chunks = [
180
- u for u in updates if u.get("sessionUpdate") == "agent_message_chunk"
181
- ]
182
- assert len(message_chunks) > 0
183
-
184
- # Content should include numbers
185
- assert any(str(n) in text_content for n in range(1, 6))
186
- finally:
187
- shutil.rmtree(temp_dir, ignore_errors=True)
188
-
189
-
190
- class TestCodexSessionProperties:
191
- """Tests for session properties."""
192
-
193
- @pytest.mark.asyncio
194
- async def test_should_have_modes_property(
195
- self, agent_handle: AgentHandle
196
- ) -> None:
197
- """Session should have modes property."""
198
- temp_dir = tempfile.mkdtemp(prefix="codex-modes-")
199
- try:
200
- session = await agent_handle.create_session(temp_dir)
201
- print(f"Codex session modes: {session.modes}")
202
- assert session.modes is not None
203
- finally:
204
- shutil.rmtree(temp_dir, ignore_errors=True)
205
-
206
- @pytest.mark.asyncio
207
- async def test_should_have_models_property(
208
- self, agent_handle: AgentHandle
209
- ) -> None:
210
- """Session should have models property."""
211
- temp_dir = tempfile.mkdtemp(prefix="codex-models-")
212
- try:
213
- session = await agent_handle.create_session(temp_dir)
214
- print(f"Codex session models: {session.models}")
215
- assert session.models is not None
216
- finally:
217
- shutil.rmtree(temp_dir, ignore_errors=True)
218
-
219
- @pytest.mark.asyncio
220
- async def test_should_track_is_processing_state(
221
- self, agent_handle: AgentHandle
222
- ) -> None:
223
- """Session should track isProcessing state."""
224
- temp_dir = tempfile.mkdtemp(prefix="codex-processing-")
225
- try:
226
- session = await agent_handle.create_session(temp_dir)
227
-
228
- # Initially not processing
229
- assert session.is_processing is False
230
-
231
- # Start a prompt and consume it
232
- async for _ in session.prompt("Say hello"):
233
- pass
234
-
235
- # After completion, should not be processing
236
- assert session.is_processing is False
237
- finally:
238
- shutil.rmtree(temp_dir, ignore_errors=True)
239
-
240
-
241
- class TestCodexCapabilities:
242
- """Tests for agent capabilities."""
243
-
244
- @pytest.mark.asyncio
245
- async def test_should_check_load_session_capability(
246
- self, agent_handle: AgentHandle
247
- ) -> None:
248
- """Should check loadSession capability."""
249
- load_session = agent_handle.capabilities.get("loadSession")
250
- print(f"Codex loadSession capability: {load_session}")
251
- assert isinstance(load_session, bool)
252
-
253
- @pytest.mark.asyncio
254
- async def test_should_check_fork_capability(
255
- self, agent_handle: AgentHandle
256
- ) -> None:
257
- """Should check fork capability."""
258
- session_caps = agent_handle.capabilities.get("sessionCapabilities", {})
259
- print(f"Codex fork capability: {session_caps.get('fork')}")
260
- assert agent_handle.capabilities is not None
261
-
262
- @pytest.mark.asyncio
263
- async def test_should_load_session_if_capability_is_supported(
264
- self, agent_handle: AgentHandle
265
- ) -> None:
266
- """Should load session if capability is supported."""
267
- if not agent_handle.capabilities.get("loadSession"):
268
- pytest.skip("Codex does not support loadSession")
269
-
270
- temp_dir = tempfile.mkdtemp(prefix="codex-load-")
271
- try:
272
- # Create a session first
273
- original_session = await agent_handle.create_session(temp_dir)
274
- session_id = original_session.id
275
-
276
- # Try to load/resume the session
277
- loaded_session = await agent_handle.load_session(session_id, temp_dir)
278
-
279
- assert loaded_session.id == session_id
280
- assert loaded_session.cwd == temp_dir
281
- finally:
282
- shutil.rmtree(temp_dir, ignore_errors=True)
283
-
284
- @pytest.mark.asyncio
285
- async def test_should_fork_session_if_capability_is_supported(
286
- self, agent_handle: AgentHandle
287
- ) -> None:
288
- """Should fork session if capability is supported."""
289
- session_caps = agent_handle.capabilities.get("sessionCapabilities", {})
290
- if not session_caps.get("fork"):
291
- pytest.skip("Codex does not support forking")
292
-
293
- temp_dir = tempfile.mkdtemp(prefix="codex-fork-")
294
- try:
295
- session = await agent_handle.create_session(temp_dir)
296
-
297
- # Send a prompt to establish history
298
- async for _ in session.prompt("Say 'Hello from original'."):
299
- pass
300
-
301
- # Fork the session
302
- forked_session = await session.fork()
303
-
304
- assert forked_session.id is not None
305
- assert forked_session.id != session.id
306
- assert forked_session.cwd == temp_dir
307
- finally:
308
- shutil.rmtree(temp_dir, ignore_errors=True)
309
-
310
-
311
- class TestCodexErrorHandling:
312
- """Tests for error handling."""
313
-
314
- @pytest.mark.asyncio
315
- async def test_should_handle_empty_prompts_gracefully(
316
- self, agent_handle: AgentHandle
317
- ) -> None:
318
- """Should handle empty prompts gracefully."""
319
- temp_dir = tempfile.mkdtemp(prefix="codex-empty-")
320
- try:
321
- session = await agent_handle.create_session(temp_dir)
322
-
323
- updates: list[ExtendedSessionUpdate] = []
324
- async for update in session.prompt(""):
325
- updates.append(update)
326
-
327
- # Should complete without throwing
328
- assert isinstance(updates, list)
329
- finally:
330
- shutil.rmtree(temp_dir, ignore_errors=True)
331
-
332
-
333
- class TestCodexVsClaudeCodeComparison:
334
- """Tests comparing Codex vs Claude Code."""
335
-
336
- def test_should_have_both_agents_registered(self) -> None:
337
- """Both agents should be registered."""
338
- agents = AgentFactory.list_agents()
339
-
340
- assert "claude-code" in agents
341
- assert "codex" in agents
342
-
343
- @pytest.mark.asyncio
344
- async def test_should_spawn_codex_agent_successfully(self) -> None:
345
- """Should spawn codex agent successfully."""
346
- handle = await AgentFactory.spawn("codex")
347
- assert handle is not None
348
- assert handle.capabilities is not None
349
- await handle.close()
@@ -1,165 +0,0 @@
1
- """
2
- E2E tests for Gemini CLI agent integration.
3
-
4
- Run with: RUN_E2E_TESTS=true pytest tests/e2e/test_gemini_e2e.py -v
5
- """
6
-
7
- import os
8
- import shutil
9
- import tempfile
10
-
11
- import pytest
12
-
13
- from acp_factory import AgentFactory, ExtendedSessionUpdate
14
-
15
- # Skip all tests if RUN_E2E_TESTS is not set
16
- pytestmark = pytest.mark.skipif(
17
- os.environ.get("RUN_E2E_TESTS") != "true",
18
- reason="E2E tests require RUN_E2E_TESTS=true",
19
- )
20
-
21
-
22
- class TestGeminiAgent:
23
- """E2E tests for Gemini agent."""
24
-
25
- def test_should_have_gemini_registered_in_factory(self) -> None:
26
- """Gemini should be registered in factory."""
27
- config = AgentFactory.get_config("gemini")
28
- assert config is not None
29
- assert config.command == "npx"
30
- assert "@google/gemini-cli" in config.args
31
- assert "--experimental-acp" in config.args
32
-
33
- @pytest.mark.asyncio
34
- async def test_should_spawn_and_create_session(self) -> None:
35
- """Should spawn agent and create session."""
36
- handle = await AgentFactory.spawn("gemini")
37
- try:
38
- assert handle is not None
39
- assert handle.capabilities is not None
40
- print(f"Gemini capabilities: {handle.capabilities}")
41
-
42
- temp_dir = tempfile.mkdtemp(prefix="gemini-e2e-")
43
- try:
44
- session = await handle.create_session(temp_dir)
45
- assert session is not None
46
- assert session.id is not None
47
- assert session.cwd == temp_dir
48
- print(f"Session ID: {session.id}")
49
- print(f"Modes: {session.modes}")
50
- print(f"Models: {session.models}")
51
- finally:
52
- shutil.rmtree(temp_dir, ignore_errors=True)
53
- finally:
54
- await handle.close()
55
-
56
- @pytest.mark.asyncio
57
- async def test_should_respond_to_simple_prompt(self) -> None:
58
- """Should respond to a simple prompt."""
59
- handle = await AgentFactory.spawn("gemini")
60
- try:
61
- temp_dir = tempfile.mkdtemp(prefix="gemini-prompt-")
62
- try:
63
- session = await handle.create_session(temp_dir)
64
- updates: list[ExtendedSessionUpdate] = []
65
-
66
- async for update in session.prompt(
67
- "What is 2 + 2? Reply with just the number."
68
- ):
69
- updates.append(update)
70
-
71
- # Should have received some updates
72
- assert len(updates) > 0
73
- print(f"Received {len(updates)} updates")
74
-
75
- # Check for agent message chunks (handle both dict and pydantic model)
76
- message_chunks = [
77
- u for u in updates
78
- if (hasattr(u, "session_update") and u.session_update == "agent_message_chunk")
79
- or (isinstance(u, dict) and u.get("sessionUpdate") == "agent_message_chunk")
80
- ]
81
- assert len(message_chunks) > 0
82
- print(f"Got {len(message_chunks)} message chunks")
83
- finally:
84
- shutil.rmtree(temp_dir, ignore_errors=True)
85
- finally:
86
- await handle.close()
87
-
88
- @pytest.mark.asyncio
89
- async def test_should_handle_streaming_responses(self) -> None:
90
- """Should handle streaming responses."""
91
- handle = await AgentFactory.spawn("gemini")
92
- try:
93
- temp_dir = tempfile.mkdtemp(prefix="gemini-stream-")
94
- try:
95
- session = await handle.create_session(temp_dir)
96
- updates: list[ExtendedSessionUpdate] = []
97
- text_content = ""
98
-
99
- async for update in session.prompt(
100
- "Count from 1 to 5, each number on a new line."
101
- ):
102
- updates.append(update)
103
- # Handle pydantic model
104
- if hasattr(update, "session_update"):
105
- if update.session_update == "agent_message_chunk":
106
- content = getattr(update, "content", None)
107
- if content and hasattr(content, "type") and content.type == "text":
108
- text_content += getattr(content, "text", "")
109
- # Handle dict
110
- elif isinstance(update, dict) and update.get("sessionUpdate") == "agent_message_chunk":
111
- content = update.get("content", {})
112
- if isinstance(content, dict) and content.get("type") == "text":
113
- text_content += content.get("text", "")
114
-
115
- # Should have streaming chunks
116
- message_chunks = [
117
- u for u in updates
118
- if (hasattr(u, "session_update") and u.session_update == "agent_message_chunk")
119
- or (isinstance(u, dict) and u.get("sessionUpdate") == "agent_message_chunk")
120
- ]
121
- assert len(message_chunks) > 0
122
-
123
- # Content should include numbers
124
- assert any(str(n) in text_content for n in range(1, 6))
125
- print(f"Response text: {text_content[:200]}")
126
- finally:
127
- shutil.rmtree(temp_dir, ignore_errors=True)
128
- finally:
129
- await handle.close()
130
-
131
- @pytest.mark.asyncio
132
- async def test_should_track_is_processing_state(self) -> None:
133
- """Session should track isProcessing state."""
134
- handle = await AgentFactory.spawn("gemini")
135
- try:
136
- temp_dir = tempfile.mkdtemp(prefix="gemini-processing-")
137
- try:
138
- session = await handle.create_session(temp_dir)
139
-
140
- # Initially not processing
141
- assert session.is_processing is False
142
-
143
- # Start a prompt and consume it
144
- async for _ in session.prompt("Say hello"):
145
- pass
146
-
147
- # After completion, should not be processing
148
- assert session.is_processing is False
149
- finally:
150
- shutil.rmtree(temp_dir, ignore_errors=True)
151
- finally:
152
- await handle.close()
153
-
154
-
155
- class TestAllAgentsRegistration:
156
- """Tests for agent registration."""
157
-
158
- def test_should_have_all_agents_registered(self) -> None:
159
- """All agents should be registered."""
160
- agents = AgentFactory.list_agents()
161
-
162
- assert "claude-code" in agents
163
- assert "codex" in agents
164
- assert "gemini" in agents
165
- assert "opencode" in agents