zidane 7.1.9 → 7.2.1
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-Bt-eb5Z8.js → acp-D-tVyUjw.js} +2 -2
- package/dist/{acp-Bt-eb5Z8.js.map → acp-D-tVyUjw.js.map} +1 -1
- package/dist/acp-cli.js +4 -4
- package/dist/acp.d.ts +1 -1
- package/dist/acp.js +1 -1
- package/dist/{agent-B6etKd_o.js → agent-D0zZnGbt.js} +135 -6
- package/dist/agent-D0zZnGbt.js.map +1 -0
- package/dist/agent.d.ts +1 -1
- package/dist/agent.js +1 -1
- package/dist/{anthropic-BQdAnY-w.js → anthropic-C2aole0G.js} +83 -100
- package/dist/anthropic-C2aole0G.js.map +1 -0
- package/dist/{approvals-CIKGWmiU.js → approvals-CnE_8JVZ.js} +53 -11
- package/dist/approvals-CnE_8JVZ.js.map +1 -0
- package/dist/{auth-CDDNbEmd.js → auth-BG2rVKSt.js} +2 -2
- package/dist/{auth-CDDNbEmd.js.map → auth-BG2rVKSt.js.map} +1 -1
- package/dist/chat/pure.d.ts +24 -8
- package/dist/chat/pure.d.ts.map +1 -1
- package/dist/chat/pure.js +248 -3
- package/dist/chat/pure.js.map +1 -0
- package/dist/chat.d.ts +6 -6
- package/dist/chat.js +4 -4
- package/dist/contexts/daytona.d.ts +1 -1
- package/dist/contexts/e2b.d.ts +1 -1
- package/dist/daemon-cli.js +1 -1
- package/dist/eval.d.ts +1 -1
- package/dist/extensions.d.ts +2 -2
- package/dist/extensions.js +1 -1
- package/dist/headless.d.ts +1 -1
- package/dist/headless.js +1 -1
- package/dist/{index-dXnPmqFx.d.ts → index-BgN1T3lk.d.ts} +342 -109
- package/dist/index-BgN1T3lk.d.ts.map +1 -0
- package/dist/{index-C45NxBZm.d.ts → index-CWHSTD2Q.d.ts} +5 -5
- package/dist/{index-C45NxBZm.d.ts.map → index-CWHSTD2Q.d.ts.map} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/{ipc-BWsncell.js → ipc-Cu29nNEz.js} +2 -2
- package/dist/{ipc-BWsncell.js.map → ipc-Cu29nNEz.js.map} +1 -1
- package/dist/ipc.d.ts +5 -5
- package/dist/ipc.js +3 -3
- package/dist/mcp.d.ts +1 -1
- package/dist/output/stream-json.d.ts +1 -1
- package/dist/output/terminal.d.ts +1 -1
- package/dist/panels-B6gRk4bf.js.map +1 -1
- package/dist/plugins.d.ts +1 -1
- package/dist/presets.d.ts +1 -1
- package/dist/presets.js +1 -1
- package/dist/providers/anthropic.d.ts +1 -1
- package/dist/providers/anthropic.js +1 -1
- package/dist/providers/arcee.d.ts +1 -1
- package/dist/providers/baseten.d.ts +1 -1
- package/dist/providers/cerebras.d.ts +1 -1
- package/dist/providers/local.d.ts +1 -1
- package/dist/providers/openai-compat.d.ts +1 -1
- package/dist/providers/openai.d.ts +1 -1
- package/dist/providers/openai.js +3 -2
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openrouter.d.ts +1 -1
- package/dist/providers/xai.d.ts +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/providers.js +1 -1
- package/dist/restate.d.ts +1 -1
- package/dist/restate.js +1 -1
- package/dist/session/sqlite.d.ts +19 -2
- package/dist/session/sqlite.d.ts.map +1 -1
- package/dist/session/sqlite.js +45 -1
- package/dist/session/sqlite.js.map +1 -1
- package/dist/session.d.ts +1 -1
- package/dist/{shell-path-CY7nWoF8.js → shell-path-DWo7ooWv.js} +6 -6
- package/dist/{shell-path-CY7nWoF8.js.map → shell-path-DWo7ooWv.js.map} +1 -1
- package/dist/skills.d.ts +1 -1
- package/dist/{todo-edits-PxMJvYIX.js → todo-edits-UOwgxGKu.js} +74 -13
- package/dist/todo-edits-UOwgxGKu.js.map +1 -0
- package/dist/{tool-formatters-Bl1afA8N.d.ts → tool-formatters-DoRLnfuD.d.ts} +5 -3
- package/dist/tool-formatters-DoRLnfuD.d.ts.map +1 -0
- package/dist/tools/fetch-url.d.ts +1 -1
- package/dist/tools/web-search.d.ts +1 -1
- package/dist/tools.d.ts +1 -1
- package/dist/tools.js +1 -1
- package/dist/{transcript-anchors-BfI3ZXh1.d.ts → transcript-anchors-BeudMbXx.d.ts} +12 -4
- package/dist/transcript-anchors-BeudMbXx.d.ts.map +1 -0
- package/dist/tui.d.ts +3 -3
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +290 -40
- package/dist/tui.js.map +1 -1
- package/dist/{turn-operations-D0x_g6XQ.d.ts → turn-operations-C8bMBDl_.d.ts} +3 -3
- package/dist/{turn-operations-D0x_g6XQ.d.ts.map → turn-operations-C8bMBDl_.d.ts.map} +1 -1
- package/dist/{turn-operations-D_k_FEur.js → turn-operations-DrbJlpq9.js} +5 -2
- package/dist/turn-operations-DrbJlpq9.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/docs/EXTENSIONS.md +1 -1
- package/docs/PANELS.md +16 -2
- package/package.json +3 -3
- package/dist/agent-B6etKd_o.js.map +0 -1
- package/dist/anthropic-BQdAnY-w.js.map +0 -1
- package/dist/approvals-CIKGWmiU.js.map +0 -1
- package/dist/index-dXnPmqFx.d.ts.map +0 -1
- package/dist/todo-edits-PxMJvYIX.js.map +0 -1
- package/dist/tool-formatters-Bl1afA8N.d.ts.map +0 -1
- package/dist/transcript-anchors-BfI3ZXh1.d.ts.map +0 -1
- package/dist/turn-operations-D_k_FEur.js.map +0 -1
package/dist/tui.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { C as estimateRebilledCostUsd } from "./openai-compat-Dy56weK8.js";
|
|
2
2
|
import { n as THINKING_LEVELS } from "./types-CWgENVLY.js";
|
|
3
3
|
import { m as buildContextSegments, n as normalizePanelContent, p as oauthAccountLabel, r as panelBadgeText, s as DEFAULT_OAUTH_ACCOUNT_LABEL } from "./panels-B6gRk4bf.js";
|
|
4
|
-
import { $ as ExtensionInstallError, A as buildPostCompactAttachments, An as resolveExtensionConfigValue, C as rehomePersistedStubs, Cn as setDebugLogSink, Ct as basic_default, D as resolvePersistDir, E as resolveMcpWarningsDir, En as coerceExtensionConfigInput, Gn as renderArtifactRow, Ln as artifactKindLabel, Lt as tailTruncate, M as selectFilesFromSession, O as resolveSessionDir, P as compactConversation, Pn as createExtensionBus, Q as createExtensionPromptBridge, Sn as createDebugLog, T as resolveLegacySessionDir, Vt as createModelSearchTool, Wn as refreshArtifact, Xn as effectiveContextWindow, Xt as artifacts_default, Yn as OUTPUT_RESERVE_TOKENS, an as groupBindings, at as removeInstalledExtension, b as cleanupPersistedSession, bn as parseExtensionScanPathEnv, bt as composePresets, ct as discoverAndBuildExtensionRegistry, dt as composeExtensionPreset, f as applyCompactSummaryCutoff, fn as resolveExtensionKeybindings, ft as disposeExtensionRegistry, gt as partitionExtensionCatalog, in as formatBindingForDisplay, jn as sanitizeExtensionConfigActionPatch, k as resolveTasksDir, kt as isSpawnTool, mn as registerExtensionHostModules, mt as filterRegistryPlugins, nn as KEYBINDING_KEY_COL_WIDTH, on as keybindingsPath, ot as updateInstalledExtension, pt as filterExtensionRegistry, q as summaryToTurn, rn as ensureKeybindingsFile, sn as matchesBinding, st as createExtensionHud, t as createAgent, tt as installExtensionFromSpec, vn as inlineLoadedExtension, vt as createExtensionHostRuntimeBridge, w as resolveLegacyPersistDir, xn as scanExtensionDirectories, zt as looksBinary } from "./agent-
|
|
4
|
+
import { $ as ExtensionInstallError, A as buildPostCompactAttachments, An as resolveExtensionConfigValue, C as rehomePersistedStubs, Cn as setDebugLogSink, Ct as basic_default, D as resolvePersistDir, E as resolveMcpWarningsDir, En as coerceExtensionConfigInput, Gn as renderArtifactRow, Ln as artifactKindLabel, Lt as tailTruncate, M as selectFilesFromSession, O as resolveSessionDir, P as compactConversation, Pn as createExtensionBus, Q as createExtensionPromptBridge, Sn as createDebugLog, T as resolveLegacySessionDir, Vt as createModelSearchTool, Wn as refreshArtifact, Xn as effectiveContextWindow, Xt as artifacts_default, Yn as OUTPUT_RESERVE_TOKENS, an as groupBindings, at as removeInstalledExtension, b as cleanupPersistedSession, bn as parseExtensionScanPathEnv, bt as composePresets, ct as discoverAndBuildExtensionRegistry, dt as composeExtensionPreset, f as applyCompactSummaryCutoff, fn as resolveExtensionKeybindings, ft as disposeExtensionRegistry, gt as partitionExtensionCatalog, in as formatBindingForDisplay, jn as sanitizeExtensionConfigActionPatch, k as resolveTasksDir, kt as isSpawnTool, mn as registerExtensionHostModules, mt as filterRegistryPlugins, nn as KEYBINDING_KEY_COL_WIDTH, on as keybindingsPath, ot as updateInstalledExtension, pt as filterExtensionRegistry, q as summaryToTurn, rn as ensureKeybindingsFile, sn as matchesBinding, st as createExtensionHud, t as createAgent, tt as installExtensionFromSpec, vn as inlineLoadedExtension, vt as createExtensionHostRuntimeBridge, w as resolveLegacyPersistDir, xn as scanExtensionDirectories, zt as looksBinary } from "./agent-D0zZnGbt.js";
|
|
5
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-CkNQKFKr.js";
|
|
6
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";
|
|
7
7
|
import { i as killProcessGroup, n as SUPPORTS_PROCESS_GROUPS, r as createProcessContext } from "./contexts-CRE9pw07.js";
|
|
@@ -19,14 +19,14 @@ import { s as withTimeout } from "./timeout-CjOG2mea.js";
|
|
|
19
19
|
import { i as installCacheBreakLogger } from "./cache-telemetry-D0xemhgK.js";
|
|
20
20
|
import { s as resolveCompletionSubmit } from "./completion-core-BRo86R_L.js";
|
|
21
21
|
import { n as JsonRpcRemoteError, t as JsonRpcConnectionClosedError } from "./json-rpc-rSWMUh9b.js";
|
|
22
|
-
import { $ as pickChainPrimary, $t as
|
|
22
|
+
import { $ as pickChainPrimary, $t as fitRunReceiptCells, An as createChatsCompletionProvider, At as selectableTurnIds, C as resetLabel, Cn as parseEditOutcomesFromResult, Ct as isUserBashEvent, D as splitPromptSegments, Dn as summarizeOutcomes, E as usageTone, En as stripEditOutcomesAnnotation, Et as promptHistoryFromEvents, F as codeTokenHasClosingFence, H as liveSessionCost, I as normalizeMarkdownCodeFences, K as DAEMON_HEALTH_STYLE, Kt as sessionDirLabel, L as splitMarkdownCodeBlocks, Lt as SESSION_EVENT_STATUS_STYLE, Mt as streamEventSearchText, N as chunkMarkdownForRender, Nt as turnSelectionOwnership, O as buildModelCatalog, Ot as retagUserPromptEvents, P as closeDanglingCodeFence, Q as filterChainFallbacks, R as stripHtmlCommentsOutsideCode, S as mostConstrainedWindow, Sn as mergeApprovalAndBodyOutcomes, St as isTurnHighlighted, T as updatedLabel, Tn as rewriteMultiEditHeader, Tt as isVisibleDuringSearch, V as compactingLabel, Vt as isMainSession, W as streamingLabel, X as chainsEqual, Xt as shortSessionId, Y as chainPositionOf, Yt as sessionEventMeta, Zt as truncateTitle, _ as turnContextSize, _t as buildLinearRamp, a as TOOL_DISPLAY, bn as buildEditOutcomesAnnotation, bt as EDIT_TOOL_NAMES, d as finalizeStreamingMarkdown, dn as clipDiffForRender, en as formatCostUsd, f as finalizeStreamingMarkdownForOwner, ft as createFilesCompletionProvider, g as revealEarlierTranscriptEvents, gn as previewEditPayload, gt as blendHsl, h as replaceTranscriptTurnEvents, hn as filetypeFromPath, ht as createCommandsCompletionProvider, i as turnAsText, in as formatTokenCount, it as restoreChainFallbacks, j as parseCustomModelQuery, jt as selectionAfterTurnRemoval, k as filterModelCatalog, kt as retagUserPromptEventsFromRefs, ln as buildContextualDiff, lt as createSkillsCompletionProvider, mn as extractEditPayload, n as deleteTurnSafely, nn as formatRunReceiptCells, nt as providerKeySetChanged, o as displayNameFor, on as hasRunReceipt, ot as toggleChainEntry, p as hiddenEarlierTranscriptCount, q as buildRunModel, qt as sessionEventExcerpt, r as truncateTurnsAt, rn as formatRunReceiptLine, rt as reorderKeyed, s as formatToolCall, sn as runReceiptFromRun, u as capTranscriptEvents, un as buildUnifiedDiff, ut as uniqueSkillNamesFromReferences, vn as summarizeEditPayload, vt as BASH_CALL_ID_PREFIX, w as showsAccount, wn as resolveApprovalForPayload, wt as isVisible, x as formatUsagePercent, xt as isEditErrorResult, y as formatBalance, z as cacheBreakChip } from "./turn-operations-DrbJlpq9.js";
|
|
23
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";
|
|
24
|
-
import { $ as runOAuthLogin, $n as dedupMcpServersByName, $t as discoverProjectPlugins, A as useSafeModeQueue, Ai as lastContextSizeFromTurns, Bi as toolCallPreview, Bn as resolveConfig, Ci as createChatTurnsReadTool, Cn as resolveChipColor, Ct as buildResumedToolResultsTurn, Di as deriveSessionTitle, Dt as isModelInteraction, Fn as DiscoveryProvider, G as providerUsageSupported, Gn as useCompletion, Gt as modelChainMetadata, H as fetchAllProviderUsage, Hi as updateToolEventOutcomes, Hr as accentColor, Ht as createBuiltinCommands, Ii as serverToolResultSummary, In as useDiscovery, It as installProviderDiagnosticHook, J as formatPathForCwd, Jn as importFromClaudeCode, Jt as createFileMcpCredentialStore, K as usageChecksOptedOut, Kn as countClaudeSessionFiles, Li as stripSpawnTokensLine, Ln as useDiscoveryOptional, M as addToSafelist, Mi as loadState, Mn as parseEditorCommand, Mr as groupArtifacts, Mt as useInteractionsQueue, N as getSafelist, Ni as marginTopFor, Nn as quoteForShell, O as SafeModeProvider, Oi as eventsFromTurns, Ot as makeRequestInteraction, P as isOnSafelist, Pi as noticeTurnContent, Pn as createDiscoverySlot, Pr as discoverAgentsMd, Q as oauthUsesManualCodePaste, Qn as buildMcpServers, Qt as buildPluginContributions, R as suggestSafelistEntries, Ri as sumRunCosts, Rn as ConfigProvider, Si as chatReferenceTokensForPrompt, St as PRESENT_PLAN_TOOL, Ti as compactSummaryEvent, Tt as createInteractionTools, U as fetchProviderUsage, Ui as usageByModel, Un as createArtifactsCompletionProvider, Ut as applyThinkingBindingSetting, V as clearProviderUsageCache, Vi as toolResultText, Vn as resolveStoragePaths, Wt as createMainSession, Xn as removeMcpServer, Y as fetchOAuthRedirect, Yn as mcpsWritePath, Yr as TODO_STATUS_GLYPHS, Z as redirectUriFromAuthUrl, Zn as upsertMcpServer, Zr as applyTodosSnapshot, Zt as runEndNotice, _ as buildSpawnEndEvent, _n as SettingsProvider, _r as useRestartRequired, ai as selectActiveTodos, an as clipHintsToWidth, b as defaultSkillScanPaths, bi as buildPlanSystem, bn as useSettings, bt as HOST_INTERACTION_ID_PREFIX, c as useSelectStyle, ci as useActiveTodos, cn as buildHints, cr as buildRestartHint, ct as useMcpToolToggleMap, d as useTheme, dn as useEnabledToggleSet, dt as indexOfServerRow, en as parsePluginScanPathEnv, et as supportsOAuth, f as discoverSystemMd, fn as DEFAULT_SETTINGS, ft as parentServerName, g as useStreamBuffer, gn as SETTINGS_TOGGLES, gt as getMcpAuthStatus, h as userSystemMdPath, hn as SETTINGS_INPUTS, ht as useMcpAuthState, in as EMPTY_HINTS, ir as tryRevealPath, it as refreshMcpToolsCatalog, ji as listSessionMeta, jr as chatWindowBehavior, jt as useInteractionsActions, k as useSafeModeActions, ki as getSessionMeta, kt as pendingInteractionsFromTurns, l as useSurfaces, lr as buildUpdateHint, m as userScopeOverridesLoad, mn as SETTINGS_CHOICES, mt as useMcpAuthDispatch, ni as pickActiveRunId, nt as loadMcpToolsCache, o as ThemeProvider, oi as setTodosForRun, on as hintsLength, or as bootTick, ot as subscribeMcpToolsCache, p as renderSystemMdSeed, pn as SETTINGS_CATEGORIES, pt as McpAuthProvider, qn as hasClaudeCodeSetup, qt as resolveSandboxFromSettings, r as computeTurnAnchors, ri as pruneTodosByRun, rr as tryOpenBrowser, rt as mcpToolsCachePath, s as useColors, si as todoProgressLabel, sn as truncateTrailing, tn as attachMcpWarnLog, tr as discoverProjectMcps, un as listProjectFiles, ur as useUpdateCheck, ut as buildVisibleMcpRows, v as buildSpawnStartEvent, vn as clampFps, vt as ASK_USER_TOOL, w as writeSessionExport, wn as resolveTheme, wt as createAutomaticInteractionResponse, x as discoverProjectSkills, xi as envSection, xt as InteractionsProvider, y as buildSkillsConfig, yi as buildBuildSystem, zn as useConfig } from "./approvals-
|
|
25
|
-
import { A as renderDefaultCallbackPage, C as modelOptionsFor, O as piIdOf, b as getContextWindow, d as setPreferredCredential, f as setProviderCredential, k as restoreModelOptions, l as removeStoredCredential, n as applyApiKeyEnv, s as readProviderCredentials, t as detectAuth, u as setCredentialLabel, w as modelSupportsReasoning, y as enabledModelOptions } from "./auth-
|
|
26
|
-
import { _ as selfDaemonSpawnCommand, c as connectIpcClient, h as ensureDaemonRunning, l as connectOrSpawnDaemon, m as defaultSocketPath } from "./shell-path-
|
|
24
|
+
import { $ as runOAuthLogin, $n as dedupMcpServersByName, $t as discoverProjectPlugins, A as useSafeModeQueue, Ai as lastContextSizeFromTurns, Bi as toolCallPreview, Bn as resolveConfig, Ci as createChatTurnsReadTool, Cn as resolveChipColor, Ct as buildResumedToolResultsTurn, Di as deriveSessionTitle, Dt as isModelInteraction, Fn as DiscoveryProvider, G as providerUsageSupported, Gn as useCompletion, Gt as modelChainMetadata, H as fetchAllProviderUsage, Hi as updateToolEventOutcomes, Hr as accentColor, Ht as createBuiltinCommands, Ii as serverToolResultSummary, In as useDiscovery, It as installProviderDiagnosticHook, J as formatPathForCwd, Jn as importFromClaudeCode, Jt as createFileMcpCredentialStore, K as usageChecksOptedOut, Kn as countClaudeSessionFiles, Li as stripSpawnTokensLine, Ln as useDiscoveryOptional, M as addToSafelist, Mi as loadState, Mn as parseEditorCommand, Mr as groupArtifacts, Mt as useInteractionsQueue, N as getSafelist, Ni as marginTopFor, Nn as quoteForShell, O as SafeModeProvider, Oi as eventsFromTurns, Ot as makeRequestInteraction, P as isOnSafelist, Pi as noticeTurnContent, Pn as createDiscoverySlot, Pr as discoverAgentsMd, Q as oauthUsesManualCodePaste, Qn as buildMcpServers, Qt as buildPluginContributions, R as suggestSafelistEntries, Ri as sumRunCosts, Rn as ConfigProvider, Si as chatReferenceTokensForPrompt, St as PRESENT_PLAN_TOOL, Ti as compactSummaryEvent, Tt as createInteractionTools, U as fetchProviderUsage, Ui as usageByModel, Un as createArtifactsCompletionProvider, Ut as applyThinkingBindingSetting, V as clearProviderUsageCache, Vi as toolResultText, Vn as resolveStoragePaths, Wt as createMainSession, Xn as removeMcpServer, Y as fetchOAuthRedirect, Yn as mcpsWritePath, Yr as TODO_STATUS_GLYPHS, Z as redirectUriFromAuthUrl, Zn as upsertMcpServer, Zr as applyTodosSnapshot, Zt as runEndNotice, _ as buildSpawnEndEvent, _n as SettingsProvider, _r as useRestartRequired, ai as selectActiveTodos, an as clipHintsToWidth, b as defaultSkillScanPaths, bi as buildPlanSystem, bn as useSettings, bt as HOST_INTERACTION_ID_PREFIX, c as useSelectStyle, ci as useActiveTodos, cn as buildHints, cr as buildRestartHint, ct as useMcpToolToggleMap, d as useTheme, dn as useEnabledToggleSet, dt as indexOfServerRow, en as parsePluginScanPathEnv, et as supportsOAuth, f as discoverSystemMd, fn as DEFAULT_SETTINGS, ft as parentServerName, g as useStreamBuffer, gn as SETTINGS_TOGGLES, gt as getMcpAuthStatus, h as userSystemMdPath, hn as SETTINGS_INPUTS, ht as useMcpAuthState, in as EMPTY_HINTS, ir as tryRevealPath, it as refreshMcpToolsCatalog, ji as listSessionMeta, jr as chatWindowBehavior, jt as useInteractionsActions, k as useSafeModeActions, ki as getSessionMeta, kt as pendingInteractionsFromTurns, l as useSurfaces, lr as buildUpdateHint, m as userScopeOverridesLoad, mn as SETTINGS_CHOICES, mt as useMcpAuthDispatch, ni as pickActiveRunId, nt as loadMcpToolsCache, o as ThemeProvider, oi as setTodosForRun, on as hintsLength, or as bootTick, ot as subscribeMcpToolsCache, p as renderSystemMdSeed, pn as SETTINGS_CATEGORIES, pt as McpAuthProvider, qn as hasClaudeCodeSetup, qt as resolveSandboxFromSettings, r as computeTurnAnchors, ri as pruneTodosByRun, rr as tryOpenBrowser, rt as mcpToolsCachePath, s as useColors, si as todoProgressLabel, sn as truncateTrailing, tn as attachMcpWarnLog, tr as discoverProjectMcps, un as listProjectFiles, ur as useUpdateCheck, ut as buildVisibleMcpRows, v as buildSpawnStartEvent, vn as clampFps, vt as ASK_USER_TOOL, w as writeSessionExport, wn as resolveTheme, wt as createAutomaticInteractionResponse, x as discoverProjectSkills, xi as envSection, xt as InteractionsProvider, y as buildSkillsConfig, yi as buildBuildSystem, zn as useConfig } from "./approvals-CnE_8JVZ.js";
|
|
25
|
+
import { A as renderDefaultCallbackPage, C as modelOptionsFor, O as piIdOf, b as getContextWindow, d as setPreferredCredential, f as setProviderCredential, k as restoreModelOptions, l as removeStoredCredential, n as applyApiKeyEnv, s as readProviderCredentials, t as detectAuth, u as setCredentialLabel, w as modelSupportsReasoning, y as enabledModelOptions } from "./auth-BG2rVKSt.js";
|
|
26
|
+
import { _ as selfDaemonSpawnCommand, c as connectIpcClient, h as ensureDaemonRunning, l as connectOrSpawnDaemon, m as defaultSocketPath } from "./shell-path-DWo7ooWv.js";
|
|
27
27
|
import { createDockerContext } from "./contexts/docker.js";
|
|
28
28
|
import { createTuiStore } from "./session/sqlite.js";
|
|
29
|
-
import { A as parentProviderKey,
|
|
29
|
+
import { A as buildVisibleInstructionRows, C as togglePanel, I as parentProviderKey, L as selectableSources, M as instructionPreviewLines, N as buildVisibleAuthRows, O as validateMcpForm, P as indexOfProviderRow, S as resolveActiveTab, T as MCP_TRANSPORTS, _ as cycleTab, a as editTodo, b as pickTab, h as buildPanelCatalog, i as cycleTodoStatus, j as instructionOriginBadge, n as buildTodoRetryMessage, p as INITIAL_PANEL_STATE, r as clearTodos, s as removeTodo, t as addTodo, w as NOTICE_GLYPH } from "./todo-edits-UOwgxGKu.js";
|
|
30
30
|
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
31
31
|
import { Buffer } from "node:buffer";
|
|
32
32
|
import * as fs from "node:fs";
|
|
@@ -2395,10 +2395,49 @@ function sameElements(a, b) {
|
|
|
2395
2395
|
* `partitionTranscript` rebuilds the `events` array per drain tick, but
|
|
2396
2396
|
* the inner event references stay stable until their content changes.
|
|
2397
2397
|
*/
|
|
2398
|
-
|
|
2398
|
+
/** `↳ ▸ ` / `↳ ▾ ` prefix plus ` [expand]` / ` [collapse]` suffix, in cells. */
|
|
2399
|
+
const COLLAPSIBLE_HEADER_CHROME = 16;
|
|
2400
|
+
/**
|
|
2401
|
+
* One-line header for a collapsible transcript row (tool group, exchange
|
|
2402
|
+
* fold): the label is clipped with an ellipsis so the row never wraps
|
|
2403
|
+
* onto a second line however long the summary or the live activity gets.
|
|
2404
|
+
* `reserved` is any extra cells the caller paints before the label (the
|
|
2405
|
+
* live spinner and its space).
|
|
2406
|
+
*/
|
|
2407
|
+
function CollapsibleHeader({ expanded, label, onToggle, prefix, reserved = 0 }) {
|
|
2399
2408
|
const COLOR = useColors();
|
|
2400
|
-
const
|
|
2409
|
+
const { width } = useTerminalDimensions();
|
|
2401
2410
|
const [hovered, setHovered] = useState(false);
|
|
2411
|
+
const shown = truncateTitle(label, Math.max(8, width - 2 - COLLAPSIBLE_HEADER_CHROME - reserved));
|
|
2412
|
+
return /* @__PURE__ */ jsxs("text", {
|
|
2413
|
+
selectable: false,
|
|
2414
|
+
wrapMode: "none",
|
|
2415
|
+
onMouseDown: (event) => {
|
|
2416
|
+
event.stopPropagation();
|
|
2417
|
+
event.preventDefault();
|
|
2418
|
+
onToggle();
|
|
2419
|
+
},
|
|
2420
|
+
onMouseOver: () => setHovered(true),
|
|
2421
|
+
onMouseOut: () => setHovered(false),
|
|
2422
|
+
children: [
|
|
2423
|
+
/* @__PURE__ */ jsx$1("span", {
|
|
2424
|
+
fg: COLOR.mute,
|
|
2425
|
+
children: expanded ? "↳ ▾ " : "↳ ▸ "
|
|
2426
|
+
}),
|
|
2427
|
+
prefix,
|
|
2428
|
+
/* @__PURE__ */ jsx$1("span", {
|
|
2429
|
+
fg: hovered ? COLOR.accent : COLOR.mute,
|
|
2430
|
+
children: shown
|
|
2431
|
+
}),
|
|
2432
|
+
/* @__PURE__ */ jsx$1("span", {
|
|
2433
|
+
fg: hovered ? COLOR.accent : COLOR.mute,
|
|
2434
|
+
children: expanded ? " [collapse]" : " [expand]"
|
|
2435
|
+
})
|
|
2436
|
+
]
|
|
2437
|
+
});
|
|
2438
|
+
}
|
|
2439
|
+
const ToolGroupBlock = memo(({ groupKey, events, previous, expanded, onToggle, selectedTurnId = null, ownership, anchorIds }) => {
|
|
2440
|
+
const SURFACE = useSurfaces();
|
|
2402
2441
|
const summary = summarizeToolGroup(events);
|
|
2403
2442
|
const gap = marginTopFor(events[0], previous);
|
|
2404
2443
|
const isRowSelected = (evt) => selectedTurnId !== null && ownership !== void 0 && isTurnHighlighted(evt, selectedTurnId, ownership);
|
|
@@ -2413,29 +2452,10 @@ const ToolGroupBlock = memo(({ groupKey, events, previous, expanded, onToggle, s
|
|
|
2413
2452
|
flexShrink: 0,
|
|
2414
2453
|
flexDirection: "column"
|
|
2415
2454
|
},
|
|
2416
|
-
children: [/* @__PURE__ */
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
event.preventDefault();
|
|
2421
|
-
onToggle(groupKey);
|
|
2422
|
-
},
|
|
2423
|
-
onMouseOver: () => setHovered(true),
|
|
2424
|
-
onMouseOut: () => setHovered(false),
|
|
2425
|
-
children: [
|
|
2426
|
-
/* @__PURE__ */ jsx$1("span", {
|
|
2427
|
-
fg: COLOR.mute,
|
|
2428
|
-
children: expanded ? "↳ ▾ " : "↳ ▸ "
|
|
2429
|
-
}),
|
|
2430
|
-
/* @__PURE__ */ jsx$1("span", {
|
|
2431
|
-
fg: hovered ? COLOR.accent : COLOR.mute,
|
|
2432
|
-
children: summary
|
|
2433
|
-
}),
|
|
2434
|
-
/* @__PURE__ */ jsx$1("span", {
|
|
2435
|
-
fg: hovered ? COLOR.accent : COLOR.mute,
|
|
2436
|
-
children: expanded ? " [collapse]" : " [expand]"
|
|
2437
|
-
})
|
|
2438
|
-
]
|
|
2455
|
+
children: [/* @__PURE__ */ jsx$1(CollapsibleHeader, {
|
|
2456
|
+
expanded,
|
|
2457
|
+
label: summary,
|
|
2458
|
+
onToggle: () => onToggle(groupKey)
|
|
2439
2459
|
}), expanded && events.map((evt, i) => /* @__PURE__ */ jsx$1(EventLine, {
|
|
2440
2460
|
event: evt,
|
|
2441
2461
|
previous: i === 0 ? events[0] : events[i - 1],
|
|
@@ -2444,6 +2464,74 @@ const ToolGroupBlock = memo(({ groupKey, events, previous, expanded, onToggle, s
|
|
|
2444
2464
|
}, i))]
|
|
2445
2465
|
});
|
|
2446
2466
|
}, (prev, next) => sameElements(prev.events, next.events) && sameElements(prev.anchorIds, next.anchorIds) && prev.groupKey === next.groupKey && prev.previous === next.previous && prev.expanded === next.expanded && prev.onToggle === next.onToggle && prev.selectedTurnId === next.selectedTurnId && prev.ownership === next.ownership);
|
|
2467
|
+
/**
|
|
2468
|
+
* Compact density: one row for everything an exchange did (thinking, tool
|
|
2469
|
+
* calls, worker output). Header while live: spinner + `Working · <what>`;
|
|
2470
|
+
* settled: `Worked · 9 tools · 3 thoughts`. Expanded, the body paints the
|
|
2471
|
+
* folded events through the full-density partition, so worker lanes get
|
|
2472
|
+
* their bordered box and tool rows read exactly as they do in `full`.
|
|
2473
|
+
*/
|
|
2474
|
+
const ExchangeFoldBlock = memo(({ foldKey, events, previous, expanded, onToggle, live, liveSpawns, selectedTurnId = null, ownership, anchorIds, settings, codeSettleTargets, codeSettleEpoch = 0 }) => {
|
|
2475
|
+
const COLOR = useColors();
|
|
2476
|
+
const SURFACE = useSurfaces();
|
|
2477
|
+
const label = live ? `Working · ${exchangeFoldActivity(events)}` : summarizeExchangeFold(events);
|
|
2478
|
+
const gap = marginTopFor(events[0], previous);
|
|
2479
|
+
const isRowSelected = (evt) => selectedTurnId !== null && ownership !== void 0 && isTurnHighlighted(evt, selectedTurnId, ownership);
|
|
2480
|
+
const highlighted = events.some((evt) => isRowSelected(evt));
|
|
2481
|
+
const firstAnchorId = anchorIds?.find((id) => id !== void 0);
|
|
2482
|
+
const anchorByEvent = useMemo(() => {
|
|
2483
|
+
const map = /* @__PURE__ */ new Map();
|
|
2484
|
+
anchorIds?.forEach((id, i) => {
|
|
2485
|
+
if (id !== void 0 && events[i]) map.set(events[i], id);
|
|
2486
|
+
});
|
|
2487
|
+
return map;
|
|
2488
|
+
}, [events, anchorIds]);
|
|
2489
|
+
const body = useMemo(() => expanded ? partitionTranscript(events, {
|
|
2490
|
+
...settings,
|
|
2491
|
+
transcriptDensity: "full",
|
|
2492
|
+
groupToolCalls: false
|
|
2493
|
+
}) : [], [
|
|
2494
|
+
expanded,
|
|
2495
|
+
events,
|
|
2496
|
+
settings
|
|
2497
|
+
]);
|
|
2498
|
+
return /* @__PURE__ */ jsxs("box", {
|
|
2499
|
+
id: expanded ? void 0 : firstAnchorId,
|
|
2500
|
+
style: {
|
|
2501
|
+
paddingTop: gap,
|
|
2502
|
+
backgroundColor: !expanded && highlighted ? SURFACE.selection : SURFACE.background,
|
|
2503
|
+
alignSelf: "stretch",
|
|
2504
|
+
flexShrink: 0,
|
|
2505
|
+
flexDirection: "column"
|
|
2506
|
+
},
|
|
2507
|
+
children: [/* @__PURE__ */ jsx$1(CollapsibleHeader, {
|
|
2508
|
+
expanded,
|
|
2509
|
+
label,
|
|
2510
|
+
onToggle: () => onToggle(foldKey),
|
|
2511
|
+
prefix: live ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx$1(StatusSpinner, { color: COLOR.accent }), " "] }) : void 0,
|
|
2512
|
+
reserved: live ? 2 : 0
|
|
2513
|
+
}), expanded && body.map((item, i) => {
|
|
2514
|
+
if (item.kind === "event") return /* @__PURE__ */ jsx$1(EventLine, {
|
|
2515
|
+
event: item.event,
|
|
2516
|
+
previous: i === 0 ? item.event : item.previous,
|
|
2517
|
+
selected: isRowSelected(item.event),
|
|
2518
|
+
anchorId: anchorByEvent.get(item.event),
|
|
2519
|
+
settleCodeEpoch: codeSettleTargets?.has(item.event) ? codeSettleEpoch : 0,
|
|
2520
|
+
liveSpawn: item.event.kind === "spawn-start" ? liveSpawns?.find((spawn) => spawn.id === item.event.childId) : void 0
|
|
2521
|
+
}, i);
|
|
2522
|
+
const lane = item.events;
|
|
2523
|
+
return /* @__PURE__ */ jsx$1(SubagentBlock, {
|
|
2524
|
+
events: lane,
|
|
2525
|
+
previous: i === 0 ? void 0 : item.previous,
|
|
2526
|
+
selectedTurnId,
|
|
2527
|
+
anchorIds: lane.map((e) => anchorByEvent.get(e)),
|
|
2528
|
+
codeSettleTargets,
|
|
2529
|
+
codeSettleEpoch,
|
|
2530
|
+
live: liveSpawns?.filter((spawn) => lane.some((e) => e.childId === spawn.id))
|
|
2531
|
+
}, i);
|
|
2532
|
+
})]
|
|
2533
|
+
});
|
|
2534
|
+
}, (prev, next) => sameElements(prev.events, next.events) && sameElements(prev.anchorIds, next.anchorIds) && sameElements(prev.liveSpawns, next.liveSpawns) && prev.foldKey === next.foldKey && prev.previous === next.previous && prev.expanded === next.expanded && prev.live === next.live && prev.onToggle === next.onToggle && prev.selectedTurnId === next.selectedTurnId && prev.ownership === next.ownership && prev.settings === next.settings && prev.codeSettleTargets === next.codeSettleTargets && prev.codeSettleEpoch === next.codeSettleEpoch);
|
|
2447
2535
|
const NO_SEARCH_MATCHES = {
|
|
2448
2536
|
direct: /* @__PURE__ */ new Set(),
|
|
2449
2537
|
callIds: /* @__PURE__ */ new Set(),
|
|
@@ -2603,7 +2691,7 @@ function Transcript({ events, settings, selectedTurnId = null, busy = false, sea
|
|
|
2603
2691
|
for (let i = items.length - 1; i >= 0 && open.size > 0; i--) {
|
|
2604
2692
|
const item = items[i];
|
|
2605
2693
|
const here = [];
|
|
2606
|
-
for (const [id, child] of open) if (item.kind === "child-run" ? item.events.some((e) => e.childId === id) : item.kind === "event" && item.event.kind === "spawn-start" && item.event.childId === id) {
|
|
2694
|
+
for (const [id, child] of open) if (item.kind === "child-run" || item.kind === "exchange-fold" ? item.events.some((e) => e.childId === id) : item.kind === "event" && item.event.kind === "spawn-start" && item.event.childId === id) {
|
|
2607
2695
|
here.push({
|
|
2608
2696
|
id,
|
|
2609
2697
|
activity: spawnActivity(child.events),
|
|
@@ -2616,6 +2704,7 @@ function Transcript({ events, settings, selectedTurnId = null, busy = false, sea
|
|
|
2616
2704
|
}
|
|
2617
2705
|
return map;
|
|
2618
2706
|
}, [items, events]);
|
|
2707
|
+
const lastFoldIndex = useMemo(() => items.findLastIndex((item) => item.kind === "exchange-fold"), [items]);
|
|
2619
2708
|
useEffect(() => {
|
|
2620
2709
|
if (!selectedTurnId) return;
|
|
2621
2710
|
if (mouseSelectionRef.current) {
|
|
@@ -2731,6 +2820,24 @@ function Transcript({ events, settings, selectedTurnId = null, busy = false, sea
|
|
|
2731
2820
|
ownership,
|
|
2732
2821
|
anchorIds: anchors.ids[i]
|
|
2733
2822
|
}, i);
|
|
2823
|
+
if (item.kind === "exchange-fold") {
|
|
2824
|
+
const live = busy && i >= lastFoldIndex && (i === items.length - 1 || exchangeFoldStats(item.events).pending > 0);
|
|
2825
|
+
return /* @__PURE__ */ jsx$1(ExchangeFoldBlock, {
|
|
2826
|
+
foldKey: item.key,
|
|
2827
|
+
events: item.events,
|
|
2828
|
+
previous: item.previous,
|
|
2829
|
+
expanded: expandedGroups.has(item.key),
|
|
2830
|
+
onToggle: toggleGroup,
|
|
2831
|
+
live,
|
|
2832
|
+
liveSpawns: liveByItem.get(i),
|
|
2833
|
+
selectedTurnId,
|
|
2834
|
+
ownership,
|
|
2835
|
+
anchorIds: anchors.ids[i],
|
|
2836
|
+
settings,
|
|
2837
|
+
codeSettleTargets: codeSettle.current.targets,
|
|
2838
|
+
codeSettleEpoch: codeSettle.current.epoch
|
|
2839
|
+
}, i);
|
|
2840
|
+
}
|
|
2734
2841
|
return /* @__PURE__ */ jsx$1(SubagentBlock, {
|
|
2735
2842
|
events: item.events,
|
|
2736
2843
|
previous: item.previous,
|
|
@@ -2910,10 +3017,119 @@ function summarizeToolGroup(events) {
|
|
|
2910
3017
|
if (commands > 0) parts.push(`${commands} command${commands === 1 ? "" : "s"}`);
|
|
2911
3018
|
return parts.join(" · ");
|
|
2912
3019
|
}
|
|
3020
|
+
/**
|
|
3021
|
+
* Compact density: does this visible event fold into the exchange's one
|
|
3022
|
+
* row? Thinking, tool traffic, worker lifecycle and everything a worker
|
|
3023
|
+
* produced fold; the prompt, the assistant's prose, errors, notices, the
|
|
3024
|
+
* user's own `!` runs and session events stay in the transcript.
|
|
3025
|
+
*/
|
|
3026
|
+
function foldsInCompact(event) {
|
|
3027
|
+
if ((event.depth ?? 0) > 0 || event.childId) return true;
|
|
3028
|
+
switch (event.kind) {
|
|
3029
|
+
case "thinking":
|
|
3030
|
+
case "spawn-start":
|
|
3031
|
+
case "spawn-end": return true;
|
|
3032
|
+
case "tool":
|
|
3033
|
+
case "tool-result": return !isUserBashEvent(event);
|
|
3034
|
+
case "info": return event.notice === void 0;
|
|
3035
|
+
default: return false;
|
|
3036
|
+
}
|
|
3037
|
+
}
|
|
3038
|
+
/**
|
|
3039
|
+
* Per-event fold keys for `Settings.transcriptDensity: 'compact'`: one
|
|
3040
|
+
* key per exchange (split at {@link TOOL_GROUP_BOUNDARIES}), tagged on
|
|
3041
|
+
* every event that {@link foldsInCompact}. Unlike tool groups a single
|
|
3042
|
+
* folded event is enough: compact means the exchange reads as prompt and
|
|
3043
|
+
* answer, whatever happened in between. The key derives from the first
|
|
3044
|
+
* folded event so a live exchange keeps growing under a stable key.
|
|
3045
|
+
*/
|
|
3046
|
+
function computeExchangeFoldKeys(visible) {
|
|
3047
|
+
const keys = Array.from({ length: visible.length }).fill(null);
|
|
3048
|
+
let exchange = [];
|
|
3049
|
+
let ordinal = 0;
|
|
3050
|
+
const flush = () => {
|
|
3051
|
+
if (exchange.length > 0) {
|
|
3052
|
+
const first = visible[exchange[0]];
|
|
3053
|
+
const key = `exchange-fold-${first.callId ?? first.childId ?? first.turnId ?? ordinal}`;
|
|
3054
|
+
for (const i of exchange) keys[i] = key;
|
|
3055
|
+
}
|
|
3056
|
+
exchange = [];
|
|
3057
|
+
ordinal += 1;
|
|
3058
|
+
};
|
|
3059
|
+
for (let i = 0; i < visible.length; i++) {
|
|
3060
|
+
const event = visible[i];
|
|
3061
|
+
if (TOOL_GROUP_BOUNDARIES.has(event.kind)) {
|
|
3062
|
+
flush();
|
|
3063
|
+
continue;
|
|
3064
|
+
}
|
|
3065
|
+
if (foldsInCompact(event)) exchange.push(i);
|
|
3066
|
+
}
|
|
3067
|
+
flush();
|
|
3068
|
+
return keys;
|
|
3069
|
+
}
|
|
3070
|
+
function exchangeFoldStats(events) {
|
|
3071
|
+
const stats = {
|
|
3072
|
+
tools: 0,
|
|
3073
|
+
thoughts: 0,
|
|
3074
|
+
workers: 0,
|
|
3075
|
+
pending: 0
|
|
3076
|
+
};
|
|
3077
|
+
const workers = /* @__PURE__ */ new Set();
|
|
3078
|
+
const open = /* @__PURE__ */ new Set();
|
|
3079
|
+
for (const event of events) {
|
|
3080
|
+
if (event.childId) workers.add(event.childId);
|
|
3081
|
+
const child = (event.depth ?? 0) > 0 || event.childId !== void 0;
|
|
3082
|
+
switch (event.kind) {
|
|
3083
|
+
case "thinking":
|
|
3084
|
+
if (!child) stats.thoughts += 1;
|
|
3085
|
+
break;
|
|
3086
|
+
case "tool":
|
|
3087
|
+
if (!child) {
|
|
3088
|
+
stats.tools += 1;
|
|
3089
|
+
if (event.callId) open.add(event.callId);
|
|
3090
|
+
}
|
|
3091
|
+
break;
|
|
3092
|
+
case "tool-result":
|
|
3093
|
+
if (!child && event.callId) open.delete(event.callId);
|
|
3094
|
+
break;
|
|
3095
|
+
default: break;
|
|
3096
|
+
}
|
|
3097
|
+
}
|
|
3098
|
+
stats.workers = workers.size;
|
|
3099
|
+
stats.pending = open.size;
|
|
3100
|
+
return stats;
|
|
3101
|
+
}
|
|
3102
|
+
/** Settled fold header: `Worked · 9 tools · 3 thoughts · 2 workers`. */
|
|
3103
|
+
function summarizeExchangeFold(events) {
|
|
3104
|
+
const stats = exchangeFoldStats(events);
|
|
3105
|
+
const parts = ["Worked"];
|
|
3106
|
+
if (stats.tools > 0) parts.push(`${stats.tools} tool${stats.tools === 1 ? "" : "s"}`);
|
|
3107
|
+
if (stats.thoughts > 0) parts.push(`${stats.thoughts} thought${stats.thoughts === 1 ? "" : "s"}`);
|
|
3108
|
+
if (stats.workers > 0) parts.push(`${stats.workers} worker${stats.workers === 1 ? "" : "s"}`);
|
|
3109
|
+
return parts.join(" · ");
|
|
3110
|
+
}
|
|
3111
|
+
/**
|
|
3112
|
+
* What a live fold says it is doing: the tool's formatted target when it
|
|
3113
|
+
* has one (`read_file src/x.ts`), otherwise the same vocabulary the
|
|
3114
|
+
* subagent marker tail uses (`thinking`, `tool call ×3`).
|
|
3115
|
+
*/
|
|
3116
|
+
function exchangeFoldActivity(events) {
|
|
3117
|
+
const last = events[events.length - 1];
|
|
3118
|
+
if (last && (last.kind === "tool" || last.kind === "tool-result") && last.tool) {
|
|
3119
|
+
const call = last.kind === "tool" ? last : [...events].reverse().find((e) => e.kind === "tool" && e.callId === last.callId);
|
|
3120
|
+
const target = call?.input ? formatToolCall(last.tool, call.input)?.target : void 0;
|
|
3121
|
+
if (target) return `${displayNameFor(last.tool)} ${target}`;
|
|
3122
|
+
}
|
|
3123
|
+
if (last?.kind === "spawn-start") return "delegating to a worker";
|
|
3124
|
+
if (last?.kind === "spawn-end") return "worker finished";
|
|
3125
|
+
return spawnActivity(events);
|
|
3126
|
+
}
|
|
2913
3127
|
function partitionTranscript(events, settings, searchReveal) {
|
|
2914
3128
|
const visible = collapseCompletedSpawnStarts(events).filter((event) => isVisible(event, settings) || searchReveal !== void 0 && (event.depth ?? 0) === 0 && searchReveal(event));
|
|
2915
3129
|
if (visible.length === 0) return [];
|
|
2916
|
-
const
|
|
3130
|
+
const compact = settings.transcriptDensity === "compact" && searchReveal === void 0;
|
|
3131
|
+
const groupKeys = compact ? computeExchangeFoldKeys(visible) : settings.groupToolCalls && searchReveal === void 0 ? computeToolGroupKeys(visible) : null;
|
|
3132
|
+
const groupKind = compact ? "exchange-fold" : "tool-group";
|
|
2917
3133
|
const groups = /* @__PURE__ */ new Map();
|
|
2918
3134
|
const items = [];
|
|
2919
3135
|
let lanes = /* @__PURE__ */ new Map();
|
|
@@ -2941,7 +3157,7 @@ function partitionTranscript(events, settings, searchReveal) {
|
|
|
2941
3157
|
if (group) group.events.push(event);
|
|
2942
3158
|
else {
|
|
2943
3159
|
const created = {
|
|
2944
|
-
kind:
|
|
3160
|
+
kind: groupKind,
|
|
2945
3161
|
key: groupKey,
|
|
2946
3162
|
events: [event],
|
|
2947
3163
|
previous: visible[i - 1]
|
|
@@ -23619,7 +23835,15 @@ function AppShell() {
|
|
|
23619
23835
|
artifactCatalogSessionRef.current = null;
|
|
23620
23836
|
}), [subscribeArtifacts]);
|
|
23621
23837
|
const [panelState, setPanelState] = useState(INITIAL_PANEL_STATE);
|
|
23622
|
-
const panelTabs = useMemo(() => buildPanelCatalog(filteredExtensionRegistry.panels, {
|
|
23838
|
+
const panelTabs = useMemo(() => buildPanelCatalog(filteredExtensionRegistry.panels, {
|
|
23839
|
+
showArtifacts: settings.artifacts !== false,
|
|
23840
|
+
omitBuiltins: [
|
|
23841
|
+
"inbox",
|
|
23842
|
+
"todos",
|
|
23843
|
+
"diffs",
|
|
23844
|
+
"files"
|
|
23845
|
+
]
|
|
23846
|
+
}), [filteredExtensionRegistry.panels, settings.artifacts]);
|
|
23623
23847
|
const activePanelTab = useMemo(() => resolveActiveTab(panelState, panelTabs), [panelState, panelTabs]);
|
|
23624
23848
|
const panelLoadCtx = useMemo(() => ({
|
|
23625
23849
|
...currentSession ? { sessionId: currentSession.id } : {},
|
|
@@ -25911,26 +26135,52 @@ function AppShell() {
|
|
|
25911
26135
|
if (!resumeProvider) return;
|
|
25912
26136
|
let cancelled = false;
|
|
25913
26137
|
(async () => {
|
|
26138
|
+
let storeError;
|
|
25914
26139
|
if (resumeLastSessionOnLaunch && lastResumedSessionId) {
|
|
25915
|
-
|
|
26140
|
+
let data = null;
|
|
26141
|
+
try {
|
|
26142
|
+
data = await store.load(lastResumedSessionId);
|
|
26143
|
+
} catch (err) {
|
|
26144
|
+
storeError = err;
|
|
26145
|
+
bootTick(`resume:load-failed (sessionId=${lastResumedSessionId.slice(-8)})`);
|
|
26146
|
+
}
|
|
25916
26147
|
if (data) demoteStaleRunningStatus(data);
|
|
25917
26148
|
if (cancelled) return;
|
|
25918
26149
|
const sessionMatchesProject = settings.showAllProjects || data?.projectRoot != null && data.projectRoot === projectDir;
|
|
25919
|
-
if (data && sessionMatchesProject) {
|
|
26150
|
+
if (data && sessionMatchesProject) try {
|
|
25920
26151
|
await activateSessionRef.current(lastResumedSessionId, resumeProvider.key);
|
|
25921
26152
|
bootTick(`resume:activate (sessionId=${lastResumedSessionId.slice(-8)})`);
|
|
25922
26153
|
return;
|
|
26154
|
+
} catch (err) {
|
|
26155
|
+
if (cancelled) return;
|
|
26156
|
+
storeError = err;
|
|
26157
|
+
bootTick(`resume:activate-failed (sessionId=${lastResumedSessionId.slice(-8)})`);
|
|
25923
26158
|
}
|
|
25924
26159
|
}
|
|
25925
|
-
|
|
26160
|
+
let list = [];
|
|
26161
|
+
try {
|
|
26162
|
+
list = await refreshSessionsRef.current();
|
|
26163
|
+
} catch (err) {
|
|
26164
|
+
storeError ??= err;
|
|
26165
|
+
bootTick("resume:list-failed");
|
|
26166
|
+
}
|
|
25926
26167
|
if (cancelled) return;
|
|
25927
|
-
if (list.length === 0) {
|
|
26168
|
+
if (list.length === 0) try {
|
|
25928
26169
|
await activateSessionRef.current(null, resumeProvider.key);
|
|
25929
26170
|
bootTick("resume:fresh-session (empty list)");
|
|
25930
|
-
}
|
|
26171
|
+
} catch (err) {
|
|
26172
|
+
storeError ??= err;
|
|
26173
|
+
bootTick("resume:fresh-session-failed");
|
|
26174
|
+
}
|
|
26175
|
+
else {
|
|
25931
26176
|
setScreen("sessions");
|
|
25932
26177
|
bootTick(`resume:sessions-list (${list.length})`);
|
|
25933
26178
|
}
|
|
26179
|
+
if (cancelled) return;
|
|
26180
|
+
if (storeError !== void 0) stream.appendImmediate({
|
|
26181
|
+
kind: "error",
|
|
26182
|
+
text: errorMessage(storeError)
|
|
26183
|
+
});
|
|
25934
26184
|
})();
|
|
25935
26185
|
return () => {
|
|
25936
26186
|
cancelled = true;
|