zidane 7.0.28 → 7.0.30
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.
- package/dist/{acp-4jF6btaq.js → acp-Cu879kus.js} +4 -4
- package/dist/{acp-4jF6btaq.js.map → acp-Cu879kus.js.map} +1 -1
- package/dist/acp-cli.js +5 -5
- package/dist/acp.js +1 -1
- package/dist/{agent-DLgyw1n5.js → agent-BipX4BBj.js} +35 -5
- package/dist/{agent-DLgyw1n5.js.map → agent-BipX4BBj.js.map} +1 -1
- package/dist/agent.js +1 -1
- package/dist/{anthropic-CUM2CjXS.js → anthropic-B4UmPm4H.js} +3 -3
- package/dist/{anthropic-CUM2CjXS.js.map → anthropic-B4UmPm4H.js.map} +1 -1
- package/dist/{approvals-YO3zmQ-s.js → approvals-staFZZ5o.js} +43 -8
- package/dist/approvals-staFZZ5o.js.map +1 -0
- package/dist/{auth-DXJ9hJmU.js → auth-D4MpTfvF.js} +5 -5
- package/dist/{auth-DXJ9hJmU.js.map → auth-D4MpTfvF.js.map} +1 -1
- package/dist/chat.d.ts +1 -1
- package/dist/chat.js +3 -3
- package/dist/daemon-cli.js +1 -1
- package/dist/eval.js +1 -1
- package/dist/extensions.js +1 -1
- package/dist/headless.js +3 -3
- package/dist/{index-Co4Fddtj.d.ts → index-CnXKeZ8p.d.ts} +33 -2
- package/dist/{index-Co4Fddtj.d.ts.map → index-CnXKeZ8p.d.ts.map} +1 -1
- package/dist/index.js +6 -6
- package/dist/{ipc-t6ygtrb5.js → ipc-CbkrpfkI.js} +2 -2
- package/dist/{ipc-t6ygtrb5.js.map → ipc-CbkrpfkI.js.map} +1 -1
- package/dist/ipc.d.ts +13 -8
- package/dist/ipc.d.ts.map +1 -1
- package/dist/ipc.js +3 -3
- package/dist/{messages-aORUmIKe.js → messages-2jcOA_5R.js} +2 -2
- package/dist/{messages-aORUmIKe.js.map → messages-2jcOA_5R.js.map} +1 -1
- package/dist/{openai-compat-cIeLSED_.js → openai-compat-Dy56weK8.js} +28 -15
- package/dist/openai-compat-Dy56weK8.js.map +1 -0
- package/dist/presets.js +1 -1
- package/dist/providers/anthropic.js +1 -1
- package/dist/providers/arcee.js +1 -1
- package/dist/providers/baseten.js +1 -1
- package/dist/providers/cerebras.js +1 -1
- package/dist/providers/local.js +1 -1
- package/dist/providers/openai-compat.js +1 -1
- package/dist/providers/openai.js +2 -2
- package/dist/providers/openrouter.js +1 -1
- package/dist/providers/xai.js +1 -1
- package/dist/{providers-DPygcIX3.js → providers-DP9kwXYo.js} +2 -2
- package/dist/{providers-DPygcIX3.js.map → providers-DP9kwXYo.js.map} +1 -1
- package/dist/providers.js +3 -3
- package/dist/restate.js +2 -2
- package/dist/{server-Dnc3BRS4.js → server-GJ2gNRt_.js} +17 -22
- package/dist/server-GJ2gNRt_.js.map +1 -0
- package/dist/{session-23Stp71-.js → session-CVy-2mAy.js} +2 -2
- package/dist/{session-23Stp71-.js.map → session-CVy-2mAy.js.map} +1 -1
- package/dist/session.js +2 -2
- package/dist/tools.js +1 -1
- package/dist/transcript-anchors-BHyrChoO.d.ts.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +172 -86
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
- package/dist/approvals-YO3zmQ-s.js.map +0 -1
- package/dist/openai-compat-cIeLSED_.js.map +0 -1
- package/dist/server-Dnc3BRS4.js.map +0 -1
package/dist/tui.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { C as estimateRebilledCostUsd } from "./openai-compat-
|
|
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-
|
|
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 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-BipX4BBj.js";
|
|
4
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-DzzhE2YO.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";
|
|
@@ -12,7 +13,7 @@ import { a as createRingBufferSink, c as logFileTimestamp, i as createLoggingHoo
|
|
|
12
13
|
import { i as sniffImageMediaType } from "./media-sniff-UKijEaiQ.js";
|
|
13
14
|
import { _ as hasAuthorizationHeader, h as McpOAuthProvider, n as connectMcpServers, s as nonOwningMcpView } from "./mcp-BIWa57eY.js";
|
|
14
15
|
import { replaceDynamicSection, splitSystemPrompt } from "./prompt.js";
|
|
15
|
-
import { a as getExtensionSessionState, c as setExtensionSessionState, i as demoteStaleRunningStatus, o as loadSession, t as createSession } from "./session-
|
|
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";
|
|
17
18
|
import { s as withTimeout } from "./timeout-CjOG2mea.js";
|
|
18
19
|
import { i as installCacheBreakLogger } from "./cache-telemetry-ehVdWsg2.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-
|
|
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-
|
|
25
|
-
import { a as connectIpcClient, d as defaultSocketPath, f as ensureDaemonRunning, m as selfDaemonSpawnCommand, o as connectOrSpawnDaemon } from "./server-
|
|
24
|
+
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, Kt as modelChainMetadata, 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-staFZZ5o.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-D4MpTfvF.js";
|
|
26
|
+
import { a as connectIpcClient, d as defaultSocketPath, f as ensureDaemonRunning, m as selfDaemonSpawnCommand, o as connectOrSpawnDaemon } from "./server-GJ2gNRt_.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
|
-
|
|
8657
|
-
|
|
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 (
|
|
22643
|
-
* activation with the
|
|
22644
|
-
* genuine user change — pushing at mount would
|
|
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
|
-
|
|
24773
|
+
let activePick = pickedRef.current;
|
|
24685
24774
|
let seedModelViaRpc = false;
|
|
24686
|
-
if (
|
|
24687
|
-
|
|
24688
|
-
|
|
24689
|
-
|
|
24690
|
-
|
|
24691
|
-
|
|
24692
|
-
if (
|
|
24693
|
-
|
|
24694
|
-
|
|
24695
|
-
|
|
24696
|
-
|
|
24697
|
-
|
|
24698
|
-
|
|
24699
|
-
|
|
24700
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (
|
|
25780
|
+
if (daemonRef.current) return;
|
|
25781
|
+
if (!(providerChanged || providerKeySetChanged(prevChain, [{
|
|
25697
25782
|
provider: primary.provider,
|
|
25698
25783
|
model: primary.model
|
|
25699
|
-
}, ...fallbacks]))
|
|
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
|