@overdeck/desktop 0.45.10 → 0.45.11

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 (86) hide show
  1. package/package.json +1 -1
  2. package/server/{advancing-selfheal-CMlGznKv.js → advancing-selfheal-BezNfM3P.js} +3 -3
  3. package/server/{agent-state-xk_G8t90.js → agent-state-BUANcaA7.js} +1 -1
  4. package/server/{agent-state-service-C1iUF9Ft.js → agent-state-service-DmFpIMbP.js} +1 -1
  5. package/server/{agent-state-service-5ge9xxhx.js → agent-state-service-tXUdp6UF.js} +2 -2
  6. package/server/{agents-BIggLvi_.js → agents-C-vqmKDi.js} +1 -1
  7. package/server/{agents-DHvsjsuP.js → agents-C7V4odQ6.js} +11 -11
  8. package/server/{backlog-auto-trigger-COm_R96V.js → backlog-auto-trigger-Cb8PR-5w.js} +2 -2
  9. package/server/{cli-CvK9xuSS.js → cli-BgzbB6h3.js} +2 -2
  10. package/server/cli-DCqy_wFa.js +3 -0
  11. package/server/{close-issue-BnpErnD1.js → close-issue-BWf3pxn4.js} +2 -2
  12. package/server/{closed-issue-reaper-DRqK5k39.js → closed-issue-reaper-D7XPq5pY.js} +4 -4
  13. package/server/{closed-issue-reaper-BLCQwTpF.js → closed-issue-reaper-VSTSTROK.js} +1 -1
  14. package/server/{conflict-gate-JdFuhKuF.js → conflict-gate-DwOslTij.js} +1 -1
  15. package/server/{conflict-gate-BhKvrPxn.js → conflict-gate-FFEvTDVA.js} +3 -3
  16. package/server/{conversation-compaction-C5o_eKEm.js → conversation-compaction-CCqN4hWk.js} +4 -4
  17. package/server/{conversation-compaction-Ba5aZdrb.js → conversation-compaction-CL5Ti4j4.js} +1 -1
  18. package/server/{deacon-j3qSZ7--.js → deacon-CGHl90eC.js} +107 -50
  19. package/server/{deacon-Cv2RMfHs.js → deacon-DMPh40Im.js} +2 -2
  20. package/server/deacon-swarm-CVTiNL0N.js +2 -0
  21. package/server/{deacon-swarm-DadWNi5J.js → deacon-swarm-aMMJTq6t.js} +4 -4
  22. package/server/deacon.js +4 -4
  23. package/server/{feedback-target-oE4-Esxl.js → feedback-target-dJjFfITP.js} +4 -4
  24. package/server/{feedback-target-C4DaDSZ8.js → feedback-target-nQSM6ygL.js} +1 -1
  25. package/server/{flywheel-ClMjGW_u.js → flywheel-BLoVNtJV.js} +6 -6
  26. package/server/{flywheel-DefHRzY4.js → flywheel-Cqf8vu7N.js} +6 -6
  27. package/server/{flywheel-BqDdGvrQ.js → flywheel-PJsbrXNY.js} +1 -1
  28. package/server/{flywheel-merge-order-CuDcqTRJ.js → flywheel-merge-order-B7BH8mZ3.js} +2 -2
  29. package/server/{flywheel-merge-order-B6YDSElh.js → flywheel-merge-order-CCwF60b-.js} +1 -1
  30. package/server/{harness-resolve-DKeSVsJL.js → harness-resolve-B3f9G1Kp.js} +2 -2
  31. package/server/{inspect-agent-BKKc0XnB.js → inspect-agent-CKF5-SJr.js} +3 -3
  32. package/server/inspect-agent-CqpEWGWy.js +2 -0
  33. package/server/{issue-lifecycle-DnhQgddB.js → issue-lifecycle-5LbOcATP.js} +7 -7
  34. package/server/{issue-lifecycle-nY4esZn8.js → issue-lifecycle-CjYqQ669.js} +1 -1
  35. package/server/{issue-service-singleton-Bnqv1uaa.js → issue-service-singleton-B8iu_TKV.js} +1 -1
  36. package/server/{issue-service-singleton-_AquSBTl.js → issue-service-singleton-CDGt__oQ.js} +2 -2
  37. package/server/{lifecycle-CGKm7doE.js → lifecycle-CEg4sHZH.js} +4 -4
  38. package/server/{merge-agent-Dh8Y9PDO.js → merge-agent-7nBiCytp.js} +1 -1
  39. package/server/{merge-agent-BcgAYStl.js → merge-agent-C81xPIGd.js} +6 -6
  40. package/server/merge-ops-DE_6CnmZ.js +2 -0
  41. package/server/{merge-train-DmxlYbEo.js → merge-train-D3qzRccL.js} +2 -2
  42. package/server/{merge-train-deps-DBHsOWt9.js → merge-train-deps-Be5ElC_P.js} +2 -2
  43. package/server/{orphan-proposed-reconciler-Db8tUhce.js → orphan-proposed-reconciler-Boq_XaRe.js} +3 -3
  44. package/server/{orphan-proposed-reconciler-mXV--tcB.js → orphan-proposed-reconciler-C0sPnDq_.js} +1 -1
  45. package/server/{reconstruct-cache-_tDZ2D72.js → reconstruct-cache-C2pCltOq.js} +3 -3
  46. package/server/{remote-completion-Bklh6loJ.js → remote-completion-BmxD5UMQ.js} +3 -3
  47. package/server/resume-C-nxu9Y4.js +3 -0
  48. package/server/{review-agent-phzqNqIs.js → review-agent-D6P6d3pz.js} +26 -17
  49. package/server/review-agent-DTINEffB.js +3 -0
  50. package/server/{review-context-CCq56O_Y.js → review-context-Dyo0tsBa.js} +2 -2
  51. package/server/{review-status-BQjqQXZG.js → review-status-B5ZASOo4.js} +18 -5
  52. package/server/{review-status-bBkqUj5i.js → review-status-h7BXIA4z.js} +1 -1
  53. package/server/{review-verdict-feedback-wqnikhMK.js → review-verdict-feedback-B70VbfRL.js} +4 -4
  54. package/server/{review-verdict-feedback-cZh9Wi9G.js → review-verdict-feedback-CorgH49f.js} +1 -1
  55. package/server/{sequence-io-B2GmilSI.js → sequence-io-6YP8fVpH.js} +2 -2
  56. package/server/{sequencer-agent-D8pW2aU_.js → sequencer-agent-ja-nkEc1.js} +5 -5
  57. package/server/server.js +66 -55
  58. package/server/{service-CILd-uOt.js → service-HKDrIy0h.js} +24 -24
  59. package/server/{smart-compaction-Bgp_gwcA.js → smart-compaction-L0LSnF0_.js} +1 -1
  60. package/server/{smart-compaction-CrP90OFE.js → smart-compaction-uke1npUz.js} +2 -2
  61. package/server/{spawn-planning-session-D15KbPOy.js → spawn-planning-session-CSMWco8B.js} +1 -1
  62. package/server/{spawn-planning-session-BmJWHSCu.js → spawn-planning-session-CXc0NkwV.js} +3 -3
  63. package/server/{specialist-context-CwKkcXL9.js → specialist-context-BGCJ24LH.js} +3 -3
  64. package/server/{specialist-logs-CvDxquV_.js → specialist-logs--Uz-r8ia.js} +2 -2
  65. package/server/{specialists-BCjcG4uE.js → specialists-Ca9XSBCS.js} +1 -1
  66. package/server/{specialists-D07ybnam.js → specialists-DEfrAbWs.js} +36 -36
  67. package/server/{specialists-F2uMO4QS.js → specialists-DeZx9xom.js} +1 -1
  68. package/server/{specialists-BYi0k8CZ.js → specialists-nZ0mRwpZ.js} +12 -12
  69. package/server/{summary-fork-DedqguZb.js → summary-fork-2a1L2DIU.js} +2 -2
  70. package/server/{summary-fork-EjvOkEPl.js → summary-fork-Xn0QUNmb.js} +3 -3
  71. package/server/{teardown-workspace-5LCVbjfq.js → teardown-workspace-DhA6oAIK.js} +2 -2
  72. package/server/{test-agent-queue-qfsq6uaC.js → test-agent-queue-B_ukPyIK.js} +3 -3
  73. package/server/{uat-train-CtNGgXxj.js → uat-train-BLBAbJ8Y.js} +10 -10
  74. package/server/{uat-train-C3hWXtip.js → uat-train-DPfGR9_I.js} +1 -1
  75. package/server/{verification-runner-DuZRHjPU.js → verification-runner-KTGTNugM.js} +1 -1
  76. package/server/{verification-runner-BPAhPWR7.js → verification-runner-R2-4XgMO.js} +4 -4
  77. package/server/{workflows-H-COJ84X.js → workflows-CSKX5MhC.js} +7 -7
  78. package/server/workflows-DVwXauef.js +2 -0
  79. package/server/{workspaces-CRU9_vRn.js → workspaces-DXLDgXo2.js} +32 -32
  80. package/server/cli-CJDWXE_Y.js +0 -3
  81. package/server/deacon-swarm-D1iAUX-P.js +0 -2
  82. package/server/inspect-agent-vm88mLYr.js +0 -2
  83. package/server/merge-ops-QdBiQ8XB.js +0 -2
  84. package/server/resume-DnIsmIgC.js +0 -3
  85. package/server/review-agent-DgySDb-G.js +0 -3
  86. package/server/workflows-Cz8OtiB4.js +0 -2
@@ -1,14 +1,14 @@
1
1
  import { t as init_config_yaml } from "./config-yaml-DPAieL_G.js";
2
2
  import { L as sessionExists, x as init_tmux } from "./tmux-ePNhMIMU.js";
3
3
  import { c as FlywheelStats, t as init_src, v as FlywheelStatus } from "./src-fgbU-jJ-.js";
4
- import { t as init_agents } from "./agents-DHvsjsuP.js";
4
+ import { t as init_agents } from "./agents-C7V4odQ6.js";
5
5
  import { s as init_internal_token } from "./internal-token-CQUx9YLc.js";
6
6
  import { i as getFlywheelActiveRunId, s as init_control_settings } from "./control-settings-BMqUkXmR.js";
7
- import { t as init_harness_resolve } from "./harness-resolve-DKeSVsJL.js";
8
- import { d as clearFlywheelGate, f as getFlywheelRunDetail, h as listFlywheelRuns, p as getFlywheelRunDir } from "./flywheel-ClMjGW_u.js";
7
+ import { t as init_harness_resolve } from "./harness-resolve-B3f9G1Kp.js";
8
+ import { d as clearFlywheelGate, f as getFlywheelRunDetail, h as listFlywheelRuns, p as getFlywheelRunDir } from "./flywheel-BLoVNtJV.js";
9
9
  import { f as init_github_app } from "./github-app-FMXgo3vK.js";
10
- import { t as init_sequence_io } from "./sequence-io-B2GmilSI.js";
11
- import { r as computeMergeQueue } from "./flywheel-merge-order-CuDcqTRJ.js";
10
+ import { t as init_sequence_io } from "./sequence-io-6YP8fVpH.js";
11
+ import { r as computeMergeQueue } from "./flywheel-merge-order-B7BH8mZ3.js";
12
12
  import "./merge-blockers-DwdQNsYD.js";
13
13
  import { Effect, Schema } from "effect";
14
14
  import "node:os";
@@ -203,4 +203,4 @@ async function flywheelReportCommand(options = {}) {
203
203
  //#endregion
204
204
  export { flywheelReportCommand };
205
205
 
206
- //# sourceMappingURL=flywheel-DefHRzY4.js.map
206
+ //# sourceMappingURL=flywheel-Cqf8vu7N.js.map
@@ -1,2 +1,2 @@
1
- import { a as pauseFlywheel, o as resumeFlywheel } from "./flywheel-ClMjGW_u.js";
1
+ import { a as pauseFlywheel, o as resumeFlywheel } from "./flywheel-BLoVNtJV.js";
2
2
  export { pauseFlywheel, resumeFlywheel };
@@ -1,5 +1,5 @@
1
1
  import { En as getProjectSwarmHotspots, Nn as init_projects, bn as findProjectByPathSync } from "./config-yaml-DPAieL_G.js";
2
- import { c as init_review_status, p as mergeGateEligibility, s as getReviewStatusSync } from "./review-status-BQjqQXZG.js";
2
+ import { c as init_review_status, p as mergeGateEligibility, s as getReviewStatusSync } from "./review-status-B5ZASOo4.js";
3
3
  import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-bpWs7Xyx.js";
4
4
  import { i as compileGlob, u as init_dag } from "./dag-jH8ZkewR.js";
5
5
  import { n as computeIssueFootprint, r as init_swarm_readiness } from "./swarm-readiness-OBgamRql.js";
@@ -240,4 +240,4 @@ function pickFromSequence(nodes, opts) {
240
240
  //#endregion
241
241
  export { declaredIssueFootprint as a, resolveMergeQueuePrUrl as c, computePredictedConflictSignals as i, reviewRecordEligibility as l, changedFilesVsMain as n, orderMergeCandidates as o, computeMergeQueue as r, pickFromSequence as s, MERGE_GATE_VERBS as t };
242
242
 
243
- //# sourceMappingURL=flywheel-merge-order-CuDcqTRJ.js.map
243
+ //# sourceMappingURL=flywheel-merge-order-B7BH8mZ3.js.map
@@ -1,2 +1,2 @@
1
- import { c as resolveMergeQueuePrUrl, l as reviewRecordEligibility, r as computeMergeQueue } from "./flywheel-merge-order-CuDcqTRJ.js";
1
+ import { c as resolveMergeQueuePrUrl, l as reviewRecordEligibility, r as computeMergeQueue } from "./flywheel-merge-order-B7BH8mZ3.js";
2
2
  export { computeMergeQueue, resolveMergeQueuePrUrl, reviewRecordEligibility };
@@ -4,7 +4,7 @@ import { exec } from "child_process";
4
4
  import { promisify } from "util";
5
5
  //#region ../../lib/harness-resolve.ts
6
6
  async function getProviderAuthModeForModel(model) {
7
- const { getProviderAuthMode } = await import("./agents-BIggLvi_.js");
7
+ const { getProviderAuthMode } = await import("./agents-C-vqmKDi.js");
8
8
  return getProviderAuthMode(model);
9
9
  }
10
10
  async function hasHarnessBinary(harness) {
@@ -69,4 +69,4 @@ var init_harness_resolve = __esmMin((() => {
69
69
  //#endregion
70
70
  export { resolveHarness as n, init_harness_resolve as t };
71
71
 
72
- //# sourceMappingURL=harness-resolve-DKeSVsJL.js.map
72
+ //# sourceMappingURL=harness-resolve-B3f9G1Kp.js.map
@@ -1,7 +1,7 @@
1
1
  import { C as resolveTieredExecutionEnabled, L as getProviderForModelSync, N as clearCredentialFileAuthSync, R as init_providers, S as init_tier_table, V as setupCredentialFileAuthSync, X as resolveModel, f as loadConfigSync, lr as GitError, mr as ProcessSpawnError, t as init_config_yaml, vr as init_errors } from "./config-yaml-DPAieL_G.js";
2
2
  import { L as sessionExists, o as createSession, w as killSession, x as init_tmux } from "./tmux-ePNhMIMU.js";
3
- import { c as init_review_status, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
4
- import { c as init_tier_supervisor, d as spawnTierSupervisor, f as supervisorAgentId, gr as saveAgentRuntimeState, l as loadPrdDraft, ln as getProviderEnvForModel, qn as saveAgentState, s as deliverCommitForReview, t as init_agents } from "./agents-DHvsjsuP.js";
3
+ import { c as init_review_status, y as setReviewStatusSync } from "./review-status-B5ZASOo4.js";
4
+ import { c as init_tier_supervisor, d as spawnTierSupervisor, f as supervisorAgentId, gr as saveAgentRuntimeState, l as loadPrdDraft, ln as getProviderEnvForModel, qn as saveAgentState, s as deliverCommitForReview, t as init_agents } from "./agents-C7V4odQ6.js";
5
5
  import { m as readWorkspacePlanSync, o as init_io } from "./io-Wy8YpFeP.js";
6
6
  import { a as init_launcher_generator, i as generateLauncherScriptSync } from "./state-home-Bgj7i-C7.js";
7
7
  import { a as init_claude_permissions, i as getClaudePermissionFlagsSync } from "./claude-permissions-DrRAs_0F.js";
@@ -367,4 +367,4 @@ function onInspectComplete(projectKey, issueId, beadId, status, workspacePath) {
367
367
  //#endregion
368
368
  export { onInspectComplete as n, spawnInspectAgent as r, buildInspectPrompt as t };
369
369
 
370
- //# sourceMappingURL=inspect-agent-BKKc0XnB.js.map
370
+ //# sourceMappingURL=inspect-agent-CKF5-SJr.js.map
@@ -0,0 +1,2 @@
1
+ import { n as onInspectComplete } from "./inspect-agent-CKF5-SJr.js";
2
+ export { onInspectComplete };
@@ -2,7 +2,7 @@ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { a as init_activity_logger, t as emitActivityDetailedSync } from "./activity-logger-pcbf-e30.js";
3
3
  import { a as init_event_store, i as initEventStore } from "./event-store-DTJXZjCl.js";
4
4
  import { d as getMaxTurnDiffSummariesPerAgent, f as isTerminalTurnDiffSummaryStatus, l as INITIAL_READ_MODEL_STATE, p as trimTurnDiffSummaries, t as init_src, u as applyEvent } from "./src-fgbU-jJ-.js";
5
- import { A as listOverdeckAgentStatesSync, k as init_agent_state_sync } from "./review-status-BQjqQXZG.js";
5
+ import { A as listOverdeckAgentStatesSync, k as init_agent_state_sync } from "./review-status-B5ZASOo4.js";
6
6
  import { a as resolveSessionContextBriefingPath, d as init_agents, o as AgentsResolver, r as init_briefing_freshness } from "./briefing-freshness-CXhZdnB8.js";
7
7
  import { f as resolveStatusFile, i as init_paths } from "./paths-TE1GOZDr.js";
8
8
  import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-CnGyNgAq.js";
@@ -12,7 +12,7 @@ import { i as init_linear_client, r as LinearClientOptionalLive, t as LinearClie
12
12
  import { i as init_github_client, r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-yjbXaqpR.js";
13
13
  import { i as init_rally_client, n as RallyClientLive, t as RallyClient } from "./rally-client-DYjtgTOu.js";
14
14
  import { a as resolveTrackerTypeSync, i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-bpWs7Xyx.js";
15
- import { n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-_AquSBTl.js";
15
+ import { n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-CDGt__oQ.js";
16
16
  import { Context, Effect, Layer, Option, Queue, Stream } from "effect";
17
17
  import { basename, dirname, join, resolve } from "path";
18
18
  import { dirname as dirname$1 } from "node:path";
@@ -293,7 +293,7 @@ var init_read_model = __esmMin((() => {
293
293
  };
294
294
  const getSnapshot = Effect.gen(function* () {
295
295
  try {
296
- const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-Bnqv1uaa.js"));
296
+ const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-B8iu_TKV.js"));
297
297
  const currentIssues = cleanIssues(getSharedIssueService().getIssues());
298
298
  if (currentIssues.length > 0 || state.issuesRaw.length === 0) state = {
299
299
  ...state,
@@ -318,7 +318,7 @@ var init_read_model = __esmMin((() => {
318
318
  const getAgentIdBySessionId = (sessionId) => Effect.sync(() => state.agentIdBySessionId[sessionId] ?? null);
319
319
  const agentsResolver = yield* AgentsResolver;
320
320
  yield* Effect.gen(function* () {
321
- const { reconstructCacheAuto } = yield* Effect.promise(() => import("./reconstruct-cache-_tDZ2D72.js"));
321
+ const { reconstructCacheAuto } = yield* Effect.promise(() => import("./reconstruct-cache-C2pCltOq.js"));
322
322
  const [overdeckAgents, result] = yield* Effect.all([agentsResolver.list({}), Effect.promise(() => reconstructCacheAuto())]);
323
323
  const agentsById = Object.fromEntries(overdeckAgents.map((a) => [a.id, agentSnapshotFromOverdeck(a)]));
324
324
  let sequence = 0;
@@ -397,7 +397,7 @@ var init_read_model = __esmMin((() => {
397
397
  }
398
398
  })();
399
399
  try {
400
- const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-Bnqv1uaa.js"));
400
+ const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-B8iu_TKV.js"));
401
401
  const issueService = getSharedIssueService();
402
402
  const mergeT0 = performance.now();
403
403
  const currentIssues = cleanIssues(issueService.getIssues());
@@ -437,7 +437,7 @@ var init_read_model = __esmMin((() => {
437
437
  payload: { issues: cleaned }
438
438
  });
439
439
  } catch {}
440
- import("./backlog-auto-trigger-COm_R96V.js").then(({ triggerDebouncedIncrementalPass }) => {
440
+ import("./backlog-auto-trigger-Cb8PR-5w.js").then(({ triggerDebouncedIncrementalPass }) => {
441
441
  triggerDebouncedIncrementalPass(process.cwd());
442
442
  }).catch(() => {});
443
443
  });
@@ -1403,4 +1403,4 @@ var init_issue_lifecycle = __esmMin((() => {
1403
1403
  //#endregion
1404
1404
  export { init_queue_position as _, EventStoreService as a, ReadModelService as c, init_read_model as d, toAgentResolution as f, findPositionInQueueSync as g, computeQueuePositionFromStatusSync as h, init_issue_lifecycle as i, ReadModelServiceLive as l, toRole as m, IssueLifecycleLive as n, EventStoreServiceLive as o, toAgentStatus as p, IssueLifecycleWithClientLive as r, init_domain_services as s, IssueLifecycle as t, getClosedIssueIdsForReadSource as u };
1405
1405
 
1406
- //# sourceMappingURL=issue-lifecycle-DnhQgddB.js.map
1406
+ //# sourceMappingURL=issue-lifecycle-5LbOcATP.js.map
@@ -1,3 +1,3 @@
1
- import { i as init_issue_lifecycle, n as IssueLifecycleLive, r as IssueLifecycleWithClientLive, t as IssueLifecycle } from "./issue-lifecycle-DnhQgddB.js";
1
+ import { i as init_issue_lifecycle, n as IssueLifecycleLive, r as IssueLifecycleWithClientLive, t as IssueLifecycle } from "./issue-lifecycle-5LbOcATP.js";
2
2
  init_issue_lifecycle();
3
3
  export { IssueLifecycle, IssueLifecycleLive, IssueLifecycleWithClientLive };
@@ -1,3 +1,3 @@
1
- import { i as startSharedIssueService, n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-_AquSBTl.js";
1
+ import { i as startSharedIssueService, n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-CDGt__oQ.js";
2
2
  init_issue_service_singleton();
3
3
  export { getSharedIssueService, startSharedIssueService };
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin, r as __exportAll } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { Gn as resolveProjectFromIssueSync, Nn as init_projects, f as loadConfigSync, t as init_config_yaml } from "./config-yaml-DPAieL_G.js";
3
3
  import { n as openDatabase, t as init_driver } from "./driver-D-HBOQa_.js";
4
- import { c as init_review_status, d as loadReviewStatusesForIssues } from "./review-status-BQjqQXZG.js";
4
+ import { c as init_review_status, d as loadReviewStatusesForIssues } from "./review-status-B5ZASOo4.js";
5
5
  import { a as init_tracker_config, n as getLinearApiKey, o as validateRallyConfig, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-C3hiPVAM.js";
6
6
  import { n as init_dist_src, t as Octokit } from "./dist-src-Byxt1ifL.js";
7
7
  import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-BvAgFK8n.js";
@@ -1504,4 +1504,4 @@ var init_issue_service_singleton = __esmMin((() => {
1504
1504
  //#endregion
1505
1505
  export { CacheService as a, startSharedIssueService as i, init_issue_service_singleton as n, init_cache_service as o, issue_service_singleton_exports as r, parseIntegerHeader as s, getSharedIssueService as t };
1506
1506
 
1507
- //# sourceMappingURL=issue-service-singleton-_AquSBTl.js.map
1507
+ //# sourceMappingURL=issue-service-singleton-CDGt__oQ.js.map
@@ -1,9 +1,9 @@
1
1
  import { o as init_archive_planning, t as archivePlanning } from "./archive-planning-zTvWWHG_.js";
2
2
  import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-B5u3NxMl.js";
3
- import { t as closeIssue } from "./close-issue-BnpErnD1.js";
4
- import { t as teardownWorkspace } from "./teardown-workspace-5LCVbjfq.js";
3
+ import { t as closeIssue } from "./close-issue-BWf3pxn4.js";
4
+ import { t as teardownWorkspace } from "./teardown-workspace-DhA6oAIK.js";
5
5
  import { n as init_compact_beads, t as compactBeads } from "./compact-beads-RFwdZFPA.js";
6
- import { a as deepWipe, i as closeOut, n as cancelIssueWorkflow, o as resetToTodo, r as close, t as approve } from "./workflows-H-COJ84X.js";
6
+ import { a as deepWipe, i as closeOut, n as cancelIssueWorkflow, o as resetToTodo, r as close, t as approve } from "./workflows-CSKX5MhC.js";
7
7
  //#region ../../lib/lifecycle/index.ts
8
8
  init_types();
9
9
  init_archive_planning();
@@ -11,4 +11,4 @@ init_compact_beads();
11
11
  //#endregion
12
12
  export { approve, archivePlanning, cancelIssueWorkflow, close, closeIssue, closeOut, compactBeads, deepWipe, resetToTodo, stepFailed, stepOk, stepSkipped, teardownWorkspace };
13
13
 
14
- //# sourceMappingURL=lifecycle-CGKm7doE.js.map
14
+ //# sourceMappingURL=lifecycle-CEg4sHZH.js.map
@@ -1,3 +1,3 @@
1
- import { _ as scanGitPatterns, a as init_merge_agent, c as isSyncMainMainPreferredPath, d as parseAgentOutput, f as postMergeLifecycle, g as scanForConflictMarkers, h as salvageStrandedMerge, i as captureTmuxOutput, l as logMergeHistory, m as runProjectQualityGates, n as GIT_PATTERNS, o as isAutoCommitExcludedPath, p as resetPostMergeState, r as autoCommitWorkspaceChangesBeforeSync, s as isMergeAgentRunning, t as AUTO_COMMIT_EXCLUDED_PATHS, u as notifyTldrDaemon, v as sendMessageToAgent, y as syncMainIntoWorkspace } from "./merge-agent-BcgAYStl.js";
1
+ import { _ as scanGitPatterns, a as init_merge_agent, c as isSyncMainMainPreferredPath, d as parseAgentOutput, f as postMergeLifecycle, g as scanForConflictMarkers, h as salvageStrandedMerge, i as captureTmuxOutput, l as logMergeHistory, m as runProjectQualityGates, n as GIT_PATTERNS, o as isAutoCommitExcludedPath, p as resetPostMergeState, r as autoCommitWorkspaceChangesBeforeSync, s as isMergeAgentRunning, t as AUTO_COMMIT_EXCLUDED_PATHS, u as notifyTldrDaemon, v as sendMessageToAgent, y as syncMainIntoWorkspace } from "./merge-agent-C81xPIGd.js";
2
2
  init_merge_agent();
3
3
  export { AUTO_COMMIT_EXCLUDED_PATHS, GIT_PATTERNS, autoCommitWorkspaceChangesBeforeSync, captureTmuxOutput, isAutoCommitExcludedPath, isMergeAgentRunning, isSyncMainMainPreferredPath, logMergeHistory, notifyTldrDaemon, parseAgentOutput, postMergeLifecycle, resetPostMergeState, runProjectQualityGates, salvageStrandedMerge, scanForConflictMarkers, scanGitPatterns, sendMessageToAgent, syncMainIntoWorkspace };
@@ -3,7 +3,7 @@ import { Nn as init_projects, Or as OVERDECK_HOME, Vr as init_paths, _r as VcsEr
3
3
  import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-pcbf-e30.js";
4
4
  import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CpKlYZA9.js";
5
5
  import { L as sessionExists, O as listSessionNames, P as sendKeys, i as capturePane, w as killSession, x as init_tmux } from "./tmux-ePNhMIMU.js";
6
- import { c as init_review_status, f as markWorkspaceStuck, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
6
+ import { c as init_review_status, f as markWorkspaceStuck, y as setReviewStatusSync } from "./review-status-B5ZASOo4.js";
7
7
  import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-bpWs7Xyx.js";
8
8
  import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-Dwyj9gEM.js";
9
9
  import { n as restoreTrackedBeadsExport, t as init_beads_restore } from "./beads-restore-CMbDSB5R.js";
@@ -545,7 +545,7 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
545
545
  console.warn(`[merge-agent] Beads compaction failed: ${err}`);
546
546
  }
547
547
  try {
548
- const { setAgentPaused, getAgentState } = await import("./agents-BIggLvi_.js");
548
+ const { setAgentPaused, getAgentState } = await import("./agents-C-vqmKDi.js");
549
549
  const { killSession, sessionExists } = await import("./tmux-CeDD14p1.js");
550
550
  const issueLower = issueId.toLowerCase();
551
551
  const reason = "awaiting close-out (verify on main)";
@@ -571,7 +571,7 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
571
571
  console.warn(`[merge-agent] Could not pause or kill agent sessions: ${err}`);
572
572
  }
573
573
  try {
574
- const { killAllReviewerSessions } = await import("./review-agent-DgySDb-G.js");
574
+ const { killAllReviewerSessions } = await import("./review-agent-DTINEffB.js");
575
575
  const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
576
576
  const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
577
577
  if (projectKey) {
@@ -586,7 +586,7 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
586
586
  }
587
587
  await killPostMergeRoleSessions(issueId);
588
588
  try {
589
- const { createResetMarker } = await import("./cli-CJDWXE_Y.js");
589
+ const { createResetMarker } = await import("./cli-DCqy_wFa.js");
590
590
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
591
591
  const marker = await createResetMarker({
592
592
  projectId: basename(projectPath),
@@ -630,7 +630,7 @@ async function postMergeLifecycle(issueId, projectPath, sourceBranch, options) {
630
630
  async function transitionIssueToVerifyingOnMain(issueId, projectPath) {
631
631
  const [effectModule, issueLifecycleModule, githubModule, linearModule, rallyModule, errorsModule] = await Promise.all([
632
632
  import("effect"),
633
- import("./issue-lifecycle-nY4esZn8.js"),
633
+ import("./issue-lifecycle-CjYqQ669.js"),
634
634
  import("./github-client-VRiB6N-4.js"),
635
635
  import("./linear-client-BxKvL6U8.js"),
636
636
  import("./rally-client-X0bEEN2B.js"),
@@ -1366,4 +1366,4 @@ var init_merge_agent = __esmMin((() => {
1366
1366
  //#endregion
1367
1367
  export { init_git_activity as C, init_operations as S, scanGitPatterns as _, init_merge_agent as a, MainDivergedError as b, isSyncMainMainPreferredPath as c, parseAgentOutput as d, postMergeLifecycle as f, scanForConflictMarkers as g, salvageStrandedMerge as h, captureTmuxOutput as i, logMergeHistory as l, runProjectQualityGates as m, GIT_PATTERNS as n, isAutoCommitExcludedPath as o, resetPostMergeState as p, autoCommitWorkspaceChangesBeforeSync as r, isMergeAgentRunning as s, AUTO_COMMIT_EXCLUDED_PATHS as t, notifyTldrDaemon as u, sendMessageToAgent as v, listGitOperationsSync as w, gitPush as x, syncMainIntoWorkspace as y };
1368
1368
 
1369
- //# sourceMappingURL=merge-agent-BcgAYStl.js.map
1369
+ //# sourceMappingURL=merge-agent-C81xPIGd.js.map
@@ -0,0 +1,2 @@
1
+ import { c as triggerMerge } from "./workspaces-DXLDgXo2.js";
2
+ export { triggerMerge };
@@ -62,9 +62,9 @@ async function reconcileStaleSiblings(mergedIssueId, deps) {
62
62
  */
63
63
  async function runMergeTrainReconcile(mergedIssueId, opts = {}) {
64
64
  if (!(opts.enabled ?? isMergeTrainEnabled)()) return [];
65
- return reconcileStaleSiblings(mergedIssueId, opts.deps ?? (await import("./merge-train-deps-DBHsOWt9.js")).buildRealReconcileDeps());
65
+ return reconcileStaleSiblings(mergedIssueId, opts.deps ?? (await import("./merge-train-deps-Be5ElC_P.js")).buildRealReconcileDeps());
66
66
  }
67
67
  //#endregion
68
68
  export { runMergeTrainReconcile };
69
69
 
70
- //# sourceMappingURL=merge-train-DmxlYbEo.js.map
70
+ //# sourceMappingURL=merge-train-D3qzRccL.js.map
@@ -1,5 +1,5 @@
1
1
  import { Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-DPAieL_G.js";
2
- import { W as spawnRun, t as init_agents } from "./agents-DHvsjsuP.js";
2
+ import { W as spawnRun, t as init_agents } from "./agents-C7V4odQ6.js";
3
3
  import { c as init_review_status_sync, r as getAllReviewStatusesFromDb } from "./review-status-sync-BWHnrq-k.js";
4
4
  import { join } from "path";
5
5
  import { exec } from "child_process";
@@ -66,4 +66,4 @@ function buildRealReconcileDeps() {
66
66
  //#endregion
67
67
  export { buildRealReconcileDeps };
68
68
 
69
- //# sourceMappingURL=merge-train-deps-DBHsOWt9.js.map
69
+ //# sourceMappingURL=merge-train-deps-Be5ElC_P.js.map
@@ -1,8 +1,8 @@
1
1
  import { Gn as resolveProjectFromIssueSync, In as listProjects, Nn as init_projects } from "./config-yaml-DPAieL_G.js";
2
2
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-pcbf-e30.js";
3
3
  import { O as listSessionNames, x as init_tmux } from "./tmux-ePNhMIMU.js";
4
- import { c as init_review_status, s as getReviewStatusSync } from "./review-status-BQjqQXZG.js";
5
- import { Mn as getAgentState, _t as init_config, t as init_agents, vt as loadCloisterConfig } from "./agents-DHvsjsuP.js";
4
+ import { c as init_review_status, s as getReviewStatusSync } from "./review-status-B5ZASOo4.js";
5
+ import { Mn as getAgentState, _t as init_config, t as init_agents, vt as loadCloisterConfig } from "./agents-C7V4odQ6.js";
6
6
  import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-bpWs7Xyx.js";
7
7
  import { d as readPlanSync, i as findPlanSync, o as init_io } from "./io-Wy8YpFeP.js";
8
8
  import { _ as listPullRequestsForHead, f as init_github_app, p as isGitHubAppConfigured } from "./github-app-FMXgo3vK.js";
@@ -506,4 +506,4 @@ async function reconcileOrphanProposedSpecs(options = {}) {
506
506
  //#endregion
507
507
  export { spawnWorkAgentThroughAgentsEndpoint as a, reconcileOrphanProposedSpecs as i, handleOrphanProposedSpec as n, triggerRebuildAndStart as o, hasReviewPipelinePresence as r, findOrphanProposedSpecsForReconciler as t };
508
508
 
509
- //# sourceMappingURL=orphan-proposed-reconciler-Db8tUhce.js.map
509
+ //# sourceMappingURL=orphan-proposed-reconciler-Boq_XaRe.js.map
@@ -1,2 +1,2 @@
1
- import { n as handleOrphanProposedSpec } from "./orphan-proposed-reconciler-Db8tUhce.js";
1
+ import { n as handleOrphanProposedSpec } from "./orphan-proposed-reconciler-Boq_XaRe.js";
2
2
  export { handleOrphanProposedSpec };
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { Ft as resolveProjectForIssue, Ln as listProjectsSync, Nn as init_projects, Ot as init_record, jt as readIssueRecord } from "./config-yaml-DPAieL_G.js";
3
3
  import { c as backfillAgentsSync, d as init_agents, p as listAllAgentsSync } from "./briefing-freshness-CXhZdnB8.js";
4
- import { Z as listRunningAgents, t as init_agents$1 } from "./agents-DHvsjsuP.js";
4
+ import { Z as listRunningAgents, t as init_agents$1 } from "./agents-C7V4odQ6.js";
5
5
  import { Effect } from "effect";
6
6
  import { join } from "node:path";
7
7
  import { readdir } from "node:fs/promises";
@@ -194,7 +194,7 @@ function isIssueClosed(issue) {
194
194
  return false;
195
195
  }
196
196
  async function loadInFlightIssueIds(projects) {
197
- const { getSharedIssueService, startSharedIssueService } = await import("./issue-service-singleton-Bnqv1uaa.js");
197
+ const { getSharedIssueService, startSharedIssueService } = await import("./issue-service-singleton-B8iu_TKV.js");
198
198
  const issueService = getSharedIssueService();
199
199
  await startSharedIssueService({ skipPolling: true });
200
200
  const issues = issueService.getIssues({ includeCompleted: true });
@@ -340,4 +340,4 @@ __esmMin((() => {
340
340
  }))();
341
341
  export { reconstructCache, reconstructCacheAuto };
342
342
 
343
- //# sourceMappingURL=reconstruct-cache-_tDZ2D72.js.map
343
+ //# sourceMappingURL=reconstruct-cache-C2pCltOq.js.map
@@ -309,7 +309,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
309
309
  } catch {
310
310
  details.push("No continue.json retrieved from VM (skipped)");
311
311
  }
312
- const { getAgentStateSync, saveAgentStateSync } = await import("./agents-BIggLvi_.js");
312
+ const { getAgentStateSync, saveAgentStateSync } = await import("./agents-C-vqmKDi.js");
313
313
  const existing = getAgentStateSync(agentId);
314
314
  if (existing) {
315
315
  existing.workspace = existing.workspace || workspacePath;
@@ -328,7 +328,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
328
328
  lastActivity: (/* @__PURE__ */ new Date()).toISOString()
329
329
  });
330
330
  const { createReviewArtifactsForIssue } = await import("./review-artifacts-BGc69epg.js");
331
- const { setReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
331
+ const { setReviewStatusSync } = await import("./review-status-h7BXIA4z.js");
332
332
  const primaryArtifact = (await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath))).mergeSet?.repos.find((repo) => !!repo.artifactUrl);
333
333
  if (primaryArtifact?.artifactUrl) {
334
334
  setReviewStatusSync(issueId, { prUrl: primaryArtifact.artifactUrl });
@@ -386,4 +386,4 @@ async function reapCompletedRemoteAgents(opts = {}) {
386
386
  //#endregion
387
387
  export { reapCompletedRemoteAgents, refreshClaudeCredentialsForActiveRemoteAgents };
388
388
 
389
- //# sourceMappingURL=remote-completion-Bklh6loJ.js.map
389
+ //# sourceMappingURL=remote-completion-BmxD5UMQ.js.map
@@ -0,0 +1,3 @@
1
+ import { E as resumeAgent, T as init_resume } from "./agents-C7V4odQ6.js";
2
+ init_resume();
3
+ export { resumeAgent };
@@ -2,15 +2,16 @@ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { Ft as resolveProjectForIssue, Gr as sessionFilePath, Nt as readIssueRecordSync, Ot as init_record, Ur as packageRoot, Vr as init_paths, X as resolveModel, f as loadConfigSync, t as init_config_yaml, yr as AGENTS_DIR } from "./config-yaml-DPAieL_G.js";
3
3
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-pcbf-e30.js";
4
4
  import { C as isPaneDead, O as listSessionNames, w as killSession, x as init_tmux } from "./tmux-ePNhMIMU.js";
5
- import { c as init_review_status, s as getReviewStatusSync, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
5
+ import { c as init_review_status, s as getReviewStatusSync, y as setReviewStatusSync } from "./review-status-B5ZASOo4.js";
6
6
  import { d as init_agents, f as listAgentIdsByPrefixSync, m as removeAgentSync } from "./briefing-freshness-CXhZdnB8.js";
7
- import { Pn as getAgentStateSync, t as init_agents$1 } from "./agents-DHvsjsuP.js";
7
+ import { Pn as getAgentStateSync, t as init_agents$1 } from "./agents-C7V4odQ6.js";
8
8
  import { a as PAN_DIRNAME, p as init_types } from "./types-CE1m_daD.js";
9
9
  import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-BKG2ubt5.js";
10
10
  import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-DA9rvqsE.js";
11
- import { n as formatTier1Summary, o as init_review_context, t as buildReviewContext } from "./review-context-CCq56O_Y.js";
12
- import { a as resolveConflictGate, i as init_conflict_gate, r as getCachedConflictGateMergeability, t as buildRealConflictGateDeps } from "./conflict-gate-BhKvrPxn.js";
11
+ import { n as formatTier1Summary, o as init_review_context, t as buildReviewContext } from "./review-context-Dyo0tsBa.js";
12
+ import { a as resolveConflictGate, i as init_conflict_gate, r as getCachedConflictGateMergeability, t as buildRealConflictGateDeps } from "./conflict-gate-FFEvTDVA.js";
13
13
  import { Effect } from "effect";
14
+ import { existsSync } from "fs";
14
15
  import { dirname, join } from "path";
15
16
  import { mkdir, readFile, rm, writeFile } from "fs/promises";
16
17
  import { exec } from "child_process";
@@ -150,7 +151,7 @@ async function buildConvoyPromptPromise(opts) {
150
151
  }
151
152
  async function spawnReviewSubRoleForIssuePromise(opts) {
152
153
  try {
153
- const { saveAgentState, spawnRun, getAgentStateSync, getLatestSessionIdSync, resumeAgent } = await import("./agents-BIggLvi_.js");
154
+ const { saveAgentState, spawnRun, getAgentStateSync, getLatestSessionIdSync, resumeAgent } = await import("./agents-C-vqmKDi.js");
154
155
  const cfg = loadConfigSync().config;
155
156
  const outputPath = opts.outputPath ?? reviewerAgentOutputPath(opts.workspace, opts.runId, opts.subRole);
156
157
  const synthesisAgentId = opts.synthesisAgentId ?? `agent-${opts.issueId.toLowerCase()}-review`;
@@ -268,7 +269,7 @@ async function computeConvoyScope(issueId, workspace) {
268
269
  let carried = [];
269
270
  let scope = "changed";
270
271
  try {
271
- const { getReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
272
+ const { getReviewStatusSync } = await import("./review-status-h7BXIA4z.js");
272
273
  scope = resolveReReviewScope(issueId);
273
274
  const priorVerdicts = getReviewStatusSync(issueId)?.reviewerVerdicts;
274
275
  let changedFiles;
@@ -311,7 +312,7 @@ async function computeConvoyScope(issueId, workspace) {
311
312
  */
312
313
  async function forkParentSessionForReviewer(parentAgentId, workspace) {
313
314
  try {
314
- const { getLatestSessionIdSync } = await import("./agents-BIggLvi_.js");
315
+ const { getLatestSessionIdSync } = await import("./agents-C-vqmKDi.js");
315
316
  const parentSessionId = getLatestSessionIdSync(parentAgentId);
316
317
  if (!parentSessionId) return null;
317
318
  const src = sessionFilePath(workspace, parentSessionId);
@@ -355,13 +356,13 @@ async function launchConvoyReviewersPromise(params) {
355
356
  }
356
357
  }
357
358
  const cfg = loadConfigSync().config;
358
- const { getAgentStateSync } = await import("./agents-BIggLvi_.js");
359
+ const { getAgentStateSync } = await import("./agents-C-vqmKDi.js");
359
360
  const parentState = getAgentStateSync(params.synthesisAgentId);
360
361
  const reviewerResults = await Promise.all(params.inScope.map(async (subRole) => {
361
362
  const outputPath = reviewerAgentOutputPath(params.workspace, params.runId, subRole);
362
363
  let forkedSessionId;
363
364
  if (params.forkFromParent && parentState?.harness === "claude-code" && !params.harness) try {
364
- const { getLatestSessionIdSync } = await import("./agents-BIggLvi_.js");
365
+ const { getLatestSessionIdSync } = await import("./agents-C-vqmKDi.js");
365
366
  const reviewerModel = params.model ?? resolveModel("review", subRole, cfg);
366
367
  if (!!!getLatestSessionIdSync(reviewerAgentId(params.issueId, subRole)) && reviewerModel === parentState.model) {
367
368
  forkedSessionId = await forkParentSessionForReviewer(params.synthesisAgentId, params.workspace) ?? void 0;
@@ -382,7 +383,7 @@ async function launchConvoyReviewersPromise(params) {
382
383
  allowHost: params.allowHost ?? false
383
384
  }));
384
385
  if (!result.success) try {
385
- const { messageAgent } = await import("./agents-BIggLvi_.js");
386
+ const { messageAgent } = await import("./agents-C-vqmKDi.js");
386
387
  await messageAgent(params.synthesisAgentId, `REVIEWER_FAILED ${subRole} ${result.error ?? result.message}`);
387
388
  } catch (signalErr) {
388
389
  console.warn(`[review-agent] Failed to signal ${subRole} spawn failure to ${params.synthesisAgentId}:`, signalErr);
@@ -409,7 +410,7 @@ async function launchConvoyReviewersPromise(params) {
409
410
  async function handleReviewDiscoveryReady(issueId, opts = {}) {
410
411
  const normalized = issueId.toUpperCase();
411
412
  const parentId = `agent-${normalized.toLowerCase()}-review`;
412
- const { saveAgentState, getAgentStateSync } = await import("./agents-BIggLvi_.js");
413
+ const { saveAgentState, getAgentStateSync } = await import("./agents-C-vqmKDi.js");
413
414
  const parent = getAgentStateSync(parentId);
414
415
  if (!parent) return {
415
416
  success: false,
@@ -734,13 +735,14 @@ async function spawnReviewRoleForIssuePromise(opts) {
734
735
  if ((await Effect.runPromise(listSessionNames())).includes(reviewSessionName)) {
735
736
  const paneDead = await Effect.runPromise(isPaneDead(reviewSessionName));
736
737
  let staleRunId = false;
738
+ let currentRunId;
737
739
  if (!paneDead && !opts.force) try {
738
740
  const { stdout } = await execAsync("git rev-parse --short=8 HEAD", {
739
741
  cwd: opts.workspace,
740
742
  encoding: "utf-8",
741
743
  timeout: 1e4
742
744
  });
743
- const currentRunId = `agent-${opts.issueId.toLowerCase()}-review-${stdout.trim()}`;
745
+ currentRunId = `agent-${opts.issueId.toLowerCase()}-review-${stdout.trim()}`;
744
746
  const synthReviewRunId = getAgentStateSync(reviewSessionName)?.reviewRunId;
745
747
  if (!synthReviewRunId || synthReviewRunId !== currentRunId) {
746
748
  staleRunId = true;
@@ -754,7 +756,11 @@ async function spawnReviewRoleForIssuePromise(opts) {
754
756
  const status = getReviewStatusSync(opts.issueId);
755
757
  const terminal = status?.reviewStatus === "passed" || status?.reviewStatus === "blocked" || status?.reviewStatus === "failed";
756
758
  const newerRequest = !!status?.reviewRequestedAt && (!status.reviewSpawnedAt || status.reviewRequestedAt > status.reviewSpawnedAt);
757
- finishedIdle = terminal && newerRequest;
759
+ let reportWritten = false;
760
+ if (currentRunId) try {
761
+ reportWritten = existsSync(join(opts.workspace, PAN_DIRNAME, "review", currentRunId, "review.md"));
762
+ } catch {}
763
+ finishedIdle = (terminal || reportWritten) && newerRequest;
758
764
  if (finishedIdle) console.log(`[review-agent] ${reviewSessionName} is finished-idle (verdict ${status?.reviewStatus}, newer request pending) — warm-reusing for the new review cycle`);
759
765
  else if (terminal) console.log(`[review-agent] ${reviewSessionName} has a terminal verdict (${status?.reviewStatus}) and no newer request — treating this dispatch as a stale duplicate; leaving the verdict intact`);
760
766
  } catch (statusErr) {
@@ -830,7 +836,7 @@ async function spawnReviewRoleForIssuePromise(opts) {
830
836
  });
831
837
  } catch {}
832
838
  try {
833
- const { spawnRun, saveAgentState, getAgentState, getAgentStateSync, getLatestSessionIdSync, resumeAgent, wipeAgentStateDirs } = await import("./agents-BIggLvi_.js");
839
+ const { spawnRun, saveAgentState, getAgentState, getAgentStateSync, getLatestSessionIdSync, resumeAgent, wipeAgentStateDirs } = await import("./agents-C-vqmKDi.js");
834
840
  const workAgentState = await Effect.runPromise(getAgentState(`agent-${opts.issueId.toLowerCase()}`));
835
841
  const allowHost = opts.allowHost === true || workAgentState?.hostOverride === true;
836
842
  let headSha = "unknown";
@@ -936,6 +942,7 @@ async function spawnReviewRoleForIssuePromise(opts) {
936
942
  const resumed = getAgentStateSync(reviewAgentId);
937
943
  if (resumed) {
938
944
  resumed.reviewRunId = runId;
945
+ resumed.reviewDeadlineAt = new Date(Date.now() + PARENT_REVIEW_TIMEOUT_MS).toISOString();
939
946
  await Effect.runPromise(saveAgentState(resumed));
940
947
  }
941
948
  } catch {}
@@ -966,6 +973,7 @@ async function spawnReviewRoleForIssuePromise(opts) {
966
973
  ...allowHost ? { allowHost: true } : {}
967
974
  });
968
975
  run.reviewRunId = runId;
976
+ run.reviewDeadlineAt = new Date(Date.now() + PARENT_REVIEW_TIMEOUT_MS).toISOString();
969
977
  try {
970
978
  await Effect.runPromise(saveAgentState(run));
971
979
  } catch (saveErr) {
@@ -1152,7 +1160,7 @@ async function purgeReviewAgentsForIssue(projectKey, issueId) {
1152
1160
  removed
1153
1161
  };
1154
1162
  }
1155
- var execAsync, spawnReviewRoleForIssue, killAllReviewerSessions, killAllReviewSessions;
1163
+ var execAsync, PARENT_REVIEW_TIMEOUT_MS, spawnReviewRoleForIssue, killAllReviewerSessions, killAllReviewSessions;
1156
1164
  var init_review_agent = __esmMin((() => {
1157
1165
  init_tmux();
1158
1166
  init_activity_logger();
@@ -1169,11 +1177,12 @@ var init_review_agent = __esmMin((() => {
1169
1177
  init_types();
1170
1178
  init_agents$1();
1171
1179
  execAsync = promisify(exec);
1180
+ PARENT_REVIEW_TIMEOUT_MS = 2700 * 1e3;
1172
1181
  spawnReviewRoleForIssue = (opts) => Effect.promise(() => spawnReviewRoleForIssuePromise(opts));
1173
1182
  killAllReviewerSessions = (projectKey, issueId) => Effect.promise(() => killAllReviewerSessionsPromise(projectKey, issueId));
1174
1183
  killAllReviewSessions = () => Effect.promise(() => killAllReviewSessionsPromise());
1175
1184
  }));
1176
1185
  //#endregion
1177
- export { killAllReviewSessions as a, resolveReviewMode as c, handleReviewDiscoveryReady as d, resolveReReviewScope as f, isReviewStaleSync as i, spawnReviewRoleForIssue as l, reviewResumeDecision as m, isExtendedReviewEnabled as n, killAllReviewerSessions as o, spawnReviewSubRoleForIssue as p, isReviewSessionForIssue as r, purgeReviewAgentsForIssue as s, init_review_agent as t, buildConvoyPrompt as u };
1186
+ export { isReviewStaleSync as a, purgeReviewAgentsForIssue as c, buildConvoyPrompt as d, handleReviewDiscoveryReady as f, reviewResumeDecision as h, isReviewSessionForIssue as i, resolveReviewMode as l, spawnReviewSubRoleForIssue as m, init_review_agent as n, killAllReviewSessions as o, resolveReReviewScope as p, isExtendedReviewEnabled as r, killAllReviewerSessions as s, PARENT_REVIEW_TIMEOUT_MS as t, spawnReviewRoleForIssue as u };
1178
1187
 
1179
- //# sourceMappingURL=review-agent-phzqNqIs.js.map
1188
+ //# sourceMappingURL=review-agent-D6P6d3pz.js.map
@@ -0,0 +1,3 @@
1
+ import { a as isReviewStaleSync, c as purgeReviewAgentsForIssue, d as buildConvoyPrompt, f as handleReviewDiscoveryReady, h as reviewResumeDecision, i as isReviewSessionForIssue, l as resolveReviewMode, m as spawnReviewSubRoleForIssue, n as init_review_agent, o as killAllReviewSessions, p as resolveReReviewScope, r as isExtendedReviewEnabled, s as killAllReviewerSessions, t as PARENT_REVIEW_TIMEOUT_MS, u as spawnReviewRoleForIssue } from "./review-agent-D6P6d3pz.js";
2
+ init_review_agent();
3
+ export { PARENT_REVIEW_TIMEOUT_MS, buildConvoyPrompt, handleReviewDiscoveryReady, isExtendedReviewEnabled, isReviewSessionForIssue, isReviewStaleSync, killAllReviewSessions, killAllReviewerSessions, purgeReviewAgentsForIssue, resolveReReviewScope, resolveReviewMode, reviewResumeDecision, spawnReviewRoleForIssue, spawnReviewSubRoleForIssue };
@@ -4,7 +4,7 @@ import { a as PAN_DIRNAME, p as init_types } from "./types-CE1m_daD.js";
4
4
  import { i as findPlanSync, o as init_io, u as readPlan } from "./io-Wy8YpFeP.js";
5
5
  import { d as getDevrootPathSync, f as init_config } from "./config-oWoKf5jO.js";
6
6
  import { a as init_lifecycle_io, i as findVBriefByIssueSync } from "./lifecycle-io-DSrv9xGh.js";
7
- import { n as init_review_verdict_feedback } from "./review-verdict-feedback-wqnikhMK.js";
7
+ import { n as init_review_verdict_feedback } from "./review-verdict-feedback-B70VbfRL.js";
8
8
  import { n as init_github_pr_lookup, r as lookupPullRequestNumberForBranch } from "./github-pr-lookup-t8X8R0c0.js";
9
9
  import { Effect } from "effect";
10
10
  import { existsSync } from "fs";
@@ -700,4 +700,4 @@ var init_review_context = __esmMin((() => {
700
700
  //#endregion
701
701
  export { getDiffStat as a, getDiffBase as i, formatTier1Summary as n, init_review_context as o, getChangedFiles as r, buildReviewContext as t };
702
702
 
703
- //# sourceMappingURL=review-context-CCq56O_Y.js.map
703
+ //# sourceMappingURL=review-context-Dyo0tsBa.js.map
@@ -377,6 +377,18 @@ async function buildIssueRecord(project, issueId, opts = {}) {
377
377
  };
378
378
  }
379
379
  /**
380
+ * PAN-2587: never regress the pipeline block during a whole-record rebuild. A
381
+ * concurrent writer (e.g. a reviewer's verdict landing between the rebuild's
382
+ * `existing` snapshot and its write) may have put a NEWER pipeline on disk than
383
+ * the status the rebuild projects — observed clobbering PAN-399's passed
384
+ * verdict back to a pre-verdict snapshot. Same newer-wins rule (ISO `updatedAt`
385
+ * comparison) the journal readers use.
386
+ */
387
+ function pickNewerPipeline(rebuilt, fresh) {
388
+ if (!fresh?.updatedAt || !rebuilt?.updatedAt) return rebuilt;
389
+ return rebuilt.updatedAt < fresh.updatedAt ? fresh : rebuilt;
390
+ }
391
+ /**
380
392
  * PAN-1908 / PAN-1919: rebuild and queue the per-issue permanent record for a
381
393
  * given issue. Fire-and-forget: failures are logged, never thrown, so
382
394
  * review-status writes stay synchronous and fast.
@@ -400,6 +412,7 @@ async function updateIssueRecordForIssue(issueId, reviewStatus) {
400
412
  ...record.statusOverrides,
401
413
  ...fresh.statusOverrides
402
414
  };
415
+ record.pipeline = pickNewerPipeline(record.pipeline, fresh?.pipeline);
403
416
  queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
404
417
  });
405
418
  return true;
@@ -1056,7 +1069,7 @@ function resetPipelineVerdictsForWorkStartSync(issueId) {
1056
1069
  */
1057
1070
  async function deliverReviewVerdictFeedbackHostSide(issueId, status) {
1058
1071
  try {
1059
- const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-cZh9Wi9G.js");
1072
+ const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-CorgH49f.js");
1060
1073
  if ((await Effect.runPromise(deliverReviewVerdictFeedback({
1061
1074
  issueId,
1062
1075
  verdict: status.reviewStatus === "failed" ? "failed" : "blocked",
@@ -1105,7 +1118,7 @@ async function dispatchReviewHostSide(issueId, prUrl) {
1105
1118
  });
1106
1119
  branch = stdout.trim() || branch;
1107
1120
  } catch {}
1108
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
1121
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DTINEffB.js");
1109
1122
  if ((await Effect.runPromise(spawnReviewRoleForIssue({
1110
1123
  issueId,
1111
1124
  workspace,
@@ -1165,10 +1178,10 @@ async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
1165
1178
  if (r.success) feedbackPath = r.filePath;
1166
1179
  } catch {}
1167
1180
  const message = `SPECIALIST FEEDBACK: test-agent reported FAILED for ${issueId}.\n\n${feedbackPath ? `MUST READ: ${feedbackPath}\n\n` : ""}${notes ? `${notes.slice(0, 400)}\n\n` : ""}Fix the failing tests, commit and push, then re-run pan done ${issueId}. Do NOT stop at the prompt.`;
1168
- const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-C4DaDSZ8.js");
1181
+ const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-nQSM6ygL.js");
1169
1182
  const target = await resolveIssueFeedbackTarget(issueId);
1170
1183
  if ("agentId" in target) {
1171
- const { messageAgent } = await import("./agents-BIggLvi_.js");
1184
+ const { messageAgent } = await import("./agents-C-vqmKDi.js");
1172
1185
  await messageAgent(target.agentId, message);
1173
1186
  console.log(`[review-status] delivered test failure to ${target.agentId} for ${issueId} (host-side)`);
1174
1187
  } else await surfaceIssueFeedbackNeedsYou(issueId, target.reason, {
@@ -1401,4 +1414,4 @@ var init_review_status = __esmMin((() => {
1401
1414
  //#endregion
1402
1415
  export { listOverdeckAgentStatesSync as A, init_record_lock as C, AGENT_COLUMNS_FOR_DB as D, readReviewStatusMap as E, stateToOverdeckParamsForDb as M, getOverdeckAgentStateSync as O, needsReviewDispatch as S, init_review_status_source as T, setDeaconIgnored as _, fixStuckReadyForMerge as a, verificationSatisfied as b, init_review_status as c, loadReviewStatusesForIssues as d, markWorkspaceStuck as f, setAutoMerge as g, reviewGatesPassedSync as h, fixStuckCommentedReviews as i, saveOverdeckAgentStateSync as j, init_agent_state_sync as k, loadReadyForMergeFlags as l, resetPipelineVerdictsForWorkStartSync as m, clearReviewStatus as n, getReviewStatus as o, mergeGateEligibility as p, clearStuckMergeStatuses as r, getReviewStatusSync as s, ReviewStatusError as t, loadReviewStatuses as u, setReviewStatus as v, withIssueRecordLock as w, init_review_dispatch_decision as x, setReviewStatusSync as y };
1403
1416
 
1404
- //# sourceMappingURL=review-status-BQjqQXZG.js.map
1417
+ //# sourceMappingURL=review-status-B5ZASOo4.js.map