@urateam/core 0.1.31 → 0.1.33

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 (177) hide show
  1. package/dist/__tests__/agent-stream.test.js +35 -1
  2. package/dist/__tests__/agent-stream.test.js.map +1 -1
  3. package/dist/__tests__/audit-immutability.test.js +7 -1
  4. package/dist/__tests__/audit-immutability.test.js.map +1 -1
  5. package/dist/__tests__/auth-monitor.test.d.ts +2 -0
  6. package/dist/__tests__/auth-monitor.test.d.ts.map +1 -0
  7. package/dist/__tests__/auth-monitor.test.js +253 -0
  8. package/dist/__tests__/auth-monitor.test.js.map +1 -0
  9. package/dist/__tests__/bec-186-repro.test.d.ts +16 -0
  10. package/dist/__tests__/bec-186-repro.test.d.ts.map +1 -0
  11. package/dist/__tests__/bec-186-repro.test.js +223 -0
  12. package/dist/__tests__/bec-186-repro.test.js.map +1 -0
  13. package/dist/__tests__/control-signals.test.d.ts +2 -0
  14. package/dist/__tests__/control-signals.test.d.ts.map +1 -0
  15. package/dist/__tests__/control-signals.test.js +77 -0
  16. package/dist/__tests__/control-signals.test.js.map +1 -0
  17. package/dist/__tests__/db-migrations.test.d.ts +2 -0
  18. package/dist/__tests__/db-migrations.test.d.ts.map +1 -0
  19. package/dist/__tests__/db-migrations.test.js +237 -0
  20. package/dist/__tests__/db-migrations.test.js.map +1 -0
  21. package/dist/__tests__/executor-issue-id.test.js +2 -0
  22. package/dist/__tests__/executor-issue-id.test.js.map +1 -1
  23. package/dist/__tests__/pm-slack-interface.test.js +45 -0
  24. package/dist/__tests__/pm-slack-interface.test.js.map +1 -1
  25. package/dist/__tests__/pm-triage.test.js +101 -0
  26. package/dist/__tests__/pm-triage.test.js.map +1 -1
  27. package/dist/__tests__/post-fanout-comments.test.js +36 -0
  28. package/dist/__tests__/post-fanout-comments.test.js.map +1 -1
  29. package/dist/__tests__/preflight-claude-auth.test.d.ts +2 -0
  30. package/dist/__tests__/preflight-claude-auth.test.d.ts.map +1 -0
  31. package/dist/__tests__/preflight-claude-auth.test.js +36 -0
  32. package/dist/__tests__/preflight-claude-auth.test.js.map +1 -0
  33. package/dist/__tests__/resolve-claude-auth.test.d.ts +2 -0
  34. package/dist/__tests__/resolve-claude-auth.test.d.ts.map +1 -0
  35. package/dist/__tests__/resolve-claude-auth.test.js +129 -0
  36. package/dist/__tests__/resolve-claude-auth.test.js.map +1 -0
  37. package/dist/__tests__/stage-models.test.js +4 -0
  38. package/dist/__tests__/stage-models.test.js.map +1 -1
  39. package/dist/__tests__/util-linear.test.d.ts +10 -0
  40. package/dist/__tests__/util-linear.test.d.ts.map +1 -0
  41. package/dist/__tests__/util-linear.test.js +244 -0
  42. package/dist/__tests__/util-linear.test.js.map +1 -0
  43. package/dist/audit/events.d.ts +37 -0
  44. package/dist/audit/events.d.ts.map +1 -1
  45. package/dist/audit/events.js +53 -0
  46. package/dist/audit/events.js.map +1 -1
  47. package/dist/db/client.d.ts.map +1 -1
  48. package/dist/db/client.js +8 -0
  49. package/dist/db/client.js.map +1 -1
  50. package/dist/db/migrations/postgres/014_missing_indexes.sql +28 -0
  51. package/dist/db/migrations/sqlite/013_missing_indexes.sql +28 -0
  52. package/dist/executor/agent-stream.d.ts +16 -0
  53. package/dist/executor/agent-stream.d.ts.map +1 -1
  54. package/dist/executor/agent-stream.js +43 -1
  55. package/dist/executor/agent-stream.js.map +1 -1
  56. package/dist/executor/auth-check.d.ts +39 -0
  57. package/dist/executor/auth-check.d.ts.map +1 -1
  58. package/dist/executor/auth-check.js +31 -0
  59. package/dist/executor/auth-check.js.map +1 -1
  60. package/dist/executor/auth-monitor.d.ts +40 -0
  61. package/dist/executor/auth-monitor.d.ts.map +1 -0
  62. package/dist/executor/auth-monitor.js +114 -0
  63. package/dist/executor/auth-monitor.js.map +1 -0
  64. package/dist/executor/executor.d.ts.map +1 -1
  65. package/dist/executor/executor.js +7 -2
  66. package/dist/executor/executor.js.map +1 -1
  67. package/dist/executor/index.d.ts +2 -0
  68. package/dist/executor/index.d.ts.map +1 -1
  69. package/dist/executor/index.js +2 -0
  70. package/dist/executor/index.js.map +1 -1
  71. package/dist/executor/review/post-fanout-comments.d.ts +8 -0
  72. package/dist/executor/review/post-fanout-comments.d.ts.map +1 -1
  73. package/dist/executor/review/post-fanout-comments.js +23 -3
  74. package/dist/executor/review/post-fanout-comments.js.map +1 -1
  75. package/dist/index.d.ts +3 -1
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +3 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/notifier/composite.d.ts +1 -0
  80. package/dist/notifier/composite.d.ts.map +1 -1
  81. package/dist/notifier/composite.js +3 -0
  82. package/dist/notifier/composite.js.map +1 -1
  83. package/dist/notifier/linear.d.ts +1 -0
  84. package/dist/notifier/linear.d.ts.map +1 -1
  85. package/dist/notifier/linear.js +7 -0
  86. package/dist/notifier/linear.js.map +1 -1
  87. package/dist/pipeline/control-signals.d.ts +49 -0
  88. package/dist/pipeline/control-signals.d.ts.map +1 -0
  89. package/dist/pipeline/control-signals.js +93 -0
  90. package/dist/pipeline/control-signals.js.map +1 -0
  91. package/dist/pipeline/feedback-pipeline.d.ts +140 -0
  92. package/dist/pipeline/feedback-pipeline.d.ts.map +1 -0
  93. package/dist/pipeline/feedback-pipeline.js +427 -0
  94. package/dist/pipeline/feedback-pipeline.js.map +1 -0
  95. package/dist/pipeline/index.d.ts +1 -0
  96. package/dist/pipeline/index.d.ts.map +1 -1
  97. package/dist/pipeline/index.js +1 -0
  98. package/dist/pipeline/index.js.map +1 -1
  99. package/dist/pipeline/runner.d.ts +49 -33
  100. package/dist/pipeline/runner.d.ts.map +1 -1
  101. package/dist/pipeline/runner.js +143 -350
  102. package/dist/pipeline/runner.js.map +1 -1
  103. package/dist/pm/actions/promote.d.ts.map +1 -1
  104. package/dist/pm/actions/promote.js +15 -11
  105. package/dist/pm/actions/promote.js.map +1 -1
  106. package/dist/pm/actions/recover-stuck.d.ts.map +1 -1
  107. package/dist/pm/actions/recover-stuck.js +9 -5
  108. package/dist/pm/actions/recover-stuck.js.map +1 -1
  109. package/dist/pm/actions/triage.d.ts.map +1 -1
  110. package/dist/pm/actions/triage.js +67 -1
  111. package/dist/pm/actions/triage.js.map +1 -1
  112. package/dist/pm/linear-helpers.d.ts +10 -0
  113. package/dist/pm/linear-helpers.d.ts.map +1 -1
  114. package/dist/pm/linear-helpers.js +13 -21
  115. package/dist/pm/linear-helpers.js.map +1 -1
  116. package/dist/pm/pause-state.d.ts +29 -0
  117. package/dist/pm/pause-state.d.ts.map +1 -0
  118. package/dist/pm/pause-state.js +34 -0
  119. package/dist/pm/pause-state.js.map +1 -0
  120. package/dist/pm/scheduler.d.ts.map +1 -1
  121. package/dist/pm/scheduler.js +19 -0
  122. package/dist/pm/scheduler.js.map +1 -1
  123. package/dist/pm/slack-bulk.d.ts +34 -0
  124. package/dist/pm/slack-bulk.d.ts.map +1 -0
  125. package/dist/pm/slack-bulk.js +110 -0
  126. package/dist/pm/slack-bulk.js.map +1 -0
  127. package/dist/pm/slack-commands.d.ts +101 -0
  128. package/dist/pm/slack-commands.d.ts.map +1 -0
  129. package/dist/pm/slack-commands.js +309 -0
  130. package/dist/pm/slack-commands.js.map +1 -0
  131. package/dist/pm/slack-helpers.d.ts +10 -0
  132. package/dist/pm/slack-helpers.d.ts.map +1 -1
  133. package/dist/pm/slack-helpers.js +32 -0
  134. package/dist/pm/slack-helpers.js.map +1 -1
  135. package/dist/pm/slack-interface.d.ts +32 -58
  136. package/dist/pm/slack-interface.d.ts.map +1 -1
  137. package/dist/pm/slack-interface.js +150 -320
  138. package/dist/pm/slack-interface.js.map +1 -1
  139. package/dist/rbac/matrix.d.ts +2 -0
  140. package/dist/rbac/matrix.d.ts.map +1 -1
  141. package/dist/rbac/matrix.js +2 -0
  142. package/dist/rbac/matrix.js.map +1 -1
  143. package/dist/release-manager/index.d.ts +2 -0
  144. package/dist/release-manager/index.d.ts.map +1 -1
  145. package/dist/release-manager/index.js +2 -0
  146. package/dist/release-manager/index.js.map +1 -1
  147. package/dist/release-manager/release-helpers.d.ts +112 -0
  148. package/dist/release-manager/release-helpers.d.ts.map +1 -0
  149. package/dist/release-manager/release-helpers.js +164 -0
  150. package/dist/release-manager/release-helpers.js.map +1 -0
  151. package/dist/release-manager/release-tick.d.ts +101 -0
  152. package/dist/release-manager/release-tick.d.ts.map +1 -0
  153. package/dist/release-manager/release-tick.js +374 -0
  154. package/dist/release-manager/release-tick.js.map +1 -0
  155. package/dist/release-manager/scheduler.d.ts +28 -3
  156. package/dist/release-manager/scheduler.d.ts.map +1 -1
  157. package/dist/release-manager/scheduler.js +41 -417
  158. package/dist/release-manager/scheduler.js.map +1 -1
  159. package/dist/server.d.ts.map +1 -1
  160. package/dist/server.js +10 -0
  161. package/dist/server.js.map +1 -1
  162. package/dist/sync/gh-linear-sync.d.ts.map +1 -1
  163. package/dist/sync/gh-linear-sync.js +2 -2
  164. package/dist/sync/gh-linear-sync.js.map +1 -1
  165. package/dist/types.d.ts +22 -4
  166. package/dist/types.d.ts.map +1 -1
  167. package/dist/types.js +10 -0
  168. package/dist/types.js.map +1 -1
  169. package/dist/util/linear.d.ts +70 -0
  170. package/dist/util/linear.d.ts.map +1 -0
  171. package/dist/util/linear.js +108 -0
  172. package/dist/util/linear.js.map +1 -0
  173. package/dist/webhook/github-handler.d.ts +7 -1
  174. package/dist/webhook/github-handler.d.ts.map +1 -1
  175. package/dist/webhook/github-handler.js +82 -38
  176. package/dist/webhook/github-handler.js.map +1 -1
  177. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ export { createDb, isPostgres, sqlDateGroup, sqlDaysAgoFilter } from "./db/index
12
12
  export { pipelineRuns, stageRuns, agentLogs, activeWork, pmApprovals } from "./db/index.js";
13
13
  export { createApp } from "./server.js";
14
14
  export { PipelineRunner } from "./pipeline/index.js";
15
+ export { requestRunStop, getStopSignal, clearStopSignal } from "./pipeline/index.js";
15
16
  export { formatPRCostSummary, } from "./pipeline/cost-summary.js";
16
17
  export { defaultConfigs, validatePipelineConfigs, validateRepoConfigs, applyDeepReviewPassesOverride, applyAutoMergeOverride, resolvePipeline } from "./pipeline/index.js";
17
18
  export { createWebhookHandler } from "./webhook/index.js";
@@ -28,7 +29,8 @@ export { checkRequirements, buildRalphContext } from "./executor/ralph.js";
28
29
  export { cleanupWorktrees } from "./repo/git.js";
29
30
  export { sweepStaleAgentBranches, } from "./repo/agent-branch-sweep.js";
30
31
  export { runAgentBranchSweep, } from "./repo/agent-branch-sweep-runner.js";
31
- export { isClaudeAuthValid, resetAuthCheckCache } from "./executor/auth-check.js";
32
+ export { isClaudeAuthValid, resetAuthCheckCache, resolveClaudeAuth } from "./executor/auth-check.js";
33
+ export { createAuthMonitor, runAuthMonitorCheck, AUTH_MONITOR_INTERVAL_MS } from "./executor/auth-monitor.js";
32
34
  export { createGitHubClient } from "./repo/github.js";
33
35
  export { buildGitHubConfigFromEnv } from "./repo/github-from-env.js";
34
36
  export { postSlackMessage } from "./pm/slack-helpers.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,cAAc,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAW,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAqB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,cAAc,EAA+C,MAAM,qBAAqB,CAAC;AAClG,OAAO,EACL,mBAAmB,GAGpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3K,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAyB,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAuC,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAE,eAAe,EAAyB,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,gBAAgB,GAEjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAyB,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,uBAAuB,GAIxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,mBAAmB,GAEpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,GAG3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,2BAA2B,GAG5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,IAAI,wBAAwB,EAC5C,aAAa,EACb,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,6 @@ export declare class CompositeNotifier implements Notifier {
9
9
  onHumanReviewNeeded(run: PipelineRun, prUrl: string, reason: string): Promise<void>;
10
10
  onTokenBudgetAlert(run: PipelineRun, usedTokens: number, maxTokens: number): Promise<void>;
11
11
  onDailyTokenSummary(summary: DailyTokenSummary): Promise<void>;
12
+ onPRMerged(run: PipelineRun): Promise<void>;
12
13
  }
13
14
  //# sourceMappingURL=composite.d.ts.map
@@ -1 +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"}
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;IAM9D,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlD"}
@@ -24,5 +24,8 @@ export class CompositeNotifier {
24
24
  async onDailyTokenSummary(summary) {
25
25
  await Promise.allSettled(this.notifiers.filter(n => n.onDailyTokenSummary).map(n => n.onDailyTokenSummary(summary)));
26
26
  }
27
+ async onPRMerged(run) {
28
+ await Promise.allSettled(this.notifiers.filter(n => n.onPRMerged).map(n => n.onPRMerged(run)));
29
+ }
27
30
  }
28
31
  //# sourceMappingURL=composite.js.map
@@ -1 +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"}
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;IAED,KAAK,CAAC,UAAU,CAAC,GAAgB;QAC/B,MAAM,OAAO,CAAC,UAAU,CACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAW,CAAC,GAAG,CAAC,CAAC,CACtE,CAAC;IACJ,CAAC;CACF"}
@@ -20,6 +20,7 @@ export declare class LinearNotifier implements Notifier {
20
20
  onPipelineComplete(run: PipelineRun, result: PipelineResult): Promise<void>;
21
21
  onHumanReviewNeeded(run: PipelineRun, prUrl: string, reason: string): Promise<void>;
22
22
  onTokenBudgetAlert(run: PipelineRun, usedTokens: number, maxTokens: number): Promise<void>;
23
+ onPRMerged(run: PipelineRun): Promise<void>;
23
24
  onPipelineFailed(run: PipelineRun, error: PipelineError): Promise<void>;
24
25
  private resolveIssueId;
25
26
  private postComment;
@@ -1 +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;IA6B3E,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"}
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;IA6B3E,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,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAY/D,cAAc;YAed,WAAW;YAYX,eAAe;CAuB9B"}
@@ -88,6 +88,13 @@ export class LinearNotifier {
88
88
  `Usage: ${usedTokens.toLocaleString()} / ${maxTokens.toLocaleString()} tokens (${pct}%)\n` +
89
89
  `The run will be aborted if the budget is exceeded.`);
90
90
  }
91
+ async onPRMerged(run) {
92
+ await Promise.all([
93
+ this.postComment(run.issueId, `🤖 **Agent Run #${run.id.slice(0, 8)}** — PR Merged ✅\n\n` +
94
+ `The PR has been merged. Closing this ticket.`),
95
+ this.transitionState(run.issueId, LINEAR_STATES.DONE),
96
+ ]);
97
+ }
91
98
  async onPipelineFailed(run, error) {
92
99
  await Promise.all([
93
100
  this.postComment(run.issueId, `🤖 **Agent Run #${run.id.slice(0, 8)}** — Pipeline Failed ❌\n\n` +
@@ -1 +1 @@
1
- {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/notifier/linear.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/notifier/linear.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * In-memory per-run stop signals for the pipeline runner.
3
+ *
4
+ * Surfaces (dashboard, Slack, CLI) all funnel through `requestStop()` and the
5
+ * runner consults `getStopSignal()` between stages. The executor subscribes via
6
+ * `onStop()` so that "cancel" mode can interrupt an in-flight Agent SDK stream
7
+ * (graceful stops simply skip the remaining stages once the current one ends).
8
+ *
9
+ * Single-process state: resets on container restart. Cross-container
10
+ * coordination (Redis) is intentionally out of scope — matches the existing
11
+ * BEC-170 pause caveat.
12
+ */
13
+ /**
14
+ * Stop intent attached to a run.
15
+ *
16
+ * - `"cancel"` — interrupt the running stage immediately by aborting the Agent
17
+ * SDK stream; mark the run as aborted. Tokens already spent on the current
18
+ * stage are lost.
19
+ * - `"graceful"` — let the current stage finish, then skip remaining stages.
20
+ * No PR, no fanout. Strictly cheaper to clean up after.
21
+ */
22
+ export type StopMode = "cancel" | "graceful";
23
+ /**
24
+ * Request a stop for `runId`. Idempotent. Calling with `"cancel"` after
25
+ * `"graceful"` upgrades the signal (cancel is strictly stronger). The reverse
26
+ * is a no-op so an in-flight cancel can't be downgraded mid-stream.
27
+ *
28
+ * Returns the effective mode after the call.
29
+ */
30
+ export declare function requestStop(runId: string, mode: StopMode): StopMode;
31
+ /** Returns the current stop signal for `runId`, or `undefined` if none set. */
32
+ export declare function getStopSignal(runId: string): StopMode | undefined;
33
+ /**
34
+ * Clears any signal for `runId`. Called by the runner once it has finished
35
+ * processing the stop (e.g. after marking the run aborted).
36
+ */
37
+ export declare function clearStopSignal(runId: string): void;
38
+ /**
39
+ * Subscribe a listener that fires when a `"cancel"` signal is recorded for
40
+ * `runId`. Returns an unsubscribe function. Use this in the executor to call
41
+ * `.return()` on the SDK iterator and break out of the stream.
42
+ *
43
+ * If a `"cancel"` signal is already pending when this is called, the listener
44
+ * is invoked synchronously so subscribers can't miss an early request.
45
+ */
46
+ export declare function onStop(runId: string, listener: () => void): () => void;
47
+ /** Test/reset helper. Not exported from the package barrel. */
48
+ export declare function _clearAllSignals(): void;
49
+ //# sourceMappingURL=control-signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-signals.d.ts","sourceRoot":"","sources":["../../src/pipeline/control-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAK7C;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAuBnE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGnD;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAiBtE;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * In-memory per-run stop signals for the pipeline runner.
3
+ *
4
+ * Surfaces (dashboard, Slack, CLI) all funnel through `requestStop()` and the
5
+ * runner consults `getStopSignal()` between stages. The executor subscribes via
6
+ * `onStop()` so that "cancel" mode can interrupt an in-flight Agent SDK stream
7
+ * (graceful stops simply skip the remaining stages once the current one ends).
8
+ *
9
+ * Single-process state: resets on container restart. Cross-container
10
+ * coordination (Redis) is intentionally out of scope — matches the existing
11
+ * BEC-170 pause caveat.
12
+ */
13
+ import { createLogger } from "../logger.js";
14
+ const log = createLogger({ component: "pipeline.control-signals" });
15
+ const signals = new Map();
16
+ const listeners = new Map();
17
+ /**
18
+ * Request a stop for `runId`. Idempotent. Calling with `"cancel"` after
19
+ * `"graceful"` upgrades the signal (cancel is strictly stronger). The reverse
20
+ * is a no-op so an in-flight cancel can't be downgraded mid-stream.
21
+ *
22
+ * Returns the effective mode after the call.
23
+ */
24
+ export function requestStop(runId, mode) {
25
+ const existing = signals.get(runId);
26
+ if (existing === "cancel") {
27
+ // Already at strongest — no-op.
28
+ return existing;
29
+ }
30
+ signals.set(runId, mode);
31
+ log.info({ runId, mode, previous: existing ?? null }, "stop signal recorded");
32
+ // Notify listeners only on `"cancel"` — graceful is polled at stage boundaries
33
+ // and doesn't need to interrupt a running stream.
34
+ if (mode === "cancel") {
35
+ const subs = listeners.get(runId);
36
+ if (subs) {
37
+ for (const cb of subs) {
38
+ try {
39
+ cb();
40
+ }
41
+ catch (err) {
42
+ log.warn({ runId, err }, "stop listener threw");
43
+ }
44
+ }
45
+ }
46
+ }
47
+ return mode;
48
+ }
49
+ /** Returns the current stop signal for `runId`, or `undefined` if none set. */
50
+ export function getStopSignal(runId) {
51
+ return signals.get(runId);
52
+ }
53
+ /**
54
+ * Clears any signal for `runId`. Called by the runner once it has finished
55
+ * processing the stop (e.g. after marking the run aborted).
56
+ */
57
+ export function clearStopSignal(runId) {
58
+ signals.delete(runId);
59
+ listeners.delete(runId);
60
+ }
61
+ /**
62
+ * Subscribe a listener that fires when a `"cancel"` signal is recorded for
63
+ * `runId`. Returns an unsubscribe function. Use this in the executor to call
64
+ * `.return()` on the SDK iterator and break out of the stream.
65
+ *
66
+ * If a `"cancel"` signal is already pending when this is called, the listener
67
+ * is invoked synchronously so subscribers can't miss an early request.
68
+ */
69
+ export function onStop(runId, listener) {
70
+ if (signals.get(runId) === "cancel") {
71
+ try {
72
+ listener();
73
+ }
74
+ catch (err) {
75
+ log.warn({ runId, err }, "stop listener threw on immediate fire");
76
+ }
77
+ }
78
+ let set = listeners.get(runId);
79
+ if (!set) {
80
+ set = new Set();
81
+ listeners.set(runId, set);
82
+ }
83
+ set.add(listener);
84
+ return () => {
85
+ set?.delete(listener);
86
+ };
87
+ }
88
+ /** Test/reset helper. Not exported from the package barrel. */
89
+ export function _clearAllSignals() {
90
+ signals.clear();
91
+ listeners.clear();
92
+ }
93
+ //# sourceMappingURL=control-signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-signals.js","sourceRoot":"","sources":["../../src/pipeline/control-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;AAapE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;AAC5C,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,IAAc;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,gCAAgC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzB,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAC9E,+EAA+E;IAC/E,kDAAkD;IAClD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,EAAE,EAAE,CAAC;gBACP,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,KAAa,EAAE,QAAoB;IACxD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,uCAAuC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QAChB,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClB,OAAO,GAAG,EAAE;QACV,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC"}
@@ -0,0 +1,140 @@
1
+ import type { PipelineConfig, RepoConfig, Notifier, PipelineRun, SanitizedIssue, ReviewFeedbackContext } from "../types.js";
2
+ import type { AnyDb } from "../db/client.js";
3
+ import { type GitHubConfig } from "../repo/github.js";
4
+ import { type GitLabConfig } from "../repo/gitlab.js";
5
+ import type { ReviewFeedbackComment } from "../webhook/github-handler.js";
6
+ import type { WorkQueue } from "./queue.js";
7
+ import { type LockAdapter } from "./distributed-lock.js";
8
+ /**
9
+ * Map webhook-shaped `ReviewFeedbackComment[]` (the wire format we receive
10
+ * from GitHub) into the `ReviewFeedbackContext` that the implement template
11
+ * expects when handling PR review feedback.
12
+ *
13
+ * Routes the implement stage into the dedicated review-feedback prompt path
14
+ * (templates.ts:233-253) — "address review comments on existing branch, push
15
+ * to same branch, do NOT create a new PR" — instead of falling through to
16
+ * the standard "create branch and implement issue from scratch" prompt.
17
+ *
18
+ * `createdAt` is not captured by the GitHub webhook handler today, so the
19
+ * mapped comments use an empty string. The template only renders this for
20
+ * display; an empty value is harmless.
21
+ */
22
+ export declare function buildReviewFeedbackContext(prUrl: string, prBranch: string, comments: ReviewFeedbackComment[]): ReviewFeedbackContext;
23
+ /**
24
+ * All dependencies required by executeFeedbackPipeline.
25
+ *
26
+ * PipelineRunner.startFeedback() constructs this context from its own
27
+ * instance fields and passes it through to the extracted function so the
28
+ * implementation can live outside the class while still accessing the same
29
+ * shared state (queues, locks, notifier, config).
30
+ *
31
+ * @param db - AnyDb instance (SQLite or Postgres)
32
+ * @param notifier - Composite notifier for Linear/Slack/Discord events
33
+ * @param repoCloneDir - Base directory for bare repository clones
34
+ * @param agentRunDir - Base directory for per-run agent worktrees
35
+ * @param githubConfig - Optional GitHub App credentials (re-request review)
36
+ * @param gitlabConfig - Optional GitLab credentials (authenticated clone URL)
37
+ * @param pushQueue - Concurrency-1 queue serialising push operations
38
+ * @param lockAdapter - Distributed branch lock adapter
39
+ * @param prLockTimeoutMs - Max wait time (ms) for the distributed branch lock
40
+ * @param budgetAlertedRuns - Mutable set of runIds that already fired 80% alert
41
+ * @param checkTokenBudget - Bound method: checks/enforces the token budget
42
+ * @param failPipeline - Bound method: marks run as failed and notifies
43
+ * @param injectAgentConfig - Bound method: writes CLAUDE.md into worktree
44
+ */
45
+ export interface FeedbackPipelineContext {
46
+ db: AnyDb;
47
+ notifier: Notifier;
48
+ repoCloneDir: string;
49
+ agentRunDir: string;
50
+ githubConfig?: GitHubConfig;
51
+ gitlabConfig?: GitLabConfig;
52
+ pushQueue: WorkQueue;
53
+ lockAdapter: LockAdapter;
54
+ prLockTimeoutMs: number;
55
+ budgetAlertedRuns: Set<string>;
56
+ checkTokenBudget(db: AnyDb, runId: string, run: PipelineRun, config: PipelineConfig, stage: string): Promise<boolean>;
57
+ failPipeline(db: AnyDb, runId: string, run: PipelineRun, stage: string, errorMsg: string, retriesExhausted: boolean): Promise<void>;
58
+ injectAgentConfig(worktreePath: string): Promise<void>;
59
+ /**
60
+ * Operator-initiated stop. Mirrors the main pipeline's path so feedback
61
+ * runs honour cancel/graceful signals. Passes the prUrl so the per-PR
62
+ * rate-limit slot is freed immediately rather than waiting on the queue's
63
+ * `finally` block.
64
+ */
65
+ markRunCancelled(db: AnyDb, runId: string, run: PipelineRun, mode: "cancel" | "graceful", feedbackPrUrl?: string): Promise<void>;
66
+ }
67
+ /**
68
+ * Execute a review-feedback pipeline run.
69
+ *
70
+ * Key differences from executePipeline():
71
+ * - Checks out the EXISTING PR branch (not a new one).
72
+ * - Skips triage, reproduce, await-approval stages.
73
+ * - Does NOT create a new PR — pushes to the same branch.
74
+ * - Optionally re-requests review via GitHub App after push.
75
+ * - Feedback comment context is injected into the implement stage prompt.
76
+ *
77
+ * @param ctx - All dependencies (db, notifier, queues, config, etc.)
78
+ * @param runId - Unique ID for this pipeline run
79
+ * @param run - In-memory PipelineRun state object
80
+ * @param config - Pipeline configuration (stages, maxTokens, etc.)
81
+ * @param repoConfig - Repository configuration (URL, provider, etc.)
82
+ * @param sanitizedIssue - Sanitized issue data for prompt construction
83
+ * @param branch - Existing PR branch to check out and push to
84
+ * @param prUrl - URL of the pull request being addressed
85
+ * @param prNumber - PR number (required for re-requesting review)
86
+ * @param feedbackComments - Raw feedback comments from the GitHub webhook
87
+ * @param rerequestReview - Whether to re-request review after pushing
88
+ */
89
+ export declare function executeFeedbackPipeline(ctx: FeedbackPipelineContext, runId: string, run: PipelineRun, config: PipelineConfig, repoConfig: RepoConfig, sanitizedIssue: SanitizedIssue, branch: string, prUrl: string, prNumber: number | undefined, feedbackComments: ReviewFeedbackComment[], rerequestReview: boolean): Promise<void>;
90
+ /**
91
+ * Minimal issue reference required by the feedback pipeline orchestration.
92
+ * Structural subset of LinearIssue; passing a full LinearIssue is valid.
93
+ */
94
+ export type FeedbackIssueRef = {
95
+ identifier: string;
96
+ title: string;
97
+ };
98
+ /**
99
+ * Extended context for orchestrating a feedback pipeline run.
100
+ * Adds the state-management dependencies that startFeedbackPipeline needs
101
+ * on top of the execution dependencies in FeedbackPipelineContext.
102
+ *
103
+ * @param activeFeedbackRuns - Mutable map of in-flight feedback runs (prUrl → runId) for rate-limiting
104
+ * @param queue - Main execution queue from PipelineRunner
105
+ * @param buildPipelineRun - Factory that constructs an in-memory PipelineRun from issue/config data
106
+ */
107
+ export interface FeedbackStartContext extends FeedbackPipelineContext {
108
+ activeFeedbackRuns: Map<string, string>;
109
+ queue: WorkQueue;
110
+ buildPipelineRun(runId: string, issue: FeedbackIssueRef, pipelineKey: string, repoConfig: RepoConfig, branch: string): PipelineRun;
111
+ }
112
+ /**
113
+ * Orchestrate a review-feedback pipeline run.
114
+ *
115
+ * Handles the setup phase that wraps executeFeedbackPipeline:
116
+ * - Rate-limit check (one run per PR at a time).
117
+ * - DB record insertion (status = "queued").
118
+ * - In-memory PipelineRun construction.
119
+ * - Enqueue execution via the main work queue.
120
+ *
121
+ * PipelineRunner.startFeedback() is a thin wrapper that delegates here,
122
+ * passing its instance state through FeedbackStartContext.
123
+ *
124
+ * @param ctx - Runner-level dependencies (db, notifier, queues, locks, etc.)
125
+ * @param params - Issue / PR / feedback data for this run
126
+ */
127
+ export declare function startFeedbackPipeline(ctx: FeedbackStartContext, params: {
128
+ issue: FeedbackIssueRef;
129
+ pipelineKey: string;
130
+ pipelineConfig: PipelineConfig;
131
+ repoConfig: RepoConfig;
132
+ sanitizedIssue: SanitizedIssue;
133
+ branch: string;
134
+ prUrl: string;
135
+ prNumber?: number;
136
+ parentRunId?: string;
137
+ feedbackComments: ReviewFeedbackComment[];
138
+ rerequestReview?: boolean;
139
+ }): Promise<void>;
140
+ //# sourceMappingURL=feedback-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback-pipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/feedback-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EAEV,QAAQ,EACR,WAAW,EAEX,cAAc,EACd,qBAAqB,EACtB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAe7C,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQ1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAiD/B;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,qBAAqB,EAAE,GAChC,qBAAqB,CAYvB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,KAAK,CAAC;IACV,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,gBAAgB,CACd,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,YAAY,CACV,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD;;;;;OAKG;IACH,gBAAgB,CACd,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,QAAQ,GAAG,UAAU,EAC3B,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,uBAAuB,EAC5B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,gBAAgB,EAAE,qBAAqB,EAAE,EACzC,eAAe,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC,CA4Uf;AAMD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,uBAAuB;IACnE,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,KAAK,EAAE,SAAS,CAAC;IACjB,gBAAgB,CACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,GACb,WAAW,CAAC;CAChB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,oBAAoB,EACzB,MAAM,EAAE;IACN,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GACA,OAAO,CAAC,IAAI,CAAC,CAqGf"}