hungry-ghost-hive 0.3.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 (467) hide show
  1. package/LICENSE +111 -0
  2. package/README.md +352 -0
  3. package/dist/agents/base-agent.d.ts +63 -0
  4. package/dist/agents/base-agent.d.ts.map +1 -0
  5. package/dist/agents/base-agent.js +189 -0
  6. package/dist/agents/base-agent.js.map +1 -0
  7. package/dist/agents/index.d.ts +7 -0
  8. package/dist/agents/index.d.ts.map +1 -0
  9. package/dist/agents/index.js +7 -0
  10. package/dist/agents/index.js.map +1 -0
  11. package/dist/agents/intermediate.d.ts +15 -0
  12. package/dist/agents/intermediate.d.ts.map +1 -0
  13. package/dist/agents/intermediate.js +142 -0
  14. package/dist/agents/intermediate.js.map +1 -0
  15. package/dist/agents/junior.d.ts +15 -0
  16. package/dist/agents/junior.d.ts.map +1 -0
  17. package/dist/agents/junior.js +147 -0
  18. package/dist/agents/junior.js.map +1 -0
  19. package/dist/agents/qa.d.ts +23 -0
  20. package/dist/agents/qa.d.ts.map +1 -0
  21. package/dist/agents/qa.js +238 -0
  22. package/dist/agents/qa.js.map +1 -0
  23. package/dist/agents/senior.d.ts +18 -0
  24. package/dist/agents/senior.d.ts.map +1 -0
  25. package/dist/agents/senior.js +267 -0
  26. package/dist/agents/senior.js.map +1 -0
  27. package/dist/agents/tech-lead.d.ts +17 -0
  28. package/dist/agents/tech-lead.d.ts.map +1 -0
  29. package/dist/agents/tech-lead.js +274 -0
  30. package/dist/agents/tech-lead.js.map +1 -0
  31. package/dist/cli/commands/add-repo.d.ts +3 -0
  32. package/dist/cli/commands/add-repo.d.ts.map +1 -0
  33. package/dist/cli/commands/add-repo.js +84 -0
  34. package/dist/cli/commands/add-repo.js.map +1 -0
  35. package/dist/cli/commands/agents.d.ts +3 -0
  36. package/dist/cli/commands/agents.d.ts.map +1 -0
  37. package/dist/cli/commands/agents.js +214 -0
  38. package/dist/cli/commands/agents.js.map +1 -0
  39. package/dist/cli/commands/assign.d.ts +3 -0
  40. package/dist/cli/commands/assign.d.ts.map +1 -0
  41. package/dist/cli/commands/assign.js +81 -0
  42. package/dist/cli/commands/assign.js.map +1 -0
  43. package/dist/cli/commands/config.d.ts +3 -0
  44. package/dist/cli/commands/config.d.ts.map +1 -0
  45. package/dist/cli/commands/config.js +118 -0
  46. package/dist/cli/commands/config.js.map +1 -0
  47. package/dist/cli/commands/escalations.d.ts +3 -0
  48. package/dist/cli/commands/escalations.d.ts.map +1 -0
  49. package/dist/cli/commands/escalations.js +157 -0
  50. package/dist/cli/commands/escalations.js.map +1 -0
  51. package/dist/cli/commands/index.d.ts +17 -0
  52. package/dist/cli/commands/index.d.ts.map +1 -0
  53. package/dist/cli/commands/index.js +17 -0
  54. package/dist/cli/commands/index.js.map +1 -0
  55. package/dist/cli/commands/init.d.ts +3 -0
  56. package/dist/cli/commands/init.d.ts.map +1 -0
  57. package/dist/cli/commands/init.js +59 -0
  58. package/dist/cli/commands/init.js.map +1 -0
  59. package/dist/cli/commands/manager.d.ts +3 -0
  60. package/dist/cli/commands/manager.d.ts.map +1 -0
  61. package/dist/cli/commands/manager.js +775 -0
  62. package/dist/cli/commands/manager.js.map +1 -0
  63. package/dist/cli/commands/manager.test.d.ts +2 -0
  64. package/dist/cli/commands/manager.test.d.ts.map +1 -0
  65. package/dist/cli/commands/manager.test.js +45 -0
  66. package/dist/cli/commands/manager.test.js.map +1 -0
  67. package/dist/cli/commands/msg.d.ts +3 -0
  68. package/dist/cli/commands/msg.d.ts.map +1 -0
  69. package/dist/cli/commands/msg.js +190 -0
  70. package/dist/cli/commands/msg.js.map +1 -0
  71. package/dist/cli/commands/my-stories.d.ts +3 -0
  72. package/dist/cli/commands/my-stories.d.ts.map +1 -0
  73. package/dist/cli/commands/my-stories.js +174 -0
  74. package/dist/cli/commands/my-stories.js.map +1 -0
  75. package/dist/cli/commands/nuke.d.ts +3 -0
  76. package/dist/cli/commands/nuke.d.ts.map +1 -0
  77. package/dist/cli/commands/nuke.js +189 -0
  78. package/dist/cli/commands/nuke.js.map +1 -0
  79. package/dist/cli/commands/pr.d.ts +3 -0
  80. package/dist/cli/commands/pr.d.ts.map +1 -0
  81. package/dist/cli/commands/pr.js +488 -0
  82. package/dist/cli/commands/pr.js.map +1 -0
  83. package/dist/cli/commands/req.d.ts +3 -0
  84. package/dist/cli/commands/req.d.ts.map +1 -0
  85. package/dist/cli/commands/req.js +212 -0
  86. package/dist/cli/commands/req.js.map +1 -0
  87. package/dist/cli/commands/resume.d.ts +3 -0
  88. package/dist/cli/commands/resume.d.ts.map +1 -0
  89. package/dist/cli/commands/resume.js +114 -0
  90. package/dist/cli/commands/resume.js.map +1 -0
  91. package/dist/cli/commands/status.d.ts +3 -0
  92. package/dist/cli/commands/status.d.ts.map +1 -0
  93. package/dist/cli/commands/status.js +259 -0
  94. package/dist/cli/commands/status.js.map +1 -0
  95. package/dist/cli/commands/stories.d.ts +3 -0
  96. package/dist/cli/commands/stories.d.ts.map +1 -0
  97. package/dist/cli/commands/stories.js +111 -0
  98. package/dist/cli/commands/stories.js.map +1 -0
  99. package/dist/cli/commands/teams.d.ts +3 -0
  100. package/dist/cli/commands/teams.d.ts.map +1 -0
  101. package/dist/cli/commands/teams.js +137 -0
  102. package/dist/cli/commands/teams.js.map +1 -0
  103. package/dist/cli/dashboard/index.d.ts +5 -0
  104. package/dist/cli/dashboard/index.d.ts.map +1 -0
  105. package/dist/cli/dashboard/index.js +128 -0
  106. package/dist/cli/dashboard/index.js.map +1 -0
  107. package/dist/cli/dashboard/panels/activity.d.ts +5 -0
  108. package/dist/cli/dashboard/panels/activity.d.ts.map +1 -0
  109. package/dist/cli/dashboard/panels/activity.js +64 -0
  110. package/dist/cli/dashboard/panels/activity.js.map +1 -0
  111. package/dist/cli/dashboard/panels/agents.d.ts +5 -0
  112. package/dist/cli/dashboard/panels/agents.d.ts.map +1 -0
  113. package/dist/cli/dashboard/panels/agents.js +196 -0
  114. package/dist/cli/dashboard/panels/agents.js.map +1 -0
  115. package/dist/cli/dashboard/panels/escalations.d.ts +5 -0
  116. package/dist/cli/dashboard/panels/escalations.d.ts.map +1 -0
  117. package/dist/cli/dashboard/panels/escalations.js +93 -0
  118. package/dist/cli/dashboard/panels/escalations.js.map +1 -0
  119. package/dist/cli/dashboard/panels/merge-queue.d.ts +5 -0
  120. package/dist/cli/dashboard/panels/merge-queue.d.ts.map +1 -0
  121. package/dist/cli/dashboard/panels/merge-queue.js +57 -0
  122. package/dist/cli/dashboard/panels/merge-queue.js.map +1 -0
  123. package/dist/cli/dashboard/panels/pipeline.d.ts +5 -0
  124. package/dist/cli/dashboard/panels/pipeline.d.ts.map +1 -0
  125. package/dist/cli/dashboard/panels/pipeline.js +54 -0
  126. package/dist/cli/dashboard/panels/pipeline.js.map +1 -0
  127. package/dist/cli/dashboard/panels/stories.d.ts +5 -0
  128. package/dist/cli/dashboard/panels/stories.d.ts.map +1 -0
  129. package/dist/cli/dashboard/panels/stories.js +79 -0
  130. package/dist/cli/dashboard/panels/stories.js.map +1 -0
  131. package/dist/cli-runtimes/claude.d.ts +8 -0
  132. package/dist/cli-runtimes/claude.d.ts.map +1 -0
  133. package/dist/cli-runtimes/claude.js +27 -0
  134. package/dist/cli-runtimes/claude.js.map +1 -0
  135. package/dist/cli-runtimes/codex.d.ts +8 -0
  136. package/dist/cli-runtimes/codex.d.ts.map +1 -0
  137. package/dist/cli-runtimes/codex.js +27 -0
  138. package/dist/cli-runtimes/codex.js.map +1 -0
  139. package/dist/cli-runtimes/gemini.d.ts +8 -0
  140. package/dist/cli-runtimes/gemini.d.ts.map +1 -0
  141. package/dist/cli-runtimes/gemini.js +29 -0
  142. package/dist/cli-runtimes/gemini.js.map +1 -0
  143. package/dist/cli-runtimes/index.d.ts +25 -0
  144. package/dist/cli-runtimes/index.d.ts.map +1 -0
  145. package/dist/cli-runtimes/index.js +48 -0
  146. package/dist/cli-runtimes/index.js.map +1 -0
  147. package/dist/cli-runtimes/index.test.d.ts +2 -0
  148. package/dist/cli-runtimes/index.test.d.ts.map +1 -0
  149. package/dist/cli-runtimes/index.test.js +216 -0
  150. package/dist/cli-runtimes/index.test.js.map +1 -0
  151. package/dist/cli-runtimes/types.d.ts +27 -0
  152. package/dist/cli-runtimes/types.d.ts.map +1 -0
  153. package/dist/cli-runtimes/types.js +2 -0
  154. package/dist/cli-runtimes/types.js.map +1 -0
  155. package/dist/config/index.d.ts +3 -0
  156. package/dist/config/index.d.ts.map +1 -0
  157. package/dist/config/index.js +3 -0
  158. package/dist/config/index.js.map +1 -0
  159. package/dist/config/loader.d.ts +11 -0
  160. package/dist/config/loader.d.ts.map +1 -0
  161. package/dist/config/loader.js +72 -0
  162. package/dist/config/loader.js.map +1 -0
  163. package/dist/config/schema.d.ts +660 -0
  164. package/dist/config/schema.d.ts.map +1 -0
  165. package/dist/config/schema.js +217 -0
  166. package/dist/config/schema.js.map +1 -0
  167. package/dist/config/schema.test.d.ts +2 -0
  168. package/dist/config/schema.test.d.ts.map +1 -0
  169. package/dist/config/schema.test.js +123 -0
  170. package/dist/config/schema.test.js.map +1 -0
  171. package/dist/context-files/generator.d.ts +32 -0
  172. package/dist/context-files/generator.d.ts.map +1 -0
  173. package/dist/context-files/generator.js +120 -0
  174. package/dist/context-files/generator.js.map +1 -0
  175. package/dist/context-files/index.d.ts +38 -0
  176. package/dist/context-files/index.d.ts.map +1 -0
  177. package/dist/context-files/index.js +76 -0
  178. package/dist/context-files/index.js.map +1 -0
  179. package/dist/context-files/index.test.d.ts +2 -0
  180. package/dist/context-files/index.test.d.ts.map +1 -0
  181. package/dist/context-files/index.test.js +265 -0
  182. package/dist/context-files/index.test.js.map +1 -0
  183. package/dist/context-files/templates.d.ts +19 -0
  184. package/dist/context-files/templates.d.ts.map +1 -0
  185. package/dist/context-files/templates.js +266 -0
  186. package/dist/context-files/templates.js.map +1 -0
  187. package/dist/db/client.d.ts +95 -0
  188. package/dist/db/client.d.ts.map +1 -0
  189. package/dist/db/client.js +343 -0
  190. package/dist/db/client.js.map +1 -0
  191. package/dist/db/lock.d.ts +25 -0
  192. package/dist/db/lock.d.ts.map +1 -0
  193. package/dist/db/lock.js +56 -0
  194. package/dist/db/lock.js.map +1 -0
  195. package/dist/db/lock.test.d.ts +2 -0
  196. package/dist/db/lock.test.d.ts.map +1 -0
  197. package/dist/db/lock.test.js +73 -0
  198. package/dist/db/lock.test.js.map +1 -0
  199. package/dist/db/queries/agents.d.ts +31 -0
  200. package/dist/db/queries/agents.d.ts.map +1 -0
  201. package/dist/db/queries/agents.js +76 -0
  202. package/dist/db/queries/agents.js.map +1 -0
  203. package/dist/db/queries/escalations.d.ts +29 -0
  204. package/dist/db/queries/escalations.d.ts.map +1 -0
  205. package/dist/db/queries/escalations.js +105 -0
  206. package/dist/db/queries/escalations.js.map +1 -0
  207. package/dist/db/queries/heartbeat.d.ts +20 -0
  208. package/dist/db/queries/heartbeat.d.ts.map +1 -0
  209. package/dist/db/queries/heartbeat.js +61 -0
  210. package/dist/db/queries/heartbeat.js.map +1 -0
  211. package/dist/db/queries/index.d.ts +8 -0
  212. package/dist/db/queries/index.d.ts.map +1 -0
  213. package/dist/db/queries/index.js +8 -0
  214. package/dist/db/queries/index.js.map +1 -0
  215. package/dist/db/queries/logs.d.ts +21 -0
  216. package/dist/db/queries/logs.d.ts.map +1 -0
  217. package/dist/db/queries/logs.js +72 -0
  218. package/dist/db/queries/logs.js.map +1 -0
  219. package/dist/db/queries/messages.d.ts +17 -0
  220. package/dist/db/queries/messages.d.ts.map +1 -0
  221. package/dist/db/queries/messages.js +22 -0
  222. package/dist/db/queries/messages.js.map +1 -0
  223. package/dist/db/queries/pull-requests.d.ts +33 -0
  224. package/dist/db/queries/pull-requests.d.ts.map +1 -0
  225. package/dist/db/queries/pull-requests.js +130 -0
  226. package/dist/db/queries/pull-requests.js.map +1 -0
  227. package/dist/db/queries/requirements.d.ts +22 -0
  228. package/dist/db/queries/requirements.d.ts.map +1 -0
  229. package/dist/db/queries/requirements.js +53 -0
  230. package/dist/db/queries/requirements.js.map +1 -0
  231. package/dist/db/queries/stories.d.ts +42 -0
  232. package/dist/db/queries/stories.d.ts.map +1 -0
  233. package/dist/db/queries/stories.js +163 -0
  234. package/dist/db/queries/stories.js.map +1 -0
  235. package/dist/db/queries/teams.d.ts +14 -0
  236. package/dist/db/queries/teams.d.ts.map +1 -0
  237. package/dist/db/queries/teams.js +24 -0
  238. package/dist/db/queries/teams.js.map +1 -0
  239. package/dist/git/branches.d.ts +52 -0
  240. package/dist/git/branches.d.ts.map +1 -0
  241. package/dist/git/branches.js +133 -0
  242. package/dist/git/branches.js.map +1 -0
  243. package/dist/git/github.d.ts +75 -0
  244. package/dist/git/github.d.ts.map +1 -0
  245. package/dist/git/github.js +162 -0
  246. package/dist/git/github.js.map +1 -0
  247. package/dist/git/index.d.ts +4 -0
  248. package/dist/git/index.d.ts.map +1 -0
  249. package/dist/git/index.js +4 -0
  250. package/dist/git/index.js.map +1 -0
  251. package/dist/git/submodules.d.ts +47 -0
  252. package/dist/git/submodules.d.ts.map +1 -0
  253. package/dist/git/submodules.js +115 -0
  254. package/dist/git/submodules.js.map +1 -0
  255. package/dist/index.d.ts +3 -0
  256. package/dist/index.d.ts.map +1 -0
  257. package/dist/index.js +62 -0
  258. package/dist/index.js.map +1 -0
  259. package/dist/llm/anthropic.d.ts +18 -0
  260. package/dist/llm/anthropic.d.ts.map +1 -0
  261. package/dist/llm/anthropic.js +111 -0
  262. package/dist/llm/anthropic.js.map +1 -0
  263. package/dist/llm/index.d.ts +6 -0
  264. package/dist/llm/index.d.ts.map +1 -0
  265. package/dist/llm/index.js +24 -0
  266. package/dist/llm/index.js.map +1 -0
  267. package/dist/llm/openai.d.ts +18 -0
  268. package/dist/llm/openai.d.ts.map +1 -0
  269. package/dist/llm/openai.js +103 -0
  270. package/dist/llm/openai.js.map +1 -0
  271. package/dist/llm/provider.d.ts +38 -0
  272. package/dist/llm/provider.d.ts.map +1 -0
  273. package/dist/llm/provider.js +17 -0
  274. package/dist/llm/provider.js.map +1 -0
  275. package/dist/orchestrator/index.d.ts +4 -0
  276. package/dist/orchestrator/index.d.ts.map +1 -0
  277. package/dist/orchestrator/index.js +4 -0
  278. package/dist/orchestrator/index.js.map +1 -0
  279. package/dist/orchestrator/scaler.d.ts +42 -0
  280. package/dist/orchestrator/scaler.d.ts.map +1 -0
  281. package/dist/orchestrator/scaler.js +154 -0
  282. package/dist/orchestrator/scaler.js.map +1 -0
  283. package/dist/orchestrator/scheduler.d.ts +90 -0
  284. package/dist/orchestrator/scheduler.d.ts.map +1 -0
  285. package/dist/orchestrator/scheduler.js +1003 -0
  286. package/dist/orchestrator/scheduler.js.map +1 -0
  287. package/dist/orchestrator/scheduler.test.d.ts +2 -0
  288. package/dist/orchestrator/scheduler.test.d.ts.map +1 -0
  289. package/dist/orchestrator/scheduler.test.js +242 -0
  290. package/dist/orchestrator/scheduler.test.js.map +1 -0
  291. package/dist/orchestrator/workflow.d.ts +18 -0
  292. package/dist/orchestrator/workflow.d.ts.map +1 -0
  293. package/dist/orchestrator/workflow.js +106 -0
  294. package/dist/orchestrator/workflow.js.map +1 -0
  295. package/dist/state-detectors/claude.d.ts +33 -0
  296. package/dist/state-detectors/claude.d.ts.map +1 -0
  297. package/dist/state-detectors/claude.js +237 -0
  298. package/dist/state-detectors/claude.js.map +1 -0
  299. package/dist/state-detectors/claude.test.d.ts +2 -0
  300. package/dist/state-detectors/claude.test.d.ts.map +1 -0
  301. package/dist/state-detectors/claude.test.js +127 -0
  302. package/dist/state-detectors/claude.test.js.map +1 -0
  303. package/dist/state-detectors/codex.d.ts +34 -0
  304. package/dist/state-detectors/codex.d.ts.map +1 -0
  305. package/dist/state-detectors/codex.js +233 -0
  306. package/dist/state-detectors/codex.js.map +1 -0
  307. package/dist/state-detectors/codex.test.d.ts +2 -0
  308. package/dist/state-detectors/codex.test.d.ts.map +1 -0
  309. package/dist/state-detectors/codex.test.js +85 -0
  310. package/dist/state-detectors/codex.test.js.map +1 -0
  311. package/dist/state-detectors/factory.d.ts +22 -0
  312. package/dist/state-detectors/factory.d.ts.map +1 -0
  313. package/dist/state-detectors/factory.js +37 -0
  314. package/dist/state-detectors/factory.js.map +1 -0
  315. package/dist/state-detectors/factory.test.d.ts +2 -0
  316. package/dist/state-detectors/factory.test.d.ts.map +1 -0
  317. package/dist/state-detectors/factory.test.js +44 -0
  318. package/dist/state-detectors/factory.test.js.map +1 -0
  319. package/dist/state-detectors/gemini.d.ts +34 -0
  320. package/dist/state-detectors/gemini.d.ts.map +1 -0
  321. package/dist/state-detectors/gemini.js +236 -0
  322. package/dist/state-detectors/gemini.js.map +1 -0
  323. package/dist/state-detectors/gemini.test.d.ts +2 -0
  324. package/dist/state-detectors/gemini.test.d.ts.map +1 -0
  325. package/dist/state-detectors/gemini.test.js +93 -0
  326. package/dist/state-detectors/gemini.test.js.map +1 -0
  327. package/dist/state-detectors/index.d.ts +20 -0
  328. package/dist/state-detectors/index.d.ts.map +1 -0
  329. package/dist/state-detectors/index.js +21 -0
  330. package/dist/state-detectors/index.js.map +1 -0
  331. package/dist/state-detectors/types.d.ts +67 -0
  332. package/dist/state-detectors/types.d.ts.map +1 -0
  333. package/dist/state-detectors/types.js +28 -0
  334. package/dist/state-detectors/types.js.map +1 -0
  335. package/dist/tmux/index.d.ts +2 -0
  336. package/dist/tmux/index.d.ts.map +1 -0
  337. package/dist/tmux/index.js +2 -0
  338. package/dist/tmux/index.js.map +1 -0
  339. package/dist/tmux/manager.d.ts +45 -0
  340. package/dist/tmux/manager.d.ts.map +1 -0
  341. package/dist/tmux/manager.js +252 -0
  342. package/dist/tmux/manager.js.map +1 -0
  343. package/dist/utils/claude-code-state.d.ts +46 -0
  344. package/dist/utils/claude-code-state.d.ts.map +1 -0
  345. package/dist/utils/claude-code-state.js +252 -0
  346. package/dist/utils/claude-code-state.js.map +1 -0
  347. package/dist/utils/cli-builder.d.ts +19 -0
  348. package/dist/utils/cli-builder.d.ts.map +1 -0
  349. package/dist/utils/cli-builder.js +58 -0
  350. package/dist/utils/cli-builder.js.map +1 -0
  351. package/dist/utils/cli-commands.d.ts +27 -0
  352. package/dist/utils/cli-commands.d.ts.map +1 -0
  353. package/dist/utils/cli-commands.js +69 -0
  354. package/dist/utils/cli-commands.js.map +1 -0
  355. package/dist/utils/index.d.ts +3 -0
  356. package/dist/utils/index.d.ts.map +1 -0
  357. package/dist/utils/index.js +3 -0
  358. package/dist/utils/index.js.map +1 -0
  359. package/dist/utils/logger.d.ts +13 -0
  360. package/dist/utils/logger.d.ts.map +1 -0
  361. package/dist/utils/logger.js +77 -0
  362. package/dist/utils/logger.js.map +1 -0
  363. package/dist/utils/paths.d.ts +17 -0
  364. package/dist/utils/paths.d.ts.map +1 -0
  365. package/dist/utils/paths.js +33 -0
  366. package/dist/utils/paths.js.map +1 -0
  367. package/dist/utils/timeout.d.ts +25 -0
  368. package/dist/utils/timeout.d.ts.map +1 -0
  369. package/dist/utils/timeout.js +57 -0
  370. package/dist/utils/timeout.js.map +1 -0
  371. package/package.json +78 -0
  372. package/src/agents/base-agent.ts +255 -0
  373. package/src/agents/index.ts +6 -0
  374. package/src/agents/intermediate.ts +161 -0
  375. package/src/agents/junior.ts +166 -0
  376. package/src/agents/qa.ts +272 -0
  377. package/src/agents/senior.ts +307 -0
  378. package/src/agents/tech-lead.ts +324 -0
  379. package/src/cli/commands/add-repo.ts +89 -0
  380. package/src/cli/commands/agents.ts +247 -0
  381. package/src/cli/commands/assign.ts +86 -0
  382. package/src/cli/commands/config.ts +121 -0
  383. package/src/cli/commands/escalations.ts +179 -0
  384. package/src/cli/commands/index.ts +16 -0
  385. package/src/cli/commands/init.ts +66 -0
  386. package/src/cli/commands/manager.test.ts +52 -0
  387. package/src/cli/commands/manager.ts +916 -0
  388. package/src/cli/commands/msg.ts +232 -0
  389. package/src/cli/commands/my-stories.ts +198 -0
  390. package/src/cli/commands/nuke.ts +223 -0
  391. package/src/cli/commands/pr.ts +559 -0
  392. package/src/cli/commands/req.ts +231 -0
  393. package/src/cli/commands/resume.ts +129 -0
  394. package/src/cli/commands/status.ts +284 -0
  395. package/src/cli/commands/stories.ts +131 -0
  396. package/src/cli/commands/teams.ts +158 -0
  397. package/src/cli/dashboard/index.ts +141 -0
  398. package/src/cli/dashboard/panels/activity.ts +77 -0
  399. package/src/cli/dashboard/panels/agents.ts +244 -0
  400. package/src/cli/dashboard/panels/escalations.ts +109 -0
  401. package/src/cli/dashboard/panels/merge-queue.ts +65 -0
  402. package/src/cli/dashboard/panels/pipeline.ts +65 -0
  403. package/src/cli/dashboard/panels/stories.ts +87 -0
  404. package/src/cli-runtimes/claude.ts +31 -0
  405. package/src/cli-runtimes/codex.ts +31 -0
  406. package/src/cli-runtimes/gemini.ts +33 -0
  407. package/src/cli-runtimes/index.test.ts +261 -0
  408. package/src/cli-runtimes/index.ts +52 -0
  409. package/src/cli-runtimes/types.ts +30 -0
  410. package/src/config/index.ts +2 -0
  411. package/src/config/loader.ts +89 -0
  412. package/src/config/schema.test.ts +135 -0
  413. package/src/config/schema.ts +238 -0
  414. package/src/context-files/generator.ts +132 -0
  415. package/src/context-files/index.test.ts +323 -0
  416. package/src/context-files/index.ts +102 -0
  417. package/src/context-files/templates.ts +279 -0
  418. package/src/db/client.ts +475 -0
  419. package/src/db/lock.test.ts +93 -0
  420. package/src/db/lock.ts +74 -0
  421. package/src/db/migrations/001-initial.sql +121 -0
  422. package/src/db/migrations/005-add-agent-heartbeat.sql +4 -0
  423. package/src/db/queries/agents.ts +113 -0
  424. package/src/db/queries/escalations.ts +140 -0
  425. package/src/db/queries/heartbeat.ts +92 -0
  426. package/src/db/queries/index.ts +7 -0
  427. package/src/db/queries/logs.ts +136 -0
  428. package/src/db/queries/messages.ts +38 -0
  429. package/src/db/queries/pull-requests.ts +170 -0
  430. package/src/db/queries/requirements.ts +81 -0
  431. package/src/db/queries/stories.ts +223 -0
  432. package/src/db/queries/teams.ts +39 -0
  433. package/src/git/branches.ts +186 -0
  434. package/src/git/github.ts +247 -0
  435. package/src/git/index.ts +3 -0
  436. package/src/git/submodules.ts +141 -0
  437. package/src/index.ts +93 -0
  438. package/src/llm/anthropic.ts +134 -0
  439. package/src/llm/index.ts +26 -0
  440. package/src/llm/openai.ts +125 -0
  441. package/src/llm/provider.ts +60 -0
  442. package/src/orchestrator/index.ts +3 -0
  443. package/src/orchestrator/scaler.ts +201 -0
  444. package/src/orchestrator/scheduler.test.ts +288 -0
  445. package/src/orchestrator/scheduler.ts +1130 -0
  446. package/src/orchestrator/workflow.ts +137 -0
  447. package/src/state-detectors/claude.test.ts +149 -0
  448. package/src/state-detectors/claude.ts +256 -0
  449. package/src/state-detectors/codex.test.ts +100 -0
  450. package/src/state-detectors/codex.ts +252 -0
  451. package/src/state-detectors/factory.test.ts +51 -0
  452. package/src/state-detectors/factory.ts +40 -0
  453. package/src/state-detectors/gemini.test.ts +110 -0
  454. package/src/state-detectors/gemini.ts +255 -0
  455. package/src/state-detectors/index.ts +25 -0
  456. package/src/state-detectors/types.ts +80 -0
  457. package/src/tmux/index.ts +1 -0
  458. package/src/tmux/manager.ts +310 -0
  459. package/src/types/sql.js.d.ts +34 -0
  460. package/src/utils/claude-code-state.ts +281 -0
  461. package/src/utils/cli-builder.ts +78 -0
  462. package/src/utils/cli-commands.ts +84 -0
  463. package/src/utils/index.ts +2 -0
  464. package/src/utils/logger.ts +93 -0
  465. package/src/utils/paths.ts +49 -0
  466. package/src/utils/timeout.ts +84 -0
  467. package/tsconfig.json +25 -0
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Multi-CLI State Detection System
3
+ *
4
+ * Provides unified state detection across different CLI tools:
5
+ * - Claude Code
6
+ * - Codex CLI
7
+ * - Gemini CLI
8
+ *
9
+ * Usage:
10
+ * import { getStateDetector } from './state-detectors';
11
+ * const detector = getStateDetector('claude');
12
+ * const result = detector.detectState(output);
13
+ */
14
+
15
+ // Export types and interfaces
16
+ export type { StateDetector, StateDetectionResult, CLIType } from './types.js';
17
+ export { AgentState } from './types.js';
18
+
19
+ // Export state detector implementations
20
+ export { ClaudeStateDetector } from './claude.js';
21
+ export { CodexStateDetector } from './codex.js';
22
+ export { GeminiStateDetector } from './gemini.js';
23
+
24
+ // Export factory functions
25
+ export { getStateDetector, isSupportedCLI } from './factory.js';
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Multi-CLI Agent State Detection Types
3
+ *
4
+ * Defines common state detection interfaces and types that work across
5
+ * different CLI tools (Claude Code, Codex, Gemini, etc.)
6
+ */
7
+
8
+ /**
9
+ * Universal agent states that apply across different CLI tools
10
+ */
11
+ export enum AgentState {
12
+ // Active states - agent is actively working
13
+ THINKING = 'thinking',
14
+ TOOL_RUNNING = 'tool_running',
15
+ PROCESSING = 'processing',
16
+
17
+ // Waiting states - idle at prompt, ready for input
18
+ IDLE_AT_PROMPT = 'idle_at_prompt',
19
+ WORK_COMPLETE = 'work_complete',
20
+
21
+ // Blocked states - requires human intervention
22
+ ASKING_QUESTION = 'asking_question',
23
+ AWAITING_SELECTION = 'awaiting_selection',
24
+ PLAN_APPROVAL = 'plan_approval',
25
+ PERMISSION_REQUIRED = 'permission_required',
26
+ USER_DECLINED = 'user_declined',
27
+
28
+ // Unknown state
29
+ UNKNOWN = 'unknown',
30
+ }
31
+
32
+ /**
33
+ * Result of state detection with confidence and metadata
34
+ */
35
+ export interface StateDetectionResult {
36
+ state: AgentState;
37
+ confidence: number;
38
+ reason: string;
39
+ isWaiting: boolean;
40
+ needsHuman: boolean;
41
+ }
42
+
43
+ /**
44
+ * Interface for CLI-specific state detectors
45
+ * Each CLI tool implements this interface with its own patterns
46
+ */
47
+ export interface StateDetector {
48
+ /**
49
+ * Detect the current state from CLI output
50
+ * @param output - The text output from the CLI
51
+ * @returns Detection result with state, confidence, and flags
52
+ */
53
+ detectState(output: string): StateDetectionResult;
54
+
55
+ /**
56
+ * Get a human-readable description of a state
57
+ * @param state - The state to describe
58
+ * @returns Human-readable description
59
+ */
60
+ getStateDescription(state: AgentState): string;
61
+
62
+ /**
63
+ * Check if a state represents active work (not waiting)
64
+ * @param state - The state to check
65
+ * @returns True if the state is active
66
+ */
67
+ isActiveState(state: AgentState): boolean;
68
+
69
+ /**
70
+ * Check if a state requires human intervention
71
+ * @param state - The state to check
72
+ * @returns True if the state is blocked
73
+ */
74
+ isBlockedState(state: AgentState): boolean;
75
+ }
76
+
77
+ /**
78
+ * Type identifier for different CLI tools
79
+ */
80
+ export type CLIType = 'claude' | 'codex' | 'gemini';
@@ -0,0 +1 @@
1
+ export * from './manager.js';
@@ -0,0 +1,310 @@
1
+ import { execa } from 'execa';
2
+
3
+ export interface TmuxSessionOptions {
4
+ sessionName: string;
5
+ workDir: string;
6
+ command: string;
7
+ env?: Record<string, string>;
8
+ }
9
+
10
+ export interface TmuxSession {
11
+ name: string;
12
+ windows: number;
13
+ created: string;
14
+ attached: boolean;
15
+ }
16
+
17
+ export async function isTmuxAvailable(): Promise<boolean> {
18
+ try {
19
+ await execa('which', ['tmux']);
20
+ return true;
21
+ } catch {
22
+ return false;
23
+ }
24
+ }
25
+
26
+ export async function isTmuxSessionRunning(sessionName: string): Promise<boolean> {
27
+ try {
28
+ await execa('tmux', ['has-session', '-t', sessionName]);
29
+ return true;
30
+ } catch {
31
+ return false;
32
+ }
33
+ }
34
+
35
+ export async function listTmuxSessions(): Promise<TmuxSession[]> {
36
+ try {
37
+ const { stdout } = await execa('tmux', [
38
+ 'list-sessions',
39
+ '-F',
40
+ '#{session_name}|#{session_windows}|#{session_created}|#{session_attached}',
41
+ ]);
42
+
43
+ return stdout.split('\n').filter(Boolean).map(line => {
44
+ const [name, windows, created, attached] = line.split('|');
45
+ return {
46
+ name,
47
+ windows: parseInt(windows, 10),
48
+ created,
49
+ attached: attached === '1',
50
+ };
51
+ });
52
+ } catch {
53
+ return [];
54
+ }
55
+ }
56
+
57
+ export async function getHiveSessions(): Promise<TmuxSession[]> {
58
+ const sessions = await listTmuxSessions();
59
+ return sessions.filter(s => s.name.startsWith('hive-'));
60
+ }
61
+
62
+ export async function spawnTmuxSession(options: TmuxSessionOptions): Promise<void> {
63
+ const { sessionName, workDir, command, env } = options;
64
+
65
+ // Kill existing session if it exists
66
+ if (await isTmuxSessionRunning(sessionName)) {
67
+ await killTmuxSession(sessionName);
68
+ }
69
+
70
+ // Create new detached session with default shell
71
+ const args = [
72
+ 'new-session',
73
+ '-d',
74
+ '-s', sessionName,
75
+ '-c', workDir,
76
+ ];
77
+
78
+ const execaOptions: { env?: NodeJS.ProcessEnv } = {};
79
+ if (env) {
80
+ execaOptions.env = { ...process.env, ...env };
81
+ }
82
+
83
+ await execa('tmux', args, execaOptions);
84
+
85
+ // Small delay to let shell initialize
86
+ await new Promise(resolve => setTimeout(resolve, 500));
87
+
88
+ // Send the command to the session
89
+ if (command) {
90
+ await execa('tmux', ['send-keys', '-t', sessionName, command, 'Enter']);
91
+ }
92
+ }
93
+
94
+ export async function killTmuxSession(sessionName: string): Promise<void> {
95
+ try {
96
+ await execa('tmux', ['kill-session', '-t', sessionName]);
97
+ } catch {
98
+ // Session might not exist, ignore error
99
+ }
100
+ }
101
+
102
+ export async function killAllHiveSessions(): Promise<number> {
103
+ const sessions = await getHiveSessions();
104
+ let killed = 0;
105
+
106
+ for (const session of sessions) {
107
+ try {
108
+ await killTmuxSession(session.name);
109
+ killed++;
110
+ } catch {
111
+ // Ignore errors
112
+ }
113
+ }
114
+
115
+ return killed;
116
+ }
117
+
118
+ export async function sendToTmuxSession(sessionName: string, text: string, clearFirst = true): Promise<void> {
119
+ if (clearFirst) {
120
+ // Clear any existing input at the prompt before sending new text
121
+ // Escape: exit any menu/selection state
122
+ // Ctrl+U: clear line from cursor to beginning
123
+ await execa('tmux', ['send-keys', '-t', sessionName, 'Escape']);
124
+ await new Promise(resolve => setTimeout(resolve, 50));
125
+ await execa('tmux', ['send-keys', '-t', sessionName, 'C-u']);
126
+ await new Promise(resolve => setTimeout(resolve, 50));
127
+ }
128
+
129
+ if (text.includes('\n')) {
130
+ // For multi-line text, send each line separately to avoid buffer race conditions
131
+ const lines = text.split('\n');
132
+ for (const line of lines) {
133
+ if (line.trim()) {
134
+ // Use send-keys with literal flag to handle special characters
135
+ // '--' signals end of options, preventing lines starting with '-' from being parsed as flags
136
+ await execa('tmux', ['send-keys', '-t', sessionName, '-l', '--', line]);
137
+ // Send Enter as a key event, not as literal text, to ensure prompt receives it
138
+ await execa('tmux', ['send-keys', '-t', sessionName, 'C-m']);
139
+ // Small delay between lines to ensure they're processed
140
+ await new Promise(resolve => setTimeout(resolve, 100));
141
+ }
142
+ }
143
+ } else {
144
+ // For single-line text, use send-keys with literal flag then Enter separately
145
+ // '--' signals end of options, preventing text starting with '-' from being parsed as flags
146
+ await execa('tmux', ['send-keys', '-t', sessionName, '-l', '--', text]);
147
+ // Send Enter as a key event (C-m = carriage return = Enter) to ensure prompt receives it
148
+ await execa('tmux', ['send-keys', '-t', sessionName, 'C-m']);
149
+ }
150
+ }
151
+
152
+ export async function sendEnterToTmuxSession(sessionName: string): Promise<void> {
153
+ // C-m is equivalent to Enter/Return
154
+ await execa('tmux', ['send-keys', '-t', sessionName, 'C-m']);
155
+ }
156
+
157
+ export async function captureTmuxPane(sessionName: string, lines = 100): Promise<string> {
158
+ try {
159
+ const { stdout } = await execa('tmux', [
160
+ 'capture-pane',
161
+ '-t', sessionName,
162
+ '-p',
163
+ '-S', `-${lines}`,
164
+ ]);
165
+ return stdout;
166
+ } catch {
167
+ return '';
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Waits for a tmux session to be ready by detecting Claude CLI initialization.
173
+ * Claude is considered ready when the prompt appears in the pane output.
174
+ * @param sessionName - The tmux session name
175
+ * @param maxWaitMs - Maximum time to wait in milliseconds (default 15000ms)
176
+ * @param pollIntervalMs - Interval between checks in milliseconds (default 200ms)
177
+ * @returns true if ready, false on timeout
178
+ */
179
+ export async function waitForTmuxSessionReady(
180
+ sessionName: string,
181
+ maxWaitMs = 15000,
182
+ pollIntervalMs = 200
183
+ ): Promise<boolean> {
184
+ const startTime = Date.now();
185
+ let lastOutput = '';
186
+
187
+ while (Date.now() - startTime < maxWaitMs) {
188
+ const output = await captureTmuxPane(sessionName, 50);
189
+
190
+ // Check if we have Claude prompt indicator or substantial output
191
+ // Claude typically shows a prompt with "> " or similar
192
+ if (output.includes('>') || output.includes('Claude')) {
193
+ return true;
194
+ }
195
+
196
+ // Check if output has stabilized (same content for consecutive polls)
197
+ // This handles cases where output appears without explicit prompt
198
+ if (lastOutput === output && output.length > 0) {
199
+ return true;
200
+ }
201
+
202
+ lastOutput = output;
203
+ await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
204
+ }
205
+
206
+ // Timeout reached, but return true anyway as a fallback
207
+ // to avoid infinite hangs. Claude might still be starting.
208
+ return true;
209
+ }
210
+
211
+ /**
212
+ * Forces bypass permissions mode in a Claude CLI session.
213
+ * Detects if the agent is in plan mode and switches to bypass mode by sending BTab.
214
+ * @param sessionName - The tmux session name
215
+ * @param cliTool - The CLI tool being used ('claude', 'codex', or 'gemini')
216
+ * @param maxRetries - Maximum number of retry attempts (default 5)
217
+ * @returns true if bypass mode was confirmed, false if max retries exceeded
218
+ */
219
+ export async function forceBypassMode(
220
+ sessionName: string,
221
+ _cliTool: 'claude' | 'codex' | 'gemini' = 'claude',
222
+ maxRetries = 5
223
+ ): Promise<boolean> {
224
+ // Note: cliTool parameter is reserved for future Codex/Gemini CLI integration
225
+ // Currently, all CLIs use the same BTab key sequence for cycling permissions
226
+ let retries = 0;
227
+
228
+ while (retries < maxRetries) {
229
+ // Capture pane output to check current permission mode
230
+ const output = await captureTmuxPane(sessionName, 100);
231
+
232
+ // Check if already in bypass mode
233
+ if (output.toLowerCase().includes('bypass permissions on')) {
234
+ return true;
235
+ }
236
+
237
+ // Check if in plan mode (needs to be switched)
238
+ if (output.toLowerCase().includes('plan mode on')) {
239
+ // Send BTab (Shift+Tab / backtab) to cycle permissions mode
240
+ // For Claude Code, BTab cycles through: plan -> safe -> bypass -> plan
241
+ await execa('tmux', ['send-keys', '-t', sessionName, 'BTab']);
242
+
243
+ // Wait for the mode change to take effect
244
+ await new Promise(resolve => setTimeout(resolve, 500));
245
+
246
+ retries++;
247
+ continue;
248
+ }
249
+
250
+ // If neither plan mode nor bypass mode is detected, try cycling anyway
251
+ // This handles cases where the mode indicator might not be visible
252
+ await execa('tmux', ['send-keys', '-t', sessionName, 'BTab']);
253
+ await new Promise(resolve => setTimeout(resolve, 500));
254
+
255
+ retries++;
256
+ }
257
+
258
+ // Max retries exceeded
259
+ // Return false to indicate we couldn't confirm bypass mode
260
+ return false;
261
+ }
262
+
263
+ export function generateSessionName(agentType: string, teamName?: string, index?: number): string {
264
+ let name = `hive-${agentType}`;
265
+ if (teamName) {
266
+ name += `-${teamName}`;
267
+ }
268
+ if (index !== undefined && index > 1) {
269
+ name += `-${index}`;
270
+ }
271
+ return name;
272
+ }
273
+
274
+ const MANAGER_SESSION = 'hive-manager';
275
+
276
+ export async function isManagerRunning(): Promise<boolean> {
277
+ return isTmuxSessionRunning(MANAGER_SESSION);
278
+ }
279
+
280
+ export async function startManager(interval = 60): Promise<boolean> {
281
+ if (await isManagerRunning()) {
282
+ return false; // Already running
283
+ }
284
+
285
+ // Start the manager in a detached tmux session
286
+ await execa('tmux', [
287
+ 'new-session',
288
+ '-d',
289
+ '-s', MANAGER_SESSION,
290
+ ]);
291
+
292
+ // Send the manager command
293
+ await execa('tmux', [
294
+ 'send-keys',
295
+ '-t', MANAGER_SESSION,
296
+ `hive manager start -i ${interval}`,
297
+ 'Enter',
298
+ ]);
299
+
300
+ return true;
301
+ }
302
+
303
+ export async function stopManager(): Promise<boolean> {
304
+ if (!await isManagerRunning()) {
305
+ return false; // Not running
306
+ }
307
+
308
+ await killTmuxSession(MANAGER_SESSION);
309
+ return true;
310
+ }
@@ -0,0 +1,34 @@
1
+ declare module 'sql.js' {
2
+ export interface SqlJsStatic {
3
+ Database: typeof Database;
4
+ }
5
+
6
+ export interface QueryExecResult {
7
+ columns: string[];
8
+ values: unknown[][];
9
+ }
10
+
11
+ export interface Statement {
12
+ bind(params?: unknown[]): boolean;
13
+ step(): boolean;
14
+ getAsObject(params?: unknown[]): Record<string, unknown>;
15
+ get(params?: unknown[]): unknown[];
16
+ free(): boolean;
17
+ reset(): void;
18
+ }
19
+
20
+ export class Database {
21
+ constructor(data?: ArrayLike<number> | Buffer | null);
22
+ run(sql: string, params?: unknown[]): Database;
23
+ exec(sql: string): QueryExecResult[];
24
+ prepare(sql: string): Statement;
25
+ export(): Uint8Array;
26
+ close(): void;
27
+ }
28
+
29
+ export interface SqlJsConfig {
30
+ locateFile?: (filename: string) => string;
31
+ }
32
+
33
+ export default function initSqlJs(config?: SqlJsConfig): Promise<SqlJsStatic>;
34
+ }