@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
@@ -2,21 +2,21 @@ import { Br as getOverdeckHome, Dt as getProjectConfigFromWorkspacePath, Ft as r
2
2
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-pcbf-e30.js";
3
3
  import { D as sql, E as like, S as gte, _ as integer, a as EventBus, b as and, f as init_infra, g as real, h as text, i as DbLive, m as sqliteTable, n as CostArchiveLive, o as EventBusLive, p as init_sqlite_core, r as Db, t as CostArchive, v as init_drizzle_orm, x as eq, y as desc } from "./infra-CpKlYZA9.js";
4
4
  import { L as sessionExists, R as sessionExistsSync, w as killSession, x as init_tmux } from "./tmux-ePNhMIMU.js";
5
- import { c as init_review_status, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
5
+ import { c as init_review_status, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-B5ZASOo4.js";
6
6
  import { n as init_issues, t as IssueId } from "./issues-ChNcfHta.js";
7
7
  import { a as getAllBudgetsSync, i as deleteBudgetSync, n as checkBudgetSync, r as createBudgetSync, s as init_cost } from "./cost-C2CuA66z.js";
8
- import { An as getAgentDir, D as init_context_overflow, Jn as saveAgentStateSync, Mn as getAgentState, Pn as getAgentStateSync, Q as listRunningAgentsSync, U as spawnAgent, _t as init_config, br as parseOhmypiSessionCostResultSync, gr as saveAgentRuntimeState, gt as getHealthThresholdsMs, k as isContextOverflowTail, mr as getAgentRuntimeStateSync, q as stopAgentSync, t as init_agents, yr as init_ohmypi_parser, yt as loadCloisterConfigSync } from "./agents-DHvsjsuP.js";
8
+ import { An as getAgentDir, D as init_context_overflow, Jn as saveAgentStateSync, Mn as getAgentState, Pn as getAgentStateSync, Q as listRunningAgentsSync, U as spawnAgent, _t as init_config, br as parseOhmypiSessionCostResultSync, gr as saveAgentRuntimeState, gt as getHealthThresholdsMs, k as isContextOverflowTail, mr as getAgentRuntimeStateSync, q as stopAgentSync, t as init_agents, yr as init_ohmypi_parser, yt as loadCloisterConfigSync } from "./agents-C7V4odQ6.js";
9
9
  import { i as parseCodexSessionSync, n as init_codex_parser, r as parseCodexSessionCostEventsSync } from "./behavior-By-2Wipv.js";
10
10
  import { _ as init_tier_metrics, c as getDailyTrendsSync, d as init_cost_sync, h as deriveTieredAgentCostRole, t as getAgentDailyCostSync } from "./cost-sync-8lkDeL9g.js";
11
11
  import { c as requireModelOverrideSync, o as init_model_validation } from "./state-home-Bgj7i-C7.js";
12
12
  import { _ as setDeaconGloballyPaused, c as isCloisterSpawnsPausedSync, g as setCloisterSpawnsPausedSync, s as init_control_settings, x as setFlywheelGloballyPaused } from "./control-settings-BMqUkXmR.js";
13
13
  import { n as checkHookSync, p as init_hooks } from "./hooks-CmHFSj_Z.js";
14
14
  import { r as isRoleTerminal, t as init_reap_terminal_sessions } from "./reap-terminal-sessions-CAmURC2h.js";
15
- import { C as getLastPatrolResult, D as isDeaconRunning, Lt as getRuntimeForAgent, N as runPatrol, R as startDeacon, S as getDeaconStatus, n as assessDeaconPatrolFreshness, x as getDeaconLogs, z as stopDeacon } from "./deacon-j3qSZ7--.js";
16
- import "./flywheel-ClMjGW_u.js";
15
+ import { C as getLastPatrolResult, D as isDeaconRunning, Lt as getRuntimeForAgent, N as runPatrol, R as startDeacon, S as getDeaconStatus, n as assessDeaconPatrolFreshness, x as getDeaconLogs, z as stopDeacon } from "./deacon-CGHl90eC.js";
16
+ import "./flywheel-BLoVNtJV.js";
17
17
  import { n as renderPrompt, t as init_prompts } from "./prompts-CelsUdrx.js";
18
18
  import { r as writeHealthEvent } from "./health-events-DaLX4-0a.js";
19
- import { O as init_specialists, T as getTmuxSessionName } from "./specialists-BYi0k8CZ.js";
19
+ import { O as init_specialists, T as getTmuxSessionName } from "./specialists-nZ0mRwpZ.js";
20
20
  import { t as withBdMutex } from "./bd-mutex-BItGvLQ8.js";
21
21
  import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BO84g03t.js";
22
22
  import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-DA9rvqsE.js";
@@ -2194,7 +2194,7 @@ async function onIssueStateChangePromise(issueId, newState) {
2194
2194
  });
2195
2195
  return;
2196
2196
  }
2197
- const { getReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
2197
+ const { getReviewStatusSync } = await import("./review-status-h7BXIA4z.js");
2198
2198
  if (getReviewStatusSync(normalizedIssueId)?.mergeStatus === "merged") {
2199
2199
  const message = `${normalizedIssueId}: skipping ${role} dispatch — merge already landed (merge_status='merged' is terminal)`;
2200
2200
  console.log(`[cloister] ${message}`);
@@ -2261,7 +2261,7 @@ async function onIssueStateChangePromise(issueId, newState) {
2261
2261
  return;
2262
2262
  }
2263
2263
  const branch = `feature/${normalizedIssueId.toLowerCase()}`;
2264
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
2264
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DTINEffB.js");
2265
2265
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
2266
2266
  issueId: normalizedIssueId,
2267
2267
  workspace,
@@ -2279,7 +2279,7 @@ async function onIssueStateChangePromise(issueId, newState) {
2279
2279
  }
2280
2280
  if (role === "test") {
2281
2281
  const branch = `feature/${normalizedIssueId.toLowerCase()}`;
2282
- const { dispatchTestAgentAndNotify } = await import("./test-agent-queue-qfsq6uaC.js");
2282
+ const { dispatchTestAgentAndNotify } = await import("./test-agent-queue-B_ukPyIK.js");
2283
2283
  await Effect.runPromise(dispatchTestAgentAndNotify(normalizedIssueId, workspace ?? void 0, branch));
2284
2284
  const message = `${normalizedIssueId}: test role dispatched from lifecycle state '${newState}'`;
2285
2285
  console.log(`[cloister] ${message}`);
@@ -2291,7 +2291,7 @@ async function onIssueStateChangePromise(issueId, newState) {
2291
2291
  });
2292
2292
  return;
2293
2293
  }
2294
- const { spawnRun } = await import("./agents-BIggLvi_.js");
2294
+ const { spawnRun } = await import("./agents-C-vqmKDi.js");
2295
2295
  const message = `${normalizedIssueId}: ${role} role started from lifecycle state '${newState}' as ${(await spawnRun(normalizedIssueId, role, { prompt: buildReactiveRolePrompt(normalizedIssueId, newState, role) })).id}`;
2296
2296
  console.log(`[cloister] ${message}`);
2297
2297
  emitActivityEntrySync({
@@ -2369,14 +2369,14 @@ async function handleCloisterDomainEventPromise(event) {
2369
2369
  if (event.type === "agent.stopped") {
2370
2370
  const agentId = event.payload?.agentId;
2371
2371
  if (agentId) {
2372
- const { handleAgentStoppedEvent, handleAgentStoppedForOrphanReviewerSessions } = await import("./deacon-Cv2RMfHs.js");
2372
+ const { handleAgentStoppedEvent, handleAgentStoppedForOrphanReviewerSessions } = await import("./deacon-DMPh40Im.js");
2373
2373
  const { handleAgentLifecycleEventForIdleStack } = await import("./idle-stack-reaper-DdnERp3G.js");
2374
2374
  handleAgentLifecycleEventForIdleStack(agentId);
2375
2375
  const slotMatch = /^agent-(.+)-slot-\d+$/.exec(agentId);
2376
2376
  await Promise.all([
2377
2377
  handleAgentStoppedEvent(agentId),
2378
2378
  handleAgentStoppedForOrphanReviewerSessions(agentId),
2379
- slotMatch ? (await import("./deacon-swarm-D1iAUX-P.js")).coordinateSwarmSlots({ issueId: slotMatch[1].toUpperCase() }) : Promise.resolve([])
2379
+ slotMatch ? (await import("./deacon-swarm-CVTiNL0N.js")).coordinateSwarmSlots({ issueId: slotMatch[1].toUpperCase() }) : Promise.resolve([])
2380
2380
  ]);
2381
2381
  }
2382
2382
  return;
@@ -2389,7 +2389,7 @@ async function handleCloisterDomainEventPromise(event) {
2389
2389
  if (event.type === "agent.heartbeat_dead") {
2390
2390
  const agentId = event.payload?.agentId;
2391
2391
  if (agentId) {
2392
- const { handleAgentHeartbeatDeadEvent } = await import("./deacon-Cv2RMfHs.js");
2392
+ const { handleAgentHeartbeatDeadEvent } = await import("./deacon-DMPh40Im.js");
2393
2393
  await handleAgentHeartbeatDeadEvent(agentId, "event");
2394
2394
  }
2395
2395
  return;
@@ -2398,7 +2398,7 @@ async function handleCloisterDomainEventPromise(event) {
2398
2398
  const payload = event.payload;
2399
2399
  const issueId = payload?.issueId;
2400
2400
  if (issueId) {
2401
- const { handleReviewCoordinatorDied } = await import("./deacon-Cv2RMfHs.js");
2401
+ const { handleReviewCoordinatorDied } = await import("./deacon-DMPh40Im.js");
2402
2402
  await handleReviewCoordinatorDied(issueId, payload?.sessionName ?? "", payload?.reason ?? "");
2403
2403
  }
2404
2404
  return;
@@ -2406,7 +2406,7 @@ async function handleCloisterDomainEventPromise(event) {
2406
2406
  if (event.type === "work.completed") {
2407
2407
  const issueId = event.payload?.issueId;
2408
2408
  if (issueId) {
2409
- const { handleWorkCompleted } = await import("./deacon-Cv2RMfHs.js");
2409
+ const { handleWorkCompleted } = await import("./deacon-DMPh40Im.js");
2410
2410
  await handleWorkCompleted(issueId);
2411
2411
  }
2412
2412
  }
@@ -2417,12 +2417,12 @@ async function handleCloisterDomainEventPromise(event) {
2417
2417
  const status = payload?.status?.toLowerCase();
2418
2418
  if (issueId) {
2419
2419
  if (canonicalStatus === "closed" || status === "closed") {
2420
- const { handleIssueStatusChangedClosed } = await import("./closed-issue-reaper-BLCQwTpF.js");
2420
+ const { handleIssueStatusChangedClosed } = await import("./closed-issue-reaper-VSTSTROK.js");
2421
2421
  await handleIssueStatusChangedClosed(issueId);
2422
2422
  return;
2423
2423
  }
2424
2424
  if (canonicalStatus === "todo" || status === "planned" || status === "todo") {
2425
- const { handleOrphanProposedSpec } = await import("./orphan-proposed-reconciler-mXV--tcB.js");
2425
+ const { handleOrphanProposedSpec } = await import("./orphan-proposed-reconciler-C0sPnDq_.js");
2426
2426
  await handleOrphanProposedSpec(issueId);
2427
2427
  }
2428
2428
  }
@@ -2558,7 +2558,7 @@ var CloisterService = class {
2558
2558
  let clearedSpecialistCount = 0;
2559
2559
  try {
2560
2560
  if (existsSync(AGENTS_DIR)) {
2561
- const { isRunning: isSpecialistRunning } = await import("./specialists-F2uMO4QS.js");
2561
+ const { isRunning: isSpecialistRunning } = await import("./specialists-DeZx9xom.js");
2562
2562
  const entries = readdirSync(AGENTS_DIR, { withFileTypes: true });
2563
2563
  for (const entry of entries) {
2564
2564
  if (!entry.isDirectory()) continue;
@@ -2594,7 +2594,7 @@ var CloisterService = class {
2594
2594
  try {
2595
2595
  const reviewStatuses = loadReviewStatuses();
2596
2596
  const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
2597
- const { getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-F2uMO4QS.js");
2597
+ const { getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-DeZx9xom.js");
2598
2598
  const activeReviewIssues = /* @__PURE__ */ new Set();
2599
2599
  try {
2600
2600
  const projSpecs = await getAllProjectSpecialistStatuses();
@@ -2605,7 +2605,7 @@ var CloisterService = class {
2605
2605
  }
2606
2606
  const globalRs = getAgentRuntimeStateSync(getTmuxSessionName("review-agent"));
2607
2607
  if (globalRs?.state === "active" && globalRs.currentIssue) activeReviewIssues.add(globalRs.currentIssue.toUpperCase());
2608
- const { listRunningAgents } = await import("./agents-BIggLvi_.js");
2608
+ const { listRunningAgents } = await import("./agents-C-vqmKDi.js");
2609
2609
  const agents = await Effect.runPromise(listRunningAgents());
2610
2610
  for (const agent of agents) {
2611
2611
  if (agent.status === "stopped" || agent.status === "error") continue;
@@ -2648,7 +2648,7 @@ var CloisterService = class {
2648
2648
  continue;
2649
2649
  }
2650
2650
  const branch = `feature/${issueId.toLowerCase()}`;
2651
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
2651
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DTINEffB.js");
2652
2652
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
2653
2653
  issueId,
2654
2654
  workspace,
@@ -2947,7 +2947,7 @@ var CloisterService = class {
2947
2947
  if (retryCount === Infinity) this.processedCompletions.delete(dir.name);
2948
2948
  else if (retryCount >= 3) continue;
2949
2949
  const issueId = dir.name.replace("agent-", "").toUpperCase();
2950
- const { getReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
2950
+ const { getReviewStatusSync } = await import("./review-status-h7BXIA4z.js");
2951
2951
  const existingReview = getReviewStatusSync(issueId);
2952
2952
  if (existingReview && ["reviewing", "passed"].includes(existingReview.reviewStatus || "")) {
2953
2953
  console.log(`🔔 Cloister: Completion marker for ${issueId} — review already ${existingReview.reviewStatus}, marking processed`);
@@ -3056,7 +3056,7 @@ var CloisterService = class {
3056
3056
  ineffective
3057
3057
  });
3058
3058
  if (ineffective >= 4) {
3059
- const { setAgentPausedSync } = await import("./agent-state-xk_G8t90.js");
3059
+ const { setAgentPausedSync } = await import("./agent-state-BUANcaA7.js");
3060
3060
  try {
3061
3061
  setAgentPausedSync(agentId, `needs-you: idle-alive — no observable progress across ${ineffective + 1} pokes (idle-alive escalation)`);
3062
3062
  this.emit({
@@ -3138,7 +3138,7 @@ var CloisterService = class {
3138
3138
  if (skipReason) {
3139
3139
  let recoverUnfinishedOneShot = false;
3140
3140
  if (ONE_SHOT_ROLES.has(agentState.role) && agentState.sessionId && agentState.issueId) try {
3141
- const { getReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
3141
+ const { getReviewStatusSync } = await import("./review-status-h7BXIA4z.js");
3142
3142
  const status = getReviewStatusSync(agentState.issueId);
3143
3143
  recoverUnfinishedOneShot = !(status ? isRoleTerminal(agentState.role, {
3144
3144
  reviewStatus: status.reviewStatus,
@@ -3615,4 +3615,4 @@ function handleCloisterDomainEvent(event) {
3615
3615
  //#endregion
3616
3616
  export { performHandoff as a, getAgentsNeedingAttention as c, CostResolverLive as d, CostWriter as f, checkAllTriggers as i, CostDoorLive as l, readCloisterStateFile as n, generateHealthSummary as o, setCloisterEventStoreProvider as r, getAgentHealth as s, getCloisterService as t, CostResolver as u };
3617
3617
 
3618
- //# sourceMappingURL=service-CILd-uOt.js.map
3618
+ //# sourceMappingURL=service-HKDrIy0h.js.map
@@ -1,3 +1,3 @@
1
- import { a as runModelSummary, c as truncateHeadTail, i as parseEntries, n as generateSummaryFromPrompt, o as serializeConversation, r as init_smart_compaction, s as summarizeSerializedText, t as generateSmartSummary } from "./smart-compaction-CrP90OFE.js";
1
+ import { a as runModelSummary, c as truncateHeadTail, i as parseEntries, n as generateSummaryFromPrompt, o as serializeConversation, r as init_smart_compaction, s as summarizeSerializedText, t as generateSmartSummary } from "./smart-compaction-uke1npUz.js";
2
2
  init_smart_compaction();
3
3
  export { generateSmartSummary, generateSummaryFromPrompt, parseEntries, runModelSummary, serializeConversation, summarizeSerializedText, truncateHeadTail };
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { cr as FsError, mr as ProcessSpawnError, vr as init_errors } from "./config-yaml-DPAieL_G.js";
3
3
  import { a as getHarnessBehavior } from "./src-fgbU-jJ-.js";
4
- import { D as init_context_overflow, O as isContextOverflowError, ln as getProviderEnvForModel, sn as buildSpawnEnvForModel, t as init_agents } from "./agents-DHvsjsuP.js";
4
+ import { D as init_context_overflow, O as isContextOverflowError, ln as getProviderEnvForModel, sn as buildSpawnEnvForModel, t as init_agents } from "./agents-C7V4odQ6.js";
5
5
  import { t as init_behavior } from "./behavior-By-2Wipv.js";
6
6
  import { a as init_claude_permissions, i as getClaudePermissionFlagsSync } from "./claude-permissions-DrRAs_0F.js";
7
7
  import { n as recordBackgroundAiCost, t as init_cost } from "./cost-DaOG8sUB.js";
@@ -850,4 +850,4 @@ Be thorough. Preserve exact file paths, function names, error messages, and code
850
850
  //#endregion
851
851
  export { runModelSummary as a, truncateHeadTail as c, parseEntries as i, generateSummaryFromPrompt as n, serializeConversation as o, init_smart_compaction as r, summarizeSerializedText as s, generateSmartSummary as t };
852
852
 
853
- //# sourceMappingURL=smart-compaction-CrP90OFE.js.map
853
+ //# sourceMappingURL=smart-compaction-uke1npUz.js.map
@@ -1,2 +1,2 @@
1
- import { o as spawnPlanningSession } from "./spawn-planning-session-BmJWHSCu.js";
1
+ import { o as spawnPlanningSession } from "./spawn-planning-session-CXc0NkwV.js";
2
2
  export { spawnPlanningSession };
@@ -2,11 +2,11 @@ import { Dt as getProjectConfigFromWorkspacePath, Ft as resolveProjectForIssue,
2
2
  import { L as sessionExists, W as BLANKED_PROVIDER_ENV, d as exactPaneTarget, o as createSession, q as init_child_env, r as buildTmuxCommandString, w as killSession, x as init_tmux, z as setOption } from "./tmux-ePNhMIMU.js";
3
3
  import { a as getHarnessBehavior } from "./src-fgbU-jJ-.js";
4
4
  import { n as ensureSessionContextBriefingFile, r as init_briefing_freshness } from "./briefing-freshness-CXhZdnB8.js";
5
- import { Gt as getAgentRuntimeBaseCommand, It as retrieveSpawnTimeMemoryContext, Jn as saveAgentStateSync, Kt as getCodexLauncherFields, Pn as getAgentStateSync, Qt as roleAgentDefinitionPath, Xt as init_runtime_command, qt as getOhmypiLauncherFields, t as init_agents, un as getProviderExportsForModel, wt as deliverInitialPromptWithRetry } from "./agents-DHvsjsuP.js";
5
+ import { Gt as getAgentRuntimeBaseCommand, It as retrieveSpawnTimeMemoryContext, Jn as saveAgentStateSync, Kt as getCodexLauncherFields, Pn as getAgentStateSync, Qt as roleAgentDefinitionPath, Xt as init_runtime_command, qt as getOhmypiLauncherFields, t as init_agents, un as getProviderExportsForModel, wt as deliverInitialPromptWithRetry } from "./agents-C7V4odQ6.js";
6
6
  import { t as init_behavior } from "./behavior-By-2Wipv.js";
7
7
  import { a as init_launcher_generator, i as generateLauncherScriptSync } from "./state-home-Bgj7i-C7.js";
8
8
  import { h as workspaceContextFile, o as init_layers } from "./layers-vdvlpFki.js";
9
- import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-DKeSVsJL.js";
9
+ import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-B3f9G1Kp.js";
10
10
  import { c as ensureWorkspacePanDir, r as writeWorkspaceContext, t as init_pan_dir } from "./pan-dir-BgBeeZDX.js";
11
11
  import { r as init_workspace_manager, t as createWorkspace } from "./workspace-manager-CEWK-OXd.js";
12
12
  import { n as renderPrompt, t as init_prompts } from "./prompts-CelsUdrx.js";
@@ -541,4 +541,4 @@ async function spawnPlanningSession(opts) {
541
541
  //#endregion
542
542
  export { resolvePlanningSessionHarness as a, resolveAutoSpawnOnFinalize as i, buildPlanningPrompt as n, spawnPlanningSession as o, readAutoSpawnOnFinalizeFlag as r, writeFeatureContext as s, autoSpawnOnFinalizeFlagPath as t };
543
543
 
544
- //# sourceMappingURL=spawn-planning-session-BmJWHSCu.js.map
544
+ //# sourceMappingURL=spawn-planning-session-CXc0NkwV.js.map
@@ -114,7 +114,7 @@ function getDigestModel(projectKey, specialistType) {
114
114
  async function generateContextDigestPromise(projectKey, specialistType, options = {}) {
115
115
  ensureContextDirectory(projectKey, specialistType);
116
116
  const runCount = options.runCount ?? getContextRunsCount(projectKey);
117
- const { getRecentRunLogs } = await import("./specialist-logs-CvDxquV_.js");
117
+ const { getRecentRunLogs } = await import("./specialist-logs--Uz-r8ia.js");
118
118
  const recentRuns = getRecentRunLogs(projectKey, specialistType, runCount);
119
119
  if (recentRuns.length === 0 && !options.force) {
120
120
  console.log(`[specialist-context] No recent runs for ${projectKey}/${specialistType}, skipping digest generation`);
@@ -128,7 +128,7 @@ async function generateContextDigestPromise(projectKey, specialistType, options
128
128
  if (!existsSync(tempDir)) mkdirSync(tempDir, { recursive: true });
129
129
  const promptFile = join(tempDir, `digest-prompt-${Date.now()}.md`);
130
130
  writeFileSync(promptFile, prompt, "utf-8");
131
- const { getProviderEnvForModel } = await import("./agents-BIggLvi_.js");
131
+ const { getProviderEnvForModel } = await import("./agents-C-vqmKDi.js");
132
132
  const providerEnv = await getProviderEnvForModel(model);
133
133
  const envPrefix = Object.entries(providerEnv).map(([k, v]) => `${k}="${v}"`).join(" ");
134
134
  const permissionFlags = getClaudePermissionFlagsStringSync();
@@ -283,4 +283,4 @@ __esmMin((() => {
283
283
  }))();
284
284
  export { deleteContextDigest, generateContextDigest, getContextDigestPath, getContextDirectory, hasContextDigest, loadContextDigest, regenerateContextDigest, scheduleDigestGeneration };
285
285
 
286
- //# sourceMappingURL=specialist-context-CwKkcXL9.js.map
286
+ //# sourceMappingURL=specialist-context-BGCJ24LH.js.map
@@ -1,6 +1,6 @@
1
1
  import { a as __toCommonJS, n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { Bn as projects_exports, Br as getOverdeckHome, Nn as init_projects, Vr as init_paths } from "./config-yaml-DPAieL_G.js";
3
- import { J as specialists_exports, O as init_specialists } from "./specialists-BYi0k8CZ.js";
3
+ import { J as specialists_exports, O as init_specialists } from "./specialists-nZ0mRwpZ.js";
4
4
  import { Data, Effect } from "effect";
5
5
  import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync, writeFileSync } from "fs";
6
6
  import { basename, join } from "path";
@@ -380,4 +380,4 @@ __esmMin((() => {
380
380
  }))();
381
381
  export { MAX_LOG_SIZE, SpecialistLogError, appendToRunLog, appendToRunLogSync, checkLogSizeLimit, cleanupAllLogs, cleanupAllLogsSync, cleanupOldLogs, cleanupOldLogsSync, createRunLog, createRunLogSync, finalizeRunLog, finalizeRunLogSync, generateRunId, getRecentRunLogs, getRunLog, getRunLogPath, getRunLogSize, getRunLogSync, getRunsDirectory, isRunLogActive, listRunLogs, listRunLogsSync, parseLogMetadata };
382
382
 
383
- //# sourceMappingURL=specialist-logs-CvDxquV_.js.map
383
+ //# sourceMappingURL=specialist-logs--Uz-r8ia.js.map
@@ -1,2 +1,2 @@
1
- import { i as validateSpecialistAutoCompleteMetadata, n as _serverManagedMerges, r as firePostMergeLifecycle, t as specialistsRouteLayer } from "./specialists-D07ybnam.js";
1
+ import { i as validateSpecialistAutoCompleteMetadata, n as _serverManagedMerges, r as firePostMergeLifecycle, t as specialistsRouteLayer } from "./specialists-DEfrAbWs.js";
2
2
  export { _serverManagedMerges, specialistsRouteLayer as default, specialistsRouteLayer, firePostMergeLifecycle, validateSpecialistAutoCompleteMetadata };
@@ -5,14 +5,14 @@ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CpKlYZA9.
5
5
  import { K as buildChildEnvWithoutTmuxSync, L as sessionExists, R as sessionExistsSync, i as capturePane, k as listSessions, q as init_child_env, w as killSession, x as init_tmux } from "./tmux-ePNhMIMU.js";
6
6
  import { a as init_event_store, n as getEventStore } from "./event-store-DTJXZjCl.js";
7
7
  import { C as normalizeChannelReplyPayload, a as getHarnessBehavior, b as DomainEvent, t as init_src } from "./src-fgbU-jJ-.js";
8
- import { D as AGENT_COLUMNS_FOR_DB, M as stateToOverdeckParamsForDb, c as init_review_status, k as init_agent_state_sync, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
9
- import { a as EventStoreService, c as ReadModelService, d as init_read_model, i as init_issue_lifecycle, s as init_domain_services, t as IssueLifecycle, u as getClosedIssueIdsForReadSource } from "./issue-lifecycle-DnhQgddB.js";
8
+ import { D as AGENT_COLUMNS_FOR_DB, M as stateToOverdeckParamsForDb, c as init_review_status, k as init_agent_state_sync, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-B5ZASOo4.js";
9
+ import { a as EventStoreService, c as ReadModelService, d as init_read_model, i as init_issue_lifecycle, s as init_domain_services, t as IssueLifecycle, u as getClosedIssueIdsForReadSource } from "./issue-lifecycle-5LbOcATP.js";
10
10
  import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-C2CuA66z.js";
11
- import { $n as writeAgentStateJsonSync, An as getAgentDir, Bt as resolveStaffing, C as restartAgent, Ct as deliverAgentPermissionDecision, E as resumeAgent, En as clearAgentTroubled, Et as setAgentDeliveryMethod, F as getActivity, I as getLatestSessionId, Jn as saveAgentStateSync, Jt as getProviderAuthMode, K as stopAgent, L as getLatestSessionIdSync, Lt as transitionIssueToInProgress, M as init_operator_interventions, Mn as getAgentState, N as operatorInterventionEvent, Pn as getAgentStateSync, Qn as wipeAgentStateDirs, R as getSessionId, S as recoverAgent, St as deliverAgentMessage, Vn as markAgentStoppedState, X as listAgentStates, Yn as setAgentPaused, Z as listRunningAgents, _t as init_config, cn as determineModel, er as init_persistent_logger, fn as init_provider_health, g as init_tier_escalation, gr as saveAgentRuntimeState, h as decideEscalation, j as messageAgent, lr as normalizeAgentId, mr as getAgentRuntimeStateSync, pn as validateProviderHealth, pr as getAgentRuntimeState, qn as saveAgentState, t as init_agents, tr as logAgentLifecycleSync, wn as clearAgentPaused, yt as loadCloisterConfigSync, z as saveSessionId, zt as init_staffing } from "./agents-DHvsjsuP.js";
11
+ import { $n as writeAgentStateJsonSync, An as getAgentDir, Bt as resolveStaffing, C as restartAgent, Ct as deliverAgentPermissionDecision, E as resumeAgent, En as clearAgentTroubled, Et as setAgentDeliveryMethod, F as getActivity, I as getLatestSessionId, Jn as saveAgentStateSync, Jt as getProviderAuthMode, K as stopAgent, L as getLatestSessionIdSync, Lt as transitionIssueToInProgress, M as init_operator_interventions, Mn as getAgentState, N as operatorInterventionEvent, Pn as getAgentStateSync, Qn as wipeAgentStateDirs, R as getSessionId, S as recoverAgent, St as deliverAgentMessage, Vn as markAgentStoppedState, X as listAgentStates, Yn as setAgentPaused, Z as listRunningAgents, _t as init_config, cn as determineModel, er as init_persistent_logger, fn as init_provider_health, g as init_tier_escalation, gr as saveAgentRuntimeState, h as decideEscalation, j as messageAgent, lr as normalizeAgentId, mr as getAgentRuntimeStateSync, pn as validateProviderHealth, pr as getAgentRuntimeState, qn as saveAgentState, t as init_agents, tr as logAgentLifecycleSync, wn as clearAgentPaused, yt as loadCloisterConfigSync, z as saveSessionId, zt as init_staffing } from "./agents-C7V4odQ6.js";
12
12
  import { t as init_behavior } from "./behavior-By-2Wipv.js";
13
- import { a as performHandoff, i as checkAllTriggers, s as getAgentHealth, t as getCloisterService } from "./service-CILd-uOt.js";
13
+ import { a as performHandoff, i as checkAllTriggers, s as getAgentHealth, t as getCloisterService } from "./service-HKDrIy0h.js";
14
14
  import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-C3hiPVAM.js";
15
- import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-_AquSBTl.js";
15
+ import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-CDGt__oQ.js";
16
16
  import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-CE1m_daD.js";
17
17
  import { I as generateVBriefFilename, L as init_lifecycle, f as readTierOverrides, g as serializeVBriefDocument, h as recordTierPromotion, m as readWorkspacePlanSync, o as init_io, r as findPlan, u as readPlan } from "./io-Wy8YpFeP.js";
18
18
  import { d as getCliproxyAuthDir, g as getCliproxyLogPath, l as decodeJwtPayload, v as init_cliproxy } from "./cliproxy-J-_1iIXe.js";
@@ -23,9 +23,9 @@ import { a as init_stack_health, i as getWorkspaceStackHealth } from "./stack-he
23
23
  import { s as getDispatchableItems, u as init_dag } from "./dag-jH8ZkewR.js";
24
24
  import { i as queryBeadById, r as init_beads_query } from "./beads-query-BrVNWoSL.js";
25
25
  import { a as init_lifecycle_io, c as updatePlanStatus, s as transitionVBriefOnMain } from "./lifecycle-io-DSrv9xGh.js";
26
- import { Lt as getRuntimeForAgent, Q as createInFlightGuard, Qt as getAgentWorkspace$1, Rt as classifyMemoryPressure, Ut as getResourceConfig, Wt as getSystemHealthSnapshot, Xt as getAgentJsonlPath$1, Zt as getAgentPendingQuestions$1, nn as normalizeAwaitingInputPrompt, qt as computeAgentEnrichment } from "./deacon-j3qSZ7--.js";
26
+ import { Lt as getRuntimeForAgent, Q as createInFlightGuard, Qt as getAgentWorkspace$1, Rt as classifyMemoryPressure, Ut as getResourceConfig, Wt as getSystemHealthSnapshot, Xt as getAgentJsonlPath$1, Zt as getAgentPendingQuestions$1, nn as normalizeAwaitingInputPrompt, qt as computeAgentEnrichment } from "./deacon-CGHl90eC.js";
27
27
  import { o as stopWorkspaceDocker, r as init_workspace_manager } from "./workspace-manager-CEWK-OXd.js";
28
- import { at as init_jsonl_parser, ot as normalizeModelName } from "./specialists-BYi0k8CZ.js";
28
+ import { at as init_jsonl_parser, ot as normalizeModelName } from "./specialists-nZ0mRwpZ.js";
29
29
  import { t as withBdMutex } from "./bd-mutex-BItGvLQ8.js";
30
30
  import { a as loadWorkspaceMetadataSync } from "./workspace-metadata-1eu1RvAT.js";
31
31
  import { c as syncBeadStatusToVBrief } from "./beads-DlZm-vrG.js";
@@ -2442,7 +2442,7 @@ function emitAgentRuntimeEvent(id, body, timestamp) {
2442
2442
  detail: String(decoded.failure)
2443
2443
  }, { status: 400 })
2444
2444
  };
2445
- const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-C1iUF9Ft.js"));
2445
+ const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-DmFpIMbP.js"));
2446
2446
  yield* (yield* AgentStateService).emit(decoded.success);
2447
2447
  return {
2448
2448
  ok: true,
@@ -2524,7 +2524,7 @@ const getAgentRuntimeRoute = HttpRouter.add("GET", "/api/agents/:id/runtime", ht
2524
2524
  success: false,
2525
2525
  error: "missing agent id"
2526
2526
  }, { status: 400 });
2527
- const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-C1iUF9Ft.js"));
2527
+ const { AgentStateService } = yield* Effect.promise(() => import("./agent-state-service-DmFpIMbP.js"));
2528
2528
  const snapshot = yield* (yield* AgentStateService).get(id);
2529
2529
  if (!snapshot) return jsonResponse({
2530
2530
  success: false,
@@ -4860,10 +4860,10 @@ const _serverManagedMerges = /* @__PURE__ */ new Set();
4860
4860
  function firePostMergeLifecycle(issueId, options) {
4861
4861
  const started = postMergeGuard.run(issueId, async () => {
4862
4862
  const projectPath = getProjectPathForIssue(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
4863
- const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
4863
+ const { postMergeLifecycle } = await import("./merge-agent-7nBiCytp.js");
4864
4864
  await postMergeLifecycle(issueId, projectPath, options?.sourceBranch, options?.verifiedMergedRef ? { verifiedMergedRef: options.verifiedMergedRef } : void 0);
4865
4865
  console.log(`[merge] post-merge lifecycle completed for ${issueId}`);
4866
- const { runMergeTrainReconcile } = await import("./merge-train-DmxlYbEo.js");
4866
+ const { runMergeTrainReconcile } = await import("./merge-train-D3qzRccL.js");
4867
4867
  const outcomes = await runMergeTrainReconcile(issueId);
4868
4868
  if (outcomes.length > 0) console.log(`[merge-train] reconciled ${outcomes.length} sibling(s) after ${issueId}: ` + outcomes.map((o) => `${o.issueId}=${o.result}`).join(", "));
4869
4869
  }, (err) => console.error(`[merge] post-merge lifecycle failed for ${issueId}:`, err));
@@ -4884,14 +4884,14 @@ init_io();
4884
4884
  init_domain_services();
4885
4885
  init_tmux();
4886
4886
  const getSpecialistsRoute = HttpRouter.add("GET", "/api/specialists", httpHandler(Effect.gen(function* () {
4887
- const { getAllSpecialistStatus, getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
4887
+ const { getAllSpecialistStatus, getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
4888
4888
  return jsonResponse({
4889
4889
  specialists: yield* Effect.promise(() => getAllSpecialistStatus()),
4890
4890
  projects: yield* Effect.promise(() => getAllProjectSpecialistStatuses())
4891
4891
  });
4892
4892
  })));
4893
4893
  const postSpecialistsResetAllRoute = HttpRouter.add("POST", "/api/specialists/reset-all", httpHandler(Effect.gen(function* () {
4894
- const { getAllSpecialists, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
4894
+ const { getAllSpecialists, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
4895
4895
  const { clearHookSync } = yield* Effect.promise(() => import("./hooks-D-cbMUzQ.js"));
4896
4896
  const specialists = getAllSpecialists();
4897
4897
  const results = [];
@@ -4989,7 +4989,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
4989
4989
  if (specialist === "inspect" && status === "failed") yield* Effect.promise(() => reportTieredInspectFailureEscalation(normalizedIssueId, notes));
4990
4990
  yield* Effect.promise(async () => {
4991
4991
  try {
4992
- const { getTmuxSessionName, updateRunMetadata, makeSpecialistRegistryKey } = await import("./specialists-F2uMO4QS.js");
4992
+ const { getTmuxSessionName, updateRunMetadata, makeSpecialistRegistryKey } = await import("./specialists-DeZx9xom.js");
4993
4993
  const projectKey = resolveProjectFromIssueSync(normalizedIssueId)?.projectKey;
4994
4994
  const tmuxSession = projectKey ? getTmuxSessionName(`${specialist}-agent`, projectKey, normalizedIssueId) : getTmuxSessionName(`${specialist}-agent`);
4995
4995
  saveAgentRuntimeState(tmuxSession, {
@@ -5032,7 +5032,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
5032
5032
  });
5033
5033
  if (specialist === "inspect" && status === "passed") yield* Effect.promise(async () => {
5034
5034
  try {
5035
- const { onInspectComplete } = await import("./inspect-agent-vm88mLYr.js");
5035
+ const { onInspectComplete } = await import("./inspect-agent-CqpEWGWy.js");
5036
5036
  const beadId = (notes?.match(/[Bb]ead\s+(\S+)/))?.[1] || "unknown";
5037
5037
  const project = resolveProjectFromIssueSync(normalizedIssueId);
5038
5038
  if (project) {
@@ -5131,7 +5131,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
5131
5131
  try {
5132
5132
  const workAgentId = `agent-${normalizedIssueId.toLowerCase()}`;
5133
5133
  const { sessionExists } = await import("./tmux-CeDD14p1.js");
5134
- const { messageAgent, spawnAgent, getAgentStateSync } = await import("./agents-BIggLvi_.js");
5134
+ const { messageAgent, spawnAgent, getAgentStateSync } = await import("./agents-C-vqmKDi.js");
5135
5135
  if (await Effect.runPromise(sessionExists(workAgentId))) {
5136
5136
  await messageAgent(workAgentId, `MERGE CONFLICT: The merge-agent could not rebase your branch onto main due to conflicts. Please fix this now:\n\n1. git fetch origin main\n2. git rebase origin/main\n3. Resolve any conflicts (git add <file> && git rebase --continue)\n4. git push --force-with-lease\n5. Resubmit: curl -s -X POST http://localhost:3011/api/review/${normalizedIssueId}/request -H "Content-Type: application/json" -d "{}"\n\nConflict details: ${notes}`);
5137
5137
  console.log(`[specialists/done] Sent rebase instructions to ${workAgentId}`);
@@ -5145,7 +5145,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
5145
5145
  try {
5146
5146
  const project = resolveProjectFromIssueSync(normalizedIssueId);
5147
5147
  const workspacePath = project ? join$1(project.projectPath, "workspaces", `feature-${normalizedIssueId.toLowerCase()}`) : void 0;
5148
- const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-cZh9Wi9G.js");
5148
+ const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-CorgH49f.js");
5149
5149
  const result = await Effect.runPromise(deliverReviewVerdictFeedback({
5150
5150
  issueId: normalizedIssueId,
5151
5151
  verdict: status === "failed" ? "failed" : "blocked",
@@ -5186,7 +5186,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
5186
5186
  });
5187
5187
  })));
5188
5188
  const postSpecialistsLogsCleanupAllRoute = HttpRouter.add("POST", "/api/specialists/logs/cleanup-all", httpHandler(Effect.gen(function* () {
5189
- const { cleanupAllLogsSync } = yield* Effect.promise(() => import("./specialist-logs-CvDxquV_.js"));
5189
+ const { cleanupAllLogsSync } = yield* Effect.promise(() => import("./specialist-logs--Uz-r8ia.js"));
5190
5190
  const results = cleanupAllLogsSync();
5191
5191
  return jsonResponse({
5192
5192
  success: true,
@@ -5196,7 +5196,7 @@ const postSpecialistsLogsCleanupAllRoute = HttpRouter.add("POST", "/api/speciali
5196
5196
  });
5197
5197
  })));
5198
5198
  const getSpecialistsProjectsRoute = HttpRouter.add("GET", "/api/specialists/projects", httpHandler(Effect.gen(function* () {
5199
- const { getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5199
+ const { getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5200
5200
  return jsonResponse(yield* Effect.promise(() => getAllProjectSpecialistStatuses()));
5201
5201
  })));
5202
5202
  const postSpecialistWakeRoute = HttpRouter.add("POST", "/api/specialists/:name/wake", httpHandler(Effect.gen(function* () {
@@ -5240,7 +5240,7 @@ const postSpecialistReportStatusRoute = HttpRouter.add("POST", "/api/specialists
5240
5240
  "blocked",
5241
5241
  "failed"
5242
5242
  ].includes(status)) {
5243
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5243
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5244
5244
  saveAgentRuntimeState(getTmuxSessionName(name), {
5245
5245
  state: "idle",
5246
5246
  lastActivity: (/* @__PURE__ */ new Date()).toISOString()
@@ -5361,7 +5361,7 @@ const postProjectSpecialistKillRoute = HttpRouter.add("POST", "/api/specialists/
5361
5361
  const issueId = params["issueId"];
5362
5362
  const type = params["type"];
5363
5363
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
5364
- const { getTmuxSessionName, makeSpecialistRegistryKey, getRunMetadata } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5364
+ const { getTmuxSessionName, makeSpecialistRegistryKey, getRunMetadata } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5365
5365
  const tmuxSession = getRunMetadata(project, makeSpecialistRegistryKey(type, issueId)).tmuxSession ?? getTmuxSessionName(type, project, issueId);
5366
5366
  yield* Effect.promise(() => Effect.runPromise(killSession(tmuxSession)).catch(() => {}));
5367
5367
  saveAgentRuntimeState(tmuxSession, {
@@ -5388,7 +5388,7 @@ const getProjectSpecialistRunsRoute = HttpRouter.add("GET", "/api/specialists/:p
5388
5388
  if (limitParam) limit = parseInt(limitParam, 10);
5389
5389
  if (offsetParam) offset = parseInt(offsetParam, 10);
5390
5390
  }
5391
- const { listRunLogsSync } = yield* Effect.promise(() => import("./specialist-logs-CvDxquV_.js"));
5391
+ const { listRunLogsSync } = yield* Effect.promise(() => import("./specialist-logs--Uz-r8ia.js"));
5392
5392
  return jsonResponse(listRunLogsSync(project, type, {
5393
5393
  limit,
5394
5394
  offset
@@ -5399,7 +5399,7 @@ const getProjectSpecialistRunStreamRoute = HttpRouter.add("GET", "/api/specialis
5399
5399
  const project = params["project"];
5400
5400
  const type = params["type"];
5401
5401
  const runId = params["runId"];
5402
- const { getRunLogPath, isRunLogActive } = yield* Effect.promise(() => import("./specialist-logs-CvDxquV_.js"));
5402
+ const { getRunLogPath, isRunLogActive } = yield* Effect.promise(() => import("./specialist-logs--Uz-r8ia.js"));
5403
5403
  const logPath = getRunLogPath(project, type, runId);
5404
5404
  if (!existsSync(logPath)) return jsonResponse({ error: "Run log not found" }, { status: 404 });
5405
5405
  const encoder = new TextEncoder();
@@ -5458,7 +5458,7 @@ const getProjectSpecialistRunRoute = HttpRouter.add("GET", "/api/specialists/:pr
5458
5458
  const project = params["project"];
5459
5459
  const type = params["type"];
5460
5460
  const runId = params["runId"];
5461
- const { getRunLogSync, parseLogMetadata } = yield* Effect.promise(() => import("./specialist-logs-CvDxquV_.js"));
5461
+ const { getRunLogSync, parseLogMetadata } = yield* Effect.promise(() => import("./specialist-logs--Uz-r8ia.js"));
5462
5462
  const content = getRunLogSync(project, type, runId);
5463
5463
  if (!content) return jsonResponse({ error: "Run log not found" }, { status: 404 });
5464
5464
  return jsonResponse({
@@ -5472,7 +5472,7 @@ const postProjectSpecialistRunTerminateRoute = HttpRouter.add("POST", "/api/spec
5472
5472
  const project = params["project"];
5473
5473
  const type = params["type"];
5474
5474
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
5475
- const { terminateSpecialist } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5475
+ const { terminateSpecialist } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5476
5476
  yield* Effect.promise(() => terminateSpecialist(project, type));
5477
5477
  return jsonResponse({
5478
5478
  success: true,
@@ -5484,7 +5484,7 @@ const postProjectSpecialistGracePauseRoute = HttpRouter.add("POST", "/api/specia
5484
5484
  const project = params["project"];
5485
5485
  const type = params["type"];
5486
5486
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
5487
- const { pauseGracePeriod } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5487
+ const { pauseGracePeriod } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5488
5488
  if (pauseGracePeriod(project, type)) return jsonResponse({
5489
5489
  success: true,
5490
5490
  message: "Grace period paused"
@@ -5496,7 +5496,7 @@ const postProjectSpecialistGraceResumeRoute = HttpRouter.add("POST", "/api/speci
5496
5496
  const project = params["project"];
5497
5497
  const type = params["type"];
5498
5498
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
5499
- const { resumeGracePeriod } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5499
+ const { resumeGracePeriod } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5500
5500
  if (resumeGracePeriod(project, type)) return jsonResponse({
5501
5501
  success: true,
5502
5502
  message: "Grace period resumed"
@@ -5508,7 +5508,7 @@ const postProjectSpecialistGraceExitRoute = HttpRouter.add("POST", "/api/special
5508
5508
  const project = params["project"];
5509
5509
  const type = params["type"];
5510
5510
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
5511
- const { exitGracePeriod } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5511
+ const { exitGracePeriod } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5512
5512
  exitGracePeriod(project, type);
5513
5513
  return jsonResponse({
5514
5514
  success: true,
@@ -5520,7 +5520,7 @@ const getProjectSpecialistGraceRoute = HttpRouter.add("GET", "/api/specialists/:
5520
5520
  const project = params["project"];
5521
5521
  const type = params["type"];
5522
5522
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
5523
- const { getGracePeriodState } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5523
+ const { getGracePeriodState } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5524
5524
  const state = getGracePeriodState(project, type);
5525
5525
  if (state) return jsonResponse(state);
5526
5526
  else return jsonResponse({ error: "No active grace period" }, { status: 404 });
@@ -5529,7 +5529,7 @@ const getProjectSpecialistContextRoute = HttpRouter.add("GET", "/api/specialists
5529
5529
  const params = yield* HttpRouter.params;
5530
5530
  const project = params["project"];
5531
5531
  const type = params["type"];
5532
- const { loadContextDigest } = yield* Effect.promise(() => import("./specialist-context-CwKkcXL9.js"));
5532
+ const { loadContextDigest } = yield* Effect.promise(() => import("./specialist-context-BGCJ24LH.js"));
5533
5533
  const digest = loadContextDigest(project, type);
5534
5534
  if (digest) return jsonResponse({ digest });
5535
5535
  else return jsonResponse({ error: "No context digest found" }, { status: 404 });
@@ -5538,7 +5538,7 @@ const postProjectSpecialistContextRegenerateRoute = HttpRouter.add("POST", "/api
5538
5538
  const params = yield* HttpRouter.params;
5539
5539
  const project = params["project"];
5540
5540
  const type = params["type"];
5541
- const { regenerateContextDigest } = yield* Effect.promise(() => import("./specialist-context-CwKkcXL9.js"));
5541
+ const { regenerateContextDigest } = yield* Effect.promise(() => import("./specialist-context-BGCJ24LH.js"));
5542
5542
  const digest = yield* Effect.promise(() => regenerateContextDigest(project, type));
5543
5543
  if (digest) return jsonResponse({
5544
5544
  digest,
@@ -5557,7 +5557,7 @@ const postProjectSpecialistCompleteRoute = HttpRouter.add("POST", "/api/speciali
5557
5557
  "blocked"
5558
5558
  ].includes(status)) return jsonResponse({ error: "Valid status (passed/failed/blocked) is required" }, { status: 400 });
5559
5559
  if (!validateSpecialistAgentName(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
5560
- const { signalSpecialistCompletion } = yield* Effect.promise(() => import("./specialists-F2uMO4QS.js"));
5560
+ const { signalSpecialistCompletion } = yield* Effect.promise(() => import("./specialists-DeZx9xom.js"));
5561
5561
  signalSpecialistCompletion(project, type, {
5562
5562
  status,
5563
5563
  notes
@@ -5591,7 +5591,7 @@ const postProjectSpecialistLogsCleanupRoute = HttpRouter.add("POST", "/api/speci
5591
5591
  const params = yield* HttpRouter.params;
5592
5592
  const project = params["project"];
5593
5593
  const type = params["type"];
5594
- const { cleanupOldLogsSync } = yield* Effect.promise(() => import("./specialist-logs-CvDxquV_.js"));
5594
+ const { cleanupOldLogsSync } = yield* Effect.promise(() => import("./specialist-logs--Uz-r8ia.js"));
5595
5595
  const { getSpecialistRetention } = yield* Effect.promise(() => import("./projects-BNmVxnNt.js"));
5596
5596
  const retention = getSpecialistRetention(project);
5597
5597
  const deleted = cleanupOldLogsSync(project, type, {
@@ -5613,7 +5613,7 @@ const postProjectReviewRestartRoute = HttpRouter.add("POST", "/api/specialists/:
5613
5613
  const project = params["project"];
5614
5614
  const issueId = params["issueId"];
5615
5615
  const { model, harness } = yield* readJsonBody;
5616
- const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-DgySDb-G.js"));
5616
+ const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-DTINEffB.js"));
5617
5617
  const killResult = yield* killAllReviewerSessions(project, issueId);
5618
5618
  const projectConfig = resolveProjectFromIssueSync(issueId);
5619
5619
  if (!projectConfig) return jsonResponse({ error: `Cannot resolve project for ${issueId}` }, { status: 404 });
@@ -5627,7 +5627,7 @@ const postProjectReviewRestartRoute = HttpRouter.add("POST", "/api/specialists/:
5627
5627
  }));
5628
5628
  branch = stdout.trim() || "unknown";
5629
5629
  } catch {}
5630
- const { spawnReviewRoleForIssue } = yield* Effect.promise(() => import("./review-agent-DgySDb-G.js"));
5630
+ const { spawnReviewRoleForIssue } = yield* Effect.promise(() => import("./review-agent-DTINEffB.js"));
5631
5631
  const prUrl = getReviewStatusSync(issueId)?.prUrl;
5632
5632
  const result = yield* spawnReviewRoleForIssue({
5633
5633
  issueId,
@@ -5778,4 +5778,4 @@ const specialistsRouteLayer = Layer.mergeAll(specialistsLegacyRouteLayer, specia
5778
5778
  //#endregion
5779
5779
  export { validateOrigin as C, jsonResponse as D, httpHandler as E, jsonStringResponse as O, normalizeOrigin as S, checkCodexAuthStatus as T, resolveJsonlPath as _, agentsRouteLayer as a, getTrustedOrigins as b, evaluateSpawnGuardrails as c, resolveConversationGitInfo as d, getWorkAgentLifecycleStateSync as f, resolveCodexRolloutPath as g, resolveClaudeSessionId as h, validateSpecialistAutoCompleteMetadata as i, invalidateAgentsCache as l, resolveAgentHarness as m, _serverManagedMerges as n, saveAgentStateAndEmitEvent as o, readLauncherPinnedSessionId as p, firePostMergeLifecycle as r, saveAgentStateAndEmitEventProgram as s, specialistsRouteLayer as t, resolveAgentGitInfo as u, resolvePiSessionPath as v, validateOriginHeaders as w, isTrustedOriginForHost as x, getHeaderFromMap as y };
5780
5780
 
5781
- //# sourceMappingURL=specialists-D07ybnam.js.map
5781
+ //# sourceMappingURL=specialists-DEfrAbWs.js.map
@@ -1,3 +1,3 @@
1
- import { $ as updateRunMetadata, A as isEnabled, B as pauseGracePeriod, C as getSpecialistState, D as initSpecialistsDirectory, E as incrementProjectRunCount, F as listSpecialistsForProject, G as sendFeedbackToAgent, H as recordWake, I as loadRegistry, K as setCurrentRun, L as makeSpecialistRegistryKey, M as isProjectSpecialistActivelyRunning, N as isRunning, O as init_specialists, P as listProjectsWithSpecialists, Q as updateProjectSpecialistMetadata, R as parseReviewerSessionName, S as getSpecialistMetadata, T as getTmuxSessionName, U as resumeGracePeriod, V as pruneSpecialistRegistryEntriesForIssue, W as saveRegistry, X as terminateSpecialist, Y as startGracePeriod, Z as updateContextTokens, _ as getPendingFeedback, a as disableSpecialist, b as getReviewerSessionName, c as exitGracePeriod, d as getAllProjectSpecialistStatuses, et as updateRunStatus, f as getAllSpecialistStatus, g as getGracePeriodState, h as getFeedbackStats, i as countContextTokens, j as isInitialized, k as initializeEnabledSpecialists, l as findActiveRegistryKey, m as getEnabledSpecialists, n as buildSpecialistBaseCommand, o as enableSpecialist, p as getAllSpecialists, q as signalSpecialistCompletion, r as buildSpecialistCavemanExports, s as ensureProjectSpecialistDir, t as REVIEWER_ROLES, tt as updateSpecialistMetadata, u as findSessionFile, v as getProjectSpecialistDir, w as getSpecialistStatus, x as getRunMetadata, y as getProjectSpecialistMetadata, z as parseSpecialistRegistryKey } from "./specialists-BYi0k8CZ.js";
1
+ import { $ as updateRunMetadata, A as isEnabled, B as pauseGracePeriod, C as getSpecialistState, D as initSpecialistsDirectory, E as incrementProjectRunCount, F as listSpecialistsForProject, G as sendFeedbackToAgent, H as recordWake, I as loadRegistry, K as setCurrentRun, L as makeSpecialistRegistryKey, M as isProjectSpecialistActivelyRunning, N as isRunning, O as init_specialists, P as listProjectsWithSpecialists, Q as updateProjectSpecialistMetadata, R as parseReviewerSessionName, S as getSpecialistMetadata, T as getTmuxSessionName, U as resumeGracePeriod, V as pruneSpecialistRegistryEntriesForIssue, W as saveRegistry, X as terminateSpecialist, Y as startGracePeriod, Z as updateContextTokens, _ as getPendingFeedback, a as disableSpecialist, b as getReviewerSessionName, c as exitGracePeriod, d as getAllProjectSpecialistStatuses, et as updateRunStatus, f as getAllSpecialistStatus, g as getGracePeriodState, h as getFeedbackStats, i as countContextTokens, j as isInitialized, k as initializeEnabledSpecialists, l as findActiveRegistryKey, m as getEnabledSpecialists, n as buildSpecialistBaseCommand, o as enableSpecialist, p as getAllSpecialists, q as signalSpecialistCompletion, r as buildSpecialistCavemanExports, s as ensureProjectSpecialistDir, t as REVIEWER_ROLES, tt as updateSpecialistMetadata, u as findSessionFile, v as getProjectSpecialistDir, w as getSpecialistStatus, x as getRunMetadata, y as getProjectSpecialistMetadata, z as parseSpecialistRegistryKey } from "./specialists-nZ0mRwpZ.js";
2
2
  init_specialists();
3
3
  export { REVIEWER_ROLES, buildSpecialistBaseCommand, buildSpecialistCavemanExports, countContextTokens, disableSpecialist, enableSpecialist, ensureProjectSpecialistDir, exitGracePeriod, findActiveRegistryKey, findSessionFile, getAllProjectSpecialistStatuses, getAllSpecialistStatus, getAllSpecialists, getEnabledSpecialists, getFeedbackStats, getGracePeriodState, getPendingFeedback, getProjectSpecialistDir, getProjectSpecialistMetadata, getReviewerSessionName, getRunMetadata, getSpecialistMetadata, getSpecialistState, getSpecialistStatus, getTmuxSessionName, incrementProjectRunCount, initSpecialistsDirectory, initializeEnabledSpecialists, isEnabled, isInitialized, isProjectSpecialistActivelyRunning, isRunning, listProjectsWithSpecialists, listSpecialistsForProject, loadRegistry, makeSpecialistRegistryKey, parseReviewerSessionName, parseSpecialistRegistryKey, pauseGracePeriod, pruneSpecialistRegistryEntriesForIssue, recordWake, resumeGracePeriod, saveRegistry, sendFeedbackToAgent, setCurrentRun, signalSpecialistCompletion, startGracePeriod, terminateSpecialist, updateContextTokens, updateProjectSpecialistMetadata, updateRunMetadata, updateRunStatus, updateSpecialistMetadata };