@tt-a1i/hive 0.6.0-alpha.0

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 (326) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +202 -0
  3. package/README.md +175 -0
  4. package/SECURITY.md +48 -0
  5. package/dist/bin/team +7 -0
  6. package/dist/bin/team.cmd +2 -0
  7. package/dist/src/cli/hive.d.ts +9 -0
  8. package/dist/src/cli/hive.js +104 -0
  9. package/dist/src/cli/hive.js.map +1 -0
  10. package/dist/src/cli/team.d.ts +1 -0
  11. package/dist/src/cli/team.js +137 -0
  12. package/dist/src/cli/team.js.map +1 -0
  13. package/dist/src/server/agent-command-resolver.d.ts +8 -0
  14. package/dist/src/server/agent-command-resolver.js +72 -0
  15. package/dist/src/server/agent-command-resolver.js.map +1 -0
  16. package/dist/src/server/agent-launch-cache.d.ts +20 -0
  17. package/dist/src/server/agent-launch-cache.js +55 -0
  18. package/dist/src/server/agent-launch-cache.js.map +1 -0
  19. package/dist/src/server/agent-manager-support.d.ts +7 -0
  20. package/dist/src/server/agent-manager-support.js +68 -0
  21. package/dist/src/server/agent-manager-support.js.map +1 -0
  22. package/dist/src/server/agent-manager.d.ts +51 -0
  23. package/dist/src/server/agent-manager.js +92 -0
  24. package/dist/src/server/agent-manager.js.map +1 -0
  25. package/dist/src/server/agent-run-bootstrap.d.ts +62 -0
  26. package/dist/src/server/agent-run-bootstrap.js +64 -0
  27. package/dist/src/server/agent-run-bootstrap.js.map +1 -0
  28. package/dist/src/server/agent-run-exit-handler.d.ts +8 -0
  29. package/dist/src/server/agent-run-exit-handler.js +27 -0
  30. package/dist/src/server/agent-run-exit-handler.js.map +1 -0
  31. package/dist/src/server/agent-run-start-context.d.ts +24 -0
  32. package/dist/src/server/agent-run-start-context.js +2 -0
  33. package/dist/src/server/agent-run-start-context.js.map +1 -0
  34. package/dist/src/server/agent-run-starter.d.ts +23 -0
  35. package/dist/src/server/agent-run-starter.js +117 -0
  36. package/dist/src/server/agent-run-starter.js.map +1 -0
  37. package/dist/src/server/agent-run-store.d.ts +47 -0
  38. package/dist/src/server/agent-run-store.js +131 -0
  39. package/dist/src/server/agent-run-store.js.map +1 -0
  40. package/dist/src/server/agent-run-sync.d.ts +10 -0
  41. package/dist/src/server/agent-run-sync.js +25 -0
  42. package/dist/src/server/agent-run-sync.js.map +1 -0
  43. package/dist/src/server/agent-runtime-active-run.d.ts +3 -0
  44. package/dist/src/server/agent-runtime-active-run.js +11 -0
  45. package/dist/src/server/agent-runtime-active-run.js.map +1 -0
  46. package/dist/src/server/agent-runtime-close.d.ts +4 -0
  47. package/dist/src/server/agent-runtime-close.js +15 -0
  48. package/dist/src/server/agent-runtime-close.js.map +1 -0
  49. package/dist/src/server/agent-runtime-contract.d.ts +31 -0
  50. package/dist/src/server/agent-runtime-contract.js +2 -0
  51. package/dist/src/server/agent-runtime-contract.js.map +1 -0
  52. package/dist/src/server/agent-runtime-flow-adapter.d.ts +10 -0
  53. package/dist/src/server/agent-runtime-flow-adapter.js +15 -0
  54. package/dist/src/server/agent-runtime-flow-adapter.js.map +1 -0
  55. package/dist/src/server/agent-runtime-list-runs.d.ts +3 -0
  56. package/dist/src/server/agent-runtime-list-runs.js +19 -0
  57. package/dist/src/server/agent-runtime-list-runs.js.map +1 -0
  58. package/dist/src/server/agent-runtime-ports.d.ts +22 -0
  59. package/dist/src/server/agent-runtime-ports.js +2 -0
  60. package/dist/src/server/agent-runtime-ports.js.map +1 -0
  61. package/dist/src/server/agent-runtime-stop-run.d.ts +4 -0
  62. package/dist/src/server/agent-runtime-stop-run.js +17 -0
  63. package/dist/src/server/agent-runtime-stop-run.js.map +1 -0
  64. package/dist/src/server/agent-runtime-types.d.ts +4 -0
  65. package/dist/src/server/agent-runtime-types.js +2 -0
  66. package/dist/src/server/agent-runtime-types.js.map +1 -0
  67. package/dist/src/server/agent-runtime.d.ts +8 -0
  68. package/dist/src/server/agent-runtime.js +101 -0
  69. package/dist/src/server/agent-runtime.js.map +1 -0
  70. package/dist/src/server/agent-session-store.d.ts +7 -0
  71. package/dist/src/server/agent-session-store.js +52 -0
  72. package/dist/src/server/agent-session-store.js.map +1 -0
  73. package/dist/src/server/agent-startup-instructions.d.ts +13 -0
  74. package/dist/src/server/agent-startup-instructions.js +26 -0
  75. package/dist/src/server/agent-startup-instructions.js.map +1 -0
  76. package/dist/src/server/agent-stdin-dispatcher.d.ts +19 -0
  77. package/dist/src/server/agent-stdin-dispatcher.js +60 -0
  78. package/dist/src/server/agent-stdin-dispatcher.js.map +1 -0
  79. package/dist/src/server/agent-tokens.d.ts +15 -0
  80. package/dist/src/server/agent-tokens.js +26 -0
  81. package/dist/src/server/agent-tokens.js.map +1 -0
  82. package/dist/src/server/app-state-store.d.ts +10 -0
  83. package/dist/src/server/app-state-store.js +15 -0
  84. package/dist/src/server/app-state-store.js.map +1 -0
  85. package/dist/src/server/app.d.ts +14 -0
  86. package/dist/src/server/app.js +118 -0
  87. package/dist/src/server/app.js.map +1 -0
  88. package/dist/src/server/claude-command-defaults.d.ts +1 -0
  89. package/dist/src/server/claude-command-defaults.js +6 -0
  90. package/dist/src/server/claude-command-defaults.js.map +1 -0
  91. package/dist/src/server/claude-session-coordinator.d.ts +10 -0
  92. package/dist/src/server/claude-session-coordinator.js +69 -0
  93. package/dist/src/server/claude-session-coordinator.js.map +1 -0
  94. package/dist/src/server/claude-session-support.d.ts +1 -0
  95. package/dist/src/server/claude-session-support.js +2 -0
  96. package/dist/src/server/claude-session-support.js.map +1 -0
  97. package/dist/src/server/command-preset-defaults.d.ts +11 -0
  98. package/dist/src/server/command-preset-defaults.js +52 -0
  99. package/dist/src/server/command-preset-defaults.js.map +1 -0
  100. package/dist/src/server/command-preset-store.d.ts +49 -0
  101. package/dist/src/server/command-preset-store.js +90 -0
  102. package/dist/src/server/command-preset-store.js.map +1 -0
  103. package/dist/src/server/dispatch-ledger-serializer.d.ts +15 -0
  104. package/dist/src/server/dispatch-ledger-serializer.js +15 -0
  105. package/dist/src/server/dispatch-ledger-serializer.js.map +1 -0
  106. package/dist/src/server/dispatch-ledger-store.d.ts +45 -0
  107. package/dist/src/server/dispatch-ledger-store.js +196 -0
  108. package/dist/src/server/dispatch-ledger-store.js.map +1 -0
  109. package/dist/src/server/env-sync-message.d.ts +9 -0
  110. package/dist/src/server/env-sync-message.js +30 -0
  111. package/dist/src/server/env-sync-message.js.map +1 -0
  112. package/dist/src/server/fs-browse.d.ts +25 -0
  113. package/dist/src/server/fs-browse.js +130 -0
  114. package/dist/src/server/fs-browse.js.map +1 -0
  115. package/dist/src/server/fs-pick-folder.d.ts +25 -0
  116. package/dist/src/server/fs-pick-folder.js +132 -0
  117. package/dist/src/server/fs-pick-folder.js.map +1 -0
  118. package/dist/src/server/fs-sandbox.d.ts +13 -0
  119. package/dist/src/server/fs-sandbox.js +26 -0
  120. package/dist/src/server/fs-sandbox.js.map +1 -0
  121. package/dist/src/server/hive-team-guidance.d.ts +2 -0
  122. package/dist/src/server/hive-team-guidance.js +14 -0
  123. package/dist/src/server/hive-team-guidance.js.map +1 -0
  124. package/dist/src/server/http-errors.d.ts +16 -0
  125. package/dist/src/server/http-errors.js +33 -0
  126. package/dist/src/server/http-errors.js.map +1 -0
  127. package/dist/src/server/live-run-registry.d.ts +21 -0
  128. package/dist/src/server/live-run-registry.js +53 -0
  129. package/dist/src/server/live-run-registry.js.map +1 -0
  130. package/dist/src/server/message-log-store.d.ts +48 -0
  131. package/dist/src/server/message-log-store.js +144 -0
  132. package/dist/src/server/message-log-store.js.map +1 -0
  133. package/dist/src/server/orchestrator-autostart.d.ts +30 -0
  134. package/dist/src/server/orchestrator-autostart.js +103 -0
  135. package/dist/src/server/orchestrator-autostart.js.map +1 -0
  136. package/dist/src/server/orchestrator-launch.d.ts +22 -0
  137. package/dist/src/server/orchestrator-launch.js +75 -0
  138. package/dist/src/server/orchestrator-launch.js.map +1 -0
  139. package/dist/src/server/post-start-input-writer.d.ts +6 -0
  140. package/dist/src/server/post-start-input-writer.js +118 -0
  141. package/dist/src/server/post-start-input-writer.js.map +1 -0
  142. package/dist/src/server/preset-launch-support.d.ts +6 -0
  143. package/dist/src/server/preset-launch-support.js +67 -0
  144. package/dist/src/server/preset-launch-support.js.map +1 -0
  145. package/dist/src/server/pty-output-bus.d.ts +8 -0
  146. package/dist/src/server/pty-output-bus.js +33 -0
  147. package/dist/src/server/pty-output-bus.js.map +1 -0
  148. package/dist/src/server/recovery-summary.d.ts +10 -0
  149. package/dist/src/server/recovery-summary.js +89 -0
  150. package/dist/src/server/recovery-summary.js.map +1 -0
  151. package/dist/src/server/restart-policy-support.d.ts +23 -0
  152. package/dist/src/server/restart-policy-support.js +12 -0
  153. package/dist/src/server/restart-policy-support.js.map +1 -0
  154. package/dist/src/server/restart-policy.d.ts +14 -0
  155. package/dist/src/server/restart-policy.js +42 -0
  156. package/dist/src/server/restart-policy.js.map +1 -0
  157. package/dist/src/server/role-template-store.d.ts +44 -0
  158. package/dist/src/server/role-template-store.js +71 -0
  159. package/dist/src/server/role-template-store.js.map +1 -0
  160. package/dist/src/server/role-templates.d.ts +7 -0
  161. package/dist/src/server/role-templates.js +55 -0
  162. package/dist/src/server/role-templates.js.map +1 -0
  163. package/dist/src/server/route-helpers.d.ts +7 -0
  164. package/dist/src/server/route-helpers.js +48 -0
  165. package/dist/src/server/route-helpers.js.map +1 -0
  166. package/dist/src/server/route-types.d.ts +58 -0
  167. package/dist/src/server/route-types.js +2 -0
  168. package/dist/src/server/route-types.js.map +1 -0
  169. package/dist/src/server/routes-dispatches.d.ts +2 -0
  170. package/dist/src/server/routes-dispatches.js +53 -0
  171. package/dist/src/server/routes-dispatches.js.map +1 -0
  172. package/dist/src/server/routes-fs.d.ts +2 -0
  173. package/dist/src/server/routes-fs.js +25 -0
  174. package/dist/src/server/routes-fs.js.map +1 -0
  175. package/dist/src/server/routes-runtime.d.ts +2 -0
  176. package/dist/src/server/routes-runtime.js +46 -0
  177. package/dist/src/server/routes-runtime.js.map +1 -0
  178. package/dist/src/server/routes-settings.d.ts +2 -0
  179. package/dist/src/server/routes-settings.js +124 -0
  180. package/dist/src/server/routes-settings.js.map +1 -0
  181. package/dist/src/server/routes-tasks.d.ts +2 -0
  182. package/dist/src/server/routes-tasks.js +25 -0
  183. package/dist/src/server/routes-tasks.js.map +1 -0
  184. package/dist/src/server/routes-team.d.ts +2 -0
  185. package/dist/src/server/routes-team.js +50 -0
  186. package/dist/src/server/routes-team.js.map +1 -0
  187. package/dist/src/server/routes-ui.d.ts +2 -0
  188. package/dist/src/server/routes-ui.js +8 -0
  189. package/dist/src/server/routes-ui.js.map +1 -0
  190. package/dist/src/server/routes-workspaces.d.ts +2 -0
  191. package/dist/src/server/routes-workspaces.js +154 -0
  192. package/dist/src/server/routes-workspaces.js.map +1 -0
  193. package/dist/src/server/routes.d.ts +6 -0
  194. package/dist/src/server/routes.js +36 -0
  195. package/dist/src/server/routes.js.map +1 -0
  196. package/dist/src/server/runtime-database.d.ts +2 -0
  197. package/dist/src/server/runtime-database.js +13 -0
  198. package/dist/src/server/runtime-database.js.map +1 -0
  199. package/dist/src/server/runtime-message-builders.d.ts +6 -0
  200. package/dist/src/server/runtime-message-builders.js +52 -0
  201. package/dist/src/server/runtime-message-builders.js.map +1 -0
  202. package/dist/src/server/runtime-restart-policy.d.ts +14 -0
  203. package/dist/src/server/runtime-restart-policy.js +11 -0
  204. package/dist/src/server/runtime-restart-policy.js.map +1 -0
  205. package/dist/src/server/runtime-store-helpers.d.ts +71 -0
  206. package/dist/src/server/runtime-store-helpers.js +174 -0
  207. package/dist/src/server/runtime-store-helpers.js.map +1 -0
  208. package/dist/src/server/runtime-store.d.ts +70 -0
  209. package/dist/src/server/runtime-store.js +82 -0
  210. package/dist/src/server/runtime-store.js.map +1 -0
  211. package/dist/src/server/session-capture-claude.d.ts +11 -0
  212. package/dist/src/server/session-capture-claude.js +78 -0
  213. package/dist/src/server/session-capture-claude.js.map +1 -0
  214. package/dist/src/server/session-capture-codex.d.ts +5 -0
  215. package/dist/src/server/session-capture-codex.js +72 -0
  216. package/dist/src/server/session-capture-codex.js.map +1 -0
  217. package/dist/src/server/session-capture-gemini.d.ts +5 -0
  218. package/dist/src/server/session-capture-gemini.js +80 -0
  219. package/dist/src/server/session-capture-gemini.js.map +1 -0
  220. package/dist/src/server/session-capture-opencode.d.ts +4 -0
  221. package/dist/src/server/session-capture-opencode.js +43 -0
  222. package/dist/src/server/session-capture-opencode.js.map +1 -0
  223. package/dist/src/server/session-capture.d.ts +71 -0
  224. package/dist/src/server/session-capture.js +92 -0
  225. package/dist/src/server/session-capture.js.map +1 -0
  226. package/dist/src/server/settings-store.d.ts +19 -0
  227. package/dist/src/server/settings-store.js +22 -0
  228. package/dist/src/server/settings-store.js.map +1 -0
  229. package/dist/src/server/sqlite-schema-v10.d.ts +2 -0
  230. package/dist/src/server/sqlite-schema-v10.js +14 -0
  231. package/dist/src/server/sqlite-schema-v10.js.map +1 -0
  232. package/dist/src/server/sqlite-schema-v11.d.ts +2 -0
  233. package/dist/src/server/sqlite-schema-v11.js +11 -0
  234. package/dist/src/server/sqlite-schema-v11.js.map +1 -0
  235. package/dist/src/server/sqlite-schema-v12.d.ts +2 -0
  236. package/dist/src/server/sqlite-schema-v12.js +22 -0
  237. package/dist/src/server/sqlite-schema-v12.js.map +1 -0
  238. package/dist/src/server/sqlite-schema-v13.d.ts +2 -0
  239. package/dist/src/server/sqlite-schema-v13.js +5 -0
  240. package/dist/src/server/sqlite-schema-v13.js.map +1 -0
  241. package/dist/src/server/sqlite-schema-v14.d.ts +2 -0
  242. package/dist/src/server/sqlite-schema-v14.js +85 -0
  243. package/dist/src/server/sqlite-schema-v14.js.map +1 -0
  244. package/dist/src/server/sqlite-schema-v5.d.ts +2 -0
  245. package/dist/src/server/sqlite-schema-v5.js +62 -0
  246. package/dist/src/server/sqlite-schema-v5.js.map +1 -0
  247. package/dist/src/server/sqlite-schema-v7.d.ts +2 -0
  248. package/dist/src/server/sqlite-schema-v7.js +71 -0
  249. package/dist/src/server/sqlite-schema-v7.js.map +1 -0
  250. package/dist/src/server/sqlite-schema-v8.d.ts +2 -0
  251. package/dist/src/server/sqlite-schema-v8.js +7 -0
  252. package/dist/src/server/sqlite-schema-v8.js.map +1 -0
  253. package/dist/src/server/sqlite-schema-v9.d.ts +2 -0
  254. package/dist/src/server/sqlite-schema-v9.js +7 -0
  255. package/dist/src/server/sqlite-schema-v9.js.map +1 -0
  256. package/dist/src/server/sqlite-schema.d.ts +3 -0
  257. package/dist/src/server/sqlite-schema.js +185 -0
  258. package/dist/src/server/sqlite-schema.js.map +1 -0
  259. package/dist/src/server/system-message.d.ts +1 -0
  260. package/dist/src/server/system-message.js +2 -0
  261. package/dist/src/server/system-message.js.map +1 -0
  262. package/dist/src/server/tasks-file-watcher.d.ts +8 -0
  263. package/dist/src/server/tasks-file-watcher.js +60 -0
  264. package/dist/src/server/tasks-file-watcher.js.map +1 -0
  265. package/dist/src/server/tasks-file.d.ts +11 -0
  266. package/dist/src/server/tasks-file.js +33 -0
  267. package/dist/src/server/tasks-file.js.map +1 -0
  268. package/dist/src/server/tasks-websocket-server.d.ts +7 -0
  269. package/dist/src/server/tasks-websocket-server.js +72 -0
  270. package/dist/src/server/tasks-websocket-server.js.map +1 -0
  271. package/dist/src/server/team-authz.d.ts +13 -0
  272. package/dist/src/server/team-authz.js +33 -0
  273. package/dist/src/server/team-authz.js.map +1 -0
  274. package/dist/src/server/team-list-serializer.d.ts +8 -0
  275. package/dist/src/server/team-list-serializer.js +8 -0
  276. package/dist/src/server/team-list-serializer.js.map +1 -0
  277. package/dist/src/server/team-operations.d.ts +41 -0
  278. package/dist/src/server/team-operations.js +105 -0
  279. package/dist/src/server/team-operations.js.map +1 -0
  280. package/dist/src/server/terminal-flow-control.d.ts +19 -0
  281. package/dist/src/server/terminal-flow-control.js +117 -0
  282. package/dist/src/server/terminal-flow-control.js.map +1 -0
  283. package/dist/src/server/terminal-protocol.d.ts +29 -0
  284. package/dist/src/server/terminal-protocol.js +42 -0
  285. package/dist/src/server/terminal-protocol.js.map +1 -0
  286. package/dist/src/server/terminal-state-mirror.d.ts +15 -0
  287. package/dist/src/server/terminal-state-mirror.js +47 -0
  288. package/dist/src/server/terminal-state-mirror.js.map +1 -0
  289. package/dist/src/server/terminal-stream-hub.d.ts +9 -0
  290. package/dist/src/server/terminal-stream-hub.js +179 -0
  291. package/dist/src/server/terminal-stream-hub.js.map +1 -0
  292. package/dist/src/server/terminal-ws-server.d.ts +5 -0
  293. package/dist/src/server/terminal-ws-server.js +85 -0
  294. package/dist/src/server/terminal-ws-server.js.map +1 -0
  295. package/dist/src/server/ui-auth-helpers.d.ts +4 -0
  296. package/dist/src/server/ui-auth-helpers.js +23 -0
  297. package/dist/src/server/ui-auth-helpers.js.map +1 -0
  298. package/dist/src/server/ui-auth.d.ts +5 -0
  299. package/dist/src/server/ui-auth.js +13 -0
  300. package/dist/src/server/ui-auth.js.map +1 -0
  301. package/dist/src/server/workspace-store-contract.d.ts +28 -0
  302. package/dist/src/server/workspace-store-contract.js +2 -0
  303. package/dist/src/server/workspace-store-contract.js.map +1 -0
  304. package/dist/src/server/workspace-store-hydration.d.ts +5 -0
  305. package/dist/src/server/workspace-store-hydration.js +64 -0
  306. package/dist/src/server/workspace-store-hydration.js.map +1 -0
  307. package/dist/src/server/workspace-store-mutations.d.ts +13 -0
  308. package/dist/src/server/workspace-store-mutations.js +49 -0
  309. package/dist/src/server/workspace-store-mutations.js.map +1 -0
  310. package/dist/src/server/workspace-store-support.d.ts +29 -0
  311. package/dist/src/server/workspace-store-support.js +25 -0
  312. package/dist/src/server/workspace-store-support.js.map +1 -0
  313. package/dist/src/server/workspace-store.d.ts +5 -0
  314. package/dist/src/server/workspace-store.js +114 -0
  315. package/dist/src/server/workspace-store.js.map +1 -0
  316. package/dist/src/shared/types.d.ts +36 -0
  317. package/dist/src/shared/types.js +2 -0
  318. package/dist/src/shared/types.js.map +1 -0
  319. package/package.json +108 -0
  320. package/scripts/fix-runtime-artifacts.mjs +33 -0
  321. package/web/dist/assets/addon-fit-DX4qG4td.js +1 -0
  322. package/web/dist/assets/index-CjlaoOoA.css +1 -0
  323. package/web/dist/assets/index-CwdRvXrs.js +63 -0
  324. package/web/dist/assets/xterm-B-qIQCd3.js +16 -0
  325. package/web/dist/favicon.svg +58 -0
  326. package/web/dist/index.html +22 -0
@@ -0,0 +1,185 @@
1
+ import { applySchemaVersion5 } from './sqlite-schema-v5.js';
2
+ import { applySchemaVersion7 } from './sqlite-schema-v7.js';
3
+ import { applySchemaVersion8 } from './sqlite-schema-v8.js';
4
+ import { applySchemaVersion9 } from './sqlite-schema-v9.js';
5
+ import { applySchemaVersion10 } from './sqlite-schema-v10.js';
6
+ import { applySchemaVersion11 } from './sqlite-schema-v11.js';
7
+ import { applySchemaVersion12 } from './sqlite-schema-v12.js';
8
+ import { applySchemaVersion13 } from './sqlite-schema-v13.js';
9
+ import { applySchemaVersion14 } from './sqlite-schema-v14.js';
10
+ export const CURRENT_SCHEMA_VERSION = 14;
11
+ export const initializeRuntimeDatabase = (db) => {
12
+ db.exec(`
13
+ CREATE TABLE IF NOT EXISTS schema_version (
14
+ version INTEGER PRIMARY KEY,
15
+ applied_at INTEGER NOT NULL
16
+ );
17
+
18
+ CREATE TABLE IF NOT EXISTS workspaces (
19
+ id TEXT PRIMARY KEY,
20
+ name TEXT NOT NULL,
21
+ path TEXT NOT NULL,
22
+ created_at INTEGER NOT NULL
23
+ );
24
+
25
+ CREATE TABLE IF NOT EXISTS workers (
26
+ id TEXT PRIMARY KEY,
27
+ workspace_id TEXT NOT NULL,
28
+ name TEXT NOT NULL,
29
+ description TEXT,
30
+ last_session_id TEXT,
31
+ role TEXT NOT NULL,
32
+ created_at INTEGER NOT NULL
33
+ );
34
+
35
+ CREATE TABLE IF NOT EXISTS messages (
36
+ sequence INTEGER PRIMARY KEY AUTOINCREMENT,
37
+ workspace_id TEXT NOT NULL,
38
+ worker_id TEXT NOT NULL,
39
+ type TEXT NOT NULL,
40
+ from_agent_id TEXT,
41
+ to_agent_id TEXT,
42
+ text TEXT,
43
+ status TEXT,
44
+ artifacts TEXT,
45
+ created_at INTEGER NOT NULL
46
+ );
47
+
48
+ CREATE TABLE IF NOT EXISTS agent_launch_configs (
49
+ workspace_id TEXT NOT NULL,
50
+ agent_id TEXT NOT NULL,
51
+ command TEXT NOT NULL,
52
+ args_json TEXT NOT NULL,
53
+ command_preset_id TEXT,
54
+ resume_args_template TEXT,
55
+ session_id_capture_json TEXT,
56
+ created_at INTEGER NOT NULL,
57
+ updated_at INTEGER NOT NULL,
58
+ PRIMARY KEY (workspace_id, agent_id)
59
+ );
60
+
61
+ CREATE TABLE IF NOT EXISTS agent_runs (
62
+ run_id TEXT PRIMARY KEY,
63
+ agent_id TEXT NOT NULL,
64
+ pid INTEGER,
65
+ status TEXT NOT NULL,
66
+ exit_code INTEGER,
67
+ started_at INTEGER NOT NULL,
68
+ ended_at INTEGER,
69
+ created_at INTEGER NOT NULL,
70
+ updated_at INTEGER NOT NULL
71
+ );
72
+
73
+ CREATE TABLE IF NOT EXISTS agent_sessions (
74
+ agent_id TEXT NOT NULL,
75
+ workspace_id TEXT NOT NULL,
76
+ last_session_id TEXT NOT NULL,
77
+ updated_at INTEGER NOT NULL,
78
+ PRIMARY KEY (workspace_id, agent_id)
79
+ );
80
+
81
+ CREATE TABLE IF NOT EXISTS dispatches (
82
+ sequence INTEGER PRIMARY KEY AUTOINCREMENT,
83
+ id TEXT NOT NULL UNIQUE,
84
+ workspace_id TEXT NOT NULL,
85
+ from_agent_id TEXT,
86
+ to_agent_id TEXT NOT NULL,
87
+ text TEXT NOT NULL,
88
+ status TEXT NOT NULL,
89
+ created_at INTEGER NOT NULL,
90
+ delivered_at INTEGER,
91
+ submitted_at INTEGER,
92
+ reported_at INTEGER,
93
+ report_text TEXT,
94
+ artifacts TEXT
95
+ );
96
+
97
+ CREATE INDEX IF NOT EXISTS idx_dispatches_workspace_created_at
98
+ ON dispatches (workspace_id, sequence);
99
+
100
+ CREATE INDEX IF NOT EXISTS idx_dispatches_open_by_worker
101
+ ON dispatches (workspace_id, to_agent_id, status, sequence);
102
+ `);
103
+ const versions = db
104
+ .prepare('SELECT version FROM schema_version ORDER BY version ASC')
105
+ .all();
106
+ const appliedVersions = new Set(versions.map((row) => row.version));
107
+ if (!appliedVersions.has(1)) {
108
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(1, Date.now());
109
+ appliedVersions.add(1);
110
+ }
111
+ if (!appliedVersions.has(2)) {
112
+ const workerColumns = new Set(db.prepare('PRAGMA table_info(workers)').all().map((column) => column.name));
113
+ if (workerColumns.size > 0 && !workerColumns.has('description')) {
114
+ db.exec('ALTER TABLE workers ADD COLUMN description TEXT');
115
+ }
116
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(2, Date.now());
117
+ }
118
+ if (!appliedVersions.has(3)) {
119
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(3, Date.now());
120
+ appliedVersions.add(3);
121
+ }
122
+ if (!appliedVersions.has(4)) {
123
+ const messageColumns = new Set(db.prepare('PRAGMA table_info(messages)').all().map((column) => column.name));
124
+ if (messageColumns.size > 0 && !messageColumns.has('artifacts')) {
125
+ db.exec('ALTER TABLE messages ADD COLUMN artifacts TEXT');
126
+ }
127
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(4, Date.now());
128
+ }
129
+ if (!appliedVersions.has(5)) {
130
+ applySchemaVersion5(db);
131
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(5, Date.now());
132
+ }
133
+ if (!appliedVersions.has(6)) {
134
+ const launchConfigColumns = new Set(db.prepare('PRAGMA table_info(agent_launch_configs)').all().map((column) => column.name));
135
+ if (!launchConfigColumns.has('resume_args_template')) {
136
+ db.exec('ALTER TABLE agent_launch_configs ADD COLUMN resume_args_template TEXT');
137
+ }
138
+ if (!launchConfigColumns.has('session_id_capture_json')) {
139
+ db.exec('ALTER TABLE agent_launch_configs ADD COLUMN session_id_capture_json TEXT');
140
+ }
141
+ db.exec(`
142
+ CREATE TABLE IF NOT EXISTS agent_sessions (
143
+ agent_id TEXT NOT NULL,
144
+ workspace_id TEXT NOT NULL,
145
+ last_session_id TEXT NOT NULL,
146
+ updated_at INTEGER NOT NULL,
147
+ PRIMARY KEY (workspace_id, agent_id)
148
+ );
149
+ `);
150
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(6, Date.now());
151
+ }
152
+ if (!appliedVersions.has(7)) {
153
+ applySchemaVersion7(db);
154
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(7, Date.now());
155
+ }
156
+ if (!appliedVersions.has(8)) {
157
+ applySchemaVersion8(db);
158
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(8, Date.now());
159
+ }
160
+ if (!appliedVersions.has(9)) {
161
+ applySchemaVersion9(db);
162
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(9, Date.now());
163
+ }
164
+ if (!appliedVersions.has(10)) {
165
+ applySchemaVersion10(db);
166
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(10, Date.now());
167
+ }
168
+ if (!appliedVersions.has(11)) {
169
+ applySchemaVersion11(db);
170
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(11, Date.now());
171
+ }
172
+ if (!appliedVersions.has(12)) {
173
+ applySchemaVersion12(db);
174
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(12, Date.now());
175
+ }
176
+ if (!appliedVersions.has(13)) {
177
+ applySchemaVersion13(db);
178
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(13, Date.now());
179
+ }
180
+ if (!appliedVersions.has(14)) {
181
+ applySchemaVersion14(db);
182
+ db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)').run(14, Date.now());
183
+ }
184
+ };
185
+ //# sourceMappingURL=sqlite-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-schema.js","sourceRoot":"","sources":["../../../src/server/sqlite-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const wrapSystemMessage: (content: string) => string;
@@ -0,0 +1,2 @@
1
+ export const wrapSystemMessage = (content) => `[Hive 系统消息:${content}]`;
2
+ //# sourceMappingURL=system-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-message.js","sourceRoot":"","sources":["../../../src/server/system-message.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,cAAc,OAAO,GAAG,CAAA"}
@@ -0,0 +1,8 @@
1
+ export interface TasksFileWatcher {
2
+ close: () => Promise<void>;
3
+ start: (workspaceId: string, workspacePath: string) => Promise<void>;
4
+ stop: (workspaceId: string) => Promise<void>;
5
+ }
6
+ export declare const createTasksFileWatcher: ({ onTasksUpdated, }: {
7
+ onTasksUpdated: (workspaceId: string, content: string) => void;
8
+ }) => TasksFileWatcher;
@@ -0,0 +1,60 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import chokidar from 'chokidar';
4
+ import { ensureTasksFile, getTasksFilePath } from './tasks-file.js';
5
+ const DEBOUNCE_MS = 100;
6
+ export const createTasksFileWatcher = ({ onTasksUpdated, }) => {
7
+ const watchers = new Map();
8
+ const timers = new Map();
9
+ const clearTimer = (workspaceId) => {
10
+ const timer = timers.get(workspaceId);
11
+ if (!timer)
12
+ return;
13
+ clearTimeout(timer);
14
+ timers.delete(workspaceId);
15
+ };
16
+ const emitCurrentContent = async (workspaceId, workspacePath) => {
17
+ const tasksPath = getTasksFilePath(workspacePath);
18
+ try {
19
+ const content = existsSync(tasksPath) ? await readFile(tasksPath, 'utf8') : '';
20
+ onTasksUpdated(workspaceId, content);
21
+ }
22
+ catch (error) {
23
+ if (error.code !== 'ENOENT')
24
+ throw error;
25
+ onTasksUpdated(workspaceId, '');
26
+ }
27
+ };
28
+ const stop = async (workspaceId) => {
29
+ clearTimer(workspaceId);
30
+ const watcher = watchers.get(workspaceId);
31
+ watchers.delete(workspaceId);
32
+ await watcher?.close();
33
+ };
34
+ return {
35
+ close: async () => {
36
+ await Promise.all(Array.from(watchers.keys(), (workspaceId) => stop(workspaceId)));
37
+ },
38
+ start: async (workspaceId, workspacePath) => {
39
+ await stop(workspaceId);
40
+ ensureTasksFile(workspacePath);
41
+ const watcher = chokidar.watch(getTasksFilePath(workspacePath), {
42
+ ignoreInitial: true,
43
+ });
44
+ const scheduleEmit = () => {
45
+ clearTimer(workspaceId);
46
+ timers.set(workspaceId, setTimeout(() => {
47
+ timers.delete(workspaceId);
48
+ void emitCurrentContent(workspaceId, workspacePath);
49
+ }, DEBOUNCE_MS));
50
+ };
51
+ watcher.on('add', scheduleEmit);
52
+ watcher.on('change', scheduleEmit);
53
+ watcher.on('unlink', scheduleEmit);
54
+ watchers.set(workspaceId, watcher);
55
+ await new Promise((resolve) => watcher.once('ready', () => resolve()));
56
+ },
57
+ stop,
58
+ };
59
+ };
60
+ //# sourceMappingURL=tasks-file-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-file-watcher.js","sourceRoot":"","sources":["../../../src/server/tasks-file-watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface TasksFileService {
2
+ readTasks: (workspacePath: string) => string;
3
+ writeTasks: (workspacePath: string, content: string) => void;
4
+ }
5
+ export declare const HIVE_DIR_NAME = ".hive";
6
+ export declare const TASKS_FILE_NAME = "tasks.md";
7
+ export declare const TASKS_RELATIVE_PATH = ".hive/tasks.md";
8
+ export declare const getTasksFilePath: (workspacePath: string) => string;
9
+ export declare const ensureTasksFile: (workspacePath: string) => string;
10
+ export declare const createTasksFileService: () => TasksFileService;
11
+ export type { TasksFileService };
@@ -0,0 +1,33 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ export const HIVE_DIR_NAME = '.hive';
4
+ export const TASKS_FILE_NAME = 'tasks.md';
5
+ export const TASKS_RELATIVE_PATH = `${HIVE_DIR_NAME}/${TASKS_FILE_NAME}`;
6
+ export const getTasksFilePath = (workspacePath) => join(workspacePath, HIVE_DIR_NAME, TASKS_FILE_NAME);
7
+ const getLegacyTasksFilePath = (workspacePath) => join(workspacePath, TASKS_FILE_NAME);
8
+ const ensureTasksDir = (workspacePath) => {
9
+ mkdirSync(dirname(getTasksFilePath(workspacePath)), { recursive: true });
10
+ };
11
+ export const ensureTasksFile = (workspacePath) => {
12
+ ensureTasksDir(workspacePath);
13
+ const tasksFilePath = getTasksFilePath(workspacePath);
14
+ if (existsSync(tasksFilePath)) {
15
+ return readFileSync(tasksFilePath, 'utf8');
16
+ }
17
+ const legacyTasksFilePath = getLegacyTasksFilePath(workspacePath);
18
+ const content = existsSync(legacyTasksFilePath) ? readFileSync(legacyTasksFilePath, 'utf8') : '';
19
+ writeFileSync(tasksFilePath, content, 'utf8');
20
+ return content;
21
+ };
22
+ export const createTasksFileService = () => {
23
+ return {
24
+ readTasks(workspacePath) {
25
+ return ensureTasksFile(workspacePath);
26
+ },
27
+ writeTasks(workspacePath, content) {
28
+ ensureTasksDir(workspacePath);
29
+ writeFileSync(getTasksFilePath(workspacePath), content, 'utf8');
30
+ },
31
+ };
32
+ };
33
+ //# sourceMappingURL=tasks-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-file.js","sourceRoot":"","sources":["../../../src/server/tasks-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAOzC,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAA;AACpC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAA;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,aAAa,IAAI,eAAe,EAAE,CAAA;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAE,EAAE,CACxD,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,CAAA;AAErD,MAAM,sBAAsB,GAAG,CAAC,aAAqB,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;AAE9F,MAAM,cAAc,GAAG,CAAC,aAAqB,EAAE,EAAE;IAC/C,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,aAAqB,EAAE,EAAE;IACvD,cAAc,CAAC,aAAa,CAAC,CAAA;IAC7B,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAA;IACrD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC5C,CAAC;IAED,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAA;IACjE,MAAM,OAAO,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAChG,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAqB,EAAE;IAC3D,OAAO;QACL,SAAS,CAAC,aAAa;YACrB,OAAO,eAAe,CAAC,aAAa,CAAC,CAAA;QACvC,CAAC;QAED,UAAU,CAAC,aAAa,EAAE,OAAO;YAC/B,cAAc,CAAC,aAAa,CAAC,CAAA;YAC7B,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACjE,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { Server } from 'node:http';
2
+ import type { RuntimeStore } from './runtime-store.js';
3
+ export interface TasksWebSocketServer {
4
+ close: () => void;
5
+ publish: (workspaceId: string, content: string) => void;
6
+ }
7
+ export declare const createTasksWebSocketServer: (server: Server, store: RuntimeStore) => TasksWebSocketServer;
@@ -0,0 +1,72 @@
1
+ import { WebSocketServer } from 'ws';
2
+ import { readCookie } from './ui-auth-helpers.js';
3
+ const matchTasksPath = (pathname) => {
4
+ const match = /^\/ws\/tasks\/(?<workspaceId>[^/]+)$/.exec(pathname);
5
+ const workspaceId = match?.groups?.workspaceId;
6
+ return workspaceId ? decodeURIComponent(workspaceId) : null;
7
+ };
8
+ const rejectUpgrade = (socket, status) => {
9
+ socket.write(`HTTP/1.1 ${status}\r\n\r\n`);
10
+ socket.destroy();
11
+ };
12
+ export const createTasksWebSocketServer = (server, store) => {
13
+ const wss = new WebSocketServer({ noServer: true });
14
+ const socketsByWorkspaceId = new Map();
15
+ const validateUpgradeSession = (request) => {
16
+ const cookieHeader = Array.isArray(request.headers.cookie)
17
+ ? request.headers.cookie.join('; ')
18
+ : request.headers.cookie;
19
+ const token = readCookie(cookieHeader, 'hive_ui_token');
20
+ return store.validateUiToken(token);
21
+ };
22
+ server.on('upgrade', (request, socket, head) => {
23
+ const url = new URL(request.url ?? '/', 'http://127.0.0.1');
24
+ const workspaceId = matchTasksPath(url.pathname);
25
+ if (!workspaceId)
26
+ return;
27
+ if (!validateUpgradeSession(request)) {
28
+ rejectUpgrade(socket, '401 Unauthorized');
29
+ return;
30
+ }
31
+ try {
32
+ store.getWorkspaceSnapshot(workspaceId);
33
+ }
34
+ catch {
35
+ rejectUpgrade(socket, '404 Not Found');
36
+ return;
37
+ }
38
+ wss.handleUpgrade(request, socket, head, (ws) => {
39
+ const sockets = socketsByWorkspaceId.get(workspaceId) ?? new Set();
40
+ sockets.add(ws);
41
+ socketsByWorkspaceId.set(workspaceId, sockets);
42
+ ws.on('close', () => {
43
+ sockets.delete(ws);
44
+ if (sockets.size === 0) {
45
+ socketsByWorkspaceId.delete(workspaceId);
46
+ }
47
+ });
48
+ });
49
+ });
50
+ return {
51
+ close: () => {
52
+ for (const sockets of socketsByWorkspaceId.values()) {
53
+ for (const socket of sockets)
54
+ socket.close();
55
+ }
56
+ socketsByWorkspaceId.clear();
57
+ wss.close();
58
+ },
59
+ publish: (workspaceId, content) => {
60
+ const sockets = socketsByWorkspaceId.get(workspaceId);
61
+ if (!sockets)
62
+ return;
63
+ const payload = JSON.stringify({ type: 'tasks-updated', content });
64
+ for (const socket of sockets) {
65
+ if (socket.readyState === socket.OPEN) {
66
+ socket.send(payload);
67
+ }
68
+ }
69
+ },
70
+ };
71
+ };
72
+ //# sourceMappingURL=tasks-websocket-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-websocket-server.js","sourceRoot":"","sources":["../../../src/server/tasks-websocket-server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAA;AAGpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAE;IAC1C,MAAM,KAAK,GAAG,sCAAsC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnE,MAAM,WAAW,GAAG,KAAK,EAAE,MAAM,EAAE,WAAW,CAAA;IAC9C,OAAO,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC7D,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CACpB,MAAqF,EACrF,MAAc,EACd,EAAE;IACF,MAAM,CAAC,KAAK,CAAC,YAAY,MAAM,UAAU,CAAC,CAAA;IAC1C,MAAM,CAAC,OAAO,EAAE,CAAA;AAClB,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,MAAc,EACd,KAAmB,EACG,EAAE;IACxB,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE7D,MAAM,sBAAsB,GAAG,CAAC,OAAwB,EAAE,EAAE;QAC1D,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACxD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAA;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;QACvD,OAAO,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC,CAAA;IAED,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAA;QAC3D,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAChD,IAAI,CAAC,WAAW;YAAE,OAAM;QACxB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,aAAa,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;YACzC,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,KAAK,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;YACtC,OAAM;QACR,CAAC;QACD,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,GAAG,EAAY,CAAA;YAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC9C,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAClB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACvB,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;gBAC1C,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,EAAE,GAAG,EAAE;YACV,KAAK,MAAM,OAAO,IAAI,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC;gBACpD,KAAK,MAAM,MAAM,IAAI,OAAO;oBAAE,MAAM,CAAC,KAAK,EAAE,CAAA;YAC9C,CAAC;YACD,oBAAoB,CAAC,KAAK,EAAE,CAAA;YAC5B,GAAG,CAAC,KAAK,EAAE,CAAA;QACb,CAAC;QACD,OAAO,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACrD,IAAI,CAAC,OAAO;gBAAE,OAAM;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAA;YAClE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;oBACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { AgentSummary } from '../shared/types.js';
2
+ export type TeamCommand = 'send' | 'list' | 'report' | 'help';
3
+ export declare const commandAllowedForRole: (role: AgentSummary["role"], command: TeamCommand) => boolean;
4
+ interface AuthenticateInput {
5
+ fromAgentId: string | undefined;
6
+ getAgent: (workspaceId: string, agentId: string) => AgentSummary;
7
+ token: string | undefined;
8
+ validateToken: (agentId: string, token: string | undefined) => boolean;
9
+ workspaceId: string;
10
+ }
11
+ export declare const authenticateCliAgent: ({ fromAgentId, getAgent, token, validateToken, workspaceId, }: AuthenticateInput) => AgentSummary;
12
+ export declare const requireCommandForRole: (agent: AgentSummary, command: TeamCommand) => void;
13
+ export {};
@@ -0,0 +1,33 @@
1
+ import { ForbiddenError, UnauthorizedError } from './http-errors.js';
2
+ const ORCHESTRATOR_COMMANDS = new Set(['send', 'list', 'report', 'help']);
3
+ const WORKER_COMMANDS = new Set(['report', 'help']);
4
+ const WORKER_ROLES = new Set(['coder', 'reviewer', 'tester', 'custom']);
5
+ export const commandAllowedForRole = (role, command) => {
6
+ if (role === 'orchestrator')
7
+ return ORCHESTRATOR_COMMANDS.has(command);
8
+ if (WORKER_ROLES.has(role))
9
+ return WORKER_COMMANDS.has(command);
10
+ return false;
11
+ };
12
+ export const authenticateCliAgent = ({ fromAgentId, getAgent, token, validateToken, workspaceId, }) => {
13
+ if (!fromAgentId) {
14
+ throw new UnauthorizedError('Missing agent identity');
15
+ }
16
+ if (!validateToken(fromAgentId, token)) {
17
+ throw new UnauthorizedError('Invalid or missing agent token');
18
+ }
19
+ let agent;
20
+ try {
21
+ agent = getAgent(workspaceId, fromAgentId);
22
+ }
23
+ catch {
24
+ throw new UnauthorizedError('Agent not found in workspace');
25
+ }
26
+ return agent;
27
+ };
28
+ export const requireCommandForRole = (agent, command) => {
29
+ if (!commandAllowedForRole(agent.role, command)) {
30
+ throw new ForbiddenError(`Role '${agent.role}' is not allowed to run team ${command}`);
31
+ }
32
+ };
33
+ //# sourceMappingURL=team-authz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-authz.js","sourceRoot":"","sources":["../../../src/server/team-authz.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAIpE,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;AACtF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;AAChE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE7F,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAA0B,EAAE,OAAoB,EAAE,EAAE;IACxF,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtE,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/D,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAUD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,EACnC,WAAW,EACX,QAAQ,EACR,KAAK,EACL,aAAa,EACb,WAAW,GACO,EAAgB,EAAE;IACpC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,iBAAiB,CAAC,wBAAwB,CAAC,CAAA;IACvD,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,iBAAiB,CAAC,gCAAgC,CAAC,CAAA;IAC/D,CAAC;IACD,IAAI,KAAmB,CAAA;IACvB,IAAI,CAAC;QACH,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,iBAAiB,CAAC,8BAA8B,CAAC,CAAA;IAC7D,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAmB,EAAE,OAAoB,EAAE,EAAE;IACjF,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,cAAc,CAAC,SAAS,KAAK,CAAC,IAAI,gCAAgC,OAAO,EAAE,CAAC,CAAA;IACxF,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { TeamListItem } from '../shared/types.js';
2
+ export declare const serializeTeamListItem: ({ id, name, pendingTaskCount, role, status, }: TeamListItem) => {
3
+ id: string;
4
+ name: string;
5
+ role: string;
6
+ status: string;
7
+ pending_task_count: number;
8
+ };
@@ -0,0 +1,8 @@
1
+ export const serializeTeamListItem = ({ id, name, pendingTaskCount, role, status, }) => ({
2
+ id,
3
+ name,
4
+ role,
5
+ status,
6
+ pending_task_count: pendingTaskCount,
7
+ });
8
+ //# sourceMappingURL=team-list-serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-list-serializer.js","sourceRoot":"","sources":["../../../src/server/team-list-serializer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,EAAE,EACF,IAAI,EACJ,gBAAgB,EAChB,IAAI,EACJ,MAAM,GACO,EAMb,EAAE,CAAC,CAAC;IACJ,EAAE;IACF,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,kBAAkB,EAAE,gBAAgB;CACrC,CAAC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import type { AgentRuntime } from './agent-runtime.js';
2
+ import type { DispatchRecord } from './dispatch-ledger-store.js';
3
+ import type { MessageLogHandle, MessageLogRecord } from './message-log-store.js';
4
+ import type { WorkspaceStore } from './workspace-store.js';
5
+ export interface TeamOperationsInput {
6
+ agentRuntime: AgentRuntime;
7
+ createDispatch: (input: {
8
+ fromAgentId?: string;
9
+ text: string;
10
+ toAgentId: string;
11
+ workspaceId: string;
12
+ }) => DispatchRecord;
13
+ deleteDispatch: (dispatchId: string) => void;
14
+ deleteMessage: (handle: MessageLogHandle) => void;
15
+ findOpenDispatch: (workspaceId: string, toAgentId: string) => DispatchRecord | undefined;
16
+ insertMessage: (record: MessageLogRecord) => MessageLogHandle;
17
+ markDispatchReportedByWorker: (input: {
18
+ artifacts: string[];
19
+ reportText: string;
20
+ toAgentId: string;
21
+ workspaceId: string;
22
+ }) => DispatchRecord | undefined;
23
+ markDispatchSubmitted: (dispatchId: string) => void;
24
+ workspaceStore: WorkspaceStore;
25
+ }
26
+ export interface DispatchTaskInput {
27
+ fromAgentId?: string;
28
+ hivePort?: string;
29
+ }
30
+ export interface ReportTaskInput {
31
+ artifacts?: string[];
32
+ requireActiveRun?: boolean;
33
+ status?: string;
34
+ text?: string;
35
+ }
36
+ export declare const createTeamOperations: ({ agentRuntime, createDispatch, deleteDispatch, deleteMessage, findOpenDispatch, insertMessage, markDispatchReportedByWorker, markDispatchSubmitted, workspaceStore, }: TeamOperationsInput) => {
37
+ dispatchTask: (workspaceId: string, workerId: string, text: string, input?: DispatchTaskInput) => Promise<DispatchRecord>;
38
+ dispatchTaskByWorkerName(workspaceId: string, workerName: string, text: string, input?: DispatchTaskInput): Promise<DispatchRecord>;
39
+ recordUserInput(workspaceId: string, orchestratorId: string, text: string): void;
40
+ reportTask(workspaceId: string, workerId: string, input?: ReportTaskInput): DispatchRecord;
41
+ };
@@ -0,0 +1,105 @@
1
+ import { ConflictError, PtyInactiveError } from './http-errors.js';
2
+ import { createReportMessage, createSendMessage, createUserInputMessage, } from './runtime-message-builders.js';
3
+ export const createTeamOperations = ({ agentRuntime, createDispatch, deleteDispatch, deleteMessage, findOpenDispatch, insertMessage, markDispatchReportedByWorker, markDispatchSubmitted, workspaceStore, }) => {
4
+ const ensureWorkerRun = async (workspaceId, workerId, hivePort) => {
5
+ if (agentRuntime.getActiveRunByAgentId(workspaceId, workerId)) {
6
+ return;
7
+ }
8
+ const config = agentRuntime.peekAgentLaunchConfig(workspaceId, workerId);
9
+ if (!config) {
10
+ throw new ConflictError('No worker launch config available');
11
+ }
12
+ workspaceStore.markAgentStarted(workspaceId, workerId);
13
+ try {
14
+ const run = await agentRuntime.startAgent(workspaceStore.getWorkspaceSnapshot(workspaceId).summary, workerId, { hivePort });
15
+ if (run.status === 'error') {
16
+ workspaceStore.markAgentStopped(workspaceId, workerId);
17
+ throw new ConflictError(`${config.command} failed to start`);
18
+ }
19
+ }
20
+ catch (error) {
21
+ workspaceStore.markAgentStopped(workspaceId, workerId);
22
+ throw error;
23
+ }
24
+ };
25
+ const dispatchTask = async (workspaceId, workerId, text, input = {}) => {
26
+ const message = createSendMessage(workspaceId, workerId, text, input.fromAgentId);
27
+ const messageHandle = insertMessage(message);
28
+ let dispatch;
29
+ try {
30
+ const dispatchInput = {
31
+ text,
32
+ toAgentId: workerId,
33
+ workspaceId,
34
+ };
35
+ if (input.fromAgentId)
36
+ dispatchInput.fromAgentId = input.fromAgentId;
37
+ dispatch = createDispatch(dispatchInput);
38
+ if (input.fromAgentId) {
39
+ const sender = workspaceStore.getAgent(workspaceId, input.fromAgentId);
40
+ await ensureWorkerRun(workspaceId, workerId, input.hivePort ?? '');
41
+ const worker = workspaceStore.getWorker(workspaceId, workerId);
42
+ markDispatchSubmitted(dispatch.id);
43
+ agentRuntime.writeSendPrompt(workspaceId, workerId, sender.name, worker.description, text);
44
+ }
45
+ workspaceStore.markTaskDispatched(workspaceId, workerId);
46
+ return dispatch;
47
+ }
48
+ catch (error) {
49
+ if (dispatch)
50
+ deleteDispatch(dispatch.id);
51
+ deleteMessage(messageHandle);
52
+ throw error;
53
+ }
54
+ };
55
+ return {
56
+ dispatchTask,
57
+ dispatchTaskByWorkerName(workspaceId, workerName, text, input = {}) {
58
+ const worker = workspaceStore.getWorkerByName(workspaceId, workerName);
59
+ return dispatchTask(workspaceId, worker.id, text, input);
60
+ },
61
+ recordUserInput(workspaceId, orchestratorId, text) {
62
+ workspaceStore.getAgent(workspaceId, orchestratorId);
63
+ agentRuntime.writeUserInputPrompt(workspaceId, text);
64
+ insertMessage(createUserInputMessage(workspaceId, orchestratorId, text));
65
+ },
66
+ reportTask(workspaceId, workerId, input = {}) {
67
+ const text = input.text ?? '';
68
+ const status = input.status;
69
+ const artifacts = input.artifacts ?? [];
70
+ const worker = workspaceStore.getWorker(workspaceId, workerId);
71
+ if (input.requireActiveRun === true &&
72
+ !agentRuntime.getActiveRunByAgentId(workspaceId, `${workspaceId}:orchestrator`)) {
73
+ throw new PtyInactiveError(`No active run for agent: ${workspaceId}:orchestrator`);
74
+ }
75
+ const openDispatch = findOpenDispatch(workspaceId, workerId);
76
+ if (!openDispatch) {
77
+ throw new ConflictError(`No open dispatch for worker: ${worker.name}`);
78
+ }
79
+ const messageHandle = insertMessage(createReportMessage(workspaceId, workerId, text, status, artifacts));
80
+ try {
81
+ if (input.requireActiveRun === true) {
82
+ agentRuntime.writeReportPrompt(workspaceId, worker.name, workerId, text, artifacts, {
83
+ requireActiveRun: input.requireActiveRun,
84
+ });
85
+ }
86
+ const dispatch = markDispatchReportedByWorker({
87
+ artifacts,
88
+ reportText: text,
89
+ toAgentId: workerId,
90
+ workspaceId,
91
+ });
92
+ if (!dispatch) {
93
+ throw new ConflictError(`No open dispatch for worker: ${worker.name}`);
94
+ }
95
+ workspaceStore.markTaskReported(workspaceId, workerId);
96
+ return dispatch;
97
+ }
98
+ catch (error) {
99
+ deleteMessage(messageHandle);
100
+ throw error;
101
+ }
102
+ },
103
+ };
104
+ };
105
+ //# sourceMappingURL=team-operations.js.map