zidane 7.0.27 → 7.0.29

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 (56) hide show
  1. package/dist/{acp-C5O2YBst.js → acp-DcJRNtIr.js} +4 -4
  2. package/dist/{acp-C5O2YBst.js.map → acp-DcJRNtIr.js.map} +1 -1
  3. package/dist/acp-cli.js +5 -5
  4. package/dist/acp.js +1 -1
  5. package/dist/{agent-BjI9-PlG.js → agent-DSej5JPY.js} +60 -8
  6. package/dist/agent-DSej5JPY.js.map +1 -0
  7. package/dist/agent.js +1 -1
  8. package/dist/{anthropic-CUM2CjXS.js → anthropic-B4UmPm4H.js} +3 -3
  9. package/dist/{anthropic-CUM2CjXS.js.map → anthropic-B4UmPm4H.js.map} +1 -1
  10. package/dist/{approvals-xpcwa2UM.js → approvals-BOr8_M0D.js} +24 -8
  11. package/dist/approvals-BOr8_M0D.js.map +1 -0
  12. package/dist/{auth-BhbRmx2I.js → auth-DaBtlC8B.js} +5 -5
  13. package/dist/{auth-BhbRmx2I.js.map → auth-DaBtlC8B.js.map} +1 -1
  14. package/dist/chat.js +3 -3
  15. package/dist/daemon-cli.js +1 -1
  16. package/dist/eval.js +1 -1
  17. package/dist/extensions.js +1 -1
  18. package/dist/headless.js +3 -3
  19. package/dist/index-C0y2tSgk.d.ts.map +1 -1
  20. package/dist/index.js +6 -6
  21. package/dist/{ipc-PQ6PYI9f.js → ipc-Dmq3B7H6.js} +2 -2
  22. package/dist/{ipc-PQ6PYI9f.js.map → ipc-Dmq3B7H6.js.map} +1 -1
  23. package/dist/ipc.js +3 -3
  24. package/dist/{messages-aORUmIKe.js → messages-2jcOA_5R.js} +2 -2
  25. package/dist/{messages-aORUmIKe.js.map → messages-2jcOA_5R.js.map} +1 -1
  26. package/dist/{openai-compat-cIeLSED_.js → openai-compat-Dy56weK8.js} +28 -15
  27. package/dist/openai-compat-Dy56weK8.js.map +1 -0
  28. package/dist/presets.js +1 -1
  29. package/dist/providers/anthropic.js +1 -1
  30. package/dist/providers/arcee.js +1 -1
  31. package/dist/providers/baseten.js +1 -1
  32. package/dist/providers/cerebras.js +1 -1
  33. package/dist/providers/local.js +1 -1
  34. package/dist/providers/openai-compat.js +1 -1
  35. package/dist/providers/openai.js +2 -2
  36. package/dist/providers/openrouter.js +1 -1
  37. package/dist/providers/xai.js +1 -1
  38. package/dist/{providers-DPygcIX3.js → providers-DP9kwXYo.js} +2 -2
  39. package/dist/{providers-DPygcIX3.js.map → providers-DP9kwXYo.js.map} +1 -1
  40. package/dist/providers.js +3 -3
  41. package/dist/restate.js +2 -2
  42. package/dist/{server-riQevPg-.js → server-DM3yjH5O.js} +5 -5
  43. package/dist/{server-riQevPg-.js.map → server-DM3yjH5O.js.map} +1 -1
  44. package/dist/{session-23Stp71-.js → session-CVy-2mAy.js} +2 -2
  45. package/dist/{session-23Stp71-.js.map → session-CVy-2mAy.js.map} +1 -1
  46. package/dist/session.js +2 -2
  47. package/dist/tools.js +1 -1
  48. package/dist/transcript-anchors-BHyrChoO.d.ts.map +1 -1
  49. package/dist/tui.d.ts.map +1 -1
  50. package/dist/tui.js +40 -12
  51. package/dist/tui.js.map +1 -1
  52. package/docs/ARTIFACTS.md +5 -0
  53. package/package.json +1 -1
  54. package/dist/agent-BjI9-PlG.js.map +0 -1
  55. package/dist/approvals-xpcwa2UM.js.map +0 -1
  56. package/dist/openai-compat-cIeLSED_.js.map +0 -1
package/dist/tui.js CHANGED
@@ -1,6 +1,6 @@
1
- import { C as estimateRebilledCostUsd } from "./openai-compat-cIeLSED_.js";
1
+ import { C as estimateRebilledCostUsd } from "./openai-compat-Dy56weK8.js";
2
2
  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-BjI9-PlG.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
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";
5
5
  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
6
  import { n as appendCapped } from "./output-cap-C9zukcCj.js";
@@ -12,7 +12,7 @@ import { a as createRingBufferSink, c as logFileTimestamp, i as createLoggingHoo
12
12
  import { i as sniffImageMediaType } from "./media-sniff-UKijEaiQ.js";
13
13
  import { _ as hasAuthorizationHeader, h as McpOAuthProvider, n as connectMcpServers, s as nonOwningMcpView } from "./mcp-BIWa57eY.js";
14
14
  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-23Stp71-.js";
15
+ import { a as getExtensionSessionState, c as setExtensionSessionState, i as demoteStaleRunningStatus, o as loadSession, t as createSession } from "./session-CVy-2mAy.js";
16
16
  import { t as effectiveInputFromTurn } from "./stats-DAKBEKjc.js";
17
17
  import { s as withTimeout } from "./timeout-CjOG2mea.js";
18
18
  import { i as installCacheBreakLogger } from "./cache-telemetry-ehVdWsg2.js";
@@ -20,9 +20,9 @@ import { s as resolveCompletionSubmit } from "./completion-core-BRo86R_L.js";
20
20
  import { n as JsonRpcRemoteError, t as JsonRpcConnectionClosedError } from "./json-rpc-rSWMUh9b.js";
21
21
  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
22
  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-xpcwa2UM.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-BhbRmx2I.js";
25
- import { a as connectIpcClient, d as defaultSocketPath, f as ensureDaemonRunning, m as selfDaemonSpawnCommand, o as connectOrSpawnDaemon } from "./server-riQevPg-.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";
26
26
  import { createDockerContext } from "./contexts/docker.js";
27
27
  import { createTuiStore } from "./session/sqlite.js";
28
28
  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";
@@ -47,6 +47,28 @@ import * as OpenTuiReactJsxDevRuntime from "@opentui/react/jsx-dev-runtime";
47
47
  import * as OpenTuiReactJsxRuntime from "@opentui/react/jsx-runtime";
48
48
  import { Fragment, jsx as jsx$1, jsxs } from "@opentui/react/jsx-runtime";
49
49
  import * as ReactJsxDevRuntime from "react/jsx-dev-runtime";
50
+ //#region src/chat/artifact-editor.ts
51
+ /** The caller owns the terminal; always give it back, including failed launches. */
52
+ function openArtifactFile(path, options) {
53
+ const env = options.env ?? process.env;
54
+ const [command, ...args] = parseEditorCommand((env.VISUAL ?? "").trim() || (env.EDITOR ?? "").trim());
55
+ if (!command) {
56
+ options.openDefault(path);
57
+ return;
58
+ }
59
+ options.suspend();
60
+ try {
61
+ const result = (options.launch ?? ((cmd, argv) => spawnSync(cmd, argv, {
62
+ stdio: "inherit",
63
+ shell: false
64
+ })))(command, [...args, path]);
65
+ if (result.error) throw result.error;
66
+ if (result.status !== 0) throw new Error(`Editor exited with status ${result.status ?? "unknown"}`);
67
+ } finally {
68
+ options.resume();
69
+ }
70
+ }
71
+ //#endregion
50
72
  //#region src/tui/clickable.tsx
51
73
  /** Glyph / word aliases → OpenTUI key names (`parse.keypress` conventions). */
52
74
  const KEY_NAME_ALIASES = {
@@ -643,7 +665,7 @@ function ArtifactsModal({ load, subscribe, registry, initialScope = "session", p
643
665
  return;
644
666
  }
645
667
  if (key.name === "c") {
646
- if (focused && onCopy) onCopy(focused.row.href ?? focused.artifact.uri);
668
+ if (focused && onCopy) onCopy(focused.artifact.kind === "commit" ? focused.artifact.uri.replace(/^git:commit:/, "") : focused.row.href ?? focused.artifact.uri);
647
669
  return;
648
670
  }
649
671
  if (key.name === "j") {
@@ -22827,12 +22849,18 @@ function AppShell() {
22827
22849
  tryOpenBrowser(href);
22828
22850
  return;
22829
22851
  }
22830
- let isDirectory = false;
22831
22852
  try {
22832
- isDirectory = statSync(href).isDirectory();
22833
- } catch {}
22834
- tryRevealPath(href, isDirectory);
22835
- }, []);
22853
+ const stat = statSync(href);
22854
+ if (stat.isDirectory()) tryRevealPath(href, true);
22855
+ else if (stat.isFile()) openArtifactFile(href, {
22856
+ suspend: () => renderer.suspend(),
22857
+ resume: () => renderer.resume(),
22858
+ openDefault: tryOpenBrowser
22859
+ });
22860
+ } catch (err) {
22861
+ debugLog("open artifact failed", err);
22862
+ }
22863
+ }, [renderer]);
22836
22864
  const sessionTitleByIdRef = useRef(() => void 0);
22837
22865
  sessionTitleByIdRef.current = (id) => sessions.find((s) => s.id === id)?.title;
22838
22866
  const projectDirRef = useRef(projectDir);