claude-code-swarm 0.3.4 → 0.3.6

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 (1393) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +22 -1
  3. package/.claude-plugin/run-agent-inbox-mcp.sh +95 -0
  4. package/.claude-plugin/run-minimem-mcp.sh +98 -0
  5. package/.claude-plugin/run-opentasks-mcp.sh +65 -0
  6. package/.gitattributes +3 -0
  7. package/.opentasks/config.json +9 -0
  8. package/.opentasks/graph.jsonl +0 -0
  9. package/CLAUDE.md +196 -36
  10. package/e2e/helpers/cleanup.mjs +17 -3
  11. package/e2e/helpers/map-mock-server.mjs +201 -25
  12. package/e2e/helpers/opentasks-daemon.mjs +149 -0
  13. package/e2e/helpers/sidecar.mjs +222 -0
  14. package/e2e/helpers/workspace.mjs +2 -1
  15. package/e2e/tier5-sidecar-inbox.test.mjs +900 -0
  16. package/e2e/tier6-inbox-mcp.test.mjs +173 -0
  17. package/e2e/tier6-live-agent.test.mjs +759 -0
  18. package/e2e/tier6-live-inbox-flow.test.mjs +938 -0
  19. package/e2e/tier7-hooks.test.mjs +992 -0
  20. package/e2e/tier7-minimem.test.mjs +461 -0
  21. package/e2e/tier7-opentasks.test.mjs +513 -0
  22. package/e2e/tier7-skilltree.test.mjs +506 -0
  23. package/e2e/vitest.config.e2e.mjs +1 -1
  24. package/hooks/hooks.json +15 -8
  25. package/package.json +17 -1
  26. package/references/agent-inbox/CLAUDE.md +151 -0
  27. package/references/agent-inbox/README.md +238 -0
  28. package/references/agent-inbox/docs/CLAUDE-CODE-SWARM-PROPOSAL.md +137 -0
  29. package/references/agent-inbox/docs/DESIGN.md +1156 -0
  30. package/references/agent-inbox/hooks/inbox-hook.mjs +119 -0
  31. package/references/agent-inbox/hooks/register-hook.mjs +69 -0
  32. package/references/agent-inbox/package-lock.json +3347 -0
  33. package/references/agent-inbox/package.json +58 -0
  34. package/references/agent-inbox/rules/agent-inbox.md +78 -0
  35. package/references/agent-inbox/src/federation/address.ts +61 -0
  36. package/references/agent-inbox/src/federation/connection-manager.ts +573 -0
  37. package/references/agent-inbox/src/federation/delivery-queue.ts +222 -0
  38. package/references/agent-inbox/src/federation/index.ts +6 -0
  39. package/references/agent-inbox/src/federation/routing-engine.ts +188 -0
  40. package/references/agent-inbox/src/federation/trust.ts +71 -0
  41. package/references/agent-inbox/src/index.ts +404 -0
  42. package/references/agent-inbox/src/ipc/ipc-server.ts +265 -0
  43. package/references/agent-inbox/src/jsonrpc/mail-server.ts +382 -0
  44. package/references/agent-inbox/src/map/map-client.ts +414 -0
  45. package/references/agent-inbox/src/mcp/mcp-proxy.ts +326 -0
  46. package/references/agent-inbox/src/mcp/mcp-server.ts +272 -0
  47. package/references/agent-inbox/src/mesh/delivery-bridge.ts +110 -0
  48. package/references/agent-inbox/src/mesh/mesh-connector.ts +41 -0
  49. package/references/agent-inbox/src/mesh/mesh-transport.ts +157 -0
  50. package/references/agent-inbox/src/mesh/type-mapper.ts +239 -0
  51. package/references/agent-inbox/src/push/notifier.ts +233 -0
  52. package/references/agent-inbox/src/registry/warm-registry.ts +255 -0
  53. package/references/agent-inbox/src/router/message-router.ts +175 -0
  54. package/references/agent-inbox/src/storage/interface.ts +48 -0
  55. package/references/agent-inbox/src/storage/memory.ts +145 -0
  56. package/references/agent-inbox/src/storage/sqlite.ts +671 -0
  57. package/references/agent-inbox/src/traceability/traceability.ts +183 -0
  58. package/references/agent-inbox/src/types.ts +329 -0
  59. package/references/agent-inbox/test/federation/address.test.ts +101 -0
  60. package/references/agent-inbox/test/federation/connection-manager.test.ts +546 -0
  61. package/references/agent-inbox/test/federation/delivery-queue.test.ts +159 -0
  62. package/references/agent-inbox/test/federation/integration.test.ts +857 -0
  63. package/references/agent-inbox/test/federation/routing-engine.test.ts +117 -0
  64. package/references/agent-inbox/test/federation/sdk-integration.test.ts +744 -0
  65. package/references/agent-inbox/test/federation/trust.test.ts +89 -0
  66. package/references/agent-inbox/test/ipc-jsonrpc.test.ts +113 -0
  67. package/references/agent-inbox/test/ipc-new-commands.test.ts +200 -0
  68. package/references/agent-inbox/test/ipc-server.test.ts +197 -0
  69. package/references/agent-inbox/test/mail-server.test.ts +285 -0
  70. package/references/agent-inbox/test/map-client.test.ts +408 -0
  71. package/references/agent-inbox/test/mcp-proxy.test.ts +191 -0
  72. package/references/agent-inbox/test/mesh/delivery-bridge.test.ts +178 -0
  73. package/references/agent-inbox/test/mesh/e2e-mesh.test.ts +527 -0
  74. package/references/agent-inbox/test/mesh/e2e-real-meshpeer.test.ts +629 -0
  75. package/references/agent-inbox/test/mesh/federation-mesh.test.ts +269 -0
  76. package/references/agent-inbox/test/mesh/mesh-connector.test.ts +66 -0
  77. package/references/agent-inbox/test/mesh/mesh-transport.test.ts +191 -0
  78. package/references/agent-inbox/test/mesh/meshpeer-integration.test.ts +442 -0
  79. package/references/agent-inbox/test/mesh/mock-mesh.ts +125 -0
  80. package/references/agent-inbox/test/mesh/mock-meshpeer.ts +266 -0
  81. package/references/agent-inbox/test/mesh/type-mapper.test.ts +226 -0
  82. package/references/agent-inbox/test/message-router.test.ts +184 -0
  83. package/references/agent-inbox/test/push-notifier.test.ts +139 -0
  84. package/references/agent-inbox/test/registry/warm-registry.test.ts +171 -0
  85. package/references/agent-inbox/test/sqlite-prefix.test.ts +192 -0
  86. package/references/agent-inbox/test/sqlite-storage.test.ts +243 -0
  87. package/references/agent-inbox/test/storage.test.ts +196 -0
  88. package/references/agent-inbox/test/traceability.test.ts +123 -0
  89. package/references/agent-inbox/test/wake.test.ts +330 -0
  90. package/references/agent-inbox/tsconfig.json +20 -0
  91. package/references/agent-inbox/tsup.config.ts +10 -0
  92. package/references/agent-inbox/vitest.config.ts +8 -0
  93. package/references/minimem/.claude/settings.json +7 -0
  94. package/references/minimem/.sudocode/issues.jsonl +18 -0
  95. package/references/minimem/.sudocode/specs.jsonl +1 -0
  96. package/references/minimem/CLAUDE.md +329 -0
  97. package/references/minimem/README.md +565 -0
  98. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
  99. package/references/minimem/claude-plugin/.mcp.json +7 -0
  100. package/references/minimem/claude-plugin/README.md +158 -0
  101. package/references/minimem/claude-plugin/commands/recall.md +47 -0
  102. package/references/minimem/claude-plugin/commands/remember.md +41 -0
  103. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
  104. package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
  105. package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
  106. package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
  107. package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
  108. package/references/minimem/media/banner.png +0 -0
  109. package/references/minimem/package-lock.json +5373 -0
  110. package/references/minimem/package.json +76 -0
  111. package/references/minimem/scripts/postbuild.js +49 -0
  112. package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
  113. package/references/minimem/src/__tests__/errors.test.ts +265 -0
  114. package/references/minimem/src/__tests__/helpers.ts +199 -0
  115. package/references/minimem/src/__tests__/internal.test.ts +407 -0
  116. package/references/minimem/src/__tests__/knowledge-frontmatter.test.ts +148 -0
  117. package/references/minimem/src/__tests__/knowledge.test.ts +148 -0
  118. package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
  119. package/references/minimem/src/__tests__/session.test.ts +190 -0
  120. package/references/minimem/src/cli/__tests__/commands.test.ts +760 -0
  121. package/references/minimem/src/cli/__tests__/contained-layout.test.ts +286 -0
  122. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
  123. package/references/minimem/src/cli/commands/append.ts +76 -0
  124. package/references/minimem/src/cli/commands/config.ts +262 -0
  125. package/references/minimem/src/cli/commands/conflicts.ts +415 -0
  126. package/references/minimem/src/cli/commands/daemon.ts +169 -0
  127. package/references/minimem/src/cli/commands/index.ts +12 -0
  128. package/references/minimem/src/cli/commands/init.ts +166 -0
  129. package/references/minimem/src/cli/commands/mcp.ts +221 -0
  130. package/references/minimem/src/cli/commands/push-pull.ts +213 -0
  131. package/references/minimem/src/cli/commands/search.ts +223 -0
  132. package/references/minimem/src/cli/commands/status.ts +84 -0
  133. package/references/minimem/src/cli/commands/store.ts +189 -0
  134. package/references/minimem/src/cli/commands/sync-init.ts +290 -0
  135. package/references/minimem/src/cli/commands/sync.ts +70 -0
  136. package/references/minimem/src/cli/commands/upsert.ts +197 -0
  137. package/references/minimem/src/cli/config.ts +611 -0
  138. package/references/minimem/src/cli/index.ts +299 -0
  139. package/references/minimem/src/cli/shared.ts +189 -0
  140. package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
  141. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
  142. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
  143. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
  144. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
  145. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
  146. package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
  147. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
  148. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
  149. package/references/minimem/src/cli/sync/central.ts +292 -0
  150. package/references/minimem/src/cli/sync/conflicts.ts +205 -0
  151. package/references/minimem/src/cli/sync/daemon.ts +407 -0
  152. package/references/minimem/src/cli/sync/detection.ts +138 -0
  153. package/references/minimem/src/cli/sync/index.ts +107 -0
  154. package/references/minimem/src/cli/sync/operations.ts +373 -0
  155. package/references/minimem/src/cli/sync/registry.ts +279 -0
  156. package/references/minimem/src/cli/sync/state.ts +358 -0
  157. package/references/minimem/src/cli/sync/validation.ts +206 -0
  158. package/references/minimem/src/cli/sync/watcher.ts +237 -0
  159. package/references/minimem/src/cli/version.ts +34 -0
  160. package/references/minimem/src/core/index.ts +9 -0
  161. package/references/minimem/src/core/indexer.ts +628 -0
  162. package/references/minimem/src/core/searcher.ts +221 -0
  163. package/references/minimem/src/db/schema.ts +183 -0
  164. package/references/minimem/src/db/sqlite-vec.ts +24 -0
  165. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
  166. package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
  167. package/references/minimem/src/embeddings/batch-openai.ts +409 -0
  168. package/references/minimem/src/embeddings/embeddings.ts +434 -0
  169. package/references/minimem/src/index.ts +132 -0
  170. package/references/minimem/src/internal.ts +299 -0
  171. package/references/minimem/src/minimem.ts +1291 -0
  172. package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
  173. package/references/minimem/src/search/graph.ts +234 -0
  174. package/references/minimem/src/search/hybrid.ts +151 -0
  175. package/references/minimem/src/search/search.ts +256 -0
  176. package/references/minimem/src/server/__tests__/mcp.test.ts +347 -0
  177. package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
  178. package/references/minimem/src/server/mcp.ts +326 -0
  179. package/references/minimem/src/server/tools.ts +720 -0
  180. package/references/minimem/src/session.ts +460 -0
  181. package/references/minimem/src/store/__tests__/manifest.test.ts +177 -0
  182. package/references/minimem/src/store/__tests__/materialize.test.ts +52 -0
  183. package/references/minimem/src/store/__tests__/store-graph.test.ts +228 -0
  184. package/references/minimem/src/store/index.ts +27 -0
  185. package/references/minimem/src/store/manifest.ts +203 -0
  186. package/references/minimem/src/store/materialize.ts +185 -0
  187. package/references/minimem/src/store/store-graph.ts +252 -0
  188. package/references/minimem/tsconfig.json +19 -0
  189. package/references/minimem/tsup.config.ts +26 -0
  190. package/references/minimem/vitest.config.ts +29 -0
  191. package/references/multi-agent-protocol/.sudocode/issues.jsonl +120 -0
  192. package/references/multi-agent-protocol/.sudocode/specs.jsonl +15 -0
  193. package/references/multi-agent-protocol/LICENSE +21 -0
  194. package/references/multi-agent-protocol/README.md +113 -0
  195. package/references/multi-agent-protocol/docs/00-design-specification.md +496 -0
  196. package/references/multi-agent-protocol/docs/01-open-questions.md +1050 -0
  197. package/references/multi-agent-protocol/docs/02-wire-protocol.md +296 -0
  198. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +252 -0
  199. package/references/multi-agent-protocol/docs/04-error-handling.md +231 -0
  200. package/references/multi-agent-protocol/docs/05-connection-model.md +244 -0
  201. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +243 -0
  202. package/references/multi-agent-protocol/docs/07-federation.md +335 -0
  203. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +253 -0
  204. package/references/multi-agent-protocol/docs/09-authentication.md +748 -0
  205. package/references/multi-agent-protocol/docs/10-environment-awareness.md +242 -0
  206. package/references/multi-agent-protocol/docs/10-mail-protocol.md +553 -0
  207. package/references/multi-agent-protocol/docs/11-anp-inspired-improvements.md +1079 -0
  208. package/references/multi-agent-protocol/docs/11-trajectory-protocol.md +292 -0
  209. package/references/multi-agent-protocol/docs/12-anp-implementation-plan.md +641 -0
  210. package/references/multi-agent-protocol/docs/agent-iam-integration.md +877 -0
  211. package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +459 -0
  212. package/references/multi-agent-protocol/docs/git-transport-draft.md +251 -0
  213. package/references/multi-agent-protocol/docs-site/Gemfile +22 -0
  214. package/references/multi-agent-protocol/docs-site/README.md +82 -0
  215. package/references/multi-agent-protocol/docs-site/_config.yml +91 -0
  216. package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +20 -0
  217. package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +42 -0
  218. package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +34 -0
  219. package/references/multi-agent-protocol/docs-site/examples/full-integration.md +510 -0
  220. package/references/multi-agent-protocol/docs-site/examples/index.md +138 -0
  221. package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +282 -0
  222. package/references/multi-agent-protocol/docs-site/examples/task-queue.md +399 -0
  223. package/references/multi-agent-protocol/docs-site/getting-started/index.md +98 -0
  224. package/references/multi-agent-protocol/docs-site/getting-started/installation.md +219 -0
  225. package/references/multi-agent-protocol/docs-site/getting-started/overview.md +172 -0
  226. package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +237 -0
  227. package/references/multi-agent-protocol/docs-site/index.md +136 -0
  228. package/references/multi-agent-protocol/docs-site/protocol/authentication.md +391 -0
  229. package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +376 -0
  230. package/references/multi-agent-protocol/docs-site/protocol/design.md +284 -0
  231. package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +312 -0
  232. package/references/multi-agent-protocol/docs-site/protocol/federation.md +449 -0
  233. package/references/multi-agent-protocol/docs-site/protocol/index.md +129 -0
  234. package/references/multi-agent-protocol/docs-site/protocol/permissions.md +398 -0
  235. package/references/multi-agent-protocol/docs-site/protocol/streaming.md +353 -0
  236. package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +369 -0
  237. package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +357 -0
  238. package/references/multi-agent-protocol/docs-site/sdk/api/client.md +380 -0
  239. package/references/multi-agent-protocol/docs-site/sdk/api/index.md +62 -0
  240. package/references/multi-agent-protocol/docs-site/sdk/api/server.md +453 -0
  241. package/references/multi-agent-protocol/docs-site/sdk/api/types.md +468 -0
  242. package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +375 -0
  243. package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +405 -0
  244. package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +352 -0
  245. package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +89 -0
  246. package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +360 -0
  247. package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +446 -0
  248. package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +363 -0
  249. package/references/multi-agent-protocol/docs-site/sdk/index.md +206 -0
  250. package/references/multi-agent-protocol/package-lock.json +4230 -0
  251. package/references/multi-agent-protocol/package.json +56 -0
  252. package/references/multi-agent-protocol/schema/meta.json +584 -0
  253. package/references/multi-agent-protocol/schema/schema.json +3067 -0
  254. package/references/openhive/.claude/settings.json +6 -0
  255. package/references/openhive/.dockerignore +54 -0
  256. package/references/openhive/.github/workflows/docker.yml +52 -0
  257. package/references/openhive/.sudocode/issues.jsonl +24 -0
  258. package/references/openhive/.sudocode/specs.jsonl +4 -0
  259. package/references/openhive/CLAUDE.md +88 -0
  260. package/references/openhive/Dockerfile +105 -0
  261. package/references/openhive/README.md +745 -0
  262. package/references/openhive/bin/openhive.js +6 -0
  263. package/references/openhive/cloudbuild.yaml +80 -0
  264. package/references/openhive/deploy/cloud-run.sh +106 -0
  265. package/references/openhive/deploy/openhive.env.example +80 -0
  266. package/references/openhive/deploy/openhive.service +91 -0
  267. package/references/openhive/docker-compose.yml +67 -0
  268. package/references/openhive/docker-entrypoint.sh +117 -0
  269. package/references/openhive/docs/API_MIGRATION.md +176 -0
  270. package/references/openhive/docs/DEPLOYMENT.md +847 -0
  271. package/references/openhive/docs/DESIGN_v1.md +489 -0
  272. package/references/openhive/docs/DESIGN_v2.md +564 -0
  273. package/references/openhive/docs/HEADSCALE_HOSTING_SPEC.md +513 -0
  274. package/references/openhive/docs/HIVE_SYNC_DESIGN.md +2362 -0
  275. package/references/openhive/docs/HIVE_SYNC_IMPLEMENTATION_PLAN.md +1169 -0
  276. package/references/openhive/docs/HOSTING.md +601 -0
  277. package/references/openhive/docs/IMPLEMENTATION_PLAN.md +428 -0
  278. package/references/openhive/docs/LOCAL_SETUP.md +506 -0
  279. package/references/openhive/docs/MACRO_AGENT_ATLAS_EXTENSION.md +351 -0
  280. package/references/openhive/docs/MEMORY_BANK_SYNC_SPEC.md +909 -0
  281. package/references/openhive/docs/PLAN_v1.md +471 -0
  282. package/references/openhive/docs/PLAN_v2.md +623 -0
  283. package/references/openhive/docs/WEBSOCKET.md +267 -0
  284. package/references/openhive/docs/openswarm-bootstrap-token-spec.md +240 -0
  285. package/references/openhive/ecosystem.config.cjs +76 -0
  286. package/references/openhive/fly.toml +63 -0
  287. package/references/openhive/package-lock.json +17640 -0
  288. package/references/openhive/package.json +128 -0
  289. package/references/openhive/packages/openhive-types/package-lock.json +1473 -0
  290. package/references/openhive/packages/openhive-types/package.json +42 -0
  291. package/references/openhive/packages/openhive-types/src/index.ts +36 -0
  292. package/references/openhive/packages/openhive-types/src/map-coordination.ts +92 -0
  293. package/references/openhive/packages/openhive-types/src/map-session-sync.ts +50 -0
  294. package/references/openhive/packages/openhive-types/src/map-sync.ts +68 -0
  295. package/references/openhive/packages/openhive-types/tsconfig.json +15 -0
  296. package/references/openhive/packages/openhive-types/tsconfig.tsbuildinfo +1 -0
  297. package/references/openhive/packages/openhive-types/tsup.config.ts +12 -0
  298. package/references/openhive/railway.json +13 -0
  299. package/references/openhive/railway.toml +24 -0
  300. package/references/openhive/render.yaml +51 -0
  301. package/references/openhive/src/__tests__/auth.test.ts +148 -0
  302. package/references/openhive/src/__tests__/bridge/credentials.test.ts +65 -0
  303. package/references/openhive/src/__tests__/bridge/dal.test.ts +279 -0
  304. package/references/openhive/src/__tests__/bridge/inbound.test.ts +349 -0
  305. package/references/openhive/src/__tests__/bridge/manager.test.ts +419 -0
  306. package/references/openhive/src/__tests__/bridge/mentions.test.ts +83 -0
  307. package/references/openhive/src/__tests__/bridge/outbound.test.ts +209 -0
  308. package/references/openhive/src/__tests__/bridge/slack-adapter.test.ts +276 -0
  309. package/references/openhive/src/__tests__/cli.test.ts +342 -0
  310. package/references/openhive/src/__tests__/config.test.ts +205 -0
  311. package/references/openhive/src/__tests__/coordination/coordination.test.ts +1072 -0
  312. package/references/openhive/src/__tests__/coordination/cross-instance.test.ts +540 -0
  313. package/references/openhive/src/__tests__/coordination/e2e.test.ts +780 -0
  314. package/references/openhive/src/__tests__/data-dir.test.ts +332 -0
  315. package/references/openhive/src/__tests__/db.test.ts +258 -0
  316. package/references/openhive/src/__tests__/discovery.test.ts +288 -0
  317. package/references/openhive/src/__tests__/events/dal.test.ts +371 -0
  318. package/references/openhive/src/__tests__/events/dispatch.test.ts +202 -0
  319. package/references/openhive/src/__tests__/events/e2e.test.ts +528 -0
  320. package/references/openhive/src/__tests__/events/normalizers.test.ts +263 -0
  321. package/references/openhive/src/__tests__/events/router.test.ts +314 -0
  322. package/references/openhive/src/__tests__/events/routes.test.ts +407 -0
  323. package/references/openhive/src/__tests__/follows.test.ts +328 -0
  324. package/references/openhive/src/__tests__/helpers/test-dirs.ts +44 -0
  325. package/references/openhive/src/__tests__/ingest-keys.test.ts +925 -0
  326. package/references/openhive/src/__tests__/map/sync-client-content.test.ts +288 -0
  327. package/references/openhive/src/__tests__/map/sync-client.test.ts +500 -0
  328. package/references/openhive/src/__tests__/map/sync-listener.test.ts +504 -0
  329. package/references/openhive/src/__tests__/middleware/hostname-guard.test.ts +73 -0
  330. package/references/openhive/src/__tests__/migrations.test.ts +260 -0
  331. package/references/openhive/src/__tests__/opentasks/client.test.ts +497 -0
  332. package/references/openhive/src/__tests__/opentasks/discovery.test.ts +283 -0
  333. package/references/openhive/src/__tests__/opentasks/e2e.test.ts +767 -0
  334. package/references/openhive/src/__tests__/routes/agents.test.ts +417 -0
  335. package/references/openhive/src/__tests__/routes/opentasks-content.test.ts +493 -0
  336. package/references/openhive/src/__tests__/routes/resource-content.test.ts +1741 -0
  337. package/references/openhive/src/__tests__/sessions/adapters.test.ts +524 -0
  338. package/references/openhive/src/__tests__/sessions/routes.test.ts +1053 -0
  339. package/references/openhive/src/__tests__/sessions/storage.test.ts +545 -0
  340. package/references/openhive/src/__tests__/sessions/trajectory-checkpoints.test.ts +349 -0
  341. package/references/openhive/src/__tests__/sessions/trajectory-routes.test.ts +290 -0
  342. package/references/openhive/src/__tests__/swarm/config.test.ts +125 -0
  343. package/references/openhive/src/__tests__/swarm/credentials.test.ts +254 -0
  344. package/references/openhive/src/__tests__/swarm/dal.test.ts +290 -0
  345. package/references/openhive/src/__tests__/swarm/e2e.test.ts +827 -0
  346. package/references/openhive/src/__tests__/swarm/fixtures/exit-immediately.js +3 -0
  347. package/references/openhive/src/__tests__/swarm/fixtures/map-server.js +147 -0
  348. package/references/openhive/src/__tests__/swarm/fixtures/sleep-server.js +52 -0
  349. package/references/openhive/src/__tests__/swarm/local-provider.test.ts +279 -0
  350. package/references/openhive/src/__tests__/swarm/manager.test.ts +305 -0
  351. package/references/openhive/src/__tests__/swarm/routes.test.ts +396 -0
  352. package/references/openhive/src/__tests__/swarm/workspace.test.ts +257 -0
  353. package/references/openhive/src/__tests__/swarmhub/client.test.ts +324 -0
  354. package/references/openhive/src/__tests__/swarmhub/config.test.ts +213 -0
  355. package/references/openhive/src/__tests__/swarmhub/connector.test.ts +581 -0
  356. package/references/openhive/src/__tests__/swarmhub/routes.test.ts +639 -0
  357. package/references/openhive/src/__tests__/swarmhub/slack-client.test.ts +164 -0
  358. package/references/openhive/src/__tests__/swarmhub/slack-connector.test.ts +164 -0
  359. package/references/openhive/src/__tests__/swarmhub/slack-routes.test.ts +373 -0
  360. package/references/openhive/src/__tests__/swarmhub/webhook-handler.test.ts +295 -0
  361. package/references/openhive/src/__tests__/sync/resource-sync.test.ts +1418 -0
  362. package/references/openhive/src/__tests__/sync/sync.test.ts +800 -0
  363. package/references/openhive/src/api/index.ts +65 -0
  364. package/references/openhive/src/api/middleware/auth.ts +227 -0
  365. package/references/openhive/src/api/middleware/hostname-guard.ts +38 -0
  366. package/references/openhive/src/api/routes/admin.ts +366 -0
  367. package/references/openhive/src/api/routes/agents.ts +223 -0
  368. package/references/openhive/src/api/routes/auth.ts +164 -0
  369. package/references/openhive/src/api/routes/bridges.ts +384 -0
  370. package/references/openhive/src/api/routes/comments.ts +294 -0
  371. package/references/openhive/src/api/routes/coordination.ts +312 -0
  372. package/references/openhive/src/api/routes/events.ts +158 -0
  373. package/references/openhive/src/api/routes/federation.ts +367 -0
  374. package/references/openhive/src/api/routes/feed.ts +212 -0
  375. package/references/openhive/src/api/routes/hives.ts +264 -0
  376. package/references/openhive/src/api/routes/map.ts +674 -0
  377. package/references/openhive/src/api/routes/memory-banks.ts +971 -0
  378. package/references/openhive/src/api/routes/posts.ts +342 -0
  379. package/references/openhive/src/api/routes/resource-content.ts +727 -0
  380. package/references/openhive/src/api/routes/resources.ts +1013 -0
  381. package/references/openhive/src/api/routes/search.ts +45 -0
  382. package/references/openhive/src/api/routes/sessions.ts +1187 -0
  383. package/references/openhive/src/api/routes/swarm-hosting.ts +313 -0
  384. package/references/openhive/src/api/routes/sync-protocol.ts +168 -0
  385. package/references/openhive/src/api/routes/sync.ts +279 -0
  386. package/references/openhive/src/api/routes/uploads.ts +174 -0
  387. package/references/openhive/src/api/routes/webhooks.ts +603 -0
  388. package/references/openhive/src/api/schemas/agents.ts +26 -0
  389. package/references/openhive/src/api/schemas/comments.ts +22 -0
  390. package/references/openhive/src/api/schemas/hives.ts +33 -0
  391. package/references/openhive/src/api/schemas/posts.ts +37 -0
  392. package/references/openhive/src/api/schemas/sync.ts +56 -0
  393. package/references/openhive/src/auth/index.ts +2 -0
  394. package/references/openhive/src/auth/jwks.ts +58 -0
  395. package/references/openhive/src/bridge/adapters/slack.ts +306 -0
  396. package/references/openhive/src/bridge/credentials.ts +72 -0
  397. package/references/openhive/src/bridge/inbound.ts +288 -0
  398. package/references/openhive/src/bridge/index.ts +42 -0
  399. package/references/openhive/src/bridge/manager.ts +425 -0
  400. package/references/openhive/src/bridge/mentions.ts +42 -0
  401. package/references/openhive/src/bridge/outbound.ts +103 -0
  402. package/references/openhive/src/bridge/schema.ts +82 -0
  403. package/references/openhive/src/bridge/types.ts +238 -0
  404. package/references/openhive/src/cli/network.ts +480 -0
  405. package/references/openhive/src/cli.ts +620 -0
  406. package/references/openhive/src/config.ts +611 -0
  407. package/references/openhive/src/coordination/index.ts +43 -0
  408. package/references/openhive/src/coordination/listener.ts +92 -0
  409. package/references/openhive/src/coordination/schema.ts +79 -0
  410. package/references/openhive/src/coordination/service.ts +233 -0
  411. package/references/openhive/src/coordination/types.ts +177 -0
  412. package/references/openhive/src/data-dir.ts +105 -0
  413. package/references/openhive/src/db/adapters/index.ts +21 -0
  414. package/references/openhive/src/db/adapters/postgres.ts +310 -0
  415. package/references/openhive/src/db/adapters/sqlite.ts +56 -0
  416. package/references/openhive/src/db/adapters/types.ts +65 -0
  417. package/references/openhive/src/db/dal/agents.ts +430 -0
  418. package/references/openhive/src/db/dal/bridge.ts +336 -0
  419. package/references/openhive/src/db/dal/comments.ts +213 -0
  420. package/references/openhive/src/db/dal/coordination.ts +361 -0
  421. package/references/openhive/src/db/dal/events.ts +381 -0
  422. package/references/openhive/src/db/dal/follows.ts +96 -0
  423. package/references/openhive/src/db/dal/hives.ts +198 -0
  424. package/references/openhive/src/db/dal/ingest-keys.ts +176 -0
  425. package/references/openhive/src/db/dal/instances.ts +196 -0
  426. package/references/openhive/src/db/dal/invites.ts +123 -0
  427. package/references/openhive/src/db/dal/map.ts +750 -0
  428. package/references/openhive/src/db/dal/posts.ts +274 -0
  429. package/references/openhive/src/db/dal/remote-agents.ts +56 -0
  430. package/references/openhive/src/db/dal/search.ts +238 -0
  431. package/references/openhive/src/db/dal/sync-events.ts +160 -0
  432. package/references/openhive/src/db/dal/sync-groups.ts +100 -0
  433. package/references/openhive/src/db/dal/sync-peer-configs.ts +216 -0
  434. package/references/openhive/src/db/dal/sync-peers.ts +145 -0
  435. package/references/openhive/src/db/dal/syncable-resources.ts +888 -0
  436. package/references/openhive/src/db/dal/trajectory-checkpoints.ts +291 -0
  437. package/references/openhive/src/db/dal/uploads.ts +124 -0
  438. package/references/openhive/src/db/dal/votes.ts +124 -0
  439. package/references/openhive/src/db/index.ts +293 -0
  440. package/references/openhive/src/db/providers/index.ts +75 -0
  441. package/references/openhive/src/db/providers/postgres.ts +529 -0
  442. package/references/openhive/src/db/providers/sqlite.ts +1383 -0
  443. package/references/openhive/src/db/providers/turso.ts +1360 -0
  444. package/references/openhive/src/db/providers/types.ts +516 -0
  445. package/references/openhive/src/db/schema.ts +641 -0
  446. package/references/openhive/src/discovery/index.ts +403 -0
  447. package/references/openhive/src/events/dispatch.ts +106 -0
  448. package/references/openhive/src/events/index.ts +17 -0
  449. package/references/openhive/src/events/normalizers/github.ts +133 -0
  450. package/references/openhive/src/events/normalizers/index.ts +62 -0
  451. package/references/openhive/src/events/normalizers/slack.ts +50 -0
  452. package/references/openhive/src/events/router.ts +156 -0
  453. package/references/openhive/src/events/schema.ts +66 -0
  454. package/references/openhive/src/events/types.ts +130 -0
  455. package/references/openhive/src/federation/index.ts +1 -0
  456. package/references/openhive/src/federation/service.ts +776 -0
  457. package/references/openhive/src/headscale/client.ts +256 -0
  458. package/references/openhive/src/headscale/config.ts +212 -0
  459. package/references/openhive/src/headscale/index.ts +23 -0
  460. package/references/openhive/src/headscale/manager.ts +249 -0
  461. package/references/openhive/src/headscale/sync.ts +272 -0
  462. package/references/openhive/src/headscale/types.ts +231 -0
  463. package/references/openhive/src/index.ts +225 -0
  464. package/references/openhive/src/map/client-entry.ts +26 -0
  465. package/references/openhive/src/map/index.ts +76 -0
  466. package/references/openhive/src/map/schema.ts +119 -0
  467. package/references/openhive/src/map/service.ts +323 -0
  468. package/references/openhive/src/map/sync-client.ts +696 -0
  469. package/references/openhive/src/map/sync-listener.ts +409 -0
  470. package/references/openhive/src/map/types.ts +290 -0
  471. package/references/openhive/src/network/factory.ts +118 -0
  472. package/references/openhive/src/network/headscale-provider.ts +437 -0
  473. package/references/openhive/src/network/index.ts +43 -0
  474. package/references/openhive/src/network/tailscale-client.ts +289 -0
  475. package/references/openhive/src/network/tailscale-provider.ts +287 -0
  476. package/references/openhive/src/network/types.ts +178 -0
  477. package/references/openhive/src/opentasks-client/client.ts +374 -0
  478. package/references/openhive/src/opentasks-client/index.ts +7 -0
  479. package/references/openhive/src/realtime/index.ts +282 -0
  480. package/references/openhive/src/server.ts +1069 -0
  481. package/references/openhive/src/services/email.ts +177 -0
  482. package/references/openhive/src/services/sitemap.ts +135 -0
  483. package/references/openhive/src/sessions/adapters/claude.ts +466 -0
  484. package/references/openhive/src/sessions/adapters/codex.ts +265 -0
  485. package/references/openhive/src/sessions/adapters/index.ts +263 -0
  486. package/references/openhive/src/sessions/adapters/raw.ts +144 -0
  487. package/references/openhive/src/sessions/adapters/types.ts +83 -0
  488. package/references/openhive/src/sessions/index.ts +50 -0
  489. package/references/openhive/src/sessions/storage/adapters/gcs.ts +277 -0
  490. package/references/openhive/src/sessions/storage/adapters/local.ts +240 -0
  491. package/references/openhive/src/sessions/storage/adapters/s3.ts +321 -0
  492. package/references/openhive/src/sessions/storage/index.ts +231 -0
  493. package/references/openhive/src/sessions/storage/types.ts +189 -0
  494. package/references/openhive/src/sessions/types.ts +415 -0
  495. package/references/openhive/src/shared/types/index.ts +45 -0
  496. package/references/openhive/src/shared/types/map-coordination.ts +92 -0
  497. package/references/openhive/src/shared/types/map-session-sync.ts +170 -0
  498. package/references/openhive/src/shared/types/map-sync.ts +68 -0
  499. package/references/openhive/src/skill.ts +203 -0
  500. package/references/openhive/src/storage/adapters/local.ts +169 -0
  501. package/references/openhive/src/storage/adapters/s3.ts +195 -0
  502. package/references/openhive/src/storage/index.ts +64 -0
  503. package/references/openhive/src/storage/types.ts +69 -0
  504. package/references/openhive/src/swarm/credentials.ts +98 -0
  505. package/references/openhive/src/swarm/dal.ts +206 -0
  506. package/references/openhive/src/swarm/index.ts +28 -0
  507. package/references/openhive/src/swarm/manager.ts +917 -0
  508. package/references/openhive/src/swarm/providers/local.ts +338 -0
  509. package/references/openhive/src/swarm/providers/sandboxed-local.ts +478 -0
  510. package/references/openhive/src/swarm/providers/workspace.ts +52 -0
  511. package/references/openhive/src/swarm/schema.ts +43 -0
  512. package/references/openhive/src/swarm/types.ts +333 -0
  513. package/references/openhive/src/swarmhub/client.ts +279 -0
  514. package/references/openhive/src/swarmhub/connector.ts +463 -0
  515. package/references/openhive/src/swarmhub/index.ts +43 -0
  516. package/references/openhive/src/swarmhub/routes.ts +296 -0
  517. package/references/openhive/src/swarmhub/types.ts +213 -0
  518. package/references/openhive/src/swarmhub/webhook-handler.ts +126 -0
  519. package/references/openhive/src/sync/compaction.ts +193 -0
  520. package/references/openhive/src/sync/coordination-hooks.ts +154 -0
  521. package/references/openhive/src/sync/crypto.ts +79 -0
  522. package/references/openhive/src/sync/gossip.ts +136 -0
  523. package/references/openhive/src/sync/hooks.ts +202 -0
  524. package/references/openhive/src/sync/materializer-repo.ts +256 -0
  525. package/references/openhive/src/sync/materializer.ts +682 -0
  526. package/references/openhive/src/sync/middleware.ts +140 -0
  527. package/references/openhive/src/sync/peer-resolver.ts +157 -0
  528. package/references/openhive/src/sync/resource-hooks.ts +161 -0
  529. package/references/openhive/src/sync/schema.ts +158 -0
  530. package/references/openhive/src/sync/service.ts +990 -0
  531. package/references/openhive/src/sync/types.ts +369 -0
  532. package/references/openhive/src/terminal/index.ts +4 -0
  533. package/references/openhive/src/terminal/pty-manager.ts +337 -0
  534. package/references/openhive/src/terminal/resolve-tui.ts +44 -0
  535. package/references/openhive/src/terminal/terminal-ws.ts +251 -0
  536. package/references/openhive/src/types.ts +442 -0
  537. package/references/openhive/src/utils/git-remote.ts +329 -0
  538. package/references/openhive/src/web/App.tsx +77 -0
  539. package/references/openhive/src/web/__tests__/components/dashboard/RecentActivity.test.tsx +77 -0
  540. package/references/openhive/src/web/__tests__/components/dashboard/StatsOverview.test.tsx +62 -0
  541. package/references/openhive/src/web/__tests__/components/dashboard/SwarmStatusSummary.test.tsx +122 -0
  542. package/references/openhive/src/web/__tests__/components/dashboard/SyncResourcesStatus.test.tsx +104 -0
  543. package/references/openhive/src/web/__tests__/components/layout/Sidebar.test.tsx +110 -0
  544. package/references/openhive/src/web/__tests__/components/swarm/StatusBadges.test.tsx +65 -0
  545. package/references/openhive/src/web/__tests__/components/terminal/query-responses.test.ts +143 -0
  546. package/references/openhive/src/web/__tests__/components/terminal/terminal-mouse.test.ts +509 -0
  547. package/references/openhive/src/web/__tests__/hooks/useEventsApi.test.ts +378 -0
  548. package/references/openhive/src/web/__tests__/pages/Dashboard.test.tsx +57 -0
  549. package/references/openhive/src/web/__tests__/pages/Events.test.tsx +886 -0
  550. package/references/openhive/src/web/__tests__/pages/Explore.test.tsx +63 -0
  551. package/references/openhive/src/web/__tests__/routing.test.tsx +79 -0
  552. package/references/openhive/src/web/__tests__/setup.ts +37 -0
  553. package/references/openhive/src/web/__tests__/stores/dashboard.test.ts +49 -0
  554. package/references/openhive/src/web/components/common/AgentBadge.tsx +58 -0
  555. package/references/openhive/src/web/components/common/Avatar.tsx +78 -0
  556. package/references/openhive/src/web/components/common/ErrorBoundary.tsx +76 -0
  557. package/references/openhive/src/web/components/common/Highlight.tsx +79 -0
  558. package/references/openhive/src/web/components/common/ImageUpload.tsx +209 -0
  559. package/references/openhive/src/web/components/common/LoadingSpinner.tsx +37 -0
  560. package/references/openhive/src/web/components/common/Logo.tsx +21 -0
  561. package/references/openhive/src/web/components/common/Markdown.tsx +53 -0
  562. package/references/openhive/src/web/components/common/ProtectedRoute.tsx +18 -0
  563. package/references/openhive/src/web/components/common/ThemeToggle.tsx +38 -0
  564. package/references/openhive/src/web/components/common/TimeAgo.tsx +17 -0
  565. package/references/openhive/src/web/components/common/Toast.tsx +70 -0
  566. package/references/openhive/src/web/components/common/VoteButtons.tsx +100 -0
  567. package/references/openhive/src/web/components/dashboard/RecentActivity.tsx +100 -0
  568. package/references/openhive/src/web/components/dashboard/StatsOverview.tsx +40 -0
  569. package/references/openhive/src/web/components/dashboard/SwarmStatusSummary.tsx +89 -0
  570. package/references/openhive/src/web/components/dashboard/SyncResourcesStatus.tsx +81 -0
  571. package/references/openhive/src/web/components/feed/FeedControls.tsx +38 -0
  572. package/references/openhive/src/web/components/feed/NewPostsIndicator.tsx +75 -0
  573. package/references/openhive/src/web/components/feed/PostCard.tsx +129 -0
  574. package/references/openhive/src/web/components/feed/PostList.tsx +83 -0
  575. package/references/openhive/src/web/components/layout/Footer.tsx +5 -0
  576. package/references/openhive/src/web/components/layout/Layout.tsx +29 -0
  577. package/references/openhive/src/web/components/layout/Sidebar.tsx +348 -0
  578. package/references/openhive/src/web/components/post/CommentForm.tsx +59 -0
  579. package/references/openhive/src/web/components/post/CommentTree.tsx +145 -0
  580. package/references/openhive/src/web/components/resources/MemoryBrowser.tsx +208 -0
  581. package/references/openhive/src/web/components/resources/OpenTasksSummary.tsx +138 -0
  582. package/references/openhive/src/web/components/resources/SkillBrowser.tsx +284 -0
  583. package/references/openhive/src/web/components/swarm/StatusBadges.tsx +56 -0
  584. package/references/openhive/src/web/components/terminal/TerminalPanel.tsx +485 -0
  585. package/references/openhive/src/web/components/terminal/index.ts +2 -0
  586. package/references/openhive/src/web/components/terminal/query-responses.ts +70 -0
  587. package/references/openhive/src/web/components/terminal/terminal-mouse.ts +222 -0
  588. package/references/openhive/src/web/hooks/useApi.ts +740 -0
  589. package/references/openhive/src/web/hooks/useDocumentTitle.ts +49 -0
  590. package/references/openhive/src/web/hooks/useInfiniteScroll.ts +58 -0
  591. package/references/openhive/src/web/hooks/useRealtimeUpdates.ts +154 -0
  592. package/references/openhive/src/web/hooks/useWebSocket.ts +225 -0
  593. package/references/openhive/src/web/index.html +73 -0
  594. package/references/openhive/src/web/lib/api.ts +518 -0
  595. package/references/openhive/src/web/main.tsx +32 -0
  596. package/references/openhive/src/web/pages/About.tsx +131 -0
  597. package/references/openhive/src/web/pages/Agent.tsx +130 -0
  598. package/references/openhive/src/web/pages/Agents.tsx +69 -0
  599. package/references/openhive/src/web/pages/AuthCallback.tsx +75 -0
  600. package/references/openhive/src/web/pages/Dashboard.tsx +41 -0
  601. package/references/openhive/src/web/pages/Events.tsx +1025 -0
  602. package/references/openhive/src/web/pages/Explore.tsx +43 -0
  603. package/references/openhive/src/web/pages/Hive.tsx +134 -0
  604. package/references/openhive/src/web/pages/Hives.tsx +64 -0
  605. package/references/openhive/src/web/pages/Home.tsx +43 -0
  606. package/references/openhive/src/web/pages/Login.tsx +122 -0
  607. package/references/openhive/src/web/pages/Post.tsx +216 -0
  608. package/references/openhive/src/web/pages/ResourceDetail.tsx +426 -0
  609. package/references/openhive/src/web/pages/Resources.tsx +276 -0
  610. package/references/openhive/src/web/pages/Search.tsx +234 -0
  611. package/references/openhive/src/web/pages/SessionDetail.tsx +703 -0
  612. package/references/openhive/src/web/pages/Sessions.tsx +129 -0
  613. package/references/openhive/src/web/pages/Settings.tsx +826 -0
  614. package/references/openhive/src/web/pages/SwarmCraft.tsx +16 -0
  615. package/references/openhive/src/web/pages/Swarms.tsx +981 -0
  616. package/references/openhive/src/web/pages/Terminal.tsx +69 -0
  617. package/references/openhive/src/web/postcss.config.js +5 -0
  618. package/references/openhive/src/web/public/favicon.svg +11 -0
  619. package/references/openhive/src/web/public/manifest.json +21 -0
  620. package/references/openhive/src/web/stores/auth.ts +207 -0
  621. package/references/openhive/src/web/stores/dashboard.ts +23 -0
  622. package/references/openhive/src/web/stores/realtime.ts +90 -0
  623. package/references/openhive/src/web/stores/theme.ts +70 -0
  624. package/references/openhive/src/web/stores/toast.ts +63 -0
  625. package/references/openhive/src/web/styles/globals.css +503 -0
  626. package/references/openhive/src/web/sw.ts +228 -0
  627. package/references/openhive/src/web/utils/serviceWorker.ts +86 -0
  628. package/references/openhive/src/web/vite.config.ts +81 -0
  629. package/references/openhive/tsconfig.json +32 -0
  630. package/references/openhive/tsup.config.ts +17 -0
  631. package/references/openhive/vitest.config.ts +30 -0
  632. package/references/openhive/vitest.web.config.ts +20 -0
  633. package/references/opentasks/.claude/settings.json +6 -0
  634. package/references/opentasks/.claude-plugin/plugin.json +20 -0
  635. package/references/opentasks/.lintstagedrc.json +4 -0
  636. package/references/opentasks/.prettierignore +4 -0
  637. package/references/opentasks/.prettierrc.json +11 -0
  638. package/references/opentasks/.sudocode/issues.jsonl +89 -0
  639. package/references/opentasks/.sudocode/specs.jsonl +24 -0
  640. package/references/opentasks/README.md +401 -0
  641. package/references/opentasks/docs/ARCHITECTURE.md +841 -0
  642. package/references/opentasks/docs/DESIGN.md +689 -0
  643. package/references/opentasks/docs/INTERFACE.md +670 -0
  644. package/references/opentasks/docs/PERSISTENCE.md +1638 -0
  645. package/references/opentasks/docs/PROVIDERS.md +1412 -0
  646. package/references/opentasks/docs/SCHEMA.md +815 -0
  647. package/references/opentasks/docs/TESTING.md +1081 -0
  648. package/references/opentasks/eslint.config.js +58 -0
  649. package/references/opentasks/package-lock.json +4348 -0
  650. package/references/opentasks/package.json +81 -0
  651. package/references/opentasks/skills/opentasks/SKILL.md +139 -0
  652. package/references/opentasks/skills/opentasks/dependency-management.md +119 -0
  653. package/references/opentasks/skills/opentasks/feedback-and-review.md +100 -0
  654. package/references/opentasks/skills/opentasks/linking-external-data.md +103 -0
  655. package/references/opentasks/skills/opentasks/spec-to-implementation.md +98 -0
  656. package/references/opentasks/src/__tests__/cli-tools.test.ts +800 -0
  657. package/references/opentasks/src/__tests__/cli.test.ts +97 -0
  658. package/references/opentasks/src/__tests__/p1-p3-gaps.test.ts +635 -0
  659. package/references/opentasks/src/cli.ts +929 -0
  660. package/references/opentasks/src/client/__tests__/client-crud.test.ts +546 -0
  661. package/references/opentasks/src/client/__tests__/client.test.ts +658 -0
  662. package/references/opentasks/src/client/__tests__/socket-discovery.test.ts +122 -0
  663. package/references/opentasks/src/client/client.ts +560 -0
  664. package/references/opentasks/src/client/index.ts +32 -0
  665. package/references/opentasks/src/config/__tests__/defaults.test.ts +66 -0
  666. package/references/opentasks/src/config/__tests__/env.test.ts +155 -0
  667. package/references/opentasks/src/config/__tests__/index.test.ts +148 -0
  668. package/references/opentasks/src/config/__tests__/loader.test.ts +173 -0
  669. package/references/opentasks/src/config/__tests__/merge.test.ts +121 -0
  670. package/references/opentasks/src/config/__tests__/schema.test.ts +446 -0
  671. package/references/opentasks/src/config/defaults.ts +18 -0
  672. package/references/opentasks/src/config/env.ts +170 -0
  673. package/references/opentasks/src/config/errors.ts +33 -0
  674. package/references/opentasks/src/config/index.ts +63 -0
  675. package/references/opentasks/src/config/loader.ts +90 -0
  676. package/references/opentasks/src/config/merge.ts +64 -0
  677. package/references/opentasks/src/config/schema.ts +767 -0
  678. package/references/opentasks/src/core/__tests__/conditional-redirects.test.ts +116 -0
  679. package/references/opentasks/src/core/__tests__/connections.test.ts +194 -0
  680. package/references/opentasks/src/core/__tests__/hash.test.ts +161 -0
  681. package/references/opentasks/src/core/__tests__/id.test.ts +175 -0
  682. package/references/opentasks/src/core/__tests__/init.test.ts +115 -0
  683. package/references/opentasks/src/core/__tests__/location.test.ts +94 -0
  684. package/references/opentasks/src/core/__tests__/merge-driver.test.ts +300 -0
  685. package/references/opentasks/src/core/__tests__/redirects.test.ts +169 -0
  686. package/references/opentasks/src/core/__tests__/resolve-location-target.test.ts +468 -0
  687. package/references/opentasks/src/core/__tests__/uri.test.ts +228 -0
  688. package/references/opentasks/src/core/__tests__/worktree.test.ts +160 -0
  689. package/references/opentasks/src/core/conditional-redirects.ts +100 -0
  690. package/references/opentasks/src/core/connections.ts +217 -0
  691. package/references/opentasks/src/core/discover.ts +195 -0
  692. package/references/opentasks/src/core/hash.ts +74 -0
  693. package/references/opentasks/src/core/id.ts +174 -0
  694. package/references/opentasks/src/core/index.ts +108 -0
  695. package/references/opentasks/src/core/init.ts +66 -0
  696. package/references/opentasks/src/core/location.ts +139 -0
  697. package/references/opentasks/src/core/merge-driver.ts +280 -0
  698. package/references/opentasks/src/core/redirects.ts +182 -0
  699. package/references/opentasks/src/core/uri.ts +270 -0
  700. package/references/opentasks/src/core/worktree.ts +504 -0
  701. package/references/opentasks/src/daemon/__tests__/e2e-live-agent.test.ts +344 -0
  702. package/references/opentasks/src/daemon/__tests__/e2e-session-pipeline.test.ts +447 -0
  703. package/references/opentasks/src/daemon/__tests__/e2e-watch.test.ts +279 -0
  704. package/references/opentasks/src/daemon/__tests__/entire-linker.test.ts +1074 -0
  705. package/references/opentasks/src/daemon/__tests__/entire-watcher.test.ts +659 -0
  706. package/references/opentasks/src/daemon/__tests__/flush.test.ts +306 -0
  707. package/references/opentasks/src/daemon/__tests__/integration.test.ts +338 -0
  708. package/references/opentasks/src/daemon/__tests__/ipc.test.ts +406 -0
  709. package/references/opentasks/src/daemon/__tests__/lifecycle.test.ts +378 -0
  710. package/references/opentasks/src/daemon/__tests__/lock.test.ts +240 -0
  711. package/references/opentasks/src/daemon/__tests__/methods/graph.test.ts +372 -0
  712. package/references/opentasks/src/daemon/__tests__/methods/provider.test.ts +238 -0
  713. package/references/opentasks/src/daemon/__tests__/methods/tools.test.ts +690 -0
  714. package/references/opentasks/src/daemon/__tests__/multi-location.test.ts +945 -0
  715. package/references/opentasks/src/daemon/__tests__/registry.test.ts +268 -0
  716. package/references/opentasks/src/daemon/__tests__/watcher.test.ts +329 -0
  717. package/references/opentasks/src/daemon/entire-linker.ts +615 -0
  718. package/references/opentasks/src/daemon/entire-watcher.ts +415 -0
  719. package/references/opentasks/src/daemon/factory.ts +133 -0
  720. package/references/opentasks/src/daemon/flush.ts +168 -0
  721. package/references/opentasks/src/daemon/index.ts +120 -0
  722. package/references/opentasks/src/daemon/ipc.ts +491 -0
  723. package/references/opentasks/src/daemon/lifecycle.ts +1106 -0
  724. package/references/opentasks/src/daemon/location-state.ts +481 -0
  725. package/references/opentasks/src/daemon/lock.ts +168 -0
  726. package/references/opentasks/src/daemon/methods/__tests__/graph.test.ts +359 -0
  727. package/references/opentasks/src/daemon/methods/__tests__/provider.test.ts +227 -0
  728. package/references/opentasks/src/daemon/methods/__tests__/tools.test.ts +360 -0
  729. package/references/opentasks/src/daemon/methods/__tests__/watch.test.ts +656 -0
  730. package/references/opentasks/src/daemon/methods/archive.ts +193 -0
  731. package/references/opentasks/src/daemon/methods/graph.ts +274 -0
  732. package/references/opentasks/src/daemon/methods/lifecycle.ts +112 -0
  733. package/references/opentasks/src/daemon/methods/location.ts +118 -0
  734. package/references/opentasks/src/daemon/methods/provider.ts +159 -0
  735. package/references/opentasks/src/daemon/methods/tools.ts +221 -0
  736. package/references/opentasks/src/daemon/methods/watch.ts +206 -0
  737. package/references/opentasks/src/daemon/registry.ts +244 -0
  738. package/references/opentasks/src/daemon/types.ts +163 -0
  739. package/references/opentasks/src/daemon/watcher.ts +248 -0
  740. package/references/opentasks/src/entire/__tests__/agent-registry.test.ts +127 -0
  741. package/references/opentasks/src/entire/__tests__/claude-generator.test.ts +49 -0
  742. package/references/opentasks/src/entire/__tests__/commit-msg.test.ts +89 -0
  743. package/references/opentasks/src/entire/__tests__/cursor-agent.test.ts +224 -0
  744. package/references/opentasks/src/entire/__tests__/flush-sentinel.test.ts +93 -0
  745. package/references/opentasks/src/entire/__tests__/gemini-agent.test.ts +375 -0
  746. package/references/opentasks/src/entire/__tests__/git-hooks.test.ts +85 -0
  747. package/references/opentasks/src/entire/__tests__/hook-managers.test.ts +128 -0
  748. package/references/opentasks/src/entire/__tests__/opencode-agent.test.ts +329 -0
  749. package/references/opentasks/src/entire/__tests__/redaction.test.ts +143 -0
  750. package/references/opentasks/src/entire/__tests__/session-store.test.ts +83 -0
  751. package/references/opentasks/src/entire/__tests__/summarize.test.ts +346 -0
  752. package/references/opentasks/src/entire/__tests__/transcript-timestamp.test.ts +127 -0
  753. package/references/opentasks/src/entire/__tests__/types.test.ts +112 -0
  754. package/references/opentasks/src/entire/__tests__/utils.test.ts +296 -0
  755. package/references/opentasks/src/entire/__tests__/validation.test.ts +103 -0
  756. package/references/opentasks/src/entire/__tests__/worktree.test.ts +66 -0
  757. package/references/opentasks/src/entire/agent/registry.ts +143 -0
  758. package/references/opentasks/src/entire/agent/session-types.ts +117 -0
  759. package/references/opentasks/src/entire/agent/types.ts +217 -0
  760. package/references/opentasks/src/entire/commands/clean.ts +134 -0
  761. package/references/opentasks/src/entire/commands/disable.ts +85 -0
  762. package/references/opentasks/src/entire/commands/doctor.ts +152 -0
  763. package/references/opentasks/src/entire/commands/enable.ts +149 -0
  764. package/references/opentasks/src/entire/commands/explain.ts +271 -0
  765. package/references/opentasks/src/entire/commands/reset.ts +105 -0
  766. package/references/opentasks/src/entire/commands/resume.ts +194 -0
  767. package/references/opentasks/src/entire/commands/rewind.ts +204 -0
  768. package/references/opentasks/src/entire/commands/status.ts +150 -0
  769. package/references/opentasks/src/entire/config.ts +153 -0
  770. package/references/opentasks/src/entire/git-operations.ts +485 -0
  771. package/references/opentasks/src/entire/hooks/git-hooks.ts +171 -0
  772. package/references/opentasks/src/entire/hooks/lifecycle.ts +224 -0
  773. package/references/opentasks/src/entire/index.ts +644 -0
  774. package/references/opentasks/src/entire/security/redaction.ts +263 -0
  775. package/references/opentasks/src/entire/session/state-machine.ts +463 -0
  776. package/references/opentasks/src/entire/store/checkpoint-store.ts +489 -0
  777. package/references/opentasks/src/entire/store/native-store.ts +178 -0
  778. package/references/opentasks/src/entire/store/provider-types.ts +99 -0
  779. package/references/opentasks/src/entire/store/session-store.ts +233 -0
  780. package/references/opentasks/src/entire/strategy/attribution.ts +300 -0
  781. package/references/opentasks/src/entire/strategy/common.ts +222 -0
  782. package/references/opentasks/src/entire/strategy/content-overlap.ts +242 -0
  783. package/references/opentasks/src/entire/strategy/manual-commit.ts +1008 -0
  784. package/references/opentasks/src/entire/strategy/types.ts +285 -0
  785. package/references/opentasks/src/entire/summarize/claude-generator.ts +119 -0
  786. package/references/opentasks/src/entire/summarize/summarize.ts +432 -0
  787. package/references/opentasks/src/entire/types.ts +408 -0
  788. package/references/opentasks/src/entire/utils/chunk-files.ts +49 -0
  789. package/references/opentasks/src/entire/utils/commit-message.ts +65 -0
  790. package/references/opentasks/src/entire/utils/detect-agent.ts +36 -0
  791. package/references/opentasks/src/entire/utils/hook-managers.ts +118 -0
  792. package/references/opentasks/src/entire/utils/ide-tags.ts +32 -0
  793. package/references/opentasks/src/entire/utils/paths.ts +59 -0
  794. package/references/opentasks/src/entire/utils/preview-rewind.ts +86 -0
  795. package/references/opentasks/src/entire/utils/rewind-conflict.ts +121 -0
  796. package/references/opentasks/src/entire/utils/shadow-branch.ts +113 -0
  797. package/references/opentasks/src/entire/utils/string-utils.ts +46 -0
  798. package/references/opentasks/src/entire/utils/todo-extract.ts +193 -0
  799. package/references/opentasks/src/entire/utils/trailers.ts +190 -0
  800. package/references/opentasks/src/entire/utils/transcript-parse.ts +177 -0
  801. package/references/opentasks/src/entire/utils/transcript-timestamp.ts +61 -0
  802. package/references/opentasks/src/entire/utils/tree-ops.ts +227 -0
  803. package/references/opentasks/src/entire/utils/tty.ts +72 -0
  804. package/references/opentasks/src/entire/utils/validation.ts +67 -0
  805. package/references/opentasks/src/entire/utils/worktree.ts +58 -0
  806. package/references/opentasks/src/graph/EdgeTypeRegistry.ts +330 -0
  807. package/references/opentasks/src/graph/FederatedGraph.ts +796 -0
  808. package/references/opentasks/src/graph/GraphologyAdapter.ts +374 -0
  809. package/references/opentasks/src/graph/HydratingFederatedGraph.ts +533 -0
  810. package/references/opentasks/src/graph/__tests__/EdgeTypeRegistry.test.ts +263 -0
  811. package/references/opentasks/src/graph/__tests__/FederatedGraph.test.ts +821 -0
  812. package/references/opentasks/src/graph/__tests__/GraphologyAdapter.test.ts +408 -0
  813. package/references/opentasks/src/graph/__tests__/HydratingFederatedGraph.test.ts +735 -0
  814. package/references/opentasks/src/graph/__tests__/debounce.test.ts +276 -0
  815. package/references/opentasks/src/graph/__tests__/e2e-store-roundtrip.test.ts +349 -0
  816. package/references/opentasks/src/graph/__tests__/edge-cases.test.ts +595 -0
  817. package/references/opentasks/src/graph/__tests__/expansion.test.ts +304 -0
  818. package/references/opentasks/src/graph/__tests__/git-graph-syncer.test.ts +572 -0
  819. package/references/opentasks/src/graph/__tests__/provider-store.test.ts +1091 -0
  820. package/references/opentasks/src/graph/__tests__/query.test.ts +991 -0
  821. package/references/opentasks/src/graph/__tests__/store.test.ts +998 -0
  822. package/references/opentasks/src/graph/__tests__/sync.test.ts +178 -0
  823. package/references/opentasks/src/graph/__tests__/validation.test.ts +657 -0
  824. package/references/opentasks/src/graph/coordination.ts +454 -0
  825. package/references/opentasks/src/graph/debounce.ts +154 -0
  826. package/references/opentasks/src/graph/expansion.ts +364 -0
  827. package/references/opentasks/src/graph/git-graph-syncer.ts +321 -0
  828. package/references/opentasks/src/graph/history.ts +438 -0
  829. package/references/opentasks/src/graph/index.ts +145 -0
  830. package/references/opentasks/src/graph/provider-store.ts +1077 -0
  831. package/references/opentasks/src/graph/query.ts +651 -0
  832. package/references/opentasks/src/graph/store.ts +861 -0
  833. package/references/opentasks/src/graph/sync.ts +116 -0
  834. package/references/opentasks/src/graph/types.ts +420 -0
  835. package/references/opentasks/src/graph/validation.ts +520 -0
  836. package/references/opentasks/src/index.ts +270 -0
  837. package/references/opentasks/src/materialization/CLAUDE.md +88 -0
  838. package/references/opentasks/src/materialization/README.md +187 -0
  839. package/references/opentasks/src/materialization/__tests__/archive-methods.test.ts +194 -0
  840. package/references/opentasks/src/materialization/__tests__/archiver.test.ts +528 -0
  841. package/references/opentasks/src/materialization/__tests__/config.test.ts +123 -0
  842. package/references/opentasks/src/materialization/__tests__/git-remote-store.test.ts +533 -0
  843. package/references/opentasks/src/materialization/__tests__/graph-id.test.ts +82 -0
  844. package/references/opentasks/src/materialization/__tests__/http-remote-store.test.ts +263 -0
  845. package/references/opentasks/src/materialization/__tests__/materialize-before-archive.test.ts +246 -0
  846. package/references/opentasks/src/materialization/__tests__/remote-store-factory.test.ts +152 -0
  847. package/references/opentasks/src/materialization/__tests__/snapshot.test.ts +209 -0
  848. package/references/opentasks/src/materialization/archiver.ts +318 -0
  849. package/references/opentasks/src/materialization/git-archive-store.ts +568 -0
  850. package/references/opentasks/src/materialization/git-remote-store.ts +551 -0
  851. package/references/opentasks/src/materialization/graph-id.ts +173 -0
  852. package/references/opentasks/src/materialization/http-remote-store.ts +190 -0
  853. package/references/opentasks/src/materialization/index.ts +62 -0
  854. package/references/opentasks/src/materialization/remote-store-factory.ts +55 -0
  855. package/references/opentasks/src/materialization/snapshot.ts +230 -0
  856. package/references/opentasks/src/materialization/types.ts +410 -0
  857. package/references/opentasks/src/providers/__tests__/beads.test.ts +752 -0
  858. package/references/opentasks/src/providers/__tests__/claude-tasks.test.ts +485 -0
  859. package/references/opentasks/src/providers/__tests__/entire-e2e.test.ts +692 -0
  860. package/references/opentasks/src/providers/__tests__/entire-sessionlog-e2e.test.ts +1113 -0
  861. package/references/opentasks/src/providers/__tests__/entire.test.ts +1016 -0
  862. package/references/opentasks/src/providers/__tests__/from-config.test.ts +183 -0
  863. package/references/opentasks/src/providers/__tests__/global.test.ts +515 -0
  864. package/references/opentasks/src/providers/__tests__/materialization.test.ts +567 -0
  865. package/references/opentasks/src/providers/__tests__/native.test.ts +693 -0
  866. package/references/opentasks/src/providers/__tests__/registry.test.ts +232 -0
  867. package/references/opentasks/src/providers/beads.ts +1155 -0
  868. package/references/opentasks/src/providers/claude-tasks.ts +402 -0
  869. package/references/opentasks/src/providers/entire.ts +608 -0
  870. package/references/opentasks/src/providers/from-config.ts +210 -0
  871. package/references/opentasks/src/providers/global.ts +460 -0
  872. package/references/opentasks/src/providers/index.ts +147 -0
  873. package/references/opentasks/src/providers/location.ts +237 -0
  874. package/references/opentasks/src/providers/materialization.ts +346 -0
  875. package/references/opentasks/src/providers/native.ts +725 -0
  876. package/references/opentasks/src/providers/registry.ts +114 -0
  877. package/references/opentasks/src/providers/sudocode.ts +1292 -0
  878. package/references/opentasks/src/providers/sync.ts +485 -0
  879. package/references/opentasks/src/providers/traits/RelationshipQueryable.ts +169 -0
  880. package/references/opentasks/src/providers/traits/TaskManageable.ts +211 -0
  881. package/references/opentasks/src/providers/traits/Watchable.ts +260 -0
  882. package/references/opentasks/src/providers/traits/__tests__/RelationshipQueryable.test.ts +217 -0
  883. package/references/opentasks/src/providers/traits/__tests__/TaskManageable.test.ts +241 -0
  884. package/references/opentasks/src/providers/traits/index.ts +42 -0
  885. package/references/opentasks/src/providers/types.ts +439 -0
  886. package/references/opentasks/src/schema/__tests__/validation.test.ts +283 -0
  887. package/references/opentasks/src/schema/base.ts +88 -0
  888. package/references/opentasks/src/schema/edges.ts +78 -0
  889. package/references/opentasks/src/schema/index.ts +37 -0
  890. package/references/opentasks/src/schema/nodes.ts +119 -0
  891. package/references/opentasks/src/schema/storage.ts +130 -0
  892. package/references/opentasks/src/schema/validation.ts +209 -0
  893. package/references/opentasks/src/storage/__tests__/atomic-write.test.ts +227 -0
  894. package/references/opentasks/src/storage/__tests__/file-lock.test.ts +120 -0
  895. package/references/opentasks/src/storage/__tests__/jsonl.test.ts +267 -0
  896. package/references/opentasks/src/storage/__tests__/locked-writer.test.ts +134 -0
  897. package/references/opentasks/src/storage/__tests__/sqlite.test.ts +572 -0
  898. package/references/opentasks/src/storage/atomic-write.ts +86 -0
  899. package/references/opentasks/src/storage/file-lock.ts +215 -0
  900. package/references/opentasks/src/storage/index.ts +24 -0
  901. package/references/opentasks/src/storage/interface.ts +289 -0
  902. package/references/opentasks/src/storage/jsonl.ts +264 -0
  903. package/references/opentasks/src/storage/locked-writer.ts +140 -0
  904. package/references/opentasks/src/storage/sqlite-schema.ts +177 -0
  905. package/references/opentasks/src/storage/sqlite.ts +791 -0
  906. package/references/opentasks/src/tools/__tests__/annotate.test.ts +381 -0
  907. package/references/opentasks/src/tools/__tests__/link.test.ts +299 -0
  908. package/references/opentasks/src/tools/__tests__/query.test.ts +350 -0
  909. package/references/opentasks/src/tools/__tests__/task.test.ts +218 -0
  910. package/references/opentasks/src/tools/annotate.ts +277 -0
  911. package/references/opentasks/src/tools/index.ts +57 -0
  912. package/references/opentasks/src/tools/link.ts +163 -0
  913. package/references/opentasks/src/tools/query.ts +468 -0
  914. package/references/opentasks/src/tools/task.ts +213 -0
  915. package/references/opentasks/src/tools/types.ts +451 -0
  916. package/references/opentasks/src/tracking/__tests__/claude-tool-categorizer.test.ts +223 -0
  917. package/references/opentasks/src/tracking/__tests__/transcript-extractor.test.ts +262 -0
  918. package/references/opentasks/src/tracking/claude-tool-categorizer.ts +155 -0
  919. package/references/opentasks/src/tracking/index.ts +32 -0
  920. package/references/opentasks/src/tracking/skill-tracker.ts +322 -0
  921. package/references/opentasks/src/tracking/transcript-extractor.ts +225 -0
  922. package/references/opentasks/tests/e2e/helpers/assertions.ts +211 -0
  923. package/references/opentasks/tests/e2e/helpers/beads-helpers.ts +487 -0
  924. package/references/opentasks/tests/e2e/helpers/fixtures.ts +236 -0
  925. package/references/opentasks/tests/e2e/helpers/index.ts +122 -0
  926. package/references/opentasks/tests/e2e/helpers/sudocode-helpers.ts +341 -0
  927. package/references/opentasks/tests/e2e/helpers/system-setup.ts +504 -0
  928. package/references/opentasks/tests/e2e/helpers/test-agent.ts +504 -0
  929. package/references/opentasks/tests/e2e/infrastructure.e2e.test.ts +521 -0
  930. package/references/opentasks/tests/e2e/skill-tracking.e2e.test.ts +625 -0
  931. package/references/opentasks/tests/e2e/workflows/feedback-loop.e2e.test.ts +279 -0
  932. package/references/opentasks/tests/e2e/workflows/multi-agent.e2e.test.ts +304 -0
  933. package/references/opentasks/tests/e2e/workflows/provider-sync/background-sync.e2e.test.ts +292 -0
  934. package/references/opentasks/tests/e2e/workflows/provider-sync/beads-provider-compat.e2e.test.ts +249 -0
  935. package/references/opentasks/tests/e2e/workflows/provider-sync/cross-provider-edges.e2e.test.ts +407 -0
  936. package/references/opentasks/tests/e2e/workflows/provider-sync/federated-ready.e2e.test.ts +504 -0
  937. package/references/opentasks/tests/e2e/workflows/provider-sync/hydration.e2e.test.ts +340 -0
  938. package/references/opentasks/tests/e2e/workflows/provider-sync/materialization.e2e.test.ts +370 -0
  939. package/references/opentasks/tests/e2e/workflows/provider-sync/sudocode-provider-compat.e2e.test.ts +683 -0
  940. package/references/opentasks/tests/e2e/workflows/provider-sync/watchable-beads.e2e.test.ts +573 -0
  941. package/references/opentasks/tests/e2e/workflows/spec-driven.e2e.test.ts +244 -0
  942. package/references/opentasks/tests/e2e/worktree-location.e2e.test.ts +699 -0
  943. package/references/opentasks/tests/integration/daemon/helpers.ts +147 -0
  944. package/references/opentasks/tests/integration/daemon/ipc.integration.test.ts +343 -0
  945. package/references/opentasks/tests/integration/daemon/lifecycle.integration.test.ts +407 -0
  946. package/references/opentasks/tests/integration/graph/federated-graph.integration.test.ts +660 -0
  947. package/references/opentasks/tests/integration/helpers/flags.ts +28 -0
  948. package/references/opentasks/tests/integration/helpers/index.ts +47 -0
  949. package/references/opentasks/tests/integration/helpers/process.ts +133 -0
  950. package/references/opentasks/tests/integration/helpers/temp.ts +105 -0
  951. package/references/opentasks/tests/integration/helpers/wait.ts +133 -0
  952. package/references/opentasks/tests/integration/helpers.test.ts +120 -0
  953. package/references/opentasks/tests/integration/providers/beads-task-manageable.integration.test.ts +450 -0
  954. package/references/opentasks/tests/integration/providers/beads.integration.test.ts +388 -0
  955. package/references/opentasks/tests/integration/providers/native-task-manageable.integration.test.ts +667 -0
  956. package/references/opentasks/tests/integration/providers/sudocode-task-manageable.integration.test.ts +406 -0
  957. package/references/opentasks/tests/integration/providers/sudocode.integration.test.ts +342 -0
  958. package/references/opentasks/tests/integration/storage/jsonl-durability.integration.test.ts +390 -0
  959. package/references/opentasks/tests/integration/storage/sqlite-durability.integration.test.ts +527 -0
  960. package/references/opentasks/tests/integration/worktree/redirect-location-resolution.integration.test.ts +578 -0
  961. package/references/opentasks/tests/integration/worktree/worktree-flow.integration.test.ts +656 -0
  962. package/references/opentasks/tsconfig.json +18 -0
  963. package/references/opentasks/vitest.config.ts +27 -0
  964. package/references/opentasks/vitest.e2e.config.ts +35 -0
  965. package/references/opentasks/vitest.integration.config.ts +19 -0
  966. package/references/openteams/.claude/settings.json +6 -0
  967. package/references/openteams/CLAUDE.md +98 -0
  968. package/references/openteams/README.md +508 -0
  969. package/references/openteams/SKILL.md +198 -0
  970. package/references/openteams/design.md +250 -0
  971. package/references/openteams/docs/visual-editor-design.md +1225 -0
  972. package/references/openteams/editor/index.html +15 -0
  973. package/references/openteams/editor/package.json +39 -0
  974. package/references/openteams/editor/src/App.tsx +48 -0
  975. package/references/openteams/editor/src/components/canvas/Canvas.tsx +131 -0
  976. package/references/openteams/editor/src/components/canvas/QuickAddMenu.tsx +134 -0
  977. package/references/openteams/editor/src/components/edges/PeerRouteEdge.tsx +82 -0
  978. package/references/openteams/editor/src/components/edges/SignalFlowEdge.tsx +77 -0
  979. package/references/openteams/editor/src/components/edges/SpawnEdge.tsx +54 -0
  980. package/references/openteams/editor/src/components/inspector/ChannelInspector.tsx +158 -0
  981. package/references/openteams/editor/src/components/inspector/EdgeInspector.tsx +168 -0
  982. package/references/openteams/editor/src/components/inspector/Inspector.tsx +46 -0
  983. package/references/openteams/editor/src/components/inspector/RoleInspector.tsx +508 -0
  984. package/references/openteams/editor/src/components/inspector/TeamInspector.tsx +126 -0
  985. package/references/openteams/editor/src/components/nodes/ChannelNode.tsx +103 -0
  986. package/references/openteams/editor/src/components/nodes/RoleNode.tsx +157 -0
  987. package/references/openteams/editor/src/components/nodes/node-styles.ts +101 -0
  988. package/references/openteams/editor/src/components/sidebar/Sidebar.tsx +227 -0
  989. package/references/openteams/editor/src/components/toolbar/ExportModal.tsx +110 -0
  990. package/references/openteams/editor/src/components/toolbar/ImportModal.tsx +139 -0
  991. package/references/openteams/editor/src/components/toolbar/Toolbar.tsx +190 -0
  992. package/references/openteams/editor/src/hooks/use-autosave.ts +126 -0
  993. package/references/openteams/editor/src/hooks/use-keyboard.ts +106 -0
  994. package/references/openteams/editor/src/hooks/use-validation.ts +45 -0
  995. package/references/openteams/editor/src/index.css +245 -0
  996. package/references/openteams/editor/src/lib/auto-layout.ts +51 -0
  997. package/references/openteams/editor/src/lib/bundled-templates.ts +42 -0
  998. package/references/openteams/editor/src/lib/compiler.ts +75 -0
  999. package/references/openteams/editor/src/lib/load-template.ts +103 -0
  1000. package/references/openteams/editor/src/lib/rebuild-edges.ts +104 -0
  1001. package/references/openteams/editor/src/lib/serializer.ts +408 -0
  1002. package/references/openteams/editor/src/lib/signal-catalog.ts +50 -0
  1003. package/references/openteams/editor/src/lib/validator.ts +172 -0
  1004. package/references/openteams/editor/src/main.tsx +10 -0
  1005. package/references/openteams/editor/src/stores/canvas-store.ts +80 -0
  1006. package/references/openteams/editor/src/stores/config-store.ts +243 -0
  1007. package/references/openteams/editor/src/stores/history-store.ts +143 -0
  1008. package/references/openteams/editor/src/stores/theme-store.ts +66 -0
  1009. package/references/openteams/editor/src/stores/ui-store.ts +46 -0
  1010. package/references/openteams/editor/src/stores/validation-store.ts +27 -0
  1011. package/references/openteams/editor/src/types/editor.ts +74 -0
  1012. package/references/openteams/editor/src/vite-env.d.ts +1 -0
  1013. package/references/openteams/editor/tests/compiler.test.ts +151 -0
  1014. package/references/openteams/editor/tests/e2e-add-remove.test.ts +386 -0
  1015. package/references/openteams/editor/tests/e2e-components.test.tsx +424 -0
  1016. package/references/openteams/editor/tests/e2e-export-roundtrip.test.ts +299 -0
  1017. package/references/openteams/editor/tests/e2e-template-load.test.ts +204 -0
  1018. package/references/openteams/editor/tests/e2e-ui-store.test.ts +126 -0
  1019. package/references/openteams/editor/tests/e2e-undo-redo.test.ts +203 -0
  1020. package/references/openteams/editor/tests/e2e-validation.test.ts +307 -0
  1021. package/references/openteams/editor/tests/serializer.test.ts +142 -0
  1022. package/references/openteams/editor/tests/setup.ts +52 -0
  1023. package/references/openteams/editor/tests/validator.test.ts +92 -0
  1024. package/references/openteams/editor/tsconfig.json +21 -0
  1025. package/references/openteams/editor/tsconfig.tsbuildinfo +1 -0
  1026. package/references/openteams/editor/vite.config.ts +28 -0
  1027. package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +16 -0
  1028. package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +5 -0
  1029. package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +24 -0
  1030. package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +5 -0
  1031. package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +25 -0
  1032. package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +5 -0
  1033. package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +21 -0
  1034. package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +5 -0
  1035. package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +20 -0
  1036. package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +5 -0
  1037. package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +17 -0
  1038. package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +5 -0
  1039. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +23 -0
  1040. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +5 -0
  1041. package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +27 -0
  1042. package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +5 -0
  1043. package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +21 -0
  1044. package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +5 -0
  1045. package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +16 -0
  1046. package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +5 -0
  1047. package/references/openteams/examples/bmad-method/roles/analyst.yaml +9 -0
  1048. package/references/openteams/examples/bmad-method/roles/architect.yaml +9 -0
  1049. package/references/openteams/examples/bmad-method/roles/developer.yaml +8 -0
  1050. package/references/openteams/examples/bmad-method/roles/master.yaml +8 -0
  1051. package/references/openteams/examples/bmad-method/roles/pm.yaml +9 -0
  1052. package/references/openteams/examples/bmad-method/roles/qa.yaml +8 -0
  1053. package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +8 -0
  1054. package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +9 -0
  1055. package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +8 -0
  1056. package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +8 -0
  1057. package/references/openteams/examples/bmad-method/team.yaml +161 -0
  1058. package/references/openteams/examples/bug-fix-pipeline/roles/fixer.yaml +9 -0
  1059. package/references/openteams/examples/bug-fix-pipeline/roles/investigator.yaml +8 -0
  1060. package/references/openteams/examples/bug-fix-pipeline/roles/pr-creator.yaml +6 -0
  1061. package/references/openteams/examples/bug-fix-pipeline/roles/triager.yaml +7 -0
  1062. package/references/openteams/examples/bug-fix-pipeline/roles/verifier.yaml +8 -0
  1063. package/references/openteams/examples/bug-fix-pipeline/team.yaml +88 -0
  1064. package/references/openteams/examples/codebase-migration/roles/assessor.yaml +7 -0
  1065. package/references/openteams/examples/codebase-migration/roles/migrator.yaml +9 -0
  1066. package/references/openteams/examples/codebase-migration/roles/planner.yaml +5 -0
  1067. package/references/openteams/examples/codebase-migration/roles/test-extractor.yaml +9 -0
  1068. package/references/openteams/examples/codebase-migration/roles/validator.yaml +7 -0
  1069. package/references/openteams/examples/codebase-migration/team.yaml +81 -0
  1070. package/references/openteams/examples/docs-sync/roles/adr-writer.yaml +7 -0
  1071. package/references/openteams/examples/docs-sync/roles/api-doc-writer.yaml +7 -0
  1072. package/references/openteams/examples/docs-sync/roles/change-detector.yaml +7 -0
  1073. package/references/openteams/examples/docs-sync/roles/doc-reviewer.yaml +7 -0
  1074. package/references/openteams/examples/docs-sync/roles/guide-writer.yaml +7 -0
  1075. package/references/openteams/examples/docs-sync/team.yaml +84 -0
  1076. package/references/openteams/examples/gsd/prompts/codebase-mapper/ROLE.md +17 -0
  1077. package/references/openteams/examples/gsd/prompts/codebase-mapper/SOUL.md +5 -0
  1078. package/references/openteams/examples/gsd/prompts/debugger/ROLE.md +25 -0
  1079. package/references/openteams/examples/gsd/prompts/debugger/SOUL.md +5 -0
  1080. package/references/openteams/examples/gsd/prompts/executor/ROLE.md +34 -0
  1081. package/references/openteams/examples/gsd/prompts/executor/SOUL.md +5 -0
  1082. package/references/openteams/examples/gsd/prompts/integration-checker/ROLE.md +18 -0
  1083. package/references/openteams/examples/gsd/prompts/integration-checker/SOUL.md +3 -0
  1084. package/references/openteams/examples/gsd/prompts/orchestrator/ROLE.md +42 -0
  1085. package/references/openteams/examples/gsd/prompts/orchestrator/SOUL.md +5 -0
  1086. package/references/openteams/examples/gsd/prompts/phase-researcher/ROLE.md +15 -0
  1087. package/references/openteams/examples/gsd/prompts/phase-researcher/SOUL.md +3 -0
  1088. package/references/openteams/examples/gsd/prompts/plan-checker/ROLE.md +17 -0
  1089. package/references/openteams/examples/gsd/prompts/plan-checker/SOUL.md +3 -0
  1090. package/references/openteams/examples/gsd/prompts/planner/ROLE.md +28 -0
  1091. package/references/openteams/examples/gsd/prompts/planner/SOUL.md +5 -0
  1092. package/references/openteams/examples/gsd/prompts/project-researcher/ROLE.md +16 -0
  1093. package/references/openteams/examples/gsd/prompts/project-researcher/SOUL.md +3 -0
  1094. package/references/openteams/examples/gsd/prompts/research-synthesizer/ROLE.md +13 -0
  1095. package/references/openteams/examples/gsd/prompts/research-synthesizer/SOUL.md +3 -0
  1096. package/references/openteams/examples/gsd/prompts/roadmapper/ROLE.md +14 -0
  1097. package/references/openteams/examples/gsd/prompts/roadmapper/SOUL.md +3 -0
  1098. package/references/openteams/examples/gsd/prompts/verifier/ROLE.md +19 -0
  1099. package/references/openteams/examples/gsd/prompts/verifier/SOUL.md +5 -0
  1100. package/references/openteams/examples/gsd/roles/codebase-mapper.yaml +8 -0
  1101. package/references/openteams/examples/gsd/roles/debugger.yaml +8 -0
  1102. package/references/openteams/examples/gsd/roles/executor.yaml +8 -0
  1103. package/references/openteams/examples/gsd/roles/integration-checker.yaml +8 -0
  1104. package/references/openteams/examples/gsd/roles/orchestrator.yaml +9 -0
  1105. package/references/openteams/examples/gsd/roles/phase-researcher.yaml +7 -0
  1106. package/references/openteams/examples/gsd/roles/plan-checker.yaml +8 -0
  1107. package/references/openteams/examples/gsd/roles/planner.yaml +8 -0
  1108. package/references/openteams/examples/gsd/roles/project-researcher.yaml +8 -0
  1109. package/references/openteams/examples/gsd/roles/research-synthesizer.yaml +7 -0
  1110. package/references/openteams/examples/gsd/roles/roadmapper.yaml +7 -0
  1111. package/references/openteams/examples/gsd/roles/verifier.yaml +8 -0
  1112. package/references/openteams/examples/gsd/team.yaml +154 -0
  1113. package/references/openteams/examples/incident-response/roles/communicator.yaml +5 -0
  1114. package/references/openteams/examples/incident-response/roles/fix-proposer.yaml +7 -0
  1115. package/references/openteams/examples/incident-response/roles/incident-triager.yaml +8 -0
  1116. package/references/openteams/examples/incident-response/roles/investigator.yaml +8 -0
  1117. package/references/openteams/examples/incident-response/team.yaml +68 -0
  1118. package/references/openteams/examples/pr-review-checks/roles/code-reviewer.yaml +7 -0
  1119. package/references/openteams/examples/pr-review-checks/roles/security-scanner.yaml +6 -0
  1120. package/references/openteams/examples/pr-review-checks/roles/summarizer.yaml +6 -0
  1121. package/references/openteams/examples/pr-review-checks/roles/test-checker.yaml +8 -0
  1122. package/references/openteams/examples/pr-review-checks/team.yaml +64 -0
  1123. package/references/openteams/examples/security-audit/roles/code-analyzer.yaml +6 -0
  1124. package/references/openteams/examples/security-audit/roles/dep-scanner.yaml +7 -0
  1125. package/references/openteams/examples/security-audit/roles/fixer.yaml +9 -0
  1126. package/references/openteams/examples/security-audit/roles/pr-creator.yaml +6 -0
  1127. package/references/openteams/examples/security-audit/roles/prioritizer.yaml +6 -0
  1128. package/references/openteams/examples/security-audit/roles/secrets-scanner.yaml +6 -0
  1129. package/references/openteams/examples/security-audit/roles/verifier.yaml +8 -0
  1130. package/references/openteams/examples/security-audit/team.yaml +102 -0
  1131. package/references/openteams/media/banner.png +0 -0
  1132. package/references/openteams/media/editor.png +0 -0
  1133. package/references/openteams/package-lock.json +4804 -0
  1134. package/references/openteams/package.json +58 -0
  1135. package/references/openteams/schema/role.schema.json +147 -0
  1136. package/references/openteams/schema/team.schema.json +311 -0
  1137. package/references/openteams/src/cli/editor.ts +170 -0
  1138. package/references/openteams/src/cli/generate.test.ts +191 -0
  1139. package/references/openteams/src/cli/generate.ts +242 -0
  1140. package/references/openteams/src/cli/prompt-utils.ts +42 -0
  1141. package/references/openteams/src/cli/template.test.ts +365 -0
  1142. package/references/openteams/src/cli/template.ts +205 -0
  1143. package/references/openteams/src/cli.ts +22 -0
  1144. package/references/openteams/src/generators/agent-prompt-generator.test.ts +426 -0
  1145. package/references/openteams/src/generators/agent-prompt-generator.ts +556 -0
  1146. package/references/openteams/src/generators/package-generator.test.ts +129 -0
  1147. package/references/openteams/src/generators/package-generator.ts +110 -0
  1148. package/references/openteams/src/generators/skill-generator.test.ts +274 -0
  1149. package/references/openteams/src/generators/skill-generator.ts +394 -0
  1150. package/references/openteams/src/index.ts +84 -0
  1151. package/references/openteams/src/template/builtins.test.ts +74 -0
  1152. package/references/openteams/src/template/builtins.ts +108 -0
  1153. package/references/openteams/src/template/install-service.test.ts +452 -0
  1154. package/references/openteams/src/template/install-service.ts +332 -0
  1155. package/references/openteams/src/template/loader.test.ts +1696 -0
  1156. package/references/openteams/src/template/loader.ts +804 -0
  1157. package/references/openteams/src/template/resolver.test.ts +304 -0
  1158. package/references/openteams/src/template/resolver.ts +251 -0
  1159. package/references/openteams/src/template/types.ts +229 -0
  1160. package/references/openteams/tsconfig.cjs.json +7 -0
  1161. package/references/openteams/tsconfig.esm.json +8 -0
  1162. package/references/openteams/tsconfig.json +16 -0
  1163. package/references/openteams/vitest.config.ts +9 -0
  1164. package/references/sessionlog/.husky/pre-commit +1 -0
  1165. package/references/sessionlog/.lintstagedrc.json +4 -0
  1166. package/references/sessionlog/.prettierignore +4 -0
  1167. package/references/sessionlog/.prettierrc.json +11 -0
  1168. package/references/sessionlog/LICENSE +21 -0
  1169. package/references/sessionlog/README.md +453 -0
  1170. package/references/sessionlog/eslint.config.js +58 -0
  1171. package/references/sessionlog/package-lock.json +3672 -0
  1172. package/references/sessionlog/package.json +65 -0
  1173. package/references/sessionlog/src/__tests__/agent-hooks.test.ts +570 -0
  1174. package/references/sessionlog/src/__tests__/agent-registry.test.ts +127 -0
  1175. package/references/sessionlog/src/__tests__/claude-code-hooks.test.ts +225 -0
  1176. package/references/sessionlog/src/__tests__/claude-generator.test.ts +46 -0
  1177. package/references/sessionlog/src/__tests__/commit-msg.test.ts +86 -0
  1178. package/references/sessionlog/src/__tests__/cursor-agent.test.ts +224 -0
  1179. package/references/sessionlog/src/__tests__/e2e-live.test.ts +890 -0
  1180. package/references/sessionlog/src/__tests__/event-log.test.ts +183 -0
  1181. package/references/sessionlog/src/__tests__/flush-sentinel.test.ts +105 -0
  1182. package/references/sessionlog/src/__tests__/gemini-agent.test.ts +375 -0
  1183. package/references/sessionlog/src/__tests__/git-hooks.test.ts +78 -0
  1184. package/references/sessionlog/src/__tests__/hook-managers.test.ts +121 -0
  1185. package/references/sessionlog/src/__tests__/lifecycle-tasks.test.ts +759 -0
  1186. package/references/sessionlog/src/__tests__/opencode-agent.test.ts +338 -0
  1187. package/references/sessionlog/src/__tests__/redaction.test.ts +136 -0
  1188. package/references/sessionlog/src/__tests__/session-repo.test.ts +353 -0
  1189. package/references/sessionlog/src/__tests__/session-store.test.ts +166 -0
  1190. package/references/sessionlog/src/__tests__/setup-ccweb.test.ts +466 -0
  1191. package/references/sessionlog/src/__tests__/skill-live.test.ts +461 -0
  1192. package/references/sessionlog/src/__tests__/summarize.test.ts +348 -0
  1193. package/references/sessionlog/src/__tests__/task-plan-e2e.test.ts +610 -0
  1194. package/references/sessionlog/src/__tests__/task-plan-live.test.ts +632 -0
  1195. package/references/sessionlog/src/__tests__/transcript-timestamp.test.ts +121 -0
  1196. package/references/sessionlog/src/__tests__/types.test.ts +166 -0
  1197. package/references/sessionlog/src/__tests__/utils.test.ts +333 -0
  1198. package/references/sessionlog/src/__tests__/validation.test.ts +103 -0
  1199. package/references/sessionlog/src/__tests__/worktree.test.ts +57 -0
  1200. package/references/sessionlog/src/agent/registry.ts +143 -0
  1201. package/references/sessionlog/src/agent/session-types.ts +113 -0
  1202. package/references/sessionlog/src/agent/types.ts +220 -0
  1203. package/references/sessionlog/src/cli.ts +597 -0
  1204. package/references/sessionlog/src/commands/clean.ts +133 -0
  1205. package/references/sessionlog/src/commands/disable.ts +84 -0
  1206. package/references/sessionlog/src/commands/doctor.ts +145 -0
  1207. package/references/sessionlog/src/commands/enable.ts +202 -0
  1208. package/references/sessionlog/src/commands/explain.ts +261 -0
  1209. package/references/sessionlog/src/commands/reset.ts +105 -0
  1210. package/references/sessionlog/src/commands/resume.ts +180 -0
  1211. package/references/sessionlog/src/commands/rewind.ts +195 -0
  1212. package/references/sessionlog/src/commands/setup-ccweb.ts +275 -0
  1213. package/references/sessionlog/src/commands/status.ts +172 -0
  1214. package/references/sessionlog/src/config.ts +165 -0
  1215. package/references/sessionlog/src/events/event-log.ts +126 -0
  1216. package/references/sessionlog/src/git-operations.ts +558 -0
  1217. package/references/sessionlog/src/hooks/git-hooks.ts +165 -0
  1218. package/references/sessionlog/src/hooks/lifecycle.ts +391 -0
  1219. package/references/sessionlog/src/index.ts +650 -0
  1220. package/references/sessionlog/src/security/redaction.ts +283 -0
  1221. package/references/sessionlog/src/session/state-machine.ts +452 -0
  1222. package/references/sessionlog/src/store/checkpoint-store.ts +509 -0
  1223. package/references/sessionlog/src/store/native-store.ts +173 -0
  1224. package/references/sessionlog/src/store/provider-types.ts +99 -0
  1225. package/references/sessionlog/src/store/session-store.ts +266 -0
  1226. package/references/sessionlog/src/strategy/attribution.ts +296 -0
  1227. package/references/sessionlog/src/strategy/common.ts +207 -0
  1228. package/references/sessionlog/src/strategy/content-overlap.ts +228 -0
  1229. package/references/sessionlog/src/strategy/manual-commit.ts +988 -0
  1230. package/references/sessionlog/src/strategy/types.ts +279 -0
  1231. package/references/sessionlog/src/summarize/claude-generator.ts +115 -0
  1232. package/references/sessionlog/src/summarize/summarize.ts +432 -0
  1233. package/references/sessionlog/src/types.ts +508 -0
  1234. package/references/sessionlog/src/utils/chunk-files.ts +49 -0
  1235. package/references/sessionlog/src/utils/commit-message.ts +65 -0
  1236. package/references/sessionlog/src/utils/detect-agent.ts +36 -0
  1237. package/references/sessionlog/src/utils/hook-managers.ts +125 -0
  1238. package/references/sessionlog/src/utils/ide-tags.ts +32 -0
  1239. package/references/sessionlog/src/utils/paths.ts +79 -0
  1240. package/references/sessionlog/src/utils/preview-rewind.ts +80 -0
  1241. package/references/sessionlog/src/utils/rewind-conflict.ts +121 -0
  1242. package/references/sessionlog/src/utils/shadow-branch.ts +109 -0
  1243. package/references/sessionlog/src/utils/string-utils.ts +46 -0
  1244. package/references/sessionlog/src/utils/todo-extract.ts +188 -0
  1245. package/references/sessionlog/src/utils/trailers.ts +187 -0
  1246. package/references/sessionlog/src/utils/transcript-parse.ts +177 -0
  1247. package/references/sessionlog/src/utils/transcript-timestamp.ts +59 -0
  1248. package/references/sessionlog/src/utils/tree-ops.ts +219 -0
  1249. package/references/sessionlog/src/utils/tty.ts +72 -0
  1250. package/references/sessionlog/src/utils/validation.ts +65 -0
  1251. package/references/sessionlog/src/utils/worktree.ts +58 -0
  1252. package/references/sessionlog/src/wire-types.ts +59 -0
  1253. package/references/sessionlog/templates/setup-env.sh +153 -0
  1254. package/references/sessionlog/tsconfig.json +18 -0
  1255. package/references/sessionlog/vitest.config.ts +12 -0
  1256. package/references/skill-tree/.claude/settings.json +6 -0
  1257. package/references/skill-tree/.sudocode/issues.jsonl +19 -0
  1258. package/references/skill-tree/.sudocode/specs.jsonl +3 -0
  1259. package/references/skill-tree/CLAUDE.md +132 -0
  1260. package/references/skill-tree/README.md +396 -0
  1261. package/references/skill-tree/docs/GAPS_v1.md +221 -0
  1262. package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
  1263. package/references/skill-tree/docs/TODOS.md +91 -0
  1264. package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
  1265. package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
  1266. package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
  1267. package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
  1268. package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
  1269. package/references/skill-tree/docs/scraper/README.md +170 -0
  1270. package/references/skill-tree/examples/basic-usage.ts +157 -0
  1271. package/references/skill-tree/package-lock.json +1852 -0
  1272. package/references/skill-tree/package.json +66 -0
  1273. package/references/skill-tree/plan.md +78 -0
  1274. package/references/skill-tree/scraper/README.md +123 -0
  1275. package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
  1276. package/references/skill-tree/scraper/docs/PLAN.md +336 -0
  1277. package/references/skill-tree/scraper/drizzle.config.ts +10 -0
  1278. package/references/skill-tree/scraper/package-lock.json +6329 -0
  1279. package/references/skill-tree/scraper/package.json +68 -0
  1280. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
  1281. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
  1282. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
  1283. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
  1284. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
  1285. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
  1286. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
  1287. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
  1288. package/references/skill-tree/scraper/tsup.config.ts +14 -0
  1289. package/references/skill-tree/scraper/vitest.config.ts +17 -0
  1290. package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
  1291. package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
  1292. package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
  1293. package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
  1294. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
  1295. package/references/skill-tree/test/run-all.ts +106 -0
  1296. package/references/skill-tree/test/utils.ts +128 -0
  1297. package/references/skill-tree/vitest.config.ts +16 -0
  1298. package/references/swarmkit/LICENSE +21 -0
  1299. package/references/swarmkit/README.md +130 -0
  1300. package/references/swarmkit/docs/design.md +453 -0
  1301. package/references/swarmkit/docs/package-setup-reference.md +519 -0
  1302. package/references/swarmkit/package-lock.json +1938 -0
  1303. package/references/swarmkit/package.json +43 -0
  1304. package/references/swarmkit/src/cli.ts +41 -0
  1305. package/references/swarmkit/src/commands/add.ts +126 -0
  1306. package/references/swarmkit/src/commands/doctor.ts +117 -0
  1307. package/references/swarmkit/src/commands/hive.ts +279 -0
  1308. package/references/swarmkit/src/commands/init/phases/configure.ts +74 -0
  1309. package/references/swarmkit/src/commands/init/phases/global-setup.ts +104 -0
  1310. package/references/swarmkit/src/commands/init/phases/packages.ts +44 -0
  1311. package/references/swarmkit/src/commands/init/phases/project.ts +81 -0
  1312. package/references/swarmkit/src/commands/init/phases/use-case.ts +47 -0
  1313. package/references/swarmkit/src/commands/init/state.test.ts +23 -0
  1314. package/references/swarmkit/src/commands/init/state.ts +22 -0
  1315. package/references/swarmkit/src/commands/init/wizard.ts +160 -0
  1316. package/references/swarmkit/src/commands/init.ts +17 -0
  1317. package/references/swarmkit/src/commands/login.ts +106 -0
  1318. package/references/swarmkit/src/commands/logout.ts +22 -0
  1319. package/references/swarmkit/src/commands/remove.ts +72 -0
  1320. package/references/swarmkit/src/commands/status.ts +101 -0
  1321. package/references/swarmkit/src/commands/update.ts +62 -0
  1322. package/references/swarmkit/src/commands/whoami.ts +41 -0
  1323. package/references/swarmkit/src/config/global.test.ts +258 -0
  1324. package/references/swarmkit/src/config/global.ts +141 -0
  1325. package/references/swarmkit/src/config/keys.test.ts +109 -0
  1326. package/references/swarmkit/src/config/keys.ts +49 -0
  1327. package/references/swarmkit/src/doctor/checks.test.ts +366 -0
  1328. package/references/swarmkit/src/doctor/checks.ts +292 -0
  1329. package/references/swarmkit/src/doctor/types.ts +33 -0
  1330. package/references/swarmkit/src/hub/auth-flow.test.ts +127 -0
  1331. package/references/swarmkit/src/hub/auth-flow.ts +144 -0
  1332. package/references/swarmkit/src/hub/client.test.ts +224 -0
  1333. package/references/swarmkit/src/hub/client.ts +185 -0
  1334. package/references/swarmkit/src/hub/credentials.test.ts +132 -0
  1335. package/references/swarmkit/src/hub/credentials.ts +51 -0
  1336. package/references/swarmkit/src/index.ts +116 -0
  1337. package/references/swarmkit/src/packages/installer.test.ts +365 -0
  1338. package/references/swarmkit/src/packages/installer.ts +206 -0
  1339. package/references/swarmkit/src/packages/plugin.test.ts +141 -0
  1340. package/references/swarmkit/src/packages/plugin.ts +46 -0
  1341. package/references/swarmkit/src/packages/registry.test.ts +235 -0
  1342. package/references/swarmkit/src/packages/registry.ts +209 -0
  1343. package/references/swarmkit/src/packages/setup.test.ts +1395 -0
  1344. package/references/swarmkit/src/packages/setup.ts +671 -0
  1345. package/references/swarmkit/src/utils/ui.test.ts +115 -0
  1346. package/references/swarmkit/src/utils/ui.ts +62 -0
  1347. package/references/swarmkit/tsconfig.json +17 -0
  1348. package/references/swarmkit/vitest.config.ts +9 -0
  1349. package/scripts/bootstrap.mjs +33 -1
  1350. package/scripts/generate-agents.mjs +5 -1
  1351. package/scripts/map-hook.mjs +100 -63
  1352. package/scripts/map-sidecar.mjs +198 -25
  1353. package/scripts/team-loader.mjs +26 -48
  1354. package/skills/swarm/SKILL.md +85 -27
  1355. package/src/__tests__/agent-generator.test.mjs +15 -23
  1356. package/src/__tests__/bootstrap.test.mjs +124 -1
  1357. package/src/__tests__/config.test.mjs +72 -27
  1358. package/src/__tests__/context-output.test.mjs +13 -14
  1359. package/src/__tests__/e2e-inbox-integration.test.mjs +732 -0
  1360. package/src/__tests__/e2e-live-inbox.test.mjs +597 -0
  1361. package/src/__tests__/e2e-live-map.test.mjs +536 -0
  1362. package/src/__tests__/e2e-mesh-sidecar.test.mjs +570 -0
  1363. package/src/__tests__/e2e-native-task-hooks.test.mjs +376 -0
  1364. package/src/__tests__/e2e-sidecar-bridge.test.mjs +477 -0
  1365. package/src/__tests__/helpers.mjs +13 -0
  1366. package/src/__tests__/inbox-integration.test.mjs +298 -0
  1367. package/src/__tests__/inbox.test.mjs +22 -89
  1368. package/src/__tests__/index.test.mjs +33 -9
  1369. package/src/__tests__/integration.test.mjs +514 -0
  1370. package/src/__tests__/map-events.test.mjs +514 -150
  1371. package/src/__tests__/mesh-connection.test.mjs +308 -0
  1372. package/src/__tests__/opentasks-client.test.mjs +517 -0
  1373. package/src/__tests__/paths.test.mjs +185 -54
  1374. package/src/__tests__/sidecar-client.test.mjs +35 -0
  1375. package/src/__tests__/sidecar-server.test.mjs +124 -0
  1376. package/src/__tests__/skilltree-client.test.mjs +126 -0
  1377. package/src/agent-generator.mjs +129 -67
  1378. package/src/bootstrap.mjs +174 -13
  1379. package/src/config.mjs +35 -1
  1380. package/src/context-output.mjs +254 -30
  1381. package/src/inbox.mjs +9 -54
  1382. package/src/index.mjs +38 -7
  1383. package/src/map-connection.mjs +1 -0
  1384. package/src/map-events.mjs +350 -80
  1385. package/src/mesh-connection.mjs +148 -0
  1386. package/src/opentasks-client.mjs +269 -0
  1387. package/src/paths.mjs +178 -28
  1388. package/src/sessionlog.mjs +14 -9
  1389. package/src/sidecar-client.mjs +79 -25
  1390. package/src/sidecar-server.mjs +205 -16
  1391. package/src/skilltree-client.mjs +218 -0
  1392. package/src/template.mjs +68 -4
  1393. package/vitest.config.mjs +1 -0
@@ -0,0 +1,1225 @@
1
+ # OpenTeams Visual Team Editor — Design Specification
2
+
3
+ ## 1. Overview
4
+
5
+ A standalone browser-based visual editor for designing, visualizing, and exporting OpenTeams team configurations. Users compose team topologies, communication patterns, role definitions, and signal flows on an interactive graph canvas, then export valid `team.yaml` + `roles/*.yaml` files.
6
+
7
+ **Reference implementation**: The [self-driving-repo editor](https://github.com/alexngai/self-driving-repo/tree/main/editor) — a React Flow-based visual editor for DAG agent configs. Our editor adapts its architecture to handle OpenTeams' richer multi-layer relationship model (topology, communication, spawn rules, role inheritance).
8
+
9
+ ### Goals
10
+
11
+ - Visualize complex inter-role relationships that are hard to reason about in raw YAML
12
+ - Provide a bidirectional editor: import existing templates, modify visually, export valid YAML
13
+ - Real-time validation with actionable error/warning feedback
14
+ - Support all existing templates (gsd, bmad-method) as proof of generalization
15
+ - Inline markdown editing for role prompts
16
+
17
+ ### Non-Goals (v1)
18
+
19
+ - Runtime monitoring (live signal events, agent status) — this is a config editor, not a dashboard
20
+ - Direct filesystem write-back — export produces YAML for copy/download
21
+ - MCP server configuration UI — file path references only for v1
22
+
23
+ ---
24
+
25
+ ## 2. Architecture
26
+
27
+ ### Tech Stack
28
+
29
+ | Dependency | Version | Purpose |
30
+ |---|---|---|
31
+ | React | 19.x | UI framework |
32
+ | @xyflow/react | 12.x | Graph canvas (React Flow) |
33
+ | Zustand | 5.x | State management (5 stores) |
34
+ | @dagrejs/dagre | 1.x | Hierarchical auto-layout |
35
+ | js-yaml | 4.x | YAML serialization |
36
+ | ajv | 8.x | JSON Schema validation (reuse existing schemas) |
37
+ | Vite | 6.x | Build tooling |
38
+ | Tailwind CSS | 4.x | Styling |
39
+ | TypeScript | 5.x | Type safety (strict mode) |
40
+
41
+ ### Project Structure
42
+
43
+ ```
44
+ editor/
45
+ ├── src/
46
+ │ ├── App.tsx # Root layout + ReactFlowProvider
47
+ │ ├── main.tsx # Vite entry point
48
+ │ ├── index.css # Tailwind imports + CSS variables
49
+ │ │
50
+ │ ├── types/
51
+ │ │ └── editor.ts # Canvas-specific types (nodes, edges, data)
52
+ │ │
53
+ │ ├── components/
54
+ │ │ ├── canvas/
55
+ │ │ │ ├── Canvas.tsx # ReactFlow container, drag-drop, edge creation
56
+ │ │ │ └── QuickAddMenu.tsx # Double-click context menu
57
+ │ │ │
58
+ │ │ ├── nodes/
59
+ │ │ │ ├── RoleNode.tsx # Role node with capabilities, model, signal summary
60
+ │ │ │ ├── ChannelNode.tsx # Channel node with signal list
61
+ │ │ │ └── node-styles.ts # Color constants, topology-based styling
62
+ │ │ │
63
+ │ │ ├── edges/
64
+ │ │ │ ├── PeerRouteEdge.tsx # Bold direct route with signal labels
65
+ │ │ │ ├── SignalFlowEdge.tsx # Emission/subscription through channels
66
+ │ │ │ └── SpawnEdge.tsx # Dashed "can spawn" relationship
67
+ │ │ │
68
+ │ │ ├── inspector/
69
+ │ │ │ ├── Inspector.tsx # Dispatcher (role/channel/edge/team)
70
+ │ │ │ ├── RoleInspector.tsx # Tabs: Identity, Communication, Capabilities
71
+ │ │ │ ├── ChannelInspector.tsx # Signal list editor, emitter/subscriber summary
72
+ │ │ │ ├── EdgeInspector.tsx # Signal/route details (read-only for derived)
73
+ │ │ │ ├── TeamInspector.tsx # Name, enforcement, extension metadata
74
+ │ │ │ └── PromptEditor.tsx # Inline markdown editor for role prompts
75
+ │ │ │
76
+ │ │ ├── sidebar/
77
+ │ │ │ ├── Sidebar.tsx # Block palette + config tree
78
+ │ │ │ ├── ConfigTree.tsx # Hierarchical template view
79
+ │ │ │ └── TemplateGallery.tsx # Load from bundled example templates
80
+ │ │ │
81
+ │ │ ├── toolbar/
82
+ │ │ │ ├── Toolbar.tsx # Top action bar
83
+ │ │ │ ├── LayerToggle.tsx # Toggle visibility of edge types
84
+ │ │ │ ├── ValidationBar.tsx # Real-time validation status
85
+ │ │ │ ├── ImportModal.tsx # YAML import dialog (paste or upload)
86
+ │ │ │ └── ExportModal.tsx # Multi-file YAML preview + copy/download
87
+ │ │ │
88
+ │ │ └── shared/
89
+ │ │ ├── CapabilityInput.tsx # Tag-style capability editor
90
+ │ │ ├── SignalPicker.tsx # Autocomplete for signal names
91
+ │ │ ├── ArrayInput.tsx # Generic multi-value input
92
+ │ │ └── ThemeToggle.tsx # Dark/light mode switch
93
+ │ │
94
+ │ ├── stores/
95
+ │ │ ├── canvas-store.ts # Nodes, edges, selection state
96
+ │ │ ├── config-store.ts # Roles, channels, team metadata, prompts
97
+ │ │ ├── history-store.ts # Undo/redo state snapshots
98
+ │ │ ├── validation-store.ts # Errors/warnings per node
99
+ │ │ └── ui-store.ts # Panel visibility, active layers
100
+ │ │
101
+ │ ├── lib/
102
+ │ │ ├── serializer.ts # Config <-> Canvas bidirectional conversion
103
+ │ │ ├── auto-layout.ts # Dagre hierarchical layout
104
+ │ │ ├── validator.ts # Schema + semantic validation (browser-safe)
105
+ │ │ ├── compiler.ts # Canvas -> multi-file YAML output
106
+ │ │ └── signal-catalog.ts # Known signal name suggestions
107
+ │ │
108
+ │ └── hooks/
109
+ │ ├── use-validation.ts # Debounced validation on state change
110
+ │ ├── use-keyboard.ts # Ctrl+Z/Y, Delete, Ctrl+I shortcuts
111
+ │ └── use-autosave.ts # localStorage persistence
112
+
113
+ ├── tests/
114
+ │ ├── serializer.test.ts # Round-trip conversion tests
115
+ │ ├── validator.test.ts # Validation rule tests
116
+ │ └── compiler.test.ts # YAML output tests
117
+
118
+ ├── index.html
119
+ ├── package.json
120
+ ├── vite.config.ts
121
+ ├── tsconfig.json
122
+ └── tailwind.config.ts
123
+ ```
124
+
125
+ ### Relationship to Main Package
126
+
127
+ The editor is a **standalone Vite app** in the `editor/` directory. It imports OpenTeams types via a path alias:
128
+
129
+ ```typescript
130
+ // vite.config.ts
131
+ resolve: {
132
+ alias: {
133
+ '@openteams': path.resolve(__dirname, '../src'),
134
+ },
135
+ }
136
+ ```
137
+
138
+ This gives the editor access to `TeamManifest`, `CommunicationConfig`, `RoleDefinition`, etc. from `src/template/types.ts` without duplicating type definitions. The editor does not import any Node.js-specific code (database, services, spawner).
139
+
140
+ ---
141
+
142
+ ## 3. Data Model
143
+
144
+ ### 3.1 Editor Types
145
+
146
+ ```typescript
147
+ // types/editor.ts
148
+
149
+ // ── Node Data ──────────────────────────────────────────
150
+
151
+ interface RoleNodeData {
152
+ kind: 'role';
153
+ roleName: string; // Key in roles list
154
+ displayName: string; // From role definition
155
+ description: string;
156
+ topologyPosition: 'root' | 'companion' | 'spawned';
157
+ model?: string; // From topology node config
158
+ capabilities: string[];
159
+ extends?: string; // Parent role name
160
+ emits: string[]; // Signal names this role emits
161
+ subscribesTo: SubscriptionSummary[]; // Channel+signal subscriptions
162
+ peerRoutesOut: number; // Count of outgoing peer routes
163
+ peerRoutesIn: number; // Count of incoming peer routes
164
+ canSpawn: string[]; // Roles this role can spawn
165
+ errors: string[]; // Validation errors
166
+ warnings: string[]; // Validation warnings
167
+ }
168
+
169
+ interface SubscriptionSummary {
170
+ channel: string;
171
+ signals: string[] | 'all'; // 'all' when no filter
172
+ }
173
+
174
+ interface ChannelNodeData {
175
+ kind: 'channel';
176
+ channelName: string;
177
+ description: string;
178
+ signals: string[];
179
+ emitterCount: number; // Derived: how many roles emit to this
180
+ subscriberCount: number; // Derived: how many roles subscribe
181
+ }
182
+
183
+ // ── Edge Data ──────────────────────────────────────────
184
+
185
+ interface PeerRouteEdgeData {
186
+ kind: 'peer-route';
187
+ signals: string[]; // Signals carried on this route
188
+ via: 'direct' | 'topic' | 'scope';
189
+ }
190
+
191
+ interface SignalFlowEdgeData {
192
+ kind: 'signal-flow';
193
+ direction: 'emission' | 'subscription';
194
+ channel: string;
195
+ signals: string[]; // Specific signals, or all if empty
196
+ }
197
+
198
+ interface SpawnEdgeData {
199
+ kind: 'spawn';
200
+ }
201
+
202
+ // ── Unions ─────────────────────────────────────────────
203
+
204
+ type EditorNode = Node<RoleNodeData, 'role'> | Node<ChannelNodeData, 'channel'>;
205
+ type EditorEdge =
206
+ | Edge<PeerRouteEdgeData>
207
+ | Edge<SignalFlowEdgeData>
208
+ | Edge<SpawnEdgeData>;
209
+
210
+ // ── Canvas State ───────────────────────────────────────
211
+
212
+ interface CanvasState {
213
+ nodes: EditorNode[];
214
+ edges: EditorEdge[];
215
+ viewport: { x: number; y: number; zoom: number };
216
+ }
217
+ ```
218
+
219
+ ### 3.2 Config Store Types
220
+
221
+ ```typescript
222
+ // Stored separately from canvas (not embedded in node data)
223
+
224
+ interface EditorRoleConfig {
225
+ name: string;
226
+ displayName: string;
227
+ description: string;
228
+ extends?: string;
229
+ capabilities: string[];
230
+ promptContent?: string; // Inline markdown (primary prompt)
231
+ additionalPrompts?: { name: string; content: string }[];
232
+ }
233
+
234
+ interface EditorTeamConfig {
235
+ name: string;
236
+ description: string;
237
+ version: 1;
238
+ enforcement: 'strict' | 'permissive' | 'audit';
239
+ extensions: Record<string, unknown>; // gsd:, bmad:, etc.
240
+ }
241
+ ```
242
+
243
+ ---
244
+
245
+ ## 4. Visual Design
246
+
247
+ ### 4.1 Layout
248
+
249
+ ```
250
+ ┌──────────────────────────────────────────────────────────────────┐
251
+ │ Toolbar │
252
+ │ [=] New Import Export | Auto Layout | Undo Redo | [?] │
253
+ │ Layer: [Peer Routes ✓] [Channels ✓] [Spawn Rules] [Inheritance] │
254
+ ├────────────┬─────────────────────────────────┬───────────────────┤
255
+ │ │ │ │
256
+ │ Sidebar │ Canvas │ Inspector │
257
+ │ (240px) │ (React Flow) │ (340px) │
258
+ │ │ │ │
259
+ │ Blocks │ ┌──────────┐ ┌──────────┐ │ [Role Inspector] │
260
+ │ ──────── │ │ research │───│ roadmap │ │ │
261
+ │ ● Role │ │ -synth. │ │ -per │ │ Identity │
262
+ │ ◆ Channel │ └──────────┘ └──────────┘ │ Communication │
263
+ │ │ │ │ │ Capabilities │
264
+ │ Config │ ┌────┴────┐ ┌────┴────┐ │ Prompts │
265
+ │ ──────── │ │ planner │◄──│ plan- │ │ │
266
+ │ Tree view │ │ │──►│ checker │ │ │
267
+ │ │ └─────────┘ └─────────┘ │ │
268
+ │ │ │ │
269
+ │ Gallery │ Background grid + minimap │ │
270
+ │ ──────── │ Controls (zoom/fit) │ │
271
+ │ Templates │ │ │
272
+ │ │ │ │
273
+ ├────────────┴─────────────────────────────────┴───────────────────┤
274
+ │ Validation Bar: ✓ 12 roles, 4 channels, 0 errors, 2 warnings │
275
+ └──────────────────────────────────────────────────────────────────┘
276
+ ```
277
+
278
+ ### 4.2 Node Types
279
+
280
+ #### RoleNode
281
+
282
+ ```
283
+ ┌─────────────────────────────────────┐
284
+ │ ★ orchestrator opus │ ← topology badge + model
285
+ │ GSD Orchestrator │ ← display_name (muted)
286
+ ├─────────────────────────────────────┤
287
+ │ command-routing · wave-orch. · +3 │ ← capabilities (truncated)
288
+ ├─────────────────────────────────────┤
289
+ │ ▲ emits 3 ▼ subs 4 → routes 2│ ← signal summary
290
+ └─────────────────────────────────────┘
291
+ ● ● ← handles (left=target, right=source)
292
+ ```
293
+
294
+ **Topology-based styling:**
295
+
296
+ | Position | Border | Badge | Default Color |
297
+ |---|---|---|---|
298
+ | root | 2px solid | ★ | Blue (#3b82f6) |
299
+ | companion | 2px solid | ◆ | Teal (#14b8a6) |
300
+ | spawned | 1px dashed | (none) | Gray (#6b7280) |
301
+
302
+ **State-based border overrides:**
303
+ - Validation errors: red border
304
+ - Validation warnings: yellow border
305
+ - Selected: amber/orange border
306
+
307
+ #### ChannelNode
308
+
309
+ ```
310
+ ┌───────────────────────────────┐
311
+ │ ◆ planning_events │
312
+ │ "Planning and research..." │
313
+ ├───────────────────────────────┤
314
+ │ RESEARCH_COMPLETE │
315
+ │ ROADMAP_READY │
316
+ │ PLAN_READY │
317
+ │ PLAN_VALIDATED │
318
+ │ PLAN_REJECTED │
319
+ ├───────────────────────────────┤
320
+ │ 3 emitters · 4 subscribers │
321
+ └───────────────────────────────┘
322
+ ```
323
+
324
+ **Styling:** Purple (#8b5cf6) border, smaller than role nodes. Rounded corners.
325
+
326
+ ### 4.3 Edge Types
327
+
328
+ | Edge | Style | When Visible | Label |
329
+ |---|---|---|---|
330
+ | **PeerRouteEdge** | Bold (2.5px), colored (#f59e0b amber) | Layer: Peer Routes | Signal names |
331
+ | **SignalFlowEdge** | Medium (1.5px), muted (#6b7280) | Layer: Channels | Channel name |
332
+ | **SpawnEdge** | Thin dashed (1px), light gray | Layer: Spawn Rules | "can spawn" |
333
+
334
+ All edges use Bezier curves with invisible wider hit areas (16px) for hover/selection.
335
+
336
+ **PeerRouteEdge** is the highest-priority visual element — these represent the actual handoff patterns that drive workflow (e.g., `planner ↔ plan-checker` loop, `research-synthesizer → roadmapper` handoff).
337
+
338
+ **SignalFlowEdge** connects roles to/from channel nodes. These are medium priority — they show the pub/sub topology.
339
+
340
+ **SpawnEdge** is lowest priority and off by default — spawn rules are important for config but less relevant for understanding communication flow.
341
+
342
+ ### 4.4 Layer System
343
+
344
+ The toolbar contains toggle buttons that control edge visibility:
345
+
346
+ | Layer | Default | Controls |
347
+ |---|---|---|
348
+ | Peer Routes | **ON** | PeerRouteEdge visibility |
349
+ | Channels | **ON** | ChannelNode + SignalFlowEdge visibility |
350
+ | Spawn Rules | OFF | SpawnEdge visibility |
351
+ | Inheritance | OFF | Dashed edge for `extends` relationships |
352
+
353
+ When **Channels** layer is OFF, channel nodes are hidden. Signal flow information is still available in the role inspector.
354
+
355
+ Layer state is stored in `ui-store` and persisted via autosave.
356
+
357
+ ---
358
+
359
+ ## 5. Stores
360
+
361
+ ### 5.1 Canvas Store (`canvas-store.ts`)
362
+
363
+ ```typescript
364
+ interface CanvasStore {
365
+ // State
366
+ nodes: EditorNode[];
367
+ edges: EditorEdge[];
368
+ selectedNodeId: string | null;
369
+ selectedEdgeId: string | null;
370
+
371
+ // ReactFlow callbacks
372
+ onNodesChange: OnNodesChange<EditorNode>;
373
+ onEdgesChange: OnEdgesChange<EditorEdge>;
374
+
375
+ // Actions
376
+ setSelection(nodeId: string | null, edgeId: string | null): void;
377
+ addNode(node: EditorNode): void;
378
+ removeNode(nodeId: string): void;
379
+ addEdge(edge: EditorEdge): void;
380
+ removeEdge(edgeId: string): void;
381
+ updateNodeData(nodeId: string, data: Partial<RoleNodeData | ChannelNodeData>): void;
382
+
383
+ // Serialization
384
+ loadFromConfig(manifest: TeamManifest, roles: Map<string, RoleDefinition>): void;
385
+ applyAutoLayout(): void;
386
+ }
387
+ ```
388
+
389
+ ### 5.2 Config Store (`config-store.ts`)
390
+
391
+ ```typescript
392
+ interface ConfigStore {
393
+ // State
394
+ team: EditorTeamConfig;
395
+ roles: Map<string, EditorRoleConfig>;
396
+ channels: Record<string, ChannelDefinition>;
397
+ subscriptions: Record<string, SubscriptionEntry[]>;
398
+ emissions: Record<string, string[]>;
399
+ peerRoutes: PeerRoute[];
400
+ spawnRules: Record<string, string[]>;
401
+ topologyRoot: string; // Role name of root
402
+ topologyCompanions: string[]; // Role names of companions
403
+
404
+ // Actions
405
+ setTeam(team: Partial<EditorTeamConfig>): void;
406
+ setRole(name: string, role: EditorRoleConfig): void;
407
+ removeRole(name: string): void;
408
+ renameRole(oldName: string, newName: string): void;
409
+ setChannel(name: string, channel: ChannelDefinition): void;
410
+ removeChannel(name: string): void;
411
+ setSubscriptions(role: string, subs: SubscriptionEntry[]): void;
412
+ setEmissions(role: string, signals: string[]): void;
413
+ addPeerRoute(route: PeerRoute): void;
414
+ removePeerRoute(index: number): void;
415
+ setSpawnRules(role: string, canSpawn: string[]): void;
416
+ setTopologyRoot(role: string): void;
417
+ setTopologyCompanions(roles: string[]): void;
418
+
419
+ // Serialization
420
+ loadFromConfig(manifest: TeamManifest, roles: Map<string, RoleDefinition>): void;
421
+ toManifest(): TeamManifest;
422
+ toRoleDefinitions(): Map<string, RoleDefinition>;
423
+ }
424
+ ```
425
+
426
+ ### 5.3 History Store (`history-store.ts`)
427
+
428
+ ```typescript
429
+ interface HistoryStore {
430
+ undoStack: Snapshot[]; // Max 50
431
+ redoStack: Snapshot[];
432
+ pushSnapshot(): void; // Deep-clone canvas + config stores
433
+ undo(): void;
434
+ redo(): void;
435
+ canUndo(): boolean;
436
+ canRedo(): boolean;
437
+ }
438
+
439
+ interface Snapshot {
440
+ canvas: { nodes: EditorNode[]; edges: EditorEdge[] };
441
+ config: { /* all config-store fields */ };
442
+ }
443
+ ```
444
+
445
+ ### 5.4 Validation Store (`validation-store.ts`)
446
+
447
+ ```typescript
448
+ interface ValidationStore {
449
+ errors: ValidationIssue[];
450
+ warnings: ValidationIssue[];
451
+ isValidating: boolean;
452
+ setResults(errors: ValidationIssue[], warnings: ValidationIssue[]): void;
453
+ }
454
+
455
+ interface ValidationIssue {
456
+ path: string; // e.g. "communication.emissions.planner"
457
+ message: string;
458
+ severity: 'error' | 'warning';
459
+ nodeId?: string; // For highlighting on canvas
460
+ }
461
+ ```
462
+
463
+ ### 5.5 UI Store (`ui-store.ts`)
464
+
465
+ ```typescript
466
+ interface UIStore {
467
+ sidebarOpen: boolean;
468
+ inspectorOpen: boolean;
469
+ importModalOpen: boolean;
470
+ exportModalOpen: boolean;
471
+ layers: {
472
+ peerRoutes: boolean; // default: true
473
+ channels: boolean; // default: true
474
+ spawnRules: boolean; // default: false
475
+ inheritance: boolean; // default: false
476
+ };
477
+ toggleSidebar(): void;
478
+ toggleInspector(): void;
479
+ toggleLayer(layer: keyof UIStore['layers']): void;
480
+ }
481
+ ```
482
+
483
+ ---
484
+
485
+ ## 6. Serialization
486
+
487
+ ### 6.1 Import: YAML -> Canvas
488
+
489
+ `serializer.ts: configToCanvas(manifest, roleDefinitions)`
490
+
491
+ **Input:** `TeamManifest` (parsed team.yaml) + `Map<string, RoleDefinition>` (parsed roles/*.yaml)
492
+
493
+ **Algorithm:**
494
+
495
+ ```
496
+ 1. Create RoleNodes
497
+ For each role in manifest.roles:
498
+ a. Look up RoleDefinition (if exists)
499
+ b. Determine topology position:
500
+ - manifest.topology.root.role → 'root'
501
+ - manifest.topology.companions[].role → 'companion'
502
+ - else → 'spawned'
503
+ c. Extract model from topology node config (if exists)
504
+ d. Look up emissions for this role
505
+ e. Look up subscriptions for this role
506
+ f. Count peer routes from/to this role
507
+ g. Look up spawn rules for this role
508
+ h. Create EditorNode with RoleNodeData
509
+
510
+ 2. Create ChannelNodes
511
+ For each channel in manifest.communication.channels:
512
+ a. Count emitters (roles that emit any of this channel's signals)
513
+ b. Count subscribers (roles with subscriptions to this channel)
514
+ c. Create EditorNode with ChannelNodeData
515
+
516
+ 3. Create PeerRouteEdges
517
+ For each route in manifest.communication.routing.peers:
518
+ a. Create edge: source=role-{from}, target=role-{to}
519
+ b. Data: signals, via
520
+
521
+ 4. Create SignalFlowEdges
522
+ For each role in emissions:
523
+ For each signal the role emits:
524
+ a. Find which channel contains this signal
525
+ b. Create edge: source=role-{role}, target=channel-{channel}
526
+ c. Data: direction='emission', channel, signals
527
+ For each role in subscriptions:
528
+ For each subscription entry:
529
+ a. Create edge: source=channel-{channel}, target=role-{role}
530
+ b. Data: direction='subscription', channel, signals (or all)
531
+
532
+ 5. Create SpawnEdges
533
+ For each role in spawn_rules:
534
+ For each target in spawn_rules[role]:
535
+ a. Create edge: source=role-{role}, target=role-{target}
536
+ b. Data: kind='spawn'
537
+
538
+ 6. Apply dagre auto-layout
539
+ Return CanvasState { nodes, edges, viewport }
540
+ ```
541
+
542
+ ### 6.2 Export: Canvas -> YAML
543
+
544
+ `compiler.ts: canvasToYaml(canvasStore, configStore)`
545
+
546
+ **Output:** `Map<string, string>` — filepath → YAML content
547
+
548
+ **Algorithm:**
549
+
550
+ ```
551
+ 1. Build team.yaml
552
+ a. team name, description, version from config store
553
+ b. roles: all role names from config store
554
+ c. topology:
555
+ root: { role: topologyRoot, config: { model } }
556
+ companions: topologyCompanions.map(role => ({ role, config: { model } }))
557
+ spawn_rules: from config store
558
+ d. communication:
559
+ enforcement: from config store
560
+ channels: from config store
561
+ subscriptions: from config store
562
+ emissions: from config store
563
+ routing.peers: from config store
564
+ e. Extension fields: from config store (pass-through)
565
+ f. Serialize with js-yaml
566
+
567
+ 2. Build roles/<name>.yaml for each role
568
+ a. name, display_name, description, capabilities
569
+ b. extends (if set)
570
+ c. Serialize with js-yaml
571
+
572
+ 3. Build prompts (as content map, not files)
573
+ For each role with promptContent:
574
+ a. prompts/<role>/ROLE.md → promptContent
575
+ b. Additional prompts → prompts/<role>/<name>.md
576
+
577
+ 4. Return Map<filepath, content>
578
+ ```
579
+
580
+ ### 6.3 YAML Serialization Options
581
+
582
+ ```typescript
583
+ yaml.dump(config, {
584
+ lineWidth: -1, // No auto-wrapping
585
+ noRefs: true, // No YAML anchors/aliases
586
+ quotingType: '"', // Double quotes when needed
587
+ forceQuotes: false, // Smart quoting
588
+ sortKeys: false, // Preserve insertion order
589
+ });
590
+ ```
591
+
592
+ ---
593
+
594
+ ## 7. Validation
595
+
596
+ ### 7.1 Validation Pipeline
597
+
598
+ Triggered on every state change (debounced 300ms via `use-validation` hook).
599
+
600
+ **Layer 1: JSON Schema** (AJV)
601
+ - Validate assembled config against `team.schema.json` and `role.schema.json`
602
+ - These schemas are already defined in `schema/` — reuse directly
603
+
604
+ **Layer 2: Topology Integrity**
605
+ - Exactly one root role
606
+ - Root and all companion roles exist in the roles list
607
+ - All roles referenced in spawn_rules exist in the roles list
608
+ - No role appears as both root and companion
609
+
610
+ **Layer 3: Communication Integrity**
611
+ - Every signal in emissions exists in at least one channel's signal list
612
+ - Every signal in subscription filters exists in its channel's signal list
613
+ - Every channel referenced in subscriptions exists in channels
614
+ - Every role in subscriptions/emissions exists in the roles list
615
+ - Peer route from/to roles exist in the roles list
616
+
617
+ **Layer 4: Inheritance Integrity**
618
+ - No circular `extends` chains
619
+ - Referenced parent roles exist
620
+ - Capability composition is valid (removed capabilities exist on parent)
621
+
622
+ **Layer 5: Semantic Warnings** (non-blocking)
623
+ - Roles with no subscriptions and not reachable via spawn rules from root
624
+ - Signals defined in a channel but never emitted by any role
625
+ - Signals defined in a channel but never subscribed to by any role
626
+ - Roles that emit signals but have no emission entry (permissive mode)
627
+ - Peer routes carrying signals not defined in any channel
628
+
629
+ ### 7.2 Error Display
630
+
631
+ - **Per-node**: Error/warning badge count on node corners
632
+ - **Validation bar**: Summary in bottom toolbar ("12 roles, 4 channels, 0 errors, 2 warnings")
633
+ - **Inspector**: Detailed error list when node selected
634
+ - **Node highlighting**: Red/yellow border for nodes with errors/warnings
635
+
636
+ ---
637
+
638
+ ## 8. Inspector Panels
639
+
640
+ ### 8.1 RoleInspector (4 tabs)
641
+
642
+ **Tab 1: Identity**
643
+ ```
644
+ Name: [orchestrator ]
645
+ Display Name: [GSD Orchestrator ]
646
+ Description: [Command-level... ]
647
+ [ ]
648
+ Model: [sonnet ▼]
649
+ Position: [root ▼] (root / companion / spawned)
650
+ Extends: [— none — ▼] (dropdown of other roles)
651
+ ```
652
+
653
+ **Tab 2: Communication**
654
+ ```
655
+ Emits:
656
+ [PROJECT_INITIALIZED] [PHASE_STARTED] [WAVE_STARTED] [+]
657
+
658
+ Subscribes:
659
+ ┌─────────────────────────────────────────┐
660
+ │ project_lifecycle (all signals) [×]│
661
+ │ planning_events (all signals) [×]│
662
+ │ execution_events (all signals) [×]│
663
+ │ verification_events (all signals) [×]│
664
+ └─────────────────────────────────────────┘
665
+ [+ Add Subscription]
666
+
667
+ Peer Routes (outgoing):
668
+ → roadmapper via direct [RESEARCH_COMPLETE]
669
+ [+ Add Route]
670
+
671
+ Peer Routes (incoming):
672
+ ← verifier via direct [GAPS_FOUND]
673
+ ```
674
+
675
+ **Tab 3: Capabilities**
676
+ ```
677
+ Capabilities:
678
+ [command-routing ×]
679
+ [wave-orchestration ×]
680
+ [state-management ×]
681
+ [checkpoint-handling×]
682
+ [context-budgeting ×]
683
+ [+ Add capability ]
684
+
685
+ Spawn Rules (can spawn):
686
+ [✓] roadmapper
687
+ [✓] planner
688
+ [✓] plan-checker
689
+ [✓] executor
690
+ [✓] verifier
691
+ [ ] debugger
692
+ ...
693
+ ```
694
+
695
+ **Tab 4: Prompts**
696
+ ```
697
+ Primary Prompt (ROLE.md):
698
+ ┌─────────────────────────────────────────┐
699
+ │ # GSD Orchestrator │
700
+ │ │
701
+ │ You are the command-level orchestrator │
702
+ │ for the GSD multi-agent system... │
703
+ │ │
704
+ │ ## Responsibilities │
705
+ │ - Route user commands to agent chains │
706
+ │ - Manage project state transitions │
707
+ │ ... │
708
+ └─────────────────────────────────────────┘
709
+
710
+ Additional Prompts:
711
+ ┌─ SOUL.md ──────────────────────────────┐
712
+ │ # Personality & Values │
713
+ │ ... │
714
+ └─────────────────────────────────────────┘
715
+ [+ Add Prompt Section]
716
+ ```
717
+
718
+ The markdown editor is a plain `<textarea>` with monospace font and basic syntax highlighting (headers, bold, lists). Not a full WYSIWYG editor — keeps it simple and predictable for prompt authoring.
719
+
720
+ ### 8.2 ChannelInspector
721
+
722
+ ```
723
+ Name: [planning_events ]
724
+ Description: [Planning and research workflow signals]
725
+
726
+ Signals:
727
+ [RESEARCH_COMPLETE ] [×]
728
+ [ROADMAP_READY ] [×]
729
+ [PLAN_READY ] [×]
730
+ [PLAN_VALIDATED ] [×]
731
+ [PLAN_REJECTED ] [×]
732
+ [+ Add Signal ]
733
+
734
+ Emitters (derived, read-only):
735
+ project-researcher → RESEARCH_COMPLETE
736
+ roadmapper → ROADMAP_READY
737
+ planner → PLAN_READY
738
+ plan-checker → PLAN_VALIDATED, PLAN_REJECTED
739
+
740
+ Subscribers (derived, read-only):
741
+ orchestrator ← all signals
742
+ roadmapper ← RESEARCH_COMPLETE
743
+ planner ← ROADMAP_READY, PLAN_REJECTED
744
+ plan-checker ← PLAN_READY
745
+ ```
746
+
747
+ ### 8.3 TeamInspector (nothing selected)
748
+
749
+ ```
750
+ Team Name: [gsd ]
751
+ Description: [GSD — prompt-native multi-agent...]
752
+ [ ]
753
+ Version: 1 (read-only)
754
+ Enforcement: [permissive ▼]
755
+
756
+ Extension Metadata:
757
+ ┌─ gsd: ─────────────────────────────────┐
758
+ │ context_management: │
759
+ │ description: "Each spawned agent..." │
760
+ │ plan_budget: "50%" │
761
+ │ execution_model: │
762
+ │ type: "wave-based-parallel" │
763
+ │ ... │
764
+ └─────────────────────────────────────────┘
765
+ (raw YAML editor, monospace textarea)
766
+ ```
767
+
768
+ ### 8.4 EdgeInspector
769
+
770
+ **For PeerRouteEdge:**
771
+ ```
772
+ Type: Peer Route
773
+ From: [planner] → To: [plan-checker]
774
+ Via: [direct ▼]
775
+ Signals:
776
+ [PLAN_READY] [×]
777
+ [+ Add Signal]
778
+ [Delete Route]
779
+ ```
780
+
781
+ **For SignalFlowEdge (read-only):**
782
+ ```
783
+ Type: Signal Flow (emission)
784
+ Role: planner
785
+ Channel: planning_events
786
+ Signal: PLAN_READY
787
+ (Modify in Role Inspector → Communication tab)
788
+ ```
789
+
790
+ ---
791
+
792
+ ## 9. Interactions
793
+
794
+ ### 9.1 Creating Nodes
795
+
796
+ **Drag from sidebar:**
797
+ 1. Sidebar palette has draggable blocks: "Role" and "Channel"
798
+ 2. User drags block onto canvas
799
+ 3. `onDrop` handler parses MIME data, creates node at drop position
800
+ 4. For Role: creates a default `EditorRoleConfig` in config store + `RoleNode` on canvas
801
+ 5. For Channel: prompts for name, creates `ChannelDefinition` in config store + `ChannelNode` on canvas
802
+ 6. Pushes history snapshot
803
+
804
+ **Double-click on canvas:**
805
+ 1. Opens QuickAddMenu at mouse position
806
+ 2. Options: "New Role", "New Channel"
807
+ 3. Same creation flow as drag-and-drop
808
+
809
+ ### 9.2 Creating Edges
810
+
811
+ **Peer route (drag handle to handle):**
812
+ 1. User drags from a role's right handle to another role's left handle
813
+ 2. `onConnect` callback fires, stores pending connection
814
+ 3. SignalPicker dialog opens — user selects signals for this route
815
+ 4. On confirm: creates PeerRouteEdge + updates config store (adds to peerRoutes)
816
+ 5. Pushes history snapshot
817
+
818
+ **Signal flow edges are derived, not manually created.** They are computed from the config store's emissions and subscriptions. When a user adds an emission or subscription in the inspector, the corresponding edges appear automatically.
819
+
820
+ **Spawn edges are derived from spawn rules.** Updated via the role inspector's spawn rules checkboxes.
821
+
822
+ ### 9.3 Selection
823
+
824
+ - Click node → select node, deselect edge
825
+ - Click edge → select edge, deselect node
826
+ - Click canvas background → deselect all → show TeamInspector
827
+ - Selection state in canvas store drives Inspector panel content
828
+
829
+ ### 9.4 Deletion
830
+
831
+ - Select node/edge → press Delete/Backspace
832
+ - For RoleNode deletion:
833
+ - Remove from config store (role, emissions, subscriptions, spawn rules, peer routes)
834
+ - Remove all connected edges
835
+ - Push history snapshot
836
+ - For ChannelNode deletion:
837
+ - Remove channel definition
838
+ - Remove all subscriptions referencing it
839
+ - Remove all connected SignalFlowEdges
840
+ - Push history snapshot
841
+ - For PeerRouteEdge deletion:
842
+ - Remove from config store peerRoutes
843
+ - Push history snapshot
844
+
845
+ ### 9.5 Import
846
+
847
+ 1. User clicks "Import" in toolbar → ImportModal opens
848
+ 2. Two input methods:
849
+ - **Paste YAML**: textarea for team.yaml content + separate textareas for role YAMLs
850
+ - **Load Template**: dropdown of bundled example templates (gsd, bmad-method)
851
+ 3. On confirm:
852
+ - Parse YAML with js-yaml
853
+ - Call `configToCanvas()` to build nodes + edges
854
+ - Load into canvas store + config store
855
+ - Apply auto-layout
856
+ - Clear history, push initial snapshot
857
+
858
+ ### 9.6 Export
859
+
860
+ 1. User clicks "Export" in toolbar → ExportModal opens
861
+ 2. Modal shows tabbed file preview:
862
+ - Tab per output file: `team.yaml`, `roles/orchestrator.yaml`, `roles/planner.yaml`, ...
863
+ - Each tab shows syntax-highlighted YAML
864
+ - Prompt files shown as additional tabs: `prompts/orchestrator/ROLE.md`, etc.
865
+ 3. Actions:
866
+ - **Copy** (per file): copies individual file content to clipboard
867
+ - **Copy All**: copies all files concatenated with `--- filename ---` separators
868
+ - **Download ZIP**: bundles all files into a downloadable zip
869
+
870
+ ---
871
+
872
+ ## 10. Auto-Layout
873
+
874
+ ### Algorithm
875
+
876
+ Uses `@dagrejs/dagre` with left-to-right hierarchical layout.
877
+
878
+ ```typescript
879
+ // auto-layout.ts
880
+
881
+ const ROLE_NODE_WIDTH = 280;
882
+ const ROLE_NODE_HEIGHT = 120;
883
+ const CHANNEL_NODE_WIDTH = 220;
884
+ const CHANNEL_NODE_HEIGHT = 100;
885
+
886
+ function computeLayout(nodes: EditorNode[], edges: EditorEdge[]): EditorNode[] {
887
+ const g = new dagre.graphlib.Graph();
888
+ g.setGraph({
889
+ rankdir: 'LR', // Left-to-right
890
+ ranksep: 140, // Horizontal spacing between ranks
891
+ nodesep: 60, // Vertical spacing between nodes in same rank
892
+ marginx: 40,
893
+ marginy: 40,
894
+ });
895
+ g.setDefaultEdgeLabel(() => ({}));
896
+
897
+ for (const node of nodes) {
898
+ const isChannel = node.data.kind === 'channel';
899
+ g.setNode(node.id, {
900
+ width: isChannel ? CHANNEL_NODE_WIDTH : ROLE_NODE_WIDTH,
901
+ height: isChannel ? CHANNEL_NODE_HEIGHT : ROLE_NODE_HEIGHT,
902
+ });
903
+ }
904
+
905
+ for (const edge of edges) {
906
+ // Only layout based on visible edges (peer routes + signal flow)
907
+ // Skip spawn edges to avoid pulling layout
908
+ if (edge.data?.kind !== 'spawn') {
909
+ g.setEdge(edge.source, edge.target);
910
+ }
911
+ }
912
+
913
+ dagre.layout(g);
914
+
915
+ return nodes.map(node => {
916
+ const pos = g.node(node.id);
917
+ const isChannel = node.data.kind === 'channel';
918
+ const w = isChannel ? CHANNEL_NODE_WIDTH : ROLE_NODE_WIDTH;
919
+ const h = isChannel ? CHANNEL_NODE_HEIGHT : ROLE_NODE_HEIGHT;
920
+ return {
921
+ ...node,
922
+ position: { x: pos.x - w / 2, y: pos.y - h / 2 },
923
+ };
924
+ });
925
+ }
926
+ ```
927
+
928
+ The layout uses only peer routes and signal flow edges for positioning — spawn edges are excluded to prevent distorting the communication-centric layout.
929
+
930
+ ---
931
+
932
+ ## 11. Template Gallery
933
+
934
+ The editor bundles the existing example templates for quick loading:
935
+
936
+ ```typescript
937
+ // Bundled as static JSON (compiled from YAML at build time)
938
+ const BUNDLED_TEMPLATES = {
939
+ 'gsd': { manifest: {...}, roles: {...} },
940
+ 'bmad-method': { manifest: {...}, roles: {...} },
941
+ };
942
+ ```
943
+
944
+ The TemplateGallery component in the sidebar shows these as cards:
945
+
946
+ ```
947
+ ┌────────────────────────────────┐
948
+ │ gsd │
949
+ │ 12 roles · 4 channels │
950
+ │ Wave-based parallel execution │
951
+ │ [Load] │
952
+ ├────────────────────────────────┤
953
+ │ bmad-method │
954
+ │ 10 roles · 4 channels │
955
+ │ Full agile development team │
956
+ │ [Load] │
957
+ └────────────────────────────────┘
958
+ ```
959
+
960
+ ---
961
+
962
+ ## 12. Keyboard Shortcuts
963
+
964
+ | Shortcut | Action |
965
+ |---|---|
966
+ | `Ctrl+Z` / `Cmd+Z` | Undo |
967
+ | `Ctrl+Y` / `Cmd+Shift+Z` | Redo |
968
+ | `Delete` / `Backspace` | Delete selected node or edge |
969
+ | `Ctrl+I` / `Cmd+I` | Toggle inspector panel |
970
+ | `Ctrl+E` / `Cmd+E` | Open export modal |
971
+ | `Ctrl+Shift+L` | Apply auto-layout |
972
+ | `Escape` | Deselect / close modal |
973
+
974
+ ---
975
+
976
+ ## 13. Theme System
977
+
978
+ CSS custom properties for dark/light mode, following the SDR editor pattern:
979
+
980
+ ```css
981
+ :root {
982
+ --ot-bg: #ffffff;
983
+ --ot-surface: #f9fafb;
984
+ --ot-text: #111827;
985
+ --ot-text-muted: #6b7280;
986
+ --ot-border: #e5e7eb;
987
+ --ot-accent: #f59e0b; /* Amber for selection */
988
+ --ot-role-root: #3b82f6; /* Blue */
989
+ --ot-role-companion: #14b8a6; /* Teal */
990
+ --ot-role-spawned: #6b7280; /* Gray */
991
+ --ot-channel: #8b5cf6; /* Purple */
992
+ --ot-peer-route: #f59e0b; /* Amber */
993
+ --ot-signal-flow: #6b7280; /* Gray */
994
+ --ot-spawn-edge: #d1d5db; /* Light gray */
995
+ --ot-error: #ef4444;
996
+ --ot-warning: #eab308;
997
+ --ot-success: #22c55e;
998
+ }
999
+
1000
+ .dark {
1001
+ --ot-bg: #0f172a;
1002
+ --ot-surface: #1e293b;
1003
+ --ot-text: #f1f5f9;
1004
+ --ot-text-muted: #94a3b8;
1005
+ --ot-border: #334155;
1006
+ /* ... accent and semantic colors stay the same */
1007
+ }
1008
+ ```
1009
+
1010
+ ---
1011
+
1012
+ ## 14. Phased Implementation Plan
1013
+
1014
+ ### Phase 1: Foundation (scaffold, types, canvas, basic nodes)
1015
+
1016
+ **Goal:** Standalone Vite app with React Flow canvas that renders role and channel nodes from hardcoded data.
1017
+
1018
+ **Tasks:**
1019
+ 1. Scaffold `editor/` directory with Vite + React + TypeScript + Tailwind
1020
+ 2. Configure `vite.config.ts` with `@openteams` path alias to `../src`
1021
+ 3. Create `package.json` with all dependencies
1022
+ 4. Define editor types in `types/editor.ts` (RoleNodeData, ChannelNodeData, edge data types)
1023
+ 5. Implement `RoleNode.tsx` — memoized custom node with topology styling, capability summary, signal counts
1024
+ 6. Implement `ChannelNode.tsx` — memoized custom node with signal list, emitter/subscriber counts
1025
+ 7. Implement `Canvas.tsx` — ReactFlow container with node type registration, background grid, controls, minimap
1026
+ 8. Implement `App.tsx` — root layout shell (sidebar placeholder, canvas, inspector placeholder)
1027
+ 9. Create `node-styles.ts` — color constants, topology-based style functions
1028
+ 10. Create CSS variables for theming (`index.css`)
1029
+
1030
+ **Verification:** `npm run dev` renders a canvas with sample hardcoded role + channel nodes.
1031
+
1032
+ ### Phase 2: State Management (stores, serializer, auto-layout)
1033
+
1034
+ **Goal:** Import a team.yaml + roles and render it on the canvas with auto-layout.
1035
+
1036
+ **Tasks:**
1037
+ 1. Implement `canvas-store.ts` — nodes, edges, selection, ReactFlow callbacks
1038
+ 2. Implement `config-store.ts` — roles, channels, subscriptions, emissions, peer routes, spawn rules, topology
1039
+ 3. Implement `history-store.ts` — undo/redo with snapshot deep-clone
1040
+ 4. Implement `ui-store.ts` — sidebar, inspector, layers, modals
1041
+ 5. Implement `validation-store.ts` — errors, warnings, isValidating
1042
+ 6. Implement `serializer.ts: configToCanvas()` — full import pipeline (roles → nodes, communication → edges)
1043
+ 7. Implement `auto-layout.ts: computeLayout()` — dagre LR layout with role/channel sizing
1044
+ 8. Wire up canvas store to use serializer + layout for `loadFromConfig()`
1045
+ 9. Bundle example templates (gsd, bmad-method) as static JSON
1046
+ 10. Load gsd on startup as default, verify all nodes + edges render correctly
1047
+ 11. Write round-trip tests for serializer: `configToCanvas` → `canvasToConfig` → assert structural equality
1048
+
1049
+ **Verification:** Both gsd (12 roles, 4 channels) and bmad-method (10 roles, 4 channels) render correctly with auto-layout. All node types, edge types, and topology positions display properly.
1050
+
1051
+ ### Phase 3: Edge Types + Layer System
1052
+
1053
+ **Goal:** Three distinct edge types with layer toggles to manage visual complexity.
1054
+
1055
+ **Tasks:**
1056
+ 1. Implement `PeerRouteEdge.tsx` — bold amber Bezier with signal labels, hover animation
1057
+ 2. Implement `SignalFlowEdge.tsx` — medium gray Bezier with channel label, emission/subscription direction indicator
1058
+ 3. Implement `SpawnEdge.tsx` — thin dashed gray with "can spawn" tooltip
1059
+ 4. Implement `LayerToggle.tsx` — toolbar toggle buttons for 4 layers
1060
+ 5. Wire layer visibility to edge filtering in Canvas (filter edges by `data.kind` + layer state)
1061
+ 6. Wire channel node visibility to the Channels layer toggle
1062
+ 7. Ensure selection works across all edge types
1063
+ 8. Implement `EdgeInspector.tsx` — display edge details, editable for peer routes
1064
+
1065
+ **Verification:** Toggling layers hides/shows the correct edges. GSD template's 5 peer routes are visually distinct from signal flow edges. Spawn rules can be toggled on to see the orchestrator's spawn tree.
1066
+
1067
+ ### Phase 4: Inspector + Editing
1068
+
1069
+ **Goal:** Full property editing via inspector panels. Changes flow back to stores and canvas.
1070
+
1071
+ **Tasks:**
1072
+ 1. Implement `Inspector.tsx` — dispatcher based on selection state
1073
+ 2. Implement `RoleInspector.tsx` — 4 tabs (Identity, Communication, Capabilities, Prompts)
1074
+ 3. Implement `ChannelInspector.tsx` — signal list editor, derived emitter/subscriber lists
1075
+ 4. Implement `TeamInspector.tsx` — team metadata + raw YAML extension editor
1076
+ 5. Implement `PromptEditor.tsx` — monospace textarea for markdown prompt content
1077
+ 6. Implement shared inputs: `CapabilityInput.tsx`, `SignalPicker.tsx`, `ArrayInput.tsx`
1078
+ 7. Wire inspector edits back to config store → trigger derived edge recomputation
1079
+ 8. Implement derived edge recomputation: when emissions/subscriptions change, rebuild SignalFlowEdges
1080
+ 9. Connect history store: push snapshots before each inspector edit
1081
+
1082
+ **Verification:** Select a role, edit its emissions in the inspector → signal flow edges update on canvas. Edit capabilities → node display updates. Write prompt content → stored in config store.
1083
+
1084
+ ### Phase 5: Canvas Interactions (create, connect, delete)
1085
+
1086
+ **Goal:** Full interactive editing on the canvas itself.
1087
+
1088
+ **Tasks:**
1089
+ 1. Implement drag-and-drop from sidebar palette (Role + Channel blocks)
1090
+ 2. Implement `QuickAddMenu.tsx` — double-click to add nodes
1091
+ 3. Implement edge creation: drag handle → handle → SignalPicker dialog → create PeerRouteEdge
1092
+ 4. Implement node/edge deletion via Delete key
1093
+ 5. Implement `Sidebar.tsx` with block palette and `ConfigTree.tsx` for hierarchical view
1094
+ 6. Implement `TemplateGallery.tsx` — load bundled templates
1095
+ 7. Wire all interactions to history store for undo/redo
1096
+ 8. Implement `use-keyboard.ts` — keyboard shortcuts
1097
+
1098
+ **Verification:** Create a new team from scratch by dragging roles and channels, connecting peer routes, and editing properties. Undo/redo works across all operations.
1099
+
1100
+ ### Phase 6: Validation
1101
+
1102
+ **Goal:** Real-time validation with per-node error/warning display.
1103
+
1104
+ **Tasks:**
1105
+ 1. Implement `validator.ts` — 5-layer validation pipeline (browser-safe, no fs)
1106
+ 2. Import existing JSON schemas (`team.schema.json`, `role.schema.json`) for AJV validation
1107
+ 3. Implement `use-validation.ts` hook — debounced 300ms, triggers on store changes
1108
+ 4. Wire validation results to node data (update error/warning counts on nodes)
1109
+ 5. Implement `ValidationBar.tsx` — bottom status bar with summary counts
1110
+ 6. Add error/warning border styling to RoleNode and ChannelNode
1111
+ 7. Write validation tests covering all 5 layers
1112
+
1113
+ **Verification:** Delete a channel that has subscribers → error appears on subscribing roles. Add a signal to emissions that doesn't exist in any channel → warning. Circular inheritance → error.
1114
+
1115
+ ### Phase 7: Import/Export
1116
+
1117
+ **Goal:** Full YAML import and multi-file export.
1118
+
1119
+ **Tasks:**
1120
+ 1. Implement `compiler.ts: canvasToYaml()` — convert stores to multi-file YAML output
1121
+ 2. Implement `ImportModal.tsx` — paste YAML or load template
1122
+ 3. Implement `ExportModal.tsx` — tabbed file preview with copy + download
1123
+ 4. Implement multi-file YAML parsing for import (team.yaml + individual role YAMLs)
1124
+ 5. Add "New" button that resets all stores
1125
+ 6. Implement `signal-catalog.ts` — collect all known signal names for autocomplete
1126
+ 7. Implement `use-autosave.ts` — localStorage persistence
1127
+ 8. Implement `ThemeToggle.tsx` — dark/light mode
1128
+ 9. Write compiler tests: build config → compile → parse output → assert matches input
1129
+
1130
+ **Verification:** Import gsd template → edit roles → export → resulting YAML is valid and matches expected structure. Auto-save persists across browser refresh.
1131
+
1132
+ ### Phase 8: Polish + Testing
1133
+
1134
+ **Goal:** Production-quality UX, comprehensive tests, and documentation.
1135
+
1136
+ **Tasks:**
1137
+ 1. Refine auto-layout for both template topologies (verify GSD and BMAD render cleanly)
1138
+ 2. Add hover states, transitions, and animations to edges
1139
+ 3. Responsive sidebar/inspector (collapsible on narrow viewports)
1140
+ 4. Add validation for real-time feedback as user types (debounced input validation)
1141
+ 5. Add "Fit View" button and initial viewport positioning
1142
+ 6. Cross-browser testing (Chrome, Firefox, Safari)
1143
+ 7. Write integration tests: full round-trip (import → edit → export → reimport → verify)
1144
+ 8. Add `npm run dev` and `npm run build` scripts + verify production build
1145
+ 9. Update project README and CLAUDE.md with editor documentation
1146
+ 10. Add `openteams editor` CLI command that launches `vite dev` for the editor
1147
+
1148
+ ---
1149
+
1150
+ ## Appendix A: Example Visualizations
1151
+
1152
+ ### A.1 gsd (Peer Routes + Channels ON)
1153
+
1154
+ ```
1155
+ ┌──────────────────┐
1156
+ ┌───→│ [planning_events]│───→ orchestrator
1157
+ ┌────────────────┐ ┌──────────────┐ │ │ RESEARCH_COMPLETE│───→ roadmapper
1158
+ │ project- │──→│ research- │──┘ │ ROADMAP_READY │───→ planner
1159
+ │ researcher │ │ synthesizer │═══════│ PLAN_READY │───→ plan-checker
1160
+ ├────────────────┤ └──────────────┘ │ PLAN_VALIDATED │
1161
+ │ phase- │ │ PLAN_REJECTED │───→ planner
1162
+ │ researcher │──→ (also emits └──────────────────┘
1163
+ ├────────────────┤ RESEARCH_COMPLETE)
1164
+ │ codebase- │ ┌─────────────────────────┐
1165
+ │ mapper │──→ ... │ planner ◄══PLAN_REJECTED══ plan-checker
1166
+ └────────────────┘ │ planner ══PLAN_READY══► plan-checker
1167
+ │ verifier ══GAPS_FOUND══► planner
1168
+ ┌──────────────┐ └─────────────────────────┘
1169
+ │ ★ orchestrator│ (peer route loop)
1170
+ │ (root) │──emit──→ [project_lifecycle] ──sub──→ verifier
1171
+ └──────────────┘ [execution_events] ──sub──→ executor
1172
+ integration-checker
1173
+ ```
1174
+
1175
+ ### A.2 bmad-method (Peer Routes + Channels ON)
1176
+
1177
+ ```
1178
+ ┌──────────┐ ┌────────┐ ┌─────────────┐ ┌──────────────┐
1179
+ │ ★ master │ │ analyst│═══►│ pm │═══►│ architect │
1180
+ │ (root) │ │ │ │ │ │ │
1181
+ └──────────┘ └────────┘ └──────┬──────┘ └──────┬───────┘
1182
+ │ │ │
1183
+ │ ┌────┴─────┐ ┌─────┴──────┐
1184
+ │ │ux-designer│ │ scrum-master│
1185
+ │ └──────────┘ └──────┬──────┘
1186
+ │ │
1187
+ │ ┌─────┴──────┐
1188
+ │ │ developer │◄═══►
1189
+ │ └─────┬──────┘
1190
+ │ │
1191
+ │ ┌────────────┐ ┌─────┴──┐
1192
+ │ │ tech-writer│ │ qa │
1193
+ │ └────────────┘ └────────┘
1194
+
1195
+ ┌────┴──────────┐
1196
+ │ quick-flow-dev│ (standalone)
1197
+ └───────────────┘
1198
+ ```
1199
+
1200
+ ### A.3 Node ID Conventions
1201
+
1202
+ ```
1203
+ Nodes: role-{roleName} e.g. role-orchestrator, role-planner
1204
+ channel-{channelName} e.g. channel-planning_events
1205
+
1206
+ Edges: peer-{from}-{to}-{index} e.g. peer-planner-plan-checker-0
1207
+ emit-{role}-{channel} e.g. emit-planner-planning_events
1208
+ sub-{channel}-{role} e.g. sub-planning_events-planner
1209
+ spawn-{from}-{to} e.g. spawn-orchestrator-planner
1210
+ ```
1211
+
1212
+ ---
1213
+
1214
+ ## Appendix B: Decisions Log
1215
+
1216
+ | Decision | Choice | Rationale |
1217
+ |---|---|---|
1218
+ | Channel nodes default visibility | ON (hidden = default OFF was considered) | Showing channels makes the pub/sub topology explicit; users can toggle off if noisy |
1219
+ | Extension metadata editor | Raw YAML textarea | Structured editors for gsd:/bmad: are low ROI for v1; schemas vary per system |
1220
+ | Prompt editing | Inline markdown textarea | Full WYSIWYG is overkill for prompt authoring; monospace textarea is closer to the file format |
1221
+ | Signal flow edges | Derived from config, not manually drawn | Manual edge creation for subscriptions/emissions would duplicate the inspector workflow and create sync issues |
1222
+ | Spawn edges | Hidden by default | Spawn rules add visual noise; less relevant for understanding communication flow |
1223
+ | Layout algorithm | Dagre LR, spawn edges excluded | LR matches the natural left-to-right flow; excluding spawn edges prevents layout distortion |
1224
+ | State management | Zustand (5 stores) | Matches SDR pattern, lightweight, no boilerplate |
1225
+ | Multi-file export | Tabbed preview + zip download | OpenTeams configs are multi-file (team.yaml + roles/*.yaml + prompts/); single-file export wouldn't be useful |