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,387 @@
1
+ /**
2
+ * Team Manager
3
+ *
4
+ * Central owner of team instance lifecycle. Holds active team instances,
5
+ * manages composite dispatch of spawn interceptors, signal filters, and
6
+ * emission validators to the correct TeamRuntime.
7
+ *
8
+ * Supports multiple concurrent teams (Option A). Each team instance has
9
+ * its own runtime, agent-to-team mapping, and cached filter/validator.
10
+ *
11
+ * @module teams/team-manager
12
+ */
13
+
14
+ import type { SpawnInterceptor } from "../agent/agent-manager.js";
15
+ import type {
16
+ SignalFilter,
17
+ EmissionValidator,
18
+ } from "../router/message-router.js";
19
+ import type { AgentId } from "../store/types/index.js";
20
+ import { loadTeam } from "./team-loader.js";
21
+ import { TeamRuntime, type TeamServices, type TeamBootstrapResult } from "./team-runtime.js";
22
+ import type { TeamManifest } from "./types.js";
23
+
24
+ // =============================================================================
25
+ // Types
26
+ // =============================================================================
27
+
28
+ export interface TeamInstance {
29
+ /** Unique instance ID (format: "{templateName}-{counter}") */
30
+ id: string;
31
+ /** Team template name */
32
+ templateName: string;
33
+ /** The running TeamRuntime */
34
+ runtime: TeamRuntime;
35
+ /** Bootstrap result (root + companion agent IDs) */
36
+ result: TeamBootstrapResult;
37
+ }
38
+
39
+ /**
40
+ * Optional parameter overrides applied when starting a team.
41
+ * These are merged on top of the template's manifest values.
42
+ */
43
+ export interface TeamStartOverrides {
44
+ /** Override model for all roles (root + companions) */
45
+ model?: string;
46
+ /** Override max workers scaling limit */
47
+ maxWorkers?: number;
48
+ }
49
+
50
+ // =============================================================================
51
+ // TeamManager
52
+ // =============================================================================
53
+
54
+ export class TeamManager {
55
+ /** Active team instances by instance ID */
56
+ private instances = new Map<string, TeamInstance>();
57
+
58
+ /** Agent ID → instance ID mapping (cache for fast lookup) */
59
+ private agentToTeam = new Map<string, string>();
60
+
61
+ /** Monotonic counter for instance ID generation */
62
+ private instanceCounter = 0;
63
+
64
+ /** Lifecycle event unsubscribe function */
65
+ private lifecycleUnsubscribe?: () => void;
66
+
67
+ /** Cached composite interceptor/filter/validator per instance */
68
+ private cachedInterceptors = new Map<string, SpawnInterceptor>();
69
+ private cachedFilters = new Map<string, SignalFilter | null>();
70
+ private cachedValidators = new Map<string, EmissionValidator | null>();
71
+
72
+ constructor(private readonly services: TeamServices) {}
73
+
74
+ // ─────────────────────────────────────────────────────────────
75
+ // Team Lifecycle
76
+ // ─────────────────────────────────────────────────────────────
77
+
78
+ /**
79
+ * Start a team from a template.
80
+ *
81
+ * Loads the team template, creates a TeamRuntime, initializes and bootstraps.
82
+ * Multiple teams can run concurrently.
83
+ *
84
+ * @param templateName - Team template directory name
85
+ * @param basePath - Project root (default: process.cwd())
86
+ * @param overrides - Optional parameter overrides applied on top of the template
87
+ * @returns The created team instance
88
+ */
89
+ async startTeam(
90
+ templateName: string,
91
+ basePath?: string,
92
+ overrides?: TeamStartOverrides,
93
+ ): Promise<TeamInstance> {
94
+ const instanceId = `${templateName}-${++this.instanceCounter}`;
95
+
96
+ const roleRegistry = this.services.agentManager.getRoleRegistry();
97
+ const manifest = await loadTeam(templateName, roleRegistry, basePath);
98
+
99
+ // Apply runtime overrides on top of the loaded manifest
100
+ if (overrides) {
101
+ applyOverrides(manifest, overrides);
102
+ }
103
+
104
+ const runtime = new TeamRuntime(manifest, this.services);
105
+
106
+ await runtime.initialize({ teamInstanceId: instanceId });
107
+
108
+ let result: TeamBootstrapResult;
109
+ try {
110
+ result = await runtime.bootstrap();
111
+ } catch (err) {
112
+ await runtime.teardown();
113
+ throw err;
114
+ }
115
+ const instance: TeamInstance = { id: instanceId, templateName, runtime, result };
116
+
117
+ this.instances.set(instanceId, instance);
118
+
119
+ // Populate agent-to-team mapping for bootstrap agents
120
+ this.agentToTeam.set(result.rootId, instanceId);
121
+ for (const companionId of result.companionIds) {
122
+ this.agentToTeam.set(companionId, instanceId);
123
+ }
124
+
125
+ // Tag bootstrap agents with team_instance in EventStore for durability
126
+ const { eventStore } = this.services;
127
+ if (eventStore.updateAgentMetadata) {
128
+ const agentIds = [result.rootId, ...result.companionIds];
129
+ for (const agentId of agentIds) {
130
+ eventStore.updateAgentMetadata(agentId as AgentId, { team_instance: instanceId });
131
+ }
132
+ }
133
+
134
+ // Cache factory outputs for composite dispatch
135
+ this.cachedInterceptors.set(instanceId, runtime.createSpawnInterceptor());
136
+ this.cachedFilters.set(instanceId, runtime.createSignalFilter());
137
+ this.cachedValidators.set(instanceId, runtime.createEmissionValidator());
138
+
139
+ return instance;
140
+ }
141
+
142
+ /**
143
+ * Stop a running team instance.
144
+ *
145
+ * Tears down the TeamRuntime, cleans up agent-to-team mapping,
146
+ * and removes cached interceptors/filters.
147
+ */
148
+ async stopTeam(instanceId: string): Promise<void> {
149
+ const instance = this.instances.get(instanceId);
150
+ if (!instance) {
151
+ throw new Error(`No team instance '${instanceId}' found`);
152
+ }
153
+
154
+ await instance.runtime.teardown();
155
+
156
+ // Clean up agent-to-team mapping
157
+ for (const [agentId, team] of this.agentToTeam) {
158
+ if (team === instanceId) {
159
+ this.agentToTeam.delete(agentId);
160
+ }
161
+ }
162
+
163
+ // Clean up caches
164
+ this.cachedInterceptors.delete(instanceId);
165
+ this.cachedFilters.delete(instanceId);
166
+ this.cachedValidators.delete(instanceId);
167
+
168
+ this.instances.delete(instanceId);
169
+ }
170
+
171
+ /**
172
+ * Tear down all running team instances and clean up.
173
+ *
174
+ * Also removes the lifecycle listener for spawn tracking.
175
+ */
176
+ async teardownAll(): Promise<void> {
177
+ const ids = [...this.instances.keys()];
178
+ for (const id of ids) {
179
+ await this.stopTeam(id);
180
+ }
181
+
182
+ if (this.lifecycleUnsubscribe) {
183
+ this.lifecycleUnsubscribe();
184
+ this.lifecycleUnsubscribe = undefined;
185
+ }
186
+ }
187
+
188
+ // ─────────────────────────────────────────────────────────────
189
+ // Agent-Team Mapping
190
+ // ─────────────────────────────────────────────────────────────
191
+
192
+ /**
193
+ * Look up which team instance an agent belongs to.
194
+ */
195
+ getTeamForAgent(agentId: string): TeamInstance | undefined {
196
+ const instanceId = this.agentToTeam.get(agentId);
197
+ return instanceId ? this.instances.get(instanceId) : undefined;
198
+ }
199
+
200
+ /**
201
+ * Get a team instance by ID.
202
+ */
203
+ getInstance(instanceId: string): TeamInstance | undefined {
204
+ return this.instances.get(instanceId);
205
+ }
206
+
207
+ /**
208
+ * Get all active team instances.
209
+ */
210
+ getInstances(): TeamInstance[] {
211
+ return [...this.instances.values()];
212
+ }
213
+
214
+ /**
215
+ * Check if any team is currently running.
216
+ */
217
+ hasActiveTeam(): boolean {
218
+ return this.instances.size > 0;
219
+ }
220
+
221
+ // ─────────────────────────────────────────────────────────────
222
+ // Composite Installation
223
+ // ─────────────────────────────────────────────────────────────
224
+
225
+ /**
226
+ * Install composite spawn interceptor, signal filter, and emission
227
+ * validator on the shared services.
228
+ *
229
+ * These composites delegate to the correct TeamRuntime based on
230
+ * agent-to-team mapping. Also sets up a lifecycle listener to
231
+ * auto-register newly spawned agents.
232
+ */
233
+ install(): void {
234
+ const { agentManager, messageRouter } = this.services;
235
+
236
+ // Composite spawn interceptor
237
+ agentManager.setSpawnInterceptor(async (options) => {
238
+ if (!options.parent) return options; // No parent — pass through
239
+
240
+ const parentTeam = this.getTeamForAgent(options.parent);
241
+ if (!parentTeam) return options; // Parent not in any team
242
+
243
+ // Defense-in-depth: verify spawn rules allow this child role
244
+ if (options.role) {
245
+ const spawnRules = parentTeam.runtime.getManifest().topology.spawn_rules;
246
+ if (spawnRules) {
247
+ const parentRole = parentTeam.runtime.getAgentRoleMap().get(options.parent as AgentId);
248
+ if (parentRole && parentRole in spawnRules) {
249
+ const allowed = spawnRules[parentRole];
250
+ if (!allowed.includes(options.role)) {
251
+ throw new Error(
252
+ `Spawn rules violation: role '${parentRole}' cannot spawn '${options.role}'. ` +
253
+ `Allowed: [${allowed.join(", ")}]`
254
+ );
255
+ }
256
+ }
257
+ }
258
+ }
259
+
260
+ const interceptor = this.cachedInterceptors.get(parentTeam.id);
261
+ const result = interceptor ? await interceptor(options) : options;
262
+ // Tag spawned agent with team instance for durable tracking
263
+ return { ...result, team_instance: parentTeam.id };
264
+ });
265
+
266
+ // Composite signal filter
267
+ if (messageRouter.setSignalFilter) {
268
+ messageRouter.setSignalFilter((from, to, signal) => {
269
+ // Use the recipient's team filter (signals are filtered at delivery point)
270
+ const recipientTeam = this.getTeamForAgent(to as string);
271
+ const senderTeam = this.getTeamForAgent(from as string);
272
+ const team = recipientTeam ?? senderTeam;
273
+
274
+ if (team) {
275
+ const filter = this.cachedFilters.get(team.id);
276
+ if (filter) return filter(from, to, signal);
277
+ }
278
+
279
+ return true; // No team context — allow
280
+ });
281
+ }
282
+
283
+ // Composite emission validator
284
+ if (messageRouter.setEmissionValidator) {
285
+ messageRouter.setEmissionValidator((agentId, signal) => {
286
+ const senderTeam = this.getTeamForAgent(agentId as string);
287
+ if (senderTeam) {
288
+ const validator = this.cachedValidators.get(senderTeam.id);
289
+ if (validator) return validator(agentId, signal);
290
+ }
291
+ return { action: "allow" as const };
292
+ });
293
+ }
294
+
295
+ // Set up lifecycle listener for auto-registering spawned agents
296
+ this.setupLifecycleListener();
297
+ }
298
+
299
+ /**
300
+ * Uninstall composite interceptor and filters from shared services.
301
+ */
302
+ uninstall(): void {
303
+ this.services.agentManager.setSpawnInterceptor(null);
304
+
305
+ if (this.lifecycleUnsubscribe) {
306
+ this.lifecycleUnsubscribe();
307
+ this.lifecycleUnsubscribe = undefined;
308
+ }
309
+ }
310
+
311
+ // ─────────────────────────────────────────────────────────────
312
+ // Lifecycle Listener
313
+ // ─────────────────────────────────────────────────────────────
314
+
315
+ /**
316
+ * Listen for agent lifecycle events to auto-register newly spawned
317
+ * agents in the agent-to-team mapping.
318
+ *
319
+ * When an agent is spawned, check if its parent belongs to a team.
320
+ * If so, register the new agent in the same team.
321
+ */
322
+ private setupLifecycleListener(): void {
323
+ if (this.lifecycleUnsubscribe) return; // Already listening
324
+
325
+ this.lifecycleUnsubscribe = this.services.agentManager.onLifecycleEvent((event) => {
326
+ if (event.type !== "spawned") return;
327
+
328
+ const agent = event.agent;
329
+ if (!agent.parent) return; // No parent — bootstrap agents handled explicitly
330
+
331
+ const parentTeam = this.getTeamForAgent(agent.parent);
332
+ if (!parentTeam) return; // Parent not in any team
333
+
334
+ // Register agent in the same team as its parent
335
+ this.agentToTeam.set(agent.id, parentTeam.id);
336
+
337
+ // Also register in the TeamRuntime's internal maps (for filter lookups)
338
+ if (agent.role) {
339
+ parentTeam.runtime.registerAgent(agent.id as AgentId, agent.role);
340
+ }
341
+ });
342
+ }
343
+ }
344
+
345
+ // =============================================================================
346
+ // Helpers
347
+ // =============================================================================
348
+
349
+ /**
350
+ * Apply runtime overrides to a loaded team manifest.
351
+ * Mutates the manifest in place.
352
+ */
353
+ function applyOverrides(manifest: TeamManifest, overrides: TeamStartOverrides): void {
354
+ if (overrides.model) {
355
+ // Override model on root topology node
356
+ if (manifest.topology?.root) {
357
+ manifest.topology.root.config = {
358
+ ...(manifest.topology.root.config ?? {}),
359
+ model: overrides.model,
360
+ };
361
+ }
362
+
363
+ // Override model on all companion topology nodes
364
+ if (manifest.topology?.companions) {
365
+ for (const companion of manifest.topology.companions) {
366
+ companion.config = {
367
+ ...(companion.config ?? {}),
368
+ model: overrides.model,
369
+ };
370
+ }
371
+ }
372
+ }
373
+
374
+ if (overrides.maxWorkers != null) {
375
+ // Ensure nested structure exists
376
+ if (!manifest.macro_agent) {
377
+ manifest.macro_agent = {};
378
+ }
379
+ if (!manifest.macro_agent.lifecycle) {
380
+ manifest.macro_agent.lifecycle = {};
381
+ }
382
+ if (!manifest.macro_agent.lifecycle.scaling) {
383
+ manifest.macro_agent.lifecycle.scaling = {};
384
+ }
385
+ manifest.macro_agent.lifecycle.scaling.max_workers = overrides.maxWorkers;
386
+ }
387
+ }