panopticon-cli 0.6.7 → 0.6.9

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 (89) hide show
  1. package/dist/{agents-D_2oRFVf.js → agents-BQOqo27C.js} +1 -1
  2. package/dist/{agents-CfFDs52G.js → agents-DezveQ1x.js} +4 -4
  3. package/dist/{agents-CfFDs52G.js.map → agents-DezveQ1x.js.map} +1 -1
  4. package/dist/cli/index.js +34 -34
  5. package/dist/{config-yaml-DGbLSMCa.js → config-yaml-BHD2Qdd8.js} +22 -1
  6. package/dist/config-yaml-BHD2Qdd8.js.map +1 -0
  7. package/dist/{config-yaml-Dqt4FWQH.js → config-yaml-IlSnFzJQ.js} +1 -1
  8. package/dist/dashboard/{agent-enrichment-DdO7ZqjI.js → agent-enrichment-BKZjVvlL.js} +3 -3
  9. package/dist/dashboard/{agent-enrichment-DdO7ZqjI.js.map → agent-enrichment-BKZjVvlL.js.map} +1 -1
  10. package/dist/dashboard/{agent-enrichment-dLeGE1fX.js → agent-enrichment-iY3_PylI.js} +1 -1
  11. package/dist/dashboard/{agents-DCpQQ_W5.js → agents-BQWA-Vps.js} +4 -4
  12. package/dist/dashboard/{agents-DCpQQ_W5.js.map → agents-BQWA-Vps.js.map} +1 -1
  13. package/dist/dashboard/{agents-Dgh2TjSp.js → agents-Dinc9j_8.js} +1 -1
  14. package/dist/dashboard/{config-yaml-DkresmrS.js → config-yaml-CNNnB4Mu.js} +1 -1
  15. package/dist/dashboard/{config-yaml-DSfYpzN6.js → config-yaml-DUu0JI25.js} +22 -1
  16. package/dist/dashboard/{config-yaml-DSfYpzN6.js.map → config-yaml-DUu0JI25.js.map} +1 -1
  17. package/dist/dashboard/{factory-C8nhLGHB.js → factory-CBY0WWeE.js} +2 -2
  18. package/dist/dashboard/{factory-C8nhLGHB.js.map → factory-CBY0WWeE.js.map} +1 -1
  19. package/dist/dashboard/{inspect-agent-7eour7EA.js → inspect-agent-KKOeNR7E.js} +3 -3
  20. package/dist/dashboard/{inspect-agent-7eour7EA.js.map → inspect-agent-KKOeNR7E.js.map} +1 -1
  21. package/dist/dashboard/{issue-service-singleton-Wv4xBm3y.js → issue-service-singleton-BCZ62hLj.js} +3 -3
  22. package/dist/dashboard/{issue-service-singleton-Wv4xBm3y.js.map → issue-service-singleton-BCZ62hLj.js.map} +1 -1
  23. package/dist/dashboard/{issue-service-singleton-Co__-6kL.js → issue-service-singleton-BGKf0A95.js} +1 -1
  24. package/dist/dashboard/{lifecycle-BcUmtkR4.js → lifecycle-Dpgg-IeP.js} +1 -1
  25. package/dist/dashboard/{merge-agent-CGN3TT0a.js → merge-agent-CqvQu-n_.js} +1 -1
  26. package/dist/dashboard/{merge-agent-yudQOPZc.js → merge-agent-Dxxc4JEE.js} +5 -5
  27. package/dist/dashboard/{merge-agent-yudQOPZc.js.map → merge-agent-Dxxc4JEE.js.map} +1 -1
  28. package/dist/dashboard/public/assets/{dist-CXaO6nOE.js → dist-DS1gmhe1.js} +1 -1
  29. package/dist/dashboard/public/assets/index-DjGsaJLv.js +212 -0
  30. package/dist/dashboard/public/index.html +1 -1
  31. package/dist/dashboard/{review-status-BtXqWBhS.js → review-status-Dww2OKUX.js} +1 -1
  32. package/dist/dashboard/{review-status-Bymwzh2i.js → review-status-d_wOE-XQ.js} +3 -3
  33. package/dist/dashboard/{review-status-Bymwzh2i.js.map → review-status-d_wOE-XQ.js.map} +1 -1
  34. package/dist/dashboard/server.js +97 -97
  35. package/dist/dashboard/settings-BHlDG7TK.js.map +1 -1
  36. package/dist/dashboard/{spawn-planning-session-D5hrVdWM.js → spawn-planning-session-D5uEpHzf.js} +1 -1
  37. package/dist/dashboard/{spawn-planning-session-33Jf-d5T.js → spawn-planning-session-DtbNfA2Q.js} +3 -3
  38. package/dist/dashboard/{spawn-planning-session-33Jf-d5T.js.map → spawn-planning-session-DtbNfA2Q.js.map} +1 -1
  39. package/dist/dashboard/{specialist-context-DGukHSn8.js → specialist-context-CEKqWqyF.js} +4 -4
  40. package/dist/dashboard/{specialist-context-DGukHSn8.js.map → specialist-context-CEKqWqyF.js.map} +1 -1
  41. package/dist/dashboard/{specialist-logs-CIw4qfTy.js → specialist-logs-CBGVRoQF.js} +1 -1
  42. package/dist/dashboard/{specialists-Cp-PgspS.js → specialists-sIFlMd3s.js} +1 -1
  43. package/dist/dashboard/{specialists-B_zrayaP.js → specialists-saEYE0-z.js} +20 -20
  44. package/dist/dashboard/{specialists-B_zrayaP.js.map → specialists-saEYE0-z.js.map} +1 -1
  45. package/dist/dashboard/{test-agent-queue-ypF_ecHo.js → test-agent-queue-7jXB2KkN.js} +3 -3
  46. package/dist/dashboard/{test-agent-queue-ypF_ecHo.js.map → test-agent-queue-7jXB2KkN.js.map} +1 -1
  47. package/dist/dashboard/{tracker-config-BP59uH4V.js → tracker-config-BX6ijWOc.js} +1 -1
  48. package/dist/dashboard/{tracker-config-e7ph1QqT.js → tracker-config-tD22z5sv.js} +2 -2
  49. package/dist/dashboard/{tracker-config-e7ph1QqT.js.map → tracker-config-tD22z5sv.js.map} +1 -1
  50. package/dist/dashboard/{work-agent-prompt-fCg67nyo.js → work-agent-prompt-D3tPzPvb.js} +2 -2
  51. package/dist/dashboard/{work-agent-prompt-fCg67nyo.js.map → work-agent-prompt-D3tPzPvb.js.map} +1 -1
  52. package/dist/dashboard/{work-type-router-CWVW2Wk_.js → work-type-router-7kwLSwrP.js} +4 -2
  53. package/dist/dashboard/work-type-router-7kwLSwrP.js.map +1 -0
  54. package/dist/dashboard/{work-type-router-Di5gCQwh.js → work-type-router-ByOOudGz.js} +1 -1
  55. package/dist/dashboard/workflows-BDpPjK18.js +2 -0
  56. package/dist/dashboard/{workflows-BSMipN07.js → workflows-DcEeDkbS.js} +3 -3
  57. package/dist/dashboard/{workflows-BSMipN07.js.map → workflows-DcEeDkbS.js.map} +1 -1
  58. package/dist/{factory-BRBGw6OB.js → factory-BR48tuUR.js} +1 -1
  59. package/dist/{factory-DzsOiZVc.js → factory-D6LJaZ__.js} +2 -2
  60. package/dist/{factory-DzsOiZVc.js.map → factory-D6LJaZ__.js.map} +1 -1
  61. package/dist/index.d.ts +1 -1
  62. package/dist/index.js +3 -3
  63. package/dist/{merge-agent-DlUiUanN.js → merge-agent-BBwHwpn2.js} +3 -3
  64. package/dist/{merge-agent-DlUiUanN.js.map → merge-agent-BBwHwpn2.js.map} +1 -1
  65. package/dist/{review-status-DEDvCKMP.js → review-status-Ba6llgCb.js} +3 -3
  66. package/dist/{review-status-DEDvCKMP.js.map → review-status-Ba6llgCb.js.map} +1 -1
  67. package/dist/{review-status-D6H2WOw8.js → review-status-Chxzuwn2.js} +1 -1
  68. package/dist/{settings-BcWPTrua.js → settings-A-CWz_ph.js} +6 -2
  69. package/dist/{settings-BcWPTrua.js.map → settings-A-CWz_ph.js.map} +1 -1
  70. package/dist/{specialist-context-BAUWL1Fl.js → specialist-context-B3lknlwi.js} +4 -4
  71. package/dist/{specialist-context-BAUWL1Fl.js.map → specialist-context-B3lknlwi.js.map} +1 -1
  72. package/dist/{specialist-logs-DQKKQV9B.js → specialist-logs-DDyY4xqo.js} +1 -1
  73. package/dist/{specialists-D7Kj5o6s.js → specialists-DvTYu1VZ.js} +20 -20
  74. package/dist/{specialists-D7Kj5o6s.js.map → specialists-DvTYu1VZ.js.map} +1 -1
  75. package/dist/{specialists-Bfb9ATzw.js → specialists-DyB4IRlM.js} +1 -1
  76. package/dist/sync-CLVqiGl4.js +2 -0
  77. package/dist/{sync-DMfgd389.js → sync-DTHFlEc-.js} +2 -2
  78. package/dist/{sync-DMfgd389.js.map → sync-DTHFlEc-.js.map} +1 -1
  79. package/dist/{tracker-BhYYvU3p.js → tracker-CYpb7oUa.js} +2 -2
  80. package/dist/{tracker-BhYYvU3p.js.map → tracker-CYpb7oUa.js.map} +1 -1
  81. package/dist/{work-type-router-CHjciPyS.js → work-type-router-oCgTPXsP.js} +4 -2
  82. package/dist/work-type-router-oCgTPXsP.js.map +1 -0
  83. package/package.json +1 -1
  84. package/dist/config-yaml-DGbLSMCa.js.map +0 -1
  85. package/dist/dashboard/public/assets/index-CzFZIb87.js +0 -212
  86. package/dist/dashboard/work-type-router-CWVW2Wk_.js.map +0 -1
  87. package/dist/dashboard/workflows-DaYWQIS2.js +0 -2
  88. package/dist/sync-TL6y-8K6.js +0 -2
  89. package/dist/work-type-router-CHjciPyS.js.map +0 -1
@@ -1,30 +1,30 @@
1
1
  import { a as __toCommonJS, i as __require, o as __toESM, t as __commonJSMin } from "./chunk-DORXReHP.js";
2
2
  import { _ as init_paths, d as PROJECT_PRDS_COMPLETED_SUBDIR, f as PROJECT_PRDS_PLANNED_SUBDIR, h as encodeClaudeProjectDir, l as PROJECT_DOCS_SUBDIR, p as PROJECT_PRDS_SUBDIR, s as PANOPTICON_HOME, t as AGENTS_DIR, u as PROJECT_PRDS_ACTIVE_SUBDIR } from "./paths-BDyJ7BiV.js";
3
3
  import { i as initEventStore, n as getEventStore } from "./event-store-vSmAA3Zp.js";
4
- import { a as MODEL_CAPABILITIES, c as init_model_capabilities, d as jsYaml, i as loadConfig$1, l as resolveModelId, o as MODEL_DEPRECATIONS, r as init_config_yaml, t as getGlobalConfigPath, u as init_js_yaml } from "./config-yaml-DSfYpzN6.js";
4
+ import { a as MODEL_CAPABILITIES, c as init_model_capabilities, d as jsYaml, i as loadConfig$1, l as resolveModelId, o as MODEL_DEPRECATIONS, r as init_config_yaml, t as getGlobalConfigPath, u as init_js_yaml } from "./config-yaml-DUu0JI25.js";
5
5
  import { t as require_dist } from "./dist-C667LLmq.js";
6
6
  import { n as extractPrefix, r as init_issue_id, t as extractNumber } from "./issue-id-vwYJdsf8.js";
7
7
  import { a as findProjectByTeam, h as listProjects, i as findProjectByPath, p as init_projects, r as extractTeamPrefix, s as getIssuePrefix, y as resolveProjectFromIssue } from "./projects-CFVl4oHn.js";
8
- import { i as init_tracker_config, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-e7ph1QqT.js";
9
- import { d as runQualityGates, f as emitDashboardLifecycle, l as syncMainIntoWorkspace, m as resolveTrackerType, p as resolveGitHubIssue, u as DEFAULT_GATES } from "./merge-agent-yudQOPZc.js";
10
- import { i as startSharedIssueService, n as init_issue_service_singleton, r as issue_service_singleton_exports, t as getSharedIssueService } from "./issue-service-singleton-Wv4xBm3y.js";
8
+ import { i as init_tracker_config, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-tD22z5sv.js";
9
+ import { d as runQualityGates, f as emitDashboardLifecycle, l as syncMainIntoWorkspace, m as resolveTrackerType, p as resolveGitHubIssue, u as DEFAULT_GATES } from "./merge-agent-Dxxc4JEE.js";
10
+ import { i as startSharedIssueService, n as init_issue_service_singleton, r as issue_service_singleton_exports, t as getSharedIssueService } from "./issue-service-singleton-BCZ62hLj.js";
11
11
  import { r as setPipelineHandler, t as init_pipeline_notifier } from "./pipeline-notifier-CCSN-jar.js";
12
12
  import { i as init_database, n as getDatabase, t as closeDatabase } from "./database-cxmQryoh.js";
13
- import { a as loadReviewStatuses, i as init_review_status, n as clearStuckMergeStatuses, o as saveReviewStatuses, r as getReviewStatus, s as setReviewStatus$1, t as clearReviewStatus } from "./review-status-Bymwzh2i.js";
14
- import { At as getSessionFiles, Ct as getUnblockedItems, Dt as readSpecialistHandoffs, Et as init_specialist_handoff_logger, Ft as getPricing, It as init_cost, Mt as normalizeModelName, Nt as parseClaudeSession, O as getTmuxSessionName, Ot as getActiveSessionModel, Pt as calculateCost, Tt as getSpecialistHandoffStats, f as getAllProjectSpecialistStatuses, it as wakeSpecialistOrQueue, j as init_specialists, jt as init_jsonl_parser, kt as getProjectDirs, q as setSessionId, r as checkSpecialistQueue, w as getSessionId, wt as init_task_readiness } from "./specialists-B_zrayaP.js";
13
+ import { a as loadReviewStatuses, i as init_review_status, n as clearStuckMergeStatuses, o as saveReviewStatuses, r as getReviewStatus, s as setReviewStatus$1, t as clearReviewStatus } from "./review-status-d_wOE-XQ.js";
14
+ import { At as getSessionFiles, Ct as getUnblockedItems, Dt as readSpecialistHandoffs, Et as init_specialist_handoff_logger, Ft as getPricing, It as init_cost, Mt as normalizeModelName, Nt as parseClaudeSession, O as getTmuxSessionName, Ot as getActiveSessionModel, Pt as calculateCost, Tt as getSpecialistHandoffStats, f as getAllProjectSpecialistStatuses, it as wakeSpecialistOrQueue, j as init_specialists, jt as init_jsonl_parser, kt as getProjectDirs, q as setSessionId, r as checkSpecialistQueue, w as getSessionId, wt as init_task_readiness } from "./specialists-saEYE0-z.js";
15
15
  import { t as getAgentCommand } from "./settings-BHlDG7TK.js";
16
16
  import { a as init_providers, i as getProviderForModel, r as getProviderEnv } from "./providers-B5Y4H2Mg.js";
17
- import { n as spawnPlanningSession } from "./spawn-planning-session-33Jf-d5T.js";
17
+ import { n as spawnPlanningSession } from "./spawn-planning-session-DtbNfA2Q.js";
18
18
  import { c as loadWorkspaceMetadata, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-ObpNZ7hF.js";
19
19
  import { d as sessionExistsAsync, i as createSession, l as sendKeysAsync, o as init_tmux, s as killSession, u as sessionExists } from "./tmux-LwG0tHhU.js";
20
20
  import { a as init_config, o as loadConfig$2 } from "./config-CDkGjnwy.js";
21
- import { A as saveCloisterConfig, C as stopAgent, D as getHealthThresholdsMs, O as init_config$1, S as spawnAgent, T as transitionIssueToInReview, a as getAgentDir, b as saveAgentState, c as getAgentState, d as getProviderExportsForModel, f as getProviderTmuxFlags, g as messageAgent, h as listRunningAgents, i as getActivity, j as shouldAutoStart, k as loadCloisterConfig, l as getLatestSessionId, m as init_agents, p as getSessionId$1, s as getAgentRuntimeState, u as getProviderEnvForModel, v as resumeAgent, w as transitionIssueToInProgress, x as saveSessionId, y as saveAgentRuntimeState } from "./agents-DCpQQ_W5.js";
21
+ import { A as saveCloisterConfig, C as stopAgent, D as getHealthThresholdsMs, O as init_config$1, S as spawnAgent, T as transitionIssueToInReview, a as getAgentDir, b as saveAgentState, c as getAgentState, d as getProviderExportsForModel, f as getProviderTmuxFlags, g as messageAgent, h as listRunningAgents, i as getActivity, j as shouldAutoStart, k as loadCloisterConfig, l as getLatestSessionId, m as init_agents, p as getSessionId$1, s as getAgentRuntimeState, u as getProviderEnvForModel, v as resumeAgent, w as transitionIssueToInProgress, x as saveSessionId, y as saveAgentRuntimeState } from "./agents-BQWA-Vps.js";
22
22
  import { c as writeHealthEvent } from "./health-events-db-Do4NrOhC.js";
23
23
  import { s as init_hooks, t as checkHook } from "./hooks-CjqXOlNb.js";
24
- import { a as getModelId, s as init_work_type_router } from "./work-type-router-CWVW2Wk_.js";
24
+ import { a as getModelId, s as init_work_type_router } from "./work-type-router-7kwLSwrP.js";
25
25
  import { i as readWorkspacePlan, n as init_io, r as readPlan, t as findPlan } from "./io-DKS6359z.js";
26
26
  import { n as hasPRDDraft } from "./prd-draft-BD8oMkZ1.js";
27
- import { a as getAgentPendingQuestions$1, r as getAgentJsonlMtime, t as computeAgentEnrichment } from "./agent-enrichment-DdO7ZqjI.js";
27
+ import { a as getAgentPendingQuestions$1, r as getAgentJsonlMtime, t as computeAgentEnrichment } from "./agent-enrichment-BKZjVvlL.js";
28
28
  import { n as writeFeedbackFile, t as init_feedback_writer } from "./feedback-writer-CudSe1WK.js";
29
29
  import { n as getVBriefACStatus, r as syncBeadStatusToVBrief } from "./beads-Bv-AdX7G.js";
30
30
  import { n as getTldrDaemonService, r as init_tldr_daemon } from "./tldr-daemon-B_oLRD8z.js";
@@ -1406,10 +1406,10 @@ const ReadModelServiceLive = Layer.effect(ReadModelService, Effect.gen(function*
1406
1406
  } catch {}
1407
1407
  if (!usedProjectionCache) {
1408
1408
  const [{ listRunningAgents, warnOnBareNumericIssueIds }, { getAllSpecialists, getSpecialistState }, { loadReviewStatuses, getReviewStatus }, { computeAgentEnrichment }] = yield* Effect.all([
1409
- Effect.promise(() => import("./agents-Dgh2TjSp.js")),
1410
- Effect.promise(() => import("./specialists-Cp-PgspS.js")),
1411
- Effect.promise(() => import("./review-status-BtXqWBhS.js")),
1412
- Effect.promise(() => import("./agent-enrichment-dLeGE1fX.js"))
1409
+ Effect.promise(() => import("./agents-Dinc9j_8.js")),
1410
+ Effect.promise(() => import("./specialists-sIFlMd3s.js")),
1411
+ Effect.promise(() => import("./review-status-Dww2OKUX.js")),
1412
+ Effect.promise(() => import("./agent-enrichment-iY3_PylI.js"))
1413
1413
  ]);
1414
1414
  warnOnBareNumericIssueIds();
1415
1415
  const running = listRunningAgents();
@@ -1489,7 +1489,7 @@ const ReadModelServiceLive = Layer.effect(ReadModelService, Effect.gen(function*
1489
1489
  console.log(`[ReadModel] Bootstrapped: ${Object.keys(agentsById).length} agents, ${Object.keys(specialistsByName).length} specialists, ${Object.keys(reviewStatusByIssueId).length} review statuses, seq=${sequence}`);
1490
1490
  }
1491
1491
  try {
1492
- const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-Co__-6kL.js"));
1492
+ const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-BGKf0A95.js"));
1493
1493
  const issueService = getSharedIssueService();
1494
1494
  const currentIssues = JSON.parse(JSON.stringify(issueService.getIssues()));
1495
1495
  if (currentIssues.length > 0 || !usedProjectionCache) state = {
@@ -2527,7 +2527,7 @@ const IssueLifecycleLive = Layer.effect(IssueLifecycle, Effect.gen(function* ()
2527
2527
  }));
2528
2528
  IssueLifecycleLive.pipe(Layer.provide(LinearClientOptionalLive), Layer.provide(GitHubClientOptionalLive), Layer.provide(Layer.effect(RallyClient, Effect.gen(function* () {
2529
2529
  return yield* Effect.gen(function* () {
2530
- const { getRallyConfig } = yield* Effect.promise(() => import("./tracker-config-BP59uH4V.js"));
2530
+ const { getRallyConfig } = yield* Effect.promise(() => import("./tracker-config-BX6ijWOc.js"));
2531
2531
  if (!getRallyConfig()) {
2532
2532
  const fail = Effect.fail(new TrackerNotConfigured({ tracker: "rally" }));
2533
2533
  return {
@@ -2560,7 +2560,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
2560
2560
  const beadsDir = join$1(workspacePath, ".beads");
2561
2561
  const projectBeadsDir = join$1(workspacePath, "..", "..", ".beads");
2562
2562
  if (!(existsSync$1(beadsDir) || existsSync$1(projectBeadsDir))) throw new BeadsNotInitialized({ workspace: workspacePath });
2563
- const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-Dgh2TjSp.js");
2563
+ const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-Dinc9j_8.js");
2564
2564
  const normalizedId = normalizeAgentId(issueId);
2565
2565
  if (getAgentState(normalizedId)?.status === "running") throw new AgentAlreadyRunning({ id: issueId });
2566
2566
  return {
@@ -2597,7 +2597,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
2597
2597
  const { writeFile } = fsp;
2598
2598
  await writeFile(planningPromptPath, opts.issue.description ?? "", "utf-8");
2599
2599
  const sessionName = opts.sessionName ?? `planning-${issueId.toLowerCase()}`;
2600
- const { spawnPlanningSession } = await import("./spawn-planning-session-D5hrVdWM.js");
2600
+ const { spawnPlanningSession } = await import("./spawn-planning-session-D5uEpHzf.js");
2601
2601
  const result = await spawnPlanningSession({
2602
2602
  issue: {
2603
2603
  id: issue.id,
@@ -2629,14 +2629,14 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
2629
2629
  }),
2630
2630
  kill: (agentId) => Effect.tryPromise({
2631
2631
  try: async () => {
2632
- const { stopAgent } = await import("./agents-Dgh2TjSp.js");
2632
+ const { stopAgent } = await import("./agents-Dinc9j_8.js");
2633
2633
  stopAgent(agentId);
2634
2634
  },
2635
2635
  catch: () => void 0
2636
2636
  }).pipe(Effect.ignore),
2637
2637
  message: (agentId, msg) => Effect.tryPromise({
2638
2638
  try: async () => {
2639
- const { messageAgent } = await import("./agents-Dgh2TjSp.js");
2639
+ const { messageAgent } = await import("./agents-Dinc9j_8.js");
2640
2640
  await messageAgent(agentId, msg);
2641
2641
  },
2642
2642
  catch: (err) => new AgentStartError({
@@ -2647,7 +2647,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
2647
2647
  }),
2648
2648
  deepWipe: (issueId, opts) => Effect.tryPromise({
2649
2649
  try: async () => {
2650
- const { deepWipe } = await import("./workflows-DaYWQIS2.js");
2650
+ const { deepWipe } = await import("./workflows-BDpPjK18.js");
2651
2651
  const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
2652
2652
  const project = resolveProjectFromIssue(issueId);
2653
2653
  await deepWipe({
@@ -8854,7 +8854,7 @@ const postIssueCloseRoute = HttpRouter.add("POST", "/api/issues/:issueId/close",
8854
8854
  const eventStore = yield* EventStoreService;
8855
8855
  const { reason } = body;
8856
8856
  const projectPath = getProjectPath$4(void 0, extractPrefix(issueId) ?? issueId.split("-")[0]);
8857
- const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-BcUmtkR4.js"));
8857
+ const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-Dpgg-IeP.js"));
8858
8858
  const githubCheck = isGitHubIssue$1(issueId);
8859
8859
  const issueDataService = getIssueDataService$3();
8860
8860
  const issueSource = issueDataService.getIssueSource(issueId);
@@ -9542,7 +9542,7 @@ const postIssueCancelRoute = HttpRouter.add("POST", "/api/issues/:id/cancel", ht
9542
9542
  });
9543
9543
  if (wipeWorkspace) yield* Effect.promise(async () => {
9544
9544
  try {
9545
- const { deepWipe } = await import("./lifecycle-BcUmtkR4.js");
9545
+ const { deepWipe } = await import("./lifecycle-Dpgg-IeP.js");
9546
9546
  const issuePrefix = extractTeamPrefix(id);
9547
9547
  const projectPath = getProjectPath$4(void 0, issuePrefix);
9548
9548
  const projectConfig = findProjectByTeam(issuePrefix);
@@ -9644,7 +9644,7 @@ const postIssueReopenRoute = HttpRouter.add("POST", "/api/issues/:id/reopen", ht
9644
9644
  yield* Effect.promise(async () => {
9645
9645
  try {
9646
9646
  clearReviewStatus(id.toUpperCase());
9647
- const { checkSpecialistQueue, completeSpecialistTask } = await import("./specialists-Cp-PgspS.js");
9647
+ const { checkSpecialistQueue, completeSpecialistTask } = await import("./specialists-sIFlMd3s.js");
9648
9648
  for (const specialist of [
9649
9649
  "review-agent",
9650
9650
  "test-agent",
@@ -9655,7 +9655,7 @@ const postIssueReopenRoute = HttpRouter.add("POST", "/api/issues/:id/reopen", ht
9655
9655
  }
9656
9656
  } catch {}
9657
9657
  try {
9658
- const { resetPostMergeState } = await import("./merge-agent-CGN3TT0a.js");
9658
+ const { resetPostMergeState } = await import("./merge-agent-CqvQu-n_.js");
9659
9659
  resetPostMergeState(id);
9660
9660
  resetPostMergeState(id.toUpperCase());
9661
9661
  } catch {}
@@ -9871,7 +9871,7 @@ const postIssueDeepWipeRoute = HttpRouter.add("POST", "/api/issues/:id/deep-wipe
9871
9871
  const body = yield* readJsonBody$9;
9872
9872
  const eventStore = yield* EventStoreService;
9873
9873
  const { deleteWorkspace = false } = body || {};
9874
- const { deepWipe } = yield* Effect.promise(() => import("./lifecycle-BcUmtkR4.js"));
9874
+ const { deepWipe } = yield* Effect.promise(() => import("./lifecycle-Dpgg-IeP.js"));
9875
9875
  const githubCheck = isGitHubIssue$1(id);
9876
9876
  let projectPath = "";
9877
9877
  let projectName = "";
@@ -9972,7 +9972,7 @@ const postIssueDeepWipeRoute = HttpRouter.add("POST", "/api/issues/:id/deep-wipe
9972
9972
  const postIssueCloseOutRoute = HttpRouter.add("POST", "/api/issues/:id/close-out", httpHandler(Effect.gen(function* () {
9973
9973
  const id = (yield* HttpRouter.params)["id"] ?? "";
9974
9974
  const eventStore = yield* EventStoreService;
9975
- const { closeOut } = yield* Effect.promise(() => import("./lifecycle-BcUmtkR4.js"));
9975
+ const { closeOut } = yield* Effect.promise(() => import("./lifecycle-Dpgg-IeP.js"));
9976
9976
  const githubCheck = isGitHubIssue$1(id);
9977
9977
  let projectPath = "";
9978
9978
  if (githubCheck.isGitHub && githubCheck.owner && githubCheck.repo) projectPath = getGitHubLocalPaths$1()[`${githubCheck.owner}/${githubCheck.repo}`] || "";
@@ -12285,7 +12285,7 @@ async function checkOrphanedReviewStatuses() {
12285
12285
  const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
12286
12286
  const resolved = resolveProjectFromIssue(issueId);
12287
12287
  if (resolved) {
12288
- const { spawnEphemeralSpecialist } = await import("./specialists-Cp-PgspS.js");
12288
+ const { spawnEphemeralSpecialist } = await import("./specialists-sIFlMd3s.js");
12289
12289
  const result = await spawnEphemeralSpecialist(resolved.projectKey, "review-agent", {
12290
12290
  issueId,
12291
12291
  workspace,
@@ -12298,7 +12298,7 @@ async function checkOrphanedReviewStatuses() {
12298
12298
  actions.push(`Re-dispatched pending review for ${issueId} via ${resolved.projectKey}/review-agent (deacon-orphan-recovery)`);
12299
12299
  console.log(`[deacon] Re-dispatched review for ${issueId} after orphan/pending detection (project: ${resolved.projectKey})`);
12300
12300
  } else if (result.error === "specialist_busy") {
12301
- const { submitToSpecialistQueue } = await import("./specialists-Cp-PgspS.js");
12301
+ const { submitToSpecialistQueue } = await import("./specialists-sIFlMd3s.js");
12302
12302
  submitToSpecialistQueue("review-agent", {
12303
12303
  priority: "high",
12304
12304
  source: "deacon-orphan-recovery",
@@ -12339,7 +12339,7 @@ async function checkOrphanedReviewStatuses() {
12339
12339
  const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
12340
12340
  const resolved = resolveProjectFromIssue(issueId);
12341
12341
  if (resolved) {
12342
- const { spawnEphemeralSpecialist } = await import("./specialists-Cp-PgspS.js");
12342
+ const { spawnEphemeralSpecialist } = await import("./specialists-sIFlMd3s.js");
12343
12343
  const result = await spawnEphemeralSpecialist(resolved.projectKey, "test-agent", {
12344
12344
  issueId,
12345
12345
  workspace,
@@ -12351,7 +12351,7 @@ async function checkOrphanedReviewStatuses() {
12351
12351
  actions.push(`Re-dispatched orphaned test for ${issueId} via ${resolved.projectKey}/test-agent (deacon-orphan-recovery)`);
12352
12352
  console.log(`[deacon] Re-dispatched test for ${issueId} after orphan detection (project: ${resolved.projectKey})`);
12353
12353
  } else if (result.error === "specialist_busy") {
12354
- const { submitToSpecialistQueue } = await import("./specialists-Cp-PgspS.js");
12354
+ const { submitToSpecialistQueue } = await import("./specialists-sIFlMd3s.js");
12355
12355
  submitToSpecialistQueue("test-agent", {
12356
12356
  priority: "high",
12357
12357
  source: "deacon-orphan-recovery",
@@ -12720,8 +12720,8 @@ async function patrolWorkAgentResolutions() {
12720
12720
  async function checkSpecialistQueues() {
12721
12721
  const actions = [];
12722
12722
  try {
12723
- const { checkSpecialistQueue, spawnEphemeralSpecialist, getTmuxSessionName, isRunning } = await import("./specialists-Cp-PgspS.js");
12724
- const { getAgentRuntimeState } = await import("./agents-Dgh2TjSp.js");
12723
+ const { checkSpecialistQueue, spawnEphemeralSpecialist, getTmuxSessionName, isRunning } = await import("./specialists-sIFlMd3s.js");
12724
+ const { getAgentRuntimeState } = await import("./agents-Dinc9j_8.js");
12725
12725
  const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
12726
12726
  for (const specialistType of [
12727
12727
  "review-agent",
@@ -12902,7 +12902,7 @@ async function runPatrol() {
12902
12902
  statuses[issueId].mergeStatus = "merged";
12903
12903
  statuses[issueId].readyForMerge = false;
12904
12904
  writeFileSync(REVIEW_STATUS_FILE, JSON.stringify(statuses, null, 2), "utf-8");
12905
- const { postMergeLifecycle } = await import("./merge-agent-CGN3TT0a.js");
12905
+ const { postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
12906
12906
  postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
12907
12907
  actions.push(`Auto-completed stale merge for ${issueId}`);
12908
12908
  } else {
@@ -13160,7 +13160,7 @@ var CloisterService = class {
13160
13160
  }
13161
13161
  try {
13162
13162
  if (existsSync(AGENTS_DIR)) {
13163
- const { isRunning: isSpecialistRunning } = await import("./specialists-Cp-PgspS.js");
13163
+ const { isRunning: isSpecialistRunning } = await import("./specialists-sIFlMd3s.js");
13164
13164
  const specialistPattern = /^specialist-(.+)-(review-agent|test-agent|merge-agent)$/;
13165
13165
  const entries = readdirSync(AGENTS_DIR, { withFileTypes: true });
13166
13166
  for (const entry of entries) {
@@ -13192,7 +13192,7 @@ var CloisterService = class {
13192
13192
  try {
13193
13193
  const reviewStatuses = loadReviewStatuses();
13194
13194
  const { resolveProjectFromIssue } = await import("./projects-C5ozxjwP.js");
13195
- const { submitToSpecialistQueue, getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-Cp-PgspS.js");
13195
+ const { submitToSpecialistQueue, getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-sIFlMd3s.js");
13196
13196
  const activeReviewIssues = /* @__PURE__ */ new Set();
13197
13197
  try {
13198
13198
  const projSpecs = await getAllProjectSpecialistStatuses();
@@ -13416,7 +13416,7 @@ var CloisterService = class {
13416
13416
  const retryCount = this.processedCompletions.get(dir.name) || 0;
13417
13417
  if (retryCount >= 3) continue;
13418
13418
  const issueId = dir.name.replace("agent-", "").toUpperCase();
13419
- const { getReviewStatus } = await import("./review-status-BtXqWBhS.js");
13419
+ const { getReviewStatus } = await import("./review-status-Dww2OKUX.js");
13420
13420
  const existingReview = getReviewStatus(issueId);
13421
13421
  if (existingReview && ["reviewing", "passed"].includes(existingReview.reviewStatus || "")) {
13422
13422
  console.log(`🔔 Cloister: Completion marker for ${issueId} — review already ${existingReview.reviewStatus}, marking processed`);
@@ -14976,7 +14976,7 @@ const postAgentsRoute = HttpRouter.add("POST", "/api/agents", httpHandler(Effect
14976
14976
  const { loadConfig: loadPanConfig } = yield* Effect.promise(() => import("./config-CTXkBATQ.js"));
14977
14977
  const fly = createFlyProviderFromConfig(loadPanConfig().remote);
14978
14978
  yield* Effect.promise(() => fly.syncAllCredentials(workspaceMetadata.vmName));
14979
- const { buildWorkAgentPrompt, getTrackerContext } = yield* Effect.promise(() => import("./work-agent-prompt-fCg67nyo.js"));
14979
+ const { buildWorkAgentPrompt, getTrackerContext } = yield* Effect.promise(() => import("./work-agent-prompt-D3tPzPvb.js"));
14980
14980
  const agentPrompt = buildWorkAgentPrompt({
14981
14981
  issueId,
14982
14982
  env: "REMOTE",
@@ -15043,7 +15043,7 @@ const postAgentsRoute = HttpRouter.add("POST", "/api/agents", httpHandler(Effect
15043
15043
  yield* Effect.promise(() => writeFile(resumePromptFile, resumePrompt));
15044
15044
  let agentModel = existingAgentState.model || "claude-sonnet-4-6";
15045
15045
  try {
15046
- const { getModelId } = yield* Effect.promise(() => import("./work-type-router-Di5gCQwh.js"));
15046
+ const { getModelId } = yield* Effect.promise(() => import("./work-type-router-ByOOudGz.js"));
15047
15047
  agentModel = getModelId(`issue-agent:${phase}`);
15048
15048
  } catch {}
15049
15049
  const resumeContent = `#!/bin/bash\n${getProviderExportsForModel(agentModel)}prompt=$(cat "${resumePromptFile}")\nexec claude --dangerously-skip-permissions --model ${agentModel} -p "$prompt"\n`;
@@ -17024,7 +17024,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/workspaces/:
17024
17024
  if (testNotes) update.testNotes = testNotes;
17025
17025
  const status = setReviewStatus(issueId, update);
17026
17026
  console.log(`[review-status] Updated ${issueId}:`, status);
17027
- const { getTmuxSessionName, checkSpecialistQueue: cSQ, completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
17027
+ const { getTmuxSessionName, checkSpecialistQueue: cSQ, completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
17028
17028
  const projectKey = resolveProjectFromIssue(issueId)?.projectKey;
17029
17029
  if (reviewStatus && [
17030
17030
  "passed",
@@ -17081,7 +17081,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/workspaces/:
17081
17081
  const projectPath = getProjectPath$2(void 0, extractPrefix(issueId) ?? issueId.split("-")[0]);
17082
17082
  const testWorkspace = body.workspace || join$1(projectPath, "workspaces", `feature-${issueLower}`);
17083
17083
  const testBranch = body.branch || `feature/${issueLower}`;
17084
- const { autoQueueTestAgentAndNotify } = yield* Effect.promise(() => import("./test-agent-queue-ypF_ecHo.js"));
17084
+ const { autoQueueTestAgentAndNotify } = yield* Effect.promise(() => import("./test-agent-queue-7jXB2KkN.js"));
17085
17085
  try {
17086
17086
  yield* Effect.promise(() => autoQueueTestAgentAndNotify(issueId, testWorkspace, testBranch, messageAgent));
17087
17087
  yield* Effect.promise(() => Effect.runPromise(eventStore.append({
@@ -17286,7 +17286,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/workspaces/:issueI
17286
17286
  });
17287
17287
  return;
17288
17288
  }
17289
- const { spawnEphemeralSpecialist: spawnEphemeral, isRunning, getTmuxSessionName, submitToSpecialistQueue } = await import("./specialists-Cp-PgspS.js");
17289
+ const { spawnEphemeralSpecialist: spawnEphemeral, isRunning, getTmuxSessionName, submitToSpecialistQueue } = await import("./specialists-sIFlMd3s.js");
17290
17290
  const reviewProjectKey = resolveProjectFromIssue(issueId)?.projectKey ?? null;
17291
17291
  const reviewSession = getTmuxSessionName("review-agent", reviewProjectKey ?? void 0);
17292
17292
  const reviewRunning = await isRunning("review-agent", reviewProjectKey ?? void 0);
@@ -17371,7 +17371,7 @@ ${workspaceAccessInstructions}
17371
17371
  if (!reviewResult.success) {
17372
17372
  if (reviewResult.error === "specialist_busy") {
17373
17373
  console.log(`[review] review-agent busy for ${issueId} — queuing for deacon dispatch`);
17374
- const { submitToSpecialistQueue } = await import("./specialists-Cp-PgspS.js");
17374
+ const { submitToSpecialistQueue } = await import("./specialists-sIFlMd3s.js");
17375
17375
  submitToSpecialistQueue("review-agent", {
17376
17376
  priority: "high",
17377
17377
  source: "review-pipeline",
@@ -17439,7 +17439,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/workspaces/
17439
17439
  const workspacePath = join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
17440
17440
  const branchName = `feature/${issueId.toLowerCase()}`;
17441
17441
  setReviewStatus(issueId, { testStatus: "testing" });
17442
- const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
17442
+ const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
17443
17443
  const testResult = yield* Effect.promise(() => spawnEphemeralSpecialist(resolved.projectKey, "test-agent", {
17444
17444
  issueId,
17445
17445
  workspace: workspacePath,
@@ -17520,7 +17520,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/workspaces/
17520
17520
  });
17521
17521
  console.log(`[request-review] Agent requested re-review for ${issueId} (${newCount}/${MAX_AUTO_REQUEUE})${workspaceInfo.isRemote ? ` (remote: ${workspaceInfo.vmName})` : ""}`);
17522
17522
  try {
17523
- const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
17523
+ const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
17524
17524
  const resolved = resolveProjectFromIssue(issueId);
17525
17525
  if (!resolved) return jsonResponse({
17526
17526
  success: false,
@@ -17549,7 +17549,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/workspaces/
17549
17549
  });
17550
17550
  } else if (result.error === "specialist_busy") {
17551
17551
  console.log(`[request-review] Review specialist busy for ${issueId} — queuing for deacon dispatch`);
17552
- const { submitToSpecialistQueue } = yield* Effect.promise(async () => import("./specialists-Cp-PgspS.js"));
17552
+ const { submitToSpecialistQueue } = yield* Effect.promise(async () => import("./specialists-sIFlMd3s.js"));
17553
17553
  submitToSpecialistQueue("review-agent", {
17554
17554
  priority: "high",
17555
17555
  source: "request-review",
@@ -17597,7 +17597,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/workspaces/:i
17597
17597
  error: "Workspace does not exist"
17598
17598
  }, { status: 400 });
17599
17599
  console.log(`[reset-review] Human-initiated pipeline reset for ${issueId}`);
17600
- const { checkSpecialistQueue: cSQ, completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
17600
+ const { checkSpecialistQueue: cSQ, completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
17601
17601
  for (const specialist of [
17602
17602
  "review-agent",
17603
17603
  "test-agent",
@@ -17623,13 +17623,13 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/workspaces/:i
17623
17623
  verificationCycleCount: 0
17624
17624
  });
17625
17625
  try {
17626
- const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-CGN3TT0a.js"));
17626
+ const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-CqvQu-n_.js"));
17627
17627
  resetPostMergeState(issueId);
17628
17628
  } catch {}
17629
17629
  console.log(`[reset-review] Pipeline state reset for ${issueId} — awaiting agent to request review`);
17630
17630
  const rerun = body?.rerun === true;
17631
17631
  if (rerun) try {
17632
- const { dispatchToSpecialist } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
17632
+ const { dispatchToSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
17633
17633
  const resolved = resolveProjectFromIssue(issueId);
17634
17634
  if (resolved) {
17635
17635
  const wsInfo = getWorkspaceInfoForIssue(issueId);
@@ -17791,7 +17791,7 @@ async function triggerMerge(issueId) {
17791
17791
  readyForMerge: false
17792
17792
  });
17793
17793
  completePendingOperation(issueId, null);
17794
- const { postMergeLifecycle } = await import("./merge-agent-CGN3TT0a.js");
17794
+ const { postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
17795
17795
  await postMergeLifecycle(issueId, projectPath);
17796
17796
  return {
17797
17797
  success: true,
@@ -17865,7 +17865,7 @@ async function triggerMerge(issueId) {
17865
17865
  console.log(`[merge] Push note for ${repo.name}: ${pushErr.message}`);
17866
17866
  }
17867
17867
  try {
17868
- const { spawnMergeAgentForBranches } = await import("./merge-agent-CGN3TT0a.js");
17868
+ const { spawnMergeAgentForBranches } = await import("./merge-agent-CqvQu-n_.js");
17869
17869
  const mergeResult = await spawnMergeAgentForBranches(repoMainPath, branchName, defaultBranch, issueId, { skipDoneReport: true });
17870
17870
  if (mergeResult.success) mergeResults.push({
17871
17871
  repo: repo.name,
@@ -17906,7 +17906,7 @@ async function triggerMerge(issueId) {
17906
17906
  readyForMerge: false
17907
17907
  });
17908
17908
  completePendingOperation(issueId, null);
17909
- const { postMergeLifecycle } = await import("./merge-agent-CGN3TT0a.js");
17909
+ const { postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
17910
17910
  await postMergeLifecycle(issueId, projectPath);
17911
17911
  return {
17912
17912
  success: true,
@@ -17941,7 +17941,7 @@ async function triggerMerge(issueId) {
17941
17941
  };
17942
17942
  }
17943
17943
  const prNumber = prMatch[1];
17944
- const { spawnRebaseAgentForBranch, postMergeLifecycle } = await import("./merge-agent-CGN3TT0a.js");
17944
+ const { spawnRebaseAgentForBranch, postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
17945
17945
  console.log(`[merge] Rebasing ${branchName} onto main for ${issueId}...`);
17946
17946
  const rebaseResult = await spawnRebaseAgentForBranch(workspacePath, branchName, "main", issueId);
17947
17947
  if (!rebaseResult.success) {
@@ -18076,7 +18076,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/workspaces/:issue
18076
18076
  completePendingOperation(issueId, error);
18077
18077
  return jsonResponse({ error }, { status: 400 });
18078
18078
  }
18079
- const { wakeSpecialist, spawnEphemeralSpecialist: spawnApproveEphemeral } = await import("./specialists-Cp-PgspS.js");
18079
+ const { wakeSpecialist, spawnEphemeralSpecialist: spawnApproveEphemeral } = await import("./specialists-sIFlMd3s.js");
18080
18080
  const approveProjectKey = resolveProjectFromIssue(issueId)?.projectKey ?? null;
18081
18081
  console.log(`[approve] Starting specialist pipeline for ${issueId}...`);
18082
18082
  const pipelinePrompt = `STRICT REVIEW WORKFLOW for ${issueId}
@@ -18155,7 +18155,7 @@ curl -X POST http://localhost:${PORT}/api/specialists/test-agent/queue -H "Conte
18155
18155
  }
18156
18156
  console.log(`[approve] Step 3/3: Waking merge-agent for ${issueId}...`);
18157
18157
  try {
18158
- const { spawnMergeAgentForBranches } = await import("./merge-agent-CGN3TT0a.js");
18158
+ const { spawnMergeAgentForBranches } = await import("./merge-agent-CqvQu-n_.js");
18159
18159
  const mergeResult = await spawnMergeAgentForBranches(projectPath, branchName, "main", issueId);
18160
18160
  if (mergeResult.success && mergeResult.testsStatus === "PASS") console.log(`merge-agent successfully merged ${issueId}`);
18161
18161
  else if (mergeResult.success && mergeResult.testsStatus === "SKIP") console.log(`merge-agent merged ${issueId} (tests skipped)`);
@@ -18213,7 +18213,7 @@ curl -X POST http://localhost:${PORT}/api/specialists/test-agent/queue -H "Conte
18213
18213
  completePendingOperation(issueId, error);
18214
18214
  return jsonResponse({ error }, { status: 400 });
18215
18215
  }
18216
- const { approve: lifecycleApprove } = await import("./lifecycle-BcUmtkR4.js");
18216
+ const { approve: lifecycleApprove } = await import("./lifecycle-Dpgg-IeP.js");
18217
18217
  const ghResolved = resolveGitHubIssue(issueId);
18218
18218
  const isGitHubIssueFlag = ghResolved.isGitHub;
18219
18219
  const lifecycleResult = await lifecycleApprove({
@@ -18363,7 +18363,7 @@ function firePostMergeLifecycle(issueId) {
18363
18363
  _postMergeInFlight.add(issueId);
18364
18364
  (async () => {
18365
18365
  try {
18366
- const { postMergeLifecycle } = await import("./merge-agent-CGN3TT0a.js");
18366
+ const { postMergeLifecycle } = await import("./merge-agent-CqvQu-n_.js");
18367
18367
  await postMergeLifecycle(issueId, projectPath);
18368
18368
  console.log(`[merge] post-merge lifecycle completed for ${issueId}`);
18369
18369
  } catch (err) {
@@ -18379,14 +18379,14 @@ function getProjectPathForIssue(issuePrefix) {
18379
18379
  return join$1(homedir(), "Projects");
18380
18380
  }
18381
18381
  const getSpecialistsRoute = HttpRouter.add("GET", "/api/specialists", httpHandler(Effect.gen(function* () {
18382
- const { getAllSpecialistStatus, getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18382
+ const { getAllSpecialistStatus, getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18383
18383
  return jsonResponse({
18384
18384
  specialists: yield* Effect.promise(() => getAllSpecialistStatus()),
18385
18385
  projects: yield* Effect.promise(() => getAllProjectSpecialistStatuses())
18386
18386
  });
18387
18387
  })));
18388
18388
  const postSpecialistsResetAllRoute = HttpRouter.add("POST", "/api/specialists/reset-all", httpHandler(Effect.gen(function* () {
18389
- const { getAllSpecialists, clearSessionId, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18389
+ const { getAllSpecialists, clearSessionId, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18390
18390
  const { clearHook } = yield* Effect.promise(() => import("./hooks-CB4T47NC.js"));
18391
18391
  const specialists = getAllSpecialists();
18392
18392
  const results = [];
@@ -18478,7 +18478,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
18478
18478
  const updatedStatus = setReviewStatus$1(normalizedIssueId, update);
18479
18479
  yield* Effect.promise(async () => {
18480
18480
  try {
18481
- const { getTmuxSessionName, checkSpecialistQueue, completeSpecialistTask } = await import("./specialists-Cp-PgspS.js");
18481
+ const { getTmuxSessionName, checkSpecialistQueue, completeSpecialistTask } = await import("./specialists-sIFlMd3s.js");
18482
18482
  saveAgentRuntimeState(getTmuxSessionName(`${specialist}-agent`), {
18483
18483
  state: "idle",
18484
18484
  lastActivity: (/* @__PURE__ */ new Date()).toISOString()
@@ -18511,7 +18511,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
18511
18511
  });
18512
18512
  if (specialist === "inspect" && status === "passed") yield* Effect.promise(async () => {
18513
18513
  try {
18514
- const { onInspectComplete } = await import("./inspect-agent-7eour7EA.js");
18514
+ const { onInspectComplete } = await import("./inspect-agent-KKOeNR7E.js");
18515
18515
  const beadId = (notes?.match(/[Bb]ead\s+(\S+)/))?.[1] || "unknown";
18516
18516
  const project = resolveProjectFromIssue(normalizedIssueId);
18517
18517
  if (project) {
@@ -18579,12 +18579,12 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
18579
18579
  try {
18580
18580
  const workAgentId = `agent-${normalizedIssueId.toLowerCase()}`;
18581
18581
  const { sessionExists } = await import("./tmux-BzxdKItf.js");
18582
- const { messageAgent } = await import("./agents-Dgh2TjSp.js");
18582
+ const { messageAgent } = await import("./agents-Dinc9j_8.js");
18583
18583
  if (sessionExists(workAgentId)) {
18584
18584
  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/workspaces/${normalizedIssueId}/request-review -H "Content-Type: application/json" -d "{}"\n\nConflict details: ${notes}`);
18585
18585
  console.log(`[specialists/done] Sent rebase instructions to ${workAgentId}`);
18586
18586
  } else try {
18587
- const { resumeAgent } = await import("./agents-Dgh2TjSp.js");
18587
+ const { resumeAgent } = await import("./agents-Dinc9j_8.js");
18588
18588
  const result = await resumeAgent(workAgentId, `MERGE CONFLICT: Your branch has conflicts with main. Run: git fetch origin main && git rebase origin/main, resolve conflicts, push with --force-with-lease, then resubmit for review.`);
18589
18589
  if (result.success) console.log(`[specialists/done] Resumed ${workAgentId} with rebase instructions`);
18590
18590
  else console.log(`[specialists/done] Could not resume ${workAgentId}: ${result.error}`);
@@ -18599,7 +18599,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
18599
18599
  try {
18600
18600
  const workAgentId = `agent-${normalizedIssueId.toLowerCase()}`;
18601
18601
  const { sessionExists } = await import("./tmux-BzxdKItf.js");
18602
- const { messageAgent } = await import("./agents-Dgh2TjSp.js");
18602
+ const { messageAgent } = await import("./agents-Dinc9j_8.js");
18603
18603
  if (sessionExists(workAgentId)) {
18604
18604
  await messageAgent(workAgentId, `REVIEW FEEDBACK: The review specialist found issues that must be fixed:\n\n${notes}\n\nPlease address all issues, push your changes, then resubmit: curl -s -X POST http://localhost:3011/api/workspaces/${normalizedIssueId}/request-review -H "Content-Type: application/json" -d "{}"`);
18605
18605
  console.log(`[specialists/done] Sent review feedback to ${workAgentId}`);
@@ -18635,7 +18635,7 @@ const postSpecialistsDoneRoute = HttpRouter.add("POST", "/api/specialists/done",
18635
18635
  });
18636
18636
  })));
18637
18637
  const postSpecialistsLogsCleanupAllRoute = HttpRouter.add("POST", "/api/specialists/logs/cleanup-all", httpHandler(Effect.gen(function* () {
18638
- const { cleanupAllLogs } = yield* Effect.promise(() => import("./specialist-logs-CIw4qfTy.js"));
18638
+ const { cleanupAllLogs } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
18639
18639
  const results = cleanupAllLogs();
18640
18640
  return jsonResponse({
18641
18641
  success: true,
@@ -18645,7 +18645,7 @@ const postSpecialistsLogsCleanupAllRoute = HttpRouter.add("POST", "/api/speciali
18645
18645
  });
18646
18646
  })));
18647
18647
  const getSpecialistQueuesRoute = HttpRouter.add("GET", "/api/specialists/queues", httpHandler(Effect.gen(function* () {
18648
- const { getAllSpecialists, checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18648
+ const { getAllSpecialists, checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18649
18649
  return jsonResponse({ queues: getAllSpecialists().map((specialist) => {
18650
18650
  const queue = checkSpecialistQueue(specialist.name);
18651
18651
  return {
@@ -18658,14 +18658,14 @@ const getSpecialistQueuesRoute = HttpRouter.add("GET", "/api/specialists/queues"
18658
18658
  }) });
18659
18659
  })));
18660
18660
  const getSpecialistsProjectsRoute = HttpRouter.add("GET", "/api/specialists/projects", httpHandler(Effect.gen(function* () {
18661
- const { getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18661
+ const { getAllProjectSpecialistStatuses } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18662
18662
  return jsonResponse(yield* Effect.promise(() => getAllProjectSpecialistStatuses()));
18663
18663
  })));
18664
18664
  const postSpecialistWakeRoute = HttpRouter.add("POST", "/api/specialists/:name/wake", httpHandler(Effect.gen(function* () {
18665
18665
  const name = (yield* HttpRouter.params)["name"];
18666
18666
  const { sessionId } = yield* readJsonBody$6;
18667
18667
  const eventStore = yield* EventStoreService;
18668
- const { getTmuxSessionName, getSessionId, recordWake, isRunning } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18668
+ const { getTmuxSessionName, getSessionId, recordWake, isRunning } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18669
18669
  if (yield* Effect.promise(() => isRunning(name))) return jsonResponse({ error: `Specialist ${name} is already running` }, { status: 400 });
18670
18670
  const existingSessionId = getSessionId(name);
18671
18671
  const tmuxSession = getTmuxSessionName(name);
@@ -18673,7 +18673,7 @@ const postSpecialistWakeRoute = HttpRouter.add("POST", "/api/specialists/:name/w
18673
18673
  const useSessionId = sessionId || existingSessionId;
18674
18674
  let specModel = "claude-sonnet-4-6";
18675
18675
  try {
18676
- const { getModelId } = yield* Effect.promise(() => import("./work-type-router-Di5gCQwh.js"));
18676
+ const { getModelId } = yield* Effect.promise(() => import("./work-type-router-ByOOudGz.js"));
18677
18677
  specModel = getModelId(`specialist-${name}`);
18678
18678
  } catch {}
18679
18679
  const specCmd = getAgentCommand(specModel);
@@ -18701,7 +18701,7 @@ const postSpecialistWakeRoute = HttpRouter.add("POST", "/api/specialists/:name/w
18701
18701
  const postSpecialistResetRoute = HttpRouter.add("POST", "/api/specialists/:name/reset", httpHandler(Effect.gen(function* () {
18702
18702
  const name = (yield* HttpRouter.params)["name"];
18703
18703
  const { reinitialize = false } = yield* readJsonBody$6;
18704
- const { clearSessionId, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18704
+ const { clearSessionId, isRunning, getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18705
18705
  if (yield* Effect.promise(() => isRunning(name))) return jsonResponse({ error: `Specialist ${name} is currently running. Stop it first (tmux kill-session -t ${getTmuxSessionName(name)})` }, { status: 400 });
18706
18706
  const wasDeleted = clearSessionId(name);
18707
18707
  if (reinitialize) {}
@@ -18713,7 +18713,7 @@ const postSpecialistResetRoute = HttpRouter.add("POST", "/api/specialists/:name/
18713
18713
  })));
18714
18714
  const postSpecialistInitRoute = HttpRouter.add("POST", "/api/specialists/:name/init", httpHandler(Effect.gen(function* () {
18715
18715
  const name = (yield* HttpRouter.params)["name"];
18716
- const { initializeSpecialist } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18716
+ const { initializeSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18717
18717
  const result = yield* Effect.promise(() => initializeSpecialist(name));
18718
18718
  if (!result.success) return jsonResponse({ error: result.message }, { status: 400 });
18719
18719
  return jsonResponse({
@@ -18752,7 +18752,7 @@ const postSpecialistReportStatusRoute = HttpRouter.add("POST", "/api/specialists
18752
18752
  "blocked",
18753
18753
  "failed"
18754
18754
  ].includes(status)) {
18755
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18755
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18756
18756
  saveAgentRuntimeState(getTmuxSessionName(name), {
18757
18757
  state: "idle",
18758
18758
  lastActivity: (/* @__PURE__ */ new Date()).toISOString()
@@ -18779,7 +18779,7 @@ const postSpecialistReportStatusRoute = HttpRouter.add("POST", "/api/specialists
18779
18779
  })));
18780
18780
  const getSpecialistCostRoute = HttpRouter.add("GET", "/api/specialists/:name/cost", httpHandler(Effect.gen(function* () {
18781
18781
  const name = (yield* HttpRouter.params)["name"];
18782
- const { getSessionId } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18782
+ const { getSessionId } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18783
18783
  const sessionId = getSessionId(name);
18784
18784
  if (!sessionId) return jsonResponse({
18785
18785
  cost: 0,
@@ -18834,7 +18834,7 @@ const getSpecialistCostRoute = HttpRouter.add("GET", "/api/specialists/:name/cos
18834
18834
  const getSpecialistQueueRoute = HttpRouter.add("GET", "/api/specialists/:name/queue", httpHandler(Effect.gen(function* () {
18835
18835
  const name = (yield* HttpRouter.params)["name"];
18836
18836
  if (!VALID_SPECIALIST_NAMES.includes(name)) return jsonResponse({ error: `Invalid specialist name: ${name}` }, { status: 400 });
18837
- const { checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18837
+ const { checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18838
18838
  const queue = checkSpecialistQueue(name);
18839
18839
  return jsonResponse({
18840
18840
  specialistName: name,
@@ -18849,7 +18849,7 @@ const postSpecialistQueueRoute = HttpRouter.add("POST", "/api/specialists/:name/
18849
18849
  const { issueId, workspace, branch, customPrompt, priority = "normal" } = yield* readJsonBody$6;
18850
18850
  if (!VALID_SPECIALIST_NAMES.includes(name)) return jsonResponse({ error: `Invalid specialist name: ${name}` }, { status: 400 });
18851
18851
  if (!issueId) return jsonResponse({ error: "issueId is required" }, { status: 400 });
18852
- const { spawnEphemeralSpecialist, submitToSpecialistQueue } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18852
+ const { spawnEphemeralSpecialist, submitToSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18853
18853
  const resolved = resolveProjectFromIssue(issueId);
18854
18854
  if (!resolved) return jsonResponse({ error: `No project configured for ${issueId}. Add it to projects.yaml.` }, { status: 400 });
18855
18855
  const result = yield* Effect.promise(() => spawnEphemeralSpecialist(resolved.projectKey, name, {
@@ -18883,7 +18883,7 @@ const deleteSpecialistQueueItemRoute = HttpRouter.add("DELETE", "/api/specialist
18883
18883
  const name = params["name"];
18884
18884
  const itemId = params["itemId"];
18885
18885
  if (!VALID_SPECIALIST_NAMES.includes(name)) return jsonResponse({ error: `Invalid specialist name: ${name}` }, { status: 400 });
18886
- const { completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18886
+ const { completeSpecialistTask } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18887
18887
  if (!completeSpecialistTask(name, itemId)) return jsonResponse({ error: `Item ${itemId} not found in queue for ${name}` }, { status: 404 });
18888
18888
  return jsonResponse({
18889
18889
  success: true,
@@ -18910,7 +18910,7 @@ const postSpecialistAutoCompleteRoute = HttpRouter.add("POST", "/api/specialists
18910
18910
  if (!issueId || !status) return jsonResponse({ error: "issueId and status required" }, { status: 400 });
18911
18911
  console.log(`[specialists] Auto-detected completion for ${name}: ${issueId} -> ${status}`);
18912
18912
  if (!VALID_SPECIALIST_NAMES.includes(name)) return jsonResponse({ error: `Invalid specialist name: ${name}` }, { status: 400 });
18913
- const { getTmuxSessionName, completeSpecialistTask, wakeSpecialistWithTask, checkSpecialistQueue, submitToSpecialistQueue } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
18913
+ const { getTmuxSessionName, completeSpecialistTask, wakeSpecialistWithTask, checkSpecialistQueue, submitToSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
18914
18914
  saveAgentRuntimeState(getTmuxSessionName(name), {
18915
18915
  state: "idle",
18916
18916
  lastActivity: (/* @__PURE__ */ new Date()).toISOString(),
@@ -19010,7 +19010,7 @@ const getProjectSpecialistStatusRoute = HttpRouter.add("GET", "/api/specialists/
19010
19010
  const project = params["project"];
19011
19011
  const type = params["type"];
19012
19012
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19013
- const { getSpecialistStatus } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19013
+ const { getSpecialistStatus } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19014
19014
  return jsonResponse(yield* Effect.promise(() => getSpecialistStatus(type, project)));
19015
19015
  })));
19016
19016
  const postProjectSpecialistKillRoute = HttpRouter.add("POST", "/api/specialists/:project/:type/kill", httpHandler(Effect.gen(function* () {
@@ -19018,7 +19018,7 @@ const postProjectSpecialistKillRoute = HttpRouter.add("POST", "/api/specialists/
19018
19018
  const project = params["project"];
19019
19019
  const type = params["type"];
19020
19020
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19021
- const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19021
+ const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19022
19022
  const tmuxSession = getTmuxSessionName(type, project);
19023
19023
  yield* Effect.promise(() => execAsync$8(`tmux kill-session -t "${tmuxSession}"`).catch(() => {}));
19024
19024
  saveAgentRuntimeState(tmuxSession, {
@@ -19033,7 +19033,7 @@ const postProjectSpecialistKillRoute = HttpRouter.add("POST", "/api/specialists/
19033
19033
  const getProjectSpecialistQueueRoute = HttpRouter.add("GET", "/api/specialists/:project/:type/queue", httpHandler(Effect.gen(function* () {
19034
19034
  const type = (yield* HttpRouter.params)["type"];
19035
19035
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19036
- const { checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19036
+ const { checkSpecialistQueue } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19037
19037
  return jsonResponse(checkSpecialistQueue(type));
19038
19038
  })));
19039
19039
  const postProjectSpecialistSpawnRoute = HttpRouter.add("POST", "/api/specialists/:project/:type/spawn", httpHandler(Effect.gen(function* () {
@@ -19043,7 +19043,7 @@ const postProjectSpecialistSpawnRoute = HttpRouter.add("POST", "/api/specialists
19043
19043
  const { issueId, branch, workspace, prUrl, context } = yield* readJsonBody$6;
19044
19044
  if (!issueId) return jsonResponse({ error: "issueId is required" }, { status: 400 });
19045
19045
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19046
- const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19046
+ const { spawnEphemeralSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19047
19047
  const result = yield* Effect.promise(() => spawnEphemeralSpecialist(project, type, {
19048
19048
  issueId,
19049
19049
  branch,
@@ -19069,7 +19069,7 @@ const getProjectSpecialistRunsRoute = HttpRouter.add("GET", "/api/specialists/:p
19069
19069
  if (limitParam) limit = parseInt(limitParam, 10);
19070
19070
  if (offsetParam) offset = parseInt(offsetParam, 10);
19071
19071
  }
19072
- const { listRunLogs } = yield* Effect.promise(() => import("./specialist-logs-CIw4qfTy.js"));
19072
+ const { listRunLogs } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
19073
19073
  return jsonResponse(listRunLogs(project, type, {
19074
19074
  limit,
19075
19075
  offset
@@ -19080,7 +19080,7 @@ const getProjectSpecialistRunStreamRoute = HttpRouter.add("GET", "/api/specialis
19080
19080
  const project = params["project"];
19081
19081
  const type = params["type"];
19082
19082
  const runId = params["runId"];
19083
- const { getRunLogPath, isRunLogActive } = yield* Effect.promise(() => import("./specialist-logs-CIw4qfTy.js"));
19083
+ const { getRunLogPath, isRunLogActive } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
19084
19084
  const logPath = getRunLogPath(project, type, runId);
19085
19085
  if (!existsSync$1(logPath)) return jsonResponse({ error: "Run log not found" }, { status: 404 });
19086
19086
  const encoder = new TextEncoder();
@@ -19139,7 +19139,7 @@ const getProjectSpecialistRunRoute = HttpRouter.add("GET", "/api/specialists/:pr
19139
19139
  const project = params["project"];
19140
19140
  const type = params["type"];
19141
19141
  const runId = params["runId"];
19142
- const { getRunLog, parseLogMetadata } = yield* Effect.promise(() => import("./specialist-logs-CIw4qfTy.js"));
19142
+ const { getRunLog, parseLogMetadata } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
19143
19143
  const content = getRunLog(project, type, runId);
19144
19144
  if (!content) return jsonResponse({ error: "Run log not found" }, { status: 404 });
19145
19145
  return jsonResponse({
@@ -19153,7 +19153,7 @@ const postProjectSpecialistRunTerminateRoute = HttpRouter.add("POST", "/api/spec
19153
19153
  const project = params["project"];
19154
19154
  const type = params["type"];
19155
19155
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19156
- const { terminateSpecialist } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19156
+ const { terminateSpecialist } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19157
19157
  yield* Effect.promise(() => terminateSpecialist(project, type));
19158
19158
  return jsonResponse({
19159
19159
  success: true,
@@ -19165,7 +19165,7 @@ const postProjectSpecialistGracePauseRoute = HttpRouter.add("POST", "/api/specia
19165
19165
  const project = params["project"];
19166
19166
  const type = params["type"];
19167
19167
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19168
- const { pauseGracePeriod } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19168
+ const { pauseGracePeriod } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19169
19169
  if (pauseGracePeriod(project, type)) return jsonResponse({
19170
19170
  success: true,
19171
19171
  message: "Grace period paused"
@@ -19177,7 +19177,7 @@ const postProjectSpecialistGraceResumeRoute = HttpRouter.add("POST", "/api/speci
19177
19177
  const project = params["project"];
19178
19178
  const type = params["type"];
19179
19179
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19180
- const { resumeGracePeriod } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19180
+ const { resumeGracePeriod } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19181
19181
  if (resumeGracePeriod(project, type)) return jsonResponse({
19182
19182
  success: true,
19183
19183
  message: "Grace period resumed"
@@ -19189,7 +19189,7 @@ const postProjectSpecialistGraceExitRoute = HttpRouter.add("POST", "/api/special
19189
19189
  const project = params["project"];
19190
19190
  const type = params["type"];
19191
19191
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19192
- const { exitGracePeriod } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19192
+ const { exitGracePeriod } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19193
19193
  exitGracePeriod(project, type);
19194
19194
  return jsonResponse({
19195
19195
  success: true,
@@ -19201,7 +19201,7 @@ const getProjectSpecialistGraceRoute = HttpRouter.add("GET", "/api/specialists/:
19201
19201
  const project = params["project"];
19202
19202
  const type = params["type"];
19203
19203
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19204
- const { getGracePeriodState } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19204
+ const { getGracePeriodState } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19205
19205
  const state = getGracePeriodState(project, type);
19206
19206
  if (state) return jsonResponse(state);
19207
19207
  else return jsonResponse({ error: "No active grace period" }, { status: 404 });
@@ -19210,7 +19210,7 @@ const getProjectSpecialistContextRoute = HttpRouter.add("GET", "/api/specialists
19210
19210
  const params = yield* HttpRouter.params;
19211
19211
  const project = params["project"];
19212
19212
  const type = params["type"];
19213
- const { loadContextDigest } = yield* Effect.promise(() => import("./specialist-context-DGukHSn8.js"));
19213
+ const { loadContextDigest } = yield* Effect.promise(() => import("./specialist-context-CEKqWqyF.js"));
19214
19214
  const digest = loadContextDigest(project, type);
19215
19215
  if (digest) return jsonResponse({ digest });
19216
19216
  else return jsonResponse({ error: "No context digest found" }, { status: 404 });
@@ -19219,7 +19219,7 @@ const postProjectSpecialistContextRegenerateRoute = HttpRouter.add("POST", "/api
19219
19219
  const params = yield* HttpRouter.params;
19220
19220
  const project = params["project"];
19221
19221
  const type = params["type"];
19222
- const { regenerateContextDigest } = yield* Effect.promise(() => import("./specialist-context-DGukHSn8.js"));
19222
+ const { regenerateContextDigest } = yield* Effect.promise(() => import("./specialist-context-CEKqWqyF.js"));
19223
19223
  const digest = yield* Effect.promise(() => regenerateContextDigest(project, type));
19224
19224
  if (digest) return jsonResponse({
19225
19225
  digest,
@@ -19238,7 +19238,7 @@ const postProjectSpecialistCompleteRoute = HttpRouter.add("POST", "/api/speciali
19238
19238
  "blocked"
19239
19239
  ].includes(status)) return jsonResponse({ error: "Valid status (passed/failed/blocked) is required" }, { status: 400 });
19240
19240
  if (!validateSpecialistType(type)) return jsonResponse({ error: "Invalid specialist type. Must be review-agent, test-agent, or merge-agent" }, { status: 400 });
19241
- const { signalSpecialistCompletion } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19241
+ const { signalSpecialistCompletion } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19242
19242
  signalSpecialistCompletion(project, type, {
19243
19243
  status,
19244
19244
  notes
@@ -19272,7 +19272,7 @@ const postProjectSpecialistLogsCleanupRoute = HttpRouter.add("POST", "/api/speci
19272
19272
  const params = yield* HttpRouter.params;
19273
19273
  const project = params["project"];
19274
19274
  const type = params["type"];
19275
- const { cleanupOldLogs } = yield* Effect.promise(() => import("./specialist-logs-CIw4qfTy.js"));
19275
+ const { cleanupOldLogs } = yield* Effect.promise(() => import("./specialist-logs-CBGVRoQF.js"));
19276
19276
  const { getSpecialistRetention } = yield* Effect.promise(() => import("./projects-C5ozxjwP.js"));
19277
19277
  const deleted = cleanupOldLogs(project, type, getSpecialistRetention(project));
19278
19278
  return jsonResponse({
@@ -19285,7 +19285,7 @@ const postProjectSpecialistResetSessionRoute = HttpRouter.add("POST", "/api/spec
19285
19285
  const params = yield* HttpRouter.params;
19286
19286
  const projectKey = params["project"] ?? "";
19287
19287
  const name = params["name"] ?? "";
19288
- const { bumpSessionGeneration } = yield* Effect.promise(() => import("./specialists-Cp-PgspS.js"));
19288
+ const { bumpSessionGeneration } = yield* Effect.promise(() => import("./specialists-sIFlMd3s.js"));
19289
19289
  const newGen = bumpSessionGeneration(name, projectKey);
19290
19290
  const tmuxSession = `specialist-${projectKey}-${name}`;
19291
19291
  try {
@@ -20712,7 +20712,7 @@ Be specific: reference actual file names, function names, requirement text, disc
20712
20712
  const modelFlag = cliArgs.length > 0 ? ` ${cliArgs.join(" ")}` : "";
20713
20713
  const promptFile = join$1(planningDir, ".status-review-prompt.tmp");
20714
20714
  const { getProviderForModel, getProviderEnv } = await import("./providers-csVZVPkE.js");
20715
- const { loadConfig: loadYamlConfig } = await import("./config-yaml-DkresmrS.js");
20715
+ const { loadConfig: loadYamlConfig } = await import("./config-yaml-CNNnB4Mu.js");
20716
20716
  let providerEnvStr = "";
20717
20717
  const statusProvider = getProviderForModel(statusModelId);
20718
20718
  if (statusProvider.name !== "anthropic") {
@@ -23112,7 +23112,7 @@ Continue the PLANNING session. Do NOT implement anything.
23112
23112
  const { getAgentCommand } = await import("./settings-XWvDcj-D.js");
23113
23113
  let msgPlanningModel = "claude-sonnet-4-6";
23114
23114
  try {
23115
- const { getModelId } = await import("./work-type-router-Di5gCQwh.js");
23115
+ const { getModelId } = await import("./work-type-router-ByOOudGz.js");
23116
23116
  msgPlanningModel = getModelId("planning-agent");
23117
23117
  } catch {}
23118
23118
  const msgAgentCmd = getAgentCommand(msgPlanningModel);
@@ -24140,7 +24140,7 @@ const RESTART_MARKER = join(homedir$1(), ".panopticon", "dashboard-restarting.js
24140
24140
  * loads new content-hashed chunk filenames (no ERR_MODULE_NOT_FOUND after rebuild).
24141
24141
  */
24142
24142
  async function defaultLifecycleRunner(pending) {
24143
- const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-CGN3TT0a.js");
24143
+ const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-CqvQu-n_.js");
24144
24144
  await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
24145
24145
  if (pending.sourceBranch) await notifyTldrDaemon(pending.projectPath, pending.sourceBranch);
24146
24146
  }