@chatcode/chatcode-cli 3.0.4-rc.7 → 3.0.5-rc.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.
Files changed (143) hide show
  1. package/README.i18n.yaml +6 -6
  2. package/README.md +10 -4
  3. package/README.zh.md +10 -4
  4. package/lib/bin.js +23 -9
  5. package/lib/{command-errors-Ca64Lgba.js → command-errors-CsRCh0gk.js} +12 -12
  6. package/lib/{command-trees-CVc4Xu_z.js → command-trees-CD_43rxX.js} +2 -2
  7. package/lib/{component-identity-6aEut5Yt.js → component-identity-DGA2-TeB.js} +3 -3
  8. package/lib/{dump-config-ZzrfvtnX.js → dump-config-D8kXfdTs.js} +1 -1
  9. package/lib/dump-config-DuCc-QB7.js +2 -0
  10. package/lib/{dump-config-schema-BlO-eZ-J.js → dump-config-schema-CtZbroi6.js} +2 -2
  11. package/lib/{extension-events-C7MUpqVE.js → extension-events-D0BjYRqT.js} +21 -21
  12. package/lib/{host-access-CLbyAGT5.js → host-access-DLJjuR07.js} +1 -1
  13. package/lib/{keymap-82JwLLHe.js → keymap-C4cs2IBN.js} +2 -2
  14. package/lib/{plugin-BlQlWIR5.js → plugin-CGtTByud.js} +801 -456
  15. package/lib/{plugin-BZdazFXS.js → plugin-CYw-MBRn.js} +1 -1
  16. package/lib/{profile-boot-B0aEEQIR.js → profile-boot-CffsubnV.js} +7 -7
  17. package/lib/profile-boot.js +1 -1
  18. package/lib/{scenes-BNS0ZFyQ.js → scenes-CbAGK5Uy.js} +3 -3
  19. package/lib/{settings-sections-CXH24cu5.js → settings-sections-DYKDa04e.js} +3 -3
  20. package/lib/{statusBarSettings-BAMzn8fX.js → statusBarSettings-T1m8xad4.js} +3 -3
  21. package/lib/{themes-DXUIvP7m.js → themes-BY2ui1Dv.js} +12 -12
  22. package/lib/tui-compat-command-trees.js +1 -1
  23. package/lib/tui-compat-extensions.js +3 -3
  24. package/lib/tui-compat-plugin-host.js +5 -5
  25. package/lib/tui-compat-scenes.js +1 -1
  26. package/lib/tui-compat-settings-sections.js +1 -1
  27. package/lib/tui-compat-working-activity.js +1 -1
  28. package/lib/tui-compat-workspaces.js +1 -1
  29. package/lib/tui-compat.js +7 -7
  30. package/lib/types/bin.d.ts +9 -0
  31. package/lib/types/tui-compat.d.ts +1 -1
  32. package/lib/types/web-instance-process.d.ts +20 -0
  33. package/lib/{web-instance-DbP7IHPv.js → web-instance-D_Ppi2Zo.js} +176 -14
  34. package/lib/{web-instance-B0jec7cq.js → web-instance-amvCJWnq.js} +1 -1
  35. package/lib/{workspaces-CUJXNU5W.js → workspaces-D5VKbESy.js} +2 -2
  36. package/package.json +28 -29
  37. package/runtime/manifest.json +2 -2
  38. package/runtime/node_modules/@deepseek-ai/dsh-agent-default-model/lib/index.js +7 -3
  39. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/client.js +11 -3
  40. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/contract/snapshot.d.ts +1 -0
  41. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/sessions/assistant-stream.d.ts +2 -0
  42. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/sessions/assistant-stream.js +4 -0
  43. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/client/sessions/session.js +10 -3
  44. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/index.js +32 -11
  45. package/runtime/node_modules/@deepseek-ai/dsh-atomic-write/lib/index.js +62 -11
  46. package/runtime/node_modules/@deepseek-ai/dsh-atomic-write/lib/types/darwin-lock.d.ts +7 -0
  47. package/runtime/node_modules/@deepseek-ai/dsh-atomic-write/lib/types/index.d.ts +7 -2
  48. package/runtime/node_modules/@deepseek-ai/dsh-atomic-write/lib/types/linux-lock.d.ts +1 -1
  49. package/runtime/node_modules/@deepseek-ai/dsh-client-locale/lib/client.js +7 -7
  50. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-agent-preset/lib/client.js +62 -62
  51. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-approval/lib/client.js +10 -10
  52. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-attachment/lib/client.js +49 -49
  53. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-chat/lib/client.js +204 -204
  54. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-commands/lib/client.js +16 -16
  55. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js +159 -157
  56. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/types/client/service.d.ts +4 -2
  57. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-cordis/lib/client.js +74 -74
  58. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/client.js +129 -123
  59. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/index.js +19 -14
  60. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/changes.d.ts +2 -2
  61. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/client/Deliverables.d.ts +1 -2
  62. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/client/locales.d.ts +2 -1
  63. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/lib/types/client/present-open.d.ts +1 -1
  64. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-deliverables/package.json +2 -4
  65. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-directory-picker-browse/lib/client.js +39 -39
  66. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-goal/lib/client.js +16 -16
  67. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-input-trigger/lib/client.js +23 -23
  68. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-jobs/lib/client.js +37 -37
  69. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-layout/lib/client.js +9 -9
  70. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-message-feedback/lib/client.js +12 -12
  71. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/client.js +119 -32
  72. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/catalog.d.ts +13 -0
  73. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/directory.d.ts +2 -0
  74. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/effort-preferences.d.ts +20 -0
  75. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/slots.d.ts +2 -1
  76. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-open-in-app/lib/client.js +8 -8
  77. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-permission-presets/lib/client.js +18 -18
  78. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-plan/lib/client.js +22 -22
  79. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-plugin-manager/lib/client.js +128 -128
  80. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-schedule/lib/client.js +182 -182
  81. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-account/lib/client.js +130 -130
  82. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/client.js +50 -50
  83. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js +88 -88
  84. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/lib/client.js +36 -36
  85. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-plugins/lib/client.js +13 -13
  86. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-subagent/lib/client.js +27 -27
  87. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-shortcuts/lib/client.js +42 -42
  88. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar/lib/client.js +44 -46
  89. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-browser/lib/client.js +25 -25
  90. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/lib/client.excel.js +9 -9
  91. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/lib/client.js +70 -70
  92. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/lib/client.pdf.js +9 -9
  93. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-files/lib/client.js +18 -18
  94. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-right/lib/client.js +26 -26
  95. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-terminal/lib/client.js +16 -16
  96. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar-terminal/lib/client.terminal.js +11 -11
  97. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-skill/lib/client.js +20 -20
  98. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-subagent/lib/client.js +37 -37
  99. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-theme/lib/client.js +27 -27
  100. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-tool/lib/client.js +95 -95
  101. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-trajectory/lib/client.js +197 -197
  102. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-user-questions/lib/client.js +49 -49
  103. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workflow-run/lib/client.js +24 -24
  104. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/client.js +656 -152
  105. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/ArchivedSessions.d.ts +9 -2
  106. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/locales.d.ts +46 -0
  107. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/session-actions/DeleteSession.d.ts +9 -10
  108. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/session-actions/deletion.d.ts +57 -0
  109. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/package.json +2 -0
  110. package/runtime/node_modules/@deepseek-ai/dsh-experimental-client-ui-agent-team/lib/client.js +32 -32
  111. package/runtime/node_modules/@deepseek-ai/dsh-experimental-client-ui-voice-input/lib/client.js +24 -24
  112. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/index.js +899 -453
  113. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/adapter.d.ts +4 -20
  114. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/adapter.d.ts +8 -0
  115. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/serialize.d.ts +10 -0
  116. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/sse.d.ts +24 -0
  117. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/translate.d.ts +37 -0
  118. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/chat-completions/types.d.ts +159 -0
  119. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/file-store.d.ts +3 -0
  120. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/files-api.d.ts +4 -0
  121. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/index.d.ts +1 -0
  122. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/protocol-adapter.d.ts +41 -0
  123. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/protocol.d.ts +35 -0
  124. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/transport.d.ts +2 -1
  125. package/runtime/node_modules/@deepseek-ai/dsh-llm-deepseek/lib/types/types.d.ts +2 -2
  126. package/runtime/node_modules/@deepseek-ai/dsh-mcp-client/lib/index.js +5 -4
  127. package/runtime/node_modules/@deepseek-ai/dsh-session-log-export/lib/client.js +4 -4
  128. package/runtime/node_modules/@deepseek-ai/dsh-session-log-export/lib/index.js +1 -1
  129. package/runtime/node_modules/@deepseek-ai/dsh-session-persistence-jsonl/lib/index.js +2 -2
  130. package/runtime/node_modules/@deepseek-ai/dsh-tool-cordis/lib/types/api-catalog.js +12 -10
  131. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/index.js +208 -39
  132. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/archive.d.ts +47 -0
  133. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/archive.js +129 -0
  134. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/index.d.ts +2 -0
  135. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/index.js +31 -8
  136. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/recorder.d.ts +7 -2
  137. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/recorder.js +35 -19
  138. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/lib/types/types.d.ts +11 -10
  139. package/runtime/node_modules/@deepseek-ai/dsh-workspace-changes/package.json +1 -0
  140. package/scripts/link-embedded-runtime.mjs +1 -1
  141. package/lib/dump-config-CDixiJNt.js +0 -2
  142. package/lib/{home-migration-BjDmRwBB.js → home-migration-lRjtl2fP.js} +1 -1
  143. package/lib/{startup-diagnostics-C_hRCp-q.js → startup-diagnostics-4mLHYTFc.js} +1 -1
@@ -1,22 +1,22 @@
1
1
  import { i as __toESM, n as __exportAll, r as __require, t as __commonJSMin } from "./rolldown-runtime-2rV9d50f.js";
2
- import { _ as settingsValue, a as formatContextUsage, c as normalizePageMargin, d as normalizeToolBackground, f as parsePageMarginSpec, h as displaySettingsScope, i as applyPageMargin, l as normalizeScrollGutter, m as subscribePageMargin, n as createStatusBarSchema, o as getPageMarginSetting, p as resolvePageMargin, s as isPageMarginMode, t as STATUS_BAR_FIELDS, u as normalizeStatusBar } from "./statusBarSettings-BAMzn8fX.js";
3
- import { a as draftComboConflict, d as setKeymapOverrides, f as isMod, h as modLabel, l as parseComboDraft, m as isPlainReturnInput, n as actionMatches, o as effectiveComboString, p as isPlainReturn, t as SHORTCUT_ACTIONS } from "./keymap-82JwLLHe.js";
4
- import { c as withHostRootCapability } from "./host-access-CLbyAGT5.js";
5
- import { i as getHostWorkspaceRuntime, r as createLocalWorkspaceRuntime } from "./workspaces-CUJXNU5W.js";
6
- import { n as getHostCommandTrees } from "./command-trees-CVc4Xu_z.js";
7
- import { a as isReservedCredentialRef, n as getHostSettingsSections, r as getLocalSettingsSectionsHost } from "./settings-sections-CXH24cu5.js";
8
- import { n as getHostSceneRuntime } from "./scenes-BNS0ZFyQ.js";
9
- import { A as tuiEnvName, C as LEGACY_DATA_DIR, D as homeDir, E as detectLegacyEnv, J as parseManifest, M as loadSpecData, O as readTuiEnv, S as DATA_DIR, T as RENAMED_ENV, Y as projectManifest, _ as stripAnsi$1, a as normalizeCancelDecision, b as isWide, c as installDecisionGuard, d as capCells, f as cleanRenderText, g as getGraphemeSegmenter, h as stringWidth$1, i as dispatchTuiNotification, k as resolveChatCodeCliHome, m as flattenInline, p as cleanScalarText, r as dispatchTuiDecision, v as eastAsianWidth, w as PRE_DSH_TUI_DATA_DIR, x as readGrantStore, y as isFullWidth } from "./extension-events-C7MUpqVE.js";
10
- import { A as validatePlugin, D as buildHostDescriptor, O as negotiate, _ as getHostMessageObserver, a as commandOwner, k as createContractIndex, n as hasCommandErrorCode, r as mapCommandError, w as EFFECT_LEDGER_FILE } from "./command-errors-Ca64Lgba.js";
11
- import { D as getHostStatusStore, E as TuiStatusStore, M as getHostDialogStore, S as getHostShortcuts, a as listCustomThemes, b as getHostRenderers, c as THEME_NAMES, d as getTheme, f as isLightThemeActive, g as setAutoThemeBase, h as setActiveThemeName, i as isSafeThemeName, j as TuiDialogStore, l as getActiveTheme, m as registerCustomThemeResolver, n as getHostThemes, o as resolveCustomTheme, p as isThemeAvailable, r as buildTheme, s as AUTO_THEME_NAME, u as getAutoThemeBase, v as getHostToastStore } from "./themes-DXUIvP7m.js";
2
+ import { _ as settingsValue, a as formatContextUsage, c as normalizePageMargin, d as normalizeToolBackground, f as parsePageMarginSpec, h as displaySettingsScope, i as applyPageMargin, l as normalizeScrollGutter, m as subscribePageMargin, n as createStatusBarSchema, o as getPageMarginSetting, p as resolvePageMargin, s as isPageMarginMode, t as STATUS_BAR_FIELDS, u as normalizeStatusBar } from "./statusBarSettings-T1m8xad4.js";
3
+ import { a as draftComboConflict, d as setKeymapOverrides, f as isMod, h as modLabel, l as parseComboDraft, m as isPlainReturnInput, n as actionMatches, o as effectiveComboString, p as isPlainReturn, t as SHORTCUT_ACTIONS } from "./keymap-C4cs2IBN.js";
4
+ import { c as withHostRootCapability } from "./host-access-DLJjuR07.js";
5
+ import { i as getHostWorkspaceRuntime, r as createLocalWorkspaceRuntime } from "./workspaces-D5VKbESy.js";
6
+ import { n as getHostCommandTrees } from "./command-trees-CD_43rxX.js";
7
+ import { a as isReservedCredentialRef, n as getHostSettingsSections, r as getLocalSettingsSectionsHost } from "./settings-sections-DYKDa04e.js";
8
+ import { n as getHostSceneRuntime } from "./scenes-CbAGK5Uy.js";
9
+ import { A as tuiEnvName, C as LEGACY_DATA_DIR, D as homeDir, E as detectLegacyEnv, J as parseManifest, M as loadSpecData, O as readTuiEnv, S as DATA_DIR, T as RENAMED_ENV, Y as projectManifest, _ as stripAnsi$1, a as normalizeCancelDecision, b as isWide, c as installDecisionGuard, d as capCells, f as cleanRenderText, g as getGraphemeSegmenter, h as stringWidth$1, i as dispatchTuiNotification, k as resolveChatCodeCliHome, m as flattenInline, p as cleanScalarText, r as dispatchTuiDecision, v as eastAsianWidth, w as PRE_DSH_TUI_DATA_DIR, x as readGrantStore, y as isFullWidth } from "./extension-events-D0BjYRqT.js";
10
+ import { A as validatePlugin, D as buildHostDescriptor, O as negotiate, _ as getHostMessageObserver, a as commandOwner, k as createContractIndex, n as hasCommandErrorCode, r as mapCommandError, w as EFFECT_LEDGER_FILE } from "./command-errors-CsRCh0gk.js";
11
+ import { D as getHostStatusStore, E as TuiStatusStore, M as getHostDialogStore, S as getHostShortcuts, a as listCustomThemes, b as getHostRenderers, c as THEME_NAMES, d as getTheme, f as isLightThemeActive, g as setAutoThemeBase, h as setActiveThemeName, i as isSafeThemeName, j as TuiDialogStore, l as getActiveTheme, m as registerCustomThemeResolver, n as getHostThemes, o as resolveCustomTheme, p as isThemeAvailable, r as buildTheme, s as AUTO_THEME_NAME, u as getAutoThemeBase, v as getHostToastStore } from "./themes-BY2ui1Dv.js";
12
12
  import { a as resolvePreset, i as isPresetName, n as FRAME_PRESETS, o as ActivityTracker, r as PRESET_NAMES, t as DEFAULT_PRESET } from "./frames-B89znn_0.js";
13
13
  import { n as require_has_flag, t as require_supports_color } from "./supports-color-CcW-FGjr.js";
14
14
  import { createRequire, findPackageJSON } from "node:module";
15
15
  import { appendFileSync, chmodSync, closeSync, constants, copyFileSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
16
+ import { createHash, randomUUID } from "node:crypto";
16
17
  import { fileURLToPath, pathToFileURL } from "node:url";
17
18
  import os, { homedir, tmpdir } from "node:os";
18
19
  import { basename, delimiter, dirname, extname, isAbsolute, join, resolve, sep, win32 } from "node:path";
19
- import { createHash, randomUUID } from "node:crypto";
20
20
  import { chmod, mkdir, mkdtemp, open, readFile, rename, rm, stat, unlink, writeFile } from "node:fs/promises";
21
21
  import Schema from "@deepseek-ai/schemastery";
22
22
  import { createServer } from "node:net";
@@ -1198,7 +1198,7 @@ var require_react = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1198
1198
  else module.exports = require_react_development();
1199
1199
  }));
1200
1200
  //#endregion
1201
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sideQuestion.js
1201
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sideQuestion.js
1202
1202
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
1203
1203
  /**
1204
1204
  * Side Question (`/btw`) — CC's btw.tsx/sideQuestion.ts semantics on the
@@ -1268,7 +1268,7 @@ async function runSideQuestion(params) {
1268
1268
  return { answer };
1269
1269
  }
1270
1270
  //#endregion
1271
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/recap.js
1271
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/recap.js
1272
1272
  /**
1273
1273
  * Session recap (`/recap`, pi-recap semantics): a single TOOL-LESS LLM
1274
1274
  * call that summarizes the session's RECENT activity into one line and
@@ -1381,7 +1381,7 @@ function parseRecapResponse(raw) {
1381
1381
  return { summary: raw.trim() };
1382
1382
  }
1383
1383
  //#endregion
1384
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/log.js
1384
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/log.js
1385
1385
  /**
1386
1386
  * Error logger for the ported Ink core. Always writes to stderr (an Ink
1387
1387
  * renderer failure must never pass silently).
@@ -1392,7 +1392,7 @@ function logError(error) {
1392
1392
  process.stderr.write(`[ChatCode CLI TUI] ${text}\n`);
1393
1393
  }
1394
1394
  //#endregion
1395
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/update-overflow-guard.js
1395
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/update-overflow-guard.js
1396
1396
  /**
1397
1397
  * Self-healing guard for React's nested-update overflow — Minified React
1398
1398
  * error #185 ("Maximum update depth exceeded").
@@ -1535,7 +1535,7 @@ function installNestedUpdateOverflowProcessGuard() {
1535
1535
  });
1536
1536
  }
1537
1537
  //#endregion
1538
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/sessionColors.js
1538
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/sessionColors.js
1539
1539
  /**
1540
1540
  * Session accent colors for `/color` (CC's /color semantics): a small
1541
1541
  * named palette that overrides the prompt-input border (and its session
@@ -1576,7 +1576,7 @@ function sessionColorHex(name) {
1576
1576
  return isValidSessionColor(name) ? SESSION_COLORS[name] : void 0;
1577
1577
  }
1578
1578
  //#endregion
1579
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/deepseekPricing.js
1579
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/deepseekPricing.js
1580
1580
  /**
1581
1581
  * 是否处于高峰计费时段:北京时间周一至周五 9:00-12:00、14:00-18:00。
1582
1582
  * 北京时间为 UTC+8 固定偏移(无夏令时),用 UTC 时刻加偏移换算。
@@ -1595,7 +1595,7 @@ Object.freeze({
1595
1595
  cacheWrite: 0
1596
1596
  });
1597
1597
  //#endregion
1598
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/i18n.js
1598
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/i18n.js
1599
1599
  /**
1600
1600
  * dsh-tui localization — UI strings for Chinese (`zh`, the default) and
1601
1601
  * English (`en`).
@@ -2591,6 +2591,18 @@ const dict = {
2591
2591
  zh: "导出失败(无法写入工作目录)",
2592
2592
  en: "Export failed (cannot write to working directory)"
2593
2593
  },
2594
+ "export-usage": {
2595
+ zh: "用法:/export [jsonl|markdown](默认 JSONL,可重新导入)",
2596
+ en: "Usage: /export [jsonl|markdown] (default: re-importable JSONL)"
2597
+ },
2598
+ "export-import-hint": {
2599
+ zh: "导入命令(需要会话导入插件):/import cco {{target}}",
2600
+ en: "Import command (requires the chat import plugin): /import cco {{target}}"
2601
+ },
2602
+ "import-running": {
2603
+ zh: "正在导入会话,请稍候…",
2604
+ en: "Importing sessions, please wait…"
2605
+ },
2594
2606
  "export-saved": {
2595
2607
  zh: "已导出: {{target}}(文件位于当前工作区,若工作区在同步/共享目录请注意清理)",
2596
2608
  en: "Exported: {{target}} (the file lives in the current workspace — clean it up promptly if the workspace is synced or shared)"
@@ -2688,8 +2700,8 @@ const dict = {
2688
2700
  en: "Checking ChatCode availability…"
2689
2701
  },
2690
2702
  "startup-gate-service-missing": {
2691
- zh: "ChatCode 启动检查服务未能启动;请重新构建 dsh-llm-chatcode-config。",
2692
- en: "The ChatCode startup check service did not start; rebuild dsh-llm-chatcode-config."
2703
+ zh: "ChatCode 启动检查服务未能启动;请重新构建 cco-llm-chatcode-config。",
2704
+ en: "The ChatCode startup check service did not start; rebuild cco-llm-chatcode-config."
2693
2705
  },
2694
2706
  "startup-gate-check-failed": {
2695
2707
  zh: "无法执行 ChatCode 启动检查;请检查 CVP 地址和启动配置凭证。",
@@ -2724,8 +2736,8 @@ const dict = {
2724
2736
  en: "The previous ChatCode sign-in is unfinished; reopening the sign-in page…"
2725
2737
  },
2726
2738
  "login-gate-service-missing": {
2727
- zh: "已配置 ChatCode 登录 bundle,但鉴权服务未能启动。请重新构建 dsh-llm-chatcode-config 后重试。",
2728
- en: "The ChatCode sign-in bundle is configured, but its auth service did not start. Rebuild dsh-llm-chatcode-config and try again."
2739
+ zh: "已配置 ChatCode 登录 bundle,但鉴权服务未能启动。请重新构建 cco-llm-chatcode-config 后重试。",
2740
+ en: "The ChatCode sign-in bundle is configured, but its auth service did not start. Rebuild cco-llm-chatcode-config and try again."
2729
2741
  },
2730
2742
  "login-gate-status-failed": {
2731
2743
  zh: "无法读取 ChatCode 登录状态;请检查 ~/.chatcode-cli 凭据文件权限。",
@@ -3176,7 +3188,7 @@ const dict = {
3176
3188
  en: "{{usage}} · {{percent}}% of context"
3177
3189
  },
3178
3190
  "token-dashboard-today": {
3179
- zh: "今日总Toekn消耗",
3191
+ zh: "今日总Token消耗",
3180
3192
  en: "Total tokens today"
3181
3193
  },
3182
3194
  "token-dashboard-context": {
@@ -3667,6 +3679,14 @@ const dict = {
3667
3679
  zh: "已恢复会话",
3668
3680
  en: "Session resumed"
3669
3681
  },
3682
+ "resume-delete-confirm": {
3683
+ zh: "永久删除 {{n}} 条记录(含子代理):「{{name}}」?无法撤销。",
3684
+ en: "Permanently delete {{n}} records: \"{{name}}\"? Cannot undo."
3685
+ },
3686
+ "resume-deleted": {
3687
+ zh: "已删除会话「{{name}}」",
3688
+ en: "Deleted session {{name}}"
3689
+ },
3670
3690
  "resume-archived": {
3671
3691
  zh: "已归档会话「{{name}}」",
3672
3692
  en: "Archived session {{name}}"
@@ -3679,6 +3699,10 @@ const dict = {
3679
3699
  zh: "无法归档会话「{{name}}」",
3680
3700
  en: "Could not archive session {{name}}"
3681
3701
  },
3702
+ "resume-delete-failed": {
3703
+ zh: "无法删除会话「{{name}}」",
3704
+ en: "Could not delete session {{name}}"
3705
+ },
3682
3706
  "resume-rename-placeholder": {
3683
3707
  zh: "新的会话名称…",
3684
3708
  en: "New session name…"
@@ -3704,13 +3728,25 @@ const dict = {
3704
3728
  en: "Restore"
3705
3729
  },
3706
3730
  "resume-hint-archived-list": {
3707
- zh: "**Enter** 恢复 · {{mod}}+E 返回",
3708
- en: "**Enter** restore · {{mod}}+E back"
3731
+ zh: "**Enter** 恢复 · {{mod}}d 永久删除 · {{mod}}e 返回",
3732
+ en: "**Enter** restore · {{mod}}d delete permanently · {{mod}}e back"
3733
+ },
3734
+ "resume-hint-archived-short": {
3735
+ zh: "**Enter** 恢复 · {{mod}}e 返回",
3736
+ en: "**Enter** restore · {{mod}}e back"
3737
+ },
3738
+ "resume-hint-permanent-delete": {
3739
+ zh: "**Tab / ← →** 选择 · **Enter** 确认 · Esc 取消",
3740
+ en: "**Tab / ← →** choose · **Enter** confirm · Esc cancel"
3709
3741
  },
3710
3742
  "resume-hint-archive": {
3711
3743
  zh: "**Enter** 归档 · Esc 取消",
3712
3744
  en: "**Enter** archive · Esc cancel"
3713
3745
  },
3746
+ "resume-delete-unavailable": {
3747
+ zh: "共享会话删除服务不可用,请更新主程序",
3748
+ en: "Shared session deletion is unavailable; update the Host"
3749
+ },
3714
3750
  "resume-restored": {
3715
3751
  zh: "已恢复会话「{{name}}」",
3716
3752
  en: "Restored session {{name}}"
@@ -6181,7 +6217,7 @@ const dict = {
6181
6217
  "cmd-desc-tree": { zh: "浏览会话分叉树(回退/分叉/切分支)" },
6182
6218
  "cmd-desc-fork": { zh: "把当前会话分叉为可恢复副本" },
6183
6219
  "cmd-desc-branch": { zh: "分叉当前会话,并可指定副本标题" },
6184
- "cmd-desc-export": { zh: "导出会话为 Markdown 文件" },
6220
+ "cmd-desc-export": { zh: "导出可重新导入的 JSONL 会话(或 Markdown)" },
6185
6221
  "cmd-desc-copy": { zh: "复制最近的助手回复或其中的代码块" },
6186
6222
  "cmd-desc-context": { zh: "查看已加载的上下文明细" },
6187
6223
  "cmd-desc-files": { zh: "列出已加载到会话上下文的指令文件" },
@@ -6508,7 +6544,7 @@ function resolveStartupLang(dir = PREFS_DIR$6, env = process.env) {
6508
6544
  return readLangPref(dir) ?? "zh";
6509
6545
  }
6510
6546
  //#endregion
6511
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/commands.js
6547
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/commands.js
6512
6548
  /**
6513
6549
  * Local slash commands for the dsh-tui TUI. Claude Code's command system is
6514
6550
  * deeply wired into its engine; dsh-tui ships a small built-in set with the
@@ -6573,7 +6609,17 @@ const LOCAL_COMMANDS = [
6573
6609
  },
6574
6610
  {
6575
6611
  name: "export",
6576
- description: "Export the conversation to a markdown file"
6612
+ description: "Export a re-importable JSONL session (or Markdown)",
6613
+ argumentSuggestions: [{
6614
+ name: "jsonl",
6615
+ description: "Export a session for /import cco",
6616
+ descriptions: { zh: "导出可用 /import cco 导入的会话" }
6617
+ }, {
6618
+ name: "markdown",
6619
+ aliases: ["md"],
6620
+ description: "Export readable Markdown",
6621
+ descriptions: { zh: "导出便于阅读的 Markdown" }
6622
+ }]
6577
6623
  },
6578
6624
  {
6579
6625
  name: "copy",
@@ -6972,7 +7018,7 @@ function matchingCompletionToken(candidate, prefix) {
6972
7018
  return candidate.aliases?.find((alias) => alias.toLowerCase().startsWith(prefix));
6973
7019
  }
6974
7020
  //#endregion
6975
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessionHistory.js
7021
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessionHistory.js
6976
7022
  /**
6977
7023
  * Launcher contract for `dsh-tui --resume`: the TUI writes the chosen session
6978
7024
  * id to `<CHATCODE_CLI_HOME>/tui/resume.txt`, and the launcher feeds it back as
@@ -7139,7 +7185,7 @@ function forgetAgentViewSession(sessionId) {
7139
7185
  } catch {}
7140
7186
  }
7141
7187
  //#endregion
7142
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessionTags.js
7188
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessionTags.js
7143
7189
  /**
7144
7190
  * One searchable local tag per persisted session.
7145
7191
  *
@@ -7289,7 +7335,7 @@ function forgetSessionTag(sessionId, dir = DATA_DIR) {
7289
7335
  return setSessionTag(sessionId, void 0, dir).ok;
7290
7336
  }
7291
7337
  //#endregion
7292
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compat/liveSession.js
7338
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compat/liveSession.js
7293
7339
  /**
7294
7340
  * Live Session compatibility facade.
7295
7341
  *
@@ -7451,7 +7497,7 @@ function liveSessionCreateOptions(request) {
7451
7497
  };
7452
7498
  }
7453
7499
  //#endregion
7454
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compat/sessionLog.js
7500
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compat/sessionLog.js
7455
7501
  /**
7456
7502
  * Legacy third-party session-event types the TUI vouches for as ephemeral
7457
7503
  * UI frames — safe for the strict read path to accept and skip. Exported
@@ -8143,7 +8189,7 @@ function appendSessionTitle(sessionId, title) {
8143
8189
  }
8144
8190
  }
8145
8191
  //#endregion
8146
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compat/sessionEvent.js
8192
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compat/sessionEvent.js
8147
8193
  /** Narrow an unknown/session event to the retired durable chunk envelope. */
8148
8194
  function legacyAssistantChunkOf(event) {
8149
8195
  if (event === null || typeof event !== "object") return void 0;
@@ -8157,7 +8203,7 @@ function legacyAssistantChunkOf(event) {
8157
8203
  return event;
8158
8204
  }
8159
8205
  //#endregion
8160
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compaction.js
8206
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compaction.js
8161
8207
  /**
8162
8208
  * Recognize both the current checkpoint source and the legacy plugin marker.
8163
8209
  * Harness session format v4 migrated `plugin/compact` to the dedicated
@@ -8168,7 +8214,7 @@ function isCompactionCheckpointSource(source) {
8168
8214
  return source.kind === "compact-checkpoint" || source.kind === "plugin" && source.plugin === "compact";
8169
8215
  }
8170
8216
  //#endregion
8171
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessionTree.js
8217
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessionTree.js
8172
8218
  const TREE_FILTERS = [
8173
8219
  "default",
8174
8220
  "no-tools",
@@ -10324,7 +10370,7 @@ var require_subset = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10324
10370
  module.exports = subset;
10325
10371
  }));
10326
10372
  //#endregion
10327
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/shellQuote.js
10373
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/shellQuote.js
10328
10374
  var import_semver = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
10329
10375
  const internalRe = require_re();
10330
10376
  const constants = require_constants$1();
@@ -10417,7 +10463,7 @@ function cmdEscapeArgument(arg, doubleEscapeMetaChars = false) {
10417
10463
  return out;
10418
10464
  }
10419
10465
  //#endregion
10420
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/update.js
10466
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/update.js
10421
10467
  const PACKAGE_NAME = "@chatcode/cco-tui";
10422
10468
  const DEFAULT_REGISTRY = "https://registry.npmjs.org";
10423
10469
  const GITHUB_REPO = "ccch1mneyyy/dsh-TUI";
@@ -11768,7 +11814,7 @@ async function restartTui(sessionId, options = {}) {
11768
11814
  });
11769
11815
  }
11770
11816
  //#endregion
11771
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/header.js
11817
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/header.js
11772
11818
  /** A finite number, or undefined for anything else (NaN and ±Infinity included). */
11773
11819
  function finiteNumber(value) {
11774
11820
  return typeof value === "number" && Number.isFinite(value) ? value : void 0;
@@ -11842,7 +11888,7 @@ function classify(header) {
11842
11888
  return { kind: "root" };
11843
11889
  }
11844
11890
  //#endregion
11845
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/frames.js
11891
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/frames.js
11846
11892
  /**
11847
11893
  * Bounded reads over the JSONL backend's concatenated-Zstandard session logs.
11848
11894
  *
@@ -12088,7 +12134,7 @@ function decodeTail(window) {
12088
12134
  return decodeFrames(window.buffer, window.whole ? walkFrames(window.buffer) : resyncFrames(window.buffer));
12089
12135
  }
12090
12136
  //#endregion
12091
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/digest.js
12137
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/digest.js
12092
12138
  /**
12093
12139
  * What a bounded read can learn about a session log.
12094
12140
  *
@@ -12571,7 +12617,7 @@ function previewSession(path, limit) {
12571
12617
  return entries.slice(-limit);
12572
12618
  }
12573
12619
  //#endregion
12574
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/artifact.js
12620
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/artifact.js
12575
12621
  /** Read-only artifact lookup for session summaries and previews. */
12576
12622
  /** Highest published compressed generation; temporary migration files are ignored. */
12577
12623
  function inDirectory(directory) {
@@ -12624,7 +12670,7 @@ function findSessionArtifact(sessionId, target) {
12624
12670
  }
12625
12671
  }
12626
12672
  //#endregion
12627
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/store.js
12673
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/store.js
12628
12674
  /**
12629
12675
  * The session index — a local cache keyed by the backend's own change token.
12630
12676
  *
@@ -12788,7 +12834,7 @@ function noteBranch(sessionId, branch) {
12788
12834
  writeIndex(index);
12789
12835
  }
12790
12836
  //#endregion
12791
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/list.js
12837
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/list.js
12792
12838
  /**
12793
12839
  * Building the session list.
12794
12840
  *
@@ -13069,7 +13115,7 @@ async function locateSession(source, sessionId, signal) {
13069
13115
  return match === void 0 ? void 0 : locate$1(source, match.raw, sessionId);
13070
13116
  }
13071
13117
  //#endregion
13072
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/agent-view.js
13118
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/agent-view.js
13073
13119
  /**
13074
13120
  * Agent view (CC `claude agents`) derivation helpers — pure functions over
13075
13121
  * session events that the channel folds into {@link AgentViewRow}s. Kept in
@@ -13299,7 +13345,7 @@ function featureOn(config, name) {
13299
13345
  return config.mode !== "minimal";
13300
13346
  }
13301
13347
  //#endregion
13302
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/activityPrefs.js
13348
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/activityPrefs.js
13303
13349
  /**
13304
13350
  * Persisted working-activity indicator preference, mirroring the pi
13305
13351
  * working-activity extension's `~/.pi/agent/working-activity.json`
@@ -13368,7 +13414,7 @@ function writeActivityFrames(name, dir = PREFS_DIR$5) {
13368
13414
  }
13369
13415
  }
13370
13416
  //#endregion
13371
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/fileSuggestions.js
13417
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/fileSuggestions.js
13372
13418
  const pathSeparators = /[\\/]/;
13373
13419
  function isPathLikeQuery(query) {
13374
13420
  return query.startsWith(".") || query.startsWith("~") || query.startsWith("/") || /^[A-Za-z]:[\\/]/.test(query) || pathSeparators.test(query);
@@ -13391,7 +13437,7 @@ function rankFileCandidates(candidates, query, topK) {
13391
13437
  return topK === void 0 ? ranked : ranked.slice(0, Math.max(0, topK));
13392
13438
  }
13393
13439
  //#endregion
13394
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/effortPrefs.js
13440
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/effortPrefs.js
13395
13441
  /**
13396
13442
  * Persisted reasoning-effort preference (`~/.chatcode-cli/tui/effort.json`). Set via
13397
13443
  * `/effort` (slider or `/effort <id>`; `/effort status` reports the current
@@ -13433,7 +13479,7 @@ function writeEffortPref(effort, dir = PREFS_DIR$4) {
13433
13479
  }
13434
13480
  }
13435
13481
  //#endregion
13436
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/modelPrefs.js
13482
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/modelPrefs.js
13437
13483
  /**
13438
13484
  * Persisted model-route preference (`/model` picker choice), kept at
13439
13485
  * `~/.chatcode-cli/model.json` (`provider` + `model` keys) so CLI and Web share it
@@ -13516,7 +13562,7 @@ function writeModelPref(provider, model, dir = PREFS_DIR$3) {
13516
13562
  }
13517
13563
  }
13518
13564
  //#endregion
13519
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/modelRoute.js
13565
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/modelRoute.js
13520
13566
  /**
13521
13567
  * Model route resolution (issue #67). The `(provider, model)` pair is a
13522
13568
  * single value: every source either supplies the WHOLE route or is skipped,
@@ -13751,7 +13797,7 @@ function orderModelProviders(providers) {
13751
13797
  return [...providers].sort((left, right) => rank(left.id) - rank(right.id));
13752
13798
  }
13753
13799
  //#endregion
13754
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/customModelSettings.js
13800
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/customModelSettings.js
13755
13801
  /** Custom-model forms over the same settings and credential services used by Web. */
13756
13802
  function record(value) {
13757
13803
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -13953,7 +13999,7 @@ function createCustomModelSettingsStore(path, host) {
13953
13999
  };
13954
14000
  }
13955
14001
  //#endregion
13956
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/customModelTest.js
14002
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/customModelTest.js
13957
14003
  /** Direct, one-shot generation used by `/model-config` before a model is registered. */
13958
14004
  function requestEndpoint(baseURL, api) {
13959
14005
  const url = new URL(baseURL);
@@ -14042,7 +14088,7 @@ async function testCustomModelConnection(request, fetchImpl = fetch) {
14042
14088
  }
14043
14089
  }
14044
14090
  //#endregion
14045
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/catalogDefaults.js
14091
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/catalogDefaults.js
14046
14092
  /** Read display defaults from the host adapter's own installed pi-ai catalog. */
14047
14093
  const catalogs = /* @__PURE__ */ new Map();
14048
14094
  async function installedCatalog(anchor) {
@@ -14089,7 +14135,7 @@ async function catalogProviderDefaults(provider, model, anchor = import.meta.url
14089
14135
  };
14090
14136
  }
14091
14137
  //#endregion
14092
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/presetPrefs.js
14138
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/presetPrefs.js
14093
14139
  /**
14094
14140
  * Persisted agent-preset preference (`/preset` picker choice), kept at
14095
14141
  * `~/.chatcode-cli/tui/agent-preset.json` (`preset` key) so the choice survives
@@ -14148,7 +14194,7 @@ function migratePresetPref(requested, resolved, dir = PREFS_DIR$2) {
14148
14194
  return requested === void 0 || resolved === void 0 || requested === resolved ? true : writePresetPref(resolved, dir);
14149
14195
  }
14150
14196
  //#endregion
14151
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compat/persistedSession.js
14197
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/compat/persistedSession.js
14152
14198
  /** Undefined means the service exposes neither supported read API. */
14153
14199
  async function readPersistedSession(persistence, id) {
14154
14200
  if (persistence === null || typeof persistence !== "object") return void 0;
@@ -14168,7 +14214,7 @@ async function readPersistedSession(persistence, id) {
14168
14214
  if (typeof reader.load === "function") return reader.load(id);
14169
14215
  }
14170
14216
  //#endregion
14171
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/preset-resolution.js
14217
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/preset-resolution.js
14172
14218
  /**
14173
14219
  * Agent-preset resolution across upstream prerelease lines.
14174
14220
  *
@@ -14206,7 +14252,7 @@ async function resolveCompatiblePreset(presets, requested) {
14206
14252
  return presets.resolve(requested);
14207
14253
  }
14208
14254
  //#endregion
14209
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/presets.js
14255
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/presets.js
14210
14256
  /**
14211
14257
  * Agent-presets roster integration (issue #8): compose each session's
14212
14258
  * model-facing world (tools, prompt sections, projections) from one preset
@@ -14356,7 +14402,7 @@ function serviceForAgent(ctx, agent, key) {
14356
14402
  return ctx.get(key);
14357
14403
  }
14358
14404
  //#endregion
14359
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/preset-management.js
14405
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/preset-management.js
14360
14406
  const failureReason = (error) => error instanceof Error ? error.message : String(error);
14361
14407
  /** Read a roster-resolved composition without bypassing preset ownership. */
14362
14408
  async function readPresetComposition(presets, presetId) {
@@ -14413,7 +14459,7 @@ async function removePresetComposition(presets, presetId) {
14413
14459
  }
14414
14460
  }
14415
14461
  //#endregion
14416
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/session-organization.js
14462
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/session-organization.js
14417
14463
  /** Adapter-only readers for optional Harness session-organization services. */
14418
14464
  const STAT_KEYS = [
14419
14465
  "turns",
@@ -14474,7 +14520,7 @@ function presetCompositionRows(content, limit = 80) {
14474
14520
  };
14475
14521
  }
14476
14522
  //#endregion
14477
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/debug.js
14523
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/debug.js
14478
14524
  /**
14479
14525
  * Debug logger for the ported Ink core. Writes to stderr only when
14480
14526
  * `CHATCODE_CLI_TUI_DEBUG` (or its legacy alias) is set, so normal runs stay quiet.
@@ -14504,7 +14550,7 @@ function logMouseDebug(message, fields) {
14504
14550
  } catch {}
14505
14551
  }
14506
14552
  //#endregion
14507
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/mentions.js
14553
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/mentions.js
14508
14554
  /**
14509
14555
  * `@` file-mention parsing (issue #15).
14510
14556
  *
@@ -14650,7 +14696,7 @@ function mentionAtCaret(value, cursor) {
14650
14696
  };
14651
14697
  }
14652
14698
  //#endregion
14653
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/commonUtilityCommands.js
14699
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/commonUtilityCommands.js
14654
14700
  /** Format only the files in the authoritative loaded-context projection. */
14655
14701
  function loadedFileLines(files, copy) {
14656
14702
  if (files === void 0) return [copy.unavailable];
@@ -14765,7 +14811,7 @@ function codeRatioLines(report, copy, maxAuthors = 20) {
14765
14811
  return lines;
14766
14812
  }
14767
14813
  //#endregion
14768
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/themeCatalog.js
14814
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/themeCatalog.js
14769
14815
  /**
14770
14816
  * Cordis-free theme catalog shared by future pickers, commands and hosts.
14771
14817
  *
@@ -14846,7 +14892,7 @@ function listThemeCatalog(host) {
14846
14892
  return Object.freeze(entries);
14847
14893
  }
14848
14894
  //#endregion
14849
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessionModes.js
14895
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessionModes.js
14850
14896
  /**
14851
14897
  * Configurable Shift+Tab session modes (the `modes` dsh-tui plugin config):
14852
14898
  * each mode is a named bundle of optional DSH plane switches — plan mode
@@ -14910,7 +14956,7 @@ function modeDisplayName(spec) {
14910
14956
  return spec.id;
14911
14957
  }
14912
14958
  //#endregion
14913
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/subagents.js
14959
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/subagents.js
14914
14960
  /** Unified subagent activity domain model used by the adapter and every view. */
14915
14961
  const MAX_OUTPUT_EVENTS = 160;
14916
14962
  const MAX_OUTPUT_LINES = 160;
@@ -15288,7 +15334,7 @@ function formatJobDuration(job, now = Date.now()) {
15288
15334
  return `${Math.floor(minutes / 60)}h${String(minutes % 60).padStart(2, "0")}m`;
15289
15335
  }
15290
15336
  //#endregion
15291
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/minimalMode.js
15337
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/minimalMode.js
15292
15338
  /**
15293
15339
  * Minimal mode: one process-wide flag gating decorative UI (header splash,
15294
15340
  * emoji status glyphs and non-tool text colors). Footer field choices remain
@@ -15308,7 +15354,7 @@ function setMinimalMode(enabled) {
15308
15354
  minimal = enabled;
15309
15355
  }
15310
15356
  //#endregion
15311
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/workspace.js
15357
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/workspace.js
15312
15358
  function registryOf(ctx) {
15313
15359
  const registry = ctx.get("workspaceRegistry");
15314
15360
  if (registry === void 0 || typeof registry.pinSession !== "function" || typeof registry.unpinSession !== "function") return void 0;
@@ -15383,7 +15429,7 @@ async function unarchiveWorkspaceSession(ctx, id) {
15383
15429
  return true;
15384
15430
  }
15385
15431
  //#endregion
15386
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/contract.js
15432
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/contract.js
15387
15433
  /**
15388
15434
  * Upstream compatibility contract.
15389
15435
  *
@@ -15812,7 +15858,7 @@ function pluginsInfoLines(args, deps) {
15812
15858
  return lines;
15813
15859
  }
15814
15860
  //#endregion
15815
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/mcp-status.js
15861
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/mcp-status.js
15816
15862
  /** Loader and tool-registry projection used by the TUI's `/mcp` report. */
15817
15863
  const MCP_CLIENT_PACKAGE = "@deepseek-ai/dsh-mcp-client";
15818
15864
  const FIBER_ACTIVE = 2;
@@ -15865,7 +15911,7 @@ function collectMcpServerStatus(schemas, entries) {
15865
15911
  }));
15866
15912
  }
15867
15913
  //#endregion
15868
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/format.js
15914
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/format.js
15869
15915
  /**
15870
15916
  * Number, token-count, and duration formatters shared by the status line
15871
15917
  * and message rows.
@@ -15928,7 +15974,7 @@ function formatDuration$4(durationMs, options = {}) {
15928
15974
  return parts.join(" ");
15929
15975
  }
15930
15976
  //#endregion
15931
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/contextUsage.js
15977
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/contextUsage.js
15932
15978
  /**
15933
15979
  * Return the current context occupancy. The latest request is authoritative:
15934
15980
  * its uncached input and cache read/write tokens are all part of that request's
@@ -16312,7 +16358,7 @@ function prepareMemoryTargetFile(requested, candidates, cwd, dshHome) {
16312
16358
  }
16313
16359
  }
16314
16360
  //#endregion
16315
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/channel.js
16361
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/channel.js
16316
16362
  /** Return the step left open by a tree fork cut within one turn. */
16317
16363
  function openStepAtForkCut(events, turn) {
16318
16364
  for (let i = events.length - 1; i >= 0; i--) {
@@ -16458,7 +16504,7 @@ function normalizePermissionPresetOption(value) {
16458
16504
  ...description === void 0 || description === "" ? {} : { description }
16459
16505
  };
16460
16506
  }
16461
- function permissionPresetSnapshotFromService(service, events) {
16507
+ function permissionPresetSnapshotFromService(service, session) {
16462
16508
  if (!isRecord$1(service)) return unavailablePermissionPresetSnapshot();
16463
16509
  const runtime = service;
16464
16510
  try {
@@ -16475,13 +16521,13 @@ function permissionPresetSnapshotFromService(service, events) {
16475
16521
  }
16476
16522
  const options = [];
16477
16523
  for (const name of names) {
16478
- const option = normalizePermissionPresetOption(optionOf(name));
16524
+ const option = normalizePermissionPresetOption(optionOf.call(service, name));
16479
16525
  if (option === void 0 || option.value !== name) return unavailablePermissionPresetSnapshot();
16480
16526
  options.push({ ...option });
16481
16527
  }
16482
- const currentValue = current(events);
16528
+ const currentValue = current.call(service, typeof runtime.catalog === "function" ? session : snapshotLiveSessionEvents(session));
16483
16529
  if (typeof currentValue !== "string" || currentValue !== PERMISSION_PRESET_CUSTOM && !seen.has(currentValue)) return unavailablePermissionPresetSnapshot();
16484
- const currentOption = normalizePermissionPresetOption(optionOf(currentValue));
16530
+ const currentOption = normalizePermissionPresetOption(optionOf.call(service, currentValue));
16485
16531
  if (currentOption === void 0 || currentOption.value !== currentValue) return unavailablePermissionPresetSnapshot();
16486
16532
  if (currentValue !== PERMISSION_PRESET_CUSTOM) {
16487
16533
  const rosterOption = options.find((option) => option.value === currentValue);
@@ -16552,7 +16598,7 @@ function toolCommandOf(argsFull) {
16552
16598
  }
16553
16599
  /** The ack a shell tool returns for `run_in_background: true`. */
16554
16600
  const BACKGROUND_START_ACK = /^started background job (\S+)/;
16555
- /** Public provider route registered by dsh-llm-chatcode-config for MAAS. */
16601
+ /** Public provider route registered by cco-llm-chatcode-config for MAAS. */
16556
16602
  const CHATCODE_MAAS_PROVIDER = "chatcode-maas";
16557
16603
  /** Narrow an optional plugin event without importing its module augmentation. */
16558
16604
  function todoPanelItems(data) {
@@ -16710,6 +16756,31 @@ function toolResultText(event) {
16710
16756
  if (block === void 0 || block.type !== "tool-result") return "";
16711
16757
  return block.content.map((item) => item.type === "text" ? item.text : "").join("").trim();
16712
16758
  }
16759
+ /** Restore an acknowledged todo_write when an imported log lacks todo/write. */
16760
+ function acknowledgedTodoItems(todos, event) {
16761
+ const message = event.data.message;
16762
+ const block = message.content[0];
16763
+ const legacyError = message.isError;
16764
+ if (event.data.error !== void 0 || legacyError === true || block?.type === "tool-result" && block.isError === true) return void 0;
16765
+ const result = block?.type === "tool-result" ? toolResultText(event) : message.content.map((item) => item.type === "text" ? item.text : "").join("").trim();
16766
+ try {
16767
+ const returned = todoPanelItems(JSON.parse(result));
16768
+ if (returned !== void 0) return returned;
16769
+ } catch {}
16770
+ const counts = /^Updated todo list: (\d+) pending, (\d+) in progress, (\d+) completed\.$/.exec(result);
16771
+ if (counts === null) return void 0;
16772
+ if (![
16773
+ "pending",
16774
+ "in_progress",
16775
+ "completed"
16776
+ ].every((status, index) => todos.filter((todo) => todo.status === status).length === Number(counts[index + 1]))) return void 0;
16777
+ const normalized = todos.map((todo) => ({
16778
+ ...todo,
16779
+ content: todo.content.trim()
16780
+ }));
16781
+ if (normalized.some((todo) => todo.content === "") || new Set(normalized.map((todo) => todo.content)).size !== normalized.length) return void 0;
16782
+ return normalized;
16783
+ }
16713
16784
  /** Phase badge for the harness goal card — mirrors the panel's PhaseBadge. */
16714
16785
  const GOAL_RESULT_BADGE = {
16715
16786
  active: "● active",
@@ -17074,6 +17145,7 @@ function createChannel(ctx, initialAgent, options) {
17074
17145
  description: sub.description,
17075
17146
  provider: sub.provider,
17076
17147
  model: sub.model || "default",
17148
+ modelName: sub.modelName,
17077
17149
  effort: sub.effort,
17078
17150
  status: sub.status,
17079
17151
  startedAt: sub.startedAt,
@@ -17472,6 +17544,21 @@ function createChannel(ctx, initialAgent, options) {
17472
17544
  let cancelInFlight = false;
17473
17545
  /** The llm runtime seam (dsh-llm LlmRuntime): route metadata resolution. */
17474
17546
  const llmRuntime = ctx.get("llm");
17547
+ /** Catalog display names for subagent routes, keyed `provider\0model`.
17548
+ * Subagent cards are display surfaces: they show the catalog's `name`, and
17549
+ * the wire id remains only the fallback while the catalog is unresolved.
17550
+ * Entries are shared across subagents on one route and never invalidated —
17551
+ * a route's display name does not change within a session. */
17552
+ const subagentModelNames = /* @__PURE__ */ new Map();
17553
+ const resolveSubagentModelName = (provider, model) => {
17554
+ if (llmRuntime === void 0) return Promise.resolve(void 0);
17555
+ const key = `${provider}\u0000${model}`;
17556
+ const cached = subagentModelNames.get(key);
17557
+ if (cached !== void 0) return cached;
17558
+ const pending = llmRuntime.resolveModelInfo(provider, model).then((info) => info.name?.trim() || void 0).catch(() => void 0);
17559
+ subagentModelNames.set(key, pending);
17560
+ return pending;
17561
+ };
17475
17562
  /** Mutable per-agent model selection (dsh-agent's routing override seam).
17476
17563
  * Model and effort choices override subsequent requests without a fork;
17477
17564
  * default routing still comes from agentOptions until a choice; bindAgent
@@ -18281,7 +18368,21 @@ function createChannel(ctx, initialAgent, options) {
18281
18368
  if ("preset".startsWith(head)) warmPresetOptions();
18282
18369
  if ("effort".startsWith(head)) warmEffortLevels();
18283
18370
  }
18284
- return completeCommands(input, state.commandList, (path) => {
18371
+ let roots = state.commandList;
18372
+ if (head === "permission") {
18373
+ const snapshot = state.permissionPresets();
18374
+ const argumentSuggestions = snapshot.options.filter((option) => isCommandCompletionToken(option.value)).map((option) => ({
18375
+ name: option.value,
18376
+ description: option.description ?? option.name,
18377
+ ...option.value === "read-only" ? { descriptionKey: "permission-preset-readonly-desc" } : option.value === "workspace-write" ? { descriptionKey: "permission-preset-workspace-write-desc" } : option.value === "danger-full-access" ? { descriptionKey: "permission-preset-full-access-desc" } : {},
18378
+ ...snapshot.current?.kind === "preset" && snapshot.current.value === option.value ? { tag: "current" } : {}
18379
+ }));
18380
+ roots = roots.map((command) => command.name === "permission" ? {
18381
+ ...command,
18382
+ argumentSuggestions
18383
+ } : command);
18384
+ }
18385
+ return completeCommands(input, roots, (path) => {
18285
18386
  if (path.length === 1 && path[0] === "web") return [{
18286
18387
  name: "on",
18287
18388
  description: "Start or reopen Web and show its authenticated URL",
@@ -18467,15 +18568,6 @@ function createChannel(ctx, initialAgent, options) {
18467
18568
  description: command.description
18468
18569
  }))];
18469
18570
  }
18470
- if (path.length === 1 && path[0] === "permission") {
18471
- const snapshot = state.permissionPresets();
18472
- return snapshot.options.filter((option) => isCommandCompletionToken(option.value)).map((option) => ({
18473
- name: option.value,
18474
- description: option.description ?? option.name,
18475
- ...option.value === "read-only" ? { descriptionKey: "permission-preset-readonly-desc" } : option.value === "workspace-write" ? { descriptionKey: "permission-preset-workspace-write-desc" } : option.value === "danger-full-access" ? { descriptionKey: "permission-preset-full-access-desc" } : {},
18476
- ...snapshot.current?.kind === "preset" && snapshot.current.value === option.value ? { tag: "current" } : {}
18477
- }));
18478
- }
18479
18571
  if (path.length === 1 && path[0] === "plan") return [{
18480
18572
  name: "on",
18481
18573
  description: "Enter plan mode: read-only, plan before acting",
@@ -19809,7 +19901,7 @@ function createChannel(ctx, initialAgent, options) {
19809
19901
  return unavailablePermissionPresetSnapshot();
19810
19902
  }
19811
19903
  if (service === void 0) return legacyPermissionPresetSnapshot(state.mode.sandbox);
19812
- return permissionPresetSnapshotFromService(service, snapshotLiveSessionEvents(agent.session));
19904
+ return permissionPresetSnapshotFromService(service, agent.session);
19813
19905
  },
19814
19906
  /** Localized roster projection for the /preset picker — resolves
19815
19907
  * built-in display text through the dictionary under `en`; the
@@ -20941,7 +21033,27 @@ function createChannel(ctx, initialAgent, options) {
20941
21033
  }
20942
21034
  return lines;
20943
21035
  },
20944
- exportSession() {
21036
+ exportSession(format = "jsonl") {
21037
+ const events = snapshotLiveSessionEvents(agent.session);
21038
+ const fileName = `chatcode-cli-export-${Date.now()}-${randomUUID().slice(0, 8)}.${format === "jsonl" ? "jsonl" : "md"}`;
21039
+ const target = join(state.cwd, fileName);
21040
+ if (format === "jsonl") {
21041
+ const lines = [JSON.stringify({
21042
+ type: "session",
21043
+ ...agent.session.header
21044
+ })];
21045
+ for (const event of events) lines.push(JSON.stringify(event));
21046
+ try {
21047
+ writeFileSync(target, lines.join("\n") + "\n", {
21048
+ encoding: "utf8",
21049
+ mode: 384,
21050
+ flag: "wx"
21051
+ });
21052
+ return target;
21053
+ } catch {
21054
+ return null;
21055
+ }
21056
+ }
20945
21057
  const parts = [
20946
21058
  t("export-title"),
20947
21059
  "",
@@ -20951,7 +21063,7 @@ function createChannel(ctx, initialAgent, options) {
20951
21063
  t("export-dir", { cwd: state.cwd }),
20952
21064
  ""
20953
21065
  ];
20954
- for (const event of snapshotLiveSessionEvents(agent.session)) switch (event.type) {
21066
+ for (const event of events) switch (event.type) {
20955
21067
  case "user/message": {
20956
21068
  if (event.data.source.kind !== "user") break;
20957
21069
  const text = firstTextOf(event.data.content);
@@ -20969,18 +21081,18 @@ function createChannel(ctx, initialAgent, options) {
20969
21081
  break;
20970
21082
  case "tool/result": {
20971
21083
  const block = event.data.message.content[0];
20972
- if (block.type === "tool-result") {
20973
- const text = textOf(block.content);
20974
- if (text) parts.push(`${t("export-result-section")}\n\n\`\`\`\n${text}\n\`\`\`\n`);
20975
- }
21084
+ const text = textOf(block?.type === "tool-result" ? block.content : event.data.message.content);
21085
+ if (text) parts.push(`${t("export-result-section")}\n\n\`\`\`\n${text}\n\`\`\`\n`);
20976
21086
  break;
20977
21087
  }
20978
21088
  default: break;
20979
21089
  }
20980
- const fileName = `chatcode-cli-export-${Date.now()}.md`;
20981
21090
  try {
20982
- const target = join(state.cwd, fileName);
20983
- writeFileSync(target, parts.join("\n"), "utf8");
21091
+ writeFileSync(target, parts.join("\n"), {
21092
+ encoding: "utf8",
21093
+ mode: 384,
21094
+ flag: "wx"
21095
+ });
20984
21096
  return target;
20985
21097
  } catch {
20986
21098
  return null;
@@ -21545,6 +21657,8 @@ ${output}
21545
21657
  let tpsStep;
21546
21658
  /** Tool cards by callId, so tool/result can settle the running card. */
21547
21659
  const toolCards = /* @__PURE__ */ new Map();
21660
+ const pendingTodoWrites = /* @__PURE__ */ new Map();
21661
+ let lastTodoWriteSeq = -1;
21548
21662
  /**
21549
21663
  * Session events are delivered live and can also be replayed around a
21550
21664
  * reconnect. A repeated sealed message must not create a second assistant
@@ -21800,6 +21914,8 @@ ${output}
21800
21914
  assistantRowsByStep.clear();
21801
21915
  reasoningRowsByStep.clear();
21802
21916
  lastTextDelta.clear();
21917
+ pendingTodoWrites.clear();
21918
+ lastTodoWriteSeq = -1;
21803
21919
  replaying = true;
21804
21920
  try {
21805
21921
  for (const event of prepareReplayEvents(events)) renderEvent(event);
@@ -22000,6 +22116,13 @@ ${output}
22000
22116
  break;
22001
22117
  }
22002
22118
  case "tool/call": {
22119
+ if (event.data.name === "todo_write") try {
22120
+ const todos = todoPanelItems(JSON.parse(event.data.arguments));
22121
+ if (todos !== void 0) pendingTodoWrites.set(event.data.callId, {
22122
+ seq: event.seq,
22123
+ todos
22124
+ });
22125
+ } catch {}
22003
22126
  if (event.data.name === "ask_user_question") break;
22004
22127
  if (isSubagentToolName(event.data.name)) {
22005
22128
  try {
@@ -22034,6 +22157,12 @@ ${output}
22034
22157
  break;
22035
22158
  }
22036
22159
  case "tool/result": {
22160
+ const pendingTodo = pendingTodoWrites.get(event.data.message.source.callId);
22161
+ pendingTodoWrites.delete(event.data.message.source.callId);
22162
+ if (pendingTodo !== void 0 && pendingTodo.seq > lastTodoWriteSeq) {
22163
+ const todos = acknowledgedTodoItems(pendingTodo.todos, event);
22164
+ if (todos !== void 0) state.todos = todos;
22165
+ }
22037
22166
  const card = toolCards.get(event.data.message.source.callId);
22038
22167
  if (card !== void 0 && card.tool !== void 0) {
22039
22168
  card.tool.durationMs = Math.max(0, Date.now() - card.tool.startedAt);
@@ -22072,6 +22201,9 @@ ${output}
22072
22201
  case "turn/start":
22073
22202
  cancelInFlight = false;
22074
22203
  state.cancelPending = false;
22204
+ state.todos = [];
22205
+ pendingTodoWrites.clear();
22206
+ lastTodoWriteSeq = -1;
22075
22207
  state.working = true;
22076
22208
  state.turnStart = Date.now();
22077
22209
  state.responseChars = 0;
@@ -22086,6 +22218,7 @@ ${output}
22086
22218
  case "turn/end": {
22087
22219
  cancelInFlight = false;
22088
22220
  state.cancelPending = false;
22221
+ pendingTodoWrites.clear();
22089
22222
  settleStreaming();
22090
22223
  state.working = false;
22091
22224
  state.activeToolCount = 0;
@@ -22149,7 +22282,10 @@ ${output}
22149
22282
  default:
22150
22283
  if (event.type === "todo/write") {
22151
22284
  const todos = todoPanelItems(event.data);
22152
- if (todos !== void 0) state.todos = todos;
22285
+ if (todos !== void 0) {
22286
+ state.todos = todos;
22287
+ lastTodoWriteSeq = event.seq;
22288
+ }
22153
22289
  break;
22154
22290
  }
22155
22291
  if (event.type === "agent-preset/selected") {
@@ -22465,10 +22601,19 @@ ${output}
22465
22601
  if (child?.session) {
22466
22602
  subagentStore.linkSession(info.id, child.session);
22467
22603
  const model = child.options?.model ?? child.options?.provider;
22468
- if (model) subagentStore.patch(info.id, {
22469
- model,
22470
- provider: child.options?.provider ?? info.provider
22471
- });
22604
+ if (model) {
22605
+ const provider = child.options?.provider ?? info.provider;
22606
+ subagentStore.patch(info.id, {
22607
+ model,
22608
+ provider
22609
+ });
22610
+ resolveSubagentModelName(provider, model).then((name) => {
22611
+ if (name === void 0) return;
22612
+ subagentStore.patch(info.id, { modelName: name });
22613
+ syncSubagentsNow();
22614
+ state.emit();
22615
+ });
22616
+ }
22472
22617
  }
22473
22618
  } catch {}
22474
22619
  syncSubagentsNow();
@@ -23003,7 +23148,7 @@ async function expandMentions(fs, cwd, text, attachments, stagedImages) {
23003
23148
  };
23004
23149
  }
23005
23150
  //#endregion
23006
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/childStderr.js
23151
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/childStderr.js
23007
23152
  /**
23008
23153
  * Child-process stderr guard (issue #17).
23009
23154
  *
@@ -23172,7 +23317,7 @@ function createChildStderrReporter(notify, options = {}) {
23172
23317
  };
23173
23318
  }
23174
23319
  //#endregion
23175
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/startupTrace.js
23320
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/startupTrace.js
23176
23321
  /** Opt-in startup timings; labels never contain paths, Session identities, or credentials. */
23177
23322
  /**
23178
23323
  * Measure one initialization operation without changing its result or failure.
@@ -23191,7 +23336,7 @@ async function traceTuiStartup(phase, operation) {
23191
23336
  }
23192
23337
  }
23193
23338
  //#endregion
23194
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/questions.js
23339
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/questions.js
23195
23340
  /**
23196
23341
  * Ask-user-question store — the UI-side half of the DSH user-interaction
23197
23342
  * seam (`ctx.userQuestions`). The harness's model-facing
@@ -23431,7 +23576,7 @@ var QuestionStore = class {
23431
23576
  }
23432
23577
  };
23433
23578
  //#endregion
23434
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/providerGuard.js
23579
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/providerGuard.js
23435
23580
  /**
23436
23581
  * Question-provider seat guard (issue #98 security follow-up).
23437
23582
  *
@@ -23543,7 +23688,7 @@ function incumbentQuestionProviderId(service) {
23543
23688
  } catch {}
23544
23689
  }
23545
23690
  //#endregion
23546
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/questions-answerer.js
23691
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/questions-answerer.js
23547
23692
  /**
23548
23693
  * User-question answerer compatibility.
23549
23694
  *
@@ -23602,7 +23747,7 @@ function prepareQuestionAnswerer(ctx, service, answerer) {
23602
23747
  }
23603
23748
  }
23604
23749
  //#endregion
23605
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/approvals.js
23750
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/approvals.js
23606
23751
  /**
23607
23752
  * Approval store — the UI-side answerer half of the DSH approval seam
23608
23753
  * (`ctx.approval`). The harness's permission layer asks
@@ -23996,7 +24141,7 @@ var ApprovalStore = class {
23996
24141
  }
23997
24142
  };
23998
24143
  //#endregion
23999
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/promptDebug.js
24144
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/promptDebug.js
24000
24145
  /**
24001
24146
  * On-demand capture of every final AgentLoop request context observed for a
24002
24147
  * live session.
@@ -24142,7 +24287,7 @@ function registerPromptDebug(ctx) {
24142
24287
  }));
24143
24288
  }
24144
24289
  //#endregion
24145
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/migrationPrefs.js
24290
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/migrationPrefs.js
24146
24291
  /**
24147
24292
  * One-time local migrations (`~/.chatcode-cli/tui/migrations.json`), keyed by stable
24148
24293
  * migration id → ISO timestamp. Named keys (not a bare flag) so later
@@ -24233,7 +24378,7 @@ async function commitFullscreenFactoryMigration(plan, options) {
24233
24378
  } catch {}
24234
24379
  }
24235
24380
  //#endregion
24236
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/retired-packaged-presets.js
24381
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/retired-packaged-presets.js
24237
24382
  const OWNER = "@chatcode/cco-tui";
24238
24383
  const MARKER = ".dsh-tui-managed.json";
24239
24384
  const RETIRED_PACKAGED_PRESETS = ["liangshen"];
@@ -24275,7 +24420,7 @@ function cleanupRetiredPackagedPresets(options = {}) {
24275
24420
  return results;
24276
24421
  }
24277
24422
  //#endregion
24278
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessions/view.js
24423
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessions/view.js
24279
24424
  /** The browser's default view: this project, conversations only. */
24280
24425
  const DEFAULT_FILTERS = {
24281
24426
  query: "",
@@ -24609,7 +24754,7 @@ function windowEnd(rows, top, budget) {
24609
24754
  return at;
24610
24755
  }
24611
24756
  //#endregion
24612
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/resume.js
24757
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/sessions/resume.js
24613
24758
  /** Resolve launch-time resume flags against persisted conversations. */
24614
24759
  /**
24615
24760
  * Select the latest conversation in the exact launch directory for bare flags.
@@ -24629,7 +24774,7 @@ async function resolveStartupSessionId(source, argv, cwd) {
24629
24774
  return latest.id;
24630
24775
  }
24631
24776
  //#endregion
24632
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/workspaceRoot.js
24777
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/workspaceRoot.js
24633
24778
  /** Resolve a fresh session's working directory without widening it to a Git ancestor. */
24634
24779
  /**
24635
24780
  * Explicit configuration wins; otherwise keep the invoking directory, even
@@ -24642,7 +24787,7 @@ function resolveSessionCwd(configured, start = process.cwd()) {
24642
24787
  return resolve(start, configured ?? "");
24643
24788
  }
24644
24789
  //#endregion
24645
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/openExternal.js
24790
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/openExternal.js
24646
24791
  /**
24647
24792
  * Open URLs, files and folders with the platform's default handler, fully
24648
24793
  * detached from the TUI process (fire-and-forget: no stdio pipes, no wait,
@@ -24803,7 +24948,7 @@ function revealInFileManager(filePath) {
24803
24948
  if (existsSync(dir)) openExternal(dir);
24804
24949
  }
24805
24950
  //#endregion
24806
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/chatCodeApi.js
24951
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/chatCodeApi.js
24807
24952
  /** ChatCode API request capability. Credentials stay in the host adapter. */
24808
24953
  const CHATCODE_API_BASE_URL = "https://chatcode.chinaunicom.cn";
24809
24954
  /** CVP(天梯)平台基础 URL,承载 modules/notification 等公开/独立鉴权模块接口。 */
@@ -24811,7 +24956,7 @@ const CVP_CHATCODE_API_URL = `${CHATCODE_API_BASE_URL}/cvp`;
24811
24956
  /** Each mounted TUI receives its own host-authorized request function. */
24812
24957
  const ChatCodeApiContext = (0, import_react.createContext)(void 0);
24813
24958
  //#endregion
24814
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/releaseNotes.js
24959
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/releaseNotes.js
24815
24960
  const RELEASE_NOTE_PATH = join(DATA_DIR, "release-notes.json");
24816
24961
  const RELEASE_NOTE_ENDPOINT = `${CHATCODE_API_BASE_URL}/chatcode/api/v1/cli/version/release-note`;
24817
24962
  function acknowledgedVersion() {
@@ -24907,7 +25052,7 @@ var ReleaseNotesStore = class {
24907
25052
  }
24908
25053
  };
24909
25054
  //#endregion
24910
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/version.js
25055
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/version.js
24911
25056
  const MAIN_CLI_PACKAGES = new Set(["@chatcode/chatcode-cli", "@chatcode/chatcode-cli-test"]);
24912
25057
  const VERSION_PATTERN = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u;
24913
25058
  const PRODUCT_VERSION_ENV = "CHATCODE_CLI_PRODUCT_VERSION";
@@ -24947,7 +25092,7 @@ function resolveProductVersion(options = {}) {
24947
25092
  /** Product version shown by the TUI, shared with `cco --version` and Web. */
24948
25093
  const PRODUCT_VERSION = resolveProductVersion();
24949
25094
  //#endregion
24950
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/execFileNoThrow.js
25095
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/execFileNoThrow.js
24951
25096
  const MAX_CAPTURE_BYTES = 64 * 1024;
24952
25097
  function appendBounded(chunks, chunk, total) {
24953
25098
  if (total.value >= MAX_CAPTURE_BYTES) return;
@@ -25017,7 +25162,7 @@ function execFileNoThrow(file, args = [], options) {
25017
25162
  });
25018
25163
  }
25019
25164
  //#endregion
25020
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/herdr.js
25165
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/herdr.js
25021
25166
  const REPORT_TIMEOUT_MS = 2e3;
25022
25167
  const RELEASE_TIMEOUT_MS = 500;
25023
25168
  const RETRY_DELAYS_MS = [
@@ -25405,7 +25550,7 @@ var require_react_jsx_runtime_development = /* @__PURE__ */ __commonJSMin(((expo
25405
25550
  })();
25406
25551
  }));
25407
25552
  //#endregion
25408
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/themePrefs.js
25553
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/themePrefs.js
25409
25554
  var import_jsx_runtime = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
25410
25555
  if (process.env.NODE_ENV === "production") module.exports = require_react_jsx_runtime_production();
25411
25556
  else module.exports = require_react_jsx_runtime_development();
@@ -25462,7 +25607,7 @@ function writeThemePref(name, dir = PREFS_DIR) {
25462
25607
  }
25463
25608
  }
25464
25609
  //#endregion
25465
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useRuntimeThemeSnapshot.js
25610
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useRuntimeThemeSnapshot.js
25466
25611
  const EMPTY_THEME_SNAPSHOT = Object.freeze([]);
25467
25612
  const subscribeNoThemes = (_listener) => () => {};
25468
25613
  /**
@@ -25490,7 +25635,7 @@ function useRuntimeThemeSnapshot(themeHost) {
25490
25635
  return import_react.useSyncExternalStore(subscribeThemes, getThemeSnapshot, getThemeSnapshot);
25491
25636
  }
25492
25637
  //#endregion
25493
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/event.js
25638
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/event.js
25494
25639
  /**
25495
25640
  * Base class for events with immediate-propagation control.
25496
25641
  *
@@ -25514,7 +25659,7 @@ var Event = class {
25514
25659
  }
25515
25660
  };
25516
25661
  //#endregion
25517
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/emitter.js
25662
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/emitter.js
25518
25663
  /**
25519
25664
  * Node-compatible event emitter that is aware of the `Event` class, so
25520
25665
  * `emit` respects `stopImmediatePropagation()` on dispatched events.
@@ -25547,7 +25692,7 @@ var EventEmitter$1 = class extends EventEmitter {
25547
25692
  }
25548
25693
  };
25549
25694
  //#endregion
25550
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/StdinContext.js
25695
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/StdinContext.js
25551
25696
  /**
25552
25697
  * `StdinContext` is a React context, which exposes input stream.
25553
25698
  */
@@ -25561,14 +25706,14 @@ const StdinContext = (0, import_react.createContext)({
25561
25706
  });
25562
25707
  StdinContext.displayName = "InternalStdinContext";
25563
25708
  //#endregion
25564
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-stdin.js
25709
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-stdin.js
25565
25710
  /**
25566
25711
  * React hook exposing the stdin stream and raw-mode helpers from `StdinContext`.
25567
25712
  * @returns the `StdinContext` value.
25568
25713
  */
25569
25714
  const useStdin = () => (0, import_react.useContext)(StdinContext);
25570
25715
  //#endregion
25571
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/ansi.js
25716
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/ansi.js
25572
25717
  /**
25573
25718
  * ANSI Control Characters and Escape Sequence Introducers
25574
25719
  *
@@ -25642,7 +25787,7 @@ function isEscFinal(byte) {
25642
25787
  return byte >= 48 && byte <= 126;
25643
25788
  }
25644
25789
  //#endregion
25645
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/csi.js
25790
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/csi.js
25646
25791
  /**
25647
25792
  * CSI (Control Sequence Introducer) Types
25648
25793
  *
@@ -25965,7 +26110,7 @@ const ENABLE_WIN32_INPUT_MODE = csi("?9001h");
25965
26110
  */
25966
26111
  const DISABLE_WIN32_INPUT_MODE = csi("?9001l");
25967
26112
  //#endregion
25968
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/env.js
26113
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/env.js
25969
26114
  /**
25970
26115
  * Minimal terminal-environment shim for the ported Ink core. The original
25971
26116
  * module computed a richer `env` object from the Claude Code app context; the
@@ -25974,7 +26119,7 @@ const DISABLE_WIN32_INPUT_MODE = csi("?9001l");
25974
26119
  */
25975
26120
  const env$1 = { terminal: (process.env.TERM_PROGRAM ?? process.env.TERM ?? "unknown").toLowerCase() };
25976
26121
  //#endregion
25977
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/osc.js
26122
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/osc.js
25978
26123
  /**
25979
26124
  * OSC (Operating System Command) Types and Parser
25980
26125
  */
@@ -26370,7 +26515,7 @@ function supportsTabStatus() {
26370
26515
  return process.env.USER_TYPE === "ant";
26371
26516
  }
26372
26517
  //#endregion
26373
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/terminal-querier.js
26518
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/terminal-querier.js
26374
26519
  /**
26375
26520
  * Query the terminal and await responses without timeouts.
26376
26521
  *
@@ -26556,7 +26701,7 @@ var TerminalQuerier = class {
26556
26701
  }
26557
26702
  };
26558
26703
  //#endregion
26559
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/ThemeProvider.js
26704
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/ThemeProvider.js
26560
26705
  /**
26561
26706
  * Theme provider with terminal-background auto-detection. With no explicit
26562
26707
  * `theme` prop, no CHATCODE_CLI_TUI_THEME override and no persisted choice
@@ -26755,7 +26900,7 @@ function useTheme() {
26755
26900
  return [theme, setTheme];
26756
26901
  }
26757
26902
  //#endregion
26758
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/settingsEditor.js
26903
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/settingsEditor.js
26759
26904
  /**
26760
26905
  * React-free form model behind the `/settings` screen (issue #165), mirroring
26761
26906
  * the web front door's card-form.ts semantics: a section stages what the user
@@ -27005,7 +27150,7 @@ var SettingsForm = class {
27005
27150
  }
27006
27151
  };
27007
27152
  //#endregion
27008
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/reload.js
27153
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/reload.js
27009
27154
  /**
27010
27155
  * `/reload` planning — the pi-style soft reload: re-read the TUI's persisted
27011
27156
  * preference files (`~/.chatcode-cli/tui/{theme,lang,agent-preset,model,
@@ -27854,7 +27999,7 @@ var SignalExit = class extends SignalExitBase {
27854
27999
  const process$2 = globalThis.process;
27855
28000
  const { onExit, load, unload } = signalExitWrap(processOk(process$2) ? new SignalExit(process$2) : new SignalExitFallback());
27856
28001
  //#endregion
27857
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/native-ts/yoga-layout/enums.js
28002
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/native-ts/yoga-layout/enums.js
27858
28003
  /**
27859
28004
  * Yoga enums — ported from yoga-layout/src/generated/YGEnums.ts
27860
28005
  * Kept as `const` objects (not TS enums) per repo convention.
@@ -27986,7 +28131,7 @@ const Wrap = {
27986
28131
  WrapReverse: 2
27987
28132
  };
27988
28133
  //#endregion
27989
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/native-ts/yoga-layout/index.js
28134
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/native-ts/yoga-layout/index.js
27990
28135
  /**
27991
28136
  * Pure-TypeScript port of yoga-layout (Meta's flexbox engine).
27992
28137
  *
@@ -30437,7 +30582,7 @@ Object.defineProperties(createChalk.prototype, {
30437
30582
  const chalk = createChalk();
30438
30583
  createChalk({ level: stderrColor ? stderrColor.level : 0 });
30439
30584
  //#endregion
30440
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/colorize.js
30585
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/colorize.js
30441
30586
  /**
30442
30587
  * xterm.js (VS Code, Cursor, code-server, Coder) has supported truecolor
30443
30588
  * since 2017, but code-server/Coder containers often don't set
@@ -30568,7 +30713,7 @@ function applyColor(text, color) {
30568
30713
  return colorize(text, color, "foreground");
30569
30714
  }
30570
30715
  //#endregion
30571
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/envUtils.js
30716
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/envUtils.js
30572
30717
  /**
30573
30718
  * Environment truthiness check for the ported Ink core. Accepts the common
30574
30719
  * shell truthy spellings (`1`, `true`, `yes`, `on`).
@@ -30586,7 +30731,7 @@ function isEnvTruthy(value) {
30586
30731
  ].includes(value.toLowerCase());
30587
30732
  }
30588
30733
  //#endregion
30589
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/fullscreen.js
30734
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/fullscreen.js
30590
30735
  /**
30591
30736
  * Whether mouse click handling is disabled for the ported Ink core. dsh-tui
30592
30737
  * reads its own env flag (`CHATCODE_CLI_TUI_DISABLE_MOUSE`); the original module
@@ -30597,7 +30742,7 @@ function isMouseClicksDisabled() {
30597
30742
  return isEnvTruthy(readTuiEnv("DISABLE_MOUSE"));
30598
30743
  }
30599
30744
  //#endregion
30600
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/input-suppression.js
30745
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/input-suppression.js
30601
30746
  /**
30602
30747
  * Input suppression window for terminal handoffs (issue #123): when stdin is
30603
30748
  * handed to an external TUI (full-screen editor) and back, the tty can
@@ -30624,7 +30769,7 @@ function isInputSuppressed() {
30624
30769
  return Date.now() < suppressedUntil;
30625
30770
  }
30626
30771
  //#endregion
30627
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/tokenize.js
30772
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/tokenize.js
30628
30773
  /**
30629
30774
  * Input Tokenizer - Escape sequence boundary detection
30630
30775
  *
@@ -30822,7 +30967,7 @@ function tokenize$2(input, initialState, initialBuffer, flush, x10Mouse, splitIn
30822
30967
  };
30823
30968
  }
30824
30969
  //#endregion
30825
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/parse-keypress.js
30970
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/parse-keypress.js
30826
30971
  /**
30827
30972
  * Keyboard input parser - converts terminal input to key events
30828
30973
  *
@@ -31897,7 +32042,7 @@ function createWheelKey(s, name, col, row, button) {
31897
32042
  };
31898
32043
  }
31899
32044
  //#endregion
31900
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/input-event.js
32045
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/input-event.js
31901
32046
  function parseKey(keypress) {
31902
32047
  const key = {
31903
32048
  upArrow: keypress.name === "up",
@@ -31982,7 +32127,7 @@ var InputEvent = class extends Event {
31982
32127
  }
31983
32128
  };
31984
32129
  //#endregion
31985
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/terminal-focus-event.js
32130
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/terminal-focus-event.js
31986
32131
  /**
31987
32132
  * Event fired when the terminal window gains or loses focus.
31988
32133
  *
@@ -32001,7 +32146,7 @@ var TerminalFocusEvent = class extends Event {
32001
32146
  }
32002
32147
  };
32003
32148
  //#endregion
32004
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/node-cache.js
32149
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/node-cache.js
32005
32150
  /** Layout bounds cached per rendered node, used for blitting and clearing. */
32006
32151
  const nodeCache = /* @__PURE__ */ new WeakMap();
32007
32152
  /** Rects of removed children that need clearing on next render */
@@ -32039,7 +32184,7 @@ function consumeAbsoluteRemovedFlag() {
32039
32184
  return had;
32040
32185
  }
32041
32186
  //#endregion
32042
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/terminal-event.js
32187
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/terminal-event.js
32043
32188
  /**
32044
32189
  * Base class for all terminal events with DOM-style propagation.
32045
32190
  *
@@ -32168,7 +32313,7 @@ var TerminalEvent = class extends Event {
32168
32313
  _prepareForTarget(_target) {}
32169
32314
  };
32170
32315
  //#endregion
32171
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/pointer-event.js
32316
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/pointer-event.js
32172
32317
  /**
32173
32318
  * Base class for pointer-derived terminal events (click, wheel, hover).
32174
32319
  *
@@ -32229,7 +32374,7 @@ var PointerEvent = class extends TerminalEvent {
32229
32374
  }
32230
32375
  };
32231
32376
  //#endregion
32232
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/drag-event.js
32377
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/drag-event.js
32233
32378
  /**
32234
32379
  * Component-level drag event (DOM HTML5 drag semantics subset).
32235
32380
  *
@@ -48337,7 +48482,7 @@ var require_react_reconciler_development = /* @__PURE__ */ __commonJSMin(((expor
48337
48482
  }, module.exports.default = module.exports, Object.defineProperty(module.exports, "__esModule", { value: !0 }));
48338
48483
  }));
48339
48484
  //#endregion
48340
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/layout/node.js
48485
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/layout/node.js
48341
48486
  var import_react_reconciler = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
48342
48487
  if (process.env.NODE_ENV === "production") module.exports = require_react_reconciler_production();
48343
48488
  else module.exports = require_react_reconciler_development();
@@ -48413,7 +48558,7 @@ const LayoutMeasureMode = {
48413
48558
  AtMost: "at-most"
48414
48559
  };
48415
48560
  //#endregion
48416
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/layout/yoga.js
48561
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/layout/yoga.js
48417
48562
  const EDGE_MAP = {
48418
48563
  all: Edge.All,
48419
48564
  horizontal: Edge.Horizontal,
@@ -48640,7 +48785,7 @@ function createYogaLayoutNode() {
48640
48785
  return new YogaLayoutNode(YOGA_INSTANCE.Node.create());
48641
48786
  }
48642
48787
  //#endregion
48643
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/layout/engine.js
48788
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/layout/engine.js
48644
48789
  /**
48645
48790
  * Create a new layout node backed by the Yoga adapter.
48646
48791
  * @returns an empty layout node with no children, styles, or measure function.
@@ -48649,7 +48794,7 @@ function createLayoutNode() {
48649
48794
  return createYogaLayoutNode();
48650
48795
  }
48651
48796
  //#endregion
48652
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/line-width-cache.js
48797
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/line-width-cache.js
48653
48798
  const cache = /* @__PURE__ */ new Map();
48654
48799
  const MAX_CACHE_SIZE = 4096;
48655
48800
  const MAX_CACHE_CHARS = 1e5;
@@ -48685,7 +48830,7 @@ function lineWidth(line) {
48685
48830
  return width;
48686
48831
  }
48687
48832
  //#endregion
48688
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/measure-text.js
48833
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/measure-text.js
48689
48834
  /**
48690
48835
  * Measure wrapped text dimensions in a single pass.
48691
48836
  * @param text - the text to measure.
@@ -48716,7 +48861,7 @@ function measureText(text, maxWidth) {
48716
48861
  };
48717
48862
  }
48718
48863
  //#endregion
48719
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/squash-text-nodes.js
48864
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/squash-text-nodes.js
48720
48865
  /**
48721
48866
  * Squash text nodes into styled segments, propagating styles down through the tree.
48722
48867
  * This allows structured styling without relying on ANSI string transforms.
@@ -48764,7 +48909,7 @@ function squashTextNodes(node) {
48764
48909
  return text;
48765
48910
  }
48766
48911
  //#endregion
48767
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/tabstops.js
48912
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/tabstops.js
48768
48913
  const DEFAULT_TAB_INTERVAL = 8;
48769
48914
  /**
48770
48915
  * Expand tab characters to spaces at fixed column intervals, preserving
@@ -49214,7 +49359,7 @@ function tokenize$1(str, endChar = Number.POSITIVE_INFINITY) {
49214
49359
  return ret;
49215
49360
  }
49216
49361
  //#endregion
49217
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/sliceAnsi.js
49362
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/sliceAnsi.js
49218
49363
  function isEndCode(code) {
49219
49364
  return code.code === code.endCode;
49220
49365
  }
@@ -49831,7 +49976,7 @@ function wrapAnsi$1(string, columns, options) {
49831
49976
  return normalizeText(String(string)).replaceAll("\r\n", "\n").split("\n").map((line) => exec(expandTabs$1(line), columns, options)).join("\n");
49832
49977
  }
49833
49978
  //#endregion
49834
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/wrapAnsi.js
49979
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/wrapAnsi.js
49835
49980
  const wrapAnsiBun = typeof Bun !== "undefined" && typeof Bun.wrapAnsi === "function" ? Bun.wrapAnsi : null;
49836
49981
  const SLOT_MIN_LENGTH = 2048;
49837
49982
  let slot = null;
@@ -49878,7 +50023,7 @@ function wrapAnsiNpmIncremental(input, columns, options) {
49878
50023
  */
49879
50024
  const wrapAnsi = wrapAnsiBun ?? wrapAnsiNpmIncremental;
49880
50025
  //#endregion
49881
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/wrap-text.js
50026
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/wrap-text.js
49882
50027
  const ELLIPSIS = "…";
49883
50028
  const WRAP_CACHE_MAX_ENTRIES = 2048;
49884
50029
  const WRAP_CACHE_MAX_CHARS = 2e6;
@@ -49942,7 +50087,7 @@ function wrapText$1(text, maxWidth, wrapType) {
49942
50087
  return text;
49943
50088
  }
49944
50089
  //#endregion
49945
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/dom.js
50090
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/dom.js
49946
50091
  /**
49947
50092
  * Create an element node of the given kind, allocating its yoga layout node
49948
50093
  * unless the kind renders without layout (`ink-virtual-text`, `ink-link`,
@@ -50262,7 +50407,7 @@ function findOwnerChainAtRow(root, y) {
50262
50407
  }
50263
50408
  }
50264
50409
  //#endregion
50265
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/event-handlers.js
50410
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/event-handlers.js
50266
50411
  /**
50267
50412
  * Reverse lookup: event type string → handler prop names.
50268
50413
  * Used by the dispatcher for O(1) handler lookup per node.
@@ -50316,7 +50461,7 @@ const EVENT_HANDLER_PROPS = new Set([
50316
50461
  "onWheel"
50317
50462
  ]);
50318
50463
  //#endregion
50319
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/dispatcher.js
50464
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/dispatcher.js
50320
50465
  function getHandler(node, eventType, capture) {
50321
50466
  const handlers = node._eventHandlers;
50322
50467
  if (!handlers) return void 0;
@@ -50484,7 +50629,7 @@ var Dispatcher = class {
50484
50629
  }
50485
50630
  };
50486
50631
  //#endregion
50487
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/focus-event.js
50632
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/focus-event.js
50488
50633
  /**
50489
50634
  * Focus event for component focus changes.
50490
50635
  *
@@ -50509,7 +50654,7 @@ var FocusEvent = class extends TerminalEvent {
50509
50654
  }
50510
50655
  };
50511
50656
  //#endregion
50512
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/focus.js
50657
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/focus.js
50513
50658
  const MAX_FOCUS_STACK = 32;
50514
50659
  /**
50515
50660
  * DOM-like focus manager for the Ink terminal UI.
@@ -50665,7 +50810,7 @@ function getFocusManager(node) {
50665
50810
  return getRootNode(node).focusManager;
50666
50811
  }
50667
50812
  //#endregion
50668
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/styles.js
50813
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/styles.js
50669
50814
  const applyPositionStyles = (node, style) => {
50670
50815
  if ("position" in style) node.setPositionType(style.position === "absolute" ? LayoutPositionType.Absolute : LayoutPositionType.Relative);
50671
50816
  if ("top" in style) applyPositionEdge(node, "top", style.top);
@@ -50800,7 +50945,7 @@ const styles = (node, style = {}, resolvedStyle) => {
50800
50945
  applyGapStyles(node, style);
50801
50946
  };
50802
50947
  //#endregion
50803
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/reconciler.js
50948
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/reconciler.js
50804
50949
  if (process.env.NODE_ENV === "development") try {
50805
50950
  import("./devtools-la_KkjCS.js");
50806
50951
  } catch (error) {
@@ -51120,7 +51265,7 @@ const reconciler = (0, import_react_reconciler.default)({
51120
51265
  });
51121
51266
  dispatcher.discreteUpdates = reconciler.discreteUpdates.bind(reconciler);
51122
51267
  //#endregion
51123
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/layout/geometry.js
51268
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/layout/geometry.js
51124
51269
  /**
51125
51270
  * Compute the smallest rectangle containing both input rectangles.
51126
51271
  * @param a - the first rectangle.
@@ -51152,7 +51297,7 @@ function clamp(value, min, max) {
51152
51297
  return value;
51153
51298
  }
51154
51299
  //#endregion
51155
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/warn.js
51300
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/warn.js
51156
51301
  /**
51157
51302
  * Log a warning when a value is present but not an integer.
51158
51303
  * @param value - the value to check; undefined is skipped silently.
@@ -51164,7 +51309,7 @@ function ifNotInteger(value, name) {
51164
51309
  logForDebugging(`${name} should be an integer, got ${value}`, { level: "warn" });
51165
51310
  }
51166
51311
  //#endregion
51167
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/screen.js
51312
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/screen.js
51168
51313
  /**
51169
51314
  * Pool of character strings shared across all screens.
51170
51315
  * With a shared pool, interned char IDs are valid across screens, so
@@ -52233,7 +52378,7 @@ function markNoSelectRegion(screen, x, y, width, height) {
52233
52378
  }
52234
52379
  }
52235
52380
  //#endregion
52236
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/selection.js
52381
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/selection.js
52237
52382
  /**
52238
52383
  * Text selection state for fullscreen mode.
52239
52384
  *
@@ -53199,7 +53344,7 @@ function applySelectionOverlay(screen, selection, stylePool) {
53199
53344
  }
53200
53345
  }
53201
53346
  //#endregion
53202
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/dec.js
53347
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/dec.js
53203
53348
  /**
53204
53349
  * DEC (Digital Equipment Corporation) Private Mode Sequences
53205
53350
  *
@@ -53265,7 +53410,7 @@ const ENABLE_MOUSE_TRACKING = decset(DEC.MOUSE_NORMAL) + decset(DEC.MOUSE_BUTTON
53265
53410
  /** Disable all mouse tracking modes enabled by ENABLE_MOUSE_TRACKING. */
53266
53411
  const DISABLE_MOUSE_TRACKING = decreset(DEC.MOUSE_SGR) + decreset(DEC.MOUSE_ANY) + decreset(DEC.MOUSE_BUTTON) + decreset(DEC.MOUSE_NORMAL);
53267
53412
  //#endregion
53268
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/terminal.js
53413
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/terminal.js
53269
53414
  /**
53270
53415
  * True when running inside a JetBrains IDE terminal (JediTerm). The IDE
53271
53416
  * injects `TERMINAL_EMULATOR=JetBrains-JediTerm` into the pty environment of
@@ -53507,7 +53652,7 @@ function writeDiffToTerminal(terminal, diff, skipSyncMarkers = false) {
53507
53652
  terminal.stdout.write(buffer);
53508
53653
  }
53509
53654
  //#endregion
53510
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/terminal-focus-state.js
53655
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/terminal-focus-state.js
53511
53656
  let focusState = "unknown";
53512
53657
  const resolvers = /* @__PURE__ */ new Set();
53513
53658
  const subscribers = /* @__PURE__ */ new Set();
@@ -53551,7 +53696,7 @@ function subscribeTerminalFocus(cb) {
53551
53696
  };
53552
53697
  }
53553
53698
  //#endregion
53554
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/AppContext.js
53699
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/AppContext.js
53555
53700
  /**
53556
53701
  * `AppContext` is a React context, which exposes a method to manually exit the app (unmount).
53557
53702
  */
@@ -53596,13 +53741,13 @@ var require_react_compiler_runtime_development = /* @__PURE__ */ __commonJSMin((
53596
53741
  })();
53597
53742
  }));
53598
53743
  //#endregion
53599
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/constants.js
53744
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/constants.js
53600
53745
  var import_compiler_runtime = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
53601
53746
  if (process.env.NODE_ENV === "production") module.exports = require_react_compiler_runtime_production();
53602
53747
  else module.exports = require_react_compiler_runtime_development();
53603
53748
  })))();
53604
53749
  //#endregion
53605
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/geometry-trace.js
53750
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/geometry-trace.js
53606
53751
  /**
53607
53752
  * Geometry forensics — per-frame scroll-geometry trace (issues #421/#433).
53608
53753
  *
@@ -53682,7 +53827,7 @@ function endGeometryFrame(durationMs) {
53682
53827
  };
53683
53828
  }
53684
53829
  //#endregion
53685
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/TerminalFocusContext.js
53830
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/TerminalFocusContext.js
53686
53831
  const TerminalFocusContext = (0, import_react.createContext)({
53687
53832
  isTerminalFocused: true,
53688
53833
  terminalFocusState: "unknown"
@@ -53717,7 +53862,7 @@ function TerminalFocusProvider(t0) {
53717
53862
  return t2;
53718
53863
  }
53719
53864
  //#endregion
53720
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-terminal-focus.js
53865
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-terminal-focus.js
53721
53866
  /**
53722
53867
  * Hook to check if the terminal has focus.
53723
53868
  *
@@ -53732,7 +53877,7 @@ function useTerminalFocus() {
53732
53877
  return isTerminalFocused;
53733
53878
  }
53734
53879
  //#endregion
53735
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/ClockContext.js
53880
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/ClockContext.js
53736
53881
  function createClock(tickIntervalMs) {
53737
53882
  const subscribers = /* @__PURE__ */ new Map();
53738
53883
  let interval = null;
@@ -53829,7 +53974,7 @@ function _temp() {
53829
53974
  return createClock(16);
53830
53975
  }
53831
53976
  //#endregion
53832
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/CursorDeclarationContext.js
53977
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/CursorDeclarationContext.js
53833
53978
  /**
53834
53979
  * React context that provides the cursor-declaration setter to descendants.
53835
53980
  */
@@ -53869,7 +54014,7 @@ var require_escape_string_regexp = /* @__PURE__ */ __commonJSMin(((exports, modu
53869
54014
  };
53870
54015
  }));
53871
54016
  //#endregion
53872
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Box.js
54017
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Box.js
53873
54018
  var import_stack_utils = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
53874
54019
  const escapeStringRegexp = require_escape_string_regexp();
53875
54020
  const cwd = typeof process === "object" && process && typeof process.cwd === "function" ? process.cwd() : ".";
@@ -54237,7 +54382,7 @@ function Box(t0) {
54237
54382
  return t4;
54238
54383
  }
54239
54384
  //#endregion
54240
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Text.js
54385
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Text.js
54241
54386
  const memoizedStylesForWrap = {
54242
54387
  wrap: {
54243
54388
  flexGrow: 0,
@@ -54389,7 +54534,7 @@ function Text(t0) {
54389
54534
  return t16;
54390
54535
  }
54391
54536
  //#endregion
54392
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/ErrorOverview.js
54537
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/ErrorOverview.js
54393
54538
  const cleanupPath = (path) => {
54394
54539
  return path?.replace(`file://${process.cwd()}/`, "");
54395
54540
  };
@@ -54494,10 +54639,10 @@ function ErrorOverview({ error }) {
54494
54639
  });
54495
54640
  }
54496
54641
  //#endregion
54497
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/TerminalSizeContext.js
54642
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/TerminalSizeContext.js
54498
54643
  const TerminalSizeContext = (0, import_react.createContext)(null);
54499
54644
  //#endregion
54500
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/useTerminalNotification.js
54645
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/useTerminalNotification.js
54501
54646
  /**
54502
54647
  * React context providing a raw terminal write function. Null until a
54503
54648
  * TerminalWriteProvider is mounted.
@@ -54508,7 +54653,7 @@ const TerminalWriteContext = (0, import_react.createContext)(null);
54508
54653
  */
54509
54654
  const TerminalWriteProvider = TerminalWriteContext.Provider;
54510
54655
  //#endregion
54511
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/App.js
54656
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/App.js
54512
54657
  const SUPPORTS_SUSPEND = process.platform !== "win32";
54513
54658
  const STDIN_RESUME_GAP_MS = 5e3;
54514
54659
  const MULTI_CLICK_TIMEOUT_MS = 500;
@@ -55034,7 +55179,7 @@ function handleMouseEvent(app, m) {
55034
55179
  }
55035
55180
  }
55036
55181
  //#endregion
55037
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/keyboard-event.js
55182
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/keyboard-event.js
55038
55183
  /**
55039
55184
  * Keyboard event dispatched through the DOM tree via capture/bubble.
55040
55185
  *
@@ -55094,7 +55239,7 @@ function keyFromParsed(parsed) {
55094
55239
  return name || seq;
55095
55240
  }
55096
55241
  //#endregion
55097
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/frame.js
55242
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/frame.js
55098
55243
  /**
55099
55244
  * Create an empty frame with a zero-size screen, the given viewport, and a
55100
55245
  * visible cursor at the origin.
@@ -55120,7 +55265,7 @@ function emptyFrame(rows, columns, stylePool, charPool, hyperlinkPool) {
55120
55265
  };
55121
55266
  }
55122
55267
  //#endregion
55123
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/click-event.js
55268
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/click-event.js
55124
55269
  /**
55125
55270
  * Mouse click event. Fired on left-button release without drag, only when
55126
55271
  * mouse tracking is enabled (i.e. inside <AlternateScreen>).
@@ -55151,7 +55296,7 @@ var ClickEvent = class extends PointerEvent {
55151
55296
  }
55152
55297
  };
55153
55298
  //#endregion
55154
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/context-menu-event.js
55299
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/context-menu-event.js
55155
55300
  /**
55156
55301
  * Mouse context-menu event. Fired on right-button press (SGR button 2,
55157
55302
  * low bits of the raw button byte), mirroring the DOM `contextmenu` event
@@ -55175,7 +55320,7 @@ var ContextMenuEvent = class extends PointerEvent {
55175
55320
  }
55176
55321
  };
55177
55322
  //#endregion
55178
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/wheel-event.js
55323
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/events/wheel-event.js
55179
55324
  /**
55180
55325
  * Mouse wheel event dispatched to the ScrollBox under the pointer.
55181
55326
  *
@@ -55211,7 +55356,7 @@ function indentString(string, count = 1, options = {}) {
55211
55356
  return string.replace(regex, indent.repeat(count));
55212
55357
  }
55213
55358
  //#endregion
55214
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/get-max-width.js
55359
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/get-max-width.js
55215
55360
  /**
55216
55361
  * Returns the yoga node's content width (computed width minus padding and
55217
55362
  * border).
@@ -55316,7 +55461,7 @@ var cli_boxes_default = {
55316
55461
  }
55317
55462
  };
55318
55463
  //#endregion
55319
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/render-border.js
55464
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/render-border.js
55320
55465
  /** Built-in border styles beyond those provided by cli-boxes. */
55321
55466
  const CUSTOM_BORDER_STYLES = { dashed: {
55322
55467
  top: "╌",
@@ -55406,7 +55551,7 @@ const renderBorder = (x, y, node, output) => {
55406
55551
  }
55407
55552
  };
55408
55553
  //#endregion
55409
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/widest-line.js
55554
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/widest-line.js
55410
55555
  /**
55411
55556
  * Get the display width of the widest line in a string.
55412
55557
  * @param string - the text to measure, possibly containing newlines.
@@ -55425,7 +55570,7 @@ function widestLine(string) {
55425
55570
  return maxWidth;
55426
55571
  }
55427
55572
  //#endregion
55428
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/render-node-to-output.js
55573
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/render-node-to-output.js
55429
55574
  function isXtermJsHost() {
55430
55575
  return process.env.TERM_PROGRAM === "vscode" || isXtermJs();
55431
55576
  }
@@ -56241,7 +56386,7 @@ function dropSubtreeCache(node) {
56241
56386
  for (const child of node.childNodes) if (child.nodeName !== "#text") dropSubtreeCache(child);
56242
56387
  }
56243
56388
  //#endregion
56244
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hit-test.js
56389
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hit-test.js
56245
56390
  /**
56246
56391
  * Find the deepest DOM element whose rendered rect contains (col, row).
56247
56392
  *
@@ -56631,7 +56776,7 @@ function dispatchHover(root, col, row, hovered) {
56631
56776
  }
56632
56777
  }
56633
56778
  //#endregion
56634
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/flush-tick.js
56779
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/flush-tick.js
56635
56780
  /**
56636
56781
  * Monotonic terminal-flush counter for the ported Ink core.
56637
56782
  *
@@ -56664,7 +56809,7 @@ function getTerminalFlushTick() {
56664
56809
  return flushTick;
56665
56810
  }
56666
56811
  //#endregion
56667
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/instances.js
56812
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/instances.js
56668
56813
  /**
56669
56814
  * Live Ink instances keyed by their output stream, so consecutive render()
56670
56815
  * calls reuse the instance for a stream instead of creating a new one.
@@ -56673,7 +56818,7 @@ function getTerminalFlushTick() {
56673
56818
  */
56674
56819
  const instances = /* @__PURE__ */ new Map();
56675
56820
  //#endregion
56676
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/log-update.js
56821
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/log-update.js
56677
56822
  const CARRIAGE_RETURN = { type: "carriageReturn" };
56678
56823
  const NEWLINE = {
56679
56824
  type: "stdout",
@@ -57310,7 +57455,7 @@ var VirtualScreen = class {
57310
57455
  }
57311
57456
  };
57312
57457
  //#endregion
57313
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/optimizer.js
57458
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/optimizer.js
57314
57459
  /**
57315
57460
  * Optimize a diff by applying all optimization rules in a single pass.
57316
57461
  * This reduces the number of patches that need to be written to the terminal.
@@ -57375,7 +57520,7 @@ function optimize(diff) {
57375
57520
  return result;
57376
57521
  }
57377
57522
  //#endregion
57378
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/bidi.js
57523
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/bidi.js
57379
57524
  var import_bidi = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
57380
57525
  (function(global, factory) {
57381
57526
  typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, global.bidi_js = factory());
@@ -58151,7 +58296,7 @@ function hasRTLCharacters(text) {
58151
58296
  return /[\u0590-\u05FF\uFB1D-\uFB4F\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF\u0780-\u07BF\u0700-\u074F]/u.test(text);
58152
58297
  }
58153
58298
  //#endregion
58154
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/output.js
58299
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/output.js
58155
58300
  /**
58156
58301
  * charCache bounds. The entry-count cap alone was not enough: a streaming
58157
58302
  * line produces a NEW cache key on every frame, and each entry's cost is
@@ -58821,7 +58966,7 @@ function writeLineToScreen(screen, line, x, y, screenWidth, stylePool, charCache
58821
58966
  return offsetX;
58822
58967
  }
58823
58968
  //#endregion
58824
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/render-to-screen.js
58969
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/render-to-screen.js
58825
58970
  const timing = {
58826
58971
  reconcile: 0,
58827
58972
  yoga: 0,
@@ -58915,7 +59060,7 @@ function applyPositionedHighlight(screen, stylePool, positions, rowOffset, curre
58915
59060
  return true;
58916
59061
  }
58917
59062
  //#endregion
58918
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/renderer.js
59063
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/renderer.js
58919
59064
  /**
58920
59065
  * Create the renderer function for a root DOM node. The returned renderer
58921
59066
  * reuses an Output across frames so its character cache persists.
@@ -58990,7 +59135,7 @@ function createRenderer(node, stylePool) {
58990
59135
  };
58991
59136
  }
58992
59137
  //#endregion
58993
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/searchHighlight.js
59138
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/searchHighlight.js
58994
59139
  /**
58995
59140
  * Highlight all visible occurrences of `query` in the screen buffer by
58996
59141
  * inverting cell styles (SGR 7). Post-render, same damage-tracking machinery
@@ -59052,7 +59197,7 @@ function applySearchHighlight(screen, query, stylePool) {
59052
59197
  return applied;
59053
59198
  }
59054
59199
  //#endregion
59055
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/ink.js
59200
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/ink.js
59056
59201
  const ALT_SCREEN_ANCHOR_CURSOR = Object.freeze({
59057
59202
  x: 0,
59058
59203
  y: 0,
@@ -59130,7 +59275,7 @@ var Ink = class {
59130
59275
  if (options.stdin.isTTY) options.stdin.on("error", this.handleStdinError);
59131
59276
  if (this.options.patchConsole) {
59132
59277
  this.restoreConsole = this.patchConsole();
59133
- this.restoreStderr = this.patchStderr();
59278
+ if (process.stderr.isTTY) this.restoreStderr = this.patchStderr();
59134
59279
  }
59135
59280
  this.terminal = {
59136
59281
  stdout: options.stdout,
@@ -60605,7 +60750,7 @@ const CONSOLE_STDERR_METHODS = [
60605
60750
  "trace"
60606
60751
  ];
60607
60752
  //#endregion
60608
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/root.js
60753
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/root.js
60609
60754
  /**
60610
60755
  * Mount a component and render the output.
60611
60756
  * @param node - the React element to render.
@@ -60688,7 +60833,7 @@ const getInstance = (stdout, createInstance) => {
60688
60833
  return instance;
60689
60834
  };
60690
60835
  //#endregion
60691
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/ThemedBox.js
60836
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/ThemedBox.js
60692
60837
  /** Resolves a color value that may be a theme key to a raw Color. */
60693
60838
  function resolveColor$1(color, theme) {
60694
60839
  if (!color) return void 0;
@@ -60713,7 +60858,7 @@ function ThemedBox({ borderColor, borderTopColor, borderBottomColor, borderLeftC
60713
60858
  });
60714
60859
  }
60715
60860
  //#endregion
60716
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/ThemedText.js
60861
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/ThemedText.js
60717
60862
  /**
60718
60863
  * Colors uncolored ThemedText in the subtree. Precedence: explicit `color` >
60719
60864
  * this > dimColor (in the Claude Code visual language, where message rows
@@ -60749,7 +60894,7 @@ function ThemedText({ color, backgroundColor, dimColor = false, bold = false, it
60749
60894
  });
60750
60895
  }
60751
60896
  //#endregion
60752
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Spacer.js
60897
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Spacer.js
60753
60898
  /**
60754
60899
  * A flexible space that expands along the major axis of its containing layout.
60755
60900
  * It's useful as a shortcut for filling all the available spaces between elements.
@@ -60764,7 +60909,7 @@ function Spacer() {
60764
60909
  return t0;
60765
60910
  }
60766
60911
  //#endregion
60767
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Newline.js
60912
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Newline.js
60768
60913
  /**
60769
60914
  * Adds one or more newline (\n) characters. Must be used within <Text> components.
60770
60915
  */
@@ -60787,7 +60932,7 @@ function Newline(t0) {
60787
60932
  return t3;
60788
60933
  }
60789
60934
  //#endregion
60790
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/NoSelect.js
60935
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/NoSelect.js
60791
60936
  /**
60792
60937
  * Marks its contents as non-selectable in fullscreen text selection.
60793
60938
  * Cells inside this box are skipped by both the selection highlight and
@@ -60838,7 +60983,7 @@ function NoSelect(t0) {
60838
60983
  return t2;
60839
60984
  }
60840
60985
  //#endregion
60841
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/AlternateScreen.js
60986
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/AlternateScreen.js
60842
60987
  /**
60843
60988
  * Run children in the terminal's alternate screen buffer, constrained to
60844
60989
  * the viewport height. While mounted:
@@ -60913,7 +61058,7 @@ function AlternateScreen(t0) {
60913
61058
  return t5;
60914
61059
  }
60915
61060
  //#endregion
60916
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/ScrollBox.js
61061
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/ScrollBox.js
60917
61062
  /**
60918
61063
  * A Box with `overflow: scroll` and an imperative scroll API.
60919
61064
  *
@@ -61091,7 +61236,7 @@ function ScrollBox({ children, ref, stickyScroll, ...style }) {
61091
61236
  });
61092
61237
  }
61093
61238
  //#endregion
61094
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-input.js
61239
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-input.js
61095
61240
  /**
61096
61241
  * Keep an event listener stable while always dispatching to the latest render's
61097
61242
  * callback. Keeping this hook local is important for packaged installs: a
@@ -61157,7 +61302,7 @@ const useInput = (inputHandler, options = {}) => {
61157
61302
  }, [internal_eventEmitter, handleData]);
61158
61303
  };
61159
61304
  //#endregion
61160
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-selection.js
61305
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-selection.js
61161
61306
  /**
61162
61307
  * Access to text selection operations on the Ink instance (fullscreen only).
61163
61308
  * Returns no-op functions when fullscreen mode is disabled.
@@ -61197,7 +61342,7 @@ function useSelection() {
61197
61342
  }, [ink]);
61198
61343
  }
61199
61344
  //#endregion
61200
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-copy-on-select.js
61345
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-copy-on-select.js
61201
61346
  /**
61202
61347
  * Copy-on-select: when a drag finishes (or a double/triple click, or a
61203
61348
  * shift+arrow extension, lands a selection), copy the selected text to the
@@ -61237,14 +61382,14 @@ function useCopyOnSelect(onCopied) {
61237
61382
  ]);
61238
61383
  }
61239
61384
  //#endregion
61240
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-app.js
61385
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-app.js
61241
61386
  /**
61242
61387
  * React hook exposing the manual app-exit function from `AppContext`.
61243
61388
  * @returns the `AppContext` value, whose `exit` function unmounts the app.
61244
61389
  */
61245
61390
  const useApp = () => (0, import_react.useContext)(AppContext);
61246
61391
  //#endregion
61247
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-terminal-viewport.js
61392
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-terminal-viewport.js
61248
61393
  /**
61249
61394
  * Hook to detect if a component is within the terminal viewport.
61250
61395
  *
@@ -61298,7 +61443,7 @@ function useTerminalViewport() {
61298
61443
  return [setElement, entryRef.current];
61299
61444
  }
61300
61445
  //#endregion
61301
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-animation-frame.js
61446
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-animation-frame.js
61302
61447
  /**
61303
61448
  * Hook for synchronized animations that pause when offscreen.
61304
61449
  *
@@ -61347,7 +61492,7 @@ function useAnimationFrame(intervalMs = 16) {
61347
61492
  return [viewportRef, time];
61348
61493
  }
61349
61494
  //#endregion
61350
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-terminal-size.js
61495
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-terminal-size.js
61351
61496
  /** Terminal dimensions from the Ink app shell (from Claude Code).
61352
61497
  * @returns the current terminal dimensions.
61353
61498
  */
@@ -61357,7 +61502,7 @@ function useTerminalSize() {
61357
61502
  return size;
61358
61503
  }
61359
61504
  //#endregion
61360
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useBlink.js
61505
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useBlink.js
61361
61506
  const BLINK_INTERVAL_MS = 600;
61362
61507
  /**
61363
61508
  * Hook for synchronized blinking animations that pause when offscreen
@@ -61374,7 +61519,7 @@ function useBlink(enabled, intervalMs = BLINK_INTERVAL_MS) {
61374
61519
  return [ref, Math.floor(time / intervalMs) % 2 === 0];
61375
61520
  }
61376
61521
  //#endregion
61377
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/supports-hyperlinks.js
61522
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/supports-hyperlinks.js
61378
61523
  var import_supports_hyperlinks = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
61379
61524
  const supportsColor = require_supports_color();
61380
61525
  const hasFlag = require_has_flag();
@@ -61471,7 +61616,7 @@ function supportsHyperlinks(options) {
61471
61616
  return false;
61472
61617
  }
61473
61618
  //#endregion
61474
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Link.js
61619
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/components/Link.js
61475
61620
  function Link(t0) {
61476
61621
  const $ = (0, import_compiler_runtime.c)(5);
61477
61622
  const { children, url, fallback } = t0;
@@ -61499,7 +61644,7 @@ function Link(t0) {
61499
61644
  return t2;
61500
61645
  }
61501
61646
  //#endregion
61502
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/esc.js
61647
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/esc.js
61503
61648
  /**
61504
61649
  * ESC Sequence Parser
61505
61650
  *
@@ -61555,7 +61700,7 @@ function parseEsc(chars) {
61555
61700
  };
61556
61701
  }
61557
61702
  //#endregion
61558
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/types.js
61703
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/types.js
61559
61704
  /**
61560
61705
  * ANSI Parser - Semantic Types
61561
61706
  *
@@ -61583,7 +61728,7 @@ function defaultStyle() {
61583
61728
  };
61584
61729
  }
61585
61730
  //#endregion
61586
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/sgr.js
61731
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/sgr.js
61587
61732
  /**
61588
61733
  * SGR (Select Graphic Rendition) Parser
61589
61734
  *
@@ -61891,7 +62036,7 @@ function applySGR(paramStr, style) {
61891
62036
  return s;
61892
62037
  }
61893
62038
  //#endregion
61894
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/parser.js
62039
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/termio/parser.js
61895
62040
  /**
61896
62041
  * ANSI Parser - Semantic Action Generator
61897
62042
  *
@@ -62268,7 +62413,7 @@ var Parser = class {
62268
62413
  }
62269
62414
  };
62270
62415
  //#endregion
62271
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/Ansi.js
62416
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/Ansi.js
62272
62417
  /**
62273
62418
  * Component that parses ANSI escape codes and renders them using Text components.
62274
62419
  *
@@ -62519,7 +62664,7 @@ function StyledText(t0) {
62519
62664
  return t1;
62520
62665
  }
62521
62666
  //#endregion
62522
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ui.js
62667
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ui.js
62523
62668
  var ui_exports = /* @__PURE__ */ __exportAll({
62524
62669
  AlternateScreen: () => AlternateScreen,
62525
62670
  Ansi: () => Ansi,
@@ -62543,7 +62688,7 @@ var ui_exports = /* @__PURE__ */ __exportAll({
62543
62688
  useTheme: () => useTheme
62544
62689
  });
62545
62690
  //#endregion
62546
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PageMargin.js
62691
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PageMargin.js
62547
62692
  /** 嵌套安全的 inset(若未来出现嵌套 PageMargin 会累加)。 */
62548
62693
  const PageInsetContext = import_react.createContext({
62549
62694
  x: 0,
@@ -62597,7 +62742,7 @@ function PageMargin({ children }) {
62597
62742
  });
62598
62743
  }
62599
62744
  //#endregion
62600
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/figures.js
62745
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/figures.js
62601
62746
  /**
62602
62747
  * UI glyph constants used across the TUI: prompt markers, status badges,
62603
62748
  * direction arrows, media controls, reasoning-effort indicators, and
@@ -62624,7 +62769,7 @@ const THINKING_SPINNER_FRAMES = [
62624
62769
  "⠏"
62625
62770
  ];
62626
62771
  //#endregion
62627
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/providerWizard.js
62772
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/providerWizard.js
62628
62773
  /**
62629
62774
  * `/provider` wizard — interactively adds, edits, or deletes an LLM
62630
62775
  * provider route at runtime.
@@ -63350,7 +63495,7 @@ function buildProfile(input) {
63350
63495
  return profile;
63351
63496
  }
63352
63497
  //#endregion
63353
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/modelConfigWizard.js
63498
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/modelConfigWizard.js
63354
63499
  /** `/model-config`: platform catalogs and shared provider configuration. */
63355
63500
  const CUSTOM_MODEL_PROTOCOLS = [
63356
63501
  "openai-completions",
@@ -64232,7 +64377,7 @@ function parseCapacity(value) {
64232
64377
  return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : void 0;
64233
64378
  }
64234
64379
  //#endregion
64235
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-declared-cursor.js
64380
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-declared-cursor.js
64236
64381
  /**
64237
64382
  * Declares where the terminal cursor should be parked after each frame.
64238
64383
  *
@@ -64281,7 +64426,7 @@ function useDeclaredCursor(options) {
64281
64426
  return setNode;
64282
64427
  }
64283
64428
  //#endregion
64284
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/measure-element.js
64429
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/measure-element.js
64285
64430
  /**
64286
64431
  * Measure the rendered dimensions of a Box element.
64287
64432
  * @param node - the DOM element to measure.
@@ -64292,7 +64437,7 @@ const measureElement = (node) => ({
64292
64437
  height: node.yogaNode?.getComputedHeight() ?? 0
64293
64438
  });
64294
64439
  //#endregion
64295
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/Divider.js
64440
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/Divider.js
64296
64441
  const MAX_APPLIED_MEASUREMENTS = 8;
64297
64442
  /**
64298
64443
  * A horizontal divider line, optionally with a title in the middle
@@ -66020,7 +66165,7 @@ f.parseInline;
66020
66165
  O.parse;
66021
66166
  T.lex;
66022
66167
  //#endregion
66023
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/syntaxTheme.js
66168
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/syntaxTheme.js
66024
66169
  /** highlight.js token classes -> theme syntax tokens. `default` catches
66025
66170
  * every unmapped class so cli-highlight's own yellow never leaks through
66026
66171
  * (issue #250, P2-6). */
@@ -66086,7 +66231,7 @@ function buildSyntaxTheme(theme) {
66086
66231
  return out;
66087
66232
  }
66088
66233
  //#endregion
66089
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/hyperlink.js
66234
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/hyperlink.js
66090
66235
  /** OSC 8 hyperlink start sequence: `ESC ] 8 ; ;`, followed by the URL. */
66091
66236
  const OSC8_START = "\x1B]8;;";
66092
66237
  /** Schemes a rendered hyperlink may point at. Anything else degrades to
@@ -66128,7 +66273,7 @@ function createHyperlink(url, content, options) {
66128
66273
  return `${OSC8_START}${safeUrl}${(options?.style ?? ((text) => chalk.blue(text)))(displayText)}${OSC8_START}`;
66129
66274
  }
66130
66275
  //#endregion
66131
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/fileTarget.js
66276
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/fileTarget.js
66132
66277
  /**
66133
66278
  * Clickable file targets: turning path-like text in AI output into
66134
66279
  * clickable targets, and resolving those targets back to absolute paths at
@@ -66270,7 +66415,7 @@ function linkifyFilePaths(text, wrap) {
66270
66415
  });
66271
66416
  }
66272
66417
  //#endregion
66273
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/markdown.js
66418
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/markdown.js
66274
66419
  /**
66275
66420
  * Markdown-to-ANSI renderer over marked's token stream.
66276
66421
  *
@@ -66585,7 +66730,7 @@ function padAligned(content, displayWidth, targetWidth, align) {
66585
66730
  return content + " ".repeat(extra);
66586
66731
  }
66587
66732
  //#endregion
66588
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/cliHighlight.js
66733
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/cliHighlight.js
66589
66734
  let cliHighlightPromise;
66590
66735
  async function loadCliHighlight() {
66591
66736
  try {
@@ -66608,7 +66753,7 @@ function getCliHighlightPromise() {
66608
66753
  return cliHighlightPromise;
66609
66754
  }
66610
66755
  //#endregion
66611
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/MarkdownTable.js
66756
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/MarkdownTable.js
66612
66757
  /** Accounts for parent indentation and terminal resize races (from Claude Code). */
66613
66758
  const SAFETY_MARGIN = 4;
66614
66759
  /** Minimum column width to prevent degenerate layouts */
@@ -66795,7 +66940,7 @@ function MarkdownTable({ token, highlight, forceWidth }) {
66795
66940
  return (0, import_jsx_runtime.jsx)(Text, { children: tableLines.join("\n") });
66796
66941
  }
66797
66942
  //#endregion
66798
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Markdown.js
66943
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Markdown.js
66799
66944
  const TOKEN_CACHE_CAPACITY = 200;
66800
66945
  const TOKEN_CACHE_CHAR_BUDGET = 2e5;
66801
66946
  const TOKEN_CACHE_MAX_SOURCE_LENGTH = 2e4;
@@ -66904,7 +67049,7 @@ function MarkdownImpl({ children, dimColor = false, cacheTokens = true }) {
66904
67049
  */
66905
67050
  const Markdown = import_react.memo(MarkdownImpl, (prev, next) => prev.children === next.children && prev.dimColor === next.dimColor && prev.cacheTokens === next.cacheTokens);
66906
67051
  //#endregion
66907
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/questions/PlanReviewPanel.js
67052
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/questions/PlanReviewPanel.js
66908
67053
  /**
66909
67054
  * The plan-review panel — Claude Code style exit-plan-mode decision card
66910
67055
  * for the DSH user-interaction seam. plan-mode's `exit_plan_mode` tool asks
@@ -67226,7 +67371,7 @@ function PlanReviewPanel({ question, onAnswer, onCancel }) {
67226
67371
  });
67227
67372
  }
67228
67373
  //#endregion
67229
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/listWindow.js
67374
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/listWindow.js
67230
67375
  /**
67231
67376
  * 焦点居中的列表窗口:长列表只渲染焦点附近的一段,保证焦点行始终可见。
67232
67377
  * 瞬态面板走 OverlayAbove 零高度浮层后,超高部分会被 overflow 裁掉且焦点
@@ -67278,7 +67423,7 @@ function listWindow(heights, focusIndex, maxRows, gap = 0) {
67278
67423
  }
67279
67424
  }
67280
67425
  //#endregion
67281
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/questions/AskUserQuestionPanel.js
67426
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/questions/AskUserQuestionPanel.js
67282
67427
  /**
67283
67428
  * The questionnaire panel — Claude Code style ask-user-question UI for the
67284
67429
  * DSH user-interaction seam. One question per panel (progress header, header
@@ -67872,7 +68017,7 @@ function AskUserQuestionPanel({ question, position, total, answered, initialDraf
67872
68017
  });
67873
68018
  }
67874
68019
  //#endregion
67875
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/approvals/ApprovalPanel.js
68020
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/approvals/ApprovalPanel.js
67876
68021
  /**
67877
68022
  * The approval panel — Claude Code style permission prompt for the DSH
67878
68023
  * approval seam (`ctx.approval`). One ask per panel: a permission-colored
@@ -67997,7 +68142,7 @@ function ApprovalPanel({ approval, background = false, onDecide }) {
67997
68142
  });
67998
68143
  }
67999
68144
  //#endregion
68000
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/Pane.js
68145
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/Pane.js
68001
68146
  /**
68002
68147
  * A pane — a region below the prompt bounded by a colored top line with a
68003
68148
  * one-row gap above and horizontal padding, mirroring Claude Code's
@@ -68019,7 +68164,7 @@ function Pane({ children, color }) {
68019
68164
  });
68020
68165
  }
68021
68166
  //#endregion
68022
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/ListItem.js
68167
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/ListItem.js
68023
68168
  /**
68024
68169
  * A list item for selection UIs, mirroring Claude Code's
68025
68170
  * design-system/ListItem.tsx: `❯` pointer for the focused row, `✓`
@@ -68116,7 +68261,7 @@ function flattenDeep(node) {
68116
68261
  return node;
68117
68262
  }
68118
68263
  //#endregion
68119
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/HintLine.js
68264
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/HintLine.js
68120
68265
  /**
68121
68266
  * Localized shortcut-hint line: renders a `t('hint-*')` string, with the
68122
68267
  * `**primary shortcut**` segment (the main action's key, wrapped in `**` in
@@ -68133,7 +68278,7 @@ function HintLine({ text }) {
68133
68278
  }, index) : part) });
68134
68279
  }
68135
68280
  //#endregion
68136
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ExtensionDialog.js
68281
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ExtensionDialog.js
68137
68282
  /**
68138
68283
  * The managed plugin dialog (`ctx.tuiDialogs`) — one panel rendering the
68139
68284
  * store's current snapshot in the chat chrome (the slot approval/question
@@ -68393,7 +68538,7 @@ function InputDialog({ dialog, onDecide, onCancel }) {
68393
68538
  });
68394
68539
  }
68395
68540
  //#endregion
68396
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-search-highlight.js
68541
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-search-highlight.js
68397
68542
  /**
68398
68543
  * Set the search highlight query on the Ink instance. Non-empty → all
68399
68544
  * visible occurrences are inverted on the next frame (SGR 7, screen-buffer
@@ -68425,7 +68570,7 @@ function useSearchHighlight() {
68425
68570
  }, [ink]);
68426
68571
  }
68427
68572
  //#endregion
68428
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-terminal-title.js
68573
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/hooks/use-terminal-title.js
68429
68574
  /**
68430
68575
  * Declaratively set the terminal tab/window title.
68431
68576
  *
@@ -68448,7 +68593,7 @@ function useTerminalTitle(title) {
68448
68593
  }, [title, writeRaw]);
68449
68594
  }
68450
68595
  //#endregion
68451
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessions/format.js
68596
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessions/format.js
68452
68597
  /**
68453
68598
  * Session browser formatting.
68454
68599
  *
@@ -68697,7 +68842,7 @@ function projectName(cwd) {
68697
68842
  return normalized.split("/").filter(Boolean).at(-1) ?? normalized;
68698
68843
  }
68699
68844
  //#endregion
68700
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Tooltip.js
68845
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Tooltip.js
68701
68846
  /**
68702
68847
  * Tooltip hover system — the terminal equivalent of the HTML `title`
68703
68848
  * attribute. Attach {@link useTooltip} props to any Box whose visible text
@@ -68905,7 +69050,7 @@ function wrapTooltipContent(text, width) {
68905
69050
  return rows;
68906
69051
  }
68907
69052
  //#endregion
68908
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/UserPromptMessage.js
69053
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/UserPromptMessage.js
68909
69054
  /** User prompt row in the legacy CLI treatment: a full-width gray strip. */
68910
69055
  function UserPromptMessage({ text, addMargin, isSelected = false, onClick }) {
68911
69056
  const { columns } = useTerminalSize();
@@ -68934,7 +69079,7 @@ function UserPromptMessage({ text, addMargin, isSelected = false, onClick }) {
68934
69079
  });
68935
69080
  }
68936
69081
  //#endregion
68937
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/AssistantTextMessage.js
69082
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/AssistantTextMessage.js
68938
69083
  /**
68939
69084
  * Assistant text message: bullet + markdown body (mirroring Claude Code's default branch).
68940
69085
  *
@@ -68967,7 +69112,7 @@ function AssistantTextMessage({ text, addMargin, isSelected = false, isExpanded
68967
69112
  });
68968
69113
  }
68969
69114
  //#endregion
68970
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/StreamingMarkdown.js
69115
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/StreamingMarkdown.js
68971
69116
  /**
68972
69117
  * Renders markdown during streaming by splitting at the last top-level block
68973
69118
  * boundary: everything before is stable (memoized, never re-parsed), only the
@@ -69157,7 +69302,7 @@ function StreamingMarkdown({ children, dimColor = false }) {
69157
69302
  });
69158
69303
  }
69159
69304
  //#endregion
69160
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/spinnerUtils.js
69305
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/spinnerUtils.js
69161
69306
  /**
69162
69307
  * Spinner 动画的通用工具集:平台相关的帧字符选择、RGB 颜色插值、
69163
69308
  * HSL 色相转 RGB,以及 `rgb(...)` 颜色字符串的解析与记忆化。
@@ -69237,7 +69382,7 @@ function parseRGB(colorStr) {
69237
69382
  return parsed;
69238
69383
  }
69239
69384
  //#endregion
69240
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/shimmer.js
69385
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/shimmer.js
69241
69386
  /** Header blue-white ladder: brand → ice → pale → soft ice flash.
69242
69387
  * FLASH stays visibly blue (never pure white) — the highlight reads as a
69243
69388
  * mist-brightened crest, not a white strobe. */
@@ -69253,7 +69398,7 @@ const ICE = {
69253
69398
  b: 255
69254
69399
  };
69255
69400
  //#endregion
69256
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/AssistantThinkingMessage.js
69401
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/AssistantThinkingMessage.js
69257
69402
  /** Preview body rows — a FIXED row count (kimicode-style constant-height
69258
69403
  * ticker). Ink's truncate slices the whole string across newlines as one
69259
69404
  * logical line, so a single joined Text collapses to 1-2 rows whenever
@@ -69366,7 +69511,7 @@ function AssistantThinkingMessage({ thinking, textFull, addMargin, verbose, stre
69366
69511
  });
69367
69512
  }
69368
69513
  //#endregion
69369
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ToolUseLoader.js
69514
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ToolUseLoader.js
69370
69515
  const CATEGORY_BY_TOOL = {
69371
69516
  bash: "exec",
69372
69517
  powershell: "exec",
@@ -69947,7 +70092,7 @@ var ArrayDiff = class extends Diff {
69947
70092
  };
69948
70093
  new ArrayDiff();
69949
70094
  //#endregion
69950
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/syntaxRuns.js
70095
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/cc/syntaxRuns.js
69951
70096
  const ANSI16 = {
69952
70097
  30: "rgb(0,0,0)",
69953
70098
  31: "rgb(128,0,0)",
@@ -70032,7 +70177,7 @@ function syntaxThemeSignature(theme) {
70032
70177
  return Object.values(SYNTAX_CLASS_TO_TOKEN).map((key) => palette[key] ?? "").join("|");
70033
70178
  }
70034
70179
  //#endregion
70035
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/smoothReveal.js
70180
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/smoothReveal.js
70036
70181
  /**
70037
70182
  * Smooth streaming reveal — decouples "text the provider has delivered" from
70038
70183
  * "text the screen is showing" (the oh-my-pi `display.smoothStreaming` idea,
@@ -70278,7 +70423,7 @@ function revealLinesOf(key, total, options) {
70278
70423
  return Math.min(existing.revealed, total);
70279
70424
  }
70280
70425
  //#endregion
70281
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SplitDiffView.js
70426
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SplitDiffView.js
70282
70427
  /** Replace tabs so width math and alignment hold (pi convention). */
70283
70428
  const expandTabs = (text) => text.replaceAll(" ", " ");
70284
70429
  /**
@@ -70587,7 +70732,7 @@ function SplitDiffView({ diffs, width, maxRows, verbose, toolBackground = "none"
70587
70732
  });
70588
70733
  }
70589
70734
  //#endregion
70590
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SyntaxText.js
70735
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SyntaxText.js
70591
70736
  /** Async nested Text renderer. Lexes the complete payload before splitting. */
70592
70737
  function SyntaxText({ text, language, sourceText = text, lineIndex = 0, color, dimColor }) {
70593
70738
  const [highlighter, setHighlighter] = import_react.useState(null);
@@ -70631,7 +70776,7 @@ function SyntaxText({ text, language, sourceText = text, lineIndex = 0, color, d
70631
70776
  }, index)) });
70632
70777
  }
70633
70778
  //#endregion
70634
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectory/format.js
70779
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectory/format.js
70635
70780
  /**
70636
70781
  * Trajectory formatting — durations, clocks, badges and heat.
70637
70782
  *
@@ -70833,7 +70978,7 @@ function ledgerLayout(columns) {
70833
70978
  };
70834
70979
  }
70835
70980
  //#endregion
70836
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useRevealVersion.js
70981
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useRevealVersion.js
70837
70982
  /**
70838
70983
  * Reveal-frame wakeup as a React hook — bumps once per advancing ~30fps
70839
70984
  * scheduler tick so consumers re-run their render-phase cursor reads
@@ -70863,7 +71008,7 @@ function useRevealVersion(enabled = true) {
70863
71008
  return version;
70864
71009
  }
70865
71010
  //#endregion
70866
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/AssistantToolUseMessage.js
71011
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/AssistantToolUseMessage.js
70867
71012
  /** Tool display names: DSH emits lowercase tool ids (`bash`); Claude Code
70868
71013
  * shows capitalized names (`Bash`). Map the common ones, fall back to the
70869
71014
  * id with its first letter uppercased. */
@@ -71399,7 +71544,7 @@ function AssistantToolUseMessage({ tool, addMargin, verbose, isSelected = false,
71399
71544
  });
71400
71545
  }
71401
71546
  //#endregion
71402
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Chat/SubagentMessage.js
71547
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Chat/SubagentMessage.js
71403
71548
  /** The waterfall window is a Kimi Code style constant-height region. */
71404
71549
  const WATERFALL_ROWS = 3;
71405
71550
  /** Card left padding + the `│ ` gutter prefix. */
@@ -71500,7 +71645,7 @@ function SubagentMessage({ subagent, addMargin, activityFrames, onClick }) {
71500
71645
  dimColor: true,
71501
71646
  children: "·"
71502
71647
  }),
71503
- (0, import_jsx_runtime.jsx)(ThemedText, { children: subagent.model ?? subagent.provider ?? "default" }),
71648
+ (0, import_jsx_runtime.jsx)(ThemedText, { children: subagent.modelName ?? subagent.model ?? subagent.provider ?? "default" }),
71504
71649
  subagent.effort && (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [(0, import_jsx_runtime.jsx)(ThemedText, {
71505
71650
  dimColor: true,
71506
71651
  children: "·"
@@ -71607,7 +71752,7 @@ function SubagentMessage({ subagent, addMargin, activityFrames, onClick }) {
71607
71752
  });
71608
71753
  }
71609
71754
  //#endregion
71610
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Chat/JobCard.js
71755
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Chat/JobCard.js
71611
71756
  /** Card left padding + the `│ ` gutter prefix. */
71612
71757
  const WATERFALL_GUTTER = 4;
71613
71758
  /** Static status marker — deliberately NOT the animated activity-indicator
@@ -71760,7 +71905,7 @@ function JobCard({ job, addMargin, onClick }) {
71760
71905
  });
71761
71906
  }
71762
71907
  //#endregion
71763
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/InterruptedByUser.js
71908
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/InterruptedByUser.js
71764
71909
  /**
71765
71910
  * The dim "interrupted" row shown when the user stops a turn, mirroring
71766
71911
  * Claude Code's `InterruptedByUser.tsx`.
@@ -71775,7 +71920,7 @@ function InterruptedByUser() {
71775
71920
  })] });
71776
71921
  }
71777
71922
  //#endregion
71778
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/gitCommitStats.js
71923
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/gitCommitStats.js
71779
71924
  /**
71780
71925
  * 当月 AI 代码生成占比统计(移植自 chatcode-cli 的同名服务)。
71781
71926
  *
@@ -71943,7 +72088,7 @@ function computeAiRatioPercent(records) {
71943
72088
  return clampPercent(aiAdoptedTotal / addedTotal * 100);
71944
72089
  }
71945
72090
  //#endregion
71946
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useAiRatio.js
72091
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useAiRatio.js
71947
72092
  /**
71948
72093
  * 「AI代码生成占比」数据源 Hook(移植自 chatcode-cli 的同名 Hook)。
71949
72094
  *
@@ -72007,7 +72152,7 @@ function useAiRatio(enabled = true) {
72007
72152
  };
72008
72153
  }
72009
72154
  //#endregion
72010
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useNotification.js
72155
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useNotification.js
72011
72156
  /**
72012
72157
  * 「通知」数据源 Hook(移植自 chatcode-cli 的 LogoV2/FooterInfo 通知行)。
72013
72158
  *
@@ -72044,7 +72189,7 @@ function useNotification() {
72044
72189
  return { message };
72045
72190
  }
72046
72191
  //#endregion
72047
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/truncateToWidth.js
72192
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/ink/truncateToWidth.js
72048
72193
  /**
72049
72194
  * Slice a string to at most `maxWidth` terminal cells, walking by code
72050
72195
  * point so CJK wide characters never split mid-glyph. Assumes no ANSI in
@@ -72062,7 +72207,7 @@ function truncateToWidth(text, maxWidth) {
72062
72207
  return out;
72063
72208
  }
72064
72209
  //#endregion
72065
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/LogoV2.js
72210
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/LogoV2.js
72066
72211
  /** Main ChatCode CLI package version shown in the startup information panel. */
72067
72212
  const VERSION = PRODUCT_VERSION;
72068
72213
  const PRODUCT_LABEL = "chatcode-cli";
@@ -72333,7 +72478,7 @@ function LogoV2({ model, effort, cwd, whale = true, aiRatio, drift }) {
72333
72478
  });
72334
72479
  }
72335
72480
  //#endregion
72336
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/MessageMetadata.js
72481
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/messages/MessageMetadata.js
72337
72482
  /**
72338
72483
  * Transcript-mode metadata row: `HH:MM · model`, right-aligned above the
72339
72484
  * assistant text, mirroring Claude Code's MessageTimestamp + MessageModel,
@@ -72355,7 +72500,7 @@ function MessageMetadata({ timestamp, model }) {
72355
72500
  });
72356
72501
  }
72357
72502
  //#endregion
72358
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/narration.js
72503
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/narration.js
72359
72504
  /**
72360
72505
  * Strip the `⏵` self-narration line from assistant text. The
72361
72506
  * dsh-working-activity narrate contract puts exactly one `⏵` line at the
@@ -72471,7 +72616,7 @@ function ellipsize(line, maxWidth) {
72471
72616
  return `${out}…`;
72472
72617
  }
72473
72618
  //#endregion
72474
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/MessageList.js
72619
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/MessageList.js
72475
72620
  /**
72476
72621
  * Transcript rows rendered in the Claude Code visual language: user prompts
72477
72622
  * on a grey bubble with a `❯` pointer, assistant text with a `●` bullet and
@@ -73284,7 +73429,7 @@ function LogoHeader({ model, effort, cwd, whale = true, skipIntro = false }) {
73284
73429
  });
73285
73430
  }
73286
73431
  //#endregion
73287
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/TimelineRail.js
73432
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/TimelineRail.js
73288
73433
  /** ▴ / ▾ (U+25B4 / U+25BE — the small triangles; CP437-safe on ConHost too). */
73289
73434
  const CHEVRON_UP = " ▴";
73290
73435
  const CHEVRON_DOWN = " ▾";
@@ -73478,7 +73623,7 @@ function TimelineRail({ handle, turns, activeId, upId, downId, terminalWidth, ho
73478
73623
  }) });
73479
73624
  }
73480
73625
  //#endregion
73481
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ScrollbarGutter.js
73626
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ScrollbarGutter.js
73482
73627
  /** Thumb glyph across the 2-col gutter: solid, clearly positional —
73483
73628
  * deliberately distinct from the timeline's ━━ active tick. */
73484
73629
  const THUMB = "██";
@@ -73594,7 +73739,7 @@ function ScrollbarGutter({ handle, terminalWidth }) {
73594
73739
  }) });
73595
73740
  }
73596
73741
  //#endregion
73597
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/OverlayAbove.js
73742
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/OverlayAbove.js
73598
73743
  /**
73599
73744
  * 瞬态面板的浮层容器:absolute 定位 + bottom:'100%' 把面板底边钉在锚点
73600
73745
  * (父元素)顶边,向上覆盖转录尾部行,自身**不占布局高度**。
@@ -73627,7 +73772,7 @@ function OverlayAbove({ children, maxHeight }) {
73627
73772
  });
73628
73773
  }
73629
73774
  //#endregion
73630
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectory/motion.js
73775
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectory/motion.js
73631
73776
  /**
73632
73777
  * Trajectory motion — five verbs, one shared clock, one hard rule.
73633
73778
  *
@@ -73752,7 +73897,7 @@ function alert(tick, startTick) {
73752
73897
  return Math.floor(age / 2) % 2 === 0 ? 1 : 0;
73753
73898
  }
73754
73899
  //#endregion
73755
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectory/effortIgnition.js
73900
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectory/effortIgnition.js
73756
73901
  /** 三幕时间轴(ms):扫光全长、字样启动(波至中段)、字样渐亮、渐隐起止。边框扫光与输入行字样徽标共用。 */
73757
73902
  const IGNITION_TIMELINE = {
73758
73903
  sweepMs: 1e3,
@@ -73900,7 +74045,7 @@ function ignitionLineColors(options) {
73900
74045
  return colors;
73901
74046
  }
73902
74047
  //#endregion
73903
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/EffortChargeGlyph.js
74048
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/EffortChargeGlyph.js
73904
74049
  /**
73905
74050
  * EffortChargeGlyph — 输入提示前缀 `❯ ` 的最高档强调与充能。
73906
74051
  *
@@ -73956,7 +74101,7 @@ function EffortChargeGlyph({ effort, levels, working }) {
73956
74101
  });
73957
74102
  }
73958
74103
  //#endregion
73959
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/EffortInputBorder.js
74104
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/EffortInputBorder.js
73960
74105
  /**
73961
74106
  * EffortInputBorder — 输入框层上的三幕点焰叠加(对齐 Codex 的完整
73962
74107
  * 语义:光扫过、档位字样浮现、整体渐隐)。
@@ -74091,7 +74236,7 @@ function EffortInputBorder({ effort, levels, columns, onLight, idleColor, topRig
74091
74236
  });
74092
74237
  }
74093
74238
  //#endregion
74094
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/EffortTierBadge.js
74239
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/EffortTierBadge.js
74095
74240
  /**
74096
74241
  * EffortTierBadge — 输入行尾的档位字样徽标:三幕点焰的第二幕载体
74097
74242
  * (与 EffortInputBorder 的双框扫光同一时间轴、同一触发),切到最高
@@ -74174,7 +74319,7 @@ function EffortTierBadge({ effort, levels, onLight, columns, leadingColumns }) {
74174
74319
  });
74175
74320
  }
74176
74321
  //#endregion
74177
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/clipboard.js
74322
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/clipboard.js
74178
74323
  /**
74179
74324
  * Cross-platform clipboard access for Ctrl+V paste. The TUI runs in raw
74180
74325
  * mode, so the terminal never performs its own paste for Ctrl+V — the key
@@ -74671,6 +74816,24 @@ function readClipboard() {
74671
74816
  default: return readClipboardLinux();
74672
74817
  }
74673
74818
  }
74819
+ /** Extensions whose `@` reference the send pipeline attaches as an image. */
74820
+ const IMAGE_PATH = /\.(?:png|jpe?g|webp|gif)$/iu;
74821
+ /**
74822
+ * Whether a local path names an image the send pipeline can attach.
74823
+ * @param path - local file path.
74824
+ * @returns true for the image formats mention expansion turns into blocks.
74825
+ */
74826
+ function isImagePath(path) {
74827
+ return IMAGE_PATH.test(path);
74828
+ }
74829
+ /**
74830
+ * Render one local image path as the `@` reference that attaches its bytes.
74831
+ * @param path - local image path.
74832
+ * @returns `@path`, or `@"path"` when the path contains whitespace.
74833
+ */
74834
+ function formatImageReference(path) {
74835
+ return `@${/\s/.test(path) ? `"${path}"` : path}`;
74836
+ }
74674
74837
  /**
74675
74838
  * Render pasted clipboard content for insertion into the prompt. Image files
74676
74839
  * become `@` references so the send pipeline can attach their bytes; ordinary
@@ -74680,15 +74843,71 @@ function readClipboard() {
74680
74843
  * with line endings normalized.
74681
74844
  */
74682
74845
  function formatClipboardInsert(content) {
74683
- if (content.kind === "files") return content.paths.map((path) => {
74684
- const rendered = /\s/.test(path) ? `"${path}"` : path;
74685
- return /\.(?:png|jpe?g|webp|gif)$/iu.test(path) ? `@${rendered}` : rendered;
74686
- }).join(" ");
74687
- if (content.kind === "image") return `@${/\s/.test(content.path) ? `"${content.path}"` : content.path}`;
74846
+ if (content.kind === "files") return content.paths.map((path) => isImagePath(path) ? formatImageReference(path) : /\s/.test(path) ? `"${path}"` : path).join(" ");
74847
+ if (content.kind === "image") return formatImageReference(content.path);
74688
74848
  return content.text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
74689
74849
  }
74690
74850
  //#endregion
74691
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/externalEditor.js
74851
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/droppedFile.js
74852
+ /**
74853
+ * Terminal drag-and-drop normalization.
74854
+ *
74855
+ * A terminal has no drop event: dropping a file onto the window delivers the
74856
+ * dropped file's PATH as input text (Windows Terminal, macOS Terminal, iTerm2
74857
+ * and kitty all do this, differing only in quoting and escaping). The composer
74858
+ * therefore recognizes an incoming image path and turns it into the `@`
74859
+ * reference the send pipeline already understands, so a dropped picture
74860
+ * reaches the model as an image block instead of a stray literal path in the
74861
+ * draft.
74862
+ */
74863
+ /** A dropped path is one short line; anything longer is prose, not a drop. */
74864
+ const MAX_DROPPED_PATH_CHARS = 4096;
74865
+ /** Strip one matching pair of surrounding quotes (some terminals quote drops). */
74866
+ function unquote(text) {
74867
+ if (text.length < 2) return text;
74868
+ const quote = text[0];
74869
+ if (quote !== "\"" && quote !== "'" || text[text.length - 1] !== quote) return text;
74870
+ return text.slice(1, -1);
74871
+ }
74872
+ /** Decode a `file://` URI some terminals deliver for a drop. */
74873
+ function decodeFileUrl(text) {
74874
+ if (!/^file:/iu.test(text)) return text;
74875
+ try {
74876
+ return fileURLToPath(text);
74877
+ } catch {
74878
+ return;
74879
+ }
74880
+ }
74881
+ /** Decode shell escapes from POSIX drops, including C:/ paths from Git Bash. */
74882
+ function unescapePath(text) {
74883
+ if (/^(?:[A-Za-z]:\\|\\\\)/u.test(text)) return text;
74884
+ return text.replace(/\\([\s\\'"()[\]{}&;!#$`*?<>|~])/gu, "$1");
74885
+ }
74886
+ /**
74887
+ * The `@` reference for an input chunk that is exactly one existing image
74888
+ * file path, as a terminal delivers it for a drag-and-drop.
74889
+ * @param raw - the text one input event carried.
74890
+ * @param baseDir - directory a relative path resolves against (the session
74891
+ * cwd), matching how mention expansion resolves the reference later.
74892
+ * @returns the reference to insert, or undefined for prose, a non-image,
74893
+ * a non-local URI or a missing file.
74894
+ */
74895
+ function droppedImageMention(raw, baseDir) {
74896
+ const trimmed = raw.trim();
74897
+ if (trimmed === "" || trimmed.length > MAX_DROPPED_PATH_CHARS) return void 0;
74898
+ if (trimmed.includes("\n") || trimmed.startsWith("@")) return void 0;
74899
+ const path = decodeFileUrl(unescapePath(unquote(trimmed)));
74900
+ if (path === void 0 || !isImagePath(path)) return void 0;
74901
+ const candidate = baseDir === void 0 || isAbsolute(path) ? path : resolve(baseDir, path);
74902
+ try {
74903
+ if (!statSync(candidate).isFile()) return void 0;
74904
+ } catch {
74905
+ return;
74906
+ }
74907
+ return formatImageReference(path);
74908
+ }
74909
+ //#endregion
74910
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/externalEditor.js
74692
74911
  /**
74693
74912
  * External editor round-trip for the prompt input (issue #123): Ctrl+G dumps
74694
74913
  * the current draft into a temp file, hands the terminal to `$VISUAL` /
@@ -74966,7 +75185,7 @@ async function editInExternalEditor(draft) {
74966
75185
  }
74967
75186
  }
74968
75187
  //#endregion
74969
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PromptEditor.js
75188
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PromptEditor.js
74970
75189
  let editorNode = null;
74971
75190
  const listeners = /* @__PURE__ */ new Set();
74972
75191
  /** Publish (or withdraw, with null) the fullscreen editor subtree. */
@@ -74984,17 +75203,25 @@ function subscribe(callback) {
74984
75203
  function snapshot() {
74985
75204
  return editorNode;
74986
75205
  }
75206
+ /** Declare the editor cursor in the same commit that mounts its value box. */
75207
+ function EditorValueBox({ cursor, ...props }) {
75208
+ const ref = useDeclaredCursor(cursor);
75209
+ return (0, import_jsx_runtime.jsx)(ThemedBox, {
75210
+ ...props,
75211
+ ref
75212
+ });
75213
+ }
74987
75214
  /**
74988
75215
  * The fullscreen sink, mounted once at the very end of Chat's root Box.
74989
75216
  * The absolute cover is `opaque` so its padding/blank cells never bleed
74990
75217
  * the covered transcript through, and it swallows stray clicks so the
74991
75218
  * conversation underneath cannot react to a click meant for the editor.
74992
75219
  */
74993
- function PromptEditorLayer() {
75220
+ function PromptEditorLayer({ fullscreen = true }) {
74994
75221
  const node = import_react.useSyncExternalStore(subscribe, snapshot);
74995
- if (node === null) return null;
74996
75222
  const inset = usePageInset();
74997
75223
  const size = useTerminalSize();
75224
+ if (node === null) return null;
74998
75225
  return (0, import_jsx_runtime.jsx)(ThemedBox, {
74999
75226
  position: "absolute",
75000
75227
  top: -inset.y,
@@ -75008,7 +75235,7 @@ function PromptEditorLayer() {
75008
75235
  onClick: (event) => {
75009
75236
  event.stopImmediatePropagation();
75010
75237
  },
75011
- children: node
75238
+ children: fullscreen ? node : (0, import_jsx_runtime.jsx)(AlternateScreen, { children: node })
75012
75239
  });
75013
75240
  }
75014
75241
  /**
@@ -75042,7 +75269,7 @@ function EditorButton({ label, hint, onClick, primary, accent }) {
75042
75269
  });
75043
75270
  }
75044
75271
  //#endregion
75045
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/history.js
75272
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/history.js
75046
75273
  const HISTORY_DIR = DATA_DIR;
75047
75274
  const HISTORY_FILE = join(HISTORY_DIR, "history.jsonl");
75048
75275
  const HISTORY_LOCK = `${HISTORY_FILE}.lock`;
@@ -75176,7 +75403,7 @@ function historyEntryId(entry, index = 0) {
75176
75403
  return createHash("sha1").update(`${entry.text}\0${entry.ts}\0${index}`).digest("hex").slice(0, 12);
75177
75404
  }
75178
75405
  //#endregion
75179
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SuggestionCard.js
75406
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SuggestionCard.js
75180
75407
  /**
75181
75408
  * `/` 命令菜单与 `@` 文件菜单共用的圆角卡片外壳(与输入框 EffortInputBorder
75182
75409
  * 同款 ╭╮╰╯ 视觉语言):
@@ -75308,7 +75535,7 @@ function splitQueryMatch(name, query) {
75308
75535
  return startsWith(0) ?? (lastSpace >= 0 ? startsWith(lastSpace + 1) : null) ?? startsWith(name.lastIndexOf("/") + 1);
75309
75536
  }
75310
75537
  //#endregion
75311
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/CommandSuggestions.js
75538
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/CommandSuggestions.js
75312
75539
  /**
75313
75540
  * The slash-command suggestion overlay, mirroring Claude Code's
75314
75541
  * `PromptInputFooterSuggestions.tsx` (command layout only) wrapped in the
@@ -75388,7 +75615,7 @@ function CommandSuggestions({ commands, selectedIndex, columns, query = "", acce
75388
75615
  });
75389
75616
  }
75390
75617
  //#endregion
75391
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/FileSuggestions.js
75618
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/FileSuggestions.js
75392
75619
  /**
75393
75620
  * The `@` file-completion overlay in CC's suggestion style, wrapped in the
75394
75621
  * shared rounded `SuggestionCard` (与 `/` 命令菜单同一视觉语言):
@@ -75460,10 +75687,9 @@ function FileSuggestionRow({ file, isSelected, query, usable, descriptionWidth }
75460
75687
  })
75461
75688
  });
75462
75689
  }
75463
- function FileSuggestions({ files, selectedIndex, columns, query = "", loading, accent, onPick, onWheelStep }) {
75690
+ function FileSuggestions({ files, selectedIndex, columns, query = "", maxVisible = 6, loading, accent, onPick, onWheelStep }) {
75464
75691
  if (files.length === 0 && !loading) return null;
75465
75692
  const usable = cardContentWidth(columns);
75466
- const maxVisible = 6;
75467
75693
  const safeIndex = Math.min(Math.max(0, selectedIndex), files.length - 1);
75468
75694
  const startIndex = Math.max(0, Math.min(safeIndex - Math.floor(maxVisible / 2), Math.max(0, files.length - maxVisible)));
75469
75695
  const visible = files.slice(startIndex, startIndex + maxVisible);
@@ -75485,7 +75711,7 @@ function FileSuggestions({ files, selectedIndex, columns, query = "", loading, a
75485
75711
  });
75486
75712
  }
75487
75713
  //#endregion
75488
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/HelpMenu.js
75714
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/HelpMenu.js
75489
75715
  /**
75490
75716
  * The `?` help menu, mirroring Claude Code's `PromptInputHelpMenu.tsx`
75491
75717
  * (three-column shortcut layout, trimmed to the keys dsh-tui actually binds).
@@ -75676,7 +75902,7 @@ function HelpCommandRow({ command, onPick }) {
75676
75902
  });
75677
75903
  }
75678
75904
  //#endregion
75679
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PromptInput.js
75905
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PromptInput.js
75680
75906
  const HISTORY_LIMIT = 50;
75681
75907
  /**
75682
75908
  * Paste fold (CC-style collapse with a visible preview, no black box):
@@ -76147,7 +76373,7 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76147
76373
  import_react.useEffect(() => {
76148
76374
  fileEscRef.current = -1;
76149
76375
  }, [value]);
76150
- const fileOverlayOpen = (fileScanning || fileMatches.length > 0) && !expanded && !helpOpen && !selectionActive && fileEscRef.current !== mention?.start;
76376
+ const fileOverlayOpen = (fileScanning || fileMatches.length > 0) && !helpOpen && !selectionActive && fileEscRef.current !== mention?.start;
76151
76377
  /** Fold-block state + a synchronous mirror (setInput reads the ref).
76152
76378
  * Creating a block also drags a caret that sits inside it out to the
76153
76379
  * block's end (the block is atomic; typing continues after it). */
@@ -76379,9 +76605,13 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76379
76605
  * - otherwise → submit directly (or run a unique command).
76380
76606
  * Reads valueRef so a key batch (typing + Enter in one stdin read)
76381
76607
  * operates on the text the preceding keys produced.
76608
+ * @param completionOwnsReturn - false for the fullscreen editor's explicit
76609
+ * send (Ctrl+Enter / Send), which must never be swallowed by an open
76610
+ * completion card: there Enter is a newline, so that send is the only way
76611
+ * out and it may not turn into an accept.
76382
76612
  */
76383
- const handleEnter = () => {
76384
- if (fileOverlayOpen && fileScanning) return;
76613
+ const handleEnter = (completionOwnsReturn = true) => {
76614
+ if (completionOwnsReturn && fileOverlayOpen && fileScanning) return;
76385
76615
  const now = Date.now();
76386
76616
  if (now - lastEnterAtRef.current < 80) return;
76387
76617
  lastEnterAtRef.current = now;
@@ -76393,7 +76623,7 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76393
76623
  return;
76394
76624
  }
76395
76625
  }
76396
- if (fileOverlayOpen) {
76626
+ if (completionOwnsReturn && fileOverlayOpen) {
76397
76627
  const file = fileMatches[fileSelected];
76398
76628
  if (file) {
76399
76629
  acceptFile(file);
@@ -76436,9 +76666,10 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76436
76666
  lastClickRowRef.current = -1;
76437
76667
  };
76438
76668
  /** The editor's explicit send (Ctrl+Enter / Send button): the Enter main
76439
- * path, then collapse — an empty draft just collapses. */
76669
+ * path, then collapse — an empty draft just collapses. An open `@` card
76670
+ * does not own this key: it is the only send the fullscreen editor has. */
76440
76671
  const submitFromEditor = () => {
76441
- handleEnter();
76672
+ handleEnter(false);
76442
76673
  collapseEditor();
76443
76674
  };
76444
76675
  /** Clipboard reads are asynchronous; insert against the latest render so
@@ -76469,7 +76700,7 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76469
76700
  };
76470
76701
  useInput((input, key, event) => {
76471
76702
  if (selectionActive) return;
76472
- if (fileOverlayOpen && fileScanning && (key.upArrow || key.downArrow || key.tab || key.return || key.wheelUp || key.wheelDown)) {
76703
+ if (fileOverlayOpen && fileScanning && (key.upArrow || key.downArrow || key.tab || key.return && !isMod(key) || key.wheelUp || key.wheelDown)) {
76473
76704
  event.stopImmediatePropagation();
76474
76705
  return;
76475
76706
  }
@@ -76500,6 +76731,12 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76500
76731
  setFileSelected(0);
76501
76732
  return;
76502
76733
  }
76734
+ if (key.escape && fileOverlayOpen) {
76735
+ event?.stopImmediatePropagation();
76736
+ fileEscRef.current = mention?.start ?? -1;
76737
+ setFileSelected(0);
76738
+ return;
76739
+ }
76503
76740
  if (key.escape && expandedRef.current) {
76504
76741
  event?.stopImmediatePropagation();
76505
76742
  collapseEditor();
@@ -76544,6 +76781,14 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76544
76781
  setFileSelected(0);
76545
76782
  return at;
76546
76783
  };
76784
+ if (input.length > 3 && !key.ctrl && !key.meta && !key.super) {
76785
+ const reference = droppedImageMention(input, channel.cwd);
76786
+ if (reference !== void 0) {
76787
+ const at = selection?.start ?? cursor;
76788
+ insertAtCaret(`${at > 0 && !/\s/u.test(value[at - 1]) ? " " : ""}${reference} `);
76789
+ return;
76790
+ }
76791
+ }
76547
76792
  if (event?.isPasted && input.length > 0) {
76548
76793
  const text = sanitizeEditableText(input.replace(/\r\n/g, "\n").replace(/\r/g, "\n"));
76549
76794
  const at = insertAtCaret(text);
@@ -76660,6 +76905,13 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76660
76905
  return;
76661
76906
  }
76662
76907
  if (key.return && expandedRef.current) {
76908
+ if (fileOverlayOpen) {
76909
+ const file = fileMatches[fileSelected];
76910
+ if (file) {
76911
+ acceptFile(file);
76912
+ return;
76913
+ }
76914
+ }
76663
76915
  insertAtCaret("\n");
76664
76916
  return;
76665
76917
  }
@@ -76672,6 +76924,13 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
76672
76924
  return;
76673
76925
  }
76674
76926
  if (expandedRef.current && key.tab) {
76927
+ if (!key.shift && fileOverlayOpen) {
76928
+ const file = fileMatches[fileSelected];
76929
+ if (file) {
76930
+ acceptFile(file);
76931
+ return;
76932
+ }
76933
+ }
76675
76934
  if (!key.shift) insertAtCaret(" ");
76676
76935
  return;
76677
76936
  }
@@ -77180,7 +77439,9 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
77180
77439
  chars: foldText.length
77181
77440
  }) : "";
77182
77441
  const peekOpen = block !== null && hovered && !selectionActive;
77183
- const editorMaxRows = Math.max(1, terminalRows - EDITOR_CHROME_ROWS);
77442
+ const editorFileRows = Math.max(1, Math.min(6, terminalRows - EDITOR_CHROME_ROWS - 4));
77443
+ const editorFileCardRows = fileOverlayOpen ? Math.min(editorFileRows, fileMatches.length) + 3 : 0;
77444
+ const editorMaxRows = Math.max(1, terminalRows - EDITOR_CHROME_ROWS - editorFileCardRows);
77184
77445
  if (expanded && caretVisualLine !== prevCaretLineRef.current) {
77185
77446
  editorFreeScrollRef.current = false;
77186
77447
  prevCaretLineRef.current = caretVisualLine;
@@ -77368,10 +77629,14 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
77368
77629
  prevContentRowsRef.current = contentRows;
77369
77630
  }, [contentRows]);
77370
77631
  const lastNotification = channel.notifications[channel.notifications.length - 1];
77371
- const valueBoxRef = useDeclaredCursor({
77632
+ const cursorPosition = {
77372
77633
  line: caretVisualLine - windowStart,
77373
77634
  column: Math.min(caretVisualCol + (expanded ? editorGutterCols + 1 : caretVisualLine === 0 && prefixCols > 0 ? prefixCols : 0), expanded ? editorGutterCols + 1 + inputWidth : inputWidth),
77374
77635
  active: !selectionActive
77636
+ };
77637
+ const valueBoxRef = useDeclaredCursor({
77638
+ ...cursorPosition,
77639
+ active: !selectionActive && !expanded
77375
77640
  });
77376
77641
  /**
77377
77642
  * Map a pointer position relative to the value box to a UTF-16 offset
@@ -77446,8 +77711,7 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
77446
77711
  setCursor(offset);
77447
77712
  return;
77448
77713
  }
77449
- clearSelection();
77450
- setCursor(offset);
77714
+ setInput(value, offset);
77451
77715
  return;
77452
77716
  }
77453
77717
  if (clamped === 0 && prefixCols > 0 && localCol < prefixCols) {
@@ -77475,8 +77739,7 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
77475
77739
  setCursor(offset);
77476
77740
  return;
77477
77741
  }
77478
- clearSelection();
77479
- setCursor(offset);
77742
+ setInput(value, offset);
77480
77743
  };
77481
77744
  /**
77482
77745
  * Drag selection (component-level drag protocol): the press origin is
@@ -77563,8 +77826,8 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
77563
77826
  })
77564
77827
  ]
77565
77828
  }),
77566
- (0, import_jsx_runtime.jsx)(ThemedBox, {
77567
- ref: valueBoxRef,
77829
+ (0, import_jsx_runtime.jsx)(EditorValueBox, {
77830
+ cursor: cursorPosition,
77568
77831
  flexDirection: "column",
77569
77832
  flexGrow: 1,
77570
77833
  flexShrink: 1,
@@ -77590,6 +77853,29 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
77590
77853
  },
77591
77854
  children: editorRows
77592
77855
  }),
77856
+ fileOverlayOpen && (0, import_jsx_runtime.jsx)(ThemedBox, {
77857
+ flexShrink: 0,
77858
+ paddingLeft: 1,
77859
+ paddingRight: 1,
77860
+ children: (0, import_jsx_runtime.jsx)(FileSuggestions, {
77861
+ files: fileMatches,
77862
+ selectedIndex: fileSelected,
77863
+ loading: fileScanning,
77864
+ columns: Math.max(20, columns - 4),
77865
+ query: mention?.query ?? "",
77866
+ maxVisible: editorFileRows,
77867
+ accent: promptAccent,
77868
+ onPick: (index) => {
77869
+ if (fileScanning) return;
77870
+ const file = fileMatches[index];
77871
+ if (file) acceptFile(file);
77872
+ },
77873
+ onWheelStep: (step) => {
77874
+ if (fileScanning) return;
77875
+ setFileSelected((i) => Math.max(0, Math.min(fileMatches.length - 1, i + step)));
77876
+ }
77877
+ })
77878
+ }),
77593
77879
  (0, import_jsx_runtime.jsxs)(ThemedBox, {
77594
77880
  flexDirection: "row",
77595
77881
  flexShrink: 0,
@@ -77601,17 +77887,25 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
77601
77887
  color: vimInsert ? "success" : "warning",
77602
77888
  children: [vimInsert ? "INSERT" : "NORMAL", " "]
77603
77889
  }),
77604
- (0, import_jsx_runtime.jsx)(ThemedText, {
77605
- dimColor: true,
77606
- children: t("input-expand-editor-position", {
77607
- line: cursorLine(value, cursor) + 1,
77608
- col: cursorColumn(value, cursor) + 1
77890
+ (0, import_jsx_runtime.jsx)(ThemedBox, {
77891
+ flexShrink: 0,
77892
+ children: (0, import_jsx_runtime.jsx)(ThemedText, {
77893
+ dimColor: true,
77894
+ children: t("input-expand-editor-position", {
77895
+ line: cursorLine(value, cursor) + 1,
77896
+ col: cursorColumn(value, cursor) + 1
77897
+ })
77609
77898
  })
77610
77899
  }),
77611
77900
  (0, import_jsx_runtime.jsx)(ThemedBox, { flexGrow: 1 }),
77612
- (0, import_jsx_runtime.jsx)(ThemedText, {
77613
- dimColor: true,
77614
- children: `${t("input-expand-editor-hint-send")} · ${t("input-expand-editor-hint-collapse")}`
77901
+ (0, import_jsx_runtime.jsx)(ThemedBox, {
77902
+ flexShrink: 1,
77903
+ minWidth: 0,
77904
+ children: (0, import_jsx_runtime.jsx)(ThemedText, {
77905
+ dimColor: true,
77906
+ wrap: "truncate-end",
77907
+ children: `${t("input-expand-editor-hint-send")} · ${t("input-expand-editor-hint-collapse")}`
77908
+ })
77615
77909
  })
77616
77910
  ]
77617
77911
  }),
@@ -77635,15 +77929,20 @@ function PromptInput({ channel, helpOpen, onToggleHelp, onRunCommand, selectionA
77635
77929
  onClick: collapseEditor
77636
77930
  }),
77637
77931
  (0, import_jsx_runtime.jsx)(ThemedBox, { flexGrow: 1 }),
77638
- (0, import_jsx_runtime.jsx)(ThemedText, {
77639
- dimColor: true,
77640
- children: t("input-expand-editor-scroll")
77932
+ (0, import_jsx_runtime.jsx)(ThemedBox, {
77933
+ flexShrink: 1,
77934
+ minWidth: 0,
77935
+ children: (0, import_jsx_runtime.jsx)(ThemedText, {
77936
+ dimColor: true,
77937
+ wrap: "truncate-end",
77938
+ children: t("input-expand-editor-scroll")
77939
+ })
77641
77940
  })
77642
77941
  ]
77643
77942
  })
77644
77943
  ]
77645
77944
  }) : null;
77646
- import_react.useInsertionEffect(() => {
77945
+ import_react.useLayoutEffect(() => {
77647
77946
  setPromptEditorNode(editorNode);
77648
77947
  });
77649
77948
  import_react.useEffect(() => {
@@ -78023,7 +78322,7 @@ function wordSelectionAt(text, offset, lo, hi) {
78023
78322
  };
78024
78323
  }
78025
78324
  //#endregion
78026
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/GoalTodoPanel.js
78325
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/GoalTodoPanel.js
78027
78326
  /** Maximum todo rows shown before the overflow line. */
78028
78327
  const MAX_TODOS = 8;
78029
78328
  const PHASE_LABEL = {
@@ -78105,13 +78404,12 @@ function BranchPrefix({ last }) {
78105
78404
  /**
78106
78405
  * Live goal + todo panel above the prompt input. Data rides on the channel:
78107
78406
  * `channel.goal` is folded from `goal/change` context events and
78108
- * `channel.todos` from `todo/write` whole-list snapshots, so every model
78109
- * update re-renders this panel in real time (no polling). Renders nothing
78407
+ * `channel.todos` from the current turn's recorded progress, so every
78408
+ * acknowledged update re-renders this panel in real time (no polling).
78409
+ * Completed rows remain checked until the next turn starts. Renders nothing
78110
78410
  * while both slots are empty.
78111
78411
  *
78112
- * The todo section folds two ways: completed rows fold automatically once
78113
- * the agent goes idle (the header's `✓ done/total` count keeps the
78114
- * summary), and `collapsed` folds the whole section to that single header
78412
+ * `collapsed` folds the whole todo section to its summary header
78115
78413
  * line any time — including mid-turn, where the line still previews the
78116
78414
  * in-progress task. `onToggle` is the click affordance for the header row;
78117
78415
  * the ctrl/cmd+q hotkey in Chat drives the same state.
@@ -78124,7 +78422,7 @@ function GoalTodoPanel({ channel, collapsed = false, onToggle }) {
78124
78422
  const goal = channel.goal;
78125
78423
  const allTodos = channel.todos ?? [];
78126
78424
  const doneCount = allTodos.filter((todo) => todo.status === "completed").length;
78127
- const todos = channel.working ? allTodos : allTodos.filter((todo) => todo.status !== "completed");
78425
+ const todos = allTodos;
78128
78426
  const startRef = import_react.useRef(void 0);
78129
78427
  if (goal !== void 0 && startRef.current?.id !== goal.id) startRef.current = {
78130
78428
  id: goal.id,
@@ -78138,8 +78436,7 @@ function GoalTodoPanel({ channel, collapsed = false, onToggle }) {
78138
78436
  return () => clearInterval(timer);
78139
78437
  }, [goal]);
78140
78438
  const elapsed = goal !== void 0 && startRef.current !== void 0 ? formatDuration$2(now - startRef.current.at) : void 0;
78141
- const anyUnfinished = allTodos.some((todo) => todo.status !== "completed");
78142
- const showTodoSection = allTodos.length > 0 && (channel.working || anyUnfinished || goal !== void 0);
78439
+ const showTodoSection = allTodos.length > 0;
78143
78440
  if (goal === void 0 && !showTodoSection) return null;
78144
78441
  const visible = todos.slice(0, MAX_TODOS);
78145
78442
  const hidden = todos.length - visible.length;
@@ -78269,7 +78566,7 @@ function GoalTodoPanel({ channel, collapsed = false, onToggle }) {
78269
78566
  });
78270
78567
  }
78271
78568
  //#endregion
78272
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/AutoRecapRow.js
78569
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/AutoRecapRow.js
78273
78570
  /**
78274
78571
  * Auto-recap row (`dsh-tui.recapOnOpen` setting): a quiet, dim recap shown
78275
78572
  * at the bottom of the transcript after an automatic summary on session
@@ -78349,7 +78646,7 @@ function summarizeLoadedContext(context) {
78349
78646
  return parts.join(" · ");
78350
78647
  }
78351
78648
  //#endregion
78352
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/LoadedContextPanel.js
78649
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/LoadedContextPanel.js
78353
78650
  /** One named entry (section or dynamic context) with its full text. */
78354
78651
  function Entry({ entry }) {
78355
78652
  return (0, import_jsx_runtime.jsxs)(ThemedBox, {
@@ -78486,7 +78783,7 @@ function LoadedContextPanel({ context, open, onToggle }) {
78486
78783
  });
78487
78784
  }
78488
78785
  //#endregion
78489
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/MoonPhaseSpinner.js
78786
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/MoonPhaseSpinner.js
78490
78787
  /**
78491
78788
  * Terminal-safe construction cycle derived from the supplied China Unicom
78492
78789
  * knot mark. Every frame is one display cell, unlike emoji on mixed terminals.
@@ -78518,7 +78815,7 @@ function UnicomKnotSpinner({ time }) {
78518
78815
  });
78519
78816
  }
78520
78817
  //#endregion
78521
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ActivityLine.js
78818
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ActivityLine.js
78522
78819
  /**
78523
78820
  * Context-pressure percentage (0–100) from the last usage snapshot, or
78524
78821
  * undefined when unknown — shared by the spinner-line and status-line
@@ -78590,7 +78887,7 @@ function ActivityLine({ activity, activityFrames, warnPct, warnDanger, suffix })
78590
78887
  });
78591
78888
  }
78592
78889
  //#endregion
78593
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/guards.js
78890
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/guards.js
78594
78891
  /**
78595
78892
  * Structural guards for the session events the trajectory projection reads.
78596
78893
  *
@@ -78814,7 +79111,7 @@ function readTodos(data) {
78814
79111
  };
78815
79112
  }
78816
79113
  //#endregion
78817
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/types.js
79114
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/types.js
78818
79115
  /**
78819
79116
  * Trajectory projection — the data contract shared by the adapter-side fold
78820
79117
  * and the UI-side scene (issue #80 evolution).
@@ -78881,7 +79178,7 @@ function previewText(raw, limit) {
78881
79178
  return `${flat.slice(0, limit)}…`;
78882
79179
  }
78883
79180
  //#endregion
78884
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/projection.js
79181
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/projection.js
78885
79182
  /**
78886
79183
  * Trajectory projection — folding the session event log into ledger nodes.
78887
79184
  *
@@ -79460,7 +79757,7 @@ function extendTrajectory(previous, events) {
79460
79757
  };
79461
79758
  }
79462
79759
  //#endregion
79463
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/aggregate.js
79760
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/aggregate.js
79464
79761
  /**
79465
79762
  * Trajectory aggregate — the hotspot view's data and the session totals.
79466
79763
  *
@@ -79681,7 +79978,7 @@ function modelTiming(timing) {
79681
79978
  };
79682
79979
  }
79683
79980
  //#endregion
79684
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/inspect.js
79981
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/inspect.js
79685
79982
  /**
79686
79983
  * Inspector detail — full content, resolved on demand.
79687
79984
  *
@@ -79841,7 +80138,7 @@ function inspectNode(node, events) {
79841
80138
  };
79842
80139
  }
79843
80140
  //#endregion
79844
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/wave.js
80141
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/trajectory/wave.js
79845
80142
  /**
79846
80143
  * Wave band projection — the whole session compressed onto one row of glyphs.
79847
80144
  *
@@ -80014,7 +80311,7 @@ function columnOfIndex(band, ledgerIndex) {
80014
80311
  return 0;
80015
80312
  }
80016
80313
  //#endregion
80017
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/MiniWake.js
80314
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/MiniWake.js
80018
80315
  /**
80019
80316
  * The mini wake — the whole session as a dozen glyphs in the status line.
80020
80317
  *
@@ -80117,7 +80414,7 @@ function toHex$1(colour) {
80117
80414
  return `#${hex(parsed.r)}${hex(parsed.g)}${hex(parsed.b)}`;
80118
80415
  }
80119
80416
  //#endregion
80120
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/StatusMetrics.js
80417
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/StatusMetrics.js
80121
80418
  /**
80122
80419
  * Status-line metric renderers, ported from two pi extensions:
80123
80420
  * - `pi-nano-context`: segmented context progress bar (morandi pastel
@@ -80393,7 +80690,7 @@ function tpsStats(samples, nowMs) {
80393
80690
  };
80394
80691
  }
80395
80692
  //#endregion
80396
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ContextBarView.js
80693
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ContextBarView.js
80397
80694
  /** Free-segment colors, mirroring StatusMetrics' dark-theme defaults. */
80398
80695
  const FREE_FILL = "#E8E8E8";
80399
80696
  const FREE_TEXT = "#4A4A4A";
@@ -80460,7 +80757,7 @@ function ContextBarView({ segments, usedTokens, contextWindow, width, colors, on
80460
80757
  });
80461
80758
  }
80462
80759
  //#endregion
80463
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/chatCodeTokenTrend.js
80760
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/chatCodeTokenTrend.js
80464
80761
  /**
80465
80762
  * ChatCode 今日总 Token 消耗量查询(移植自 chatcode-cli 的 chatCodeTokenTrend)。
80466
80763
  *
@@ -80535,7 +80832,7 @@ async function fetchTodayTotalTokens(post, signal) {
80535
80832
  }
80536
80833
  }
80537
80834
  //#endregion
80538
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useTodayTotalTokens.js
80835
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useTodayTotalTokens.js
80539
80836
  /**
80540
80837
  * 「今日总Token消耗」数据源 Hook(移植自 chatcode-cli 的 useTokenDashboard)。
80541
80838
  *
@@ -80567,7 +80864,7 @@ function useTodayTotalTokens(enabled = true) {
80567
80864
  return { totalTokens };
80568
80865
  }
80569
80866
  //#endregion
80570
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/TokenDashboard.js
80867
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/TokenDashboard.js
80571
80868
  const BAR_WIDTH = 14;
80572
80869
  /** Yuanjing-compatible percentage label centered inside a fixed-width bar. */
80573
80870
  function LabeledBar({ ratio, percent }) {
@@ -80651,7 +80948,7 @@ function TokenDashboard({ todayTokens, usedTokens, contextWindow, compact = fals
80651
80948
  });
80652
80949
  }
80653
80950
  //#endregion
80654
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/StatusLine.js
80951
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/StatusLine.js
80655
80952
  /** Stable fallback for stubbed channels: verify/repro harnesses render the
80656
80953
  * real Chat with partial channel literals that predate the jobs field. */
80657
80954
  const NO_BACKGROUND_JOBS = [];
@@ -81509,7 +81806,7 @@ const fallbackSymbols = {
81509
81806
  const figures = isUnicodeSupported() ? mainSymbols : fallbackSymbols;
81510
81807
  Object.entries(specialMainSymbols);
81511
81808
  //#endregion
81512
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/Byline.js
81809
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/Byline.js
81513
81810
  /**
81514
81811
  * Joins children with a middot separator (" · ") for inline metadata display
81515
81812
  * (in the Claude Code visual language). Automatically filters out
@@ -81525,7 +81822,7 @@ function Byline({ children }) {
81525
81822
  }), child] }, (0, import_react.isValidElement)(child) ? child.key ?? index : index)) });
81526
81823
  }
81527
81824
  //#endregion
81528
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/GlimmerMessage.js
81825
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/GlimmerMessage.js
81529
81826
  const ERROR_RED$1 = {
81530
81827
  r: 171,
81531
81828
  g: 43,
@@ -81615,7 +81912,7 @@ function GlimmerMessage({ message, mode, messageColor, glimmerIndex, flashOpacit
81615
81912
  })] });
81616
81913
  }
81617
81914
  //#endregion
81618
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/SpinnerGlyph.js
81915
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/SpinnerGlyph.js
81619
81916
  const DEFAULT_CHARACTERS = getDefaultCharacters();
81620
81917
  const SPINNER_FRAMES$1 = [...DEFAULT_CHARACTERS, ...[...DEFAULT_CHARACTERS].reverse()];
81621
81918
  const REDUCED_MOTION_DOT = "●";
@@ -81676,7 +81973,7 @@ function SpinnerGlyph({ frame, messageColor, stalledIntensity = 0, reducedMotion
81676
81973
  });
81677
81974
  }
81678
81975
  //#endregion
81679
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/useStalledAnimation.js
81976
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/useStalledAnimation.js
81680
81977
  /**
81681
81978
  * Tracks the transition to red when tokens stop flowing (mirroring Claude Code's `Spinner/useStalledAnimation.ts`). Driven by the parent's animation
81682
81979
  * clock time instead of independent intervals, so it slows down when the
@@ -81733,7 +82030,7 @@ function useStalledAnimation(time, currentResponseLength, hasActiveTools = false
81733
82030
  };
81734
82031
  }
81735
82032
  //#endregion
81736
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/SpinnerAnimationRow.js
82033
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Spinner/SpinnerAnimationRow.js
81737
82034
  const SEP_WIDTH = stringWidth$1(" · ");
81738
82035
  const THINKING_BARE_WIDTH = stringWidth$1("thinking");
81739
82036
  const SHOW_TOKENS_AFTER_MS = 3e4;
@@ -81900,7 +82197,7 @@ function SpinnerModeGlyph({ mode }) {
81900
82197
  }
81901
82198
  }
81902
82199
  //#endregion
81903
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/WorkingSpinner.js
82200
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/WorkingSpinner.js
81904
82201
  /**
81905
82202
  * The working spinner block shown between the transcript and the prompt
81906
82203
  * input while a turn is in flight. Mirrors Claude Code's `Spinner.tsx`
@@ -81970,7 +82267,7 @@ function useThinkingStatus(isThinking) {
81970
82267
  return thinkingStatus;
81971
82268
  }
81972
82269
  //#endregion
81973
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ModelPicker.js
82270
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ModelPicker.js
81974
82271
  /**
81975
82272
  * Model picker in the CC ModelPicker style: a permission-colored Pane with
81976
82273
  * the rows as Select entries (❯ focus pointer, ✓ on the active row,
@@ -82030,7 +82327,7 @@ function ModelPicker(props) {
82030
82327
  });
82031
82328
  }
82032
82329
  //#endregion
82033
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PluginSceneBoundary.js
82330
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PluginSceneBoundary.js
82034
82331
  /**
82035
82332
  * Error boundary for plugin scenes (dsh-tui-scenes). A scene component is
82036
82333
  * third-party code rendered inside Chat's tree: without a boundary a render
@@ -82056,7 +82353,7 @@ var PluginSceneBoundary = class extends import_react.Component {
82056
82353
  }
82057
82354
  };
82058
82355
  //#endregion
82059
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/LoadingState.js
82356
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/design-system/LoadingState.js
82060
82357
  const SPINNER_FRAMES = [...getDefaultCharacters(), ...[...getDefaultCharacters()].reverse()];
82061
82358
  /**
82062
82359
  * A spinner with a loading message for async operations, mirroring Claude Code's design-system/LoadingState.tsx (using the small animated glyph).
@@ -82087,7 +82384,7 @@ function LoadingState({ message, bold = false, dimColor = false, subtitle }) {
82087
82384
  });
82088
82385
  }
82089
82386
  //#endregion
82090
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SkillsPicker.js
82387
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SkillsPicker.js
82091
82388
  /** 来源桶 → 本地化标签(未知桶原样显示,SkillSource 对自定义桶开放)。 */
82092
82389
  function sourceLabel(source) {
82093
82390
  switch (source) {
@@ -82165,7 +82462,7 @@ function SkillsPickerLoading() {
82165
82462
  });
82166
82463
  }
82167
82464
  //#endregion
82168
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SearchBox.js
82465
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SearchBox.js
82169
82466
  /**
82170
82467
  * Window a single-line query around the caret so the visible slice fits
82171
82468
  * `avail` display cells (CJK display width, code-point safe — `[...s]`
@@ -82303,7 +82600,7 @@ function SearchBox({ query, placeholder = "Search…", isFocused, isTerminalFocu
82303
82600
  });
82304
82601
  }
82305
82602
  //#endregion
82306
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/sessions/SessionListRow.js
82603
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/sessions/SessionListRow.js
82307
82604
  /**
82308
82605
  * One session in the browser's list: a title line and a metadata line.
82309
82606
  *
@@ -82384,7 +82681,7 @@ function SessionListRow({ session, width, depth, focused, pinned, now, onClick,
82384
82681
  });
82385
82682
  }
82386
82683
  //#endregion
82387
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/sessions/SessionPreview.js
82684
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/sessions/SessionPreview.js
82388
82685
  /** Role marker and colour for a preview entry. */
82389
82686
  const ROLE = {
82390
82687
  user: {
@@ -82475,7 +82772,7 @@ function SessionPreview({ session, entries, loading, width, height, home, now })
82475
82772
  });
82476
82773
  }
82477
82774
  //#endregion
82478
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/sessions/WorkspaceListRow.js
82775
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/sessions/WorkspaceListRow.js
82479
82776
  /** One two-line working-directory choice in the /resume browser. */
82480
82777
  function WorkspaceListRow({ workspace, all, totalProjects, totalSessions, width, focused, selected, home, now, onClick }) {
82481
82778
  const [hovered, setHovered] = (0, import_react.useState)(false);
@@ -82520,7 +82817,7 @@ function WorkspaceListRow({ workspace, all, totalProjects, totalSessions, width,
82520
82817
  });
82521
82818
  }
82522
82819
  //#endregion
82523
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessionPins.js
82820
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/sessionPins.js
82524
82821
  /**
82525
82822
  * Pinned sessions for the `/resume` browser, kept at
82526
82823
  * `~/.chatcode-cli/tui/session-pins.json` (a JSON array of session ids) so the pins
@@ -82669,7 +82966,7 @@ function setSessionPinned(id, pinned, dir = DATA_DIR) {
82669
82966
  }
82670
82967
  }
82671
82968
  //#endregion
82672
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/SessionBrowser.js
82969
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/SessionBrowser.js
82673
82970
  /**
82674
82971
  * Rows the layout cannot do without: the header, the four-row scope/search
82675
82972
  * card, the notice slot, and the hints. Everything else yields before these.
@@ -82781,8 +83078,10 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
82781
83078
  const topRef = import_react.useRef(0);
82782
83079
  const workspaceTopRef = import_react.useRef(0);
82783
83080
  const [mode, setMode] = import_react.useState("list");
83081
+ const [deleteScope, setDeleteScope] = import_react.useState([]);
83082
+ const [deleteArmed, setDeleteArmed] = import_react.useState(false);
82784
83083
  const archivedOnly = filters.archivedOnly === true;
82785
- const menuActions = archivedOnly ? ["open"] : MENU_ACTIONS;
83084
+ const menuActions = archivedOnly ? ["open", "delete"] : MENU_ACTIONS;
82786
83085
  const [renameText, setRenameText] = import_react.useState("");
82787
83086
  /** Hover state for the confirm rows (only one is ever mounted). */
82788
83087
  const [confirmHovered, setConfirmHovered] = import_react.useState(false);
@@ -83113,7 +83412,7 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83113
83412
  const soloPreview = previewOpen && canPreview && sessionAreaVisible && !splitPreview;
83114
83413
  const previewWidth = splitPreview ? Math.min(56, Math.floor(sessionAreaWidth * .42)) : sessionAreaWidth;
83115
83414
  const listWidth = Math.max(20, sessionAreaWidth - (splitPreview ? previewWidth : 0));
83116
- const extraLines = mode === "list" ? 0 : 1;
83415
+ const extraLines = mode === "list" ? 0 : archivedOnly && mode === "confirm-delete" ? 2 : 1;
83117
83416
  const ruleBudget = Math.max(0, Math.min(RULE_PRIORITY$1.length, rows - mandatoryLines - extraLines - WORKSPACE_ROW_HEIGHT));
83118
83417
  const rules = new Set(RULE_PRIORITY$1.slice(0, ruleBudget));
83119
83418
  const listHeight = Math.max(0, rows - mandatoryLines - extraLines - rules.size);
@@ -83199,12 +83498,22 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83199
83498
  if (workspaceState === void 0) apply();
83200
83499
  else runAction(apply);
83201
83500
  };
83202
- const runDelete = (target) => {
83203
- if (archivedOnly) return;
83204
- mutate(() => channel.archiveSession(target.id), t("resume-archived", { name: target.title.text }), t("resume-archive-failed", { name: target.title.text }));
83205
- };
83206
- const requestDelete = (_target) => {
83207
- if (!archivedOnly) setMode("confirm-delete");
83501
+ const runDelete = (target) => mutate(() => archivedOnly ? channel.deleteSession(target.id, deleteScope) : channel.archiveSession(target.id), t(archivedOnly ? "resume-deleted" : "resume-archived", { name: target.title.text }), t(archivedOnly ? "resume-delete-failed" : "resume-archive-failed", { name: target.title.text }));
83502
+ const requestDelete = (target) => {
83503
+ if (!archivedOnly) {
83504
+ setMode("confirm-delete");
83505
+ return;
83506
+ }
83507
+ runAction(async () => {
83508
+ try {
83509
+ if (channel.sessionDeletionScope === void 0) throw new Error(t("resume-delete-unavailable"));
83510
+ setDeleteScope(await channel.sessionDeletionScope(target.id));
83511
+ setDeleteArmed(false);
83512
+ setMode("confirm-delete");
83513
+ } catch (error) {
83514
+ report(message$2(error), "error");
83515
+ }
83516
+ });
83208
83517
  };
83209
83518
  const restoreSession = (target) => mutate(() => channel.unarchiveSession?.(target.id) ?? Promise.resolve(false), t("resume-restored", { name: target.title.text }), t("resume-restore-failed", { name: target.title.text }));
83210
83519
  const openOrRestore = (target) => {
@@ -83252,8 +83561,9 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83252
83561
  if (mode === "confirm-delete") {
83253
83562
  if (isPlainReturn(key)) {
83254
83563
  setMode("list");
83255
- if (focused !== void 0) runDelete(focused);
83256
- } else if (key.escape) setMode("list");
83564
+ if (focused !== void 0 && (!archivedOnly || deleteArmed)) runDelete(focused);
83565
+ } else if (archivedOnly && (key.tab || key.leftArrow || key.rightArrow)) setDeleteArmed((value) => !value);
83566
+ else if (key.escape) setMode("list");
83257
83567
  return;
83258
83568
  }
83259
83569
  if (mode === "confirm-clean") {
@@ -83333,7 +83643,7 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83333
83643
  } else if (isMod(key) && input === "p" && !archivedOnly) {
83334
83644
  const target = sessionAt(view.rows, focusRef.current);
83335
83645
  if (target !== void 0) togglePin(target);
83336
- } else if (isMod(key) && input === "d" && !archivedOnly && focused !== void 0) requestDelete(focused);
83646
+ } else if (isMod(key) && input === "d" && focused !== void 0) requestDelete(focused);
83337
83647
  else if (isMod(key) && input === "x" && !archivedOnly && view.emptyCount > 0) setMode("confirm-clean");
83338
83648
  else if (key.backspace || key.delete) applyFilters((current) => ({ query: current.query.slice(0, -1) }));
83339
83649
  else if (!isMod(key) && !key.meta && !key.super && input && !key.return) {
@@ -83350,20 +83660,20 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83350
83660
  if (view.hiddenSubagents > 0) counts.push(t("session-count-subagents", { n: view.hiddenSubagents }));
83351
83661
  if (view.emptyCount > 0) counts.push(t("session-count-empty", { n: view.emptyCount }));
83352
83662
  }
83353
- const header = spreadRow(` ↻ ${t(archivedOnly ? "resume-archived-title" : "resume-title")} · ${modLabel}+E ${t("resume-toggle-archived")}`, counts.join(" · "), Math.max(0, columns - 1));
83663
+ const header = spreadRow(` ↻ ${t(archivedOnly ? "resume-archived-title" : "resume-title")} · ${modLabel}e ${t("resume-toggle-archived")}`, counts.join(" · "), Math.max(0, columns - 1));
83354
83664
  const scope = filters.allProjects ? t("session-scope-all") : selectedWorkspace?.label ?? formatProject(selectedWorkspace?.cwd ?? channel.cwd, home);
83355
83665
  const inputBudget = Math.max(0, columns - (compactChrome ? 1 : 4));
83356
- const scopeRow = spreadRow(archivedOnly ? t("resume-archived-title") : level === "workspaces" ? `▣ ${t("session-workspace-select-title")}` : `▣ ${t("session-workspace-scope")} ${scope}`, archivedOnly ? t("resume-hint-archived-list", { mod: modLabel }) : level === "workspaces" ? t("session-workspace-project-count", { n: workspaceGroups.length }) : t("session-workspace-switch"), inputBudget);
83666
+ const scopeRow = spreadRow(archivedOnly ? t("resume-archived-title") : level === "workspaces" ? `▣ ${t("session-workspace-select-title")}` : `▣ ${t("session-workspace-scope")} ${scope}`, archivedOnly ? t("resume-hint-archived-list", { mod: modLabel }).replace(/\*\*/gu, "") : level === "workspaces" ? t("session-workspace-project-count", { n: workspaceGroups.length }) : t("session-workspace-switch"), inputBudget);
83357
83667
  const activeQuery = level === "workspaces" ? workspaceQuery : filters.query;
83358
83668
  const searchPlaceholder = level === "workspaces" ? t("session-workspace-search-placeholder") : t("session-search-placeholder", { scope });
83359
- const hint = mode === "confirm-delete" || mode === "confirm-clean" ? fitHint$2([t("resume-hint-archive")], inputBudget) : mode === "rename" ? fitHint$2([t("resume-hint-rename")], inputBudget) : level === "workspaces" ? fitHint$2([t("session-hint-workspaces", { mod: modLabel }), t("session-hint-workspaces-short")], inputBudget) : fitHint$2([
83669
+ const hint = mode === "confirm-delete" || mode === "confirm-clean" ? fitHint$2([t(archivedOnly ? "resume-hint-permanent-delete" : "resume-hint-archive")], inputBudget) : mode === "rename" ? fitHint$2([t("resume-hint-rename")], inputBudget) : level === "workspaces" ? fitHint$2([t("session-hint-workspaces", { mod: modLabel }), t("session-hint-workspaces-short")], inputBudget) : fitHint$2([
83360
83670
  t(archivedOnly ? "resume-hint-archived-list" : "session-hint-list-archive", {
83361
83671
  mod: modLabel,
83362
83672
  projects: filters.allProjects ? t("session-toggle-on") : t("session-toggle-off"),
83363
83673
  runs: filters.showSubagents ? t("session-toggle-on") : t("session-toggle-off")
83364
83674
  }),
83365
83675
  t(archivedOnly ? "resume-hint-archived-list" : "session-hint-list-mid-archive", { mod: modLabel }),
83366
- t("session-hint-list-short", { mod: modLabel })
83676
+ t(archivedOnly ? "resume-hint-archived-short" : "session-hint-list-short", { mod: modLabel })
83367
83677
  ], inputBudget);
83368
83678
  return (0, import_jsx_runtime.jsxs)(ThemedBox, {
83369
83679
  flexDirection: "column",
@@ -83550,9 +83860,9 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83550
83860
  children: notice === void 0 ? " " : ` ${notice.tone === "error" ? "✗" : "✓"} ${truncateWidth$1(notice.text, Math.max(0, columns - 4))}`
83551
83861
  })
83552
83862
  }),
83553
- mode === "confirm-delete" && focused !== void 0 && (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: (0, import_jsx_runtime.jsx)(ThemedBox, {
83863
+ mode === "confirm-delete" && focused !== void 0 && (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [(0, import_jsx_runtime.jsx)(ThemedBox, {
83554
83864
  flexShrink: 0,
83555
- onClick: () => {
83865
+ onClick: archivedOnly ? void 0 : () => {
83556
83866
  setMode("list");
83557
83867
  runDelete(focused);
83558
83868
  },
@@ -83561,9 +83871,30 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83561
83871
  backgroundColor: confirmHovered ? "userMessageBackgroundHover" : void 0,
83562
83872
  children: (0, import_jsx_runtime.jsx)(ThemedText, {
83563
83873
  color: "error",
83564
- children: ` ${truncateWidth$1(t("resume-archive-confirm", { name: focused.title.text }), inputBudget)}`
83874
+ children: ` ${truncateWidth$1(t(archivedOnly ? "resume-delete-confirm" : "resume-archive-confirm", {
83875
+ name: focused.title.text,
83876
+ n: deleteScope.length
83877
+ }), inputBudget)}`
83565
83878
  })
83566
- }) }),
83879
+ }), archivedOnly && (0, import_jsx_runtime.jsxs)(ThemedBox, {
83880
+ flexShrink: 0,
83881
+ children: [(0, import_jsx_runtime.jsx)(ThemedBox, {
83882
+ onClick: () => setMode("list"),
83883
+ children: (0, import_jsx_runtime.jsx)(ThemedText, {
83884
+ color: !deleteArmed ? "remember" : void 0,
83885
+ children: ` ${!deleteArmed ? "❯ " : ""}${t("tree-menu-cancel")} `
83886
+ })
83887
+ }), (0, import_jsx_runtime.jsx)(ThemedBox, {
83888
+ onClick: () => {
83889
+ setMode("list");
83890
+ runDelete(focused);
83891
+ },
83892
+ children: (0, import_jsx_runtime.jsx)(ThemedText, {
83893
+ color: "error",
83894
+ children: ` ${deleteArmed ? "❯ " : ""}${t("resume-menu-delete")} `
83895
+ })
83896
+ })]
83897
+ })] }),
83567
83898
  mode === "confirm-clean" && (0, import_jsx_runtime.jsx)(ThemedBox, {
83568
83899
  flexShrink: 0,
83569
83900
  onClick: () => {
@@ -83627,7 +83958,7 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83627
83958
  },
83628
83959
  children: (0, import_jsx_runtime.jsx)(ThemedText, {
83629
83960
  color: action === "delete" ? "error" : void 0,
83630
- children: ` ${index === menu.item ? "❯" : " "} ${t(action === "delete" ? "resume-menu-archive" : action === "open" && archivedOnly ? "resume-menu-restore" : menuLabelKey(action, effectivePins.has(menuTarget.id)))}`
83961
+ children: ` ${index === menu.item ? "❯" : " "} ${t(action === "delete" ? archivedOnly ? "resume-menu-delete" : "resume-menu-archive" : action === "open" && archivedOnly ? "resume-menu-restore" : menuLabelKey(action, effectivePins.has(menuTarget.id)))}`
83631
83962
  })
83632
83963
  }, action))
83633
83964
  })
@@ -83635,7 +83966,7 @@ function SessionBrowser({ channel, home, sameProject, onClose }) {
83635
83966
  });
83636
83967
  }
83637
83968
  //#endregion
83638
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/SessionTree.js
83969
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/SessionTree.js
83639
83970
  /** Local HH:MM (or MM/DD HH:MM when older than this year). */
83640
83971
  function formatTime(at, now) {
83641
83972
  const date = new Date(at);
@@ -84391,7 +84722,7 @@ function PreviewPane({ entry, meta, width, height, liveSessionId, now, compact }
84391
84722
  });
84392
84723
  }
84393
84724
  //#endregion
84394
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/Settings.js
84725
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/Settings.js
84395
84726
  /** Pick the provider-owned translation for the active language. */
84396
84727
  function pick(text, descriptions) {
84397
84728
  return descriptions?.[getLang()] ?? text;
@@ -85216,7 +85547,7 @@ function Settings({ channel, onClose, initialGroup }) {
85216
85547
  });
85217
85548
  }
85218
85549
  //#endregion
85219
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/WorkspacePicker.js
85550
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/WorkspacePicker.js
85220
85551
  const WINDOW$1 = 8;
85221
85552
  /** `/workspace` target picker contributed by local and optional providers. */
85222
85553
  function WorkspacePicker({ targets, focusIndex, currentCwd, onPick }) {
@@ -85254,7 +85585,7 @@ function WorkspacePicker({ targets, focusIndex, currentCwd, onPick }) {
85254
85585
  });
85255
85586
  }
85256
85587
  //#endregion
85257
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Select.js
85588
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/Select.js
85258
85589
  /**
85259
85590
  * A single-choice select list in the CC CustomSelect style (ported visual:
85260
85591
  * ListItem rows with ❯ focus pointer, ✓ selected checkmark, descriptions,
@@ -85281,7 +85612,7 @@ function Select({ options, focusIndex, selectedValue, visibleOptionCount = 5, on
85281
85612
  });
85282
85613
  }
85283
85614
  //#endregion
85284
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/WorkspaceMenuPicker.js
85615
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/WorkspaceMenuPicker.js
85285
85616
  /**
85286
85617
  * Bare `/workspace` action menu: the built-in subcommands (resume / rename /
85287
85618
  * open) plus any dynamically registered workspace extensions. Enter runs the
@@ -85322,7 +85653,7 @@ function WorkspaceMenuPicker({ options, focusIndex, onPick }) {
85322
85653
  });
85323
85654
  }
85324
85655
  //#endregion
85325
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/WorkspaceFlowPicker.js
85656
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/WorkspaceFlowPicker.js
85326
85657
  const WINDOW = 8;
85327
85658
  /** Generic nested choice surface returned by a workspace provider command. */
85328
85659
  function WorkspaceFlowPicker({ title, choices, focusIndex, busy = false, input = null, onPick }) {
@@ -85380,7 +85711,7 @@ function WorkspaceFlowPicker({ title, choices, focusIndex, busy = false, input =
85380
85711
  });
85381
85712
  }
85382
85713
  //#endregion
85383
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ActivityPicker.js
85714
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ActivityPicker.js
85384
85715
  /**
85385
85716
  * Working-activity indicator picker in the CC ModelPicker style (ported
85386
85717
  * from the pi extension's `/activity` interactive select): a
@@ -85422,7 +85753,7 @@ function ActivityPicker({ focusIndex, currentPreset, onPick }) {
85422
85753
  });
85423
85754
  }
85424
85755
  //#endregion
85425
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ColorPicker.js
85756
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ColorPicker.js
85426
85757
  /**
85427
85758
  * Session accent color picker (bare `/color`): a permission-colored Pane
85428
85759
  * listing the whole palette with a colored swatch per row, `❯` focus
@@ -85466,7 +85797,7 @@ function ColorPicker({ focusIndex, currentColor, onPick }) {
85466
85797
  });
85467
85798
  }
85468
85799
  //#endregion
85469
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/EffortSlider.js
85800
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/EffortSlider.js
85470
85801
  /**
85471
85802
  * Reasoning-effort slider (`/effort`): a rheostat row of the live route's
85472
85803
  * adapter-owned levels in adapter order, ←/→ moving focus (each move applies
@@ -85525,7 +85856,7 @@ function EffortSlider({ options, focusIndex, currentId, onPick }) {
85525
85856
  });
85526
85857
  }
85527
85858
  //#endregion
85528
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PresetPicker.js
85859
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PresetPicker.js
85529
85860
  /**
85530
85861
  * Agent-preset picker (issue #8) in the CC ModelPicker style — same chrome
85531
85862
  * as the ActivityPicker: a permission-colored Pane listing every roster
@@ -85569,7 +85900,7 @@ function PresetPicker({ presets, focusIndex, currentPreset, onPick }) {
85569
85900
  });
85570
85901
  }
85571
85902
  //#endregion
85572
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PermissionsPicker.js
85903
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PermissionsPicker.js
85573
85904
  /**
85574
85905
  * `/permission` sandbox-preset picker. The command itself is registered by
85575
85906
  * the harness side (dsh-sandbox-policy / dsh-base permission-presets row);
@@ -85616,7 +85947,7 @@ function PermissionsPicker({ options, focusIndex, currentValue, cwd, onPick }) {
85616
85947
  });
85617
85948
  }
85618
85949
  //#endregion
85619
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PlanPicker.js
85950
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/PlanPicker.js
85620
85951
  /**
85621
85952
  * `/plan` on/off picker. The command itself is registered by dsh-plan-mode
85622
85953
  * on the harness side; bare `/plan` opens this picker (with the current
@@ -85661,7 +85992,7 @@ function PlanPicker({ focusIndex, currentOn, onPick }) {
85661
85992
  });
85662
85993
  }
85663
85994
  //#endregion
85664
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/LangPicker.js
85995
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/LangPicker.js
85665
85996
  /**
85666
85997
  * `/lang` en/zh picker: bare `/lang` opens this picker (the current language
85667
85998
  * marked) and Enter applies the choice through the same path as `/lang <id>`.
@@ -85700,7 +86031,7 @@ function LangPicker({ focusIndex, currentLang, onPick }) {
85700
86031
  });
85701
86032
  }
85702
86033
  //#endregion
85703
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ThemePicker.js
86034
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ThemePicker.js
85704
86035
  /** One double-block swatch character per preview key, in a row. */
85705
86036
  const SWATCH = "██";
85706
86037
  /** Theme keys previewed in the picker, chosen for visual contrast. */
@@ -85786,7 +86117,7 @@ function ThemePicker({ focusIndex, currentTheme, themeHost, onPick }) {
85786
86117
  });
85787
86118
  }
85788
86119
  //#endregion
85789
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ThinkingToggle.js
86120
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ThinkingToggle.js
85790
86121
  /**
85791
86122
  * The `/thinking` display dialog: a permission-colored Pane with a bold
85792
86123
  * title, the Shown/Hidden select, and the Enter/Esc hint line.
@@ -85835,7 +86166,7 @@ function ThinkingToggle({ currentValue, focusIndex, onPick }) {
85835
86166
  });
85836
86167
  }
85837
86168
  //#endregion
85838
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/HistorySearchDialog.js
86169
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/HistorySearchDialog.js
85839
86170
  /**
85840
86171
  * The ctrl+r history search dialog, in the shape of Claude Code's
85841
86172
  * HistorySearchDialog/FuzzyPicker: a permission-colored Pane with a bold
@@ -85898,7 +86229,7 @@ function formatRelativeAge(ts) {
85898
86229
  return t("time-days-ago", { n: Math.floor(elapsed / 864e5) });
85899
86230
  }
85900
86231
  //#endregion
85901
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/RewindPicker.js
86232
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/RewindPicker.js
85902
86233
  /**
85903
86234
  * Double-Esc rewind picker (CC's "Double-tap esc to rewind the code and/or
85904
86235
  * conversation to a previous point in time"): lists the user's past messages
@@ -86035,7 +86366,7 @@ function preview(text) {
86035
86366
  return flat.length <= 80 ? flat : `${flat.slice(0, 80)}…`;
86036
86367
  }
86037
86368
  //#endregion
86038
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/BtwPanel.js
86369
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/BtwPanel.js
86039
86370
  /**
86040
86371
  * /btw side-question panel (CC's btw.tsx, inline-pane form like the local
86041
86372
  * pickers): title line with the question, a scrollable answer body (error /
@@ -86119,7 +86450,7 @@ function BtwPanel({ question, answer, error, streaming, onClose, onCopy }) {
86119
86450
  });
86120
86451
  }
86121
86452
  //#endregion
86122
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ReleaseNotesPanel.js
86453
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ReleaseNotesPanel.js
86123
86454
  function ReleaseNotesPanel({ release, onClose }) {
86124
86455
  const scrollRef = import_react.useRef(null);
86125
86456
  const { rows } = useTerminalSize();
@@ -86164,7 +86495,7 @@ function ReleaseNotesPanel({ release, onClose }) {
86164
86495
  });
86165
86496
  }
86166
86497
  //#endregion
86167
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/RecapPanel.js
86498
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/RecapPanel.js
86168
86499
  /**
86169
86500
  * `/recap` panel (pi-recap semantics), in the picker/dialog visual
86170
86501
  * language: a permission-colored Pane with a title bar (会话回顾), a
@@ -86285,7 +86616,7 @@ function RecapPanel({ summary, title, error, streaming, titleApplied, onClose, o
86285
86616
  });
86286
86617
  }
86287
86618
  //#endregion
86288
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/tips.js
86619
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/tips.js
86289
86620
  /**
86290
86621
  * 精简 Tips 池 —— 启动首屏轮换(LogoV2)与 `/tips` 命令面板共用。
86291
86622
  *
@@ -86490,8 +86821,8 @@ const TIPS = [
86490
86821
  {
86491
86822
  id: "cmd-export",
86492
86823
  group: "commands",
86493
- zh: "/export 把完整会话导出为 Markdown(含思考)",
86494
- en: "/export saves the full session as Markdown (thinking included)"
86824
+ zh: "/export 导出可重新导入的 JSONL 会话;/export markdown 导出阅读版",
86825
+ en: "/export saves re-importable JSONL; /export markdown saves a readable copy"
86495
86826
  },
86496
86827
  {
86497
86828
  id: "cmd-btw",
@@ -86999,7 +87330,7 @@ const TIPS = [
86999
87330
  }
87000
87331
  ];
87001
87332
  //#endregion
87002
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/TipsPanel.js
87333
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/TipsPanel.js
87003
87334
  const GROUP_ORDER = [
87004
87335
  "keys",
87005
87336
  "commands",
@@ -87078,7 +87409,7 @@ function TipsPanel({ onClose }) {
87078
87409
  });
87079
87410
  }
87080
87411
  //#endregion
87081
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SubagentCard.js
87412
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SubagentCard.js
87082
87413
  function formatDuration$1(ms) {
87083
87414
  const seconds = Math.floor(ms / 1e3);
87084
87415
  return seconds < 60 ? `${seconds}s` : `${Math.floor(seconds / 60)}m${seconds % 60}s`;
@@ -87118,7 +87449,7 @@ function SubagentCard({ subagent, focused, onClick }) {
87118
87449
  dimColor: true,
87119
87450
  children: " · "
87120
87451
  }),
87121
- (0, import_jsx_runtime.jsx)(ThemedText, { children: subagent.model ?? subagent.provider ?? "default" }),
87452
+ (0, import_jsx_runtime.jsx)(ThemedText, { children: subagent.modelName ?? subagent.model ?? subagent.provider ?? "default" }),
87122
87453
  (0, import_jsx_runtime.jsx)(ThemedText, {
87123
87454
  dimColor: true,
87124
87455
  children: ` · ${formatDuration$1(elapsed)} · ${total || "—"} tok · ${subagent.toolCalls.length} tools`
@@ -87133,7 +87464,7 @@ function SubagentCard({ subagent, focused, onClick }) {
87133
87464
  });
87134
87465
  }
87135
87466
  //#endregion
87136
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SubagentDashboard.js
87467
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SubagentDashboard.js
87137
87468
  /** 可点击 ✕ 退出按钮:整屏/浮层场景的鼠标退出通道(Esc 等价)。 */
87138
87469
  function ExitButton({ onClick }) {
87139
87470
  const [hovered, setHovered] = import_react.useState(false);
@@ -87281,7 +87612,7 @@ function SubagentDashboard({ subagents, onClose, onSelect }) {
87281
87612
  });
87282
87613
  }
87283
87614
  //#endregion
87284
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/JobsPanel.js
87615
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/JobsPanel.js
87285
87616
  function statusInfo(status) {
87286
87617
  const minimal = isMinimalMode();
87287
87618
  switch (status) {
@@ -87569,7 +87900,7 @@ function JobsPanel({ jobs, onClose, onKill }) {
87569
87900
  });
87570
87901
  }
87571
87902
  //#endregion
87572
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SubagentDetailScene.js
87903
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/SubagentDetailScene.js
87573
87904
  function formatDuration(ms) {
87574
87905
  if (ms < 1e3) return `${ms}ms`;
87575
87906
  if (ms < 6e4) return `${(ms / 1e3).toFixed(1)}s`;
@@ -87638,7 +87969,7 @@ function StatGrid({ subagent, totalTokens, elapsed, statusLabel, statusColor })
87638
87969
  }),
87639
87970
  (0, import_jsx_runtime.jsx)(StatRow, {
87640
87971
  label: t("subagent-model"),
87641
- children: (0, import_jsx_runtime.jsx)(ThemedText, { children: subagent.model ?? subagent.provider ?? "default" })
87972
+ children: (0, import_jsx_runtime.jsx)(ThemedText, { children: subagent.modelName ?? subagent.model ?? subagent.provider ?? "default" })
87642
87973
  }),
87643
87974
  (0, import_jsx_runtime.jsx)(StatRow, {
87644
87975
  label: t("subagent-duration"),
@@ -87805,7 +88136,7 @@ function SubagentDetailScene({ subagent, onBack, onInterrupt }) {
87805
88136
  (0, import_jsx_runtime.jsx)(ExitButton, { onClick: onBack })
87806
88137
  ]
87807
88138
  }),
87808
- (0, import_jsx_runtime.jsxs)(ThemedText, { children: [(0, import_jsx_runtime.jsx)(ThemedText, { children: subagent.model ?? subagent.provider ?? "default" }), (0, import_jsx_runtime.jsx)(ThemedText, {
88139
+ (0, import_jsx_runtime.jsxs)(ThemedText, { children: [(0, import_jsx_runtime.jsx)(ThemedText, { children: subagent.modelName ?? subagent.model ?? subagent.provider ?? "default" }), (0, import_jsx_runtime.jsx)(ThemedText, {
87809
88140
  dimColor: true,
87810
88141
  children: ` · ${formatDuration(elapsed)} · ${totalTokens || "—"} tok · ${subagent.toolCalls.length} tools`
87811
88142
  })] }),
@@ -88027,7 +88358,7 @@ function FileActionsPanel({ path, isDir, focusIndex, onPick }) {
88027
88358
  });
88028
88359
  }
88029
88360
  //#endregion
88030
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ProductivityPickers.js
88361
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/ProductivityPickers.js
88031
88362
  function oneLine(text, max = 70) {
88032
88363
  const compact = text.replace(/\s+/gu, " ").trim();
88033
88364
  return compact.length > max ? `${compact.slice(0, max - 1)}…` : compact;
@@ -88119,7 +88450,7 @@ function DiffLoading() {
88119
88450
  });
88120
88451
  }
88121
88452
  //#endregion
88122
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/productivityCommands.js
88453
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/productivityCommands.js
88123
88454
  /** `/copy` argument is a one-based reply age; omission selects the latest. */
88124
88455
  function parseCopyIndex(raw, count) {
88125
88456
  const value = raw.trim();
@@ -88172,7 +88503,7 @@ function gitDiffLines(report, labels) {
88172
88503
  ];
88173
88504
  }
88174
88505
  //#endregion
88175
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/sessionOrganizationCommands.js
88506
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/sessionOrganizationCommands.js
88176
88507
  /** Compact duration suitable for a terminal report row. */
88177
88508
  function formatStatsDuration(ms) {
88178
88509
  if (ms < 1e3) return `${Math.round(ms)} ms`;
@@ -88218,7 +88549,7 @@ function parsePresetManagement(input) {
88218
88549
  return { kind: "invalid" };
88219
88550
  }
88220
88551
  //#endregion
88221
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/workflowCommands.js
88552
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/workflowCommands.js
88222
88553
  const ALIASES = {
88223
88554
  map: "inspect",
88224
88555
  fixit: "repair",
@@ -88273,7 +88604,7 @@ function buildWorkflowCommand(name, rawInput = "") {
88273
88604
  };
88274
88605
  }
88275
88606
  //#endregion
88276
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/urlGuard.js
88607
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/utils/urlGuard.js
88277
88608
  const EXTERNAL_SCHEME = /^https?:\/\//i;
88278
88609
  /**
88279
88610
  * Classify a clicked link target. Mirrors the previous handleOpenTarget
@@ -88298,7 +88629,7 @@ function classifyOpenTarget(url) {
88298
88629
  return { kind: "rejected" };
88299
88630
  }
88300
88631
  //#endregion
88301
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useExternalVersion.js
88632
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/hooks/useExternalVersion.js
88302
88633
  /**
88303
88634
  * Subscribe to an external store's version counter at DEFAULT lane.
88304
88635
  *
@@ -88347,7 +88678,7 @@ function useExternalVersion(subscribe, getVersion, enabled = true) {
88347
88678
  return version;
88348
88679
  }
88349
88680
  //#endregion
88350
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/WaveBand.js
88681
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/WaveBand.js
88351
88682
  /**
88352
88683
  * The wake — the whole session drawn as one row of glyphs.
88353
88684
  *
@@ -88484,7 +88815,7 @@ function toHex(colour) {
88484
88815
  return `#${hex(parsed.r)}${hex(parsed.g)}${hex(parsed.b)}`;
88485
88816
  }
88486
88817
  //#endregion
88487
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/Ledger.js
88818
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/Ledger.js
88488
88819
  /**
88489
88820
  * The ledger — one line per event, columns aligned across every row.
88490
88821
  *
@@ -88730,7 +89061,7 @@ function Ledger({ rows, start, height, cursor, width, tick, arrivalTick, arrival
88730
89061
  });
88731
89062
  }
88732
89063
  //#endregion
88733
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/Inspector.js
89064
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/Inspector.js
88734
89065
  /**
88735
89066
  * The inspector — full detail for the focused row, in a fixed-height slot.
88736
89067
  *
@@ -88836,7 +89167,7 @@ function Inspector({ node, detail, height, width, expanded, scroll }) {
88836
89167
  });
88837
89168
  }
88838
89169
  //#endregion
88839
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/HotspotView.js
89170
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/components/trajectory/HotspotView.js
88840
89171
  /**
88841
89172
  * The hotspot view — the session ranked by cost instead of ordered by time.
88842
89173
  *
@@ -88999,7 +89330,7 @@ function HotspotView({ agg, sort, width, height, cursor, tick, switchTick, onRow
88999
89330
  });
89000
89331
  }
89001
89332
  //#endregion
89002
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectory/query.js
89333
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectory/query.js
89003
89334
  /**
89004
89335
  * Trajectory query — whole-session structured filtering.
89005
89336
  *
@@ -89195,7 +89526,7 @@ function applyQuery(nodes, query) {
89195
89526
  };
89196
89527
  }
89197
89528
  //#endregion
89198
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/TrajectoryScene.js
89529
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/TrajectoryScene.js
89199
89530
  /**
89200
89531
  * The trajectory scene — the session's own screen.
89201
89532
  *
@@ -89683,7 +90014,7 @@ function TrajectoryScene({ channel, build, onClose }) {
89683
90014
  });
89684
90015
  }
89685
90016
  //#endregion
89686
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/LoadedContextScene.js
90017
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/LoadedContextScene.js
89687
90018
  /** Build the non-empty pages shown by the loaded-context inspector. */
89688
90019
  function contextPages(context) {
89689
90020
  const pages = [];
@@ -89867,7 +90198,7 @@ function LoadedContextScene({ context, onClose }) {
89867
90198
  });
89868
90199
  }
89869
90200
  //#endregion
89870
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/AgentView.js
90201
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/AgentView.js
89871
90202
  /** Rows the layout cannot do without: header, model/cwd line, dispatch
89872
90203
  * input, hints. */
89873
90204
  const MANDATORY_LINES = 4;
@@ -90282,7 +90613,7 @@ function AgentView({ channel, home, approval, onApprove, returnSessionId, onClos
90282
90613
  const failed = agentRows.filter((row) => row.status === "failed").length;
90283
90614
  if (failed > 0) counts.push(t("agentview-count-failed", { n: failed }));
90284
90615
  const header = spreadRow(` ${t("agentview-title")}`, counts.join(" · "), Math.max(0, columns - 1));
90285
- const subtitle = `${channel.model} · ${formatProject(channel.cwd, home)}`;
90616
+ const subtitle = `${channel.modelName?.trim() || channel.model} · ${formatProject(channel.cwd, home)}`;
90286
90617
  const inputBudget = Math.max(0, columns - 2);
90287
90618
  const armedId = stopArmRef.current?.id;
90288
90619
  const armedTarget = armedId === void 0 ? void 0 : agentRows.find((row) => row.id === armedId);
@@ -90476,7 +90807,7 @@ function AgentView({ channel, home, approval, onApprove, returnSessionId, onClos
90476
90807
  });
90477
90808
  }
90478
90809
  //#endregion
90479
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectoryPrefs.js
90810
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/trajectoryPrefs.js
90480
90811
  /**
90481
90812
  * Persisted "the user has seen the trajectory" flag, at
90482
90813
  * `~/.chatcode-cli/tui/trajectory.json`.
@@ -90536,7 +90867,7 @@ function writeTrajectorySeen(dir = DATA_DIR) {
90536
90867
  }
90537
90868
  }
90538
90869
  //#endregion
90539
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/chatOverlay.js
90870
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/chatOverlay.js
90540
90871
  const NO_OVERLAY = { kind: "none" };
90541
90872
  /**
90542
90873
  * One-step wrap-around cursor move — the single source of the wrapping rule
@@ -90646,7 +90977,7 @@ function dialogOverlayVisible(overlay, gates) {
90646
90977
  }
90647
90978
  }
90648
90979
  //#endregion
90649
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/Chat.js
90980
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/screens/Chat.js
90650
90981
  const LOGOUT_EXIT_DELAY_MS = 200;
90651
90982
  /** Shared empty snapshot for hosts whose channel has no event log. */
90652
90983
  const NO_EVENTS = [];
@@ -92414,8 +92745,14 @@ function Chat({ channel, questionStore, approvalStore, releaseNotes, extensionDi
92414
92745
  channel.pushLocal("/plugins", channel.pluginsInfo(rawInput));
92415
92746
  return true;
92416
92747
  case "export": {
92417
- const target = channel.exportSession();
92418
- channel.notify(target === null ? t("export-failed") : t("export-saved", { target }), target === null ? {
92748
+ const argument = rawInput.trim().toLowerCase();
92749
+ if (argument !== "" && argument !== "jsonl" && argument !== "markdown" && argument !== "md") {
92750
+ channel.notify(t("export-usage"), { color: "error" });
92751
+ return true;
92752
+ }
92753
+ const format = argument === "markdown" || argument === "md" ? "markdown" : "jsonl";
92754
+ const target = channel.exportSession(format);
92755
+ channel.notify(target === null ? t("export-failed") : t("export-saved", { target }) + (format === "jsonl" ? "\n" + t("export-import-hint", { target }) : ""), target === null ? {
92419
92756
  color: "error",
92420
92757
  timeoutMs: 8e3
92421
92758
  } : { timeoutMs: 8e3 });
@@ -92780,9 +93117,17 @@ function Chat({ channel, questionStore, approvalStore, releaseNotes, extensionDi
92780
93117
  default:
92781
93118
  if (channel.commandList.find((command) => command.external && command.name === name)) {
92782
93119
  setHelpOpen(false);
93120
+ const keepResult = name === "import" || name === "import-all";
93121
+ const commandLine = `/${name}${rawInput}`;
93122
+ if (keepResult) channel.pushLocal(commandLine, [t("import-running")]);
92783
93123
  channel.runExternalCommand(name, rawInput).then((text) => {
92784
- if (text !== void 0 && text !== "") channel.notify(text);
93124
+ if (text !== void 0 && text !== "") if (keepResult) channel.pushLocal(commandLine, text.split("\n"));
93125
+ else channel.notify(text);
92785
93126
  else if (text === void 0) channel.notify(t("command-not-found", { name }), { color: "error" });
93127
+ }).catch((error) => {
93128
+ const text = error instanceof Error ? error.message : String(error);
93129
+ if (keepResult) channel.pushLocal(commandLine, [text]);
93130
+ channel.notify(text, { color: "error" });
92786
93131
  });
92787
93132
  return true;
92788
93133
  }
@@ -94286,7 +94631,7 @@ function Chat({ channel, questionStore, approvalStore, releaseNotes, extensionDi
94286
94631
  invalidationKey: `${overlay.kind}:${dialogOverlayOpen}:${btw !== null}`,
94287
94632
  subscribeInvalidation: subscribeTooltipInvalidation
94288
94633
  }),
94289
- (0, import_jsx_runtime.jsx)(PromptEditorLayer, {}),
94634
+ (0, import_jsx_runtime.jsx)(PromptEditorLayer, { fullscreen }),
94290
94635
  overlay.kind === "update" && (0, import_jsx_runtime.jsx)(ThemedBox, {
94291
94636
  position: "absolute",
94292
94637
  top: 0,
@@ -94457,7 +94802,7 @@ function ModelPickerLoading() {
94457
94802
  });
94458
94803
  }
94459
94804
  //#endregion
94460
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/webLauncher.js
94805
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/webLauncher.js
94461
94806
  const MAIN_CLI_PACKAGE = "@chatcode/chatcode-cli";
94462
94807
  function asError(value) {
94463
94808
  return value instanceof Error ? value : new Error(String(value));
@@ -94613,7 +94958,7 @@ function launchWebFrontend(cwd, options = {}) {
94613
94958
  }
94614
94959
  }
94615
94960
  //#endregion
94616
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/inject-channel.js
94961
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/inject-channel.js
94617
94962
  /**
94618
94963
  * External injection channel — lets an out-of-process editor integration
94619
94964
  * (e.g. the `dsh.nvim` Neovim plugin) push text into the running TUI's
@@ -94808,7 +95153,7 @@ function openInjectChannel(sessionId, cwd, handlers, onError) {
94808
95153
  };
94809
95154
  }
94810
95155
  //#endregion
94811
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/chatcode-auth.js
95156
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/chatcode-auth.js
94812
95157
  const CHATCODE_CLI_OAUTH_TOKEN = "CHATCODE_CLI_OAUTH_TOKEN";
94813
95158
  const DEFAULT_SERVICE_WAIT_MS = 75e3;
94814
95159
  function authService(ctx) {
@@ -94840,7 +95185,7 @@ function chatCodeAuthExpected(ctx) {
94840
95185
  if (entry.disabled === true) return false;
94841
95186
  const id = entry.options?.id;
94842
95187
  const name = entry.options?.name;
94843
- return id === "llm-chatcode-config" || name === "dsh-llm-chatcode-config" || name?.endsWith("/dsh-llm-chatcode-config") === true;
95188
+ return id === "llm-chatcode-config" || name === "cco-llm-chatcode-config" || name?.endsWith("/cco-llm-chatcode-config") === true;
94844
95189
  });
94845
95190
  }
94846
95191
  async function waitForAuthService(ctx, timeoutMs, pollMs) {
@@ -94982,7 +95327,7 @@ async function requireChatCodeStartupLogin(ctx, options) {
94982
95327
  return "ready";
94983
95328
  }
94984
95329
  //#endregion
94985
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/chatcode-api.js
95330
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/chatcode-api.js
94986
95331
  /** Bind authenticated statistics requests to one TUI lifetime. */
94987
95332
  function createChatCodeAuthorizedPost(ctx) {
94988
95333
  const lifetime = new AbortController();
@@ -95021,7 +95366,7 @@ function createChatCodeAuthorizedPost(ctx) {
95021
95366
  };
95022
95367
  }
95023
95368
  //#endregion
95024
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.21_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/plugin.js
95369
+ //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.22_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/plugin.js
95025
95370
  /**
95026
95371
  * Interactive TUI front door for ChatCode CLI agents.
95027
95372
  *