macro-agent 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/.sudocode/issues.jsonl +28 -0
  2. package/.sudocode/specs.jsonl +4 -0
  3. package/CLAUDE.md +9 -3
  4. package/dist/agent/agent-manager.d.ts.map +1 -1
  5. package/dist/agent/agent-manager.js +111 -48
  6. package/dist/agent/agent-manager.js.map +1 -1
  7. package/dist/agent/types.d.ts +7 -0
  8. package/dist/agent/types.d.ts.map +1 -1
  9. package/dist/agent/types.js.map +1 -1
  10. package/dist/api/server.d.ts +5 -1
  11. package/dist/api/server.d.ts.map +1 -1
  12. package/dist/api/server.js +100 -3
  13. package/dist/api/server.js.map +1 -1
  14. package/dist/api/types.d.ts +1 -1
  15. package/dist/api/types.d.ts.map +1 -1
  16. package/dist/cli/acp.d.ts.map +1 -1
  17. package/dist/cli/acp.js +71 -1
  18. package/dist/cli/acp.js.map +1 -1
  19. package/dist/cli/index.js +5 -1
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/cli/mcp.js +27 -8
  22. package/dist/cli/mcp.js.map +1 -1
  23. package/dist/config/project-config.d.ts +13 -2
  24. package/dist/config/project-config.d.ts.map +1 -1
  25. package/dist/config/project-config.js +12 -2
  26. package/dist/config/project-config.js.map +1 -1
  27. package/dist/index.d.ts +1 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/lifecycle/handlers/index.d.ts +7 -3
  32. package/dist/lifecycle/handlers/index.d.ts.map +1 -1
  33. package/dist/lifecycle/handlers/index.js +25 -8
  34. package/dist/lifecycle/handlers/index.js.map +1 -1
  35. package/dist/lifecycle/types.d.ts +2 -0
  36. package/dist/lifecycle/types.d.ts.map +1 -1
  37. package/dist/lifecycle/types.js.map +1 -1
  38. package/dist/map/adapter/extensions/index.d.ts +4 -1
  39. package/dist/map/adapter/extensions/index.d.ts.map +1 -1
  40. package/dist/map/adapter/extensions/index.js +27 -0
  41. package/dist/map/adapter/extensions/index.js.map +1 -1
  42. package/dist/map/adapter/extensions/streams.d.ts +95 -0
  43. package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
  44. package/dist/map/adapter/extensions/streams.js +515 -0
  45. package/dist/map/adapter/extensions/streams.js.map +1 -0
  46. package/dist/map/adapter/index.d.ts +1 -1
  47. package/dist/map/adapter/index.d.ts.map +1 -1
  48. package/dist/map/adapter/index.js +3 -1
  49. package/dist/map/adapter/index.js.map +1 -1
  50. package/dist/map/adapter/types.d.ts +1 -1
  51. package/dist/map/adapter/types.d.ts.map +1 -1
  52. package/dist/mcp/mcp-server.d.ts +2 -0
  53. package/dist/mcp/mcp-server.d.ts.map +1 -1
  54. package/dist/mcp/mcp-server.js +12 -3
  55. package/dist/mcp/mcp-server.js.map +1 -1
  56. package/dist/mcp/tools/done.d.ts.map +1 -1
  57. package/dist/mcp/tools/done.js +18 -0
  58. package/dist/mcp/tools/done.js.map +1 -1
  59. package/dist/roles/builtin/coordinator.d.ts.map +1 -1
  60. package/dist/roles/builtin/coordinator.js +2 -1
  61. package/dist/roles/builtin/coordinator.js.map +1 -1
  62. package/dist/roles/builtin/integrator.d.ts.map +1 -1
  63. package/dist/roles/builtin/integrator.js +2 -1
  64. package/dist/roles/builtin/integrator.js.map +1 -1
  65. package/dist/roles/builtin/worker.d.ts.map +1 -1
  66. package/dist/roles/builtin/worker.js +3 -1
  67. package/dist/roles/builtin/worker.js.map +1 -1
  68. package/dist/roles/capabilities.d.ts +6 -0
  69. package/dist/roles/capabilities.d.ts.map +1 -1
  70. package/dist/roles/capabilities.js +10 -0
  71. package/dist/roles/capabilities.js.map +1 -1
  72. package/dist/roles/config-loader.d.ts +1 -1
  73. package/dist/roles/config-loader.d.ts.map +1 -1
  74. package/dist/roles/config-loader.js +3 -2
  75. package/dist/roles/config-loader.js.map +1 -1
  76. package/dist/roles/types.d.ts +3 -1
  77. package/dist/roles/types.d.ts.map +1 -1
  78. package/dist/server/combined-server.d.ts +8 -1
  79. package/dist/server/combined-server.d.ts.map +1 -1
  80. package/dist/server/combined-server.js +6 -2
  81. package/dist/server/combined-server.js.map +1 -1
  82. package/dist/store/event-store.d.ts.map +1 -1
  83. package/dist/store/event-store.js +12 -5
  84. package/dist/store/event-store.js.map +1 -1
  85. package/dist/store/instance.d.ts +1 -1
  86. package/dist/store/instance.d.ts.map +1 -1
  87. package/dist/store/instance.js +2 -2
  88. package/dist/store/instance.js.map +1 -1
  89. package/dist/store/types/agents.d.ts +5 -0
  90. package/dist/store/types/agents.d.ts.map +1 -1
  91. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -1
  92. package/dist/task/backend/opentasks/daemon-manager.js +1 -1
  93. package/dist/task/backend/opentasks/daemon-manager.js.map +1 -1
  94. package/dist/teams/index.d.ts +3 -1
  95. package/dist/teams/index.d.ts.map +1 -1
  96. package/dist/teams/index.js +2 -0
  97. package/dist/teams/index.js.map +1 -1
  98. package/dist/teams/seed-defaults.d.ts +20 -0
  99. package/dist/teams/seed-defaults.d.ts.map +1 -0
  100. package/dist/teams/seed-defaults.js +71 -0
  101. package/dist/teams/seed-defaults.js.map +1 -0
  102. package/dist/teams/team-loader.d.ts +6 -2
  103. package/dist/teams/team-loader.d.ts.map +1 -1
  104. package/dist/teams/team-loader.js +154 -162
  105. package/dist/teams/team-loader.js.map +1 -1
  106. package/dist/teams/team-manager.d.ts +112 -0
  107. package/dist/teams/team-manager.d.ts.map +1 -0
  108. package/dist/teams/team-manager.js +305 -0
  109. package/dist/teams/team-manager.js.map +1 -0
  110. package/dist/teams/team-runtime.d.ts +125 -19
  111. package/dist/teams/team-runtime.d.ts.map +1 -1
  112. package/dist/teams/team-runtime.js +527 -119
  113. package/dist/teams/team-runtime.js.map +1 -1
  114. package/dist/teams/types.d.ts +41 -151
  115. package/dist/teams/types.d.ts.map +1 -1
  116. package/dist/teams/types.js +2 -3
  117. package/dist/teams/types.js.map +1 -1
  118. package/docs/teams.md +73 -0
  119. package/package.json +2 -1
  120. package/references/minimem/.claude/settings.json +7 -0
  121. package/references/minimem/.sudocode/issues.jsonl +18 -0
  122. package/references/minimem/.sudocode/specs.jsonl +1 -0
  123. package/references/minimem/CLAUDE.md +310 -0
  124. package/references/minimem/README.md +562 -0
  125. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
  126. package/references/minimem/claude-plugin/.mcp.json +7 -0
  127. package/references/minimem/claude-plugin/README.md +158 -0
  128. package/references/minimem/claude-plugin/commands/recall.md +47 -0
  129. package/references/minimem/claude-plugin/commands/remember.md +41 -0
  130. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
  131. package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
  132. package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
  133. package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
  134. package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
  135. package/references/minimem/media/banner.png +0 -0
  136. package/references/minimem/package-lock.json +5373 -0
  137. package/references/minimem/package.json +72 -0
  138. package/references/minimem/scripts/postbuild.js +35 -0
  139. package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
  140. package/references/minimem/src/__tests__/errors.test.ts +265 -0
  141. package/references/minimem/src/__tests__/helpers.ts +199 -0
  142. package/references/minimem/src/__tests__/internal.test.ts +407 -0
  143. package/references/minimem/src/__tests__/knowledge.test.ts +287 -0
  144. package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
  145. package/references/minimem/src/__tests__/session.test.ts +190 -0
  146. package/references/minimem/src/cli/__tests__/commands.test.ts +759 -0
  147. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
  148. package/references/minimem/src/cli/commands/append.ts +76 -0
  149. package/references/minimem/src/cli/commands/config.ts +262 -0
  150. package/references/minimem/src/cli/commands/conflicts.ts +413 -0
  151. package/references/minimem/src/cli/commands/daemon.ts +169 -0
  152. package/references/minimem/src/cli/commands/index.ts +12 -0
  153. package/references/minimem/src/cli/commands/init.ts +88 -0
  154. package/references/minimem/src/cli/commands/mcp.ts +177 -0
  155. package/references/minimem/src/cli/commands/push-pull.ts +213 -0
  156. package/references/minimem/src/cli/commands/search.ts +158 -0
  157. package/references/minimem/src/cli/commands/status.ts +84 -0
  158. package/references/minimem/src/cli/commands/sync-init.ts +290 -0
  159. package/references/minimem/src/cli/commands/sync.ts +70 -0
  160. package/references/minimem/src/cli/commands/upsert.ts +197 -0
  161. package/references/minimem/src/cli/config.ts +584 -0
  162. package/references/minimem/src/cli/index.ts +264 -0
  163. package/references/minimem/src/cli/shared.ts +161 -0
  164. package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
  165. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
  166. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
  167. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
  168. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
  169. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
  170. package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
  171. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
  172. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
  173. package/references/minimem/src/cli/sync/central.ts +292 -0
  174. package/references/minimem/src/cli/sync/conflicts.ts +204 -0
  175. package/references/minimem/src/cli/sync/daemon.ts +407 -0
  176. package/references/minimem/src/cli/sync/detection.ts +138 -0
  177. package/references/minimem/src/cli/sync/index.ts +107 -0
  178. package/references/minimem/src/cli/sync/operations.ts +373 -0
  179. package/references/minimem/src/cli/sync/registry.ts +279 -0
  180. package/references/minimem/src/cli/sync/state.ts +355 -0
  181. package/references/minimem/src/cli/sync/validation.ts +206 -0
  182. package/references/minimem/src/cli/sync/watcher.ts +234 -0
  183. package/references/minimem/src/cli/version.ts +34 -0
  184. package/references/minimem/src/core/index.ts +9 -0
  185. package/references/minimem/src/core/indexer.ts +628 -0
  186. package/references/minimem/src/core/searcher.ts +221 -0
  187. package/references/minimem/src/db/schema.ts +183 -0
  188. package/references/minimem/src/db/sqlite-vec.ts +24 -0
  189. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
  190. package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
  191. package/references/minimem/src/embeddings/batch-openai.ts +409 -0
  192. package/references/minimem/src/embeddings/embeddings.ts +434 -0
  193. package/references/minimem/src/index.ts +109 -0
  194. package/references/minimem/src/internal.ts +299 -0
  195. package/references/minimem/src/minimem.ts +1276 -0
  196. package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
  197. package/references/minimem/src/search/graph.ts +234 -0
  198. package/references/minimem/src/search/hybrid.ts +151 -0
  199. package/references/minimem/src/search/search.ts +256 -0
  200. package/references/minimem/src/server/__tests__/mcp.test.ts +341 -0
  201. package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
  202. package/references/minimem/src/server/mcp.ts +326 -0
  203. package/references/minimem/src/server/tools.ts +720 -0
  204. package/references/minimem/src/session.ts +460 -0
  205. package/references/minimem/tsconfig.json +19 -0
  206. package/references/minimem/tsup.config.ts +26 -0
  207. package/references/minimem/vitest.config.ts +24 -0
  208. package/references/openteams/.claude/settings.json +6 -0
  209. package/references/openteams/README.md +1 -0
  210. package/references/openteams/SKILL.md +341 -0
  211. package/references/openteams/design.md +411 -0
  212. package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +16 -0
  213. package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +5 -0
  214. package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +24 -0
  215. package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +5 -0
  216. package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +25 -0
  217. package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +5 -0
  218. package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +21 -0
  219. package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +5 -0
  220. package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +20 -0
  221. package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +5 -0
  222. package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +17 -0
  223. package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +5 -0
  224. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +23 -0
  225. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +5 -0
  226. package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +27 -0
  227. package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +5 -0
  228. package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +21 -0
  229. package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +5 -0
  230. package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +16 -0
  231. package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +5 -0
  232. package/references/openteams/examples/bmad-method/roles/analyst.yaml +9 -0
  233. package/references/openteams/examples/bmad-method/roles/architect.yaml +9 -0
  234. package/references/openteams/examples/bmad-method/roles/developer.yaml +8 -0
  235. package/references/openteams/examples/bmad-method/roles/master.yaml +8 -0
  236. package/references/openteams/examples/bmad-method/roles/pm.yaml +9 -0
  237. package/references/openteams/examples/bmad-method/roles/qa.yaml +8 -0
  238. package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +8 -0
  239. package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +9 -0
  240. package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +8 -0
  241. package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +8 -0
  242. package/references/openteams/examples/bmad-method/team.yaml +161 -0
  243. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/ROLE.md +17 -0
  244. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/SOUL.md +5 -0
  245. package/references/openteams/examples/get-shit-done/prompts/debugger/ROLE.md +25 -0
  246. package/references/openteams/examples/get-shit-done/prompts/debugger/SOUL.md +5 -0
  247. package/references/openteams/examples/get-shit-done/prompts/executor/ROLE.md +34 -0
  248. package/references/openteams/examples/get-shit-done/prompts/executor/SOUL.md +5 -0
  249. package/references/openteams/examples/get-shit-done/prompts/integration-checker/ROLE.md +18 -0
  250. package/references/openteams/examples/get-shit-done/prompts/integration-checker/SOUL.md +3 -0
  251. package/references/openteams/examples/get-shit-done/prompts/orchestrator/ROLE.md +42 -0
  252. package/references/openteams/examples/get-shit-done/prompts/orchestrator/SOUL.md +5 -0
  253. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/ROLE.md +15 -0
  254. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/SOUL.md +3 -0
  255. package/references/openteams/examples/get-shit-done/prompts/plan-checker/ROLE.md +17 -0
  256. package/references/openteams/examples/get-shit-done/prompts/plan-checker/SOUL.md +3 -0
  257. package/references/openteams/examples/get-shit-done/prompts/planner/ROLE.md +28 -0
  258. package/references/openteams/examples/get-shit-done/prompts/planner/SOUL.md +5 -0
  259. package/references/openteams/examples/get-shit-done/prompts/project-researcher/ROLE.md +16 -0
  260. package/references/openteams/examples/get-shit-done/prompts/project-researcher/SOUL.md +3 -0
  261. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/ROLE.md +13 -0
  262. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/SOUL.md +3 -0
  263. package/references/openteams/examples/get-shit-done/prompts/roadmapper/ROLE.md +14 -0
  264. package/references/openteams/examples/get-shit-done/prompts/roadmapper/SOUL.md +3 -0
  265. package/references/openteams/examples/get-shit-done/prompts/verifier/ROLE.md +19 -0
  266. package/references/openteams/examples/get-shit-done/prompts/verifier/SOUL.md +5 -0
  267. package/references/openteams/examples/get-shit-done/roles/codebase-mapper.yaml +8 -0
  268. package/references/openteams/examples/get-shit-done/roles/debugger.yaml +8 -0
  269. package/references/openteams/examples/get-shit-done/roles/executor.yaml +8 -0
  270. package/references/openteams/examples/get-shit-done/roles/integration-checker.yaml +8 -0
  271. package/references/openteams/examples/get-shit-done/roles/orchestrator.yaml +9 -0
  272. package/references/openteams/examples/get-shit-done/roles/phase-researcher.yaml +7 -0
  273. package/references/openteams/examples/get-shit-done/roles/plan-checker.yaml +8 -0
  274. package/references/openteams/examples/get-shit-done/roles/planner.yaml +8 -0
  275. package/references/openteams/examples/get-shit-done/roles/project-researcher.yaml +8 -0
  276. package/references/openteams/examples/get-shit-done/roles/research-synthesizer.yaml +7 -0
  277. package/references/openteams/examples/get-shit-done/roles/roadmapper.yaml +7 -0
  278. package/references/openteams/examples/get-shit-done/roles/verifier.yaml +8 -0
  279. package/references/openteams/examples/get-shit-done/team.yaml +154 -0
  280. package/references/openteams/package-lock.json +2181 -0
  281. package/references/openteams/package.json +48 -0
  282. package/references/openteams/schema/role.schema.json +125 -0
  283. package/references/openteams/schema/team.schema.json +284 -0
  284. package/references/openteams/src/cli/agent.ts +104 -0
  285. package/references/openteams/src/cli/cli.test.ts +381 -0
  286. package/references/openteams/src/cli/generate.ts +220 -0
  287. package/references/openteams/src/cli/message.ts +241 -0
  288. package/references/openteams/src/cli/task.ts +154 -0
  289. package/references/openteams/src/cli/team.ts +104 -0
  290. package/references/openteams/src/cli/template.ts +207 -0
  291. package/references/openteams/src/cli.ts +45 -0
  292. package/references/openteams/src/db/database.test.ts +185 -0
  293. package/references/openteams/src/db/database.ts +240 -0
  294. package/references/openteams/src/generators/agent-prompt-generator.test.ts +332 -0
  295. package/references/openteams/src/generators/agent-prompt-generator.ts +521 -0
  296. package/references/openteams/src/generators/package-generator.test.ts +129 -0
  297. package/references/openteams/src/generators/package-generator.ts +102 -0
  298. package/references/openteams/src/generators/skill-generator.test.ts +246 -0
  299. package/references/openteams/src/generators/skill-generator.ts +374 -0
  300. package/references/openteams/src/index.ts +104 -0
  301. package/references/openteams/src/services/agent-service.test.ts +158 -0
  302. package/references/openteams/src/services/agent-service.ts +84 -0
  303. package/references/openteams/src/services/communication-service.test.ts +455 -0
  304. package/references/openteams/src/services/communication-service.ts +371 -0
  305. package/references/openteams/src/services/message-service.test.ts +342 -0
  306. package/references/openteams/src/services/message-service.ts +203 -0
  307. package/references/openteams/src/services/task-service.test.ts +434 -0
  308. package/references/openteams/src/services/task-service.ts +239 -0
  309. package/references/openteams/src/services/team-service.test.ts +181 -0
  310. package/references/openteams/src/services/team-service.ts +139 -0
  311. package/references/openteams/src/services/template-service.test.ts +306 -0
  312. package/references/openteams/src/services/template-service.ts +182 -0
  313. package/references/openteams/src/spawner/acp-factory.ts +96 -0
  314. package/references/openteams/src/spawner/interface.ts +31 -0
  315. package/references/openteams/src/spawner/mock.test.ts +93 -0
  316. package/references/openteams/src/spawner/mock.ts +59 -0
  317. package/references/openteams/src/template/loader.test.ts +1319 -0
  318. package/references/openteams/src/template/loader.ts +698 -0
  319. package/references/openteams/src/template/types.ts +200 -0
  320. package/references/openteams/src/types.ts +205 -0
  321. package/references/openteams/tsconfig.json +18 -0
  322. package/references/openteams/vitest.config.ts +9 -0
  323. package/references/skill-tree/.claude/settings.json +6 -0
  324. package/references/skill-tree/.sudocode/issues.jsonl +11 -0
  325. package/references/skill-tree/.sudocode/specs.jsonl +1 -0
  326. package/references/skill-tree/CLAUDE.md +150 -0
  327. package/references/skill-tree/README.md +324 -0
  328. package/references/skill-tree/docs/GAPS_v1.md +221 -0
  329. package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
  330. package/references/skill-tree/docs/TODOS.md +91 -0
  331. package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
  332. package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
  333. package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
  334. package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
  335. package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
  336. package/references/skill-tree/docs/scraper/README.md +170 -0
  337. package/references/skill-tree/examples/basic-usage.ts +190 -0
  338. package/references/skill-tree/package-lock.json +1509 -0
  339. package/references/skill-tree/package.json +66 -0
  340. package/references/skill-tree/scraper/README.md +123 -0
  341. package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
  342. package/references/skill-tree/scraper/docs/PLAN.md +336 -0
  343. package/references/skill-tree/scraper/drizzle.config.ts +10 -0
  344. package/references/skill-tree/scraper/package-lock.json +6329 -0
  345. package/references/skill-tree/scraper/package.json +68 -0
  346. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
  347. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
  348. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
  349. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
  350. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
  351. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
  352. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
  353. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
  354. package/references/skill-tree/scraper/tsup.config.ts +14 -0
  355. package/references/skill-tree/scraper/vitest.config.ts +17 -0
  356. package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
  357. package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
  358. package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
  359. package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
  360. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
  361. package/references/skill-tree/test/run-all.ts +106 -0
  362. package/references/skill-tree/test/utils.ts +128 -0
  363. package/references/skill-tree/vitest.config.ts +16 -0
  364. package/src/agent/agent-manager.ts +143 -72
  365. package/src/agent/types.ts +9 -0
  366. package/src/api/__tests__/server.test.ts +203 -4
  367. package/src/api/server.ts +130 -5
  368. package/src/api/types.ts +3 -1
  369. package/src/cli/acp.ts +68 -1
  370. package/src/cli/index.ts +5 -1
  371. package/src/cli/mcp.ts +27 -13
  372. package/src/config/project-config.ts +27 -3
  373. package/src/index.ts +3 -0
  374. package/src/lifecycle/__tests__/handlers.test.ts +53 -0
  375. package/src/lifecycle/handlers/index.ts +25 -8
  376. package/src/lifecycle/types.ts +3 -0
  377. package/src/map/adapter/__tests__/stream-extensions.test.ts +494 -0
  378. package/src/map/adapter/extensions/index.ts +36 -0
  379. package/src/map/adapter/extensions/streams.ts +839 -0
  380. package/src/map/adapter/index.ts +5 -0
  381. package/src/map/adapter/types.ts +8 -1
  382. package/src/mcp/mcp-server.ts +14 -3
  383. package/src/mcp/tools/done.ts +19 -0
  384. package/src/roles/builtin/coordinator.ts +2 -0
  385. package/src/roles/builtin/integrator.ts +2 -0
  386. package/src/roles/builtin/worker.ts +3 -0
  387. package/src/roles/capabilities.ts +11 -0
  388. package/src/roles/config-loader.ts +3 -2
  389. package/src/roles/types.ts +7 -0
  390. package/src/server/combined-server.ts +15 -1
  391. package/src/store/__tests__/event-store-oob.test.ts +109 -0
  392. package/src/store/event-store.ts +13 -3
  393. package/src/store/instance.ts +2 -2
  394. package/src/store/types/agents.ts +5 -0
  395. package/src/task/backend/__tests__/memory-pull-mode.test.ts +153 -0
  396. package/src/task/backend/opentasks/daemon-manager.ts +4 -1
  397. package/src/teams/CLAUDE.md +180 -0
  398. package/src/teams/__tests__/e2e/workspace-isolation.e2e.test.ts +1263 -0
  399. package/src/teams/__tests__/team-manager.test.ts +814 -0
  400. package/src/teams/__tests__/team-system.test.ts +1291 -8
  401. package/src/teams/index.ts +21 -3
  402. package/src/teams/seed-defaults.ts +79 -0
  403. package/src/teams/team-loader.ts +200 -234
  404. package/src/teams/team-manager.ts +387 -0
  405. package/src/teams/team-runtime.ts +590 -121
  406. package/src/teams/types.ts +99 -200
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "openteams",
3
+ "version": "0.1.1",
4
+ "description": "OpenTeams - Multi-agent team coordination CLI",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "openteams": "dist/cli.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "test": "vitest run",
14
+ "test:watch": "vitest",
15
+ "version:patch": "npm version patch && git push && git push --tags",
16
+ "version:minor": "npm version minor && git push && git push --tags",
17
+ "version:major": "npm version major && git push && git push --tags",
18
+ "publish:npm": "npm run build && npm publish"
19
+ },
20
+ "keywords": [
21
+ "agents",
22
+ "teams",
23
+ "multi-agent",
24
+ "coordination",
25
+ "acp",
26
+ "cli"
27
+ ],
28
+ "author": "",
29
+ "license": "MIT",
30
+ "dependencies": {
31
+ "better-sqlite3": "^11.0.0",
32
+ "commander": "^13.0.0",
33
+ "js-yaml": "^4.1.1"
34
+ },
35
+ "devDependencies": {
36
+ "@types/better-sqlite3": "^7.6.12",
37
+ "@types/js-yaml": "^4.0.9",
38
+ "@types/node": "^25.2.1",
39
+ "typescript": "^5.7.0",
40
+ "vitest": "^3.0.0"
41
+ },
42
+ "optionalDependencies": {
43
+ "acp-factory": "^0.1.9"
44
+ },
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ }
48
+ }
@@ -0,0 +1,125 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://openteams.dev/schema/role.schema.json",
4
+ "title": "OpenTeams Role Definition",
5
+ "description": "Schema for roles/<name>.yaml — an optional per-role definition file that provides capabilities, display metadata, and extension fields.",
6
+ "type": "object",
7
+ "required": ["name"],
8
+ "properties": {
9
+ "name": {
10
+ "type": "string",
11
+ "description": "Role name. Must match the filename (roles/<name>.yaml) and appear in the team manifest's roles list.",
12
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]*$",
13
+ "examples": ["planner", "grinder", "judge"]
14
+ },
15
+ "extends": {
16
+ "type": "string",
17
+ "description": "Parent role to inherit capabilities from. When used with capability composition (add/remove), the base capabilities come from the parent role.",
18
+ "examples": ["worker"]
19
+ },
20
+ "display_name": {
21
+ "type": "string",
22
+ "description": "Human-readable display name. Defaults to the role name if omitted.",
23
+ "examples": ["Code Writer", "Quality Judge"]
24
+ },
25
+ "description": {
26
+ "type": "string",
27
+ "description": "Human-readable description of the role's purpose. Defaults to 'Role: <name>' if omitted.",
28
+ "examples": ["Writes and tests code", "Evaluates code quality and correctness"]
29
+ },
30
+ "capabilities": {
31
+ "oneOf": [
32
+ {
33
+ "type": "array",
34
+ "description": "A flat list of capability strings. Replaces any inherited capabilities entirely.",
35
+ "items": {
36
+ "type": "string",
37
+ "description": "A dot-namespaced capability identifier.",
38
+ "pattern": "^[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9_]*)*$"
39
+ },
40
+ "uniqueItems": true,
41
+ "examples": [["file.write", "exec.test", "exec.lint"]]
42
+ },
43
+ {
44
+ "$ref": "#/$defs/CapabilityComposition"
45
+ }
46
+ ],
47
+ "description": "Capabilities for this role. Either a flat list (full replacement) or a composition object with add/remove operations on the parent role's capabilities."
48
+ },
49
+ "capabilities_add": {
50
+ "type": "array",
51
+ "description": "Capabilities to add to the parent role's set. Alternative flat syntax for CapabilityComposition. Only valid when 'extends' is set. Mutually exclusive with CapabilityComposition inside 'capabilities'.",
52
+ "items": {
53
+ "type": "string",
54
+ "pattern": "^[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9_]*)*$"
55
+ },
56
+ "uniqueItems": true,
57
+ "examples": [["task.claim", "exec.test"]]
58
+ },
59
+ "capabilities_remove": {
60
+ "type": "array",
61
+ "description": "Capabilities to remove from the parent role's set. Alternative flat syntax for CapabilityComposition. Only valid when 'extends' is set. Mutually exclusive with CapabilityComposition inside 'capabilities'.",
62
+ "items": {
63
+ "type": "string",
64
+ "pattern": "^[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9_]*)*$"
65
+ },
66
+ "uniqueItems": true,
67
+ "examples": [["agent.spawn.integrator"]]
68
+ },
69
+ "prompt": {
70
+ "type": "string",
71
+ "description": "Path to a prompt file, relative to the template directory. Lower priority than topology node prompts.",
72
+ "examples": ["prompts/planner.md"]
73
+ },
74
+ "prompts": {
75
+ "type": "array",
76
+ "description": "Ordered list of prompt files relative to prompts/<role>/. The first file becomes the primary prompt; the rest are additional sections.",
77
+ "items": {
78
+ "type": "string"
79
+ },
80
+ "examples": [["SOUL.md", "ROLE.md", "RULES.md"]]
81
+ },
82
+ "macro_agent": {
83
+ "type": "object",
84
+ "description": "Extension fields for the macro-agent system. Stored but not interpreted by openteams.",
85
+ "additionalProperties": true,
86
+ "examples": [
87
+ {
88
+ "workspace": { "type": "own" }
89
+ }
90
+ ]
91
+ }
92
+ },
93
+ "additionalProperties": {
94
+ "description": "Extension fields for other systems. Stored but not interpreted by openteams."
95
+ },
96
+ "$defs": {
97
+ "CapabilityComposition": {
98
+ "type": "object",
99
+ "description": "Compose capabilities relative to a parent role (requires 'extends'). Add capabilities not in the parent, and/or remove capabilities the parent has.",
100
+ "properties": {
101
+ "add": {
102
+ "type": "array",
103
+ "description": "Capabilities to add on top of the parent role's capabilities.",
104
+ "items": {
105
+ "type": "string",
106
+ "pattern": "^[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9_]*)*$"
107
+ },
108
+ "uniqueItems": true,
109
+ "examples": [["file.write", "exec.test"]]
110
+ },
111
+ "remove": {
112
+ "type": "array",
113
+ "description": "Capabilities to remove from the parent role's capabilities.",
114
+ "items": {
115
+ "type": "string",
116
+ "pattern": "^[a-z][a-z0-9]*(?:\\.[a-z][a-z0-9_]*)*$"
117
+ },
118
+ "uniqueItems": true,
119
+ "examples": [["agent.spawn.worker"]]
120
+ }
121
+ },
122
+ "additionalProperties": false
123
+ }
124
+ }
125
+ }
@@ -0,0 +1,284 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://openteams.dev/schema/team.schema.json",
4
+ "title": "OpenTeams Team Manifest",
5
+ "description": "Schema for team.yaml — the declarative manifest that defines a multi-agent team's topology, communication patterns, and roles. Optional directories: roles/ (per-role YAML definitions), prompts/ (prompt files or directories), tools/ (mcp-servers.json for per-role MCP server configs).",
6
+ "type": "object",
7
+ "required": ["name", "version", "roles", "topology"],
8
+ "properties": {
9
+ "name": {
10
+ "type": "string",
11
+ "description": "Unique team name. Used as the primary identifier across all CLI commands.",
12
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]*$",
13
+ "examples": ["self-driving", "my-project"]
14
+ },
15
+ "description": {
16
+ "type": "string",
17
+ "description": "Human-readable description of the team's purpose.",
18
+ "examples": ["Autonomous codebase development"]
19
+ },
20
+ "version": {
21
+ "type": "integer",
22
+ "description": "Schema version. Currently must be 1.",
23
+ "const": 1
24
+ },
25
+ "roles": {
26
+ "type": "array",
27
+ "description": "Exhaustive list of role names used in this team. All topology, communication, and spawn_rules references must point to roles declared here.",
28
+ "items": {
29
+ "type": "string",
30
+ "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_-]*$"
31
+ },
32
+ "minItems": 1,
33
+ "uniqueItems": true,
34
+ "examples": [["planner", "grinder", "judge"]]
35
+ },
36
+ "topology": {
37
+ "$ref": "#/$defs/TopologyConfig"
38
+ },
39
+ "communication": {
40
+ "$ref": "#/$defs/CommunicationConfig"
41
+ },
42
+ "macro_agent": {
43
+ "type": "object",
44
+ "description": "Extension namespace for the macro-agent orchestration system. Known fields: task_assignment (push/pull mode), integration (strategy config), lifecycle (continuations, scaling), observability (metrics). Stored but not interpreted by openteams.",
45
+ "additionalProperties": true
46
+ }
47
+ },
48
+ "additionalProperties": {
49
+ "description": "Extension fields for other systems. Stored but not interpreted by openteams."
50
+ },
51
+ "$defs": {
52
+ "TopologyConfig": {
53
+ "type": "object",
54
+ "description": "Defines the team's agent hierarchy — root node, companion nodes, and spawn permissions.",
55
+ "required": ["root"],
56
+ "properties": {
57
+ "root": {
58
+ "$ref": "#/$defs/TopologyNode",
59
+ "description": "The root (lead) agent of the team. This is the primary orchestrator."
60
+ },
61
+ "companions": {
62
+ "type": "array",
63
+ "description": "Companion agents that are peers to the root, not children. Spawned alongside the root at team creation.",
64
+ "items": {
65
+ "$ref": "#/$defs/TopologyNode"
66
+ }
67
+ },
68
+ "spawn_rules": {
69
+ "type": "object",
70
+ "description": "Maps each role to the list of roles it is allowed to spawn. Omitting a role or the entire spawn_rules section makes spawning permissive (any role can spawn any role).",
71
+ "additionalProperties": {
72
+ "type": "array",
73
+ "items": {
74
+ "type": "string",
75
+ "description": "A role name from the top-level roles list."
76
+ }
77
+ },
78
+ "examples": [
79
+ {
80
+ "planner": ["grinder", "planner"],
81
+ "judge": [],
82
+ "grinder": []
83
+ }
84
+ ]
85
+ }
86
+ },
87
+ "additionalProperties": false
88
+ },
89
+ "TopologyNode": {
90
+ "type": "object",
91
+ "description": "A node in the team topology, representing a role assignment with optional prompt and configuration.",
92
+ "required": ["role"],
93
+ "properties": {
94
+ "role": {
95
+ "type": "string",
96
+ "description": "Must reference a role from the top-level roles list."
97
+ },
98
+ "prompt": {
99
+ "type": "string",
100
+ "description": "Path to a prompt file, relative to the template directory. Priority: this field > role definition prompt > prompts/<role>.md convention.",
101
+ "examples": ["prompts/planner.md"]
102
+ },
103
+ "config": {
104
+ "$ref": "#/$defs/TopologyNodeConfig"
105
+ }
106
+ },
107
+ "additionalProperties": false
108
+ },
109
+ "TopologyNodeConfig": {
110
+ "type": "object",
111
+ "description": "Configuration for a topology node. The model field is interpreted by openteams; other fields are passed through.",
112
+ "properties": {
113
+ "model": {
114
+ "type": "string",
115
+ "description": "Model to use for this agent.",
116
+ "enum": ["sonnet", "opus", "haiku"],
117
+ "examples": ["sonnet"]
118
+ }
119
+ },
120
+ "additionalProperties": {
121
+ "description": "Additional configuration passed through to the agent spawner."
122
+ }
123
+ },
124
+ "CommunicationConfig": {
125
+ "type": "object",
126
+ "description": "Defines the team's communication topology — channels, subscriptions, emission permissions, and routing rules.",
127
+ "properties": {
128
+ "enforcement": {
129
+ "type": "string",
130
+ "description": "How strictly communication rules are enforced. 'strict' rejects unauthorized emissions, 'permissive' allows all (default), 'audit' logs violations without blocking.",
131
+ "enum": ["strict", "permissive", "audit"],
132
+ "default": "permissive"
133
+ },
134
+ "channels": {
135
+ "type": "object",
136
+ "description": "Named communication channels. Each channel carries a defined set of signals.",
137
+ "additionalProperties": {
138
+ "$ref": "#/$defs/ChannelDefinition"
139
+ },
140
+ "examples": [
141
+ {
142
+ "task_updates": {
143
+ "description": "Task lifecycle events",
144
+ "signals": ["TASK_CREATED", "TASK_COMPLETED", "TASK_FAILED"]
145
+ }
146
+ }
147
+ ]
148
+ },
149
+ "subscriptions": {
150
+ "type": "object",
151
+ "description": "Maps each role to its channel subscriptions. A subscription without a signals filter receives all signals on that channel.",
152
+ "additionalProperties": {
153
+ "type": "array",
154
+ "items": {
155
+ "$ref": "#/$defs/SubscriptionEntry"
156
+ }
157
+ },
158
+ "examples": [
159
+ {
160
+ "planner": [
161
+ { "channel": "task_updates" },
162
+ { "channel": "work_coordination", "signals": ["WORKER_DONE"] }
163
+ ]
164
+ }
165
+ ]
166
+ },
167
+ "emissions": {
168
+ "type": "object",
169
+ "description": "Maps each role to the signals it is permitted to emit. If omitted entirely, all roles can emit any signal (permissive mode). If present, only declared emissions are allowed.",
170
+ "additionalProperties": {
171
+ "type": "array",
172
+ "items": {
173
+ "type": "string",
174
+ "description": "A signal name."
175
+ }
176
+ },
177
+ "examples": [
178
+ {
179
+ "planner": ["TASK_CREATED", "WORK_ASSIGNED"],
180
+ "grinder": ["WORKER_DONE"]
181
+ }
182
+ ]
183
+ },
184
+ "routing": {
185
+ "$ref": "#/$defs/RoutingConfig"
186
+ }
187
+ },
188
+ "additionalProperties": false
189
+ },
190
+ "ChannelDefinition": {
191
+ "type": "object",
192
+ "description": "A named communication channel that carries a set of typed signals.",
193
+ "required": ["signals"],
194
+ "properties": {
195
+ "description": {
196
+ "type": "string",
197
+ "description": "Human-readable description of the channel's purpose."
198
+ },
199
+ "signals": {
200
+ "type": "array",
201
+ "description": "The set of signal names that can be emitted on this channel.",
202
+ "items": {
203
+ "type": "string",
204
+ "pattern": "^[A-Z][A-Z0-9_]*$"
205
+ },
206
+ "minItems": 1,
207
+ "uniqueItems": true,
208
+ "examples": [["TASK_CREATED", "TASK_COMPLETED", "TASK_FAILED"]]
209
+ }
210
+ },
211
+ "additionalProperties": false
212
+ },
213
+ "SubscriptionEntry": {
214
+ "type": "object",
215
+ "description": "A role's subscription to a channel. If signals is omitted, the role receives all signals on the channel.",
216
+ "required": ["channel"],
217
+ "properties": {
218
+ "channel": {
219
+ "type": "string",
220
+ "description": "The channel name to subscribe to. Must reference a channel defined in communication.channels."
221
+ },
222
+ "signals": {
223
+ "type": "array",
224
+ "description": "Optional signal filter. If provided, only these signals are delivered. If omitted, all channel signals are delivered.",
225
+ "items": {
226
+ "type": "string"
227
+ },
228
+ "minItems": 1,
229
+ "uniqueItems": true
230
+ }
231
+ },
232
+ "additionalProperties": false
233
+ },
234
+ "RoutingConfig": {
235
+ "type": "object",
236
+ "description": "Routing rules for status propagation and direct peer-to-peer messaging.",
237
+ "properties": {
238
+ "status": {
239
+ "type": "string",
240
+ "description": "How status updates propagate through the hierarchy. 'upstream' sends to parent, 'none' disables.",
241
+ "enum": ["upstream", "none"],
242
+ "default": "upstream"
243
+ },
244
+ "peers": {
245
+ "type": "array",
246
+ "description": "Direct role-to-role messaging routes, outside of the channel/subscription system.",
247
+ "items": {
248
+ "$ref": "#/$defs/PeerRoute"
249
+ }
250
+ }
251
+ },
252
+ "additionalProperties": false
253
+ },
254
+ "PeerRoute": {
255
+ "type": "object",
256
+ "description": "A direct messaging route between two roles.",
257
+ "required": ["from", "to", "via"],
258
+ "properties": {
259
+ "from": {
260
+ "type": "string",
261
+ "description": "Source role. Must be in the top-level roles list."
262
+ },
263
+ "to": {
264
+ "type": "string",
265
+ "description": "Target role. Must be in the top-level roles list."
266
+ },
267
+ "via": {
268
+ "type": "string",
269
+ "description": "Transport mechanism. 'direct' for point-to-point, 'topic' for topic-based, 'scope' for scoped.",
270
+ "enum": ["direct", "topic", "scope"]
271
+ },
272
+ "signals": {
273
+ "type": "array",
274
+ "description": "Optional: signals this route carries. If omitted, route carries all messages.",
275
+ "items": {
276
+ "type": "string"
277
+ },
278
+ "uniqueItems": true
279
+ }
280
+ },
281
+ "additionalProperties": false
282
+ }
283
+ }
284
+ }
@@ -0,0 +1,104 @@
1
+ import { Command } from "commander";
2
+ import { AgentService } from "../services/agent-service";
3
+ import type Database from "better-sqlite3";
4
+ import type { AgentSpawner } from "../types";
5
+
6
+ export function createAgentCommands(
7
+ db: Database.Database,
8
+ spawner: AgentSpawner
9
+ ): Command {
10
+ const agentService = new AgentService(db, spawner);
11
+ const agent = new Command("agent").description("Manage agents");
12
+
13
+ agent
14
+ .command("spawn <team>")
15
+ .description("Spawn a new agent in a team")
16
+ .requiredOption("-n, --name <name>", "Agent name")
17
+ .requiredOption("-p, --prompt <prompt>", "Prompt/instructions for the agent")
18
+ .option("-t, --type <type>", "Agent type (bash, general-purpose, explore, plan)", "general-purpose")
19
+ .option("-m, --model <model>", "Model to use (sonnet, opus, haiku)")
20
+ .option("--cwd <dir>", "Working directory for the agent")
21
+ .action(async (team: string, opts) => {
22
+ try {
23
+ const member = await agentService.spawn({
24
+ name: opts.name,
25
+ teamName: team,
26
+ prompt: opts.prompt,
27
+ agentType: opts.type,
28
+ model: opts.model,
29
+ cwd: opts.cwd,
30
+ });
31
+ console.log(
32
+ `Agent "${member.agent_name}" spawned in team "${team}" (id: ${member.agent_id}).`
33
+ );
34
+ } catch (err: any) {
35
+ console.error(`Error: ${err.message}`);
36
+ process.exitCode = 1;
37
+ }
38
+ });
39
+
40
+ agent
41
+ .command("list <team>")
42
+ .description("List agents in a team")
43
+ .option("--json", "Output as JSON")
44
+ .action((team: string, opts) => {
45
+ const members = agentService.listMembers(team);
46
+
47
+ if (opts.json) {
48
+ console.log(JSON.stringify(members));
49
+ return;
50
+ }
51
+
52
+ if (members.length === 0) {
53
+ console.log("No agents in this team.");
54
+ return;
55
+ }
56
+ for (const m of members) {
57
+ console.log(
58
+ ` ${m.agent_name} [${m.status}] type=${m.agent_type}${m.model ? ` model=${m.model}` : ""}`
59
+ );
60
+ }
61
+ });
62
+
63
+ agent
64
+ .command("info <team> <name>")
65
+ .description("Show agent details")
66
+ .option("--json", "Output as JSON")
67
+ .action((team: string, name: string, opts) => {
68
+ const member = agentService.getMember(team, name);
69
+ if (!member) {
70
+ console.error(`Error: Agent "${name}" not found in team "${team}".`);
71
+ process.exitCode = 1;
72
+ return;
73
+ }
74
+
75
+ if (opts.json) {
76
+ console.log(JSON.stringify(member));
77
+ return;
78
+ }
79
+
80
+ console.log(`Agent: ${member.agent_name}`);
81
+ console.log(`Team: ${member.team_name}`);
82
+ console.log(`Status: ${member.status}`);
83
+ console.log(`Type: ${member.agent_type}`);
84
+ if (member.model) console.log(`Model: ${member.model}`);
85
+ if (member.agent_id) console.log(`Agent ID: ${member.agent_id}`);
86
+ if (member.spawn_prompt) console.log(`Prompt: ${member.spawn_prompt}`);
87
+ console.log(`Created: ${member.created_at}`);
88
+ });
89
+
90
+ agent
91
+ .command("shutdown <team> <name>")
92
+ .description("Shut down an agent")
93
+ .action(async (team: string, name: string) => {
94
+ try {
95
+ await agentService.shutdown(team, name);
96
+ console.log(`Agent "${name}" shut down.`);
97
+ } catch (err: any) {
98
+ console.error(`Error: ${err.message}`);
99
+ process.exitCode = 1;
100
+ }
101
+ });
102
+
103
+ return agent;
104
+ }