@overdeck/desktop 0.42.0 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (19) hide show
  1. package/package.json +1 -1
  2. package/server/public/assets/{chunk-BO2N2NFS-C4IC6tXf.js → chunk-BO2N2NFS-DT2hpoe9.js} +4 -4
  3. package/server/public/assets/{diagram-OG6HWLK6-DGdm9pVn.js → diagram-OG6HWLK6-CILjxFV5.js} +1 -1
  4. package/server/public/assets/{dist-AFfBwqj3.js → dist-BBtIkNyE.js} +1 -1
  5. package/server/public/assets/{dist-YEo-2Oy8.js → dist-WopvNJhW.js} +3 -3
  6. package/server/public/assets/{ganttDiagram-6RSMTGT7-BsV09cPX.js → ganttDiagram-6RSMTGT7-CByisuCB.js} +1 -1
  7. package/server/public/assets/{highlighted-body-OFNGDK62-Bq_qtCsW.js → highlighted-body-OFNGDK62-BTG45eDk.js} +1 -1
  8. package/server/public/assets/{index-C2PMO6nB.js → index-etdSnOxp.js} +112 -112
  9. package/server/public/assets/{index-Dzio_3kK.css → index-qrDOFwsw.css} +1 -1
  10. package/server/public/assets/{linear-DxIhHUPD.js → linear-BlUaWFF8.js} +1 -1
  11. package/server/public/assets/mermaid-GHXKKRXX-7G86hyh-.js +1 -0
  12. package/server/public/assets/{pieDiagram-4H26LBE5-B0yqF_w8.js → pieDiagram-4H26LBE5-C9XG5bKT.js} +1 -1
  13. package/server/public/assets/{prod-DhREhukv.js → prod-BjCGQWZg.js} +4 -4
  14. package/server/public/assets/{quadrantDiagram-W4KKPZXB-CdByrHkW.js → quadrantDiagram-W4KKPZXB-BqyPPpJS.js} +1 -1
  15. package/server/public/assets/{sankeyDiagram-5OEKKPKP-DApIsH9w.js → sankeyDiagram-5OEKKPKP-DOiWA53d.js} +1 -1
  16. package/server/public/assets/{xychartDiagram-2RQKCTM6-BrVcjfKW.js → xychartDiagram-2RQKCTM6-BkfiVkrb.js} +1 -1
  17. package/server/public/index.html +2 -2
  18. package/server/server.js +188 -149
  19. package/server/public/assets/mermaid-GHXKKRXX-BZNohdCo.js +0 -1
package/server/server.js CHANGED
@@ -1,97 +1,97 @@
1
1
  import { a as __toCommonJS, i as __require, o as __toESM, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { C as init_paths, D as sessionFilePath, E as resolveOhmypiExtensionPath, S as getOverdeckHome, T as packageRoot, _ as SYNC_SOURCES, l as LOGS_DIR, o as CLAUDE_DIR, t as AGENTS_DIR, u as OVERDECK_HOME, w as isDevMode, x as getLegacyHome, y as encodeClaudeProjectDir } from "./paths-tknG80xs.js";
3
- import { $ as resolveModelIdSync, A as getBuiltInDefaultHarness, B as defaultBackgroundAiFeatures, F as piProviderForModel, G as resolveModel, H as DEFAULT_ROLES, K as MODEL_CAPABILITIES, N as getProviderForModelSync, O as UnknownModelError, P as init_providers, Q as modelSupportsImagesSync, S as canUseHarnessSync, U as DEFAULT_WORKHORSES, V as init_registry, W as computeModelOrigin, X as hasModelCapabilitySync, Y as getModelEffortLevelsSync, Z as init_model_capabilities, _ as mergeTtsDaemonConfigs, b as init_tier_table, ct as FsError, d as loadConfigSync, et as COMPLIANCE_MODES, f as updateConversationsConfig, g as getDefaultTtsDaemonConfig, gt as TrackerError, h as mergeConfigs, i as getConversationsConfig, j as getKimiAnthropicBaseUrl, l as isTldrEnabledSync, m as jsYaml, mt as ProcessSpawnError, n as clearConfigCache, nt as ROLE_EFFORTS, o as getGlobalConfigPath, p as init_js_yaml, q as MODEL_DEPRECATIONS, r as getConversationSearchConfigSync, rt as require_dist$1, s as isClaudeCodeChannelsEnabled, t as init_config_yaml, tt as PARENT_MODEL_REF, u as loadConfigNoMigration, ut as GitHubApiError, vt as init_errors, w as init_harness_policy, x as resolveTieredExecutionEnabled } from "./config-yaml-C9tNHjAH.js";
4
- import { _ as getDashboardIdentity, c as startUatTrainReconciler, d as openFlywheelRunReportForDashboard, f as pauseFlywheelRunForDashboard, g as runDashboardDbJob, h as startFlywheelRunForDashboard, l as stopUatTrainReconciler, m as resumeFlywheelRunForDashboard, p as readCurrentFlywheelStatusForDashboard, u as abortFlywheelRunForDashboard, v as readHostDashboardApiPort, y as shouldRefuseHostDashboardPort } from "./uat-train-Di_5GWAL.js";
5
- import { A as jsonStringResponse, C as isTrustedOriginForHost, D as checkCodexAuthStatus, E as validateOriginHeaders, O as httpHandler, T as validateOrigin$1, _ as resolveClaudeSessionId, a as agentsRouteLayer, b as resolvePiSessionPath, c as invalidateAgentsCache, d as startSmeeProcessSync, f as resolveAgentGitInfo, g as resolveAgentHarness, h as readLauncherPinnedSessionId, k as jsonResponse, l as getSystemHealthSnapshot, o as saveAgentStateAndEmitEvent, p as resolveConversationGitInfo, s as saveAgentStateAndEmitEventProgram, t as specialistsRouteLayer, u as isSmeeConfiguredSync, v as resolveCodexRolloutPath, x as getHeaderFromMap, y as resolveJsonlPath } from "./specialists-CY2q5jAb.js";
3
+ import { $ as init_model_capabilities, A as UnknownModelError, C as validateTieredExecutionConfig, E as init_harness_policy, F as getProviderForModelSync, G as DEFAULT_WORKHORSES, H as defaultBackgroundAiFeatures, I as init_providers, J as MODEL_CAPABILITIES, K as computeModelOrigin, L as piProviderForModel, M as getBuiltInDefaultHarness, N as getKimiAnthropicBaseUrl, Q as hasModelCapabilitySync, S as resolveTieredExecutionEnabled, U as init_registry, W as DEFAULT_ROLES, Y as MODEL_DEPRECATIONS, Z as getModelEffortLevelsSync, _ as mergeTtsDaemonConfigs, at as require_dist$1, b as TieredExecutionConfigError, bt as init_errors, d as loadConfigSync, et as modelSupportsImagesSync, f as updateConversationsConfig, ft as GitHubApiError, g as getDefaultTtsDaemonConfig, gt as ProcessSpawnError, h as mergeConfigs, i as getConversationsConfig, it as ROLE_EFFORTS, l as isTldrEnabledSync, m as jsYaml, n as clearConfigCache, nt as COMPLIANCE_MODES, o as getGlobalConfigPath, p as init_js_yaml, q as resolveModel, r as getConversationSearchConfigSync, rt as PARENT_MODEL_REF, s as isClaudeCodeChannelsEnabled, t as init_config_yaml, tt as resolveModelIdSync, u as loadConfigNoMigration, ut as FsError, vt as TrackerError, w as canUseHarnessSync, x as init_tier_table } from "./config-yaml-B5z7J6BP.js";
4
+ import { _ as getDashboardIdentity, c as startUatTrainReconciler, d as openFlywheelRunReportForDashboard, f as pauseFlywheelRunForDashboard, g as runDashboardDbJob, h as startFlywheelRunForDashboard, l as stopUatTrainReconciler, m as resumeFlywheelRunForDashboard, p as readCurrentFlywheelStatusForDashboard, u as abortFlywheelRunForDashboard, v as readHostDashboardApiPort, y as shouldRefuseHostDashboardPort } from "./uat-train-BX0_9wAC.js";
5
+ import { A as jsonStringResponse, C as isTrustedOriginForHost, D as checkCodexAuthStatus, E as validateOriginHeaders, O as httpHandler, T as validateOrigin$1, _ as resolveClaudeSessionId, a as agentsRouteLayer, b as resolvePiSessionPath, c as invalidateAgentsCache, d as startSmeeProcessSync, f as resolveAgentGitInfo, g as resolveAgentHarness, h as readLauncherPinnedSessionId, k as jsonResponse, l as getSystemHealthSnapshot, o as saveAgentStateAndEmitEvent, p as resolveConversationGitInfo, s as saveAgentStateAndEmitEventProgram, t as specialistsRouteLayer, u as isSmeeConfiguredSync, v as resolveCodexRolloutPath, x as getHeaderFromMap, y as resolveJsonlPath } from "./specialists-lL_oaMMz.js";
6
6
  import { a as init_activity_logger, i as emitDashboardLifecycleSync, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-C_Hsfouw.js";
7
- import { A as init_paths$1, O as OVERDECK_MIGRATION_PATH, d as getOverdeckDatabaseSync, f as init_infra, i as DbLive, k as getOverdeckDatabasePath, u as TmuxLive } from "./infra-BnuUQA1b.js";
7
+ import { A as init_paths$1, O as OVERDECK_MIGRATION_PATH, d as getOverdeckDatabaseSync, f as init_infra, i as DbLive, k as getOverdeckDatabasePath, u as TmuxLive } from "./infra-BnUODQb7.js";
8
8
  import { n as openDatabase, t as init_driver } from "./driver-CBobl_fb.js";
9
- import { g as getIssueWorkspacePath, v as init_record } from "./record-BzKI-k7f.js";
9
+ import { g as getIssueWorkspacePath, v as init_record } from "./record-BRRVhnOm.js";
10
10
  import { a as parseIssueIdSync, n as extractPrefixSync, r as init_issue_id } from "./issue-id-CtudqaOv.js";
11
- import { A as resolveProjectFromIssueSync, D as registerProjectSync, P as setProjectAutoMergeDefaultSync, S as listProjectsSync, f as getProjectSync, k as resolveProjectFromIssue, l as getIssuePrefix, r as extractTeamPrefix, s as findProjectByTeamSync, v as init_projects, x as listProjects } from "./projects-CFpKXBDE.js";
12
- import { E as listPaneValues, F as sendKeysAsync, G as buildChildEnvSync, H as init_ui_theme, I as sendRawKeystroke, K as buildChildEnvWithoutTmuxSync, L as sessionExists, M as resizeWindow, O as listSessionNames, P as sendKeys, S as isHarnessProcessAlive, U as setUiTheme, W as BLANKED_PROVIDER_ENV, b as getWindowDimensions, c as ensureManagedTmuxContextOnce, d as exactPaneTarget, i as capturePane, k as listSessions, n as buildTmuxArgs, o as createSession, p as findManagedServerPidSync, q as init_child_env, w as killSession, x as init_tmux, z as setOption } from "./tmux-CDwrBgT9.js";
13
- import { a as init_event_store, i as initEventStore, n as getEventStore, r as getSharedDb } from "./event-store-CMfrQLgu.js";
14
- import { _ as FlywheelRunId, a as getHarnessBehavior, c as FlywheelStats, g as WS_METHODS, h as PanRpcGroup, m as PanRpcError, o as ContextLayerSaveRequest, s as ContextPreviewRequest, t as init_src, v as FlywheelStatus, x as MemoryObservation, y as EDITORS } from "./src-Bt65pH-t.js";
15
- import { a as fixStuckCommentedReviews, b as setReviewStatusSync, c as getReviewStatusSync, d as loadReviewStatuses, l as init_review_status, n as clearReviewStatus, o as fixStuckReadyForMerge, r as clearStuckMergeStatuses, s as getReviewStatus, u as loadReadyForMergeFlags, y as setReviewStatus } from "./review-status-YErqCbEB.js";
16
- import { a as EventStoreService, c as ReadModelService, d as init_read_model, f as toAgentResolution, i as init_issue_lifecycle, l as ReadModelServiceLive, m as toRole, n as IssueLifecycleLive, o as EventStoreServiceLive, p as toAgentStatus, s as init_domain_services, t as IssueLifecycle } from "./issue-lifecycle-BH8UIror.js";
17
- import { d as init_agents, i as recordBriefingSessionStart, n as ensureSessionContextBriefingFile, p as listAllAgentsSync, r as init_briefing_freshness, s as AgentsResolverLive, t as appendFreshBriefingUpdate } from "./briefing-freshness-CzRarwBd.js";
11
+ import { A as resolveProjectFromIssueSync, D as registerProjectSync, P as setProjectAutoMergeDefaultSync, S as listProjectsSync, f as getProjectSync, k as resolveProjectFromIssue, l as getIssuePrefix, r as extractTeamPrefix, s as findProjectByTeamSync, v as init_projects, x as listProjects } from "./projects-BWA18sW9.js";
12
+ import { E as listPaneValues, F as sendKeysAsync, G as buildChildEnvSync, H as init_ui_theme, I as sendRawKeystroke, K as buildChildEnvWithoutTmuxSync, L as sessionExists, M as resizeWindow, O as listSessionNames, P as sendKeys, S as isHarnessProcessAlive, U as setUiTheme, W as BLANKED_PROVIDER_ENV, b as getWindowDimensions, c as ensureManagedTmuxContextOnce, d as exactPaneTarget, i as capturePane, k as listSessions, n as buildTmuxArgs, o as createSession, p as findManagedServerPidSync, q as init_child_env, w as killSession, x as init_tmux, z as setOption } from "./tmux-DwRDpZ6x.js";
13
+ import { a as init_event_store, i as initEventStore, n as getEventStore, r as getSharedDb } from "./event-store-BMvjb-ek.js";
14
+ import { _ as FlywheelRunId, a as getHarnessBehavior, b as DomainEvent, c as FlywheelStats, g as WS_METHODS, h as PanRpcGroup, m as PanRpcError, o as ContextLayerSaveRequest, s as ContextPreviewRequest, t as init_src, v as FlywheelStatus, x as MemoryObservation, y as EDITORS } from "./src-CEKNqdTd.js";
15
+ import { a as fixStuckCommentedReviews, b as setReviewStatusSync, c as getReviewStatusSync, d as loadReviewStatuses, l as init_review_status, n as clearReviewStatus, o as fixStuckReadyForMerge, r as clearStuckMergeStatuses, s as getReviewStatus, u as loadReadyForMergeFlags, y as setReviewStatus } from "./review-status-Sdng4KbL.js";
16
+ import { a as EventStoreService, c as ReadModelService, d as init_read_model, f as toAgentResolution, i as init_issue_lifecycle, l as ReadModelServiceLive, m as toRole, n as IssueLifecycleLive, o as EventStoreServiceLive, p as toAgentStatus, s as init_domain_services, t as IssueLifecycle } from "./issue-lifecycle-BQ7MbVQW.js";
17
+ import { d as init_agents, i as recordBriefingSessionStart, n as ensureSessionContextBriefingFile, p as listAllAgentsSync, r as init_briefing_freshness, s as AgentsResolverLive, t as appendFreshBriefingUpdate } from "./briefing-freshness-to38wymF.js";
18
18
  import { i as init_paths$2, l as resolveObservationsFile, r as ensureParentDir, s as resolveIssueMemoryRoot, t as assertMemorySafeSegment } from "./paths-Dsd_dtCx.js";
19
19
  import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-DCtE46iD.js";
20
- import { a as diffAgainstMainFiles, c as diffFilesAgainstHead, d as findCommitAtTime, i as diffAgainstMain, l as diffPatchFilesAgainstHead, m as listCheckpoints, o as diffCheckpointFiles, p as init_checkpoint_manager, s as diffCheckpoints, t as captureCheckpoint, u as diffPatchSinceCommit } from "./checkpoint-manager-DcU-yTPm.js";
21
- import { $ as init_concurrency, An as saveAgentStateSync, Bn as init_pty_token, D as messageAgent, Ft as getProviderAuthMode, G as listRunningAgents, Gt as getClaudeAuthStatus, Hn as clearReadySignal, Ht as piFifoPaths, Jn as getAgentRuntimeState, K as listRunningAgentsSync, Kt as init_claude_auth, Mt as getAgentRuntimeBaseCommand, O as init_operator_interventions, Rn as init_agent_record_sync, Rt as injectPiConversationMemory, St as writeBridgeTokenSync, Ut as init_ohmypi_fifo, Vn as writePtyToken, Vt as init_pi_fifo, W as listAgentStates, Wn as normalizeAgentId, Wt as ohmypiFifoPaths, Xt as getProviderEnvForModel, Yn as getAgentRuntimeStateSync, Z as emergencyBrake, Zt as getProviderExportsForModel, _n as getAgentStateFilePath, bt as probeTranscriptSince, c as init_tier_supervisor, ct as init_config, d as supervisorAgentId, dt as saveCloisterConfigSync, ft as shouldAutoStart, gn as getAgentState, hn as getAgentDir, k as operatorInterventionEvent, lt as loadCloisterConfig, nn as init_openai_auth, on as dismissDevChannelsDialog, pt as deliverAgentMessage, qn as waitForReadySignal, s as deliverCommitForReview, sn as writeChannelsBridgeMcpConfig, t as init_agents$1, tn as getOpenAIAuthStatus, ut as loadCloisterConfigSync, vn as getAgentStateSync, vt as captureTranscriptUserRecordSnapshot, xt as init_bridge_token, yt as init_transcript_landing, zn as readAgentHarnessModelRecordSync } from "./agents-I-xFLL6F.js";
22
- import { t as init_behavior } from "./behavior-B4_m9DaU.js";
23
- import { a as getCostForIssueAggregateSync, c as getDailyTrendsSync, d as init_cost_sync, l as getModelRollupSync, n as getBackgroundCostBySourceSync, r as getCavemanExperimentDataSync, s as getCostsByIssueSync, u as getTodayCostSync } from "./cost-sync-BgWKYZUZ.js";
24
- import { c as getAgentsNeedingAttention, d as CostResolverLive, n as readCloisterStateFile, o as generateHealthSummary, s as getAgentHealth, t as getCloisterService, u as CostResolver } from "./service-A2kIgSZ_.js";
25
- import { n as AgentStateServiceLive } from "./agent-state-service-CX6J_kRr.js";
26
- import { a as init_tracker_config, i as initTrackerConfigCache, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-CfMJKtu0.js";
20
+ import { a as diffAgainstMainFiles, c as diffFilesAgainstHead, d as findCommitAtTime, i as diffAgainstMain, l as diffPatchFilesAgainstHead, m as listCheckpoints, o as diffCheckpointFiles, p as init_checkpoint_manager, s as diffCheckpoints, t as captureCheckpoint, u as diffPatchSinceCommit } from "./checkpoint-manager-CKcDJjLT.js";
21
+ import { $ as init_concurrency, An as saveAgentStateSync, Bn as init_pty_token, D as messageAgent, Ft as getProviderAuthMode, G as listRunningAgents, Gt as getClaudeAuthStatus, Hn as clearReadySignal, Ht as piFifoPaths, Jn as getAgentRuntimeState, K as listRunningAgentsSync, Kt as init_claude_auth, Mt as getAgentRuntimeBaseCommand, O as init_operator_interventions, Rn as init_agent_record_sync, Rt as injectPiConversationMemory, St as writeBridgeTokenSync, Ut as init_ohmypi_fifo, Vn as writePtyToken, Vt as init_pi_fifo, W as listAgentStates, Wn as normalizeAgentId, Wt as ohmypiFifoPaths, Xt as getProviderEnvForModel, Yn as getAgentRuntimeStateSync, Z as emergencyBrake, Zt as getProviderExportsForModel, _n as getAgentStateFilePath, bt as probeTranscriptSince, c as init_tier_supervisor, ct as init_config, d as supervisorAgentId, dt as saveCloisterConfigSync, ft as shouldAutoStart, gn as getAgentState, hn as getAgentDir, k as operatorInterventionEvent, lt as loadCloisterConfig, nn as init_openai_auth, on as dismissDevChannelsDialog, pt as deliverAgentMessage, qn as waitForReadySignal, s as deliverCommitForReview, sn as writeChannelsBridgeMcpConfig, t as init_agents$1, tn as getOpenAIAuthStatus, ut as loadCloisterConfigSync, vn as getAgentStateSync, vt as captureTranscriptUserRecordSnapshot, xt as init_bridge_token, yt as init_transcript_landing, zn as readAgentHarnessModelRecordSync } from "./agents-B6tWmcXf.js";
22
+ import { t as init_behavior } from "./behavior-RdPVwq8Z.js";
23
+ import { a as getCostForIssueAggregateSync, c as getDailyTrendsSync, d as init_cost_sync, l as getModelRollupSync, n as getBackgroundCostBySourceSync, r as getCavemanExperimentDataSync, s as getCostsByIssueSync, u as getTodayCostSync } from "./cost-sync-DYokw49s.js";
24
+ import { c as getAgentsNeedingAttention, d as CostResolverLive, n as readCloisterStateFile, o as generateHealthSummary, s as getAgentHealth, t as getCloisterService, u as CostResolver } from "./service-BCLgzZEy.js";
25
+ import { n as AgentStateServiceLive } from "./agent-state-service-ATZbN2LT.js";
26
+ import { a as init_tracker_config, i as initTrackerConfigCache, n as getLinearApiKey, r as getRallyConfig, t as getGitHubConfig } from "./tracker-config-JlYBFawD.js";
27
27
  import { d as init_typed_errors, l as WorkspaceCreateError, n as AgentStartError, r as BeadsNotInitialized, s as TrackerApiError, t as AgentAlreadyRunning, u as WorkspaceNotFound } from "./typed-errors-BQLS2-a2.js";
28
- import { i as init_linear_client, r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-Bsy-Vqx3.js";
29
- import { i as init_github_client, r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-BcSyQB-F.js";
30
- import { i as init_rally_client, r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-sephEbzO.js";
31
- import { a as resolveTrackerTypeSync, i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CYlQXpfe.js";
32
- import { a as CacheService, i as startSharedIssueService, n as init_issue_service_singleton, o as init_cache_service, r as issue_service_singleton_exports, s as parseIntegerHeader, t as getSharedIssueService } from "./issue-service-singleton-DxVMDd_x.js";
33
- import { i as ensureInternalTokenSync, o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-JIiqJ_LH.js";
34
- import { a as setPipelineHandlerSync, t as init_pipeline_notifier } from "./pipeline-notifier-Bf-6UMyT.js";
35
- import { c as init_review_status_sync, i as getMergeBlockerReconcileCandidates } from "./review-status-sync-DSM99M9e.js";
36
- import { C as transitionToMerging, _ as markFailed, c as isFlywheelGloballyPaused, d as listDuePendingAutoMerges, f as listProblemAutoMerges, g as markBlocked, n as getActionableAutoMerge, o as init_merge_sync, t as cancelPending, u as listActiveAutoMerges, v as markMerged, x as scheduleAutoMergeWithResult, y as requeueToPending } from "./merge-sync-BZPMDIcb.js";
37
- import { E as writeSpecForIssue, L as asPanSpecDocument, M as PAN_CONTINUE_FILENAME, N as PAN_DIRNAME, R as init_types$1, S as init_specs, T as writeSpec, _ as init_types, a as findWorkspaceDraftPlan, b as findSpecByIssue, c as readPlan, d as readWorkspacePlan, f as readWorkspacePlanSync, o as init_io, r as findPlan, s as isPlanningComplete, v as subItemsOf } from "./io-BX80MEP3.js";
38
- import { C as restartCliproxy, S as readPidFile, T as stopCliproxy, b as isCliproxyInstalled, d as getCliproxyAuthDir, o as bridgeCodexAuthToCliproxy, v as init_cliproxy, w as startCliproxy, x as isCliproxyRunning, y as installCliproxy } from "./cliproxy-DKkfZuzL.js";
39
- import { f as init_config$1, m as loadConfigSync$1, s as getDashboardApiUrlSync } from "./config-UKaBdqtW.js";
28
+ import { i as init_linear_client, r as LinearClientOptionalLive, t as LinearClient } from "./linear-client-DtBd7iee.js";
29
+ import { i as init_github_client, r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-BLwJoTrW.js";
30
+ import { i as init_rally_client, r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-BqrgQ0Pu.js";
31
+ import { a as resolveTrackerTypeSync, i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-DZaFGJUO.js";
32
+ import { a as CacheService, i as startSharedIssueService, n as init_issue_service_singleton, o as init_cache_service, r as issue_service_singleton_exports, s as parseIntegerHeader, t as getSharedIssueService } from "./issue-service-singleton-B1aiia7z.js";
33
+ import { i as ensureInternalTokenSync, o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-ByEURFQq.js";
34
+ import { a as setPipelineHandlerSync, t as init_pipeline_notifier } from "./pipeline-notifier-BpZ4S0Hi.js";
35
+ import { c as init_review_status_sync, i as getMergeBlockerReconcileCandidates } from "./review-status-sync-C4eeN5DR.js";
36
+ import { C as transitionToMerging, _ as markFailed, c as isFlywheelGloballyPaused, d as listDuePendingAutoMerges, f as listProblemAutoMerges, g as markBlocked, n as getActionableAutoMerge, o as init_merge_sync, t as cancelPending, u as listActiveAutoMerges, v as markMerged, x as scheduleAutoMergeWithResult, y as requeueToPending } from "./merge-sync-B79eYXWq.js";
37
+ import { E as writeSpecForIssue, L as asPanSpecDocument, M as PAN_CONTINUE_FILENAME, N as PAN_DIRNAME, R as init_types$1, S as init_specs, T as writeSpec, _ as init_types, a as findWorkspaceDraftPlan, b as findSpecByIssue, c as readPlan, d as readWorkspacePlan, f as readWorkspacePlanSync, o as init_io, r as findPlan, s as isPlanningComplete, v as subItemsOf } from "./io-Bh8VelYD.js";
38
+ import { C as restartCliproxy, S as readPidFile, T as stopCliproxy, b as isCliproxyInstalled, d as getCliproxyAuthDir, o as bridgeCodexAuthToCliproxy, v as init_cliproxy, w as startCliproxy, x as isCliproxyRunning, y as installCliproxy } from "./cliproxy-BY-a7oH8.js";
39
+ import { f as init_config$1, m as loadConfigSync$1, s as getDashboardApiUrlSync } from "./config-D9ULtCLv.js";
40
40
  import { n as require_auth_errors, r as require_token_error, t as require_token_util } from "./token-util-BEuuoN7z.js";
41
- import { $ as updateConversationTitle, A as listArchivedConversationsWithEnrichment, C as getConversationLedgerCosts, D as incrementForkRetryCount, E as importLegacyConversation, F as markConversationRunning, G as setConversationModel, H as setConversationClaudeSessionId, J as setImportedConversationLinks, K as setFavorite, M as listFavoritedIds, N as markConversationActive, O as init_conversations, P as markConversationEnded, Q as updateConversationForkFallbackReason, R as recordConversationHandoff, S as getConversationByTmuxSession, T as hasOtherActiveConversationOnTmuxSession, U as setConversationEffort, V as setClearedToConvId, W as setConversationHarness, X as updateConversationCost, Y as unarchiveConversation, Z as updateConversationDeliveryMethod, _ as canReplaceTitle, _t as init_discovered_sessions, b as getConversationById, et as updateForkStatus, g as backfillConversationModel, h as archiveConversation, j as listConversations, k as isAgentConversationName, mt as getDiscoveredSessionBySessionId, nt as updateSpawnError, q as setForkRequest, tt as updateLastAttached, v as createConversation, w as getStuckForks, x as getConversationByName, y as getConversationByClaudeSessionId, z as removeFavorite } from "./conversations-CP2aa9q-.js";
42
- import { _ as init_codex_conversation_parser, a as contextUsageFromParseResult, c as parseEntireConversation, d as init_pi_conversation_parser, f as isPiSessionFile, g as parseOhmypiConversationMessages, h as isOhmypiSessionFile, i as computeContextUsage, l as parseFromLastCompactBoundary, m as init_ohmypi_conversation_parser, n as gateSnapshotEmission, o as summarizeConversationActivity, p as parsePiConversationMessages, r as watchConversation, s as parseConversationMessages, t as init_conversation_service, v as parseCodexConversationMessages } from "./conversation-service-MLYjzNUG.js";
43
- import { n as isBackgroundFeatureEnabled, t as init_features } from "./features-xGah4i1z.js";
44
- import { i as init_settings, r as getMemoryWorkerConcurrency, t as areMemoryObservationsEnabled } from "./settings-BOrXf84x.js";
45
- import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers$1 } from "./providers-DznCCZwl.js";
46
- import { n as init_launcher_generator, t as generateLauncherScriptSync } from "./launcher-generator-DPB1BgON.js";
47
- import { a as init_claude_permissions, o as resolvePermissionModeSync, r as getClaudePermissionFlagsStringSync, t as BYPASS_PERMISSION_MODE } from "./claude-permissions-CB2A2ji1.js";
41
+ import { $ as updateConversationTitle, A as listArchivedConversationsWithEnrichment, C as getConversationLedgerCosts, D as incrementForkRetryCount, E as importLegacyConversation, F as markConversationRunning, G as setConversationModel, H as setConversationClaudeSessionId, J as setImportedConversationLinks, K as setFavorite, M as listFavoritedIds, N as markConversationActive, O as init_conversations, P as markConversationEnded, Q as updateConversationForkFallbackReason, R as recordConversationHandoff, S as getConversationByTmuxSession, T as hasOtherActiveConversationOnTmuxSession, U as setConversationEffort, V as setClearedToConvId, W as setConversationHarness, X as updateConversationCost, Y as unarchiveConversation, Z as updateConversationDeliveryMethod, _ as canReplaceTitle, _t as init_discovered_sessions, b as getConversationById, et as updateForkStatus, g as backfillConversationModel, h as archiveConversation, j as listConversations, k as isAgentConversationName, mt as getDiscoveredSessionBySessionId, nt as updateSpawnError, q as setForkRequest, tt as updateLastAttached, v as createConversation, w as getStuckForks, x as getConversationByName, y as getConversationByClaudeSessionId, z as removeFavorite } from "./conversations-CSxhAzME.js";
42
+ import { _ as init_codex_conversation_parser, a as contextUsageFromParseResult, c as parseEntireConversation, d as init_pi_conversation_parser, f as isPiSessionFile, g as parseOhmypiConversationMessages, h as isOhmypiSessionFile, i as computeContextUsage, l as parseFromLastCompactBoundary, m as init_ohmypi_conversation_parser, n as gateSnapshotEmission, o as summarizeConversationActivity, p as parsePiConversationMessages, r as watchConversation, s as parseConversationMessages, t as init_conversation_service, v as parseCodexConversationMessages } from "./conversation-service-Dxivfe0w.js";
43
+ import { n as isBackgroundFeatureEnabled, t as init_features } from "./features-D6BM-oE5.js";
44
+ import { i as init_settings, r as getMemoryWorkerConcurrency, t as areMemoryObservationsEnabled } from "./settings-ncJepdos.js";
45
+ import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers$1 } from "./providers-DitjC5u4.js";
46
+ import { n as init_launcher_generator, t as generateLauncherScriptSync } from "./launcher-generator-DrSU75_W.js";
47
+ import { a as init_claude_permissions, o as resolvePermissionModeSync, r as getClaudePermissionFlagsStringSync, t as BYPASS_PERMISSION_MODE } from "./claude-permissions-CfMr0eIT.js";
48
48
  import { a as globalContextFile$1, d as workspaceContextFile, l as projectContextFile, n as codexGlobalContextFile, o as init_layers, r as ensureProjectLayer, s as piGlobalContextFile } from "./layers-B1dMbFu0.js";
49
- import { l as init_codex, s as findRolloutPath } from "./codex-kSC1YLP_.js";
50
- import { C as setMergeTrainEnabled, S as setFlywheelRequireUatBeforeMerge, b as setFlywheelAutoPickupBacklog, c as isCloisterSpawnsPausedSync, d as isFlywheelAutoPickupBacklog, f as isFlywheelGloballyPaused$1, g as setCloisterSpawnsPausedSync, h as setBootReconciliationDecision, m as isMergeTrainEnabled, o as getSetting, p as isFlywheelRequireUatBeforeMerge, r as getBootReconciliationState, s as init_control_settings, u as isDeaconGloballyPausedSync, v as setDeaconGloballyPausedSync, w as setSetting } from "./control-settings-D3FrIdcx.js";
51
- import { c as init_docker_stats } from "./stack-health-BWegK0Ro.js";
52
- import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-1AlLvkFa.js";
53
- import { i as checkPrdGateSync, t as init_pan_dir } from "./pan-dir-BjGKfnlg.js";
54
- import { a as init_lifecycle_io, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-Boh9ge2B.js";
55
- import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-Cm-DukdQ.js";
56
- import { At as getAgentJsonlMtime, B as createInFlightGuard, Dt as getRuntimeForAgent, F as setAgentStatusChangedNotifier, Ft as detectAwaitingInputForAgent, I as setAgentStoppedNotifier, It as detectAwaitingInputFromPaneSync, J as startBootReconciliation, K as isBootReconciliationCandidate, L as setMergeReadyNotifier, O as loadConfig, Ot as computeAgentEnrichment, Pt as scanPendingInputsPromise, Rt as parseCodexApprovalPrompt, X as resolveBootGates, Y as formatBootGateState, k as loadState, kt as countPendingAskUserQuestionsForAgent, n as assessDeaconPatrolFreshness, q as listBootReconciliationCandidates, st as withConcurrencyLimit, t as applyBootReconciliationDecision, x as getDeaconLogs } from "./deacon-JXyiFMrU.js";
57
- import { i as CostThresholdError, l as embed, s as parseRelativeTime } from "./scanner-GcaaRool.js";
58
- import { n as deduplicateEventsSync, o as readEventsSync, s as tailEventsSync } from "./events-CTjU_U8E.js";
59
- import { n as recordBackgroundAiCost, t as init_cost } from "./cost-XJB_GatY.js";
60
- import { S as writeLatestFlywheelStatus, _ as readCurrentLatestFlywheelStatus, b as subscribeLatestFlywheelStatus, f as getFlywheelRunDetail, h as listFlywheelRuns, l as buildClassifyLookups, m as isFlywheelRunId, y as resolveLiveFlywheelRunId } from "./flywheel-CTxeAxID.js";
61
- import { C as rejectUnauthorizedDashboardSessionMintRequest, S as rejectUnauthorizedDashboardRequest, T as getWorkspacePathForIssue, _ as rebuildCacheSync, b as dashboardSessionCookieHeader, c as resumeQueuedMerges, d as resolveIssueHeadlineCost, f as syncWalFromAllProjects, g as getCostsForIssueSync, h as migrateAllSessionsSync, l as processPendingFeedbackDeliveries, m as reconcilePiTranscripts, p as reconcile, t as workspacesRouteLayer, u as getCachedRunningAgents, v as syncCacheSync, w as rejectUnsafeDashboardMutationRequest, x as hasDashboardInternalToken, y as dashboardCsrfToken } from "./workspaces-BuUeTmag.js";
62
- import { l as detectPlatform, u as init_platform } from "./workspace-manager-D3HIsMs-.js";
63
- import { O as init_specialists, b as getReviewerSessionName } from "./specialists-Cy7HYT8N.js";
49
+ import { l as init_codex, s as findRolloutPath } from "./codex-BcSHb3Oi.js";
50
+ import { C as setMergeTrainEnabled, S as setFlywheelRequireUatBeforeMerge, b as setFlywheelAutoPickupBacklog, c as isCloisterSpawnsPausedSync, d as isFlywheelAutoPickupBacklog, f as isFlywheelGloballyPaused$1, g as setCloisterSpawnsPausedSync, h as setBootReconciliationDecision, m as isMergeTrainEnabled, o as getSetting, p as isFlywheelRequireUatBeforeMerge, r as getBootReconciliationState, s as init_control_settings, u as isDeaconGloballyPausedSync, v as setDeaconGloballyPausedSync, w as setSetting } from "./control-settings-CcllfQYK.js";
51
+ import { c as init_docker_stats } from "./stack-health-BDjtNZ9V.js";
52
+ import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-DzutoEqt.js";
53
+ import { i as checkPrdGateSync, t as init_pan_dir } from "./pan-dir-BwlWqB_Z.js";
54
+ import { a as init_lifecycle_io, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-wMIX4D4p.js";
55
+ import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-B2JKxIBj.js";
56
+ import { At as getAgentJsonlMtime, B as createInFlightGuard, Dt as getRuntimeForAgent, F as setAgentStatusChangedNotifier, Ft as detectAwaitingInputForAgent, I as setAgentStoppedNotifier, It as detectAwaitingInputFromPaneSync, J as startBootReconciliation, K as isBootReconciliationCandidate, L as setMergeReadyNotifier, O as loadConfig, Ot as computeAgentEnrichment, Pt as scanPendingInputsPromise, Rt as parseCodexApprovalPrompt, X as resolveBootGates, Y as formatBootGateState, k as loadState, kt as countPendingAskUserQuestionsForAgent, n as assessDeaconPatrolFreshness, q as listBootReconciliationCandidates, st as withConcurrencyLimit, t as applyBootReconciliationDecision, x as getDeaconLogs } from "./deacon-Da1gKxDd.js";
57
+ import { i as CostThresholdError, l as embed, s as parseRelativeTime } from "./scanner-CzCiMLJf.js";
58
+ import { n as deduplicateEventsSync, o as readEventsSync, s as tailEventsSync } from "./events-B3ytKOJM.js";
59
+ import { n as recordBackgroundAiCost, t as init_cost } from "./cost-CGo8texI.js";
60
+ import { S as writeLatestFlywheelStatus, _ as readCurrentLatestFlywheelStatus, b as subscribeLatestFlywheelStatus, f as getFlywheelRunDetail, h as listFlywheelRuns, l as buildClassifyLookups, m as isFlywheelRunId, y as resolveLiveFlywheelRunId } from "./flywheel-By5V03uu.js";
61
+ import { C as rejectUnauthorizedDashboardSessionMintRequest, S as rejectUnauthorizedDashboardRequest, T as getWorkspacePathForIssue, _ as rebuildCacheSync, b as dashboardSessionCookieHeader, c as resumeQueuedMerges, d as resolveIssueHeadlineCost, f as syncWalFromAllProjects, g as getCostsForIssueSync, h as migrateAllSessionsSync, l as processPendingFeedbackDeliveries, m as reconcilePiTranscripts, p as reconcile, t as workspacesRouteLayer, u as getCachedRunningAgents, v as syncCacheSync, w as rejectUnsafeDashboardMutationRequest, x as hasDashboardInternalToken, y as dashboardCsrfToken } from "./workspaces-JkQdW0Rd.js";
62
+ import { l as detectPlatform, u as init_platform } from "./workspace-manager-DA59Z70a.js";
63
+ import { O as init_specialists, b as getReviewerSessionName } from "./specialists-DALlYmo_.js";
64
64
  import { t as withBdMutex } from "./bd-mutex-DXCIKL87.js";
65
- import { n as findPrdAtStatusSync, r as init_prd_locations } from "./prd-locations-BT_sPcNF.js";
65
+ import { n as findPrdAtStatusSync, r as init_prd_locations } from "./prd-locations-D9J9Dei3.js";
66
66
  import { a as getShadowState, s as init_shadow_state } from "./shadow-state-bugG0OUd.js";
67
- import { c as getMergeBackendStatus, d as init_github_app, f as isGitHubAppConfigured, u as getPullRequestState } from "./github-app-DOmwGAQl.js";
68
- import { t as clearIssueClosedCache } from "./issue-closed-nHUhxUMc.js";
69
- import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-4WFZC8UZ.js";
70
- import { n as parseSequenceMd, r as writeSequenceMd, t as init_sequence_io } from "./sequence-io-h4-QtTnt.js";
71
- import { C as selectNeedsPlanning, S as normalizeGate, _ as computeCohort, b as computeStats, d as OBJECTION_LABEL, f as PARKED_LABEL, g as classifyIssue, h as VETOED_LABEL, m as RELEASED_LABEL, p as READY_LABEL, u as BLOCKS_MAIN_LABEL, v as computeEpicGroups, x as computeWaves, y as computeLanes } from "./flywheel-merge-order-BQI3T5pp.js";
72
- import { a as loadWorkspaceMetadataSync } from "./workspace-metadata-CcVCl7Om.js";
73
- import { i as resolveAutoSpawnOnFinalize, o as spawnPlanningSession } from "./spawn-planning-session-CWstFiT-.js";
74
- import { _ as sendToRemoteAgent, a as getRemoteAgentOutput, n as checkRemoteSpendCap, o as init_remote_agents, p as loadRemoteAgentState, u as killRemoteAgent, v as spawnRemoteAgent } from "./remote-agents-CE0kVmAf.js";
75
- import { r as spawnInspectAgent } from "./inspect-agent-BJCCg3O5.js";
76
- import { a as init_pull_requests, c as getIssuePrTabCacheGeneration, d as githubPrLookupSource, f as init_github_pr_lookup, i as fetchIssuePullRequestDiff, l as init_pr_tab_cache, n as fetchIssuePullRequest, o as bumpIssuePrTabCacheGeneration, p as lookupPullRequestNumberForBranch, r as fetchIssuePullRequestDetails, s as getCachedIssuePrTabResponse, t as fetchIssueCheckRuns, u as setCachedIssuePrTabResponse } from "./pull-requests-tsM16UNo.js";
77
- import { t as enrichReviewStatus } from "./review-status-enrichment-BHLoQirZ.js";
67
+ import { c as getMergeBackendStatus, d as init_github_app, f as isGitHubAppConfigured, u as getPullRequestState } from "./github-app-DpbY6nKj.js";
68
+ import { t as clearIssueClosedCache } from "./issue-closed-BEVoKUiE.js";
69
+ import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-DUcHN5E1.js";
70
+ import { n as parseSequenceMd, r as writeSequenceMd, t as init_sequence_io } from "./sequence-io-DzHGjEQG.js";
71
+ import { C as selectNeedsPlanning, S as normalizeGate, _ as computeCohort, b as computeStats, d as OBJECTION_LABEL, f as PARKED_LABEL, g as classifyIssue, h as VETOED_LABEL, m as RELEASED_LABEL, p as READY_LABEL, u as BLOCKS_MAIN_LABEL, v as computeEpicGroups, x as computeWaves, y as computeLanes } from "./flywheel-merge-order-DS83DYov.js";
72
+ import { a as loadWorkspaceMetadataSync } from "./workspace-metadata-BWP0Gghc.js";
73
+ import { i as resolveAutoSpawnOnFinalize, o as spawnPlanningSession } from "./spawn-planning-session-DyKxcVGi.js";
74
+ import { _ as sendToRemoteAgent, a as getRemoteAgentOutput, n as checkRemoteSpendCap, o as init_remote_agents, p as loadRemoteAgentState, u as killRemoteAgent, v as spawnRemoteAgent } from "./remote-agents-DHPxoyuA.js";
75
+ import { r as spawnInspectAgent } from "./inspect-agent-CCGhgZwF.js";
76
+ import { a as init_pull_requests, c as getIssuePrTabCacheGeneration, d as githubPrLookupSource, f as init_github_pr_lookup, i as fetchIssuePullRequestDiff, l as init_pr_tab_cache, n as fetchIssuePullRequest, o as bumpIssuePrTabCacheGeneration, p as lookupPullRequestNumberForBranch, r as fetchIssuePullRequestDetails, s as getCachedIssuePrTabResponse, t as fetchIssueCheckRuns, u as setCachedIssuePrTabResponse } from "./pull-requests-R3t6SZ7b.js";
77
+ import { t as enrichReviewStatus } from "./review-status-enrichment-Ddj7NTYe.js";
78
78
  import { i as runMemoryFtsTransaction, n as init_fts_db, r as runMemoryFtsStatement, t as closeMemoryFtsDatabases } from "./fts-db-BkKcBcY2.js";
79
- import { c as init_pending, l as maybeTriggerStatusRollup, o as readRecentObservations, r as init_rollup, u as writePendingTurn } from "./rollup-B3Bt9VtQ.js";
80
- import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-0Te4IUnH.js";
81
- import { _ as init_git_activity, v as listGitOperationsSync } from "./merge-agent-DjYp-UIK.js";
82
- import { t as getAgentCommandSync } from "./settings-D5oLqghw.js";
83
- import { n as init_review_agent, r as isExtendedReviewEnabled } from "./review-agent-x4KI2jSf.js";
84
- import { r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-BullELly.js";
85
- import { n as init_claude_settings_overlay, t as detectProviderEnvConflicts } from "./claude-settings-overlay-DHEbuQrw.js";
86
- import { a as init_query_expansion, i as clearQueryExpansionCache, n as init_injection, o as buildMatchQuery, r as injectPromptTimeMemory, s as init_search } from "./injection-B2ElRuNk.js";
87
- import { _ as init_transcript_adapter, a as generateFallbackSummary, c as handoffPreconditionFallbackReason, d as prependFallbackFocus, f as requestHandoffFromAgent, g as getTranscriptAdapter, i as copySessionFromCompactBoundary, l as init_summary_fork, o as generateSummaryForFork, p as reserveSummaryForkSession, r as authorHandoffExternal, s as handoffFailureReason, u as logHandoffFallback } from "./summary-fork-CIYflUCB.js";
88
- import { a as init_conversation_compaction, c as shouldInterceptManualCompact, n as compactConversationNative, o as isCompacting } from "./conversation-compaction-DxVCfMsv.js";
79
+ import { c as init_pending, l as maybeTriggerStatusRollup, o as readRecentObservations, r as init_rollup, u as writePendingTurn } from "./rollup-DjuYNjJA.js";
80
+ import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-BUdzAlOX.js";
81
+ import { _ as init_git_activity, v as listGitOperationsSync } from "./merge-agent-NmPcMe48.js";
82
+ import { t as getAgentCommandSync } from "./settings-CHBd7dXM.js";
83
+ import { n as init_review_agent, r as isExtendedReviewEnabled } from "./review-agent-Fy6N7Kgq.js";
84
+ import { r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-D9u5oAKU.js";
85
+ import { n as init_claude_settings_overlay, t as detectProviderEnvConflicts } from "./claude-settings-overlay-CwvL66eF.js";
86
+ import { a as init_query_expansion, i as clearQueryExpansionCache, n as init_injection, o as buildMatchQuery, r as injectPromptTimeMemory, s as init_search } from "./injection-GRwakte4.js";
87
+ import { _ as init_transcript_adapter, a as generateFallbackSummary, c as handoffPreconditionFallbackReason, d as prependFallbackFocus, f as requestHandoffFromAgent, g as getTranscriptAdapter, i as copySessionFromCompactBoundary, l as init_summary_fork, o as generateSummaryForFork, p as reserveSummaryForkSession, r as authorHandoffExternal, s as handoffFailureReason, u as logHandoffFallback } from "./summary-fork-B9qYAHl6.js";
88
+ import { a as init_conversation_compaction, c as shouldInterceptManualCompact, n as compactConversationNative, o as isCompacting } from "./conversation-compaction-CKJRITVq.js";
89
89
  import { a as init_render, d as validateTemplate, i as hasManagedRegion, l as init_harness, o as userContentOutsideRegion, t as init_context_layers, u as renderForHarness } from "./context-layers-DGIdj1-C.js";
90
- import { r as parseArtifactRef } from "./forge-DyEaM-rx.js";
91
- import { t as getMergeBlockersPayload } from "./merge-blockers-ByOxbHUf.js";
92
- import { a as spawnSequencerAgent, i as init_sequencer_agent, n as clearFinishedSequencerRun, r as getSequencerRunStatus, t as SEQUENCER_AGENT_ID } from "./sequencer-agent-D_WJsQKB.js";
93
- import "./supervisor-Bykrzblr.js";
94
- import { i as listTranscriptCheckpoints, r as getTranscriptCheckpoint$1 } from "./checkpoints-BcXu6L_6.js";
90
+ import { r as parseArtifactRef } from "./forge-C7RLCYC_.js";
91
+ import { t as getMergeBlockersPayload } from "./merge-blockers-B3Y4Sprl.js";
92
+ import { a as spawnSequencerAgent, i as init_sequencer_agent, n as clearFinishedSequencerRun, r as getSequencerRunStatus, t as SEQUENCER_AGENT_ID } from "./sequencer-agent-BEVXaOSB.js";
93
+ import "./supervisor-CNcM3RIc.js";
94
+ import { i as listTranscriptCheckpoints, r as getTranscriptCheckpoint$1 } from "./checkpoints-0C9dS0-x.js";
95
95
  import { createRequire } from "node:module";
96
96
  import { Cause, Context, Data, Duration, Effect, Exit, Fiber, FileSystem, Layer, Option, Path, Queue, Result, Schedule, Schema, Stream } from "effect";
97
97
  import { createReadStream, createWriteStream, existsSync, fstatSync, mkdirSync, readFileSync, statSync, writeFileSync } from "fs";
@@ -651,7 +651,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
651
651
  const beadsDir = join$1(workspacePath, ".beads");
652
652
  const projectBeadsDir = join$1(workspacePath, "..", "..", ".beads");
653
653
  if (!(existsSync$1(beadsDir) || existsSync$1(projectBeadsDir))) throw new BeadsNotInitialized({ workspace: workspacePath });
654
- const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-pTsn9v84.js");
654
+ const { getAgentState, spawnAgent, normalizeAgentId } = await import("./agents-Bi9Y6h5B.js");
655
655
  const normalizedId = normalizeAgentId(issueId);
656
656
  if ((await Effect.runPromise(getAgentState(normalizedId)))?.status === "running") throw new AgentAlreadyRunning({ id: issueId });
657
657
  return {
@@ -682,7 +682,7 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
682
682
  const { workspacePath, projectPath, issue } = opts;
683
683
  if (!existsSync$1(workspacePath)) throw new WorkspaceNotFound({ id: issueId });
684
684
  const sessionName = opts.sessionName ?? `planning-${issueId.toLowerCase()}`;
685
- const { spawnPlanningSession } = await import("./spawn-planning-session-CIVFNe5b.js");
685
+ const { spawnPlanningSession } = await import("./spawn-planning-session-B-vx-dop.js");
686
686
  const result = await spawnPlanningSession({
687
687
  issue: {
688
688
  id: issue.id,
@@ -715,14 +715,14 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
715
715
  }),
716
716
  kill: (agentId) => Effect.tryPromise({
717
717
  try: async () => {
718
- const { stopAgent } = await import("./agents-pTsn9v84.js");
718
+ const { stopAgent } = await import("./agents-Bi9Y6h5B.js");
719
719
  await Effect.runPromise(stopAgent(agentId));
720
720
  },
721
721
  catch: () => void 0
722
722
  }).pipe(Effect.ignore),
723
723
  message: (agentId, msg) => Effect.tryPromise({
724
724
  try: async () => {
725
- const { messageAgent } = await import("./agents-pTsn9v84.js");
725
+ const { messageAgent } = await import("./agents-Bi9Y6h5B.js");
726
726
  await messageAgent(agentId, msg);
727
727
  },
728
728
  catch: (err) => new AgentStartError({
@@ -733,8 +733,8 @@ const AgentSpawnerLive = Layer.effect(AgentSpawner, Effect.sync(() => ({
733
733
  }),
734
734
  deepWipe: (issueId, opts) => Effect.tryPromise({
735
735
  try: async () => {
736
- const { deepWipe } = await import("./workflows-B1dF2rZU.js");
737
- const { resolveProjectFromIssueSync } = await import("./projects-BGOgJTpI.js");
736
+ const { deepWipe } = await import("./workflows-DaV5vcGg.js");
737
+ const { resolveProjectFromIssueSync } = await import("./projects-CKnFqWB0.js");
738
738
  const project = resolveProjectFromIssueSync(issueId);
739
739
  const projectPath = project?.projectPath ?? process.cwd();
740
740
  await Effect.runPromise(deepWipe({
@@ -790,8 +790,8 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
790
790
  const { workspacePath, branch } = getWorkspacePath(issueId);
791
791
  const issueLower = issueId.toLowerCase();
792
792
  if (existsSync$1(workspacePath)) return workspacePath;
793
- const { createWorkspace } = await import("./workspace-manager-g8GBLo49.js");
794
- const { loadProjectsConfigSync } = await import("./projects-BGOgJTpI.js");
793
+ const { createWorkspace } = await import("./workspace-manager-CK4yZQev.js");
794
+ const { loadProjectsConfigSync } = await import("./projects-CKnFqWB0.js");
795
795
  const { projects } = loadProjectsConfigSync();
796
796
  const project = resolveProjectFromIssueSync(issueId);
797
797
  if (!project) throw new WorkspaceCreateError({
@@ -826,7 +826,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
826
826
  const { workspacePath } = getWorkspacePath(issueId);
827
827
  const issueLower = issueId.toLowerCase();
828
828
  if (!existsSync$1(workspacePath)) throw new WorkspaceNotFound({ id: issueId });
829
- const { removeWorkspace } = await import("./workspace-manager-g8GBLo49.js");
829
+ const { removeWorkspace } = await import("./workspace-manager-CK4yZQev.js");
830
830
  const project = resolveProjectFromIssueSync(issueId);
831
831
  if (!project) throw new WorkspaceCreateError({
832
832
  id: issueId,
@@ -857,7 +857,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
857
857
  try: async () => {
858
858
  const { workspacePath } = getWorkspacePath(issueId);
859
859
  const issueLower = issueId.toLowerCase();
860
- const { stopWorkspaceDocker } = await import("./workspace-manager-g8GBLo49.js");
860
+ const { stopWorkspaceDocker } = await import("./workspace-manager-CK4yZQev.js");
861
861
  await Effect.runPromise(stopWorkspaceDocker(workspacePath, issueLower));
862
862
  },
863
863
  catch: () => void 0
@@ -926,7 +926,7 @@ const WorkspaceServiceLive = Layer.effect(WorkspaceService, Effect.sync(() => {
926
926
  join$1(workspacePath, ".devcontainer", "docker-compose.devcontainer.yml")
927
927
  ];
928
928
  if (!composePaths.find((p) => existsSync$1(p))) {
929
- const { ensureDevcontainerSync } = await import("./ensure-devcontainer-BdQCQbQc.js");
929
+ const { ensureDevcontainerSync } = await import("./ensure-devcontainer-C18oIaYa.js");
930
930
  const ensure = ensureDevcontainerSync({
931
931
  workspacePath,
932
932
  issueId
@@ -29286,6 +29286,12 @@ function storedToDomainEvent(stored) {
29286
29286
  payload: stored.payload
29287
29287
  };
29288
29288
  }
29289
+ const isKnownDomainEvent = Schema.is(DomainEvent);
29290
+ function passesDomainEventSchema(event) {
29291
+ if (isKnownDomainEvent(event)) return true;
29292
+ console.error(`[ws-rpc] dropping domain event that fails DomainEvent schema validation — add it to the contracts union: type=${event.type} seq=${event.sequence}`);
29293
+ return false;
29294
+ }
29289
29295
  function createSystemHeartbeatEvent() {
29290
29296
  const ts = Date.now();
29291
29297
  return {
@@ -29719,7 +29725,7 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
29719
29725
  [WS_METHODS.subscribeDomainEvents]: (_input) => {
29720
29726
  console.log("[ws-rpc] subscribeDomainEvents invoked");
29721
29727
  const heartbeats = Stream.tick("15 seconds").pipe(Stream.map(createSystemHeartbeatEvent));
29722
- return eventStore.streamEvents.pipe(Stream.map(storedToDomainEvent), Stream.merge(heartbeats));
29728
+ return eventStore.streamEvents.pipe(Stream.map(storedToDomainEvent), Stream.filter(passesDomainEventSchema), Stream.merge(heartbeats));
29723
29729
  },
29724
29730
  [WS_METHODS.subscribeFlywheelStatus]: (_input) => Stream.callback((queue) => Effect.acquireRelease(Effect.promise(async () => {
29725
29731
  const latest = await readCurrentLatestFlywheelStatus({ activeRunId: await runDashboardDbJob("getSetting", "flywheel.active_run_id") });
@@ -29730,7 +29736,7 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
29730
29736
  }), (unsubscribe) => Effect.sync(() => unsubscribe()))),
29731
29737
  [WS_METHODS.subscribeIssueEvents]: (input) => {
29732
29738
  console.log(`[ws-rpc] subscribeIssueEvents invoked issueId=${input.issueId}`);
29733
- return eventStore.streamEvents.pipe(Stream.map(storedToDomainEvent), Stream.mapEffect((event) => getCachedAgentIssueLookup(readModel).pipe(Effect.map((lookup) => filterDomainEventForIssue(event, input.issueId, lookup)))), Stream.filter((event) => event !== null));
29739
+ return eventStore.streamEvents.pipe(Stream.map(storedToDomainEvent), Stream.filter(passesDomainEventSchema), Stream.mapEffect((event) => getCachedAgentIssueLookup(readModel).pipe(Effect.map((lookup) => filterDomainEventForIssue(event, input.issueId, lookup)))), Stream.filter((event) => event !== null));
29734
29740
  },
29735
29741
  [WS_METHODS.subscribeTerminal]: (input) => terminalService.streamSession(input.sessionName, input.cols, input.rows),
29736
29742
  [WS_METHODS.subscribeAgentOutput]: (input) => eventStore.streamEvents.pipe(Stream.filter((e) => e.type === "agent.output_received" && e.payload["agentId"] === input.agentId), Stream.flatMap((e) => {
@@ -29752,7 +29758,7 @@ const PanRpcLayer = PanRpcGroup.toLayer(Effect.gen(function* () {
29752
29758
  message: `Failed to build dashboard snapshot: ${String(cause)}`,
29753
29759
  code: "SNAPSHOT_FAILED"
29754
29760
  }))),
29755
- [WS_METHODS.replayEvents]: (input) => eventStore.readFrom(input.fromSequence).pipe(Effect.map((stored) => stored.map(storedToDomainEvent)), Effect.mapError((cause) => new PanRpcError({
29761
+ [WS_METHODS.replayEvents]: (input) => eventStore.readFrom(input.fromSequence).pipe(Effect.map((stored) => stored.map(storedToDomainEvent).filter(passesDomainEventSchema)), Effect.mapError((cause) => new PanRpcError({
29756
29762
  message: `Failed to replay events: ${String(cause)}`,
29757
29763
  code: "REPLAY_FAILED"
29758
29764
  }))),
@@ -30487,7 +30493,7 @@ function isDiscoverableAgentSession(sessionName) {
30487
30493
  async function loadTrackerIssues() {
30488
30494
  const map = /* @__PURE__ */ new Map();
30489
30495
  try {
30490
- const { getSharedIssueService } = await import("./issue-service-singleton-BDRqGHSo.js");
30496
+ const { getSharedIssueService } = await import("./issue-service-singleton-BSgap-ST.js");
30491
30497
  const issues = (await getSharedIssueService()).getIssues();
30492
30498
  for (const issue of issues) if (issue.identifier) map.set(issue.identifier.toUpperCase(), issue);
30493
30499
  } catch {
@@ -30686,7 +30692,7 @@ async function computeResourceAllocatedIssues() {
30686
30692
  if (!issue.resourceDetails.tmuxSessions.includes(sessionName)) issue.resourceDetails.tmuxSessions.push(sessionName);
30687
30693
  }
30688
30694
  try {
30689
- const { listActiveRemoteAgentStates } = await import("./remote-agents-BT_DHl8s.js");
30695
+ const { listActiveRemoteAgentStates } = await import("./remote-agents-tBpE_KXg.js");
30690
30696
  for (const remoteState of listActiveRemoteAgentStates()) {
30691
30697
  const issue = ensureIssue(remoteState.issueId);
30692
30698
  if (!issue) continue;
@@ -31249,7 +31255,7 @@ async function completePlanningArtifacts(options) {
31249
31255
  if (workspaceIssueId && workspaceIssueId.toLowerCase() !== issueLower) throw new Error(`Workspace vBRIEF is for ${workspaceIssueId.toUpperCase()}, not ${upperIssueId}`);
31250
31256
  assertPlanQuality(workspaceDoc);
31251
31257
  const createBeads = options.createBeads ?? (async (path) => {
31252
- const mod = await import("./beads-D1muPgsx.js");
31258
+ const mod = await import("./beads-BRYZM_Zz.js");
31253
31259
  return await Effect.runPromise(mod.createBeadsFromVBrief(path));
31254
31260
  });
31255
31261
  emitCompletePlanningPhase(upperIssueId, "specWrite", "start", "writing proposed vBRIEF spec", { projectPath });
@@ -31851,7 +31857,7 @@ async function closeIssuePullRequest(issueId, reason = "Canceled via Overdeck")
31851
31857
  timeout: 15e3
31852
31858
  });
31853
31859
  try {
31854
- const { setReviewStatusSync } = await import("./review-status-DZSsEGO4.js");
31860
+ const { setReviewStatusSync } = await import("./review-status-BzMWJsVk.js");
31855
31861
  setReviewStatusSync(issueId.toUpperCase(), { prUrl: void 0 });
31856
31862
  } catch {}
31857
31863
  return [`Closed PR #${prNumber} on ${githubCheck.owner}/${githubCheck.repo}`];
@@ -31905,7 +31911,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
31905
31911
  const { ctx, projectConfig } = buildLifecycleContext(id, getIssueDataService$8().getIssueSource(id) ?? void 0);
31906
31912
  const deleteWorkspace = opts.deleteWorkspace ?? true;
31907
31913
  cleanupLog.push(...await closeIssuePullRequest(id, mode === "cancel" ? "Canceled via Overdeck" : "Reset to Todo via Overdeck"));
31908
- const { resetToTodo, cancelIssueWorkflow } = await import("./lifecycle-BG47TprR.js");
31914
+ const { resetToTodo, cancelIssueWorkflow } = await import("./lifecycle-Bu2YCv15.js");
31909
31915
  const workflow = mode === "cancel" ? cancelIssueWorkflow : resetToTodo;
31910
31916
  const result = await Effect.runPromise(workflow(ctx, {
31911
31917
  deleteWorkspace,
@@ -31920,7 +31926,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
31920
31926
  }));
31921
31927
  cleanupLog.push(...result.steps.flatMap((step) => step.details || [step.error].filter(Boolean)));
31922
31928
  if (mode === "cancel") try {
31923
- const { transitionVBriefOnMain } = await import("./lifecycle-io-De3FFKAu.js");
31929
+ const { transitionVBriefOnMain } = await import("./lifecycle-io-DmVYRVq5.js");
31924
31930
  const tx = await Effect.runPromise(transitionVBriefOnMain(ctx.projectPath, id, "cancelled", "cancelled", `scope: cancel ${id.toUpperCase()} vBRIEF`));
31925
31931
  if (tx.moved) cleanupLog.push(`vBRIEF moved ${tx.fromDir} → cancelled`);
31926
31932
  if (tx.committed) cleanupLog.push(`Committed vBRIEF cancellation on main`);
@@ -31928,8 +31934,8 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
31928
31934
  cleanupLog.push(`vBRIEF cancel transition failed (non-fatal): ${err?.message ?? err}`);
31929
31935
  }
31930
31936
  try {
31931
- const { killAllReviewerSessions } = await import("./review-agent-CfFA3HqX.js");
31932
- const { resolveProjectFromIssueSync } = await import("./projects-BGOgJTpI.js");
31937
+ const { killAllReviewerSessions } = await import("./review-agent-D-gfTx9G.js");
31938
+ const { resolveProjectFromIssueSync } = await import("./projects-CKnFqWB0.js");
31933
31939
  const projectKey = resolveProjectFromIssueSync(id)?.projectKey;
31934
31940
  if (projectKey) {
31935
31941
  const { killed } = await Effect.runPromise(killAllReviewerSessions(projectKey, id.toUpperCase()));
@@ -31943,7 +31949,7 @@ async function runDestructiveIssueLifecycle(id, mode, opts = {}) {
31943
31949
  cleanupLog.push("Cleared review status");
31944
31950
  } catch {}
31945
31951
  try {
31946
- const { resetPostMergeState } = await import("./merge-agent-BmLQPYGq.js");
31952
+ const { resetPostMergeState } = await import("./merge-agent-CvVDCFOp.js");
31947
31953
  resetPostMergeState(id);
31948
31954
  resetPostMergeState(id.toUpperCase());
31949
31955
  cleanupLog.push("Cleared merge state");
@@ -31963,7 +31969,7 @@ function closeIssueTransition(options) {
31963
31969
  const { issueId, body, eventStore } = options;
31964
31970
  const { reason } = body;
31965
31971
  const projectPath = getProjectPath$3(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]);
31966
- const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-BG47TprR.js"));
31972
+ const { close: closeWorkflow } = yield* Effect.promise(() => import("./lifecycle-Bu2YCv15.js"));
31967
31973
  const githubCheck = isGitHubIssue$4(issueId);
31968
31974
  const issueDataService = getIssueDataService$8();
31969
31975
  const issueSource = issueDataService.getIssueSource(issueId);
@@ -32230,7 +32236,7 @@ function reopenIssueTransition(options) {
32230
32236
  else clearReviewStatus(id.toUpperCase());
32231
32237
  } catch {}
32232
32238
  try {
32233
- const { resetPostMergeState } = await import("./merge-agent-BmLQPYGq.js");
32239
+ const { resetPostMergeState } = await import("./merge-agent-CvVDCFOp.js");
32234
32240
  resetPostMergeState(id);
32235
32241
  resetPostMergeState(id.toUpperCase());
32236
32242
  } catch {}
@@ -32250,7 +32256,7 @@ function reopenIssueTransition(options) {
32250
32256
  const projectPath = (teamPrefix ? findProjectByTeamSync(teamPrefix) : null)?.path || "";
32251
32257
  if (projectPath) {
32252
32258
  const workspacePath = join$1(projectPath, "workspaces", `feature-${issueLower}`);
32253
- const { createBeadsFromVBrief } = await import("./beads-D1muPgsx.js");
32259
+ const { createBeadsFromVBrief } = await import("./beads-BRYZM_Zz.js");
32254
32260
  if (existsSync$1(workspacePath) && await Effect.runPromise(findPlan(workspacePath))) try {
32255
32261
  const { stdout: bdCheck } = await Effect.runPromise(withBdMutex(() => Effect.promise(() => execFileAsync$6("bd", [
32256
32262
  "list",
@@ -32554,7 +32560,7 @@ async function copySettingsToWorkspace(id) {
32554
32560
  success: false,
32555
32561
  error: "Workspace not found"
32556
32562
  }, { status: 404 });
32557
- const { copyOverdeckSettingsToWorkspaceSync } = await import("./workspace-manager-g8GBLo49.js");
32563
+ const { copyOverdeckSettingsToWorkspaceSync } = await import("./workspace-manager-CK4yZQev.js");
32558
32564
  const result = copyOverdeckSettingsToWorkspaceSync(workspacePath);
32559
32565
  return jsonResponse({
32560
32566
  success: result.errors.length === 0 || result.copied.length > 0,
@@ -32587,7 +32593,7 @@ function generateTasksForIssue(id) {
32587
32593
  success: false,
32588
32594
  error: `No vBRIEF spec found on main for ${id} — run planning first.`
32589
32595
  }, { status: 409 });
32590
- const { createBeadsFromVBrief } = yield* Effect.promise(() => import("./beads-D1muPgsx.js"));
32596
+ const { createBeadsFromVBrief } = yield* Effect.promise(() => import("./beads-BRYZM_Zz.js"));
32591
32597
  const result = yield* createBeadsFromVBrief(workspacePath);
32592
32598
  if (!result.success || result.created.length === 0) {
32593
32599
  const errors = result.errors.length > 0 ? result.errors : ["Beads creation produced no tasks"];
@@ -33479,7 +33485,7 @@ function closeOutIssue(id) {
33479
33485
  }
33480
33486
  const closeOutResult = yield* Effect.promise(async () => {
33481
33487
  try {
33482
- const { closeOut } = await import("./lifecycle-BG47TprR.js");
33488
+ const { closeOut } = await import("./lifecycle-Bu2YCv15.js");
33483
33489
  return {
33484
33490
  ok: true,
33485
33491
  result: await Effect.runPromise(closeOut(ctx))
@@ -33565,7 +33571,7 @@ function bulkCloseOut(body) {
33565
33571
  const invalidIds = issueIds.filter((id) => !isValidIssueId(id));
33566
33572
  if (invalidIds.length > 0) return jsonResponse({ error: `Invalid issue ID format: ${invalidIds.join(", ")}` }, { status: 400 });
33567
33573
  const eventStore = yield* EventStoreService;
33568
- const { closeOut } = yield* Effect.promise(() => import("./lifecycle-BG47TprR.js"));
33574
+ const { closeOut } = yield* Effect.promise(() => import("./lifecycle-Bu2YCv15.js"));
33569
33575
  const issueDataService = getIssueDataService$5();
33570
33576
  const tasks = [];
33571
33577
  const agentChecks = yield* withConcurrencyLimit(issueIds.map((id) => Effect.promise(async () => {
@@ -34979,8 +34985,34 @@ async function deriveSessionPresence(agentId, rtState, tmuxSessionNames) {
34979
34985
  return "idle";
34980
34986
  }
34981
34987
  //#endregion
34982
- //#region ../../lib/settings-api.ts
34988
+ //#region ../../lib/settings-api-tiered-execution.ts
34983
34989
  init_prd_locations();
34990
+ function tieredExecutionConfigForSave(config, providerAuth) {
34991
+ if (config === void 0) return void 0;
34992
+ const validated = validateTieredExecutionConfig(config, { providerAuth });
34993
+ return {
34994
+ enabled: validated.enabled,
34995
+ tiers: validated.tiers,
34996
+ supervisor: validated.supervisor,
34997
+ by_kind: validated.by_kind,
34998
+ feed: validated.feed,
34999
+ escalation: validated.escalation,
35000
+ compaction_reroute: validated.compaction_reroute,
35001
+ replay_threshold: validated.replay_threshold
35002
+ };
35003
+ }
35004
+ function validateTieredExecutionSettings(config, providerAuth) {
35005
+ if (config === void 0) return null;
35006
+ try {
35007
+ validateTieredExecutionConfig(config, { providerAuth });
35008
+ return null;
35009
+ } catch (error) {
35010
+ if (error instanceof TieredExecutionConfigError) return error.message;
35011
+ throw error;
35012
+ }
35013
+ }
35014
+ //#endregion
35015
+ //#region ../../lib/settings-api.ts
34984
35016
  /**
34985
35017
  * Settings API Adapter
34986
35018
  *
@@ -35440,7 +35472,8 @@ async function writeYamlConfigPreservingComments(yamlConfig) {
35440
35472
  ["tracker_keys", config.tracker_keys],
35441
35473
  ["experimental", config.experimental],
35442
35474
  ["claude", config.claude],
35443
- ["codex", config.codex]
35475
+ ["codex", config.codex],
35476
+ ["tiered_execution", config.tiered_execution]
35444
35477
  ];
35445
35478
  for (const [key, value] of topLevelSections) if (value === void 0) doc.deleteIn([key]);
35446
35479
  else doc.setIn([key], value);
@@ -35544,7 +35577,8 @@ async function saveSettingsApiPromise(settings) {
35544
35577
  } : void 0,
35545
35578
  claude: settings.claude?.permissionMode ? { permissionMode: settings.claude.permissionMode } : void 0,
35546
35579
  codex: settings.codex?.permissionMode ? { permissionMode: settings.codex.permissionMode } : void 0,
35547
- remote: settings.remote
35580
+ remote: settings.remote,
35581
+ tiered_execution: tieredExecutionConfigForSave(settings.tiered_execution, currentConfig.providerAuth)
35548
35582
  });
35549
35583
  clearConfigCache();
35550
35584
  }
@@ -35711,6 +35745,10 @@ function validateSettingsApi(settings) {
35711
35745
  if (settings.remote.resiliency_tier !== void 0 && settings.remote.resiliency_tier !== "ephemeral" && settings.remote.resiliency_tier !== "durable") errors.push("remote.resiliency_tier must be ephemeral or durable");
35712
35746
  if (settings.remote.max_concurrent_agents !== void 0 && (!Number.isInteger(settings.remote.max_concurrent_agents) || settings.remote.max_concurrent_agents < 0)) errors.push("remote.max_concurrent_agents must be a non-negative integer");
35713
35747
  }
35748
+ if (settings.tiered_execution !== void 0) {
35749
+ const tieredExecutionError = validateTieredExecutionSettings(settings.tiered_execution, loadConfigSync().config.providerAuth);
35750
+ if (tieredExecutionError) errors.push(tieredExecutionError);
35751
+ }
35714
35752
  return {
35715
35753
  valid: errors.length === 0,
35716
35754
  errors,
@@ -36881,7 +36919,7 @@ Be specific: reference actual file names, function names, requirement text, disc
36881
36919
  const { command: cliCmd, args: cliArgs } = getAgentCommandSync(statusModelId);
36882
36920
  const modelFlag = cliArgs.length > 0 ? ` ${cliArgs.join(" ")}` : "";
36883
36921
  const promptFile = join$1(planningDir, ".status-review-prompt.tmp");
36884
- const { getProviderForModelSync, getProviderEnvSync } = await import("./providers-n0vv1kSW.js");
36922
+ const { getProviderForModelSync, getProviderEnvSync } = await import("./providers-B0dqjvFa.js");
36885
36923
  let providerEnvStr = "";
36886
36924
  let providerEnv = {};
36887
36925
  const statusProvider = getProviderForModelSync(statusModelId);
@@ -42842,7 +42880,7 @@ const postRallyValidateRoute = HttpRouter.add("POST", "/api/rally/validate", Eff
42842
42880
  }, { status: 400 });
42843
42881
  return yield* Effect.promise(async () => {
42844
42882
  try {
42845
- const { RallyRestApi } = await import("./rally-api-CdbdHW2C.js");
42883
+ const { RallyRestApi } = await import("./rally-api-ukAD0De8.js");
42846
42884
  const api = new RallyRestApi({
42847
42885
  apiKey,
42848
42886
  server: server || "https://rally1.rallydev.com"
@@ -43170,7 +43208,7 @@ const getPlanningStatusRoute = HttpRouter.add("GET", "/api/planning/:issueId/sta
43170
43208
  const remoteState = loadRemoteAgentState(sessionName);
43171
43209
  const isRemote = !!remoteState;
43172
43210
  const vmName = remoteState?.vmName ?? "";
43173
- const { getAgentStateSync } = await import("./agents-pTsn9v84.js");
43211
+ const { getAgentStateSync } = await import("./agents-Bi9Y6h5B.js");
43174
43212
  const agentStarting = getAgentStateSync(sessionName)?.status === "starting";
43175
43213
  let tmuxSessionAlive = false;
43176
43214
  if (!isRemote) try {
@@ -43313,7 +43351,7 @@ Continue the PLANNING session. Do NOT implement anything.
43313
43351
  `);
43314
43352
  const agentCwd = workspacePath;
43315
43353
  if (existsSync$1(outputFile)) await rename(outputFile, join$1(planningDir, `output-${Date.now()}.jsonl`));
43316
- const { getAgentCommandSync } = await import("./settings-CWqi2OdX.js");
43354
+ const { getAgentCommandSync } = await import("./settings-DPQ5nEA-.js");
43317
43355
  let msgPlanningModel = "claude-sonnet-5";
43318
43356
  try {
43319
43357
  msgPlanningModel = resolveModel("plan", void 0, loadConfigSync().config);
@@ -43434,7 +43472,7 @@ async function getIndexStats(rootPath, isMain) {
43434
43472
  }
43435
43473
  const getTldrStatusRoute = HttpRouter.add("GET", "/api/services/tldr/status", Effect.promise(async () => {
43436
43474
  try {
43437
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DvyN2P1o.js");
43475
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-LV_URGSC.js");
43438
43476
  const projectRoot = process.cwd();
43439
43477
  const venvPath = join$1(projectRoot, ".venv");
43440
43478
  const results = [];
@@ -43479,7 +43517,7 @@ const getTldrStatusRoute = HttpRouter.add("GET", "/api/services/tldr/status", Ef
43479
43517
  }));
43480
43518
  const postTldrStartRoute = HttpRouter.add("POST", "/api/services/tldr/start", Effect.promise(async () => {
43481
43519
  try {
43482
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DvyN2P1o.js");
43520
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-LV_URGSC.js");
43483
43521
  const projectRoot = process.cwd();
43484
43522
  const venvPath = join$1(projectRoot, ".venv");
43485
43523
  if (!existsSync$1(venvPath)) return jsonResponse({ error: "No .venv found in project root" }, { status: 404 });
@@ -43496,7 +43534,7 @@ const postTldrStartRoute = HttpRouter.add("POST", "/api/services/tldr/start", Ef
43496
43534
  }));
43497
43535
  const postTldrStopRoute = HttpRouter.add("POST", "/api/services/tldr/stop", Effect.promise(async () => {
43498
43536
  try {
43499
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DvyN2P1o.js");
43537
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-LV_URGSC.js");
43500
43538
  const projectRoot = process.cwd();
43501
43539
  const venvPath = join$1(projectRoot, ".venv");
43502
43540
  if (!existsSync$1(venvPath)) return jsonResponse({ error: "No .venv found in project root" }, { status: 404 });
@@ -43513,7 +43551,7 @@ const postTldrStopRoute = HttpRouter.add("POST", "/api/services/tldr/stop", Effe
43513
43551
  }));
43514
43552
  const postTldrReloadRoute = HttpRouter.add("POST", "/api/services/tldr/reload", Effect.promise(async () => {
43515
43553
  try {
43516
- const { getTldrDaemonServiceSync } = await import("./tldr-daemon-DvyN2P1o.js");
43554
+ const { getTldrDaemonServiceSync } = await import("./tldr-daemon-LV_URGSC.js");
43517
43555
  const enabled = isTldrEnabledSync();
43518
43556
  const projectRoot = process.cwd();
43519
43557
  const targets = [];
@@ -43589,7 +43627,7 @@ const getVersionRoute = HttpRouter.add("GET", "/api/version", Effect.promise(asy
43589
43627
  const version = await getOverdeckVersion();
43590
43628
  let supervisorUrl = null;
43591
43629
  try {
43592
- const { getSupervisorUrlSync } = await import("./supervisor-C4oXDjJt.js");
43630
+ const { getSupervisorUrlSync } = await import("./supervisor-DyNL2rTl.js");
43593
43631
  supervisorUrl = getSupervisorUrlSync();
43594
43632
  } catch {}
43595
43633
  return jsonResponse({
@@ -43753,7 +43791,7 @@ const postShadowMonitorRoute = HttpRouter.add("POST", "/api/shadow/:issueId/moni
43753
43791
  const projectPath = await getProjectPath(issuePrefix);
43754
43792
  const workspacePath = join$1(projectPath, "workspaces", `feature-${issueLower}`);
43755
43793
  if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace not found" }, { status: 404 });
43756
- const { gatherArtifacts, generateBasicInference, updateInferenceDocumentSync } = await import("./shadow-engineering-CXnG47QM.js");
43794
+ const { gatherArtifacts, generateBasicInference, updateInferenceDocumentSync } = await import("./shadow-engineering-CStyQ6yp.js");
43757
43795
  const config = {
43758
43796
  issueId,
43759
43797
  workspacePath,
@@ -43783,7 +43821,7 @@ const postShadowObserveRoute = HttpRouter.add("POST", "/api/shadow/:issueId/obse
43783
43821
  if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace not found" }, { status: 404 });
43784
43822
  const ghConfig = getGitHubConfig();
43785
43823
  if (!ghConfig) return jsonResponse({ error: "GitHub not configured - Observer requires GitHub" }, { status: 400 });
43786
- const { runObserverCycle } = await import("./shadow-engineering-CXnG47QM.js");
43824
+ const { runObserverCycle } = await import("./shadow-engineering-CStyQ6yp.js");
43787
43825
  const firstRepo = ghConfig.repos[0];
43788
43826
  const config = {
43789
43827
  issueId,
@@ -44848,7 +44886,7 @@ async function cleanupConversationAttachments(name) {
44848
44886
  * sessions that the lifecycle poller missed. */
44849
44887
  async function cleanupOrphanedConversationAttachments() {
44850
44888
  try {
44851
- const { listConversations } = await import("./conversations-RY7OLgoS.js");
44889
+ const { listConversations } = await import("./conversations-DYz9OyMT.js");
44852
44890
  const convNames = new Set(listConversations().map((c) => c.name));
44853
44891
  const root = getConversationAttachmentsRoot();
44854
44892
  await runInBatches((await readdir(root, { withFileTypes: true })).filter((entry) => entry.isDirectory() && !convNames.has(entry.name)).map((entry) => join$1(root, entry.name)), 10, (path) => rm(path, {
@@ -45716,7 +45754,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
45716
45754
  const codexApprovalPolicy = codexPermMode === "full-access" ? "never" : "on-request";
45717
45755
  const codexSandboxMode = codexPermMode === "full-access" ? "danger-full-access" : codexPermMode === "read-only" ? "read-only" : "workspace-write";
45718
45756
  const codexApprovalsReviewer = codexPermMode === "auto-review" ? "auto_review" : void 0;
45719
- const { initCodexHome, extractThreadIdFromRollout } = await import("./codex-BTxuHR7v.js");
45757
+ const { initCodexHome, extractThreadIdFromRollout } = await import("./codex-RRg-7JsH.js");
45720
45758
  initCodexHome(codexHome, {
45721
45759
  trustedDir: cwd,
45722
45760
  approvalPolicy: codexApprovalPolicy,
@@ -45786,7 +45824,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
45786
45824
  } catch {}
45787
45825
  console.log(`[claude-invoke] purpose=conversation-session | model=${model || "default"} | source=conversations.ts:spawnConversationSession | session=${tmuxSession} | resume=${resume} | command="${runtimeCommand}"`);
45788
45826
  try {
45789
- const { preTrustDirectory } = await import("./workspace-manager-g8GBLo49.js");
45827
+ const { preTrustDirectory } = await import("./workspace-manager-CK4yZQev.js");
45790
45828
  preTrustDirectory(cwd);
45791
45829
  } catch {}
45792
45830
  try {
@@ -45803,7 +45841,7 @@ async function spawnConversationSession(tmuxSession, cwd, claudeSessionId, model
45803
45841
  const codexHomeDir = codexFields.codexHome;
45804
45842
  (async () => {
45805
45843
  try {
45806
- const { waitForCodexRollout, extractThreadIdFromRollout, writeThreadId } = await import("./codex-BTxuHR7v.js");
45844
+ const { waitForCodexRollout, extractThreadIdFromRollout, writeThreadId } = await import("./codex-RRg-7JsH.js");
45807
45845
  const rollout = await waitForCodexRollout(codexHomeDir, 12e4);
45808
45846
  if (rollout) {
45809
45847
  const threadId = extractThreadIdFromRollout(rollout);
@@ -48872,7 +48910,7 @@ async function registerProjectFromPath(opts) {
48872
48910
  registerProjectSync(key, projectConfig);
48873
48911
  const seededContextLayer = ensureProjectLayer(fullPath);
48874
48912
  try {
48875
- const { preTrustDirectorySync } = await import("./workspace-manager-g8GBLo49.js");
48913
+ const { preTrustDirectorySync } = await import("./workspace-manager-CK4yZQev.js");
48876
48914
  preTrustDirectorySync(fullPath);
48877
48915
  } catch {}
48878
48916
  let hooksInstalled = 0;
@@ -48908,7 +48946,7 @@ init_pan_dir();
48908
48946
  init_paths();
48909
48947
  const execAsync$3 = promisify(exec);
48910
48948
  async function getIssueDataService() {
48911
- const { getSharedIssueService } = await import("./issue-service-singleton-BDRqGHSo.js");
48949
+ const { getSharedIssueService } = await import("./issue-service-singleton-BSgap-ST.js");
48912
48950
  return getSharedIssueService();
48913
48951
  }
48914
48952
  /** Returns true if the path exists (any type). */
@@ -50835,7 +50873,7 @@ async function refreshMergeStateFromGitHub(issueId, repo, prNumber) {
50835
50873
  let mergeState;
50836
50874
  let isDraft;
50837
50875
  let checksFailed;
50838
- const { isGitHubAppConfigured, getPullRequestState } = await import("./github-app-vFcUfTcd.js");
50876
+ const { isGitHubAppConfigured, getPullRequestState } = await import("./github-app-BG36jYzm.js");
50839
50877
  if (isGitHubAppConfigured()) {
50840
50878
  const prState = await Effect.runPromise(getPullRequestState(owner, repoName, prNumber));
50841
50879
  mergeable = prState.mergeable === null ? "UNKNOWN" : prState.mergeable ? "MERGEABLE" : "CONFLICTING";
@@ -50984,8 +51022,8 @@ async function handlePullRequestPromise(payload) {
50984
51022
  bumpIssuePrTabCacheGeneration(issueId);
50985
51023
  const repo = payload.repository.full_name;
50986
51024
  if (payload.action === "closed" && pr.merged === true) try {
50987
- const { postMergeLifecycle } = await import("./merge-agent-BmLQPYGq.js");
50988
- const { resolveProjectFromIssueSync } = await import("./projects-BGOgJTpI.js");
51025
+ const { postMergeLifecycle } = await import("./merge-agent-CvVDCFOp.js");
51026
+ const { resolveProjectFromIssueSync } = await import("./projects-CKnFqWB0.js");
50989
51027
  const project = resolveProjectFromIssueSync(issueId);
50990
51028
  if (project) {
50991
51029
  const branchName = pr.head.ref;
@@ -51484,7 +51522,7 @@ function getCheckpointWorker() {
51484
51522
  return worker;
51485
51523
  }
51486
51524
  async function runInline(operation, payload) {
51487
- const { claimTranscriptRange, commitTranscriptRange, releaseTranscriptRange, getTranscriptCheckpoint, listTranscriptCheckpoints } = await import("./checkpoints-Cpq2lR3l.js");
51525
+ const { claimTranscriptRange, commitTranscriptRange, releaseTranscriptRange, getTranscriptCheckpoint, listTranscriptCheckpoints } = await import("./checkpoints-DMO68jIJ.js");
51488
51526
  switch (operation) {
51489
51527
  case "claimTranscriptRange": return claimTranscriptRange(payload);
51490
51528
  case "commitTranscriptRange": return commitTranscriptRange(payload);
@@ -52638,7 +52676,7 @@ function buildPendingTurn(input, fromOffset, toOffset, compressed) {
52638
52676
  };
52639
52677
  }
52640
52678
  async function emitMemoryObservationCreated(observation, timestamp) {
52641
- const { initEventStore } = await import("./event-store-C3uFXcUQ.js");
52679
+ const { initEventStore } = await import("./event-store-BQRWQeyx.js");
52642
52680
  await (await initEventStore()).appendAsync({
52643
52681
  type: "memory.observation_created",
52644
52682
  timestamp,
@@ -55677,7 +55715,7 @@ async function getFlywheelConversationPayload() {
55677
55715
  };
55678
55716
  }
55679
55717
  async function postFlywheelReportPayload() {
55680
- const { flywheelReportCommand } = await import("./flywheel-CiKfMXDy.js");
55718
+ const { flywheelReportCommand } = await import("./flywheel-iZNbJfS_.js");
55681
55719
  await flywheelReportCommand({ cwd: process.cwd() });
55682
55720
  return {
55683
55721
  status: 200,
@@ -55835,11 +55873,11 @@ const getMergeBlockersRoute = HttpRouter.add("GET", "/api/flywheel/merge-blocker
55835
55873
  async function defaultGetOrderedIssueIds() {
55836
55874
  const status = await readCurrentFlywheelStatusForDashboard();
55837
55875
  if (!status) return [];
55838
- const { computeMergeQueue } = await import("./flywheel-merge-order-5KNitgPL.js");
55876
+ const { computeMergeQueue } = await import("./flywheel-merge-order-PW8nIENP.js");
55839
55877
  return (await Effect.runPromise(computeMergeQueue(status.activePipeline, process.cwd()).pipe(Effect.provide(layer)))).map((i) => i.issueId);
55840
55878
  }
55841
55879
  async function defaultMergeOne(issueId) {
55842
- const { triggerMerge } = await import("./merge-ops-BZz86Atd.js");
55880
+ const { triggerMerge } = await import("./merge-ops-iaG5kd-C.js");
55843
55881
  const r = await triggerMerge(issueId);
55844
55882
  return r.success ? { ok: true } : {
55845
55883
  ok: false,
@@ -56016,7 +56054,7 @@ const getFlywheelMergeQueueRoute = HttpRouter.add("GET", "/api/flywheel/merge-qu
56016
56054
  return yield* Effect.promise(async () => {
56017
56055
  const status = await readCurrentFlywheelStatusForDashboard();
56018
56056
  if (!status) return jsonResponse([]);
56019
- const { computeMergeQueue, resolveMergeQueuePrUrl } = await import("./flywheel-merge-order-5KNitgPL.js");
56057
+ const { computeMergeQueue, resolveMergeQueuePrUrl } = await import("./flywheel-merge-order-PW8nIENP.js");
56020
56058
  return jsonResponse(await Effect.runPromise(computeMergeQueue(status.activePipeline, process.cwd(), { getPrUrl: resolveMergeQueuePrUrl }).pipe(Effect.provide(layer))));
56021
56059
  });
56022
56060
  })));
@@ -56030,18 +56068,18 @@ function uatGenerationNameFromParam(param) {
56030
56068
  return decoded.startsWith("uat/") ? decoded : `uat/${decoded}`;
56031
56069
  }
56032
56070
  const getUatGenerationsRoute = HttpRouter.add("GET", "/api/flywheel/uat-generations", httpHandler(Effect.gen(function* () {
56033
- const { getUatGenerationsPayload } = yield* Effect.promise(() => import("./uat-train-BfTMZmcU.js"));
56071
+ const { getUatGenerationsPayload } = yield* Effect.promise(() => import("./uat-train-CwAd0sZ1.js"));
56034
56072
  return jsonResponse(yield* Effect.promise(() => getUatGenerationsPayload()));
56035
56073
  })));
56036
56074
  const getUatCandidateRoute = HttpRouter.add("GET", "/api/flywheel/uat-candidate", httpHandler(Effect.gen(function* () {
56037
- const { getUatCandidatePayload } = yield* Effect.promise(() => import("./uat-train-BfTMZmcU.js"));
56075
+ const { getUatCandidatePayload } = yield* Effect.promise(() => import("./uat-train-CwAd0sZ1.js"));
56038
56076
  return jsonResponse(yield* Effect.promise(() => getUatCandidatePayload()));
56039
56077
  })));
56040
56078
  const postUatGenerationStackRoute = HttpRouter.add("POST", "/api/flywheel/uat-generations/:name/stack", httpHandler(Effect.gen(function* () {
56041
56079
  const authError = rejectUnsafeDashboardMutationRequest(yield* HttpServerRequest.HttpServerRequest);
56042
56080
  if (authError) return authError;
56043
56081
  const name = uatGenerationNameFromParam((yield* HttpRouter.params)["name"] ?? "");
56044
- const { postUatGenerationStackPayload } = yield* Effect.promise(() => import("./uat-train-BfTMZmcU.js"));
56082
+ const { postUatGenerationStackPayload } = yield* Effect.promise(() => import("./uat-train-CwAd0sZ1.js"));
56045
56083
  const result = yield* Effect.promise(() => postUatGenerationStackPayload(name));
56046
56084
  if (!result.ok) return jsonResponse({ error: result.error }, { status: result.status });
56047
56085
  return jsonResponse({
@@ -56053,8 +56091,8 @@ const postUatGenerationPromoteRoute = HttpRouter.add("POST", "/api/flywheel/uat-
56053
56091
  const authError = rejectUnsafeDashboardMutationRequest(yield* HttpServerRequest.HttpServerRequest);
56054
56092
  if (authError) return authError;
56055
56093
  const name = uatGenerationNameFromParam((yield* HttpRouter.params)["name"] ?? "");
56056
- const { postUatGenerationPromotePayload } = yield* Effect.promise(() => import("./uat-train-BfTMZmcU.js"));
56057
- const { firePostMergeLifecycle } = yield* Effect.promise(() => import("./specialists-BAT59U9k.js"));
56094
+ const { postUatGenerationPromotePayload } = yield* Effect.promise(() => import("./uat-train-CwAd0sZ1.js"));
56095
+ const { firePostMergeLifecycle } = yield* Effect.promise(() => import("./specialists-uq-O3uxF.js"));
56058
56096
  const result = yield* Effect.promise(() => postUatGenerationPromotePayload(name, firePostMergeLifecycle));
56059
56097
  if (!result.success) return jsonResponse(result, { status: result.reason === "not-found" ? 404 : result.reason === "merge-failed" ? 500 : 409 });
56060
56098
  return jsonResponse(result);
@@ -56067,7 +56105,7 @@ const postUatGenerationPromoteRoute = HttpRouter.add("POST", "/api/flywheel/uat-
56067
56105
  const postFlywheelAssembleUatRoute = HttpRouter.add("POST", "/api/flywheel/assemble-uat", httpHandler(Effect.gen(function* () {
56068
56106
  const authError = rejectUnsafeDashboardMutationRequest(yield* HttpServerRequest.HttpServerRequest);
56069
56107
  if (authError) return authError;
56070
- const { runUatTrainReconcile } = yield* Effect.promise(() => import("./uat-train-BfTMZmcU.js"));
56108
+ const { runUatTrainReconcile } = yield* Effect.promise(() => import("./uat-train-CwAd0sZ1.js"));
56071
56109
  return jsonResponse(yield* Effect.promise(() => runUatTrainReconcile({ force: true })));
56072
56110
  })));
56073
56111
  const getFlywheelStateRoute = HttpRouter.add("GET", "/api/flywheel/state", httpHandler(Effect.gen(function* () {
@@ -58805,6 +58843,7 @@ init_config_yaml();
58805
58843
  init_review_status();
58806
58844
  init_activity_logger();
58807
58845
  init_tier_supervisor();
58846
+ init_tier_table();
58808
58847
  function parseCalloutBody(body) {
58809
58848
  if (!body || typeof body !== "object") return void 0;
58810
58849
  const record = body;
@@ -59582,7 +59621,7 @@ async function pollOnce(state) {
59582
59621
  try {
59583
59622
  const remoteState = await readFile(join$1(homedir$1(), ".overdeck", "agents", agentId, "remote-state.json"), "utf-8").then((text) => JSON.parse(text)).catch(() => null);
59584
59623
  if (remoteState?.location === "remote" && remoteState?.vmName) {
59585
- const { getRemoteAgentOutput } = await import("./remote-agents-BT_DHl8s.js");
59624
+ const { getRemoteAgentOutput } = await import("./remote-agents-tBpE_KXg.js");
59586
59625
  stdout = await getRemoteAgentOutput(agentId, remoteState.vmName, 50);
59587
59626
  } else stdout = await Effect.runPromise(capturePane(agentId, 50));
59588
59627
  } catch {
@@ -60765,7 +60804,7 @@ const RESTART_MARKER = join(homedir(), ".overdeck", "dashboard-restarting.json")
60765
60804
  * loads new content-hashed chunk filenames (no ERR_MODULE_NOT_FOUND after rebuild).
60766
60805
  */
60767
60806
  async function defaultLifecycleRunner(pending) {
60768
- const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-BmLQPYGq.js");
60807
+ const { postMergeLifecycle, notifyTldrDaemon } = await import("./merge-agent-CvVDCFOp.js");
60769
60808
  await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
60770
60809
  if (pending.sourceBranch) await notifyTldrDaemon(pending.projectPath, pending.sourceBranch);
60771
60810
  }
@@ -61086,7 +61125,7 @@ function failureReason(result) {
61086
61125
  return result.error ?? result.message ?? `merge returned status ${result.statusCode ?? "unknown"}`;
61087
61126
  }
61088
61127
  async function defaultMergeIssue(issueId) {
61089
- const { triggerMerge } = await import("./merge-ops-BZz86Atd.js");
61128
+ const { triggerMerge } = await import("./merge-ops-iaG5kd-C.js");
61090
61129
  return triggerMerge(issueId);
61091
61130
  }
61092
61131
  function defaultAnnounceFailure(issueId, reason) {
@@ -61683,7 +61722,7 @@ reconcileStaleGitHubBlockers().then((n) => {
61683
61722
  }
61684
61723
  }).catch((err) => console.warn(`[overdeck] Startup blocker reconciliation failed: ${err.message}`));
61685
61724
  try {
61686
- const { resetProcessingToQueued } = await import("./merge-sync-C_in5zj_.js");
61725
+ const { resetProcessingToQueued } = await import("./merge-sync-Dz7-euH2.js");
61687
61726
  const resetCount = resetProcessingToQueued();
61688
61727
  if (resetCount > 0) {
61689
61728
  console.log(`[overdeck] Reset ${resetCount} stuck merge queue entries to queued`);