@daniel156161/prism 0.2.101 → 0.2.105

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 (205) hide show
  1. package/README.md +2 -2
  2. package/dist/pi/pi-env.d.ts +1 -1
  3. package/dist/pi/pi-env.js +1 -1
  4. package/dist/prism-extensions/integrations/ai-memory-system.js +16 -9
  5. package/dist/prism-extensions/integrations/ai-memory-system.js.map +1 -1
  6. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  7. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +23 -25
  8. package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
  9. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
  10. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +3 -1
  11. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
  12. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +3 -2
  13. package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
  14. package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
  15. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  16. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.d.ts.map +1 -1
  17. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js +1 -1
  18. package/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.js.map +1 -1
  19. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.d.ts.map +1 -1
  20. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +38 -6
  21. package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
  22. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts +75 -0
  23. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  24. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +75 -0
  25. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js.map +1 -1
  26. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts +3 -1
  27. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
  28. package/node_modules/@earendil-works/pi-ai/dist/providers/cloudflare-ai-gateway.js.map +1 -1
  29. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  30. package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
  31. package/node_modules/@earendil-works/pi-ai/dist/providers/data/azure-openai-responses.json +1 -1
  32. package/node_modules/@earendil-works/pi-ai/dist/providers/data/baseten.json +1 -1
  33. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  34. package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.json +1 -1
  35. package/node_modules/@earendil-works/pi-ai/dist/providers/data/deepseek.json +1 -1
  36. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  37. package/node_modules/@earendil-works/pi-ai/dist/providers/data/github-copilot.json +1 -1
  38. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  39. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax-cn.json +1 -1
  40. package/node_modules/@earendil-works/pi-ai/dist/providers/data/minimax.json +1 -1
  41. package/node_modules/@earendil-works/pi-ai/dist/providers/data/mistral.json +1 -1
  42. package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
  43. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.json +1 -1
  44. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  45. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  46. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  47. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan-cn.json +1 -1
  48. package/node_modules/@earendil-works/pi-ai/dist/providers/data/qwen-token-plan.json +1 -1
  49. package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.json +1 -1
  50. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  51. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai-coding-cn.json +1 -1
  52. package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
  53. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +1 -1
  54. package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
  55. package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
  56. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  57. package/node_modules/@earendil-works/pi-client/CHANGELOG.md +1 -1
  58. package/node_modules/@earendil-works/pi-client/package.json +2 -2
  59. package/node_modules/@earendil-works/pi-coding-agent/CHANGELOG.md +47 -3
  60. package/node_modules/@earendil-works/pi-coding-agent/README.md +5 -4
  61. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-GPPBJGBU.js → chunk-2KVJKXS2.js} +1 -1
  62. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-E5KXRMZK.js → chunk-OMWWHBTG.js} +69 -68
  63. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/github-copilot.js +1 -1
  64. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{google-generative-ai-XDKMGBCJ.js → google-generative-ai-YMUPJBKR.js} +1 -1
  65. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{google-vertex-D5FGEO3Y.js → google-vertex-MPWMV4OF.js} +1 -1
  66. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +13 -0
  67. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{mistral-conversations-YK73UAOZ.js → mistral-conversations-Q3AWZJAZ.js} +1 -1
  68. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{openai-completions-JD4WAC3R.js → openai-completions-ERMU2SS7.js} +1 -1
  69. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js +1 -1
  70. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/index.js +1 -1
  71. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/rpc-entry.js +1 -1
  72. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.d.ts.map +1 -1
  73. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js +2 -1
  74. package/node_modules/@earendil-works/pi-coding-agent/dist/cli/startup-ui.js.map +1 -1
  75. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts +12 -1
  76. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  77. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js +77 -9
  78. package/node_modules/@earendil-works/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  79. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  80. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js +4 -3
  81. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  82. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts +5 -0
  83. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  84. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js +19 -5
  85. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  86. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  87. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  88. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  89. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -0
  90. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  91. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js +45 -1
  92. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  93. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts +18 -1
  94. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  95. package/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  96. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  97. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js +4 -2
  98. package/node_modules/@earendil-works/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  99. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts +8 -1
  100. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  101. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js +17 -0
  102. package/node_modules/@earendil-works/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  103. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.d.ts +6 -0
  104. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.d.ts.map +1 -1
  105. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.js +7 -0
  106. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/client.js.map +1 -1
  107. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.d.ts +3 -1
  108. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.d.ts.map +1 -1
  109. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.js +27 -6
  110. package/node_modules/@earendil-works/pi-coding-agent/dist/extensions/llama/provider.js.map +1 -1
  111. package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts +2 -1
  112. package/node_modules/@earendil-works/pi-coding-agent/dist/index.d.ts.map +1 -1
  113. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js +1 -0
  114. package/node_modules/@earendil-works/pi-coding-agent/dist/index.js.map +1 -1
  115. package/node_modules/@earendil-works/pi-coding-agent/dist/main.d.ts.map +1 -1
  116. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js +2 -0
  117. package/node_modules/@earendil-works/pi-coding-agent/dist/main.js.map +1 -1
  118. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  119. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  120. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +10 -0
  121. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  122. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +4 -0
  123. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  124. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js +55 -31
  125. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  126. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +7 -0
  127. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  128. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js +7 -0
  129. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  130. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  131. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js +3 -0
  132. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  133. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +12 -0
  134. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  135. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  136. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
  137. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.js +6 -4
  138. package/node_modules/@earendil-works/pi-coding-agent/dist/utils/shell.js.map +1 -1
  139. package/node_modules/@earendil-works/pi-coding-agent/docs/compaction.md +2 -0
  140. package/node_modules/@earendil-works/pi-coding-agent/docs/custom-provider.md +7 -7
  141. package/node_modules/@earendil-works/pi-coding-agent/docs/environment-variables.md +3 -0
  142. package/node_modules/@earendil-works/pi-coding-agent/docs/extensions.md +18 -0
  143. package/node_modules/@earendil-works/pi-coding-agent/docs/keybindings.md +1 -1
  144. package/node_modules/@earendil-works/pi-coding-agent/docs/quickstart.md +1 -1
  145. package/node_modules/@earendil-works/pi-coding-agent/docs/rpc.md +23 -0
  146. package/node_modules/@earendil-works/pi-coding-agent/docs/settings.md +12 -4
  147. package/node_modules/@earendil-works/pi-coding-agent/docs/terminal-setup.md +12 -0
  148. package/node_modules/@earendil-works/pi-coding-agent/docs/usage.md +4 -3
  149. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  150. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-anthropic/package.json +1 -1
  151. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  152. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/gondolin/package-lock.json +2 -2
  153. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/gondolin/package.json +1 -1
  154. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package-lock.json +2 -2
  155. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/sandbox/package.json +1 -1
  156. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package-lock.json +2 -2
  157. package/node_modules/@earendil-works/pi-coding-agent/examples/extensions/with-deps/package.json +1 -1
  158. package/node_modules/@earendil-works/pi-coding-agent/package.json +6 -6
  159. package/node_modules/@earendil-works/pi-protocol/package.json +1 -1
  160. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  161. package/node_modules/@earendil-works/pi-tui/README.md +1 -1
  162. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +1 -0
  163. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +1 -1
  164. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +36 -3
  165. package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +1 -1
  166. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +1 -1
  167. package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +1 -1
  168. package/node_modules/@earendil-works/pi-tui/dist/index.js +1 -1
  169. package/node_modules/@earendil-works/pi-tui/dist/index.js.map +1 -1
  170. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +2 -0
  171. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +1 -1
  172. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +37 -2
  173. package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +1 -1
  174. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts +11 -0
  175. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.d.ts.map +1 -1
  176. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js +58 -15
  177. package/node_modules/@earendil-works/pi-tui/dist/tui-alt-screen.js.map +1 -1
  178. package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.d.ts.map +1 -1
  179. package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.js +105 -45
  180. package/node_modules/@earendil-works/pi-tui/dist/tui-main-screen.js.map +1 -1
  181. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  182. package/node_modules/@types/node/README.md +1 -1
  183. package/node_modules/@types/node/buffer.buffer.d.ts +5 -0
  184. package/node_modules/@types/node/crypto.d.ts +0 -2
  185. package/node_modules/@types/node/dgram.d.ts +119 -4
  186. package/node_modules/@types/node/fs/promises.d.ts +61 -65
  187. package/node_modules/@types/node/fs.d.ts +86 -76
  188. package/node_modules/@types/node/http.d.ts +1 -1
  189. package/node_modules/@types/node/http2.d.ts +2 -2
  190. package/node_modules/@types/node/index.d.ts +1 -0
  191. package/node_modules/@types/node/inspector.d.ts +2 -1
  192. package/node_modules/@types/node/net.d.ts +108 -16
  193. package/node_modules/@types/node/package.json +2 -2
  194. package/node_modules/@types/node/quic.d.ts +37 -11
  195. package/node_modules/@types/node/stream/iter.d.ts +4 -4
  196. package/node_modules/@types/node/tls.d.ts +24 -0
  197. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
  198. package/node_modules/@types/node/ts5.6/index.d.ts +1 -0
  199. package/node_modules/@types/node/ts5.7/index.d.ts +1 -0
  200. package/node_modules/@types/node/tty.d.ts +4 -3
  201. package/node_modules/@types/node/vfs.d.ts +210 -0
  202. package/node_modules/@types/node/vm.d.ts +1 -1
  203. package/package.json +9 -9
  204. package/src/prism-extensions/integrations/ai-memory-system.ts +14 -9
  205. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/dist-RDWOYWHR.js +0 -13
@@ -7,7 +7,7 @@ import * as fs from "node:fs";
7
7
  import * as os from "node:os";
8
8
  import * as path from "node:path";
9
9
  import * as TuiLayouts from "@earendil-works/pi-tui";
10
- import { CombinedAutocompleteProvider, Container, fuzzyFilter, getCapabilities, hyperlink, Markdown, matchesKey, ProcessTerminal, Spacer, setKeybindings, Text, TruncatedText, TuiAltScreen, TuiMainScreen, visibleWidth, } from "@earendil-works/pi-tui";
10
+ import { CombinedAutocompleteProvider, Container, fuzzyFilter, getCapabilities, hyperlink, Markdown, matchesKey, ProcessTerminal, Spacer, setCapabilityOverrides, setKeybindings, Text, TruncatedText, TuiAltScreen, TuiMainScreen, visibleWidth, } from "@earendil-works/pi-tui";
11
11
  import chalk from "chalk";
12
12
  import { spawn } from "child_process";
13
13
  import { APP_NAME, APP_TITLE, CONFIG_DIR_NAME, getAgentDir, getAuthPath, getDebugLogPath, getDocsPath, VERSION, } from "../../config.js";
@@ -187,6 +187,7 @@ export function createInteractiveTui(options) {
187
187
  searchCurrentMatchStyle: (text) => theme.bold(theme.inverse(styleSearchMatch(text))),
188
188
  openUrl: openBrowser,
189
189
  onRightClickPaste: options.onRightClickPaste,
190
+ copyOnSelect: options.fullscreenCopyOnSelect,
190
191
  copySelection: async (text) => {
191
192
  try {
192
193
  await copyToClipboard(text);
@@ -350,6 +351,7 @@ export class InteractiveMode {
350
351
  }
351
352
  constructor(runtimeHost, options = {}) {
352
353
  this.runtimeHost = runtimeHost;
354
+ setCapabilityOverrides(this.settingsManager.getTerminalCapabilityOverrides());
353
355
  const tuiMode = options.tuiMode ?? this.settingsManager.getTuiMode();
354
356
  this.options = { ...options, tuiMode };
355
357
  this.autoTrustOnReloadCwd = options.autoTrustOnReloadCwd;
@@ -366,6 +368,7 @@ export class InteractiveMode {
366
368
  showHardwareCursor: this.settingsManager.getShowHardwareCursor(),
367
369
  logDirectory: getAgentDir(),
368
370
  onRightClickPaste: this.onRightClickPaste,
371
+ fullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
369
372
  });
370
373
  this.ui = createInteractiveTuiReference(() => this.renderer);
371
374
  this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
@@ -616,6 +619,7 @@ export class InteractiveMode {
616
619
  logDirectory: getAgentDir(),
617
620
  terminal,
618
621
  onRightClickPaste: this.onRightClickPaste,
622
+ fullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
619
623
  });
620
624
  nextUi.setClearOnShrink(clearOnShrink);
621
625
  nextUi.onDebug = onDebug;
@@ -699,7 +703,7 @@ export class InteractiveMode {
699
703
  await this.themeController.applyFromSettings();
700
704
  // Add header with keybindings from config (unless silenced)
701
705
  if (this.options.verbose || !this.settingsManager.getQuietStartup()) {
702
- const logo = "▲ \u001b[38;5;196mp\u001b[38;5;202mr\u001b[38;5;226mi\u001b[38;5;46ms\u001b[38;5;51mm\u001b[0m v0.2.101";
706
+ const logo = "▲ \u001b[38;5;196mp\u001b[38;5;202mr\u001b[38;5;226mi\u001b[38;5;46ms\u001b[38;5;51mm\u001b[0m v0.2.105";
703
707
  // Build startup instructions using keybinding hint helpers
704
708
  const hint = (keybinding, description) => keyHint(keybinding, description);
705
709
  const expandedInstructions = [
@@ -966,19 +970,19 @@ export class InteractiveMode {
966
970
  const entries = parseChangelog(changelogPath);
967
971
  if (!lastVersion) {
968
972
  // Fresh install - record the version, send telemetry, don't show changelog
969
- this.settingsManager.setLastChangelogVersion("0.84.3");
970
- this.reportInstallTelemetry("0.84.3");
973
+ this.settingsManager.setLastChangelogVersion("0.84.4");
974
+ this.reportInstallTelemetry("0.84.4");
971
975
  return undefined;
972
976
  }
973
977
  const newEntries = getNewEntries(entries, lastVersion);
974
978
  if (entries.length > 0 && newEntries.length === entries.length) {
975
- this.settingsManager.setLastChangelogVersion("0.84.3");
976
- this.reportInstallTelemetry("0.84.3");
979
+ this.settingsManager.setLastChangelogVersion("0.84.4");
980
+ this.reportInstallTelemetry("0.84.4");
977
981
  return normalizeChangelogLinks(entries[0].content, entries[0]);
978
982
  }
979
983
  if (newEntries.length > 0) {
980
- this.settingsManager.setLastChangelogVersion("0.84.3");
981
- this.reportInstallTelemetry("0.84.3");
984
+ this.settingsManager.setLastChangelogVersion("0.84.4");
985
+ this.reportInstallTelemetry("0.84.4");
982
986
  return newEntries.map((e) => normalizeChangelogLinks(e.content, e)).join("\n\n");
983
987
  }
984
988
  return undefined;
@@ -1536,8 +1540,12 @@ export class InteractiveMode {
1536
1540
  this.transcriptScrollView?.setScrollbar(this.settingsManager.getFullscreenScrollbar());
1537
1541
  }
1538
1542
  applyRuntimeSettings() {
1543
+ setCapabilityOverrides(this.settingsManager.getTerminalCapabilityOverrides());
1539
1544
  configureHttpDispatcher(this.settingsManager.getHttpIdleTimeoutMs());
1540
1545
  this.applyFullscreenScrollbarSetting();
1546
+ if (this.renderer instanceof TuiAltScreen) {
1547
+ this.renderer.setCopyOnSelect(this.settingsManager.getFullscreenCopyOnSelect());
1548
+ }
1541
1549
  this.footer.setSession(this.session);
1542
1550
  this.footer.setAutoCompactEnabled(this.session.autoCompactionEnabled);
1543
1551
  this.footerDataProvider.setCwd(this.sessionManager.getCwd());
@@ -1687,6 +1695,9 @@ export class InteractiveMode {
1687
1695
  this.statusContainer.addChild(this.idleStatus);
1688
1696
  }
1689
1697
  }
1698
+ showWorkingStatusIndicator() {
1699
+ this.showStatusIndicator(new WorkingStatusIndicator(this.ui, this.workingMessage ?? this.defaultWorkingMessage, this.workingIndicatorOptions));
1700
+ }
1690
1701
  setWorkingVisible(visible) {
1691
1702
  this.workingVisible = visible;
1692
1703
  if (!visible) {
@@ -1695,7 +1706,7 @@ export class InteractiveMode {
1695
1706
  return;
1696
1707
  }
1697
1708
  if (this.session.isStreaming && this.activeStatusIndicator?.kind !== "working") {
1698
- this.showStatusIndicator(new WorkingStatusIndicator(this.ui, this.workingMessage ?? this.defaultWorkingMessage, this.workingIndicatorOptions));
1709
+ this.showWorkingStatusIndicator();
1699
1710
  }
1700
1711
  this.ui.requestRender();
1701
1712
  }
@@ -2315,7 +2326,7 @@ export class InteractiveMode {
2315
2326
  this.defaultEditor.onAction("app.tools.expand", () => this.toggleToolOutputExpansion());
2316
2327
  this.defaultEditor.onAction("app.thinking.toggle", () => this.toggleThinkingBlockVisibility());
2317
2328
  this.defaultEditor.onAction("app.editor.external", () => void this.handleOpenExternalEditor());
2318
- this.defaultEditor.onAction("app.message.copy", () => void this.handleCopyCommand({ flashConfirmation: true }));
2329
+ this.defaultEditor.onAction("app.message.copy", () => void this.handleCopyCommand({ flashConfirmation: true, preferSelection: true }));
2319
2330
  this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
2320
2331
  this.defaultEditor.onAction("app.message.dequeue", () => this.handleDequeue());
2321
2332
  this.defaultEditor.onAction("app.session.new", () => this.handleClearCommand());
@@ -2603,17 +2614,21 @@ export class InteractiveMode {
2603
2614
  switch (event.type) {
2604
2615
  case "agent_start":
2605
2616
  this.pendingTools.clear();
2606
- if (this.settingsManager.getShowTerminalProgress()) {
2607
- this.ui.terminal.setProgress(true);
2608
- }
2609
2617
  // Restore main escape handler if retry handler is still active
2610
2618
  // (retry success event fires later, but we need main handler now)
2611
2619
  if (this.retryEscapeHandler) {
2612
2620
  this.defaultEditor.onEscape = this.retryEscapeHandler;
2613
2621
  this.retryEscapeHandler = undefined;
2614
2622
  }
2623
+ break;
2624
+ case "turn_start":
2625
+ if (this.settingsManager.getShowTerminalProgress()) {
2626
+ this.ui.terminal.setProgress(true);
2627
+ }
2615
2628
  if (this.workingVisible) {
2616
- this.showStatusIndicator(new WorkingStatusIndicator(this.ui, this.workingMessage ?? this.defaultWorkingMessage, this.workingIndicatorOptions));
2629
+ if (this.activeStatusIndicator?.kind !== "working") {
2630
+ this.showWorkingStatusIndicator();
2631
+ }
2617
2632
  }
2618
2633
  else {
2619
2634
  this.clearStatusIndicator();
@@ -3668,18 +3683,19 @@ export class InteractiveMode {
3668
3683
  }
3669
3684
  this.showStatus(`Tool output: ${expanded ? "expanded" : "collapsed"}`);
3670
3685
  }
3686
+ /** Update rendered assistant messages without rebuilding live tool components. */
3687
+ updateThinkingBlockVisibility() {
3688
+ for (const child of this.chatContainer.children) {
3689
+ if (child instanceof AssistantMessageComponent) {
3690
+ child.setHideThinkingBlock(this.hideThinkingBlock);
3691
+ }
3692
+ }
3693
+ this.ui.requestRender();
3694
+ }
3671
3695
  toggleThinkingBlockVisibility() {
3672
3696
  this.hideThinkingBlock = !this.hideThinkingBlock;
3673
3697
  this.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);
3674
- // Rebuild chat from session messages
3675
- this.chatContainer.clear();
3676
- this.rebuildChatFromMessages();
3677
- // If streaming, re-add the streaming component with updated visibility and re-render
3678
- if (this.streamingComponent && this.streamingMessage) {
3679
- this.streamingComponent.setHideThinkingBlock(this.hideThinkingBlock);
3680
- this.streamingComponent.updateContent(this.streamingMessage);
3681
- this.chatContainer.addChild(this.streamingComponent);
3682
- }
3698
+ this.updateThinkingBlockVisibility();
3683
3699
  this.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? "hidden" : "visible"}`);
3684
3700
  }
3685
3701
  async handleOpenExternalEditor() {
@@ -3996,6 +4012,7 @@ export class InteractiveMode {
3996
4012
  tuiMode: this.ui.mode,
3997
4013
  fullscreenExitOutput: this.settingsManager.getFullscreenExitOutput(),
3998
4014
  fullscreenScrollbar: this.settingsManager.getFullscreenScrollbar(),
4015
+ fullscreenCopyOnSelect: this.settingsManager.getFullscreenCopyOnSelect(),
3999
4016
  warnings: this.settingsManager.getWarnings(),
4000
4017
  }, {
4001
4018
  onAutoCompactChange: (enabled) => {
@@ -4072,13 +4089,7 @@ export class InteractiveMode {
4072
4089
  onHideThinkingBlockChange: (hidden) => {
4073
4090
  this.hideThinkingBlock = hidden;
4074
4091
  this.settingsManager.setHideThinkingBlock(hidden);
4075
- for (const child of this.chatContainer.children) {
4076
- if (child instanceof AssistantMessageComponent) {
4077
- child.setHideThinkingBlock(hidden);
4078
- }
4079
- }
4080
- this.chatContainer.clear();
4081
- this.rebuildChatFromMessages();
4092
+ this.updateThinkingBlockVisibility();
4082
4093
  },
4083
4094
  onMermaidRenderingModeChange: (mode) => {
4084
4095
  this.settingsManager.setMermaidRenderingMode(mode);
@@ -4172,6 +4183,11 @@ export class InteractiveMode {
4172
4183
  this.settingsManager.setFullscreenScrollbar(mode);
4173
4184
  this.applyFullscreenScrollbarSetting();
4174
4185
  },
4186
+ onFullscreenCopyOnSelectChange: (enabled) => {
4187
+ this.settingsManager.setFullscreenCopyOnSelect(enabled);
4188
+ if (this.renderer instanceof TuiAltScreen)
4189
+ this.renderer.setCopyOnSelect(enabled);
4190
+ },
4175
4191
  onWarningsChange: (warnings) => {
4176
4192
  this.settingsManager.setWarnings(warnings);
4177
4193
  },
@@ -4361,6 +4377,7 @@ export class InteractiveMode {
4361
4377
  const selectModel = async (model, persist) => {
4362
4378
  try {
4363
4379
  await this.session.setModel(model, { persist });
4380
+ this.updateAvailableProviderCount();
4364
4381
  this.footer.invalidate();
4365
4382
  this.updateEditorBorderColor();
4366
4383
  done();
@@ -5209,8 +5226,8 @@ export class InteractiveMode {
5209
5226
  activeHeader.setExpanded(this.toolOutputExpanded);
5210
5227
  }
5211
5228
  setRegisteredThemes(this.session.resourceLoader.getThemes().themes);
5212
- await this.themeController.applyFromSettings();
5213
5229
  this.applyRuntimeSettings();
5230
+ await this.themeController.applyFromSettings();
5214
5231
  this.setupAutocompleteProvider();
5215
5232
  const runner = this.session.extensionRunner;
5216
5233
  this.setupExtensionShortcuts(runner);
@@ -5332,6 +5349,13 @@ export class InteractiveMode {
5332
5349
  });
5333
5350
  }
5334
5351
  async handleCopyCommand(options = {}) {
5352
+ if (options.preferSelection &&
5353
+ this.ui instanceof TuiAltScreen &&
5354
+ !this.ui.getCopyOnSelect() &&
5355
+ this.ui.hasActiveSelection()) {
5356
+ await this.ui.copyActiveSelectionToClipboard();
5357
+ return;
5358
+ }
5335
5359
  const text = this.session.getLastAssistantText();
5336
5360
  if (!text) {
5337
5361
  this.showError("No agent messages to copy yet.");