zidane 7.0.29 → 7.0.31

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/acp-cli.js +3 -3
  2. package/dist/{acp-DcJRNtIr.js → acp-m3TLCY_C.js} +2 -2
  3. package/dist/{acp-DcJRNtIr.js.map → acp-m3TLCY_C.js.map} +1 -1
  4. package/dist/acp.d.ts +1 -1
  5. package/dist/acp.js +1 -1
  6. package/dist/{agent-DSej5JPY.js → agent-9gf8ZlBR.js} +73 -16
  7. package/dist/agent-9gf8ZlBR.js.map +1 -0
  8. package/dist/agent.d.ts +1 -1
  9. package/dist/agent.js +1 -1
  10. package/dist/{approvals-BOr8_M0D.js → approvals-DaCEPCTV.js} +367 -10
  11. package/dist/approvals-DaCEPCTV.js.map +1 -0
  12. package/dist/{auth-DaBtlC8B.js → auth-CJogE9q7.js} +2 -2
  13. package/dist/{auth-DaBtlC8B.js.map → auth-CJogE9q7.js.map} +1 -1
  14. package/dist/chat/pure.d.ts +3 -3
  15. package/dist/chat.d.ts +6 -6
  16. package/dist/chat.js +5 -5
  17. package/dist/{context-transport-BqYwzJYE.js → context-transport-T_6AYIvy.js} +2 -2
  18. package/dist/{context-transport-BqYwzJYE.js.map → context-transport-T_6AYIvy.js.map} +1 -1
  19. package/dist/contexts/daytona.d.ts +1 -1
  20. package/dist/contexts/e2b.d.ts +1 -1
  21. package/dist/daemon-cli.js +1 -1
  22. package/dist/eval.d.ts +1 -1
  23. package/dist/extensions.d.ts +2 -2
  24. package/dist/extensions.js +2 -2
  25. package/dist/headless.d.ts +1 -1
  26. package/dist/headless.js +1 -1
  27. package/dist/{index-Co4Fddtj.d.ts → index-JkEO3MBV.d.ts} +191 -6
  28. package/dist/index-JkEO3MBV.d.ts.map +1 -0
  29. package/dist/{index-C0y2tSgk.d.ts → index-hd4zLhp8.d.ts} +52 -2
  30. package/dist/index-hd4zLhp8.d.ts.map +1 -0
  31. package/dist/index.d.ts +2 -2
  32. package/dist/index.js +3 -3
  33. package/dist/{ipc-Dmq3B7H6.js → ipc-BtN5SIc0.js} +2 -2
  34. package/dist/{ipc-Dmq3B7H6.js.map → ipc-BtN5SIc0.js.map} +1 -1
  35. package/dist/ipc.d.ts +17 -12
  36. package/dist/ipc.d.ts.map +1 -1
  37. package/dist/ipc.js +3 -3
  38. package/dist/{mcp-BIWa57eY.js → mcp-CgNd-f3F.js} +3 -3
  39. package/dist/{mcp-BIWa57eY.js.map → mcp-CgNd-f3F.js.map} +1 -1
  40. package/dist/mcp.d.ts +1 -1
  41. package/dist/mcp.js +1 -1
  42. package/dist/output/stream-json.d.ts +1 -1
  43. package/dist/output/terminal.d.ts +1 -1
  44. package/dist/plugins.d.ts +1 -1
  45. package/dist/presets.d.ts +1 -1
  46. package/dist/presets.js +1 -1
  47. package/dist/providers/anthropic.d.ts +1 -1
  48. package/dist/providers/arcee.d.ts +1 -1
  49. package/dist/providers/baseten.d.ts +1 -1
  50. package/dist/providers/cerebras.d.ts +1 -1
  51. package/dist/providers/local.d.ts +1 -1
  52. package/dist/providers/openai-compat.d.ts +1 -1
  53. package/dist/providers/openai.d.ts +1 -1
  54. package/dist/providers/openrouter.d.ts +1 -1
  55. package/dist/providers/xai.d.ts +1 -1
  56. package/dist/providers.d.ts +1 -1
  57. package/dist/restate.d.ts +1 -1
  58. package/dist/restate.js +1 -1
  59. package/dist/{server-DM3yjH5O.js → server-ktOMu5gk.js} +18 -23
  60. package/dist/server-ktOMu5gk.js.map +1 -0
  61. package/dist/session/sqlite.d.ts +1 -1
  62. package/dist/session.d.ts +1 -1
  63. package/dist/skills.d.ts +1 -1
  64. package/dist/{src-DzzhE2YO.js → src-CjkY6fBj.js} +2 -2
  65. package/dist/{src-DzzhE2YO.js.map → src-CjkY6fBj.js.map} +1 -1
  66. package/dist/{stdio-loader-CI4sPFve.js → stdio-loader-Bbx19dMZ.js} +2 -2
  67. package/dist/{stdio-loader-CI4sPFve.js.map → stdio-loader-Bbx19dMZ.js.map} +1 -1
  68. package/dist/{tool-formatters-bbgUM3zI.d.ts → tool-formatters-C4QIFCNa.d.ts} +2 -2
  69. package/dist/{tool-formatters-bbgUM3zI.d.ts.map → tool-formatters-C4QIFCNa.d.ts.map} +1 -1
  70. package/dist/tools/fetch-url.d.ts +1 -1
  71. package/dist/tools/web-search.d.ts +1 -1
  72. package/dist/tools.d.ts +1 -1
  73. package/dist/tools.js +1 -1
  74. package/dist/{transcript-anchors-BHyrChoO.d.ts → transcript-anchors-Bbn1HX5D.d.ts} +8 -2
  75. package/dist/{transcript-anchors-BHyrChoO.d.ts.map → transcript-anchors-Bbn1HX5D.d.ts.map} +1 -1
  76. package/dist/tui.d.ts +3 -3
  77. package/dist/tui.d.ts.map +1 -1
  78. package/dist/tui.js +196 -87
  79. package/dist/tui.js.map +1 -1
  80. package/dist/{turn-operations-ZP5-2OWi.d.ts → turn-operations-BhHCpCkP.d.ts} +3 -3
  81. package/dist/{turn-operations-ZP5-2OWi.d.ts.map → turn-operations-BhHCpCkP.d.ts.map} +1 -1
  82. package/dist/types.d.ts +2 -2
  83. package/docs/TUI.md +5 -3
  84. package/package.json +1 -1
  85. package/dist/agent-DSej5JPY.js.map +0 -1
  86. package/dist/approvals-BOr8_M0D.js.map +0 -1
  87. package/dist/index-C0y2tSgk.d.ts.map +0 -1
  88. package/dist/index-Co4Fddtj.d.ts.map +0 -1
  89. package/dist/server-DM3yjH5O.js.map +0 -1
package/dist/tui.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { C as estimateRebilledCostUsd } from "./openai-compat-Dy56weK8.js";
2
+ import { n as THINKING_LEVELS } from "./types-CWgENVLY.js";
2
3
  import { t as buildContextSegments } from "./context-segments-BrEsRhA0.js";
3
- import { $ as installExtensionFromSpec, A as selectFilesFromSession, C as resolveLegacySessionDir, Cn as createDebugLog, D as resolveTasksDir, Dn as coerceExtensionConfigInput, Dt as isSpawnTool, E as resolveSessionDir, Fn as createExtensionBus, Ft as tailTruncate, G as summaryToTurn, Gn as renderArtifactRow, Jt as artifacts_default, Lt as looksBinary, M as compactConversation, Mn as sanitizeExtensionConfigActionPatch, O as buildPostCompactAttachments, Rn as artifactKindLabel, S as resolveLegacyPersistDir, Sn as scanExtensionDirectories, T as resolvePersistDir, Wn as refreshArtifact, X as createExtensionPromptBridge, Xn as effectiveContextWindow, Yn as OUTPUT_RESERVE_TOKENS, Z as ExtensionInstallError, an as matchesBinding, at as createExtensionHud, dt as filterExtensionRegistry, en as KEYBINDING_KEY_COL_WIDTH, f as applyCompactSummaryCutoff, ft as filterRegistryPlugins, gt as createExtensionHostRuntimeBridge, hn as registerExtensionHostModules, in as keybindingsPath, it as updateInstalledExtension, jn as resolveExtensionConfigValue, lt as composeExtensionPreset, mt as partitionExtensionCatalog, nn as formatBindingForDisplay, ot as discoverAndBuildExtensionRegistry, rn as groupBindings, rt as removeInstalledExtension, t as createAgent, tn as ensureKeybindingsFile, un as resolveExtensionKeybindings, ut as disposeExtensionRegistry, v as cleanupPersistedSession, vt as composePresets, w as resolveMcpWarningsDir, wn as setDebugLogSink, x as rehomePersistedStubs, xn as parseExtensionScanPathEnv, xt as basic_default, yn as inlineLoadedExtension, zt as createModelSearchTool } from "./agent-DSej5JPY.js";
4
- import { D as shouldAutoGenerateTitle, E as generateSessionTitle, F as parseCommandInvocation, M as commandBlocksToContent, P as executeCommand, S as resolveInlineSuggestion, a as loginMcpServer, b as createPathAutocompleteProvider, c as SKILL_EDIT_METADATA_KEY, g as readSkillEditMarker, h as extensionScaffold, j as commandBlockToEvent, l as ZIDANE_EXTENSION_SKILL_NAME, m as extensionDirForCwd, p as editSessionMetadata, u as ZIDANE_SKILL_EDIT_SKILL_NAME, v as withZidaneExtensionSkill, w as generateStructuredData, x as patchInlineGhost, y as withZidaneSkillEditSkill } from "./src-DzzhE2YO.js";
4
+ import { $ as installExtensionFromSpec, A as selectFilesFromSession, C as resolveLegacySessionDir, Cn as createDebugLog, D as resolveTasksDir, Dn as coerceExtensionConfigInput, Dt as isSpawnTool, E as resolveSessionDir, Fn as createExtensionBus, Ft as tailTruncate, G as summaryToTurn, Gn as refreshArtifact, Jt as artifacts_default, Kn as renderArtifactRow, Lt as looksBinary, M as compactConversation, Mn as sanitizeExtensionConfigActionPatch, O as buildPostCompactAttachments, Rn as artifactKindLabel, S as resolveLegacyPersistDir, Sn as scanExtensionDirectories, T as resolvePersistDir, X as createExtensionPromptBridge, Xn as OUTPUT_RESERVE_TOKENS, Z as ExtensionInstallError, Zn as effectiveContextWindow, an as matchesBinding, at as createExtensionHud, dt as filterExtensionRegistry, en as KEYBINDING_KEY_COL_WIDTH, f as applyCompactSummaryCutoff, ft as filterRegistryPlugins, gt as createExtensionHostRuntimeBridge, hn as registerExtensionHostModules, in as keybindingsPath, it as updateInstalledExtension, jn as resolveExtensionConfigValue, lt as composeExtensionPreset, mt as partitionExtensionCatalog, nn as formatBindingForDisplay, ot as discoverAndBuildExtensionRegistry, rn as groupBindings, rt as removeInstalledExtension, t as createAgent, tn as ensureKeybindingsFile, un as resolveExtensionKeybindings, ut as disposeExtensionRegistry, v as cleanupPersistedSession, vt as composePresets, w as resolveMcpWarningsDir, wn as setDebugLogSink, x as rehomePersistedStubs, xn as parseExtensionScanPathEnv, xt as basic_default, yn as inlineLoadedExtension, zt as createModelSearchTool } from "./agent-9gf8ZlBR.js";
5
+ import { D as shouldAutoGenerateTitle, E as generateSessionTitle, F as parseCommandInvocation, M as commandBlocksToContent, P as executeCommand, S as resolveInlineSuggestion, a as loginMcpServer, b as createPathAutocompleteProvider, c as SKILL_EDIT_METADATA_KEY, g as readSkillEditMarker, h as extensionScaffold, j as commandBlockToEvent, l as ZIDANE_EXTENSION_SKILL_NAME, m as extensionDirForCwd, p as editSessionMetadata, u as ZIDANE_SKILL_EDIT_SKILL_NAME, v as withZidaneExtensionSkill, w as generateStructuredData, x as patchInlineGhost, y as withZidaneSkillEditSkill } from "./src-CjkY6fBj.js";
5
6
  import { a as formatDuration, c as previewLine, i as fmtTokens, l as shortId, n as compactPath, o as formatTaskStatus, r as fmtCost, s as formatTaskSummary, t as ageString } from "./format-BF745pLL.js";
6
7
  import { n as appendCapped } from "./output-cap-C9zukcCj.js";
7
8
  import { i as killProcessGroup, n as SUPPORTS_PROCESS_GROUPS, r as createProcessContext } from "./contexts-BSFQVclW.js";
@@ -10,7 +11,7 @@ import { E as buildCatalog, R as findGitRoot, c as SkillInstallError, l as insta
10
11
  import { i as nextLogLevel, n as filterLogRecords, r as formatLogLine } from "./logs-view-CWG8aUAG.js";
11
12
  import { a as createRingBufferSink, c as logFileTimestamp, i as createLoggingHooks, n as createFileSink, o as fanoutSink, r as createLogger } from "./logger--C1VQjwJ.js";
12
13
  import { i as sniffImageMediaType } from "./media-sniff-UKijEaiQ.js";
13
- import { _ as hasAuthorizationHeader, h as McpOAuthProvider, n as connectMcpServers, s as nonOwningMcpView } from "./mcp-BIWa57eY.js";
14
+ import { _ as hasAuthorizationHeader, h as McpOAuthProvider, n as connectMcpServers, s as nonOwningMcpView } from "./mcp-CgNd-f3F.js";
14
15
  import { replaceDynamicSection, splitSystemPrompt } from "./prompt.js";
15
16
  import { a as getExtensionSessionState, c as setExtensionSessionState, i as demoteStaleRunningStatus, o as loadSession, t as createSession } from "./session-CVy-2mAy.js";
16
17
  import { t as effectiveInputFromTurn } from "./stats-DAKBEKjc.js";
@@ -20,9 +21,9 @@ import { s as resolveCompletionSubmit } from "./completion-core-BRo86R_L.js";
20
21
  import { n as JsonRpcRemoteError, t as JsonRpcConnectionClosedError } from "./json-rpc-rSWMUh9b.js";
21
22
  import { $ as reorderKeyed, $t as formatTokenCount, A as chunkMarkdownForRender, B as streamingLabel, C as usageTone, Ct as retagUserPromptEvents, Dt as streamEventSearchText, E as filterModelCatalog, Et as selectionAfterTurnRemoval, F as stripHtmlCommentsOutsideCode, G as chainPositionOf, Gt as shortSessionId, H as DAEMON_HEALTH_STYLE, Ht as sessionEventExcerpt, I as cacheBreakChip, It as isMainSession, J as filterChainFallbacks, Jt as fitRunReceiptCells, K as chainsEqual, Kt as truncateTitle, L as compactingLabel, M as codeTokenHasClosingFence, Mt as SESSION_EVENT_STATUS_STYLE, N as normalizeMarkdownCodeFences, O as parseCustomModelQuery, Ot as turnSelectionOwnership, P as splitMarkdownCodeBlocks, Q as providerKeySetChanged, Qt as formatRunReceiptLine, R as liveSessionCost, S as resetLabel, Sn as summarizeOutcomes, T as buildModelCatalog, Tn as createChatsCompletionProvider, Tt as selectableTurnIds, U as buildRunModel, Vt as sessionDirLabel, Wt as sessionEventMeta, Y as pickChainPrimary, Yt as formatCostUsd, Zt as formatRunReceiptCells, _ as turnContextSize, _n as mergeApprovalAndBodyOutcomes, _t as isTurnHighlighted, a as TOOL_DISPLAY, an as buildUnifiedDiff, at as createSkillsCompletionProvider, b as formatUsagePercent, bn as rewriteMultiEditHeader, bt as isVisibleDuringSearch, ct as createFilesCompletionProvider, d as finalizeStreamingMarkdown, dn as previewEditPayload, dt as createCommandsCompletionProvider, et as restoreChainFallbacks, f as finalizeStreamingMarkdownForOwner, ft as blendHsl, g as revealEarlierTranscriptEvents, gt as isEditErrorResult, h as replaceTranscriptTurnEvents, hn as buildEditOutcomesAnnotation, ht as EDIT_TOOL_NAMES, i as turnAsText, in as buildContextualDiff, j as closeDanglingCodeFence, ln as extractEditPayload, mt as BASH_CALL_ID_PREFIX, n as deleteTurnSafely, nn as runReceiptFromRun, nt as toggleChainEntry, o as displayNameFor, on as clipDiffForRender, ot as uniqueSkillNamesFromReferences, p as hiddenEarlierTranscriptCount, pn as summarizeEditPayload, pt as buildLinearRamp, r as truncateTurnsAt, s as formatToolCall, tn as hasRunReceipt, u as capTranscriptEvents, un as filetypeFromPath, v as formatBalance, vn as parseEditOutcomesFromResult, vt as isUserBashEvent, w as splitPromptSegments, wt as retagUserPromptEventsFromRefs, x as mostConstrainedWindow, xn as stripEditOutcomesAnnotation, xt as promptHistoryFromEvents, yn as resolveApprovalForPayload, yt as isVisible } from "./turn-operations-BgqpLlOG.js";
22
23
  import { a as searchHighlightRanges, c as searchSessionHistoryIndexAsync, i as highlightSegments, n as buildSessionSearchIndexAsync, r as filterSessionSearchCatalog, u as searchSessionIndexAsync } from "./history-search-C4bk1Wz_.js";
23
- import { $ as supportsOAuth, A as useSafeModeQueue, An as quoteForShell, At as makeRequestInteraction, Bn as createArtifactsCompletionProvider, Ci as stripSpawnTokensLine, Ct as InteractionsProvider, Di as toolResultText, Dt as createInteractionTools, Ei as toolCallPreview, Et as createAutomaticInteractionResponse, Fn as ConfigProvider, Fr as TODO_STATUS_GLYPHS, G as usageChecksOptedOut, Gn as importFromClaudeCode, Gr as selectActiveTodos, Gt as createMainSession, H as fetchAllProviderUsage, Hn as useCompletion, Hr as pickActiveRunId, In as useConfig, J as fetchOAuthRedirect, Jn as upsertMcpServer, Jr as useActiveTodos, Jt as runEndNotice, Kn as mcpsWritePath, Kr as setTodosForRun, Ln as resolveConfig, Lr as applyTodosSnapshot, M as addToSafelist, Mn as DiscoveryProvider, N as getSafelist, Nn as useDiscovery, Nt as useInteractionsActions, O as SafeModeProvider, Oi as updateToolEventOutcomes, Or as accentColor, P as isOnSafelist, Pn as useDiscoveryOptional, Pt as useInteractionsQueue, Q as runOAuthLogin, Qn as discoverProjectMcps, Qt as attachMcpWarnLog, R as suggestSafelistEntries, Rn as resolveStoragePaths, Rt as installProviderDiagnosticHook, Si as serverToolResultSummary, St as HOST_INTERACTION_ID_PREFIX, Tt as buildResumedToolResultsTurn, U as fetchProviderUsage, Un as countClaudeSessionFiles, Ur as pruneTodosByRun, V as clearProviderUsageCache, W as providerUsageSupported, Wn as hasClaudeCodeSetup, Wt as createBuiltinCommands, X as redirectUriFromAuthUrl, Xn as dedupMcpServersByName, Xt as discoverProjectPlugins, Yn as buildMcpServers, Yt as buildPluginContributions, Z as oauthUsesManualCodePaste, Zt as parsePluginScanPathEnv, _ as buildSpawnEndEvent, _i as listSessionMeta, _n as useSettings, _r as chatAutoCompactBehavior, _t as useMcpAuthState, ai as buildBuildSystem, an as buildHints, ar as useUpdateCheck, at as subscribeMcpToolsCache, b as defaultSkillScanPaths, bi as noticeTurnContent, bn as resolveChipColor, br as discoverAgentsMd, bt as ASK_USER_TOOL, c as useSelectStyle, ci as chatReferenceTokensForPrompt, cn as useEnabledToggleSet, d as useTheme, di as compactSummaryEvent, dn as SETTINGS_CHOICES, dt as parentServerName, er as tryOpenBrowser, f as discoverSystemMd, fn as SETTINGS_INPUTS, ft as createFileMcpCredentialStore, g as useStreamBuffer, gi as lastContextSizeFromTurns, gt as useMcpAuthDispatch, h as userSystemMdPath, hi as getSessionMeta, hn as clampFps, ht as McpAuthProvider, in as truncateTrailing, ir as buildUpdateHint, jn as createDiscoverySlot, jt as pendingInteractionsFromTurns, k as useSafeModeActions, ki as usageByModel, kn as parseEditorCommand, kt as isModelInteraction, l as useSurfaces, li as createChatTurnsReadTool, ln as DEFAULT_SETTINGS, lt as buildVisibleMcpRows, m as userScopeOverridesLoad, mi as eventsFromTurns, mn as SettingsProvider, nn as clipHintsToWidth, nt as mcpToolsCachePath, o as ThemeProvider, oi as buildPlanSystem, p as renderSystemMdSeed, pi as deriveSessionTitle, pn as SETTINGS_TOGGLES, q as formatPathForCwd, qn as removeMcpServer, qr as todoProgressLabel, r as computeTurnAnchors, rn as hintsLength, rr as bootTick, rt as refreshMcpToolsCatalog, s as useColors, si as envSection, sn as listProjectFiles, st as useMcpToolToggleMap, tn as EMPTY_HINTS, tr as tryRevealPath, tt as loadMcpToolsCache, un as SETTINGS_CATEGORIES, ut as indexOfServerRow, v as buildSpawnStartEvent, vi as loadState, vr as groupArtifacts, vt as getMcpAuthStatus, w as writeSessionExport, wi as sumRunCosts, wt as PRESENT_PLAN_TOOL, x as discoverProjectSkills, xn as resolveTheme, y as buildSkillsConfig, yi as marginTopFor } from "./approvals-BOr8_M0D.js";
24
- import { E as renderDefaultCallbackPage, T as restoreModelOptions, b as modelSupportsReasoning, c as setPreferredCredential, g as getContextWindow, h as enabledModelOptions, l as setProviderCredential, n as applyApiKeyEnv, t as detectAuth, w as piIdOf, y as modelOptionsFor } from "./auth-DaBtlC8B.js";
25
- import { a as connectIpcClient, d as defaultSocketPath, f as ensureDaemonRunning, m as selfDaemonSpawnCommand, o as connectOrSpawnDaemon } from "./server-DM3yjH5O.js";
24
+ import { $ as supportsOAuth, $r as pruneTodosByRun, A as useSafeModeQueue, Ai as noticeTurnContent, An as quoteForShell, Ar as discoverAgentsMd, At as makeRequestInteraction, Bn as createArtifactsCompletionProvider, Ci as deriveSessionTitle, Ct as InteractionsProvider, Di as listSessionMeta, Dr as chatAutoCompactBehavior, Dt as createInteractionTools, Ei as lastContextSizeFromTurns, Et as createAutomaticInteractionResponse, Fn as ConfigProvider, G as usageChecksOptedOut, Gn as importFromClaudeCode, Gr as TODO_STATUS_GLYPHS, Gt as createMainSession, H as fetchAllProviderUsage, Hn as useCompletion, Ii as toolCallPreview, In as useConfig, J as fetchOAuthRedirect, Jn as upsertMcpServer, Jt as runEndNotice, Kn as mcpsWritePath, Kt as modelChainMetadata, Li as toolResultText, Ln as resolveConfig, M as addToSafelist, Mi as serverToolResultSummary, Mn as DiscoveryProvider, N as getSafelist, Ni as stripSpawnTokensLine, Nn as useDiscovery, Nt as useInteractionsActions, O as SafeModeProvider, Oi as loadState, Or as groupArtifacts, P as isOnSafelist, Pi as sumRunCosts, Pn as useDiscoveryOptional, Pt as useInteractionsQueue, Q as runOAuthLogin, Qn as discoverProjectMcps, Qr as pickActiveRunId, Qt as attachMcpWarnLog, R as suggestSafelistEntries, Ri as updateToolEventOutcomes, Rn as resolveStoragePaths, Rr as accentColor, Rt as installProviderDiagnosticHook, St as HOST_INTERACTION_ID_PREFIX, Ti as getSessionMeta, Tt as buildResumedToolResultsTurn, U as fetchProviderUsage, Un as countClaudeSessionFiles, V as clearProviderUsageCache, W as providerUsageSupported, Wn as hasClaudeCodeSetup, Wt as createBuiltinCommands, X as redirectUriFromAuthUrl, Xn as dedupMcpServersByName, Xt as discoverProjectPlugins, Yn as buildMcpServers, Yt as buildPluginContributions, Z as oauthUsesManualCodePaste, Zt as parsePluginScanPathEnv, _ as buildSpawnEndEvent, _i as envSection, _n as useSettings, _t as useMcpAuthState, an as buildHints, ar as buildRestartHint, at as subscribeMcpToolsCache, b as defaultSkillScanPaths, bn as resolveChipColor, bt as ASK_USER_TOOL, c as useSelectStyle, cn as useEnabledToggleSet, d as useTheme, dn as SETTINGS_CHOICES, dt as parentServerName, er as tryOpenBrowser, f as discoverSystemMd, fn as SETTINGS_INPUTS, ft as createFileMcpCredentialStore, g as useStreamBuffer, gi as buildPlanSystem, gt as useMcpAuthDispatch, h as userSystemMdPath, hi as buildBuildSystem, hn as clampFps, ht as McpAuthProvider, ii as useActiveTodos, in as truncateTrailing, jn as createDiscoverySlot, jt as pendingInteractionsFromTurns, k as useSafeModeActions, ki as marginTopFor, kn as parseEditorCommand, kt as isModelInteraction, l as useSurfaces, ln as DEFAULT_SETTINGS, lt as buildVisibleMcpRows, m as userScopeOverridesLoad, mn as SettingsProvider, mr as useRestartRequired, ni as setTodosForRun, nn as clipHintsToWidth, nt as mcpToolsCachePath, o as ThemeProvider, or as buildUpdateHint, p as renderSystemMdSeed, pn as SETTINGS_TOGGLES, q as formatPathForCwd, qn as removeMcpServer, qr as applyTodosSnapshot, r as computeTurnAnchors, ri as todoProgressLabel, rn as hintsLength, rr as bootTick, rt as refreshMcpToolsCatalog, s as useColors, sn as listProjectFiles, sr as useUpdateCheck, st as useMcpToolToggleMap, ti as selectActiveTodos, tn as EMPTY_HINTS, tr as tryRevealPath, tt as loadMcpToolsCache, un as SETTINGS_CATEGORIES, ut as indexOfServerRow, v as buildSpawnStartEvent, vi as chatReferenceTokensForPrompt, vt as getMcpAuthStatus, w as writeSessionExport, wi as eventsFromTurns, wt as PRESENT_PLAN_TOOL, x as discoverProjectSkills, xi as compactSummaryEvent, xn as resolveTheme, y as buildSkillsConfig, yi as createChatTurnsReadTool, zi as usageByModel } from "./approvals-DaCEPCTV.js";
25
+ import { E as renderDefaultCallbackPage, T as restoreModelOptions, b as modelSupportsReasoning, c as setPreferredCredential, g as getContextWindow, h as enabledModelOptions, l as setProviderCredential, n as applyApiKeyEnv, t as detectAuth, w as piIdOf, y as modelOptionsFor } from "./auth-CJogE9q7.js";
26
+ import { a as connectIpcClient, d as defaultSocketPath, f as ensureDaemonRunning, m as selfDaemonSpawnCommand, o as connectOrSpawnDaemon } from "./server-ktOMu5gk.js";
26
27
  import { createDockerContext } from "./contexts/docker.js";
27
28
  import { createTuiStore } from "./session/sqlite.js";
28
29
  import { _ as buildVisibleAuthRows, a as editTodo, b as parentProviderKey, c as NOTICE_GLYPH, f as validateMcpForm, g as instructionPreviewLines, h as instructionOriginBadge, i as cycleTodoStatus, l as MCP_TRANSPORTS, m as buildVisibleInstructionRows, n as buildTodoRetryMessage, r as clearTodos, s as removeTodo, t as addTodo, v as indexOfProviderRow, x as selectableSources } from "./todo-edits-Dw2oO2ON.js";
@@ -7638,6 +7639,86 @@ function OptionRow({ option, isEnabled, isFocused, highlightBg }) {
7638
7639
  });
7639
7640
  }
7640
7641
  //#endregion
7642
+ //#region src/tui/model-pick.ts
7643
+ /**
7644
+ * Change-detector key for the daemon push — covers EVERYTHING
7645
+ * `applyModel` sends (chain included), so a chain-only edit is a change and
7646
+ * a re-pick of the identical tuple is not.
7647
+ */
7648
+ function modelPickTuple(p) {
7649
+ return JSON.stringify([
7650
+ p.provider.key,
7651
+ p.model,
7652
+ (p.fallbacks ?? []).map((f) => [f.provider, f.model]),
7653
+ p.effort ?? null,
7654
+ p.modelOptions ?? null
7655
+ ]);
7656
+ }
7657
+ /** The wire shape of a pick for `DaemonSession.applyModel` / `sessions.setModel`. */
7658
+ function modelPickPayload(p) {
7659
+ return {
7660
+ providerKey: p.provider.key,
7661
+ modelId: p.model,
7662
+ fallbacks: (p.fallbacks ?? []).map((f) => ({
7663
+ providerKey: f.provider,
7664
+ modelId: f.model
7665
+ })),
7666
+ ...p.effort ? { effort: p.effort } : {},
7667
+ ...p.modelOptions && Object.keys(p.modelOptions).length > 0 ? { modelOptions: p.modelOptions } : {}
7668
+ };
7669
+ }
7670
+ /**
7671
+ * The session-metadata image of a pick — the same keys `ChatHost.setSessionModel`
7672
+ * writes, so a session stamped by the TUI reads back identically in the GUI
7673
+ * and the daemon. `undefined` values clear (per-model knobs never leak).
7674
+ */
7675
+ function sessionModelMetadata(p) {
7676
+ const payload = modelPickPayload(p);
7677
+ return {
7678
+ providerKey: payload.providerKey,
7679
+ modelId: payload.modelId,
7680
+ modelChain: modelChainMetadata(payload.providerKey, payload.modelId, payload.fallbacks),
7681
+ effort: payload.effort,
7682
+ modelOptions: payload.modelOptions
7683
+ };
7684
+ }
7685
+ /** Whether the session has a persisted model at all (regardless of whether THIS window can serve it). */
7686
+ function hasSessionModel(metadata) {
7687
+ return typeof metadata.providerKey === "string" && typeof metadata.modelId === "string";
7688
+ }
7689
+ /**
7690
+ * Rebuild a `Picked` from a session's persisted model metadata. `null`
7691
+ * when the session has no model (see `hasSessionModel`) OR names a provider
7692
+ * this window has no credentials/descriptor for — callers must tell the two
7693
+ * apart before seeding: only a model-less session may be seeded from the
7694
+ * window's pick; an unrepresentable one is left alone. Chain entries whose
7695
+ * provider isn't available here drop; effort applies only to models with a
7696
+ * reasoning knob (defaulting to `DEFAULT_EFFORT` when absent); options are
7697
+ * filtered to the ones the model declares.
7698
+ */
7699
+ function pickedFromSessionMetadata(metadata, availableProviders, providerRegistry) {
7700
+ const providerKey = metadata.providerKey;
7701
+ const modelId = metadata.modelId;
7702
+ if (typeof providerKey !== "string" || typeof modelId !== "string") return null;
7703
+ const auth = availableProviders.find((p) => p.key === providerKey);
7704
+ const descriptor = providerRegistry[providerKey];
7705
+ if (!auth || !descriptor) return null;
7706
+ const persistedEffort = typeof metadata.effort === "string" && THINKING_LEVELS.includes(metadata.effort) ? metadata.effort : void 0;
7707
+ const effort = modelSupportsReasoning(descriptor, modelId) ? persistedEffort ?? "medium" : void 0;
7708
+ const modelOptions = restoreModelOptions(descriptor, modelId, { [modelId]: enabledModelOptions(metadata.modelOptions) });
7709
+ const fallbacks = restoreChainFallbacks(metadata.modelChain, {
7710
+ provider: providerKey,
7711
+ model: modelId
7712
+ }, (k) => availableProviders.some((p) => p.key === k) && providerRegistry[k] !== void 0);
7713
+ return {
7714
+ provider: auth,
7715
+ model: modelId,
7716
+ ...fallbacks.length > 0 ? { fallbacks } : {},
7717
+ ...effort ? { effort } : {},
7718
+ ...modelOptions ? { modelOptions } : {}
7719
+ };
7720
+ }
7721
+ //#endregion
7641
7722
  //#region src/tui/model-picker.tsx
7642
7723
  /**
7643
7724
  * Cross-provider, searchable model picker.
@@ -8651,15 +8732,10 @@ async function connectDaemonSession(options) {
8651
8732
  await optional(() => client.request("sessions.setModel", {
8652
8733
  sessionId,
8653
8734
  providerKey: options.providerKey,
8654
- modelId: options.modelId
8655
- }));
8656
- if (options.effort !== void 0) await optional(() => client.request("sessions.setEffort", {
8657
- sessionId,
8658
- effort: options.effort
8659
- }));
8660
- if (options.modelOptions !== void 0) await optional(() => client.request("sessions.setModelOptions", {
8661
- sessionId,
8662
- options: options.modelOptions
8735
+ modelId: options.modelId,
8736
+ fallbacks: [...options.fallbacks],
8737
+ ...options.effort !== void 0 ? { effort: options.effort } : {},
8738
+ ...options.modelOptions !== void 0 ? { modelOptions: options.modelOptions } : {}
8663
8739
  }));
8664
8740
  },
8665
8741
  async setAgentId(agentId) {
@@ -22639,10 +22715,12 @@ function AppShell() {
22639
22715
  };
22640
22716
  }, [settings.useDaemon]);
22641
22717
  /**
22642
- * Model-pick → session-metadata cabling (daemon mode). Seeded at
22643
- * activation with the CURRENT pick so the push effect only fires on a
22644
- * genuine user change — pushing at mount would dispose a possibly-live
22645
- * daemon agent for nothing.
22718
+ * Model-pick → session-metadata cabling (both runtimes). Primed at
22719
+ * activation with the SESSION's pick (adopted or freshly stamped) so the
22720
+ * push effect only fires on a genuine user change — pushing at mount would
22721
+ * dispose a possibly-live daemon agent for nothing, and priming from the
22722
+ * window's pick instead of the session's is what let footer and execution
22723
+ * disagree.
22646
22724
  */
22647
22725
  const lastPushedModelRef = useRef(null);
22648
22726
  /**
@@ -22653,24 +22731,6 @@ function AppShell() {
22653
22731
  const activateSessionRef = useRef(async () => {});
22654
22732
  const activationGenerationRef = useRef(0);
22655
22733
  const connectionRef = useRef(new SessionConnection());
22656
- useEffect(() => {
22657
- const daemon = daemonRef.current;
22658
- if (!daemon || !picked) return;
22659
- const tuple = JSON.stringify([
22660
- picked.provider.key,
22661
- picked.model,
22662
- picked.effort ?? null,
22663
- picked.modelOptions ?? null
22664
- ]);
22665
- if (lastPushedModelRef.current === tuple) return;
22666
- lastPushedModelRef.current = tuple;
22667
- daemon.applyModel({
22668
- providerKey: picked.provider.key,
22669
- modelId: picked.model,
22670
- ...picked.effort ? { effort: picked.effort } : {},
22671
- ...picked.modelOptions ? { modelOptions: picked.modelOptions } : {}
22672
- });
22673
- }, [picked]);
22674
22734
  /** Remote search-query mirror for the PromptBlock input (seq-keyed apply). */
22675
22735
  const [remoteSearchQuery, setRemoteSearchQuery] = useState(null);
22676
22736
  const remoteSearchSeqRef = useRef(0);
@@ -22710,6 +22770,23 @@ function AppShell() {
22710
22770
  if (Object.keys(patch).length > 0) daemonRef.current?.publishSettings(patch);
22711
22771
  }, [settings]);
22712
22772
  const sessionRef = useRef(null);
22773
+ useEffect(() => {
22774
+ if (!picked || screen !== "chat") return;
22775
+ const tuple = modelPickTuple(picked);
22776
+ if (lastPushedModelRef.current === tuple) return;
22777
+ if (settingsRef.current.useDaemon && !isDaemonDisabledByEnv()) {
22778
+ const daemon = daemonRef.current;
22779
+ if (!daemon) return;
22780
+ lastPushedModelRef.current = tuple;
22781
+ daemon.applyModel(modelPickPayload(picked));
22782
+ return;
22783
+ }
22784
+ const session = sessionRef.current;
22785
+ if (!session) return;
22786
+ lastPushedModelRef.current = tuple;
22787
+ for (const [k, v] of Object.entries(sessionModelMetadata(picked))) session.setMeta(k, v);
22788
+ session.save().catch((err) => debugLog("model pick: session save failed", err));
22789
+ }, [picked, screen]);
22713
22790
  /**
22714
22791
  * Todo-change listeners, notified by BOTH runtimes.
22715
22792
  *
@@ -23269,6 +23346,18 @@ function AppShell() {
23269
23346
  ...opts ? { modelOptions: opts } : {}
23270
23347
  };
23271
23348
  }, [providerRegistry, initialState]);
23349
+ /**
23350
+ * Rebuild a `Picked` from a session's persisted model metadata — the
23351
+ * daemon's source of truth. This is what the footer must show in daemon
23352
+ * mode: the session's model, never this window's remembered pick.
23353
+ *
23354
+ * Resume-on-launch activates BEFORE the auth-detection effect has
23355
+ * populated `availableProviders`; an empty list would read every session
23356
+ * as "unrepresentable", so detect synchronously in that window.
23357
+ */
23358
+ const pickedFromSessionMetadata$1 = useCallback((metadata) => {
23359
+ return pickedFromSessionMetadata(metadata, availableProvidersRef.current.length > 0 ? availableProvidersRef.current : detectAuth(config.paths.userDir, providerRegistry).filter((p) => p.available), providerRegistry);
23360
+ }, [config.paths.userDir, providerRegistry]);
23272
23361
  const cancelRunOnDenial = useCallback((reason) => {
23273
23362
  denyAll();
23274
23363
  interactions.cancelAll(reason);
@@ -24681,25 +24770,23 @@ function AppShell() {
24681
24770
  await session.save();
24682
24771
  if (!attempt.isCurrent()) throw new Error("activation superseded");
24683
24772
  }
24684
- const activePick = pickedRef.current;
24773
+ let activePick = pickedRef.current;
24685
24774
  let seedModelViaRpc = false;
24686
- if (activePick) {
24687
- if (typeof session.metadata.providerKey !== "string") if (loaded) seedModelViaRpc = true;
24688
- else {
24689
- session.setMeta("providerKey", activePick.provider.key);
24690
- session.setMeta("modelId", activePick.model);
24691
- if (activePick.effort) session.setMeta("effort", activePick.effort);
24692
- if (activePick.modelOptions) session.setMeta("modelOptions", activePick.modelOptions);
24693
- await session.save();
24694
- if (!attempt.isCurrent()) throw new Error("activation superseded");
24695
- }
24696
- lastPushedModelRef.current = JSON.stringify([
24697
- activePick.provider.key,
24698
- activePick.model,
24699
- activePick.effort ?? null,
24700
- activePick.modelOptions ?? null
24701
- ]);
24702
- } else lastPushedModelRef.current = null;
24775
+ if (loaded) {
24776
+ const sessionPick = pickedFromSessionMetadata$1(session.metadata);
24777
+ if (sessionPick) {
24778
+ activePick = sessionPick;
24779
+ pickedRef.current = sessionPick;
24780
+ setPicked(sessionPick);
24781
+ if (sessionPick.effort && typeof session.metadata.effort !== "string") seedModelViaRpc = true;
24782
+ } else if (!hasSessionModel(session.metadata) && activePick) seedModelViaRpc = true;
24783
+ else activePick = null;
24784
+ } else if (activePick) {
24785
+ for (const [k, v] of Object.entries(sessionModelMetadata(activePick))) session.setMeta(k, v);
24786
+ await session.save();
24787
+ if (!attempt.isCurrent()) throw new Error("activation superseded");
24788
+ }
24789
+ lastPushedModelRef.current = activePick ? modelPickTuple(activePick) : null;
24703
24790
  if (!attempt.isCurrent()) throw new Error("activation superseded");
24704
24791
  const sessionId = session.id;
24705
24792
  const refreshHeaderFromStore = () => {
@@ -24720,29 +24807,13 @@ function AppShell() {
24720
24807
  const reflectRemoteModel = () => {
24721
24808
  store.load(sessionId).then((data) => {
24722
24809
  if (!attempt.isCurrent() || !data || sessionRef.current?.id !== sessionId) return;
24723
- const providerKey = data.metadata.providerKey;
24724
- const modelId = data.metadata.modelId;
24725
- if (typeof providerKey !== "string" || typeof modelId !== "string") return;
24726
- const auth = availableProvidersRef.current.find((p) => p.key === providerKey);
24727
- if (!auth) return;
24728
- const next = makePicked(auth, modelId);
24810
+ const next = pickedFromSessionMetadata$1(data.metadata);
24729
24811
  if (!next) return;
24730
- const effort = data.metadata.effort;
24731
- const modelOptions = data.metadata.modelOptions;
24732
- const merged = {
24733
- ...next,
24734
- ...typeof effort === "string" ? { effort } : {},
24735
- ...modelOptions && typeof modelOptions === "object" ? { modelOptions } : {}
24736
- };
24737
- const tuple = JSON.stringify([
24738
- merged.provider.key,
24739
- merged.model,
24740
- merged.effort ?? null,
24741
- merged.modelOptions ?? null
24742
- ]);
24812
+ const tuple = modelPickTuple(next);
24743
24813
  if (lastPushedModelRef.current === tuple) return;
24744
24814
  lastPushedModelRef.current = tuple;
24745
- setPicked(merged);
24815
+ pickedRef.current = next;
24816
+ setPicked(next);
24746
24817
  }).catch(() => void 0);
24747
24818
  };
24748
24819
  const reflectRemoteAgent = () => {
@@ -25000,12 +25071,7 @@ function AppShell() {
25000
25071
  daemonRef.current = controller;
25001
25072
  setDaemonConnected(true);
25002
25073
  if (stampedLegacyAgent) controller.setAgentId(pickedAgentRef.current.id);
25003
- if (seedModelViaRpc && activePick) controller.applyModel({
25004
- providerKey: activePick.provider.key,
25005
- modelId: activePick.model,
25006
- ...activePick.effort ? { effort: activePick.effort } : {},
25007
- ...activePick.modelOptions ? { modelOptions: activePick.modelOptions } : {}
25008
- });
25074
+ if (seedModelViaRpc && activePick) controller.applyModel(modelPickPayload(activePick));
25009
25075
  return controller;
25010
25076
  },
25011
25077
  ready: () => {},
@@ -25026,6 +25092,23 @@ function AppShell() {
25026
25092
  }
25027
25093
  });
25028
25094
  } else {
25095
+ const sessionPick = loaded ? pickedFromSessionMetadata$1(session.metadata) : null;
25096
+ let primed = pickedRef.current;
25097
+ if (sessionPick) {
25098
+ pickedRef.current = sessionPick;
25099
+ setPicked(sessionPick);
25100
+ key = sessionPick.provider.key;
25101
+ primed = sessionPick;
25102
+ for (const [k, v] of Object.entries(sessionModelMetadata(sessionPick))) session.setMeta(k, v);
25103
+ } else if (loaded && hasSessionModel(session.metadata)) primed = null;
25104
+ else if (pickedRef.current) {
25105
+ for (const [k, v] of Object.entries(sessionModelMetadata(pickedRef.current))) session.setMeta(k, v);
25106
+ if (!loaded) {
25107
+ await session.save();
25108
+ if (!activation.isCurrent()) return;
25109
+ }
25110
+ }
25111
+ lastPushedModelRef.current = primed ? modelPickTuple(primed) : null;
25029
25112
  agentRef.current = buildAgent(session, key);
25030
25113
  activation.localReady();
25031
25114
  }
@@ -25088,7 +25171,8 @@ function AppShell() {
25088
25171
  continueResumedInteractions,
25089
25172
  persistResumedInteractions,
25090
25173
  extensionRegistry,
25091
- defaultAgentProfile
25174
+ defaultAgentProfile,
25175
+ pickedFromSessionMetadata$1
25092
25176
  ]);
25093
25177
  /** Ref mirror — same rationale as `refreshSessionsRef` above. */
25094
25178
  activateSessionRef.current = activateSession;
@@ -25693,10 +25777,13 @@ function AppShell() {
25693
25777
  setActiveFallback(null);
25694
25778
  pickedRef.current = updated;
25695
25779
  modal.close();
25696
- if ((providerChanged || providerKeySetChanged(prevChain, [{
25780
+ if (daemonRef.current) return;
25781
+ if (!(providerChanged || providerKeySetChanged(prevChain, [{
25697
25782
  provider: primary.provider,
25698
25783
  model: primary.model
25699
- }, ...fallbacks])) && currentSession && !busy && !pendingApproval) await activateSession(currentSession.id, nextProvider.key);
25784
+ }, ...fallbacks])) || !currentSession) return;
25785
+ if (busy || pendingApproval) pendingAgentRebuildRef.current = true;
25786
+ else await rebuildActiveAgentRef.current?.();
25700
25787
  }, [
25701
25788
  availableProviders,
25702
25789
  providerRegistry,
@@ -25705,8 +25792,7 @@ function AppShell() {
25705
25792
  picked,
25706
25793
  currentSession,
25707
25794
  busy,
25708
- pendingApproval,
25709
- activateSession
25795
+ pendingApproval
25710
25796
  ]);
25711
25797
  /**
25712
25798
  * Open the cross-provider model picker for the COMPACTION model
@@ -28221,7 +28307,30 @@ function AppShell() {
28221
28307
  channel: autoUpdateConfig?.channel,
28222
28308
  cacheTtlMs: autoUpdateConfig?.cacheTtlMs
28223
28309
  });
28224
- const updateHint = useMemo(() => buildUpdateHint(updateStatus, { color: COLOR.accent }), [updateStatus, COLOR.accent]);
28310
+ const restartState = useRestartRequired({
28311
+ spec: autoUpdateConfig ? {
28312
+ packageName: autoUpdateConfig.packageName,
28313
+ ...autoUpdateConfig.binName ? { binName: autoUpdateConfig.binName } : {}
28314
+ } : null,
28315
+ currentVersion: autoUpdateConfig?.currentVersion ?? "",
28316
+ cacheDir,
28317
+ enabled: !!autoUpdateConfig
28318
+ });
28319
+ const announcedRestartRef = useRef(null);
28320
+ useEffect(() => {
28321
+ if (!restartState?.restartRequired || !restartState.installed) return;
28322
+ if (announcedRestartRef.current === restartState.installed) return;
28323
+ announcedRestartRef.current = restartState.installed;
28324
+ streamRef.current?.appendImmediate({
28325
+ kind: "info",
28326
+ text: `zidane v${restartState.installed} is installed — restart to update (running v${restartState.running}).`
28327
+ });
28328
+ }, [restartState]);
28329
+ const updateHint = useMemo(() => buildRestartHint(restartState, { color: COLOR.accent }) ?? buildUpdateHint(updateStatus, { color: COLOR.accent }), [
28330
+ restartState,
28331
+ updateStatus,
28332
+ COLOR.accent
28333
+ ]);
28225
28334
  const cacheBreakHint = useMemo(() => {
28226
28335
  if (!activeCacheBreak) return null;
28227
28336
  const chip = cacheBreakChip(activeCacheBreak);