@urateam/core 0.1.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 (620) hide show
  1. package/dist/__tests__/assembler.test.d.ts +2 -0
  2. package/dist/__tests__/assembler.test.d.ts.map +1 -0
  3. package/dist/__tests__/assembler.test.js +63 -0
  4. package/dist/__tests__/assembler.test.js.map +1 -0
  5. package/dist/__tests__/auth-check.test.d.ts +2 -0
  6. package/dist/__tests__/auth-check.test.d.ts.map +1 -0
  7. package/dist/__tests__/auth-check.test.js +88 -0
  8. package/dist/__tests__/auth-check.test.js.map +1 -0
  9. package/dist/__tests__/auto-merge.test.d.ts +15 -0
  10. package/dist/__tests__/auto-merge.test.d.ts.map +1 -0
  11. package/dist/__tests__/auto-merge.test.js +428 -0
  12. package/dist/__tests__/auto-merge.test.js.map +1 -0
  13. package/dist/__tests__/bec89-unified-schema.test.d.ts +2 -0
  14. package/dist/__tests__/bec89-unified-schema.test.d.ts.map +1 -0
  15. package/dist/__tests__/bec89-unified-schema.test.js +235 -0
  16. package/dist/__tests__/bec89-unified-schema.test.js.map +1 -0
  17. package/dist/__tests__/conflict-detector.test.d.ts +2 -0
  18. package/dist/__tests__/conflict-detector.test.d.ts.map +1 -0
  19. package/dist/__tests__/conflict-detector.test.js +206 -0
  20. package/dist/__tests__/conflict-detector.test.js.map +1 -0
  21. package/dist/__tests__/coordination.test.d.ts +2 -0
  22. package/dist/__tests__/coordination.test.d.ts.map +1 -0
  23. package/dist/__tests__/coordination.test.js +257 -0
  24. package/dist/__tests__/coordination.test.js.map +1 -0
  25. package/dist/__tests__/db-postgres.test.d.ts +14 -0
  26. package/dist/__tests__/db-postgres.test.d.ts.map +1 -0
  27. package/dist/__tests__/db-postgres.test.js +289 -0
  28. package/dist/__tests__/db-postgres.test.js.map +1 -0
  29. package/dist/__tests__/db.test.d.ts +2 -0
  30. package/dist/__tests__/db.test.d.ts.map +1 -0
  31. package/dist/__tests__/db.test.js +182 -0
  32. package/dist/__tests__/db.test.js.map +1 -0
  33. package/dist/__tests__/deep-review.test.d.ts +2 -0
  34. package/dist/__tests__/deep-review.test.d.ts.map +1 -0
  35. package/dist/__tests__/deep-review.test.js +322 -0
  36. package/dist/__tests__/deep-review.test.js.map +1 -0
  37. package/dist/__tests__/devcontainer.test.d.ts +2 -0
  38. package/dist/__tests__/devcontainer.test.d.ts.map +1 -0
  39. package/dist/__tests__/devcontainer.test.js +89 -0
  40. package/dist/__tests__/devcontainer.test.js.map +1 -0
  41. package/dist/__tests__/distributed-lock.test.d.ts +18 -0
  42. package/dist/__tests__/distributed-lock.test.d.ts.map +1 -0
  43. package/dist/__tests__/distributed-lock.test.js +237 -0
  44. package/dist/__tests__/distributed-lock.test.js.map +1 -0
  45. package/dist/__tests__/e2e-pipeline.test.d.ts +25 -0
  46. package/dist/__tests__/e2e-pipeline.test.d.ts.map +1 -0
  47. package/dist/__tests__/e2e-pipeline.test.js +517 -0
  48. package/dist/__tests__/e2e-pipeline.test.js.map +1 -0
  49. package/dist/__tests__/error-classifier.test.d.ts +2 -0
  50. package/dist/__tests__/error-classifier.test.d.ts.map +1 -0
  51. package/dist/__tests__/error-classifier.test.js +33 -0
  52. package/dist/__tests__/error-classifier.test.js.map +1 -0
  53. package/dist/__tests__/executor-integration.test.d.ts +11 -0
  54. package/dist/__tests__/executor-integration.test.d.ts.map +1 -0
  55. package/dist/__tests__/executor-integration.test.js +246 -0
  56. package/dist/__tests__/executor-integration.test.js.map +1 -0
  57. package/dist/__tests__/executor-issue-id.test.d.ts +13 -0
  58. package/dist/__tests__/executor-issue-id.test.d.ts.map +1 -0
  59. package/dist/__tests__/executor-issue-id.test.js +211 -0
  60. package/dist/__tests__/executor-issue-id.test.js.map +1 -0
  61. package/dist/__tests__/executor.test.d.ts +2 -0
  62. package/dist/__tests__/executor.test.d.ts.map +1 -0
  63. package/dist/__tests__/executor.test.js +164 -0
  64. package/dist/__tests__/executor.test.js.map +1 -0
  65. package/dist/__tests__/extract-handoff.test.d.ts +2 -0
  66. package/dist/__tests__/extract-handoff.test.d.ts.map +1 -0
  67. package/dist/__tests__/extract-handoff.test.js +131 -0
  68. package/dist/__tests__/extract-handoff.test.js.map +1 -0
  69. package/dist/__tests__/fail-on-auto-commit.test.d.ts +2 -0
  70. package/dist/__tests__/fail-on-auto-commit.test.d.ts.map +1 -0
  71. package/dist/__tests__/fail-on-auto-commit.test.js +156 -0
  72. package/dist/__tests__/fail-on-auto-commit.test.js.map +1 -0
  73. package/dist/__tests__/fixtures/webhook-comment.json +5 -0
  74. package/dist/__tests__/fixtures/webhook-state-change.json +15 -0
  75. package/dist/__tests__/force-push-agent-branches.test.d.ts +12 -0
  76. package/dist/__tests__/force-push-agent-branches.test.d.ts.map +1 -0
  77. package/dist/__tests__/force-push-agent-branches.test.js +348 -0
  78. package/dist/__tests__/force-push-agent-branches.test.js.map +1 -0
  79. package/dist/__tests__/github-webhook.test.d.ts +2 -0
  80. package/dist/__tests__/github-webhook.test.d.ts.map +1 -0
  81. package/dist/__tests__/github-webhook.test.js +370 -0
  82. package/dist/__tests__/github-webhook.test.js.map +1 -0
  83. package/dist/__tests__/gitlab.test.d.ts +28 -0
  84. package/dist/__tests__/gitlab.test.d.ts.map +1 -0
  85. package/dist/__tests__/gitlab.test.js +241 -0
  86. package/dist/__tests__/gitlab.test.js.map +1 -0
  87. package/dist/__tests__/integration/auto-commit.test.d.ts +2 -0
  88. package/dist/__tests__/integration/auto-commit.test.d.ts.map +1 -0
  89. package/dist/__tests__/integration/auto-commit.test.js +207 -0
  90. package/dist/__tests__/integration/auto-commit.test.js.map +1 -0
  91. package/dist/__tests__/integration/bec99-cross-worktree-guard.test.d.ts +10 -0
  92. package/dist/__tests__/integration/bec99-cross-worktree-guard.test.d.ts.map +1 -0
  93. package/dist/__tests__/integration/bec99-cross-worktree-guard.test.js +183 -0
  94. package/dist/__tests__/integration/bec99-cross-worktree-guard.test.js.map +1 -0
  95. package/dist/__tests__/integration/reproduce-bec99.test.d.ts +32 -0
  96. package/dist/__tests__/integration/reproduce-bec99.test.d.ts.map +1 -0
  97. package/dist/__tests__/integration/reproduce-bec99.test.js +243 -0
  98. package/dist/__tests__/integration/reproduce-bec99.test.js.map +1 -0
  99. package/dist/__tests__/integration/vitest-changed.test.d.ts +10 -0
  100. package/dist/__tests__/integration/vitest-changed.test.d.ts.map +1 -0
  101. package/dist/__tests__/integration/vitest-changed.test.js +128 -0
  102. package/dist/__tests__/integration/vitest-changed.test.js.map +1 -0
  103. package/dist/__tests__/license.test.d.ts +2 -0
  104. package/dist/__tests__/license.test.d.ts.map +1 -0
  105. package/dist/__tests__/license.test.js +53 -0
  106. package/dist/__tests__/license.test.js.map +1 -0
  107. package/dist/__tests__/mcp-resolver.test.d.ts +2 -0
  108. package/dist/__tests__/mcp-resolver.test.d.ts.map +1 -0
  109. package/dist/__tests__/mcp-resolver.test.js +65 -0
  110. package/dist/__tests__/mcp-resolver.test.js.map +1 -0
  111. package/dist/__tests__/migrator.test.d.ts +2 -0
  112. package/dist/__tests__/migrator.test.d.ts.map +1 -0
  113. package/dist/__tests__/migrator.test.js +300 -0
  114. package/dist/__tests__/migrator.test.js.map +1 -0
  115. package/dist/__tests__/notifier-discord.test.d.ts +2 -0
  116. package/dist/__tests__/notifier-discord.test.d.ts.map +1 -0
  117. package/dist/__tests__/notifier-discord.test.js +166 -0
  118. package/dist/__tests__/notifier-discord.test.js.map +1 -0
  119. package/dist/__tests__/notifier-slack.test.d.ts +2 -0
  120. package/dist/__tests__/notifier-slack.test.d.ts.map +1 -0
  121. package/dist/__tests__/notifier-slack.test.js +157 -0
  122. package/dist/__tests__/notifier-slack.test.js.map +1 -0
  123. package/dist/__tests__/notifier.test.d.ts +2 -0
  124. package/dist/__tests__/notifier.test.d.ts.map +1 -0
  125. package/dist/__tests__/notifier.test.js +207 -0
  126. package/dist/__tests__/notifier.test.js.map +1 -0
  127. package/dist/__tests__/pipeline-config.test.d.ts +2 -0
  128. package/dist/__tests__/pipeline-config.test.d.ts.map +1 -0
  129. package/dist/__tests__/pipeline-config.test.js +143 -0
  130. package/dist/__tests__/pipeline-config.test.js.map +1 -0
  131. package/dist/__tests__/pipeline-runner.test.d.ts +2 -0
  132. package/dist/__tests__/pipeline-runner.test.d.ts.map +1 -0
  133. package/dist/__tests__/pipeline-runner.test.js +359 -0
  134. package/dist/__tests__/pipeline-runner.test.js.map +1 -0
  135. package/dist/__tests__/pm-approvals-n1.repro.test.d.ts +9 -0
  136. package/dist/__tests__/pm-approvals-n1.repro.test.d.ts.map +1 -0
  137. package/dist/__tests__/pm-approvals-n1.repro.test.js +175 -0
  138. package/dist/__tests__/pm-approvals-n1.repro.test.js.map +1 -0
  139. package/dist/__tests__/pm-approvals.test.d.ts +2 -0
  140. package/dist/__tests__/pm-approvals.test.d.ts.map +1 -0
  141. package/dist/__tests__/pm-approvals.test.js +162 -0
  142. package/dist/__tests__/pm-approvals.test.js.map +1 -0
  143. package/dist/__tests__/pm-budget.test.d.ts +2 -0
  144. package/dist/__tests__/pm-budget.test.d.ts.map +1 -0
  145. package/dist/__tests__/pm-budget.test.js +65 -0
  146. package/dist/__tests__/pm-budget.test.js.map +1 -0
  147. package/dist/__tests__/pm-conflict.test.d.ts +2 -0
  148. package/dist/__tests__/pm-conflict.test.d.ts.map +1 -0
  149. package/dist/__tests__/pm-conflict.test.js +87 -0
  150. package/dist/__tests__/pm-conflict.test.js.map +1 -0
  151. package/dist/__tests__/pm-promote.test.d.ts +2 -0
  152. package/dist/__tests__/pm-promote.test.d.ts.map +1 -0
  153. package/dist/__tests__/pm-promote.test.js +82 -0
  154. package/dist/__tests__/pm-promote.test.js.map +1 -0
  155. package/dist/__tests__/pm-recover.test.d.ts +2 -0
  156. package/dist/__tests__/pm-recover.test.d.ts.map +1 -0
  157. package/dist/__tests__/pm-recover.test.js +100 -0
  158. package/dist/__tests__/pm-recover.test.js.map +1 -0
  159. package/dist/__tests__/pm-scheduler.test.d.ts +2 -0
  160. package/dist/__tests__/pm-scheduler.test.d.ts.map +1 -0
  161. package/dist/__tests__/pm-scheduler.test.js +112 -0
  162. package/dist/__tests__/pm-scheduler.test.js.map +1 -0
  163. package/dist/__tests__/pm-slack-interface.test.d.ts +2 -0
  164. package/dist/__tests__/pm-slack-interface.test.d.ts.map +1 -0
  165. package/dist/__tests__/pm-slack-interface.test.js +372 -0
  166. package/dist/__tests__/pm-slack-interface.test.js.map +1 -0
  167. package/dist/__tests__/pm-slack.test.d.ts +2 -0
  168. package/dist/__tests__/pm-slack.test.d.ts.map +1 -0
  169. package/dist/__tests__/pm-slack.test.js +83 -0
  170. package/dist/__tests__/pm-slack.test.js.map +1 -0
  171. package/dist/__tests__/pm-triage.test.d.ts +2 -0
  172. package/dist/__tests__/pm-triage.test.d.ts.map +1 -0
  173. package/dist/__tests__/pm-triage.test.js +198 -0
  174. package/dist/__tests__/pm-triage.test.js.map +1 -0
  175. package/dist/__tests__/pm-types.test.d.ts +2 -0
  176. package/dist/__tests__/pm-types.test.d.ts.map +1 -0
  177. package/dist/__tests__/pm-types.test.js +76 -0
  178. package/dist/__tests__/pm-types.test.js.map +1 -0
  179. package/dist/__tests__/pr-automerge.test.d.ts +18 -0
  180. package/dist/__tests__/pr-automerge.test.d.ts.map +1 -0
  181. package/dist/__tests__/pr-automerge.test.js +645 -0
  182. package/dist/__tests__/pr-automerge.test.js.map +1 -0
  183. package/dist/__tests__/pr-description.test.d.ts +2 -0
  184. package/dist/__tests__/pr-description.test.d.ts.map +1 -0
  185. package/dist/__tests__/pr-description.test.js +728 -0
  186. package/dist/__tests__/pr-description.test.js.map +1 -0
  187. package/dist/__tests__/prompt-injection.test.d.ts +2 -0
  188. package/dist/__tests__/prompt-injection.test.d.ts.map +1 -0
  189. package/dist/__tests__/prompt-injection.test.js +446 -0
  190. package/dist/__tests__/prompt-injection.test.js.map +1 -0
  191. package/dist/__tests__/ralph-gate.test.d.ts +19 -0
  192. package/dist/__tests__/ralph-gate.test.d.ts.map +1 -0
  193. package/dist/__tests__/ralph-gate.test.js +593 -0
  194. package/dist/__tests__/ralph-gate.test.js.map +1 -0
  195. package/dist/__tests__/ralph-review-fix-regression.test.d.ts +18 -0
  196. package/dist/__tests__/ralph-review-fix-regression.test.d.ts.map +1 -0
  197. package/dist/__tests__/ralph-review-fix-regression.test.js +306 -0
  198. package/dist/__tests__/ralph-review-fix-regression.test.js.map +1 -0
  199. package/dist/__tests__/ralph.test.d.ts +2 -0
  200. package/dist/__tests__/ralph.test.d.ts.map +1 -0
  201. package/dist/__tests__/ralph.test.js +96 -0
  202. package/dist/__tests__/ralph.test.js.map +1 -0
  203. package/dist/__tests__/recover-stuck.test.d.ts +8 -0
  204. package/dist/__tests__/recover-stuck.test.d.ts.map +1 -0
  205. package/dist/__tests__/recover-stuck.test.js +399 -0
  206. package/dist/__tests__/recover-stuck.test.js.map +1 -0
  207. package/dist/__tests__/repo.test.d.ts +2 -0
  208. package/dist/__tests__/repo.test.d.ts.map +1 -0
  209. package/dist/__tests__/repo.test.js +295 -0
  210. package/dist/__tests__/repo.test.js.map +1 -0
  211. package/dist/__tests__/repro-bec58-n-plus-one.test.d.ts +2 -0
  212. package/dist/__tests__/repro-bec58-n-plus-one.test.d.ts.map +1 -0
  213. package/dist/__tests__/repro-bec58-n-plus-one.test.js +187 -0
  214. package/dist/__tests__/repro-bec58-n-plus-one.test.js.map +1 -0
  215. package/dist/__tests__/reproduce-bec113-pagination-warning.test.d.ts +16 -0
  216. package/dist/__tests__/reproduce-bec113-pagination-warning.test.d.ts.map +1 -0
  217. package/dist/__tests__/reproduce-bec113-pagination-warning.test.js +226 -0
  218. package/dist/__tests__/reproduce-bec113-pagination-warning.test.js.map +1 -0
  219. package/dist/__tests__/reproduce-bec43-updatedat.test.d.ts +2 -0
  220. package/dist/__tests__/reproduce-bec43-updatedat.test.d.ts.map +1 -0
  221. package/dist/__tests__/reproduce-bec43-updatedat.test.js +76 -0
  222. package/dist/__tests__/reproduce-bec43-updatedat.test.js.map +1 -0
  223. package/dist/__tests__/reproduce-bec48-distributed-race.test.d.ts +18 -0
  224. package/dist/__tests__/reproduce-bec48-distributed-race.test.d.ts.map +1 -0
  225. package/dist/__tests__/reproduce-bec48-distributed-race.test.js +178 -0
  226. package/dist/__tests__/reproduce-bec48-distributed-race.test.js.map +1 -0
  227. package/dist/__tests__/reproduce-bec62.test.d.ts +2 -0
  228. package/dist/__tests__/reproduce-bec62.test.d.ts.map +1 -0
  229. package/dist/__tests__/reproduce-bec62.test.js +86 -0
  230. package/dist/__tests__/reproduce-bec62.test.js.map +1 -0
  231. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.d.ts +13 -0
  232. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.d.ts.map +1 -0
  233. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js +220 -0
  234. package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js.map +1 -0
  235. package/dist/__tests__/review-feedback.test.d.ts +2 -0
  236. package/dist/__tests__/review-feedback.test.d.ts.map +1 -0
  237. package/dist/__tests__/review-feedback.test.js +383 -0
  238. package/dist/__tests__/review-feedback.test.js.map +1 -0
  239. package/dist/__tests__/sanitizer.test.d.ts +2 -0
  240. package/dist/__tests__/sanitizer.test.d.ts.map +1 -0
  241. package/dist/__tests__/sanitizer.test.js +162 -0
  242. package/dist/__tests__/sanitizer.test.js.map +1 -0
  243. package/dist/__tests__/security.test.d.ts +2 -0
  244. package/dist/__tests__/security.test.d.ts.map +1 -0
  245. package/dist/__tests__/security.test.js +52 -0
  246. package/dist/__tests__/security.test.js.map +1 -0
  247. package/dist/__tests__/server.test.d.ts +2 -0
  248. package/dist/__tests__/server.test.d.ts.map +1 -0
  249. package/dist/__tests__/server.test.js +61 -0
  250. package/dist/__tests__/server.test.js.map +1 -0
  251. package/dist/__tests__/slack-alerts.test.d.ts +2 -0
  252. package/dist/__tests__/slack-alerts.test.d.ts.map +1 -0
  253. package/dist/__tests__/slack-alerts.test.js +214 -0
  254. package/dist/__tests__/slack-alerts.test.js.map +1 -0
  255. package/dist/__tests__/stage-models.test.d.ts +14 -0
  256. package/dist/__tests__/stage-models.test.d.ts.map +1 -0
  257. package/dist/__tests__/stage-models.test.js +244 -0
  258. package/dist/__tests__/stage-models.test.js.map +1 -0
  259. package/dist/__tests__/start-todo.test.d.ts +2 -0
  260. package/dist/__tests__/start-todo.test.d.ts.map +1 -0
  261. package/dist/__tests__/start-todo.test.js +175 -0
  262. package/dist/__tests__/start-todo.test.js.map +1 -0
  263. package/dist/__tests__/tech-stack.test.d.ts +2 -0
  264. package/dist/__tests__/tech-stack.test.d.ts.map +1 -0
  265. package/dist/__tests__/tech-stack.test.js +75 -0
  266. package/dist/__tests__/tech-stack.test.js.map +1 -0
  267. package/dist/__tests__/templates.test.d.ts +2 -0
  268. package/dist/__tests__/templates.test.d.ts.map +1 -0
  269. package/dist/__tests__/templates.test.js +161 -0
  270. package/dist/__tests__/templates.test.js.map +1 -0
  271. package/dist/__tests__/test-quality.test.d.ts +2 -0
  272. package/dist/__tests__/test-quality.test.d.ts.map +1 -0
  273. package/dist/__tests__/test-quality.test.js +329 -0
  274. package/dist/__tests__/test-quality.test.js.map +1 -0
  275. package/dist/__tests__/token-budget.test.d.ts +2 -0
  276. package/dist/__tests__/token-budget.test.d.ts.map +1 -0
  277. package/dist/__tests__/token-budget.test.js +198 -0
  278. package/dist/__tests__/token-budget.test.js.map +1 -0
  279. package/dist/__tests__/types.test.d.ts +2 -0
  280. package/dist/__tests__/types.test.d.ts.map +1 -0
  281. package/dist/__tests__/types.test.js +156 -0
  282. package/dist/__tests__/types.test.js.map +1 -0
  283. package/dist/__tests__/validate.test.d.ts +2 -0
  284. package/dist/__tests__/validate.test.d.ts.map +1 -0
  285. package/dist/__tests__/validate.test.js +128 -0
  286. package/dist/__tests__/validate.test.js.map +1 -0
  287. package/dist/__tests__/webhook-handler.test.d.ts +2 -0
  288. package/dist/__tests__/webhook-handler.test.d.ts.map +1 -0
  289. package/dist/__tests__/webhook-handler.test.js +286 -0
  290. package/dist/__tests__/webhook-handler.test.js.map +1 -0
  291. package/dist/__tests__/webhook.test.d.ts +2 -0
  292. package/dist/__tests__/webhook.test.d.ts.map +1 -0
  293. package/dist/__tests__/webhook.test.js +58 -0
  294. package/dist/__tests__/webhook.test.js.map +1 -0
  295. package/dist/db/client.d.ts +56 -0
  296. package/dist/db/client.d.ts.map +1 -0
  297. package/dist/db/client.js +201 -0
  298. package/dist/db/client.js.map +1 -0
  299. package/dist/db/index.d.ts +4 -0
  300. package/dist/db/index.d.ts.map +1 -0
  301. package/dist/db/index.js +4 -0
  302. package/dist/db/index.js.map +1 -0
  303. package/dist/db/migrations/postgres/001_initial_schema.sql +78 -0
  304. package/dist/db/migrations/postgres/002_pg_timestamps.sql +78 -0
  305. package/dist/db/migrations/postgres/003_retry_count.sql +10 -0
  306. package/dist/db/migrations/postgres/004_review_feedback.sql +20 -0
  307. package/dist/db/migrations/postgres/005_auto_merge.sql +15 -0
  308. package/dist/db/migrations/sqlite/001_initial_schema.sql +78 -0
  309. package/dist/db/migrations/sqlite/002_retry_count.sql +5 -0
  310. package/dist/db/migrations/sqlite/003_review_feedback.sql +7 -0
  311. package/dist/db/migrations/sqlite/004_auto_merge.sql +6 -0
  312. package/dist/db/migrator.d.ts +51 -0
  313. package/dist/db/migrator.d.ts.map +1 -0
  314. package/dist/db/migrator.js +188 -0
  315. package/dist/db/migrator.js.map +1 -0
  316. package/dist/db/schema.d.ts +1114 -0
  317. package/dist/db/schema.d.ts.map +1 -0
  318. package/dist/db/schema.js +129 -0
  319. package/dist/db/schema.js.map +1 -0
  320. package/dist/entrypoint.d.ts +2 -0
  321. package/dist/entrypoint.d.ts.map +1 -0
  322. package/dist/entrypoint.js +113 -0
  323. package/dist/entrypoint.js.map +1 -0
  324. package/dist/executor/agent-config.d.ts +10 -0
  325. package/dist/executor/agent-config.d.ts.map +1 -0
  326. package/dist/executor/agent-config.js +81 -0
  327. package/dist/executor/agent-config.js.map +1 -0
  328. package/dist/executor/agent-stream.d.ts +65 -0
  329. package/dist/executor/agent-stream.d.ts.map +1 -0
  330. package/dist/executor/agent-stream.js +101 -0
  331. package/dist/executor/agent-stream.js.map +1 -0
  332. package/dist/executor/auth-check.d.ts +10 -0
  333. package/dist/executor/auth-check.d.ts.map +1 -0
  334. package/dist/executor/auth-check.js +52 -0
  335. package/dist/executor/auth-check.js.map +1 -0
  336. package/dist/executor/deep-review.d.ts +61 -0
  337. package/dist/executor/deep-review.d.ts.map +1 -0
  338. package/dist/executor/deep-review.js +308 -0
  339. package/dist/executor/deep-review.js.map +1 -0
  340. package/dist/executor/executor.d.ts +27 -0
  341. package/dist/executor/executor.d.ts.map +1 -0
  342. package/dist/executor/executor.js +168 -0
  343. package/dist/executor/executor.js.map +1 -0
  344. package/dist/executor/extract-handoff.d.ts +14 -0
  345. package/dist/executor/extract-handoff.d.ts.map +1 -0
  346. package/dist/executor/extract-handoff.js +80 -0
  347. package/dist/executor/extract-handoff.js.map +1 -0
  348. package/dist/executor/handoff.d.ts +24 -0
  349. package/dist/executor/handoff.d.ts.map +1 -0
  350. package/dist/executor/handoff.js +63 -0
  351. package/dist/executor/handoff.js.map +1 -0
  352. package/dist/executor/index.d.ts +8 -0
  353. package/dist/executor/index.d.ts.map +1 -0
  354. package/dist/executor/index.js +8 -0
  355. package/dist/executor/index.js.map +1 -0
  356. package/dist/executor/mcp-resolver.d.ts +29 -0
  357. package/dist/executor/mcp-resolver.d.ts.map +1 -0
  358. package/dist/executor/mcp-resolver.js +80 -0
  359. package/dist/executor/mcp-resolver.js.map +1 -0
  360. package/dist/executor/permissions.d.ts +11 -0
  361. package/dist/executor/permissions.d.ts.map +1 -0
  362. package/dist/executor/permissions.js +32 -0
  363. package/dist/executor/permissions.js.map +1 -0
  364. package/dist/executor/profiles.d.ts +5 -0
  365. package/dist/executor/profiles.d.ts.map +1 -0
  366. package/dist/executor/profiles.js +35 -0
  367. package/dist/executor/profiles.js.map +1 -0
  368. package/dist/executor/prompt/assembler.d.ts +10 -0
  369. package/dist/executor/prompt/assembler.d.ts.map +1 -0
  370. package/dist/executor/prompt/assembler.js +28 -0
  371. package/dist/executor/prompt/assembler.js.map +1 -0
  372. package/dist/executor/prompt/index.d.ts +5 -0
  373. package/dist/executor/prompt/index.d.ts.map +1 -0
  374. package/dist/executor/prompt/index.js +5 -0
  375. package/dist/executor/prompt/index.js.map +1 -0
  376. package/dist/executor/prompt/sanitizer.d.ts +25 -0
  377. package/dist/executor/prompt/sanitizer.d.ts.map +1 -0
  378. package/dist/executor/prompt/sanitizer.js +81 -0
  379. package/dist/executor/prompt/sanitizer.js.map +1 -0
  380. package/dist/executor/prompt/schema-mapper.d.ts +7 -0
  381. package/dist/executor/prompt/schema-mapper.d.ts.map +1 -0
  382. package/dist/executor/prompt/schema-mapper.js +59 -0
  383. package/dist/executor/prompt/schema-mapper.js.map +1 -0
  384. package/dist/executor/prompt/templates.d.ts +31 -0
  385. package/dist/executor/prompt/templates.d.ts.map +1 -0
  386. package/dist/executor/prompt/templates.js +283 -0
  387. package/dist/executor/prompt/templates.js.map +1 -0
  388. package/dist/executor/ralph.d.ts +19 -0
  389. package/dist/executor/ralph.d.ts.map +1 -0
  390. package/dist/executor/ralph.js +112 -0
  391. package/dist/executor/ralph.js.map +1 -0
  392. package/dist/executor/test-quality.d.ts +117 -0
  393. package/dist/executor/test-quality.d.ts.map +1 -0
  394. package/dist/executor/test-quality.js +261 -0
  395. package/dist/executor/test-quality.js.map +1 -0
  396. package/dist/executor/validate.d.ts +15 -0
  397. package/dist/executor/validate.d.ts.map +1 -0
  398. package/dist/executor/validate.js +124 -0
  399. package/dist/executor/validate.js.map +1 -0
  400. package/dist/index.d.ts +29 -0
  401. package/dist/index.d.ts.map +1 -0
  402. package/dist/index.js +26 -0
  403. package/dist/index.js.map +1 -0
  404. package/dist/license.d.ts +18 -0
  405. package/dist/license.d.ts.map +1 -0
  406. package/dist/license.js +44 -0
  407. package/dist/license.js.map +1 -0
  408. package/dist/logger.d.ts +43 -0
  409. package/dist/logger.d.ts.map +1 -0
  410. package/dist/logger.js +91 -0
  411. package/dist/logger.js.map +1 -0
  412. package/dist/notifier/composite.d.ts +13 -0
  413. package/dist/notifier/composite.d.ts.map +1 -0
  414. package/dist/notifier/composite.js +28 -0
  415. package/dist/notifier/composite.js.map +1 -0
  416. package/dist/notifier/discord.d.ts +14 -0
  417. package/dist/notifier/discord.d.ts.map +1 -0
  418. package/dist/notifier/discord.js +105 -0
  419. package/dist/notifier/discord.js.map +1 -0
  420. package/dist/notifier/index.d.ts +6 -0
  421. package/dist/notifier/index.d.ts.map +1 -0
  422. package/dist/notifier/index.js +6 -0
  423. package/dist/notifier/index.js.map +1 -0
  424. package/dist/notifier/linear.d.ts +28 -0
  425. package/dist/notifier/linear.d.ts.map +1 -0
  426. package/dist/notifier/linear.js +138 -0
  427. package/dist/notifier/linear.js.map +1 -0
  428. package/dist/notifier/slack-alerts.d.ts +62 -0
  429. package/dist/notifier/slack-alerts.d.ts.map +1 -0
  430. package/dist/notifier/slack-alerts.js +184 -0
  431. package/dist/notifier/slack-alerts.js.map +1 -0
  432. package/dist/notifier/slack.d.ts +14 -0
  433. package/dist/notifier/slack.d.ts.map +1 -0
  434. package/dist/notifier/slack.js +146 -0
  435. package/dist/notifier/slack.js.map +1 -0
  436. package/dist/pipeline/automerge.d.ts +44 -0
  437. package/dist/pipeline/automerge.d.ts.map +1 -0
  438. package/dist/pipeline/automerge.js +135 -0
  439. package/dist/pipeline/automerge.js.map +1 -0
  440. package/dist/pipeline/config.d.ts +5 -0
  441. package/dist/pipeline/config.d.ts.map +1 -0
  442. package/dist/pipeline/config.js +68 -0
  443. package/dist/pipeline/config.js.map +1 -0
  444. package/dist/pipeline/distributed-lock.d.ts +50 -0
  445. package/dist/pipeline/distributed-lock.d.ts.map +1 -0
  446. package/dist/pipeline/distributed-lock.js +114 -0
  447. package/dist/pipeline/distributed-lock.js.map +1 -0
  448. package/dist/pipeline/error-classifier.d.ts +9 -0
  449. package/dist/pipeline/error-classifier.d.ts.map +1 -0
  450. package/dist/pipeline/error-classifier.js +25 -0
  451. package/dist/pipeline/error-classifier.js.map +1 -0
  452. package/dist/pipeline/index.d.ts +9 -0
  453. package/dist/pipeline/index.d.ts.map +1 -0
  454. package/dist/pipeline/index.js +9 -0
  455. package/dist/pipeline/index.js.map +1 -0
  456. package/dist/pipeline/pr-description.d.ts +35 -0
  457. package/dist/pipeline/pr-description.d.ts.map +1 -0
  458. package/dist/pipeline/pr-description.js +52 -0
  459. package/dist/pipeline/pr-description.js.map +1 -0
  460. package/dist/pipeline/queue.d.ts +7 -0
  461. package/dist/pipeline/queue.d.ts.map +1 -0
  462. package/dist/pipeline/queue.js +39 -0
  463. package/dist/pipeline/queue.js.map +1 -0
  464. package/dist/pipeline/router.d.ts +6 -0
  465. package/dist/pipeline/router.d.ts.map +1 -0
  466. package/dist/pipeline/router.js +19 -0
  467. package/dist/pipeline/router.js.map +1 -0
  468. package/dist/pipeline/runner.d.ts +142 -0
  469. package/dist/pipeline/runner.d.ts.map +1 -0
  470. package/dist/pipeline/runner.js +1848 -0
  471. package/dist/pipeline/runner.js.map +1 -0
  472. package/dist/pm/actions/approval-helpers.d.ts +11 -0
  473. package/dist/pm/actions/approval-helpers.d.ts.map +1 -0
  474. package/dist/pm/actions/approval-helpers.js +34 -0
  475. package/dist/pm/actions/approval-helpers.js.map +1 -0
  476. package/dist/pm/actions/cancel.d.ts +11 -0
  477. package/dist/pm/actions/cancel.d.ts.map +1 -0
  478. package/dist/pm/actions/cancel.js +68 -0
  479. package/dist/pm/actions/cancel.js.map +1 -0
  480. package/dist/pm/actions/deprioritize.d.ts +12 -0
  481. package/dist/pm/actions/deprioritize.d.ts.map +1 -0
  482. package/dist/pm/actions/deprioritize.js +55 -0
  483. package/dist/pm/actions/deprioritize.js.map +1 -0
  484. package/dist/pm/actions/promote.d.ts +11 -0
  485. package/dist/pm/actions/promote.d.ts.map +1 -0
  486. package/dist/pm/actions/promote.js +78 -0
  487. package/dist/pm/actions/promote.js.map +1 -0
  488. package/dist/pm/actions/recover-stuck.d.ts +42 -0
  489. package/dist/pm/actions/recover-stuck.d.ts.map +1 -0
  490. package/dist/pm/actions/recover-stuck.js +143 -0
  491. package/dist/pm/actions/recover-stuck.js.map +1 -0
  492. package/dist/pm/actions/recover.d.ts +18 -0
  493. package/dist/pm/actions/recover.d.ts.map +1 -0
  494. package/dist/pm/actions/recover.js +56 -0
  495. package/dist/pm/actions/recover.js.map +1 -0
  496. package/dist/pm/actions/resolve-approvals.d.ts +17 -0
  497. package/dist/pm/actions/resolve-approvals.d.ts.map +1 -0
  498. package/dist/pm/actions/resolve-approvals.js +92 -0
  499. package/dist/pm/actions/resolve-approvals.js.map +1 -0
  500. package/dist/pm/actions/start-todo.d.ts +28 -0
  501. package/dist/pm/actions/start-todo.d.ts.map +1 -0
  502. package/dist/pm/actions/start-todo.js +117 -0
  503. package/dist/pm/actions/start-todo.js.map +1 -0
  504. package/dist/pm/actions/triage.d.ts +13 -0
  505. package/dist/pm/actions/triage.d.ts.map +1 -0
  506. package/dist/pm/actions/triage.js +109 -0
  507. package/dist/pm/actions/triage.js.map +1 -0
  508. package/dist/pm/budget.d.ts +9 -0
  509. package/dist/pm/budget.d.ts.map +1 -0
  510. package/dist/pm/budget.js +62 -0
  511. package/dist/pm/budget.js.map +1 -0
  512. package/dist/pm/call-claude.d.ts +3 -0
  513. package/dist/pm/call-claude.d.ts.map +1 -0
  514. package/dist/pm/call-claude.js +37 -0
  515. package/dist/pm/call-claude.js.map +1 -0
  516. package/dist/pm/conflict-detector.d.ts +42 -0
  517. package/dist/pm/conflict-detector.d.ts.map +1 -0
  518. package/dist/pm/conflict-detector.js +116 -0
  519. package/dist/pm/conflict-detector.js.map +1 -0
  520. package/dist/pm/conflict.d.ts +20 -0
  521. package/dist/pm/conflict.d.ts.map +1 -0
  522. package/dist/pm/conflict.js +63 -0
  523. package/dist/pm/conflict.js.map +1 -0
  524. package/dist/pm/coordination.d.ts +50 -0
  525. package/dist/pm/coordination.d.ts.map +1 -0
  526. package/dist/pm/coordination.js +163 -0
  527. package/dist/pm/coordination.js.map +1 -0
  528. package/dist/pm/linear-helpers.d.ts +2 -0
  529. package/dist/pm/linear-helpers.d.ts.map +1 -0
  530. package/dist/pm/linear-helpers.js +16 -0
  531. package/dist/pm/linear-helpers.js.map +1 -0
  532. package/dist/pm/scheduler.d.ts +47 -0
  533. package/dist/pm/scheduler.d.ts.map +1 -0
  534. package/dist/pm/scheduler.js +346 -0
  535. package/dist/pm/scheduler.js.map +1 -0
  536. package/dist/pm/slack-helpers.d.ts +2 -0
  537. package/dist/pm/slack-helpers.d.ts.map +1 -0
  538. package/dist/pm/slack-helpers.js +24 -0
  539. package/dist/pm/slack-helpers.js.map +1 -0
  540. package/dist/pm/slack-interface.d.ts +133 -0
  541. package/dist/pm/slack-interface.d.ts.map +1 -0
  542. package/dist/pm/slack-interface.js +641 -0
  543. package/dist/pm/slack-interface.js.map +1 -0
  544. package/dist/pm/slack.d.ts +18 -0
  545. package/dist/pm/slack.d.ts.map +1 -0
  546. package/dist/pm/slack.js +144 -0
  547. package/dist/pm/slack.js.map +1 -0
  548. package/dist/pm/types.d.ts +99 -0
  549. package/dist/pm/types.d.ts.map +1 -0
  550. package/dist/pm/types.js +17 -0
  551. package/dist/pm/types.js.map +1 -0
  552. package/dist/repo/config.d.ts +35 -0
  553. package/dist/repo/config.d.ts.map +1 -0
  554. package/dist/repo/config.js +72 -0
  555. package/dist/repo/config.js.map +1 -0
  556. package/dist/repo/devcontainer.d.ts +33 -0
  557. package/dist/repo/devcontainer.d.ts.map +1 -0
  558. package/dist/repo/devcontainer.js +90 -0
  559. package/dist/repo/devcontainer.js.map +1 -0
  560. package/dist/repo/git.d.ts +185 -0
  561. package/dist/repo/git.d.ts.map +1 -0
  562. package/dist/repo/git.js +586 -0
  563. package/dist/repo/git.js.map +1 -0
  564. package/dist/repo/github.d.ts +56 -0
  565. package/dist/repo/github.d.ts.map +1 -0
  566. package/dist/repo/github.js +164 -0
  567. package/dist/repo/github.js.map +1 -0
  568. package/dist/repo/gitlab.d.ts +47 -0
  569. package/dist/repo/gitlab.d.ts.map +1 -0
  570. package/dist/repo/gitlab.js +91 -0
  571. package/dist/repo/gitlab.js.map +1 -0
  572. package/dist/repo/index.d.ts +7 -0
  573. package/dist/repo/index.d.ts.map +1 -0
  574. package/dist/repo/index.js +5 -0
  575. package/dist/repo/index.js.map +1 -0
  576. package/dist/repo/tech-stack.d.ts +13 -0
  577. package/dist/repo/tech-stack.d.ts.map +1 -0
  578. package/dist/repo/tech-stack.js +112 -0
  579. package/dist/repo/tech-stack.js.map +1 -0
  580. package/dist/security/index.d.ts +3 -0
  581. package/dist/security/index.d.ts.map +1 -0
  582. package/dist/security/index.js +3 -0
  583. package/dist/security/index.js.map +1 -0
  584. package/dist/security/review-checklist.d.ts +9 -0
  585. package/dist/security/review-checklist.d.ts.map +1 -0
  586. package/dist/security/review-checklist.js +46 -0
  587. package/dist/security/review-checklist.js.map +1 -0
  588. package/dist/security/sandbox.d.ts +7 -0
  589. package/dist/security/sandbox.d.ts.map +1 -0
  590. package/dist/security/sandbox.js +31 -0
  591. package/dist/security/sandbox.js.map +1 -0
  592. package/dist/server.d.ts +48 -0
  593. package/dist/server.d.ts.map +1 -0
  594. package/dist/server.js +90 -0
  595. package/dist/server.js.map +1 -0
  596. package/dist/types.d.ts +1230 -0
  597. package/dist/types.d.ts.map +1 -0
  598. package/dist/types.js +225 -0
  599. package/dist/types.js.map +1 -0
  600. package/dist/webhook/github-handler.d.ts +39 -0
  601. package/dist/webhook/github-handler.d.ts.map +1 -0
  602. package/dist/webhook/github-handler.js +439 -0
  603. package/dist/webhook/github-handler.js.map +1 -0
  604. package/dist/webhook/handler.d.ts +16 -0
  605. package/dist/webhook/handler.d.ts.map +1 -0
  606. package/dist/webhook/handler.js +171 -0
  607. package/dist/webhook/handler.js.map +1 -0
  608. package/dist/webhook/index.d.ts +5 -0
  609. package/dist/webhook/index.d.ts.map +1 -0
  610. package/dist/webhook/index.js +5 -0
  611. package/dist/webhook/index.js.map +1 -0
  612. package/dist/webhook/parser.d.ts +18 -0
  613. package/dist/webhook/parser.d.ts.map +1 -0
  614. package/dist/webhook/parser.js +30 -0
  615. package/dist/webhook/parser.js.map +1 -0
  616. package/dist/webhook/signature.d.ts +2 -0
  617. package/dist/webhook/signature.d.ts.map +1 -0
  618. package/dist/webhook/signature.js +14 -0
  619. package/dist/webhook/signature.js.map +1 -0
  620. package/package.json +40 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,IAAI,aAAa,EAAE,QAAQ,GAAG,UAAqB,CAAC;AAE3D,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAEpE;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;CAkBzB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BvB,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBpB,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYrB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGvB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtB,CAAC"}
@@ -0,0 +1,129 @@
1
+ import { customType, sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
2
+ /**
3
+ * Active driver mode for cross-database timestamp serialization.
4
+ * Set by createDb when a connection is established.
5
+ * Internal — not part of the public API.
6
+ */
7
+ export let _schemaDriver = "sqlite";
8
+ /** @internal — called only by createDb in client.ts. */
9
+ export function _setSchemaDriver(driver) {
10
+ _schemaDriver = driver;
11
+ }
12
+ /**
13
+ * Cross-database timestamp column type.
14
+ *
15
+ * - SQLite: stored as INTEGER epoch seconds. `toDriver` converts Date → epoch int.
16
+ * `fromDriver` converts epoch integer (or legacy ISO string) → Date.
17
+ * - Postgres: stored as TIMESTAMPTZ. `toDriver` converts Date → ISO-8601 string.
18
+ * `fromDriver` converts the Date object returned by postgres-js → Date.
19
+ *
20
+ * Application code always works with plain JS `Date` objects regardless of driver.
21
+ */
22
+ export const crossTimestamp = customType({
23
+ dataType() {
24
+ return _schemaDriver === "postgres" ? "timestamptz" : "integer";
25
+ },
26
+ toDriver(value) {
27
+ if (_schemaDriver === "postgres") {
28
+ return value.toISOString();
29
+ }
30
+ return Math.floor(value.getTime() / 1000);
31
+ },
32
+ fromDriver(value) {
33
+ if (value instanceof Date)
34
+ return value;
35
+ if (typeof value === "number")
36
+ return new Date(value * 1000);
37
+ return new Date(value);
38
+ },
39
+ });
40
+ export const pipelineRuns = sqliteTable("pipeline_runs", {
41
+ id: text("id").primaryKey(),
42
+ issueId: text("issue_id").notNull(),
43
+ issueTitle: text("issue_title").notNull(),
44
+ pipelineKey: text("pipeline_key").notNull(),
45
+ repoUrl: text("repo_url").notNull(),
46
+ branch: text("branch"),
47
+ status: text("status").notNull(),
48
+ startedAt: crossTimestamp("started_at")
49
+ .notNull()
50
+ .$defaultFn(() => new Date()),
51
+ completedAt: crossTimestamp("completed_at"),
52
+ prUrl: text("pr_url"),
53
+ totalInputTokens: integer("total_input_tokens").notNull().default(0),
54
+ totalOutputTokens: integer("total_output_tokens").notNull().default(0),
55
+ errorMessage: text("error_message"),
56
+ currentStageIndex: integer("current_stage_index"),
57
+ resumePayload: text("resume_payload"),
58
+ retryCount: integer("retry_count").notNull().default(0),
59
+ /** "standard" for normal runs, "review-feedback" for PR comment re-entry runs. */
60
+ runType: text("run_type").notNull().default("standard"),
61
+ /** For review-feedback runs: the run ID of the original pipeline run that created the PR. */
62
+ parentRunId: text("parent_run_id"),
63
+ /** For review-feedback runs: JSON-serialised array of ReviewFeedbackComment objects. */
64
+ feedbackContext: text("feedback_context"),
65
+ /** True (1) when the pipeline auto-merged the PR; false (0) otherwise. */
66
+ autoMerged: integer("auto_merged", { mode: "boolean" }),
67
+ /** Human-readable reason for the auto-merge decision (e.g. "PR auto-merged" or skip reason). */
68
+ autoMergeReason: text("auto_merge_reason"),
69
+ /** True (1) when auto-commit was triggered because the agent did not commit its work. Quality metric. */
70
+ autoCommitted: integer("auto_committed", { mode: "boolean" }),
71
+ });
72
+ export const stageRuns = sqliteTable("stage_runs", {
73
+ id: text("id").primaryKey(),
74
+ pipelineRunId: text("pipeline_run_id")
75
+ .notNull()
76
+ .references(() => pipelineRuns.id),
77
+ stage: text("stage").notNull(),
78
+ status: text("status").notNull(),
79
+ startedAt: crossTimestamp("started_at")
80
+ .notNull()
81
+ .$defaultFn(() => new Date()),
82
+ completedAt: crossTimestamp("completed_at"),
83
+ inputTokens: integer("input_tokens").notNull().default(0),
84
+ outputTokens: integer("output_tokens").notNull().default(0),
85
+ turns: integer("turns").notNull().default(0),
86
+ handoffArtifact: text("handoff_artifact"),
87
+ errorMessage: text("error_message"),
88
+ });
89
+ export const agentLogs = sqliteTable("agent_logs", {
90
+ id: text("id").primaryKey(),
91
+ stageRunId: text("stage_run_id")
92
+ .notNull()
93
+ .references(() => stageRuns.id),
94
+ timestamp: crossTimestamp("timestamp")
95
+ .notNull()
96
+ .$defaultFn(() => new Date()),
97
+ type: text("type").notNull(),
98
+ content: text("content").notNull(),
99
+ });
100
+ export const activeWork = sqliteTable("active_work", {
101
+ id: text("id").primaryKey(),
102
+ runId: text("run_id").notNull().unique(),
103
+ issueId: text("issue_id").notNull(),
104
+ stage: text("stage").notNull(),
105
+ filesModified: text("files_modified"),
106
+ startedAt: crossTimestamp("started_at")
107
+ .notNull()
108
+ .$defaultFn(() => new Date()),
109
+ updatedAt: crossTimestamp("updated_at")
110
+ .notNull()
111
+ .$defaultFn(() => new Date()),
112
+ });
113
+ export const webhookDedup = sqliteTable("webhook_dedup", {
114
+ id: text("id").primaryKey(),
115
+ expiresAt: crossTimestamp("expires_at").notNull(),
116
+ });
117
+ export const pmApprovals = sqliteTable("pm_approvals", {
118
+ id: text("id").primaryKey(),
119
+ issueId: text("issue_id").notNull(),
120
+ action: text("action").notNull(),
121
+ reason: text("reason").notNull(),
122
+ slackMessageTs: text("slack_message_ts").notNull(),
123
+ status: text("status").notNull(),
124
+ createdAt: crossTimestamp("created_at")
125
+ .notNull()
126
+ .$defaultFn(() => new Date()),
127
+ resolvedAt: crossTimestamp("resolved_at"),
128
+ });
129
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=entrypoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entrypoint.d.ts","sourceRoot":"","sources":["../src/entrypoint.ts"],"names":[],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { serve } from "@hono/node-server";
3
+ import { createApp } from "./server.js";
4
+ import { defaultConfigs } from "./pipeline/config.js";
5
+ import { cleanupWorktrees } from "./repo/git.js";
6
+ // Build optional GitHub config from env vars
7
+ let github;
8
+ if (process.env.GITHUB_APP_ID && process.env.GITHUB_PRIVATE_KEY_PATH) {
9
+ github = {
10
+ appId: process.env.GITHUB_APP_ID,
11
+ privateKey: readFileSync(process.env.GITHUB_PRIVATE_KEY_PATH, "utf-8"),
12
+ installationId: process.env.GITHUB_INSTALLATION_ID
13
+ ? parseInt(process.env.GITHUB_INSTALLATION_ID, 10)
14
+ : undefined,
15
+ };
16
+ }
17
+ // Build optional dashboard auth.
18
+ // NOTE: core cannot import @urateam/dashboard (would be circular).
19
+ // dashboardAuth is read here so it can be passed to createApp for callers
20
+ // that mount the dashboard separately (e.g. the CLI). For a self-contained
21
+ // production deployment, run the dashboard as a separate process using
22
+ // packages/dashboard directly, or migrate this entrypoint to the CLI package.
23
+ const dashboardUser = process.env.DASHBOARD_USER;
24
+ const dashboardPass = process.env.DASHBOARD_PASSWORD;
25
+ const dashboardAuth = dashboardUser && dashboardPass
26
+ ? { username: dashboardUser, password: dashboardPass }
27
+ : undefined;
28
+ const _parsedTtl = parseInt(process.env.WORKTREE_TTL_HOURS ?? "24", 10);
29
+ const worktreeTtlHours = Number.isFinite(_parsedTtl) && _parsedTtl > 0 ? _parsedTtl : 24;
30
+ // Build repoConfigs from env vars (same pattern as CLI dev command)
31
+ const repoConfigs = {};
32
+ if (process.env.REPO_TEAM_ID && process.env.REPO_URL) {
33
+ repoConfigs[process.env.REPO_TEAM_ID] = {
34
+ url: process.env.REPO_URL,
35
+ defaultBranch: process.env.REPO_DEFAULT_BRANCH ?? "main",
36
+ testCommand: process.env.REPO_TEST_CMD ?? "pnpm test",
37
+ buildCommand: process.env.REPO_BUILD_CMD ?? "pnpm build",
38
+ };
39
+ }
40
+ const config = {
41
+ webhookSecret: process.env.LINEAR_WEBHOOK_SECRET ?? "",
42
+ linearApiKey: process.env.LINEAR_API_KEY ?? "",
43
+ pipelineConfigs: defaultConfigs,
44
+ repoConfigs,
45
+ databaseUrl: process.env.DATABASE_URL,
46
+ slackWebhookUrl: process.env.SLACK_WEBHOOK_URL,
47
+ discordWebhookUrl: process.env.DISCORD_WEBHOOK_URL,
48
+ concurrency: parseInt(process.env.MAX_CONCURRENT_RUNS ?? "3", 10),
49
+ agentRunDir: process.env.AGENT_RUN_DIR,
50
+ github,
51
+ dashboardAuth,
52
+ githubWebhookSecret: process.env.GITHUB_WEBHOOK_SECRET,
53
+ };
54
+ if (!config.webhookSecret) {
55
+ console.error("LINEAR_WEBHOOK_SECRET is required");
56
+ process.exit(1);
57
+ }
58
+ async function main() {
59
+ const { app, db, runner } = await createApp(config);
60
+ const port = parseInt(process.env.PORT ?? "3000", 10);
61
+ console.log(`Linear Agent Framework starting on port ${port}`);
62
+ console.log(`Pipelines: ${Object.keys(config.pipelineConfigs).join(", ")}`);
63
+ console.log(`Database: ${config.databaseUrl?.startsWith("postgres") ? "Postgres" : "SQLite"}`);
64
+ // --- Worktree cleanup cron ---
65
+ // Failed pipeline runs preserve their worktrees for debugging. Run an
66
+ // initial sweep at startup, then repeat every hour so stale directories
67
+ // don't accumulate between restarts.
68
+ const agentRunDir = config.agentRunDir ?? "/var/agent-runs";
69
+ async function runWorktreeCleanup() {
70
+ const removed = await cleanupWorktrees(agentRunDir, worktreeTtlHours);
71
+ if (removed.length > 0) {
72
+ console.log(`Worktree cleanup: removed ${removed.length} stale director${removed.length === 1 ? "y" : "ies"} (TTL ${worktreeTtlHours}h)`);
73
+ }
74
+ }
75
+ await runWorktreeCleanup();
76
+ const cleanupInterval = setInterval(runWorktreeCleanup, 60 * 60 * 1000); // every hour
77
+ cleanupInterval.unref(); // don't block process exit
78
+ // One-time startup recovery: requeue any retriable runs left from a prior crash
79
+ try {
80
+ const { recoverRetriableRuns } = await import("./pm/actions/recover.js");
81
+ const recoveryResult = await recoverRetriableRuns({
82
+ db,
83
+ runner,
84
+ maxRetries: 3,
85
+ });
86
+ if (recoveryResult.recovered.length > 0) {
87
+ console.log(`Startup recovery: requeued ${recoveryResult.recovered.length} retriable run(s)`);
88
+ }
89
+ if (recoveryResult.exhausted.length > 0) {
90
+ console.log(`Startup recovery: ${recoveryResult.exhausted.length} run(s) exceeded max retries`);
91
+ }
92
+ }
93
+ catch (err) {
94
+ console.error("Startup recovery sweep failed:", err);
95
+ }
96
+ const server = serve({ fetch: app.fetch, port });
97
+ function shutdown() {
98
+ console.log("Shutting down...");
99
+ clearInterval(cleanupInterval);
100
+ server.close(() => {
101
+ console.log("Server closed");
102
+ process.exit(0);
103
+ });
104
+ setTimeout(() => process.exit(1), 30_000);
105
+ }
106
+ process.on("SIGTERM", shutdown);
107
+ process.on("SIGINT", shutdown);
108
+ }
109
+ main().catch((err) => {
110
+ console.error("Failed to start:", err);
111
+ process.exit(1);
112
+ });
113
+ //# sourceMappingURL=entrypoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entrypoint.js","sourceRoot":"","sources":["../src/entrypoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Default CLAUDE.md content injected into agent worktrees.
3
+ * Establishes coding standards, security requirements, and behavioral
4
+ * guidelines for autonomous pipeline execution.
5
+ *
6
+ * If the target repo already has a CLAUDE.md, this is NOT injected —
7
+ * the repo's own config takes precedence.
8
+ */
9
+ export declare const DEFAULT_AGENT_CLAUDE_MD = "# CLAUDE.md \u2014 Deployed Agent Instructions\n\nThis file is injected by the Linear Agent Framework. It establishes coding standards, security requirements, and behavioral guidelines for autonomous pipeline execution.\n\n## Role\n\nYou are an autonomous agent executing a pipeline stage (implement, test, review, etc.) for a Linear issue. You are working in a git worktree on a dedicated branch. Your output will be reviewed by a validation agent and possibly a human reviewer before merging.\n\n## Code Quality Standards\n\n### General\n- Write minimal, focused changes. Fix what the issue asks \u2014 nothing more.\n- Do not refactor surrounding code, add comments to unchanged code, or \"improve\" things not in scope.\n- Do not add speculative features, feature flags, or backwards-compatibility shims.\n- Prefer simple, readable code over clever abstractions. Three similar lines > premature abstraction.\n- Only add error handling at system boundaries (user input, external APIs). Trust internal code.\n\n### Security (non-negotiable)\n- NEVER use `exec` \u2014 always `execFile` to prevent command injection.\n- NEVER interpolate user input into shell commands, SQL, or agent prompts without escaping.\n- NEVER commit secrets, API keys, .env files, or credentials.\n- Sanitize all external content (issue descriptions, webhook payloads) before use.\n- Follow OWASP top 10 awareness: XSS, SQL injection, command injection, etc.\n\n### Testing\n- Run the test suite after making changes. If tests fail, fix them.\n- Add tests for new functionality \u2014 but don't over-test. Cover the contract, not the implementation.\n- Don't mock what you can test directly. Prefer integration tests over unit tests with heavy mocking.\n\n### Git\n- Make atomic commits with clear messages describing WHY, not WHAT.\n- Don't amend, rebase, or force-push. Create new commits.\n- Don't commit generated files, build artifacts, or node_modules.\n\n## Behavioral Guidelines\n\n### Efficiency\n- Go straight to the point. Try the simplest approach first.\n- Read files before modifying them. Understand context before changing code.\n- Don't create new files unless absolutely necessary. Edit existing files.\n- Don't add documentation files, READMEs, or comments unless the issue asks for it.\n\n### Communication\n- Be concise in any output. Lead with the action or answer.\n- When you encounter an obstacle, diagnose before switching approaches.\n- If you're stuck, explain what you tried and what failed \u2014 don't loop.\n\n### Scope Discipline\n- Stay within the issue's acceptance criteria. Check them before finishing.\n- If the issue is ambiguous, make reasonable assumptions and document them in code comments.\n- If you discover related bugs while working, note them but don't fix them unless they block the issue.\n\n## Technology Conventions\n\n### TypeScript / Node.js\n- Use `import` / `export` (ESM), not `require`.\n- Use `interface` over `type` for object shapes.\n- Use Zod for runtime validation of external data.\n- Use `async/await`, not callbacks or `.then()` chains.\n- Prefer `const` over `let`. Never use `var`.\n\n### Project Structure\n- Types and schemas in a central `types.ts` file.\n- Each module has a barrel export `index.ts`.\n- Tests in `__tests__/` directories next to source files.\n\n## Handoff\n\nWhen you complete your work, the framework automatically extracts a structured handoff artifact from your changes (via git diff). You do not need to output a JSON block \u2014 just do the work and the framework handles the rest.\n\nIf you want to provide additional context for the next stage, include it as clear prose in your final message.\n";
10
+ //# sourceMappingURL=agent-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../../src/executor/agent-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,4lHAuEnC,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Default CLAUDE.md content injected into agent worktrees.
3
+ * Establishes coding standards, security requirements, and behavioral
4
+ * guidelines for autonomous pipeline execution.
5
+ *
6
+ * If the target repo already has a CLAUDE.md, this is NOT injected —
7
+ * the repo's own config takes precedence.
8
+ */
9
+ export const DEFAULT_AGENT_CLAUDE_MD = `# CLAUDE.md — Deployed Agent Instructions
10
+
11
+ This file is injected by the Linear Agent Framework. It establishes coding standards, security requirements, and behavioral guidelines for autonomous pipeline execution.
12
+
13
+ ## Role
14
+
15
+ You are an autonomous agent executing a pipeline stage (implement, test, review, etc.) for a Linear issue. You are working in a git worktree on a dedicated branch. Your output will be reviewed by a validation agent and possibly a human reviewer before merging.
16
+
17
+ ## Code Quality Standards
18
+
19
+ ### General
20
+ - Write minimal, focused changes. Fix what the issue asks — nothing more.
21
+ - Do not refactor surrounding code, add comments to unchanged code, or "improve" things not in scope.
22
+ - Do not add speculative features, feature flags, or backwards-compatibility shims.
23
+ - Prefer simple, readable code over clever abstractions. Three similar lines > premature abstraction.
24
+ - Only add error handling at system boundaries (user input, external APIs). Trust internal code.
25
+
26
+ ### Security (non-negotiable)
27
+ - NEVER use \`exec\` — always \`execFile\` to prevent command injection.
28
+ - NEVER interpolate user input into shell commands, SQL, or agent prompts without escaping.
29
+ - NEVER commit secrets, API keys, .env files, or credentials.
30
+ - Sanitize all external content (issue descriptions, webhook payloads) before use.
31
+ - Follow OWASP top 10 awareness: XSS, SQL injection, command injection, etc.
32
+
33
+ ### Testing
34
+ - Run the test suite after making changes. If tests fail, fix them.
35
+ - Add tests for new functionality — but don't over-test. Cover the contract, not the implementation.
36
+ - Don't mock what you can test directly. Prefer integration tests over unit tests with heavy mocking.
37
+
38
+ ### Git
39
+ - Make atomic commits with clear messages describing WHY, not WHAT.
40
+ - Don't amend, rebase, or force-push. Create new commits.
41
+ - Don't commit generated files, build artifacts, or node_modules.
42
+
43
+ ## Behavioral Guidelines
44
+
45
+ ### Efficiency
46
+ - Go straight to the point. Try the simplest approach first.
47
+ - Read files before modifying them. Understand context before changing code.
48
+ - Don't create new files unless absolutely necessary. Edit existing files.
49
+ - Don't add documentation files, READMEs, or comments unless the issue asks for it.
50
+
51
+ ### Communication
52
+ - Be concise in any output. Lead with the action or answer.
53
+ - When you encounter an obstacle, diagnose before switching approaches.
54
+ - If you're stuck, explain what you tried and what failed — don't loop.
55
+
56
+ ### Scope Discipline
57
+ - Stay within the issue's acceptance criteria. Check them before finishing.
58
+ - If the issue is ambiguous, make reasonable assumptions and document them in code comments.
59
+ - If you discover related bugs while working, note them but don't fix them unless they block the issue.
60
+
61
+ ## Technology Conventions
62
+
63
+ ### TypeScript / Node.js
64
+ - Use \`import\` / \`export\` (ESM), not \`require\`.
65
+ - Use \`interface\` over \`type\` for object shapes.
66
+ - Use Zod for runtime validation of external data.
67
+ - Use \`async/await\`, not callbacks or \`.then()\` chains.
68
+ - Prefer \`const\` over \`let\`. Never use \`var\`.
69
+
70
+ ### Project Structure
71
+ - Types and schemas in a central \`types.ts\` file.
72
+ - Each module has a barrel export \`index.ts\`.
73
+ - Tests in \`__tests__/\` directories next to source files.
74
+
75
+ ## Handoff
76
+
77
+ When you complete your work, the framework automatically extracts a structured handoff artifact from your changes (via git diff). You do not need to output a JSON block — just do the work and the framework handles the rest.
78
+
79
+ If you want to provide additional context for the next stage, include it as clear prose in your final message.
80
+ `;
81
+ //# sourceMappingURL=agent-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-config.js","sourceRoot":"","sources":["../../src/executor/agent-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEtC,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared helpers for consuming Agent SDK message streams and parsing
3
+ * JSON blocks from agent output.
4
+ */
5
+ export interface StreamMessage {
6
+ type?: string;
7
+ usage?: {
8
+ input_tokens?: number;
9
+ output_tokens?: number;
10
+ };
11
+ content?: Array<{
12
+ type: string;
13
+ text?: string;
14
+ }> | string;
15
+ /** Agent SDK wraps assistant text in `message` for some message shapes */
16
+ message?: {
17
+ content?: Array<{
18
+ type: string;
19
+ text?: string;
20
+ }> | string;
21
+ } | string;
22
+ }
23
+ export interface ConsumeResult {
24
+ lastText: string;
25
+ inputTokens: number;
26
+ outputTokens: number;
27
+ turns: number;
28
+ }
29
+ /**
30
+ * Consume an Agent SDK message stream, accumulating token usage and
31
+ * extracting the last assistant text content.
32
+ *
33
+ * The optional `onToolMessage` callback is invoked for tool_use / tool_result
34
+ * messages so callers (e.g. executor.ts) can log them without duplicating
35
+ * the iteration boilerplate.
36
+ */
37
+ export declare function consumeAgentStream(messages: AsyncIterable<unknown>, options?: {
38
+ onToolMessage?: (msg: StreamMessage) => void;
39
+ /** Called periodically (every progressIntervalMs) with current stats */
40
+ onProgress?: (stats: {
41
+ messageCount: number;
42
+ turns: number;
43
+ inputTokens: number;
44
+ outputTokens: number;
45
+ }) => void;
46
+ progressIntervalMs?: number;
47
+ }): Promise<ConsumeResult>;
48
+ /**
49
+ * Extract text from an Agent SDK message content field.
50
+ */
51
+ export declare function extractText(content: Array<{
52
+ type: string;
53
+ text?: string;
54
+ }> | string): string;
55
+ /**
56
+ * Extract and parse a bare JSON object from text (finds first `{...}` match).
57
+ * Returns null if no object is found or if parsing fails.
58
+ */
59
+ export declare function parseJsonObject(text: string): any | null;
60
+ /**
61
+ * Extract and parse a ```json fenced code block from agent output text.
62
+ * Returns null if no block is found or if parsing fails.
63
+ */
64
+ export declare function parseJsonBlock(text: string): unknown | null;
65
+ //# sourceMappingURL=agent-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-stream.d.ts","sourceRoot":"","sources":["../../src/executor/agent-stream.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,MAAM,CAAC;IAC1D,0EAA0E;IAC1E,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,GAAG,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;CAClF;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,wEAAwE;IACxE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GACA,OAAO,CAAC,aAAa,CAAC,CAoDxB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,GACvD,MAAM,CAOR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAQxD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQ3D"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Shared helpers for consuming Agent SDK message streams and parsing
3
+ * JSON blocks from agent output.
4
+ */
5
+ /**
6
+ * Consume an Agent SDK message stream, accumulating token usage and
7
+ * extracting the last assistant text content.
8
+ *
9
+ * The optional `onToolMessage` callback is invoked for tool_use / tool_result
10
+ * messages so callers (e.g. executor.ts) can log them without duplicating
11
+ * the iteration boilerplate.
12
+ */
13
+ export async function consumeAgentStream(messages, options) {
14
+ let inputTokens = 0;
15
+ let outputTokens = 0;
16
+ let turns = 0;
17
+ let lastText = "";
18
+ let messageCount = 0;
19
+ let lastProgressTime = Date.now();
20
+ const progressInterval = options?.progressIntervalMs ?? 30_000;
21
+ for await (const rawMessage of messages) {
22
+ const message = rawMessage;
23
+ messageCount++;
24
+ if (options?.onProgress && Date.now() - lastProgressTime >= progressInterval) {
25
+ options.onProgress({ messageCount, turns, inputTokens, outputTokens });
26
+ lastProgressTime = Date.now();
27
+ }
28
+ if (message.usage) {
29
+ inputTokens += message.usage.input_tokens ?? 0;
30
+ outputTokens += message.usage.output_tokens ?? 0;
31
+ }
32
+ if ((message.type === "tool_use" || message.type === "tool_result") &&
33
+ options?.onToolMessage) {
34
+ options.onToolMessage(message);
35
+ }
36
+ if (message.type === "assistant") {
37
+ // Agent SDK may put text in `content` (tool-using sessions) or
38
+ // `message.content` (no-tool sessions). Check both.
39
+ if (message.content) {
40
+ const text = extractText(message.content);
41
+ if (text)
42
+ lastText = text;
43
+ }
44
+ else if (message.message) {
45
+ const inner = typeof message.message === "string"
46
+ ? message.message
47
+ : message.message.content
48
+ ? extractText(message.message.content)
49
+ : "";
50
+ if (inner)
51
+ lastText = inner;
52
+ }
53
+ }
54
+ if (message.type === "assistant") {
55
+ turns++;
56
+ }
57
+ }
58
+ return { lastText, inputTokens, outputTokens, turns };
59
+ }
60
+ /**
61
+ * Extract text from an Agent SDK message content field.
62
+ */
63
+ export function extractText(content) {
64
+ return Array.isArray(content)
65
+ ? content
66
+ .filter((p) => p.type === "text")
67
+ .map((p) => p.text ?? "")
68
+ .join("\n")
69
+ : String(content);
70
+ }
71
+ /**
72
+ * Extract and parse a bare JSON object from text (finds first `{...}` match).
73
+ * Returns null if no object is found or if parsing fails.
74
+ */
75
+ export function parseJsonObject(text) {
76
+ const match = text.match(/\{[\s\S]*\}/);
77
+ if (!match)
78
+ return null;
79
+ try {
80
+ return JSON.parse(match[0]);
81
+ }
82
+ catch {
83
+ return null;
84
+ }
85
+ }
86
+ /**
87
+ * Extract and parse a ```json fenced code block from agent output text.
88
+ * Returns null if no block is found or if parsing fails.
89
+ */
90
+ export function parseJsonBlock(text) {
91
+ const match = text.match(/```json\s*\n([\s\S]*?)\n```/);
92
+ if (!match)
93
+ return null;
94
+ try {
95
+ return JSON.parse(match[1]);
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ }
101
+ //# sourceMappingURL=agent-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-stream.js","sourceRoot":"","sources":["../../src/executor/agent-stream.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgC,EAChC,OAKC;IAED,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,gBAAgB,GAAG,OAAO,EAAE,kBAAkB,IAAI,MAAM,CAAC;IAE/D,IAAI,KAAK,EAAE,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,UAA2B,CAAC;QAC5C,YAAY,EAAE,CAAC;QAEf,IAAI,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,IAAI,gBAAgB,EAAE,CAAC;YAC7E,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YACvE,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YAC/C,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,IACE,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC;YAC/D,OAAO,EAAE,aAAa,EACtB,CAAC;YACD,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,+DAA+D;YAC/D,oDAAoD;YACpD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,IAAI;oBAAE,QAAQ,GAAG,IAAI,CAAC;YAC5B,CAAC;iBAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;oBAC/C,CAAC,CAAC,OAAO,CAAC,OAAO;oBACjB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;wBACvB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;wBACtC,CAAC,CAAC,EAAE,CAAC;gBACT,IAAI,KAAK;oBAAE,QAAQ,GAAG,KAAK,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,OAAwD;IAExD,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,CAAC,CAAC,OAAO;aACJ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;aACxB,IAAI,CAAC,IAAI,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Validates Claude auth credentials by running `claude auth status`.
3
+ * Results are cached for 5 minutes to avoid hammering the CLI on every call.
4
+ * Uses a single-flight pattern so concurrent callers share one subprocess.
5
+ * Returns true if auth is valid, false otherwise.
6
+ */
7
+ export declare function isClaudeAuthValid(): Promise<boolean>;
8
+ /** Reset the cached auth check (e.g., after a refresh attempt). */
9
+ export declare function resetAuthCheckCache(): void;
10
+ //# sourceMappingURL=auth-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-check.d.ts","sourceRoot":"","sources":["../../src/executor/auth-check.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CA8B1D;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C"}
@@ -0,0 +1,52 @@
1
+ import { execFile } from "node:child_process";
2
+ import { createLogger } from "../logger.js";
3
+ const log = createLogger({ component: "AuthCheck" });
4
+ let lastCheckTime = 0;
5
+ let lastCheckResult = false;
6
+ let inflightCheck = null;
7
+ const CHECK_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
8
+ /**
9
+ * Validates Claude auth credentials by running `claude auth status`.
10
+ * Results are cached for 5 minutes to avoid hammering the CLI on every call.
11
+ * Uses a single-flight pattern so concurrent callers share one subprocess.
12
+ * Returns true if auth is valid, false otherwise.
13
+ */
14
+ export async function isClaudeAuthValid() {
15
+ const now = Date.now();
16
+ if (now - lastCheckTime < CHECK_INTERVAL_MS) {
17
+ return lastCheckResult;
18
+ }
19
+ // Single-flight: if a check is already in progress, share its result.
20
+ if (inflightCheck)
21
+ return inflightCheck;
22
+ inflightCheck = (async () => {
23
+ try {
24
+ await new Promise((resolve, reject) => {
25
+ execFile("claude", ["auth", "status"], { timeout: 10_000 }, (err) => {
26
+ if (err)
27
+ reject(err);
28
+ else
29
+ resolve();
30
+ });
31
+ });
32
+ lastCheckResult = true;
33
+ log.debug("Claude auth check passed");
34
+ }
35
+ catch {
36
+ lastCheckResult = false;
37
+ log.error("Claude auth check failed — credentials may be expired. Run: claude login");
38
+ }
39
+ finally {
40
+ lastCheckTime = Date.now();
41
+ inflightCheck = null;
42
+ }
43
+ return lastCheckResult;
44
+ })();
45
+ return inflightCheck;
46
+ }
47
+ /** Reset the cached auth check (e.g., after a refresh attempt). */
48
+ export function resetAuthCheckCache() {
49
+ lastCheckTime = 0;
50
+ lastCheckResult = false;
51
+ }
52
+ //# sourceMappingURL=auth-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-check.js","sourceRoot":"","sources":["../../src/executor/auth-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;AAErD,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,eAAe,GAAG,KAAK,CAAC;AAC5B,IAAI,aAAa,GAA4B,IAAI,CAAC;AAClD,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAErD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,aAAa,GAAG,iBAAiB,EAAE,CAAC;QAC5C,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,sEAAsE;IACtE,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;oBAClE,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,eAAe,GAAG,IAAI,CAAC;YACvB,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe,GAAG,KAAK,CAAC;YACxB,GAAG,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB;IACjC,aAAa,GAAG,CAAC,CAAC;IAClB,eAAe,GAAG,KAAK,CAAC;AAC1B,CAAC"}