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,237 @@
1
+ /**
2
+ * Claude Code State Detector
3
+ *
4
+ * Detects the UI state of Claude Code CLI based on output patterns
5
+ * Refactored from src/utils/claude-code-state.ts
6
+ */
7
+ import { AgentState } from './types.js';
8
+ /**
9
+ * Priority-based state indicators for Claude Code
10
+ * Higher priority patterns are checked first to handle overlapping indicators
11
+ */
12
+ const CLAUDE_STATE_INDICATORS = [
13
+ // High priority: Active work states
14
+ {
15
+ state: AgentState.THINKING,
16
+ patterns: [
17
+ /\(thinking\)/i,
18
+ /Concocting|Twisting|Considering|Analyzing/i,
19
+ ],
20
+ priority: 100,
21
+ },
22
+ {
23
+ state: AgentState.TOOL_RUNNING,
24
+ patterns: [
25
+ /esc to interrupt/i,
26
+ /Running|Executing/i,
27
+ /\[.*\]\s+\d+%/i, // Progress bars
28
+ ],
29
+ priority: 100,
30
+ },
31
+ {
32
+ state: AgentState.PROCESSING,
33
+ patterns: [
34
+ /Processing|Analyzing|Generating/i,
35
+ /Please wait/i,
36
+ ],
37
+ priority: 90,
38
+ },
39
+ // High priority: Blocked states requiring human intervention
40
+ {
41
+ state: AgentState.AWAITING_SELECTION,
42
+ patterns: [
43
+ /Enter to select.*↑\/↓/i,
44
+ /Use arrows to navigate/i,
45
+ /Select an option/i,
46
+ ],
47
+ priority: 90,
48
+ },
49
+ {
50
+ state: AgentState.ASKING_QUESTION,
51
+ patterns: [
52
+ /\?\s*$/m, // Line ending with question mark
53
+ /Please (choose|select|confirm)/i,
54
+ /Would you like to/i,
55
+ /Do you want to/i,
56
+ ],
57
+ priority: 85,
58
+ },
59
+ {
60
+ state: AgentState.PLAN_APPROVAL,
61
+ patterns: [
62
+ /approve.*plan/i,
63
+ /review.*plan/i,
64
+ /proceed.*plan/i,
65
+ /ExitPlanMode/i,
66
+ ],
67
+ priority: 90,
68
+ },
69
+ {
70
+ state: AgentState.PERMISSION_REQUIRED,
71
+ patterns: [
72
+ /permission.*required/i,
73
+ /authorize/i,
74
+ /Allow.*\[y\/n\]/i,
75
+ /Approve.*\[y\/n\]/i,
76
+ ],
77
+ priority: 90,
78
+ },
79
+ {
80
+ state: AgentState.USER_DECLINED,
81
+ patterns: [
82
+ /declined/i,
83
+ /permission denied/i,
84
+ /User chose not to/i,
85
+ ],
86
+ priority: 85,
87
+ },
88
+ // Lower priority: Ready/idle states
89
+ {
90
+ state: AgentState.WORK_COMPLETE,
91
+ patterns: [
92
+ /done|complete|finished/i,
93
+ /successfully/i,
94
+ /All.*tests passed/i,
95
+ ],
96
+ priority: 50,
97
+ },
98
+ {
99
+ state: AgentState.IDLE_AT_PROMPT,
100
+ patterns: [
101
+ /^>\s*$/m, // Prompt alone on line
102
+ /Ready for input/i,
103
+ /What would you like/i,
104
+ ],
105
+ priority: 40,
106
+ },
107
+ ];
108
+ /**
109
+ * Claude Code State Detector Implementation
110
+ */
111
+ export class ClaudeStateDetector {
112
+ /**
113
+ * Detect the current Claude Code UI state from output text
114
+ */
115
+ detectState(output) {
116
+ // Sort indicators by priority (highest first)
117
+ const sortedIndicators = [...CLAUDE_STATE_INDICATORS].sort((a, b) => b.priority - a.priority);
118
+ // Check each indicator in priority order
119
+ for (const indicator of sortedIndicators) {
120
+ for (const pattern of indicator.patterns) {
121
+ if (pattern.test(output)) {
122
+ const result = this.mapStateToWaitingStatus(indicator.state);
123
+ return {
124
+ ...result,
125
+ confidence: 0.9,
126
+ reason: `Detected pattern for ${indicator.state}`,
127
+ };
128
+ }
129
+ }
130
+ }
131
+ // No clear state detected
132
+ return {
133
+ state: AgentState.UNKNOWN,
134
+ confidence: 0.3,
135
+ reason: 'No clear state indicators found',
136
+ isWaiting: false,
137
+ needsHuman: false,
138
+ };
139
+ }
140
+ /**
141
+ * Get a human-readable description of a state
142
+ */
143
+ getStateDescription(state) {
144
+ switch (state) {
145
+ case AgentState.THINKING:
146
+ return 'Claude is thinking';
147
+ case AgentState.TOOL_RUNNING:
148
+ return 'A tool is running';
149
+ case AgentState.PROCESSING:
150
+ return 'Processing request';
151
+ case AgentState.IDLE_AT_PROMPT:
152
+ return 'Idle at prompt';
153
+ case AgentState.WORK_COMPLETE:
154
+ return 'Work completed';
155
+ case AgentState.ASKING_QUESTION:
156
+ return 'Asking a question - needs response';
157
+ case AgentState.AWAITING_SELECTION:
158
+ return 'Awaiting user selection';
159
+ case AgentState.PLAN_APPROVAL:
160
+ return 'Waiting for plan approval';
161
+ case AgentState.PERMISSION_REQUIRED:
162
+ return 'Permission required';
163
+ case AgentState.USER_DECLINED:
164
+ return 'User declined - blocked';
165
+ case AgentState.UNKNOWN:
166
+ return 'Unknown state';
167
+ default:
168
+ return 'Unknown';
169
+ }
170
+ }
171
+ /**
172
+ * Check if a state represents active work (not waiting)
173
+ */
174
+ isActiveState(state) {
175
+ return [
176
+ AgentState.THINKING,
177
+ AgentState.TOOL_RUNNING,
178
+ AgentState.PROCESSING,
179
+ ].includes(state);
180
+ }
181
+ /**
182
+ * Check if a state requires human intervention
183
+ */
184
+ isBlockedState(state) {
185
+ return [
186
+ AgentState.ASKING_QUESTION,
187
+ AgentState.AWAITING_SELECTION,
188
+ AgentState.PLAN_APPROVAL,
189
+ AgentState.PERMISSION_REQUIRED,
190
+ AgentState.USER_DECLINED,
191
+ ].includes(state);
192
+ }
193
+ /**
194
+ * Map a state to waiting status flags
195
+ */
196
+ mapStateToWaitingStatus(state) {
197
+ switch (state) {
198
+ // Active states - not waiting
199
+ case AgentState.THINKING:
200
+ case AgentState.TOOL_RUNNING:
201
+ case AgentState.PROCESSING:
202
+ return {
203
+ state,
204
+ isWaiting: false,
205
+ needsHuman: false,
206
+ };
207
+ // Idle states - waiting but not blocked
208
+ case AgentState.IDLE_AT_PROMPT:
209
+ case AgentState.WORK_COMPLETE:
210
+ return {
211
+ state,
212
+ isWaiting: true,
213
+ needsHuman: false,
214
+ };
215
+ // Blocked states - waiting and needs human
216
+ case AgentState.ASKING_QUESTION:
217
+ case AgentState.AWAITING_SELECTION:
218
+ case AgentState.PLAN_APPROVAL:
219
+ case AgentState.PERMISSION_REQUIRED:
220
+ case AgentState.USER_DECLINED:
221
+ return {
222
+ state,
223
+ isWaiting: true,
224
+ needsHuman: true,
225
+ };
226
+ // Unknown state - assume not waiting
227
+ case AgentState.UNKNOWN:
228
+ default:
229
+ return {
230
+ state,
231
+ isWaiting: false,
232
+ needsHuman: false,
233
+ };
234
+ }
235
+ }
236
+ }
237
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/state-detectors/claude.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=claude.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.test.d.ts","sourceRoot":"","sources":["../../src/state-detectors/claude.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,127 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { ClaudeStateDetector } from './claude.js';
3
+ import { AgentState } from './types.js';
4
+ describe('ClaudeStateDetector', () => {
5
+ const detector = new ClaudeStateDetector();
6
+ describe('detectState', () => {
7
+ it('should detect THINKING state', () => {
8
+ const result = detector.detectState('(thinking) about the problem');
9
+ expect(result.state).toBe(AgentState.THINKING);
10
+ expect(result.confidence).toBe(0.9);
11
+ expect(result.isWaiting).toBe(false);
12
+ expect(result.needsHuman).toBe(false);
13
+ });
14
+ it('should detect THINKING state with action words', () => {
15
+ const result = detector.detectState('Analyzing the code structure...');
16
+ expect(result.state).toBe(AgentState.THINKING);
17
+ });
18
+ it('should detect TOOL_RUNNING state', () => {
19
+ const result = detector.detectState('Running tests... (esc to interrupt)');
20
+ expect(result.state).toBe(AgentState.TOOL_RUNNING);
21
+ expect(result.isWaiting).toBe(false);
22
+ expect(result.needsHuman).toBe(false);
23
+ });
24
+ it('should detect TOOL_RUNNING with progress bar', () => {
25
+ const result = detector.detectState('[=====> ] 50%');
26
+ expect(result.state).toBe(AgentState.TOOL_RUNNING);
27
+ });
28
+ it('should detect PROCESSING state', () => {
29
+ const result = detector.detectState('Processing your request...');
30
+ expect(result.state).toBe(AgentState.PROCESSING);
31
+ expect(result.isWaiting).toBe(false);
32
+ });
33
+ it('should detect AWAITING_SELECTION state', () => {
34
+ const result = detector.detectState('Enter to select ↑/↓ to navigate');
35
+ expect(result.state).toBe(AgentState.AWAITING_SELECTION);
36
+ expect(result.isWaiting).toBe(true);
37
+ expect(result.needsHuman).toBe(true);
38
+ });
39
+ it('should detect ASKING_QUESTION state', () => {
40
+ const result = detector.detectState('Would you like to continue?');
41
+ expect(result.state).toBe(AgentState.ASKING_QUESTION);
42
+ expect(result.needsHuman).toBe(true);
43
+ });
44
+ it('should detect ASKING_QUESTION with question mark', () => {
45
+ const result = detector.detectState('Should I proceed with this change?');
46
+ expect(result.state).toBe(AgentState.ASKING_QUESTION);
47
+ });
48
+ it('should detect PLAN_APPROVAL state', () => {
49
+ const result = detector.detectState('Please review the plan and approve');
50
+ expect(result.state).toBe(AgentState.PLAN_APPROVAL);
51
+ expect(result.needsHuman).toBe(true);
52
+ });
53
+ it('should detect PERMISSION_REQUIRED state', () => {
54
+ const result = detector.detectState('Permission required: Allow access [y/n]');
55
+ expect(result.state).toBe(AgentState.PERMISSION_REQUIRED);
56
+ expect(result.needsHuman).toBe(true);
57
+ });
58
+ it('should detect USER_DECLINED state', () => {
59
+ const result = detector.detectState('User declined the operation');
60
+ expect(result.state).toBe(AgentState.USER_DECLINED);
61
+ expect(result.needsHuman).toBe(true);
62
+ });
63
+ it('should detect WORK_COMPLETE state', () => {
64
+ const result = detector.detectState('Task completed successfully');
65
+ expect(result.state).toBe(AgentState.WORK_COMPLETE);
66
+ expect(result.isWaiting).toBe(true);
67
+ expect(result.needsHuman).toBe(false);
68
+ });
69
+ it('should detect IDLE_AT_PROMPT state', () => {
70
+ const result = detector.detectState('>\n');
71
+ expect(result.state).toBe(AgentState.IDLE_AT_PROMPT);
72
+ expect(result.isWaiting).toBe(true);
73
+ expect(result.needsHuman).toBe(false);
74
+ });
75
+ it('should return UNKNOWN for unclear output', () => {
76
+ const result = detector.detectState('Some random text');
77
+ expect(result.state).toBe(AgentState.UNKNOWN);
78
+ expect(result.confidence).toBe(0.3);
79
+ });
80
+ it('should prioritize higher priority patterns', () => {
81
+ // TOOL_RUNNING (priority 100) should win over PROCESSING (priority 90)
82
+ const result = detector.detectState('Executing and Processing');
83
+ expect(result.state).toBe(AgentState.TOOL_RUNNING);
84
+ });
85
+ });
86
+ describe('getStateDescription', () => {
87
+ it('should return description for THINKING', () => {
88
+ const desc = detector.getStateDescription(AgentState.THINKING);
89
+ expect(desc).toBe('Claude is thinking');
90
+ });
91
+ it('should return description for PERMISSION_REQUIRED', () => {
92
+ const desc = detector.getStateDescription(AgentState.PERMISSION_REQUIRED);
93
+ expect(desc).toBe('Permission required');
94
+ });
95
+ it('should return description for UNKNOWN', () => {
96
+ const desc = detector.getStateDescription(AgentState.UNKNOWN);
97
+ expect(desc).toBe('Unknown state');
98
+ });
99
+ });
100
+ describe('isActiveState', () => {
101
+ it('should return true for active states', () => {
102
+ expect(detector.isActiveState(AgentState.THINKING)).toBe(true);
103
+ expect(detector.isActiveState(AgentState.TOOL_RUNNING)).toBe(true);
104
+ expect(detector.isActiveState(AgentState.PROCESSING)).toBe(true);
105
+ });
106
+ it('should return false for non-active states', () => {
107
+ expect(detector.isActiveState(AgentState.IDLE_AT_PROMPT)).toBe(false);
108
+ expect(detector.isActiveState(AgentState.ASKING_QUESTION)).toBe(false);
109
+ expect(detector.isActiveState(AgentState.UNKNOWN)).toBe(false);
110
+ });
111
+ });
112
+ describe('isBlockedState', () => {
113
+ it('should return true for blocked states', () => {
114
+ expect(detector.isBlockedState(AgentState.ASKING_QUESTION)).toBe(true);
115
+ expect(detector.isBlockedState(AgentState.AWAITING_SELECTION)).toBe(true);
116
+ expect(detector.isBlockedState(AgentState.PLAN_APPROVAL)).toBe(true);
117
+ expect(detector.isBlockedState(AgentState.PERMISSION_REQUIRED)).toBe(true);
118
+ expect(detector.isBlockedState(AgentState.USER_DECLINED)).toBe(true);
119
+ });
120
+ it('should return false for non-blocked states', () => {
121
+ expect(detector.isBlockedState(AgentState.THINKING)).toBe(false);
122
+ expect(detector.isBlockedState(AgentState.IDLE_AT_PROMPT)).toBe(false);
123
+ expect(detector.isBlockedState(AgentState.WORK_COMPLETE)).toBe(false);
124
+ });
125
+ });
126
+ });
127
+ //# sourceMappingURL=claude.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.test.js","sourceRoot":"","sources":["../../src/state-detectors/claude.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Codex CLI State Detector
3
+ *
4
+ * Detects the UI state of Codex CLI based on output patterns
5
+ * Note: These patterns are based on common CLI patterns and may need adjustment
6
+ * based on actual Codex CLI output behavior
7
+ */
8
+ import { AgentState, StateDetectionResult, StateDetector } from './types.js';
9
+ /**
10
+ * Codex CLI State Detector Implementation
11
+ */
12
+ export declare class CodexStateDetector implements StateDetector {
13
+ /**
14
+ * Detect the current Codex CLI state from output text
15
+ */
16
+ detectState(output: string): StateDetectionResult;
17
+ /**
18
+ * Get a human-readable description of a state
19
+ */
20
+ getStateDescription(state: AgentState): string;
21
+ /**
22
+ * Check if a state represents active work (not waiting)
23
+ */
24
+ isActiveState(state: AgentState): boolean;
25
+ /**
26
+ * Check if a state requires human intervention
27
+ */
28
+ isBlockedState(state: AgentState): boolean;
29
+ /**
30
+ * Map a state to waiting status flags
31
+ */
32
+ private mapStateToWaitingStatus;
33
+ }
34
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/state-detectors/codex.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0G7E;;GAEG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB;IA4BjD;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IA6B9C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAQzC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAU1C;;OAEG;IACH,OAAO,CAAC,uBAAuB;CA2ChC"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Codex CLI State Detector
3
+ *
4
+ * Detects the UI state of Codex CLI based on output patterns
5
+ * Note: These patterns are based on common CLI patterns and may need adjustment
6
+ * based on actual Codex CLI output behavior
7
+ */
8
+ import { AgentState } from './types.js';
9
+ /**
10
+ * Priority-based state indicators for Codex CLI
11
+ * Higher priority patterns are checked first to handle overlapping indicators
12
+ */
13
+ const CODEX_STATE_INDICATORS = [
14
+ // High priority: Active work states
15
+ {
16
+ state: AgentState.THINKING,
17
+ patterns: [
18
+ /thinking\.\.\./i,
19
+ /analyzing|considering/i,
20
+ /generating response/i,
21
+ ],
22
+ priority: 100,
23
+ },
24
+ {
25
+ state: AgentState.TOOL_RUNNING,
26
+ patterns: [
27
+ /executing/i,
28
+ /running command/i,
29
+ /\[\s*=+\s*\]/i, // Progress bars with = signs
30
+ /\d+%\s*complete/i,
31
+ ],
32
+ priority: 100,
33
+ },
34
+ {
35
+ state: AgentState.PROCESSING,
36
+ patterns: [
37
+ /processing/i,
38
+ /loading/i,
39
+ /working/i,
40
+ ],
41
+ priority: 90,
42
+ },
43
+ // High priority: Blocked states requiring human intervention
44
+ {
45
+ state: AgentState.AWAITING_SELECTION,
46
+ patterns: [
47
+ /select an option/i,
48
+ /choose from the following/i,
49
+ /\[1-9\]/i, // Numbered options
50
+ ],
51
+ priority: 90,
52
+ },
53
+ {
54
+ state: AgentState.ASKING_QUESTION,
55
+ patterns: [
56
+ /\?\s*$/m, // Line ending with question mark
57
+ /please confirm/i,
58
+ /do you want/i,
59
+ /would you like/i,
60
+ ],
61
+ priority: 85,
62
+ },
63
+ {
64
+ state: AgentState.PERMISSION_REQUIRED,
65
+ patterns: [
66
+ /permission required/i,
67
+ /authorization needed/i,
68
+ /\[y\/n\]/i,
69
+ /approve/i,
70
+ ],
71
+ priority: 90,
72
+ },
73
+ {
74
+ state: AgentState.USER_DECLINED,
75
+ patterns: [
76
+ /declined/i,
77
+ /denied/i,
78
+ /cancelled/i,
79
+ /aborted/i,
80
+ ],
81
+ priority: 85,
82
+ },
83
+ // Lower priority: Ready/idle states
84
+ {
85
+ state: AgentState.WORK_COMPLETE,
86
+ patterns: [
87
+ /done/i,
88
+ /completed/i,
89
+ /finished/i,
90
+ /success/i,
91
+ ],
92
+ priority: 50,
93
+ },
94
+ {
95
+ state: AgentState.IDLE_AT_PROMPT,
96
+ patterns: [
97
+ /^>\s*$/m, // Prompt alone on line
98
+ /^codex>\s*$/m,
99
+ /waiting for input/i,
100
+ ],
101
+ priority: 40,
102
+ },
103
+ ];
104
+ /**
105
+ * Codex CLI State Detector Implementation
106
+ */
107
+ export class CodexStateDetector {
108
+ /**
109
+ * Detect the current Codex CLI state from output text
110
+ */
111
+ detectState(output) {
112
+ // Sort indicators by priority (highest first)
113
+ const sortedIndicators = [...CODEX_STATE_INDICATORS].sort((a, b) => b.priority - a.priority);
114
+ // Check each indicator in priority order
115
+ for (const indicator of sortedIndicators) {
116
+ for (const pattern of indicator.patterns) {
117
+ if (pattern.test(output)) {
118
+ const result = this.mapStateToWaitingStatus(indicator.state);
119
+ return {
120
+ ...result,
121
+ confidence: 0.85, // Slightly lower confidence for Codex patterns
122
+ reason: `Detected Codex pattern for ${indicator.state}`,
123
+ };
124
+ }
125
+ }
126
+ }
127
+ // No clear state detected
128
+ return {
129
+ state: AgentState.UNKNOWN,
130
+ confidence: 0.3,
131
+ reason: 'No clear Codex state indicators found',
132
+ isWaiting: false,
133
+ needsHuman: false,
134
+ };
135
+ }
136
+ /**
137
+ * Get a human-readable description of a state
138
+ */
139
+ getStateDescription(state) {
140
+ switch (state) {
141
+ case AgentState.THINKING:
142
+ return 'Codex is thinking';
143
+ case AgentState.TOOL_RUNNING:
144
+ return 'Running command';
145
+ case AgentState.PROCESSING:
146
+ return 'Processing request';
147
+ case AgentState.IDLE_AT_PROMPT:
148
+ return 'Idle at prompt';
149
+ case AgentState.WORK_COMPLETE:
150
+ return 'Work completed';
151
+ case AgentState.ASKING_QUESTION:
152
+ return 'Asking a question - needs response';
153
+ case AgentState.AWAITING_SELECTION:
154
+ return 'Awaiting user selection';
155
+ case AgentState.PLAN_APPROVAL:
156
+ return 'Waiting for approval';
157
+ case AgentState.PERMISSION_REQUIRED:
158
+ return 'Permission required';
159
+ case AgentState.USER_DECLINED:
160
+ return 'User declined - blocked';
161
+ case AgentState.UNKNOWN:
162
+ return 'Unknown state';
163
+ default:
164
+ return 'Unknown';
165
+ }
166
+ }
167
+ /**
168
+ * Check if a state represents active work (not waiting)
169
+ */
170
+ isActiveState(state) {
171
+ return [
172
+ AgentState.THINKING,
173
+ AgentState.TOOL_RUNNING,
174
+ AgentState.PROCESSING,
175
+ ].includes(state);
176
+ }
177
+ /**
178
+ * Check if a state requires human intervention
179
+ */
180
+ isBlockedState(state) {
181
+ return [
182
+ AgentState.ASKING_QUESTION,
183
+ AgentState.AWAITING_SELECTION,
184
+ AgentState.PLAN_APPROVAL,
185
+ AgentState.PERMISSION_REQUIRED,
186
+ AgentState.USER_DECLINED,
187
+ ].includes(state);
188
+ }
189
+ /**
190
+ * Map a state to waiting status flags
191
+ */
192
+ mapStateToWaitingStatus(state) {
193
+ switch (state) {
194
+ // Active states - not waiting
195
+ case AgentState.THINKING:
196
+ case AgentState.TOOL_RUNNING:
197
+ case AgentState.PROCESSING:
198
+ return {
199
+ state,
200
+ isWaiting: false,
201
+ needsHuman: false,
202
+ };
203
+ // Idle states - waiting but not blocked
204
+ case AgentState.IDLE_AT_PROMPT:
205
+ case AgentState.WORK_COMPLETE:
206
+ return {
207
+ state,
208
+ isWaiting: true,
209
+ needsHuman: false,
210
+ };
211
+ // Blocked states - waiting and needs human
212
+ case AgentState.ASKING_QUESTION:
213
+ case AgentState.AWAITING_SELECTION:
214
+ case AgentState.PLAN_APPROVAL:
215
+ case AgentState.PERMISSION_REQUIRED:
216
+ case AgentState.USER_DECLINED:
217
+ return {
218
+ state,
219
+ isWaiting: true,
220
+ needsHuman: true,
221
+ };
222
+ // Unknown state - assume not waiting
223
+ case AgentState.UNKNOWN:
224
+ default:
225
+ return {
226
+ state,
227
+ isWaiting: false,
228
+ needsHuman: false,
229
+ };
230
+ }
231
+ }
232
+ }
233
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/state-detectors/codex.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAuC,MAAM,YAAY,CAAC;AAQ7E;;;GAGG;AACH,MAAM,sBAAsB,GAAqB;IAC/C,oCAAoC;IACpC;QACE,KAAK,EAAE,UAAU,CAAC,QAAQ;QAC1B,QAAQ,EAAE;YACR,iBAAiB;YACjB,wBAAwB;YACxB,sBAAsB;SACvB;QACD,QAAQ,EAAE,GAAG;KACd;IACD;QACE,KAAK,EAAE,UAAU,CAAC,YAAY;QAC9B,QAAQ,EAAE;YACR,YAAY;YACZ,kBAAkB;YAClB,eAAe,EAAE,6BAA6B;YAC9C,kBAAkB;SACnB;QACD,QAAQ,EAAE,GAAG;KACd;IACD;QACE,KAAK,EAAE,UAAU,CAAC,UAAU;QAC5B,QAAQ,EAAE;YACR,aAAa;YACb,UAAU;YACV,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb;IAED,6DAA6D;IAC7D;QACE,KAAK,EAAE,UAAU,CAAC,kBAAkB;QACpC,QAAQ,EAAE;YACR,mBAAmB;YACnB,4BAA4B;YAC5B,UAAU,EAAE,mBAAmB;SAChC;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,KAAK,EAAE,UAAU,CAAC,eAAe;QACjC,QAAQ,EAAE;YACR,SAAS,EAAE,iCAAiC;YAC5C,iBAAiB;YACjB,cAAc;YACd,iBAAiB;SAClB;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,KAAK,EAAE,UAAU,CAAC,mBAAmB;QACrC,QAAQ,EAAE;YACR,sBAAsB;YACtB,uBAAuB;YACvB,WAAW;YACX,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,KAAK,EAAE,UAAU,CAAC,aAAa;QAC/B,QAAQ,EAAE;YACR,WAAW;YACX,SAAS;YACT,YAAY;YACZ,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb;IAED,oCAAoC;IACpC;QACE,KAAK,EAAE,UAAU,CAAC,aAAa;QAC/B,QAAQ,EAAE;YACR,OAAO;YACP,YAAY;YACZ,WAAW;YACX,UAAU;SACX;QACD,QAAQ,EAAE,EAAE;KACb;IACD;QACE,KAAK,EAAE,UAAU,CAAC,cAAc;QAChC,QAAQ,EAAE;YACR,SAAS,EAAE,uBAAuB;YAClC,cAAc;YACd,oBAAoB;SACrB;QACD,QAAQ,EAAE,EAAE;KACb;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,WAAW,CAAC,MAAc;QACxB,8CAA8C;QAC9C,MAAM,gBAAgB,GAAG,CAAC,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE7F,yCAAyC;QACzC,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YACzC,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC7D,OAAO;wBACL,GAAG,MAAM;wBACT,UAAU,EAAE,IAAI,EAAE,+CAA+C;wBACjE,MAAM,EAAE,8BAA8B,SAAS,CAAC,KAAK,EAAE;qBACxD,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,OAAO;YACzB,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,uCAAuC;YAC/C,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,KAAK;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAiB;QACnC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,UAAU,CAAC,QAAQ;gBACtB,OAAO,mBAAmB,CAAC;YAC7B,KAAK,UAAU,CAAC,YAAY;gBAC1B,OAAO,iBAAiB,CAAC;YAC3B,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAO,oBAAoB,CAAC;YAC9B,KAAK,UAAU,CAAC,cAAc;gBAC5B,OAAO,gBAAgB,CAAC;YAC1B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO,gBAAgB,CAAC;YAC1B,KAAK,UAAU,CAAC,eAAe;gBAC7B,OAAO,oCAAoC,CAAC;YAC9C,KAAK,UAAU,CAAC,kBAAkB;gBAChC,OAAO,yBAAyB,CAAC;YACnC,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO,sBAAsB,CAAC;YAChC,KAAK,UAAU,CAAC,mBAAmB;gBACjC,OAAO,qBAAqB,CAAC;YAC/B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO,yBAAyB,CAAC;YACnC,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,eAAe,CAAC;YACzB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAiB;QAC7B,OAAO;YACL,UAAU,CAAC,QAAQ;YACnB,UAAU,CAAC,YAAY;YACvB,UAAU,CAAC,UAAU;SACtB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAiB;QAC9B,OAAO;YACL,UAAU,CAAC,eAAe;YAC1B,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,aAAa;YACxB,UAAU,CAAC,mBAAmB;YAC9B,UAAU,CAAC,aAAa;SACzB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,KAAiB;QAC/C,QAAQ,KAAK,EAAE,CAAC;YACd,8BAA8B;YAC9B,KAAK,UAAU,CAAC,QAAQ,CAAC;YACzB,KAAK,UAAU,CAAC,YAAY,CAAC;YAC7B,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAO;oBACL,KAAK;oBACL,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBAClB,CAAC;YAEJ,wCAAwC;YACxC,KAAK,UAAU,CAAC,cAAc,CAAC;YAC/B,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO;oBACL,KAAK;oBACL,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,KAAK;iBAClB,CAAC;YAEJ,2CAA2C;YAC3C,KAAK,UAAU,CAAC,eAAe,CAAC;YAChC,KAAK,UAAU,CAAC,kBAAkB,CAAC;YACnC,KAAK,UAAU,CAAC,aAAa,CAAC;YAC9B,KAAK,UAAU,CAAC,mBAAmB,CAAC;YACpC,KAAK,UAAU,CAAC,aAAa;gBAC3B,OAAO;oBACL,KAAK;oBACL,SAAS,EAAE,IAAI;oBACf,UAAU,EAAE,IAAI;iBACjB,CAAC;YAEJ,qCAAqC;YACrC,KAAK,UAAU,CAAC,OAAO,CAAC;YACxB;gBACE,OAAO;oBACL,KAAK;oBACL,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBAClB,CAAC;QACN,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=codex.test.d.ts.map