@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,44 @@
1
+ import { createLogger } from "./logger.js";
2
+ const log = createLogger({ component: "license" });
3
+ const COMMERCIAL_FEATURES = new Set([
4
+ "slack-interface",
5
+ "conflict-detection",
6
+ "deep-review",
7
+ "approval-workflows",
8
+ "multi-repo",
9
+ "stage-models",
10
+ "advanced-automerge",
11
+ ]);
12
+ let cachedStatus = null;
13
+ /**
14
+ * Check the license status from URATEAM_LICENSE_KEY env var.
15
+ * Result is cached for the lifetime of the process.
16
+ */
17
+ export function checkLicense() {
18
+ if (cachedStatus)
19
+ return cachedStatus;
20
+ const key = process.env.URATEAM_LICENSE_KEY;
21
+ if (!key) {
22
+ cachedStatus = { licensed: false, tier: "free" };
23
+ return cachedStatus;
24
+ }
25
+ // For now, any non-empty key grants "pro" tier.
26
+ // Future: validate JWT signature, extract tier from claims.
27
+ cachedStatus = { licensed: true, tier: "pro", key };
28
+ log.info({ tier: "pro" }, "license key validated");
29
+ return cachedStatus;
30
+ }
31
+ /**
32
+ * Check if a specific feature is available under the current license.
33
+ * Returns true for free features regardless of license status.
34
+ */
35
+ export function isFeatureLicensed(feature) {
36
+ if (!COMMERCIAL_FEATURES.has(feature))
37
+ return true;
38
+ return checkLicense().licensed;
39
+ }
40
+ /** Reset cached status (for testing). */
41
+ export function _resetLicenseCache() {
42
+ cachedStatus = null;
43
+ }
44
+ //# sourceMappingURL=license.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AAQnD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,iBAAiB;IACjB,oBAAoB;IACpB,aAAa;IACb,oBAAoB;IACpB,YAAY;IACZ,cAAc;IACd,oBAAoB;CACrB,CAAC,CAAC;AAEH,IAAI,YAAY,GAAyB,IAAI,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,YAAY,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACjD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,gDAAgD;IAChD,4DAA4D;IAC5D,YAAY,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACpD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;IACnD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,YAAY,EAAE,CAAC,QAAQ,CAAC;AACjC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,kBAAkB;IAChC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import pino from "pino";
2
+ import { Writable } from "node:stream";
3
+ export declare const rootLogger: pino.Logger;
4
+ /**
5
+ * Add an additional Writable destination to the root logger's output.
6
+ * Each log line (serialised JSON) will be forwarded to the stream.
7
+ *
8
+ * No-op when LOG_PRETTY=1 is set (transport mode).
9
+ *
10
+ * Use this to attach the SlackAlertStream at startup:
11
+ * addLogStream(createSlackAlertStream(manager));
12
+ */
13
+ export declare function addLogStream(stream: Writable): void;
14
+ /**
15
+ * Create a child logger with additional bound fields.
16
+ * Use this to attach correlation IDs (runId, stage, etc.) to every log line.
17
+ *
18
+ * Example:
19
+ * const log = createLogger({ component: "PipelineRunner", runId });
20
+ * log.info("pipeline started");
21
+ * // → { "runId": "...", "component": "PipelineRunner", "msg": "pipeline started", ... }
22
+ */
23
+ export declare function createLogger(context: Record<string, unknown>): pino.Logger;
24
+ /**
25
+ * Log context propagated via AsyncLocalStorage so shared modules (git.ts,
26
+ * coordination.ts) can include issueId/runId without changing their signatures.
27
+ */
28
+ export interface LogContext {
29
+ runId?: string;
30
+ issueId?: string;
31
+ }
32
+ /**
33
+ * Run fn within a log context. All log lines emitted by shared modules
34
+ * (git.ts, coordination.ts) inside fn will automatically include the
35
+ * provided issueId and runId fields.
36
+ */
37
+ export declare function runWithLogContext<T>(context: LogContext, fn: () => T): T;
38
+ /**
39
+ * Return the current log context from AsyncLocalStorage, or undefined when
40
+ * called outside a runWithLogContext scope.
41
+ */
42
+ export declare function getLogContext(): LogContext | undefined;
43
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4CvC,eAAO,MAAM,UAAU,EAAE,IAAI,CAAC,MASQ,CAAC;AAEvC;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAGnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAE1E;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAExE;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAEtD"}
package/dist/logger.js ADDED
@@ -0,0 +1,91 @@
1
+ import pino from "pino";
2
+ import { AsyncLocalStorage } from "node:async_hooks";
3
+ import { Writable } from "node:stream";
4
+ /**
5
+ * Root structured logger for the Linear Agent Framework.
6
+ *
7
+ * Configuration:
8
+ * LOG_LEVEL — pino log level (trace | debug | info | warn | error | fatal).
9
+ * Defaults to "info".
10
+ * LOG_PRETTY — set to "1" for human-readable output during local development.
11
+ */
12
+ /**
13
+ * A writable stream that fans out to stdout plus any additional streams
14
+ * registered via addLogStream(). This allows Slack alert hooks to be
15
+ * wired in at runtime without recreating the root logger.
16
+ *
17
+ * Note: only used in production mode (LOG_PRETTY !== "1"). When pretty
18
+ * printing is enabled, pino uses a worker-thread transport that bypasses
19
+ * this stream.
20
+ */
21
+ class DynamicMultiStream extends Writable {
22
+ extras = [];
23
+ addStream(stream) {
24
+ this.extras.push(stream);
25
+ }
26
+ _write(chunk, _enc, callback) {
27
+ process.stdout.write(chunk);
28
+ for (const s of this.extras) {
29
+ s.write(chunk);
30
+ }
31
+ callback();
32
+ }
33
+ }
34
+ const _multiStream = new DynamicMultiStream();
35
+ const _pinoOptions = {
36
+ name: "urateam",
37
+ level: process.env.LOG_LEVEL ?? "info",
38
+ timestamp: pino.stdTimeFunctions.isoTime,
39
+ };
40
+ export const rootLogger = process.env.LOG_PRETTY === "1"
41
+ ? pino({
42
+ ..._pinoOptions,
43
+ transport: {
44
+ target: "pino-pretty",
45
+ options: { colorize: true, translateTime: "SYS:standard" },
46
+ },
47
+ })
48
+ : pino(_pinoOptions, _multiStream);
49
+ /**
50
+ * Add an additional Writable destination to the root logger's output.
51
+ * Each log line (serialised JSON) will be forwarded to the stream.
52
+ *
53
+ * No-op when LOG_PRETTY=1 is set (transport mode).
54
+ *
55
+ * Use this to attach the SlackAlertStream at startup:
56
+ * addLogStream(createSlackAlertStream(manager));
57
+ */
58
+ export function addLogStream(stream) {
59
+ if (process.env.LOG_PRETTY === "1")
60
+ return;
61
+ _multiStream.addStream(stream);
62
+ }
63
+ /**
64
+ * Create a child logger with additional bound fields.
65
+ * Use this to attach correlation IDs (runId, stage, etc.) to every log line.
66
+ *
67
+ * Example:
68
+ * const log = createLogger({ component: "PipelineRunner", runId });
69
+ * log.info("pipeline started");
70
+ * // → { "runId": "...", "component": "PipelineRunner", "msg": "pipeline started", ... }
71
+ */
72
+ export function createLogger(context) {
73
+ return rootLogger.child(context);
74
+ }
75
+ const logContextStorage = new AsyncLocalStorage();
76
+ /**
77
+ * Run fn within a log context. All log lines emitted by shared modules
78
+ * (git.ts, coordination.ts) inside fn will automatically include the
79
+ * provided issueId and runId fields.
80
+ */
81
+ export function runWithLogContext(context, fn) {
82
+ return logContextStorage.run(context, fn);
83
+ }
84
+ /**
85
+ * Return the current log context from AsyncLocalStorage, or undefined when
86
+ * called outside a runWithLogContext scope.
87
+ */
88
+ export function getLogContext() {
89
+ return logContextStorage.getStore();
90
+ }
91
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;;GAOG;AAEH;;;;;;;;GAQG;AACH,MAAM,kBAAmB,SAAQ,QAAQ;IAC/B,MAAM,GAAe,EAAE,CAAC;IAEhC,SAAS,CAAC,MAAgB;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,IAAoB,EAAE,QAAoB;QAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QACD,QAAQ,EAAE,CAAC;IACb,CAAC;CACF;AAED,MAAM,YAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE9C,MAAM,YAAY,GAAuB;IACvC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;CACzC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GACrB,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG;IAC5B,CAAC,CAAC,IAAI,CAAC;QACH,GAAG,YAAY;QACf,SAAS,EAAE;YACT,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE;SAC3D;KACF,CAAC;IACJ,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAEvC;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,MAAgB;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG;QAAE,OAAO;IAC3C,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgC;IAC3D,OAAO,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAWD,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAc,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAI,OAAmB,EAAE,EAAW;IACnE,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Notifier, PipelineRun, StageResult, PipelineResult, PipelineError, DailyTokenSummary } from "../types.js";
2
+ export declare class CompositeNotifier implements Notifier {
3
+ private notifiers;
4
+ constructor(notifiers: Notifier[]);
5
+ onPipelineStart(run: PipelineRun): Promise<void>;
6
+ onStageComplete(run: PipelineRun, stage: string, result: StageResult): Promise<void>;
7
+ onPipelineComplete(run: PipelineRun, result: PipelineResult): Promise<void>;
8
+ onPipelineFailed(run: PipelineRun, error: PipelineError): Promise<void>;
9
+ onHumanReviewNeeded(run: PipelineRun, prUrl: string, reason: string): Promise<void>;
10
+ onTokenBudgetAlert(run: PipelineRun, usedTokens: number, maxTokens: number): Promise<void>;
11
+ onDailyTokenSummary(summary: DailyTokenSummary): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=composite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite.d.ts","sourceRoot":"","sources":["../../src/notifier/composite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExH,qBAAa,iBAAkB,YAAW,QAAQ;IACpC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,QAAQ,EAAE;IAEnC,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3E,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1F,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAKrE"}
@@ -0,0 +1,28 @@
1
+ export class CompositeNotifier {
2
+ notifiers;
3
+ constructor(notifiers) {
4
+ this.notifiers = notifiers;
5
+ }
6
+ async onPipelineStart(run) {
7
+ await Promise.allSettled(this.notifiers.map(n => n.onPipelineStart(run)));
8
+ }
9
+ async onStageComplete(run, stage, result) {
10
+ await Promise.allSettled(this.notifiers.map(n => n.onStageComplete(run, stage, result)));
11
+ }
12
+ async onPipelineComplete(run, result) {
13
+ await Promise.allSettled(this.notifiers.map(n => n.onPipelineComplete(run, result)));
14
+ }
15
+ async onPipelineFailed(run, error) {
16
+ await Promise.allSettled(this.notifiers.map(n => n.onPipelineFailed(run, error)));
17
+ }
18
+ async onHumanReviewNeeded(run, prUrl, reason) {
19
+ await Promise.allSettled(this.notifiers.map(n => n.onHumanReviewNeeded?.(run, prUrl, reason)));
20
+ }
21
+ async onTokenBudgetAlert(run, usedTokens, maxTokens) {
22
+ await Promise.allSettled(this.notifiers.filter(n => n.onTokenBudgetAlert).map(n => n.onTokenBudgetAlert(run, usedTokens, maxTokens)));
23
+ }
24
+ async onDailyTokenSummary(summary) {
25
+ await Promise.allSettled(this.notifiers.filter(n => n.onDailyTokenSummary).map(n => n.onDailyTokenSummary(summary)));
26
+ }
27
+ }
28
+ //# sourceMappingURL=composite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite.js","sourceRoot":"","sources":["../../src/notifier/composite.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IACR;IAApB,YAAoB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;IAAG,CAAC;IAE7C,KAAK,CAAC,eAAe,CAAC,GAAgB;QACpC,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAgB,EAAE,KAAa,EAAE,MAAmB;QACxE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,GAAgB,EAAE,MAAsB;QAC/D,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAgB,EAAE,KAAoB;QAC3D,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,GAAgB,EAAE,KAAa,EAAE,MAAc;QACvE,MAAM,OAAO,CAAC,UAAU,CACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CACrE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,GAAgB,EAAE,UAAkB,EAAE,SAAiB;QAC9E,MAAM,OAAO,CAAC,UAAU,CACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAC7G,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAA0B;QAClD,MAAM,OAAO,CAAC,UAAU,CACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAoB,CAAC,OAAO,CAAC,CAAC,CAC5F,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { Notifier, PipelineRun, StageResult, PipelineResult, PipelineError, DailyTokenSummary } from "../types.js";
2
+ export declare class DiscordNotifier implements Notifier {
3
+ private webhookUrl?;
4
+ constructor(webhookUrl?: string | undefined);
5
+ onPipelineStart(run: PipelineRun): Promise<void>;
6
+ onStageComplete(run: PipelineRun, stage: string, result: StageResult): Promise<void>;
7
+ onPipelineComplete(run: PipelineRun, result: PipelineResult): Promise<void>;
8
+ onHumanReviewNeeded(run: PipelineRun, prUrl: string, reason: string): Promise<void>;
9
+ onPipelineFailed(run: PipelineRun, error: PipelineError): Promise<void>;
10
+ onTokenBudgetAlert(run: PipelineRun, usedTokens: number, maxTokens: number): Promise<void>;
11
+ onDailyTokenSummary(summary: DailyTokenSummary): Promise<void>;
12
+ private send;
13
+ }
14
+ //# sourceMappingURL=discord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/notifier/discord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AASxH,qBAAa,eAAgB,YAAW,QAAQ;IAClC,OAAO,CAAC,UAAU,CAAC;gBAAX,UAAU,CAAC,EAAE,MAAM,YAAA;IAEjC,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhD,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAapF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3E,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnF,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAevE,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1F,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YAetD,IAAI;CAYnB"}
@@ -0,0 +1,105 @@
1
+ import { createLogger } from "../logger.js";
2
+ const log = createLogger({ component: "DiscordNotifier" });
3
+ const COLOR_YELLOW = 0xffaa00;
4
+ const COLOR_GREEN = 0x00ff00;
5
+ const COLOR_RED = 0xff0000;
6
+ export class DiscordNotifier {
7
+ webhookUrl;
8
+ constructor(webhookUrl) {
9
+ this.webhookUrl = webhookUrl;
10
+ }
11
+ async onPipelineStart(run) {
12
+ await this.send({
13
+ embeds: [{
14
+ title: "Pipeline Started",
15
+ description: `**${run.issueTitle}**\nPipeline: \`${run.pipelineKey}\`\nBranch: \`${run.branch}\``,
16
+ color: COLOR_YELLOW,
17
+ }],
18
+ });
19
+ }
20
+ async onStageComplete(run, stage, result) {
21
+ const color = result.status === "completed" ? COLOR_GREEN : COLOR_RED;
22
+ const status = result.status === "completed" ? "Completed" : "Failed";
23
+ await this.send({
24
+ embeds: [{
25
+ title: `Stage ${status}: ${stage}`,
26
+ description: `**${run.issueTitle}**\nTokens: ${result.inputTokens.toLocaleString()} in / ${result.outputTokens.toLocaleString()} out`,
27
+ color,
28
+ }],
29
+ });
30
+ }
31
+ async onPipelineComplete(run, result) {
32
+ let description = `Stages: ${result.stagesCompleted}\nTokens: ${result.totalInputTokens.toLocaleString()} in / ${result.totalOutputTokens.toLocaleString()} out`;
33
+ if (result.prUrl) {
34
+ description += `\n[View PR](${result.prUrl})`;
35
+ }
36
+ await this.send({
37
+ embeds: [{
38
+ title: "Pipeline Complete",
39
+ description,
40
+ color: COLOR_GREEN,
41
+ }],
42
+ });
43
+ }
44
+ async onHumanReviewNeeded(run, prUrl, reason) {
45
+ await this.send({
46
+ embeds: [{
47
+ title: "Human Review Needed",
48
+ description: `**${run.issueTitle}**\n[View PR](${prUrl})\n\n**Reason:** ${reason}\n\nPipeline: \`${run.pipelineKey}\` | Run: \`${run.id.slice(0, 8)}\``,
49
+ color: COLOR_YELLOW,
50
+ }],
51
+ });
52
+ }
53
+ async onPipelineFailed(run, error) {
54
+ let description = `**Stage**: ${error.stage}\n**Error**: ${error.message}`;
55
+ if (error.retriesExhausted) {
56
+ description += `\nRetries exhausted`;
57
+ }
58
+ await this.send({
59
+ embeds: [{
60
+ title: "Pipeline Failed",
61
+ description,
62
+ color: COLOR_RED,
63
+ }],
64
+ });
65
+ }
66
+ async onTokenBudgetAlert(run, usedTokens, maxTokens) {
67
+ const pct = Math.round((usedTokens / maxTokens) * 100);
68
+ await this.send({
69
+ embeds: [{
70
+ title: "Token Budget Alert",
71
+ description: `**${run.issueTitle}**\nUsage: ${usedTokens.toLocaleString()} / ${maxTokens.toLocaleString()} tokens (${pct}%)\n\nPipeline: \`${run.pipelineKey}\` | Run: \`${run.id.slice(0, 8)}\``,
72
+ color: COLOR_YELLOW,
73
+ }],
74
+ });
75
+ }
76
+ async onDailyTokenSummary(summary) {
77
+ const totalTokens = summary.totalInputTokens + summary.totalOutputTokens;
78
+ await this.send({
79
+ embeds: [{
80
+ title: `Daily Token Summary — ${summary.date}`,
81
+ description: [
82
+ `**Total tokens**: ${totalTokens.toLocaleString()} (${summary.totalInputTokens.toLocaleString()} in / ${summary.totalOutputTokens.toLocaleString()} out)`,
83
+ `**Runs completed**: ${summary.runsCompleted}`,
84
+ `**Runs failed**: ${summary.runsFailed}`,
85
+ ].join("\n"),
86
+ color: COLOR_GREEN,
87
+ }],
88
+ });
89
+ }
90
+ async send(payload) {
91
+ if (!this.webhookUrl)
92
+ return;
93
+ try {
94
+ await fetch(this.webhookUrl, {
95
+ method: "POST",
96
+ headers: { "Content-Type": "application/json" },
97
+ body: JSON.stringify(payload),
98
+ });
99
+ }
100
+ catch (e) {
101
+ log.error({ err: e }, "Discord notification failed");
102
+ }
103
+ }
104
+ }
105
+ //# sourceMappingURL=discord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../src/notifier/discord.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { CompositeNotifier } from "./composite.js";
2
+ export { LinearNotifier, type LinearNotifierConfig } from "./linear.js";
3
+ export { SlackNotifier } from "./slack.js";
4
+ export { DiscordNotifier } from "./discord.js";
5
+ export { SlackAlertManager, SlackAlertStream, createSlackAlertStream, initSlackAlertManager, getSlackAlertManager, type AlertEntry, } from "./slack-alerts.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifier/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { CompositeNotifier } from "./composite.js";
2
+ export { LinearNotifier } from "./linear.js";
3
+ export { SlackNotifier } from "./slack.js";
4
+ export { DiscordNotifier } from "./discord.js";
5
+ export { SlackAlertManager, SlackAlertStream, createSlackAlertStream, initSlackAlertManager, getSlackAlertManager, } from "./slack-alerts.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifier/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { Notifier, PipelineRun, StageResult, PipelineResult, PipelineError } from "../types.js";
2
+ export declare const LINEAR_STATES: {
3
+ readonly IN_PROGRESS: "In Progress";
4
+ readonly IN_REVIEW: "In Review";
5
+ readonly DONE: "Done";
6
+ readonly BLOCKED: "Blocked";
7
+ };
8
+ export interface LinearNotifierConfig {
9
+ apiKey: string;
10
+ }
11
+ export declare class LinearNotifier implements Notifier {
12
+ private apiKey;
13
+ private stateCache;
14
+ private issueIdCache;
15
+ private clientPromise;
16
+ constructor(config: LinearNotifierConfig);
17
+ private getClient;
18
+ onPipelineStart(run: PipelineRun): Promise<void>;
19
+ onStageComplete(run: PipelineRun, stage: string, result: StageResult): Promise<void>;
20
+ onPipelineComplete(run: PipelineRun, result: PipelineResult): Promise<void>;
21
+ onHumanReviewNeeded(run: PipelineRun, prUrl: string, reason: string): Promise<void>;
22
+ onTokenBudgetAlert(run: PipelineRun, usedTokens: number, maxTokens: number): Promise<void>;
23
+ onPipelineFailed(run: PipelineRun, error: PipelineError): Promise<void>;
24
+ private resolveIssueId;
25
+ private postComment;
26
+ private transitionState;
27
+ }
28
+ //# sourceMappingURL=linear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/notifier/linear.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAKrG,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,YAAY,CAAsD;IAC1E,OAAO,CAAC,aAAa,CAA6B;gBAEtC,MAAM,EAAE,oBAAoB;YAI1B,SAAS;IASjB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhD,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenF,kBAAkB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1F,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAY/D,cAAc;YAed,WAAW;YAYX,eAAe;CAuB9B"}
@@ -0,0 +1,138 @@
1
+ import { createLogger } from "../logger.js";
2
+ const log = createLogger({ component: "LinearNotifier" });
3
+ export const LINEAR_STATES = {
4
+ IN_PROGRESS: "In Progress",
5
+ IN_REVIEW: "In Review",
6
+ DONE: "Done",
7
+ BLOCKED: "Blocked",
8
+ };
9
+ export class LinearNotifier {
10
+ apiKey;
11
+ stateCache = new Map();
12
+ issueIdCache = new Map();
13
+ clientPromise = null;
14
+ constructor(config) {
15
+ this.apiKey = config.apiKey;
16
+ }
17
+ async getClient() {
18
+ if (!this.clientPromise) {
19
+ this.clientPromise = import("@linear/sdk").then(({ LinearClient }) => new LinearClient({ apiKey: this.apiKey }));
20
+ }
21
+ return this.clientPromise;
22
+ }
23
+ async onPipelineStart(run) {
24
+ await Promise.all([
25
+ this.postComment(run.issueId, `šŸ¤– **Agent Run #${run.id.slice(0, 8)}** — Pipeline: ${run.pipelineKey}\n\n` +
26
+ `Branch: \`${run.branch}\`\n` +
27
+ `Repo: ${run.repoUrl}\n\n` +
28
+ `Starting pipeline...`),
29
+ this.transitionState(run.issueId, LINEAR_STATES.IN_PROGRESS),
30
+ ]);
31
+ }
32
+ async onStageComplete(run, stage, result) {
33
+ const status = result.status === "completed" ? "āœ…" : "āŒ";
34
+ let comment = `šŸ¤– **Agent Run #${run.id.slice(0, 8)}** — Stage: ${stage} ${status}\n\n`;
35
+ if (result.handoffArtifact) {
36
+ const ha = result.handoffArtifact;
37
+ comment += `**Files changed**: ${ha.filesChanged.join(", ") || "none"}\n`;
38
+ if (ha.context.testResults) {
39
+ const tr = ha.context.testResults;
40
+ comment += `**Tests**: ${tr.passed} passed, ${tr.failed} failed\n`;
41
+ }
42
+ }
43
+ comment += `**Tokens used**: ${result.inputTokens.toLocaleString()} input / ${result.outputTokens.toLocaleString()} output\n`;
44
+ await this.postComment(run.issueId, comment);
45
+ }
46
+ async onPipelineComplete(run, result) {
47
+ let comment = `šŸ¤– **Agent Run #${run.id.slice(0, 8)}** — Pipeline Complete āœ…\n\n`;
48
+ if (result.prUrl) {
49
+ comment += `**PR**: ${result.prUrl}\n`;
50
+ }
51
+ comment += `**Stages completed**: ${result.stagesCompleted}\n`;
52
+ comment += `**Total tokens**: ${result.totalInputTokens.toLocaleString()} input / ${result.totalOutputTokens.toLocaleString()} output\n`;
53
+ if (result.autoMerged) {
54
+ comment += `\nāœ… **Auto-merged** — changes were trivial and passed all checks.`;
55
+ }
56
+ const tasks = [this.postComment(run.issueId, comment)];
57
+ if (result.autoMerged) {
58
+ tasks.push(this.transitionState(run.issueId, LINEAR_STATES.DONE));
59
+ }
60
+ await Promise.all(tasks);
61
+ }
62
+ async onHumanReviewNeeded(run, prUrl, reason) {
63
+ await Promise.all([
64
+ this.postComment(run.issueId, `šŸ¤– **Agent Run #${run.id.slice(0, 8)}** — Human Review Needed šŸ‘€\n\n` +
65
+ `**PR**: ${prUrl}\n` +
66
+ `**Reason**: ${reason}\n\n` +
67
+ `Please review and merge manually.`),
68
+ this.transitionState(run.issueId, LINEAR_STATES.IN_REVIEW),
69
+ ]);
70
+ }
71
+ // onDailyTokenSummary intentionally omitted — daily summaries are cross-run
72
+ // aggregates that don't map to per-issue comments. Use Slack/Discord instead.
73
+ async onTokenBudgetAlert(run, usedTokens, maxTokens) {
74
+ const pct = Math.round((usedTokens / maxTokens) * 100);
75
+ await this.postComment(run.issueId, `šŸ¤– **Agent Run #${run.id.slice(0, 8)}** — āš ļø Token Budget Warning\n\n` +
76
+ `Usage: ${usedTokens.toLocaleString()} / ${maxTokens.toLocaleString()} tokens (${pct}%)\n` +
77
+ `The run will be aborted if the budget is exceeded.`);
78
+ }
79
+ async onPipelineFailed(run, error) {
80
+ await Promise.all([
81
+ this.postComment(run.issueId, `šŸ¤– **Agent Run #${run.id.slice(0, 8)}** — Pipeline Failed āŒ\n\n` +
82
+ `**Failed at stage**: ${error.stage}\n` +
83
+ `**Error**: ${error.message}\n` +
84
+ `**Retries exhausted**: ${error.retriesExhausted ? "Yes" : "No"}\n`),
85
+ this.transitionState(run.issueId, LINEAR_STATES.BLOCKED),
86
+ ]);
87
+ }
88
+ async resolveIssueId(issueIdentifier) {
89
+ const cached = this.issueIdCache.get(issueIdentifier);
90
+ if (cached)
91
+ return cached;
92
+ const client = await this.getClient();
93
+ const results = await client.searchIssues(issueIdentifier);
94
+ const issue = results.nodes[0];
95
+ if (!issue)
96
+ return null;
97
+ const teamId = (await issue.team)?.id;
98
+ const resolved = { id: issue.id, teamId };
99
+ this.issueIdCache.set(issueIdentifier, resolved);
100
+ return resolved;
101
+ }
102
+ async postComment(issueIdentifier, body) {
103
+ try {
104
+ const client = await this.getClient();
105
+ const resolved = await this.resolveIssueId(issueIdentifier);
106
+ if (resolved) {
107
+ await client.createComment({ issueId: resolved.id, body });
108
+ }
109
+ }
110
+ catch (e) {
111
+ log.error({ issueIdentifier, err: e }, "failed to post Linear comment");
112
+ }
113
+ }
114
+ async transitionState(issueIdentifier, stateName) {
115
+ try {
116
+ const client = await this.getClient();
117
+ const resolved = await this.resolveIssueId(issueIdentifier);
118
+ if (!resolved?.teamId)
119
+ return;
120
+ const { teamId } = resolved;
121
+ if (!this.stateCache.has(`${teamId}:${stateName}`)) {
122
+ const team = await client.team(teamId);
123
+ const states = await team.states();
124
+ for (const state of states.nodes) {
125
+ this.stateCache.set(`${teamId}:${state.name}`, state.id);
126
+ }
127
+ }
128
+ const stateId = this.stateCache.get(`${teamId}:${stateName}`);
129
+ if (stateId) {
130
+ await client.updateIssue(resolved.id, { stateId });
131
+ }
132
+ }
133
+ catch (e) {
134
+ log.error({ issueIdentifier, stateName, err: e }, "failed to transition Linear issue state");
135
+ }
136
+ }
137
+ }
138
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/notifier/linear.ts"],"names":[],"mappings":"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"}