@greppleai/grip 0.1.4 → 0.1.6

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 (569) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +2 -2
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js.map +1 -1
  5. package/dist/bun/embedded-assets.d.ts.map +1 -1
  6. package/dist/bun/embedded-assets.js.map +1 -1
  7. package/dist/bun/register-bedrock.d.ts.map +1 -1
  8. package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
  9. package/dist/bun/restore-sandbox-env.js.map +1 -1
  10. package/dist/cli/args.d.ts.map +1 -1
  11. package/dist/cli/args.js.map +1 -1
  12. package/dist/cli/config-selector.d.ts.map +1 -1
  13. package/dist/cli/config-selector.js.map +1 -1
  14. package/dist/cli/file-processor.d.ts.map +1 -1
  15. package/dist/cli/file-processor.js.map +1 -1
  16. package/dist/cli/initial-message.d.ts +1 -1
  17. package/dist/cli/initial-message.d.ts.map +1 -1
  18. package/dist/cli/initial-message.js.map +1 -1
  19. package/dist/cli/list-models.d.ts.map +1 -1
  20. package/dist/cli/list-models.js.map +1 -1
  21. package/dist/cli/session-picker.d.ts.map +1 -1
  22. package/dist/cli/session-picker.js.map +1 -1
  23. package/dist/cli.d.ts.map +1 -1
  24. package/dist/cli.js.map +1 -1
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js.map +1 -1
  27. package/dist/core/agent-session.d.ts +27 -0
  28. package/dist/core/agent-session.d.ts.map +1 -1
  29. package/dist/core/agent-session.js +117 -152
  30. package/dist/core/agent-session.js.map +1 -1
  31. package/dist/core/auth-guidance.d.ts.map +1 -1
  32. package/dist/core/auth-guidance.js.map +1 -1
  33. package/dist/core/auth-storage.d.ts +4 -0
  34. package/dist/core/auth-storage.d.ts.map +1 -1
  35. package/dist/core/auth-storage.js +6 -11
  36. package/dist/core/auth-storage.js.map +1 -1
  37. package/dist/core/bash-executor.d.ts.map +1 -1
  38. package/dist/core/bash-executor.js +19 -23
  39. package/dist/core/bash-executor.js.map +1 -1
  40. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  41. package/dist/core/compaction/branch-summarization.js.map +1 -1
  42. package/dist/core/compaction/compaction.d.ts.map +1 -1
  43. package/dist/core/compaction/compaction.js.map +1 -1
  44. package/dist/core/compaction/compression-detection-ledger.d.ts.map +1 -1
  45. package/dist/core/compaction/compression-detection-ledger.js.map +1 -1
  46. package/dist/core/compaction/compression-detector.d.ts +1 -0
  47. package/dist/core/compaction/compression-detector.d.ts.map +1 -1
  48. package/dist/core/compaction/compression-detector.js +10 -21
  49. package/dist/core/compaction/compression-detector.js.map +1 -1
  50. package/dist/core/compaction/compression-economics.d.ts.map +1 -1
  51. package/dist/core/compaction/compression-economics.js.map +1 -1
  52. package/dist/core/compaction/utils.d.ts.map +1 -1
  53. package/dist/core/compaction/utils.js.map +1 -1
  54. package/dist/core/defaults.d.ts.map +1 -1
  55. package/dist/core/diagnostics.d.ts.map +1 -1
  56. package/dist/core/event-bus.d.ts.map +1 -1
  57. package/dist/core/event-bus.js.map +1 -1
  58. package/dist/core/exec.d.ts.map +1 -1
  59. package/dist/core/exec.js.map +1 -1
  60. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  61. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  62. package/dist/core/export-html/index.d.ts.map +1 -1
  63. package/dist/core/export-html/index.js.map +1 -1
  64. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  65. package/dist/core/export-html/tool-renderer.js.map +1 -1
  66. package/dist/core/extensions/loader.d.ts.map +1 -1
  67. package/dist/core/extensions/loader.js.map +1 -1
  68. package/dist/core/extensions/runner.d.ts.map +1 -1
  69. package/dist/core/extensions/runner.js +18 -30
  70. package/dist/core/extensions/runner.js.map +1 -1
  71. package/dist/core/extensions/types.d.ts.map +1 -1
  72. package/dist/core/extensions/types.js.map +1 -1
  73. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  74. package/dist/core/extensions/wrapper.js.map +1 -1
  75. package/dist/core/footer-data-provider.d.ts.map +1 -1
  76. package/dist/core/footer-data-provider.js +15 -16
  77. package/dist/core/footer-data-provider.js.map +1 -1
  78. package/dist/core/grip-agent.d.ts.map +1 -1
  79. package/dist/core/grip-agent.js +11 -23
  80. package/dist/core/grip-agent.js.map +1 -1
  81. package/dist/core/grip-manifest.d.ts.map +1 -1
  82. package/dist/core/grip-manifest.js.map +1 -1
  83. package/dist/core/hooks/aggregate.d.ts.map +1 -1
  84. package/dist/core/hooks/aggregate.js.map +1 -1
  85. package/dist/core/hooks/config.d.ts.map +1 -1
  86. package/dist/core/hooks/config.js.map +1 -1
  87. package/dist/core/hooks/executor.d.ts.map +1 -1
  88. package/dist/core/hooks/executor.js.map +1 -1
  89. package/dist/core/hooks/index.d.ts.map +1 -1
  90. package/dist/core/hooks/index.js.map +1 -1
  91. package/dist/core/hooks/matcher.d.ts.map +1 -1
  92. package/dist/core/hooks/matcher.js.map +1 -1
  93. package/dist/core/hooks/trust-store.d.ts.map +1 -1
  94. package/dist/core/hooks/trust-store.js +0 -3
  95. package/dist/core/hooks/trust-store.js.map +1 -1
  96. package/dist/core/hooks/types.d.ts.map +1 -1
  97. package/dist/core/hooks/types.js.map +1 -1
  98. package/dist/core/http-dispatcher.d.ts.map +1 -1
  99. package/dist/core/http-dispatcher.js.map +1 -1
  100. package/dist/core/instruction-resource-loader.d.ts.map +1 -1
  101. package/dist/core/instruction-resource-loader.js +0 -3
  102. package/dist/core/instruction-resource-loader.js.map +1 -1
  103. package/dist/core/keybindings.d.ts.map +1 -1
  104. package/dist/core/keybindings.js +0 -1
  105. package/dist/core/keybindings.js.map +1 -1
  106. package/dist/core/lsp/abort.d.ts.map +1 -1
  107. package/dist/core/lsp/abort.js.map +1 -1
  108. package/dist/core/lsp/client.d.ts.map +1 -1
  109. package/dist/core/lsp/client.js +8 -22
  110. package/dist/core/lsp/client.js.map +1 -1
  111. package/dist/core/lsp/config-loader.d.ts.map +1 -1
  112. package/dist/core/lsp/config-loader.js.map +1 -1
  113. package/dist/core/lsp/config.d.ts.map +1 -1
  114. package/dist/core/lsp/config.js.map +1 -1
  115. package/dist/core/lsp/diagnostics.d.ts.map +1 -1
  116. package/dist/core/lsp/diagnostics.js.map +1 -1
  117. package/dist/core/lsp/file-sync.d.ts.map +1 -1
  118. package/dist/core/lsp/file-sync.js +7 -9
  119. package/dist/core/lsp/file-sync.js.map +1 -1
  120. package/dist/core/lsp/integration.d.ts.map +1 -1
  121. package/dist/core/lsp/integration.js.map +1 -1
  122. package/dist/core/lsp/language-map.d.ts.map +1 -1
  123. package/dist/core/lsp/language-map.js +2 -7
  124. package/dist/core/lsp/language-map.js.map +1 -1
  125. package/dist/core/lsp/manager.d.ts.map +1 -1
  126. package/dist/core/lsp/manager.js +18 -29
  127. package/dist/core/lsp/manager.js.map +1 -1
  128. package/dist/core/lsp/navigation.d.ts.map +1 -1
  129. package/dist/core/lsp/navigation.js.map +1 -1
  130. package/dist/core/lsp/portable-path.d.ts.map +1 -1
  131. package/dist/core/lsp/portable-path.js.map +1 -1
  132. package/dist/core/lsp/refactor.d.ts.map +1 -1
  133. package/dist/core/lsp/refactor.js.map +1 -1
  134. package/dist/core/lsp/transport.d.ts.map +1 -1
  135. package/dist/core/lsp/transport.js.map +1 -1
  136. package/dist/core/messages.d.ts.map +1 -1
  137. package/dist/core/messages.js.map +1 -1
  138. package/dist/core/model-registry.d.ts.map +1 -1
  139. package/dist/core/model-registry.js +5 -7
  140. package/dist/core/model-registry.js.map +1 -1
  141. package/dist/core/model-resolver.d.ts.map +1 -1
  142. package/dist/core/model-resolver.js.map +1 -1
  143. package/dist/core/output-guard.d.ts.map +1 -1
  144. package/dist/core/output-guard.js.map +1 -1
  145. package/dist/core/package-manager.d.ts.map +1 -1
  146. package/dist/core/package-manager.js +0 -6
  147. package/dist/core/package-manager.js.map +1 -1
  148. package/dist/core/prompt-templates.d.ts.map +1 -1
  149. package/dist/core/prompt-templates.js.map +1 -1
  150. package/dist/core/provider-display-names.d.ts.map +1 -1
  151. package/dist/core/remote-workspace-protocol/contract.d.ts.map +1 -1
  152. package/dist/core/remote-workspace-protocol/contract.js +4 -2
  153. package/dist/core/remote-workspace-protocol/contract.js.map +1 -1
  154. package/dist/core/remote-workspace-protocol/guest-shared-client.d.ts.map +1 -1
  155. package/dist/core/remote-workspace-protocol/guest-shared-client.js +1 -5
  156. package/dist/core/remote-workspace-protocol/guest-shared-client.js.map +1 -1
  157. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.d.ts.map +1 -1
  158. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js +5 -10
  159. package/dist/core/remote-workspace-protocol/guest-shared-outbound-scheduler.js.map +1 -1
  160. package/dist/core/remote-workspace-protocol/guest-shared-uplink.d.ts.map +1 -1
  161. package/dist/core/remote-workspace-protocol/guest-shared-uplink.js +2 -9
  162. package/dist/core/remote-workspace-protocol/guest-shared-uplink.js.map +1 -1
  163. package/dist/core/remote-workspace-protocol/lima-owner-directory.d.ts.map +1 -1
  164. package/dist/core/remote-workspace-protocol/lima-owner-directory.js.map +1 -1
  165. package/dist/core/remote-workspace-protocol/lima-owner-lock.d.ts.map +1 -1
  166. package/dist/core/remote-workspace-protocol/lima-owner-lock.js.map +1 -1
  167. package/dist/core/remote-workspace-protocol/session.d.ts.map +1 -1
  168. package/dist/core/remote-workspace-protocol/session.js +27 -65
  169. package/dist/core/remote-workspace-protocol/session.js.map +1 -1
  170. package/dist/core/remote-workspace-protocol/shared-transport.d.ts.map +1 -1
  171. package/dist/core/remote-workspace-protocol/shared-transport.js.map +1 -1
  172. package/dist/core/resolve-config-value.d.ts.map +1 -1
  173. package/dist/core/resolve-config-value.js.map +1 -1
  174. package/dist/core/resource-loader.d.ts.map +1 -1
  175. package/dist/core/resource-loader.js +0 -48
  176. package/dist/core/resource-loader.js.map +1 -1
  177. package/dist/core/rules.d.ts.map +1 -1
  178. package/dist/core/rules.js.map +1 -1
  179. package/dist/core/sandbox/command.d.ts.map +1 -1
  180. package/dist/core/sandbox/command.js.map +1 -1
  181. package/dist/core/sandbox/config.d.ts.map +1 -1
  182. package/dist/core/sandbox/config.js.map +1 -1
  183. package/dist/core/sandbox/lima-guest-binary.d.ts.map +1 -1
  184. package/dist/core/sandbox/lima-guest-binary.js.map +1 -1
  185. package/dist/core/sandbox/lima.d.ts +2 -0
  186. package/dist/core/sandbox/lima.d.ts.map +1 -1
  187. package/dist/core/sandbox/lima.js +9 -15
  188. package/dist/core/sandbox/lima.js.map +1 -1
  189. package/dist/core/sandbox/shared-lima-roots.d.ts.map +1 -1
  190. package/dist/core/sandbox/shared-lima-roots.js.map +1 -1
  191. package/dist/core/sandbox/update-shared-guest-binary.d.ts.map +1 -1
  192. package/dist/core/sandbox/update-shared-guest-binary.js.map +1 -1
  193. package/dist/core/session/constants.d.ts.map +1 -1
  194. package/dist/core/session/context-metadata.d.ts.map +1 -1
  195. package/dist/core/session/context-metadata.js.map +1 -1
  196. package/dist/core/session/context.d.ts.map +1 -1
  197. package/dist/core/session/context.js.map +1 -1
  198. package/dist/core/session/ids.d.ts.map +1 -1
  199. package/dist/core/session/ids.js.map +1 -1
  200. package/dist/core/session/in-memory-session-manager.d.ts.map +1 -1
  201. package/dist/core/session/in-memory-session-manager.js +0 -1
  202. package/dist/core/session/in-memory-session-manager.js.map +1 -1
  203. package/dist/core/session/in-memory-session.d.ts.map +1 -1
  204. package/dist/core/session/in-memory-session.js.map +1 -1
  205. package/dist/core/session/jsonl-errors.d.ts.map +1 -1
  206. package/dist/core/session/jsonl-errors.js +0 -11
  207. package/dist/core/session/jsonl-errors.js.map +1 -1
  208. package/dist/core/session/jsonl-helpers.d.ts.map +1 -1
  209. package/dist/core/session/jsonl-helpers.js.map +1 -1
  210. package/dist/core/session/local-session-manager.d.ts.map +1 -1
  211. package/dist/core/session/local-session-manager.js +4 -6
  212. package/dist/core/session/local-session-manager.js.map +1 -1
  213. package/dist/core/session/local-session.d.ts.map +1 -1
  214. package/dist/core/session/local-session.js.map +1 -1
  215. package/dist/core/session/migrations.d.ts.map +1 -1
  216. package/dist/core/session/migrations.js.map +1 -1
  217. package/dist/core/session/remote-session-client.d.ts.map +1 -1
  218. package/dist/core/session/remote-session-client.js +0 -6
  219. package/dist/core/session/remote-session-client.js.map +1 -1
  220. package/dist/core/session/remote-session-manager.d.ts.map +1 -1
  221. package/dist/core/session/remote-session-manager.js +0 -3
  222. package/dist/core/session/remote-session-manager.js.map +1 -1
  223. package/dist/core/session/remote-session.d.ts.map +1 -1
  224. package/dist/core/session/remote-session.js +0 -1
  225. package/dist/core/session/remote-session.js.map +1 -1
  226. package/dist/core/session/session-manager.d.ts.map +1 -1
  227. package/dist/core/session/session.d.ts.map +1 -1
  228. package/dist/core/session/session.js +1 -5
  229. package/dist/core/session/session.js.map +1 -1
  230. package/dist/core/session/stores/in-memory-session-store.d.ts.map +1 -1
  231. package/dist/core/session/stores/in-memory-session-store.js +7 -6
  232. package/dist/core/session/stores/in-memory-session-store.js.map +1 -1
  233. package/dist/core/session/stores/jsonl-session-store.d.ts.map +1 -1
  234. package/dist/core/session/stores/jsonl-session-store.js +6 -14
  235. package/dist/core/session/stores/jsonl-session-store.js.map +1 -1
  236. package/dist/core/session/stores/remote-session-store.d.ts.map +1 -1
  237. package/dist/core/session/stores/remote-session-store.js +3 -8
  238. package/dist/core/session/stores/remote-session-store.js.map +1 -1
  239. package/dist/core/session/stores/session-store.d.ts.map +1 -1
  240. package/dist/core/session/types.d.ts.map +1 -1
  241. package/dist/core/session/usage-ledger.d.ts.map +1 -1
  242. package/dist/core/session/usage-ledger.js.map +1 -1
  243. package/dist/core/session-cwd.d.ts.map +1 -1
  244. package/dist/core/session-cwd.js +0 -1
  245. package/dist/core/session-cwd.js.map +1 -1
  246. package/dist/core/settings-manager.d.ts.map +1 -1
  247. package/dist/core/settings-manager.js +9 -17
  248. package/dist/core/settings-manager.js.map +1 -1
  249. package/dist/core/skills.d.ts.map +1 -1
  250. package/dist/core/skills.js.map +1 -1
  251. package/dist/core/slash-commands.d.ts.map +1 -1
  252. package/dist/core/source-info.d.ts.map +1 -1
  253. package/dist/core/source-info.js.map +1 -1
  254. package/dist/core/system-prompt.d.ts.map +1 -1
  255. package/dist/core/system-prompt.js.map +1 -1
  256. package/dist/core/telemetry.d.ts.map +1 -1
  257. package/dist/core/telemetry.js.map +1 -1
  258. package/dist/core/timings.d.ts.map +1 -1
  259. package/dist/core/timings.js.map +1 -1
  260. package/dist/core/tools/bash.d.ts.map +1 -1
  261. package/dist/core/tools/bash.js +8 -5
  262. package/dist/core/tools/bash.js.map +1 -1
  263. package/dist/core/tools/compress-context.d.ts.map +1 -1
  264. package/dist/core/tools/compress-context.js.map +1 -1
  265. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  266. package/dist/core/tools/edit-diff.js.map +1 -1
  267. package/dist/core/tools/edit.d.ts.map +1 -1
  268. package/dist/core/tools/edit.js.map +1 -1
  269. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
  270. package/dist/core/tools/file-mutation-queue.js.map +1 -1
  271. package/dist/core/tools/find.d.ts.map +1 -1
  272. package/dist/core/tools/find.js.map +1 -1
  273. package/dist/core/tools/grep.d.ts.map +1 -1
  274. package/dist/core/tools/grep.js.map +1 -1
  275. package/dist/core/tools/hash-store.d.ts.map +1 -1
  276. package/dist/core/tools/hash-store.js.map +1 -1
  277. package/dist/core/tools/hashline/apply.d.ts.map +1 -1
  278. package/dist/core/tools/hashline/apply.js.map +1 -1
  279. package/dist/core/tools/hashline/hash.d.ts.map +1 -1
  280. package/dist/core/tools/hashline/hash.js.map +1 -1
  281. package/dist/core/tools/hashline/parse.d.ts.map +1 -1
  282. package/dist/core/tools/hashline/parse.js.map +1 -1
  283. package/dist/core/tools/hashline/resolve.d.ts.map +1 -1
  284. package/dist/core/tools/hashline/resolve.js.map +1 -1
  285. package/dist/core/tools/hashline-utils.d.ts.map +1 -1
  286. package/dist/core/tools/hashline-utils.js.map +1 -1
  287. package/dist/core/tools/index.d.ts.map +1 -1
  288. package/dist/core/tools/index.js.map +1 -1
  289. package/dist/core/tools/ls.d.ts.map +1 -1
  290. package/dist/core/tools/ls.js.map +1 -1
  291. package/dist/core/tools/operations.d.ts +5 -0
  292. package/dist/core/tools/operations.d.ts.map +1 -1
  293. package/dist/core/tools/operations.js +26 -24
  294. package/dist/core/tools/operations.js.map +1 -1
  295. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  296. package/dist/core/tools/output-accumulator.js +12 -18
  297. package/dist/core/tools/output-accumulator.js.map +1 -1
  298. package/dist/core/tools/path-utils.d.ts.map +1 -1
  299. package/dist/core/tools/path-utils.js.map +1 -1
  300. package/dist/core/tools/read.d.ts.map +1 -1
  301. package/dist/core/tools/read.js.map +1 -1
  302. package/dist/core/tools/render-utils.d.ts.map +1 -1
  303. package/dist/core/tools/render-utils.js.map +1 -1
  304. package/dist/core/tools/replace-diff.d.ts.map +1 -1
  305. package/dist/core/tools/replace-diff.js.map +1 -1
  306. package/dist/core/tools/replace-normalize.d.ts.map +1 -1
  307. package/dist/core/tools/replace-normalize.js.map +1 -1
  308. package/dist/core/tools/replace-render.d.ts +1 -1
  309. package/dist/core/tools/replace-render.d.ts.map +1 -1
  310. package/dist/core/tools/replace-render.js.map +1 -1
  311. package/dist/core/tools/runtime.d.ts.map +1 -1
  312. package/dist/core/tools/runtime.js.map +1 -1
  313. package/dist/core/tools/session-history.d.ts.map +1 -1
  314. package/dist/core/tools/session-history.js.map +1 -1
  315. package/dist/core/tools/subagent-agents.d.ts.map +1 -1
  316. package/dist/core/tools/subagent-agents.js.map +1 -1
  317. package/dist/core/tools/subagent.d.ts.map +1 -1
  318. package/dist/core/tools/subagent.js.map +1 -1
  319. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  320. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  321. package/dist/core/tools/truncate.d.ts.map +1 -1
  322. package/dist/core/tools/truncate.js.map +1 -1
  323. package/dist/core/tools/websearch.d.ts.map +1 -1
  324. package/dist/core/tools/websearch.js.map +1 -1
  325. package/dist/core/tools/workspace-tool-host.d.ts +1 -0
  326. package/dist/core/tools/workspace-tool-host.d.ts.map +1 -1
  327. package/dist/core/tools/workspace-tool-host.js +36 -22
  328. package/dist/core/tools/workspace-tool-host.js.map +1 -1
  329. package/dist/core/tools/write.d.ts.map +1 -1
  330. package/dist/core/tools/write.js +0 -1
  331. package/dist/core/tools/write.js.map +1 -1
  332. package/dist/core/workspace-identity.d.ts.map +1 -1
  333. package/dist/daemon/activity-budget.d.ts.map +1 -1
  334. package/dist/daemon/activity-budget.js +2 -3
  335. package/dist/daemon/activity-budget.js.map +1 -1
  336. package/dist/daemon/command.d.ts.map +1 -1
  337. package/dist/daemon/command.js.map +1 -1
  338. package/dist/daemon/config.d.ts +2 -0
  339. package/dist/daemon/config.d.ts.map +1 -1
  340. package/dist/daemon/config.js +4 -0
  341. package/dist/daemon/config.js.map +1 -1
  342. package/dist/daemon/help.d.ts.map +1 -1
  343. package/dist/daemon/help.js +4 -3
  344. package/dist/daemon/help.js.map +1 -1
  345. package/dist/daemon/lsp-config.d.ts.map +1 -1
  346. package/dist/daemon/lsp-config.js.map +1 -1
  347. package/dist/daemon/outbound-budget.d.ts.map +1 -1
  348. package/dist/daemon/outbound-budget.js +2 -4
  349. package/dist/daemon/outbound-budget.js.map +1 -1
  350. package/dist/daemon/security.d.ts.map +1 -1
  351. package/dist/daemon/security.js.map +1 -1
  352. package/dist/daemon/server.d.ts.map +1 -1
  353. package/dist/daemon/server.js.map +1 -1
  354. package/dist/daemon/shared-connection.d.ts.map +1 -1
  355. package/dist/daemon/shared-connection.js +10 -15
  356. package/dist/daemon/shared-connection.js.map +1 -1
  357. package/dist/daemon/shared-revision.d.ts.map +1 -1
  358. package/dist/daemon/shared-revision.js +2 -1
  359. package/dist/daemon/shared-revision.js.map +1 -1
  360. package/dist/daemon/shared-roots.d.ts.map +1 -1
  361. package/dist/daemon/shared-roots.js +0 -1
  362. package/dist/daemon/shared-roots.js.map +1 -1
  363. package/dist/daemon/workspace-runtime.d.ts +2 -0
  364. package/dist/daemon/workspace-runtime.d.ts.map +1 -1
  365. package/dist/daemon/workspace-runtime.js +43 -15
  366. package/dist/daemon/workspace-runtime.js.map +1 -1
  367. package/dist/index.d.ts.map +1 -1
  368. package/dist/main.d.ts.map +1 -1
  369. package/dist/main.js.map +1 -1
  370. package/dist/migrations.d.ts.map +1 -1
  371. package/dist/migrations.js.map +1 -1
  372. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  373. package/dist/modes/interactive/components/assistant-message.js +21 -17
  374. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  375. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  376. package/dist/modes/interactive/components/bash-execution.js +4 -9
  377. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  378. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  379. package/dist/modes/interactive/components/bordered-loader.js +0 -3
  380. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  381. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  382. package/dist/modes/interactive/components/branch-summary-message.js +1 -3
  383. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  384. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  385. package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
  386. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  387. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  388. package/dist/modes/interactive/components/config-selector.js +6 -16
  389. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  390. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  391. package/dist/modes/interactive/components/countdown-timer.js +0 -5
  392. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  393. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  394. package/dist/modes/interactive/components/custom-editor.js +1 -8
  395. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  396. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  397. package/dist/modes/interactive/components/custom-message.js +1 -6
  398. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  399. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  400. package/dist/modes/interactive/components/diff.js.map +1 -1
  401. package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  402. package/dist/modes/interactive/components/dynamic-border.js +0 -1
  403. package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  404. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  405. package/dist/modes/interactive/components/extension-editor.js +1 -7
  406. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  407. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  408. package/dist/modes/interactive/components/extension-input.js +2 -8
  409. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  410. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  411. package/dist/modes/interactive/components/extension-selector.js +1 -9
  412. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  413. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  414. package/dist/modes/interactive/components/footer.js +1 -3
  415. package/dist/modes/interactive/components/footer.js.map +1 -1
  416. package/dist/modes/interactive/components/hook-execution.d.ts.map +1 -1
  417. package/dist/modes/interactive/components/hook-execution.js +2 -5
  418. package/dist/modes/interactive/components/hook-execution.js.map +1 -1
  419. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  420. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  421. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  422. package/dist/modes/interactive/components/login-dialog.js +3 -9
  423. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  424. package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
  425. package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
  426. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
  427. package/dist/modes/interactive/components/mermaid.js.map +1 -1
  428. package/dist/modes/interactive/components/message-card.d.ts.map +1 -1
  429. package/dist/modes/interactive/components/message-card.js +0 -1
  430. package/dist/modes/interactive/components/message-card.js.map +1 -1
  431. package/dist/modes/interactive/components/model-selector.d.ts +26 -18
  432. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  433. package/dist/modes/interactive/components/model-selector.js +223 -210
  434. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  435. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  436. package/dist/modes/interactive/components/oauth-selector.js +3 -12
  437. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  438. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  439. package/dist/modes/interactive/components/scoped-models-selector.js +9 -13
  440. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  441. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  442. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  443. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  444. package/dist/modes/interactive/components/session-selector.js +33 -58
  445. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  446. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  447. package/dist/modes/interactive/components/settings-selector.js +0 -4
  448. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  449. package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
  450. package/dist/modes/interactive/components/show-images-selector.js +0 -1
  451. package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
  452. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  453. package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
  454. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  455. package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
  456. package/dist/modes/interactive/components/theme-selector.js +0 -2
  457. package/dist/modes/interactive/components/theme-selector.js.map +1 -1
  458. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  459. package/dist/modes/interactive/components/thinking-selector.js +0 -1
  460. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  461. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  462. package/dist/modes/interactive/components/tool-execution.js +9 -24
  463. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  464. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  465. package/dist/modes/interactive/components/tree-selector.js +18 -34
  466. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  467. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  468. package/dist/modes/interactive/components/user-message-selector.js +3 -6
  469. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  470. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  471. package/dist/modes/interactive/components/user-message.js +0 -4
  472. package/dist/modes/interactive/components/user-message.js.map +1 -1
  473. package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
  474. package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
  475. package/dist/modes/interactive/interactive-mode.d.ts +14 -0
  476. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  477. package/dist/modes/interactive/interactive-mode.js +223 -137
  478. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  479. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  480. package/dist/modes/interactive/theme/theme.js +0 -7
  481. package/dist/modes/interactive/theme/theme.js.map +1 -1
  482. package/dist/modes/json-event.d.ts.map +1 -1
  483. package/dist/modes/json-event.js.map +1 -1
  484. package/dist/modes/print-mode.d.ts.map +1 -1
  485. package/dist/modes/print-mode.js.map +1 -1
  486. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  487. package/dist/modes/rpc/jsonl.js.map +1 -1
  488. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  489. package/dist/modes/rpc/rpc-client.js +10 -11
  490. package/dist/modes/rpc/rpc-client.js.map +1 -1
  491. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  492. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  493. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  494. package/dist/package-manager-cli.d.ts.map +1 -1
  495. package/dist/package-manager-cli.js.map +1 -1
  496. package/dist/utils/ansi.d.ts.map +1 -1
  497. package/dist/utils/ansi.js.map +1 -1
  498. package/dist/utils/changelog.d.ts.map +1 -1
  499. package/dist/utils/changelog.js.map +1 -1
  500. package/dist/utils/child-process.d.ts.map +1 -1
  501. package/dist/utils/child-process.js.map +1 -1
  502. package/dist/utils/clipboard-image.d.ts.map +1 -1
  503. package/dist/utils/clipboard-image.js.map +1 -1
  504. package/dist/utils/clipboard-native.d.ts.map +1 -1
  505. package/dist/utils/clipboard-native.js.map +1 -1
  506. package/dist/utils/clipboard.d.ts.map +1 -1
  507. package/dist/utils/clipboard.js.map +1 -1
  508. package/dist/utils/deprecation.d.ts.map +1 -1
  509. package/dist/utils/deprecation.js.map +1 -1
  510. package/dist/utils/directory-completions.d.ts.map +1 -1
  511. package/dist/utils/directory-completions.js.map +1 -1
  512. package/dist/utils/exif-orientation.d.ts.map +1 -1
  513. package/dist/utils/exif-orientation.js.map +1 -1
  514. package/dist/utils/frontmatter.d.ts.map +1 -1
  515. package/dist/utils/frontmatter.js.map +1 -1
  516. package/dist/utils/fs-watch.d.ts.map +1 -1
  517. package/dist/utils/fs-watch.js.map +1 -1
  518. package/dist/utils/git.d.ts.map +1 -1
  519. package/dist/utils/git.js.map +1 -1
  520. package/dist/utils/grip-user-agent.d.ts.map +1 -1
  521. package/dist/utils/grip-user-agent.js +1 -1
  522. package/dist/utils/grip-user-agent.js.map +1 -1
  523. package/dist/utils/html.d.ts.map +1 -1
  524. package/dist/utils/html.js.map +1 -1
  525. package/dist/utils/image-convert.d.ts.map +1 -1
  526. package/dist/utils/image-convert.js.map +1 -1
  527. package/dist/utils/image-process.d.ts.map +1 -1
  528. package/dist/utils/image-process.js.map +1 -1
  529. package/dist/utils/image-resize-core.d.ts.map +1 -1
  530. package/dist/utils/image-resize-core.js.map +1 -1
  531. package/dist/utils/image-resize-worker.d.ts.map +1 -1
  532. package/dist/utils/image-resize-worker.js.map +1 -1
  533. package/dist/utils/image-resize.d.ts.map +1 -1
  534. package/dist/utils/image-resize.js.map +1 -1
  535. package/dist/utils/json.d.ts.map +1 -1
  536. package/dist/utils/json.js.map +1 -1
  537. package/dist/utils/mime.d.ts.map +1 -1
  538. package/dist/utils/mime.js.map +1 -1
  539. package/dist/utils/open-browser.d.ts.map +1 -1
  540. package/dist/utils/open-browser.js.map +1 -1
  541. package/dist/utils/paths.d.ts.map +1 -1
  542. package/dist/utils/paths.js.map +1 -1
  543. package/dist/utils/photon.d.ts.map +1 -1
  544. package/dist/utils/photon.js +10 -5
  545. package/dist/utils/photon.js.map +1 -1
  546. package/dist/utils/shell.d.ts.map +1 -1
  547. package/dist/utils/shell.js.map +1 -1
  548. package/dist/utils/sleep.d.ts.map +1 -1
  549. package/dist/utils/sleep.js.map +1 -1
  550. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  551. package/dist/utils/syntax-highlight.js +1 -1
  552. package/dist/utils/syntax-highlight.js.map +1 -1
  553. package/dist/utils/tools-manager.d.ts.map +1 -1
  554. package/dist/utils/tools-manager.js.map +1 -1
  555. package/dist/utils/version-check.d.ts.map +1 -1
  556. package/dist/utils/version-check.js.map +1 -1
  557. package/dist/utils/windows-self-update.d.ts.map +1 -1
  558. package/dist/utils/windows-self-update.js.map +1 -1
  559. package/docs/keybindings.md +3 -1
  560. package/docs/providers.md +3 -1
  561. package/docs/sandbox.md +7 -1
  562. package/docs/sessions.md +1 -1
  563. package/docs/usage.md +39 -2
  564. package/examples/extensions/custom-provider-anthropic/package.json +2 -2
  565. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  566. package/examples/extensions/sandbox/package.json +2 -2
  567. package/examples/extensions/with-deps/package.json +1 -1
  568. package/npm-shrinkwrap.json +601 -833
  569. package/package.json +20 -21
@@ -72,8 +72,6 @@ function isExpandable(obj) {
72
72
  return typeof obj === "object" && obj !== null && "setExpanded" in obj && typeof obj.setExpanded === "function";
73
73
  }
74
74
  class ExpandableText extends Text {
75
- getCollapsedText;
76
- getExpandedText;
77
75
  constructor(getCollapsedText, getExpandedText, expanded = false, paddingX = 0, paddingY = 0) {
78
76
  super(expanded ? getExpandedText() : getCollapsedText(), paddingX, paddingY);
79
77
  this.getCollapsedText = getCollapsedText;
@@ -196,123 +194,6 @@ export function createInteractiveTuiReference(getTui) {
196
194
  });
197
195
  }
198
196
  export class InteractiveMode {
199
- runtimeHost;
200
- options;
201
- onRightClickPaste = () => {
202
- void this.handleRightClickPaste();
203
- };
204
- renderer;
205
- ui;
206
- mainScreenRenderState;
207
- loadedResourcesContainer;
208
- chatContainer;
209
- documentContainer;
210
- transcriptScrollView;
211
- fullscreenLayoutRoot;
212
- pendingMessagesContainer;
213
- statusContainer;
214
- defaultEditor;
215
- editor;
216
- editorComponentFactory;
217
- autocompleteProvider;
218
- autocompleteProviderWrappers = [];
219
- fdPath;
220
- editorContainer;
221
- footer;
222
- footerContainer;
223
- footerDataProvider;
224
- // Stored so the same manager can be injected into custom editors, selectors, and extension UI.
225
- keybindings;
226
- version;
227
- isInitialized = false;
228
- transcriptRendered = false;
229
- onInputCallback;
230
- pendingUserInputs = [];
231
- loadingAnimation = undefined;
232
- workingMessage = undefined;
233
- compressionDetectionActive = false;
234
- compressionDetectionOwnsLoader = false;
235
- workingVisible = true;
236
- workingIndicatorOptions = undefined;
237
- defaultWorkingMessage = "Working...";
238
- defaultHiddenThinkingLabel = "Thinking...";
239
- hiddenThinkingLabel = this.defaultHiddenThinkingLabel;
240
- lastSigintTime = 0;
241
- lastEscapeTime = 0;
242
- changelogMarkdown = undefined;
243
- startupNoticesShown = false;
244
- anthropicSubscriptionWarningShown = false;
245
- // Status line tracking (for mutating immediately-sequential status updates)
246
- lastStatusSpacer = undefined;
247
- lastStatusText = undefined;
248
- // Streaming message tracking
249
- streamingComponent = undefined;
250
- streamingMessage = undefined;
251
- // Tool execution tracking: toolCallId -> component
252
- pendingTools = new Map();
253
- // Tool output expansion state
254
- toolOutputExpanded = false;
255
- activeSandboxContainerId;
256
- activeSandboxBackendConnected = false;
257
- sessionSandboxStates = new Map();
258
- managedLimaInstances = new Map();
259
- // Thinking block visibility state
260
- hideThinkingBlock = false;
261
- outputPad = 1;
262
- mermaidMarkdownTransformer;
263
- // Skill commands: command name -> skill file path
264
- skillCommands = new Map();
265
- // Agent subscription unsubscribe function
266
- unsubscribe;
267
- hookExecutionUnsubscribe;
268
- hookExecutionActivityUnsubscribe;
269
- hookExecutionActivityDepth = 0;
270
- hookExecutionActivityOwnsLoader = false;
271
- hookExecutionSession;
272
- hookExecutionNotices = [];
273
- hookExecutionComponents = [];
274
- pendingStopHookNotifications = [];
275
- activeToolHookExecutionGroups = new Map();
276
- hookExecutionTurnActive = false;
277
- signalCleanupHandlers = [];
278
- // Track if editor is in bash mode (text starts with !)
279
- isBashMode = false;
280
- // Track current bash execution component
281
- bashComponent = undefined;
282
- // Track pending bash components (shown in pending area, moved to chat on submit)
283
- pendingBashComponents = [];
284
- // Auto-compaction state
285
- autoCompactionLoader = undefined;
286
- autoCompactionEscapeHandler;
287
- branchSummaryLoader;
288
- summarizationRetryLoader;
289
- summarizationRetryCountdown;
290
- // Auto-retry state
291
- retryLoader = undefined;
292
- retryCountdown = undefined;
293
- retryEscapeHandler;
294
- // Messages queued while compaction is running
295
- compactionQueuedMessages = [];
296
- // Shutdown state
297
- shutdownRequested = false;
298
- // Extension UI state
299
- extensionSelector = undefined;
300
- extensionInput = undefined;
301
- extensionEditor = undefined;
302
- extensionTerminalInputSubscriptions = new Set();
303
- // Extension widgets (components rendered above/below the editor)
304
- extensionWidgetsAbove = new Map();
305
- extensionWidgetsBelow = new Map();
306
- widgetContainerAbove;
307
- widgetContainerBelow;
308
- // Custom footer from extension (undefined = use built-in footer)
309
- customFooter = undefined;
310
- // Header container that holds the built-in or custom header
311
- headerContainer;
312
- // Built-in header (logo + keybinding hints + changelog)
313
- builtInHeader = undefined;
314
- // Custom header from extension (undefined = use built-in header)
315
- customHeader = undefined;
316
197
  // Convenience accessors
317
198
  get session() {
318
199
  return this.runtimeHost.session;
@@ -327,6 +208,88 @@ export class InteractiveMode {
327
208
  return this.session.settingsManager;
328
209
  }
329
210
  constructor(runtimeHost, options = {}) {
211
+ this.onRightClickPaste = () => {
212
+ void this.handleRightClickPaste();
213
+ };
214
+ this.autocompleteProviderWrappers = [];
215
+ this.isInitialized = false;
216
+ this.transcriptRendered = false;
217
+ this.pendingUserInputs = [];
218
+ this.loadingAnimation = undefined;
219
+ this.workingMessage = undefined;
220
+ this.compressionDetectionActive = false;
221
+ this.compressionDetectionOwnsLoader = false;
222
+ this.workingVisible = true;
223
+ this.workingIndicatorOptions = undefined;
224
+ this.defaultWorkingMessage = "Working...";
225
+ this.defaultHiddenThinkingLabel = "Thinking...";
226
+ this.hiddenThinkingLabel = this.defaultHiddenThinkingLabel;
227
+ this.lastSigintTime = 0;
228
+ this.lastEscapeTime = 0;
229
+ this.changelogMarkdown = undefined;
230
+ this.startupNoticesShown = false;
231
+ this.anthropicSubscriptionWarningShown = false;
232
+ // Status line tracking (for mutating immediately-sequential status updates)
233
+ this.lastStatusSpacer = undefined;
234
+ this.lastStatusText = undefined;
235
+ // Streaming message tracking
236
+ this.streamingComponent = undefined;
237
+ this.streamingMessage = undefined;
238
+ // Tool execution tracking: toolCallId -> component
239
+ this.pendingTools = new Map();
240
+ // Tool output expansion state
241
+ this.toolOutputExpanded = false;
242
+ this.activeSandboxBackendConnected = false;
243
+ this.sessionSandboxStates = new Map();
244
+ this.managedLimaInstances = new Map();
245
+ // Thinking block visibility state
246
+ this.hideThinkingBlock = false;
247
+ this.outputPad = 1;
248
+ // Skill commands: command name -> skill file path
249
+ this.skillCommands = new Map();
250
+ this.hookExecutionActivityDepth = 0;
251
+ this.hookExecutionActivityOwnsLoader = false;
252
+ this.hookExecutionNotices = [];
253
+ this.hookExecutionComponents = [];
254
+ this.pendingStopHookNotifications = [];
255
+ this.activeToolHookExecutionGroups = new Map();
256
+ this.hookExecutionTurnActive = false;
257
+ this.signalCleanupHandlers = [];
258
+ // Track if editor is in bash mode (text starts with !)
259
+ this.isBashMode = false;
260
+ // Track current bash execution component
261
+ this.bashComponent = undefined;
262
+ // Track pending bash components (shown in pending area, moved to chat on submit)
263
+ this.pendingBashComponents = [];
264
+ // Auto-compaction state
265
+ this.autoCompactionLoader = undefined;
266
+ // Auto-retry state
267
+ this.retryLoader = undefined;
268
+ this.retryCountdown = undefined;
269
+ // Messages queued while compaction is running
270
+ this.compactionQueuedMessages = [];
271
+ // Shutdown state
272
+ this.shutdownRequested = false;
273
+ // Extension UI state
274
+ this.extensionSelector = undefined;
275
+ this.extensionInput = undefined;
276
+ this.extensionEditor = undefined;
277
+ this.extensionTerminalInputSubscriptions = new Set();
278
+ // Extension widgets (components rendered above/below the editor)
279
+ this.extensionWidgetsAbove = new Map();
280
+ this.extensionWidgetsBelow = new Map();
281
+ // Custom footer from extension (undefined = use built-in footer)
282
+ this.customFooter = undefined;
283
+ // Built-in header (logo + keybinding hints + changelog)
284
+ this.builtInHeader = undefined;
285
+ // Custom header from extension (undefined = use built-in header)
286
+ this.customHeader = undefined;
287
+ /**
288
+ * Gracefully shutdown the agent.
289
+ * Stops the TUI before emitting shutdown events so extension UI cleanup cannot
290
+ * repaint the final frame while the process is exiting.
291
+ */
292
+ this.isShuttingDown = false;
330
293
  this.runtimeHost = runtimeHost;
331
294
  const tuiMode = options.tuiMode ?? this.settingsManager.getTuiMode();
332
295
  this.options = { ...options, tuiMode };
@@ -427,17 +390,93 @@ export class InteractiveMode {
427
390
  path: command.sourceInfo.path,
428
391
  }));
429
392
  }
393
+ configureNewCommandAutocomplete(commandsByName) {
394
+ const command = commandsByName.get("new");
395
+ if (!command)
396
+ return;
397
+ command.argumentHint = "[--sandbox]";
398
+ command.getArgumentCompletions = (prefix) => {
399
+ if (prefix.includes(" "))
400
+ return null;
401
+ return fuzzyFilter(["--sandbox"], prefix, (option) => option).map((option) => ({
402
+ value: option,
403
+ label: option,
404
+ }));
405
+ };
406
+ }
430
407
  createBaseAutocompleteProvider() {
431
- // Define commands for autocomplete
408
+ // Commands without arguments remain selectable after a trailing space (e.g. /quit ).
409
+ const noArgumentCommands = new Set([
410
+ "settings",
411
+ "scoped-models",
412
+ "share",
413
+ "copy",
414
+ "session",
415
+ "changelog",
416
+ "hotkeys",
417
+ "fork",
418
+ "clone",
419
+ "tree",
420
+ "login",
421
+ "logout",
422
+ "reload",
423
+ "resume",
424
+ "quit",
425
+ ]);
432
426
  const slashCommands = BUILTIN_SLASH_COMMANDS.map((command) => ({
433
427
  name: command.name,
434
428
  description: command.description,
429
+ showWithoutArguments: noArgumentCommands.has(command.name),
435
430
  }));
436
431
  const cdCommand = slashCommands.find((command) => command.name === "cd");
437
432
  if (cdCommand) {
438
433
  cdCommand.argumentHint = "<directory>";
439
434
  cdCommand.getArgumentCompletions = (prefix) => this.session.supportsDirectoryChange() ? getDirectoryCompletions(prefix, this.activeSession.getCwd()) : [];
440
435
  }
436
+ const choiceCompletions = (choices) => (prefix) => {
437
+ if (prefix.includes(" "))
438
+ return null;
439
+ return fuzzyFilter([...choices], prefix, (choice) => choice).map((choice) => ({
440
+ value: choice,
441
+ label: choice,
442
+ }));
443
+ };
444
+ const commandsByName = new Map();
445
+ for (const command of slashCommands) {
446
+ if (!commandsByName.has(command.name))
447
+ commandsByName.set(command.name, command);
448
+ }
449
+ for (const [name, hint, choices] of [
450
+ ["hooks", "<enable|disable>", ["enable", "disable"]],
451
+ ["context-compression", "[on|off]", ["on", "off"]],
452
+ ["compress-detection", "[on|off]", ["on", "off"]],
453
+ ]) {
454
+ const command = commandsByName.get(name);
455
+ if (command) {
456
+ command.argumentHint = hint;
457
+ command.getArgumentCompletions = choiceCompletions(choices);
458
+ }
459
+ }
460
+ this.configureNewCommandAutocomplete(commandsByName);
461
+ const sandboxCommand = slashCommands.find((command) => command.name === "sandbox");
462
+ if (sandboxCommand) {
463
+ sandboxCommand.argumentHint = "<status|clear|--attach|start|list|stop>";
464
+ sandboxCommand.getArgumentCompletions = (prefix) => {
465
+ if (!prefix.includes(" ")) {
466
+ return fuzzyFilter(["status", "clear", "--attach", "start", "list", "stop"], prefix, (item) => item).map((item) => ({
467
+ value: item === "start" || item === "stop" || item === "--attach" ? `${item} ` : item,
468
+ label: item,
469
+ }));
470
+ }
471
+ const startMatch = prefix.match(/^start\s+(--[^\s]*)?$/);
472
+ if (!startMatch)
473
+ return null;
474
+ return fuzzyFilter(["--name", "--template", "--update"], startMatch[1] ?? "", (item) => item).map((item) => ({
475
+ value: `start ${item}${item === "--update" ? "" : " "}`,
476
+ label: item,
477
+ }));
478
+ };
479
+ }
441
480
  const modelCommand = slashCommands.find((command) => command.name === "model");
442
481
  if (modelCommand) {
443
482
  modelCommand.getArgumentCompletions = (prefix) => {
@@ -526,7 +565,7 @@ export class InteractiveMode {
526
565
  getSuggestions: async (lines, cursorLine, cursorCol, options) => {
527
566
  const beforeCursor = (lines[cursorLine] ?? "").slice(0, cursorCol);
528
567
  const nameMatch = beforeCursor.match(/^\/sandbox[ \t]+(start[ \t]+--name(?:[ \t]+([^\s]*))?)$/);
529
- if (!options.force || !nameMatch)
568
+ if (!nameMatch)
530
569
  return base.getSuggestions(lines, cursorLine, cursorCol, options);
531
570
  if (options.signal.aborted)
532
571
  return null;
@@ -1839,7 +1878,7 @@ export class InteractiveMode {
1839
1878
  this.setHiddenThinkingLabel();
1840
1879
  }
1841
1880
  // Maximum total widget lines to prevent viewport overflow
1842
- static MAX_WIDGET_LINES = 10;
1881
+ static { this.MAX_WIDGET_LINES = 10; }
1843
1882
  /**
1844
1883
  * Render all extension widgets to the widget container.
1845
1884
  */
@@ -2499,6 +2538,19 @@ export class InteractiveMode {
2499
2538
  },
2500
2539
  };
2501
2540
  }
2541
+ if (this.matchesEditorCommand(text, "/new")) {
2542
+ return {
2543
+ run: async () => {
2544
+ this.editor.setText("");
2545
+ const option = text.slice("/new".length).trim();
2546
+ if (option && option !== "--sandbox") {
2547
+ this.showWarning("Usage: /new [--sandbox]");
2548
+ return;
2549
+ }
2550
+ await this.handleClearCommand(option === "--sandbox");
2551
+ },
2552
+ };
2553
+ }
2502
2554
  if (this.matchesEditorCommand(text, "/compact")) {
2503
2555
  const customInstructions = text.slice("/compact".length).trim() || undefined;
2504
2556
  return {
@@ -3403,12 +3455,6 @@ export class InteractiveMode {
3403
3455
  // Only called when editor is empty (enforced by CustomEditor)
3404
3456
  void this.shutdown();
3405
3457
  }
3406
- /**
3407
- * Gracefully shutdown the agent.
3408
- * Stops the TUI before emitting shutdown events so extension UI cleanup cannot
3409
- * repaint the final frame while the process is exiting.
3410
- */
3411
- isShuttingDown = false;
3412
3458
  async shutdown(options) {
3413
3459
  if (this.isShuttingDown)
3414
3460
  return;
@@ -4599,12 +4645,12 @@ export class InteractiveMode {
4599
4645
  return options.sort((a, b) => a.name.localeCompare(b.name));
4600
4646
  }
4601
4647
  showLoginAuthTypeSelector() {
4602
- const subscriptionLabel = "Use a subscription";
4648
+ const browserLabel = "Sign in (subscriptions or OpenRouter credits)";
4603
4649
  const apiKeyLabel = "Use an API key";
4604
4650
  this.showSelector((done) => {
4605
- const selector = new ExtensionSelectorComponent("Select authentication method:", [subscriptionLabel, apiKeyLabel], (option) => {
4651
+ const selector = new ExtensionSelectorComponent("Select authentication method:", [browserLabel, apiKeyLabel], (option) => {
4606
4652
  done();
4607
- const authType = option === subscriptionLabel ? "oauth" : "api_key";
4653
+ const authType = option === browserLabel ? "oauth" : "api_key";
4608
4654
  this.showLoginProviderSelector(authType);
4609
4655
  }, () => {
4610
4656
  done();
@@ -4616,7 +4662,7 @@ export class InteractiveMode {
4616
4662
  showLoginProviderSelector(authType) {
4617
4663
  const providerOptions = this.getLoginProviderOptions(authType);
4618
4664
  if (providerOptions.length === 0) {
4619
- this.showStatus(authType === "oauth" ? "No subscription providers available." : "No API key providers available.");
4665
+ this.showStatus(authType === "oauth" ? "No browser sign-in providers available." : "No API key providers available.");
4620
4666
  return;
4621
4667
  }
4622
4668
  this.showSelector((done) => {
@@ -4889,13 +4935,40 @@ export class InteractiveMode {
4889
4935
  }
4890
4936
  // =========================================================================
4891
4937
  // Command handlers
4938
+ async handleSandboxCdCommand(text) {
4939
+ const backend = this.session.getToolBackendInfo();
4940
+ if (backend.type !== "remote" || !backend.configured) {
4941
+ this.showWarning("Changing directories is not supported with the active workspace backend.");
4942
+ return;
4943
+ }
4944
+ const argument = this.getPathCommandArgument(text, "/cd");
4945
+ if (text !== "/cd" && !argument) {
4946
+ this.showError("Usage: /cd [directory]");
4947
+ return;
4948
+ }
4949
+ try {
4950
+ const directory = await this.session.changeSandboxWorkingDirectory(argument ?? backend.workspace.root);
4951
+ this.showStatus(`Working directory: ${directory}`);
4952
+ }
4953
+ catch (error) {
4954
+ this.showError(`Failed to change sandbox directory: ${error instanceof Error ? error.message : String(error)}`);
4955
+ }
4956
+ }
4957
+ async handleUnavailableCdCommand(text) {
4958
+ if (this.activeSandboxBackendConnected) {
4959
+ await this.handleSandboxCdCommand(text);
4960
+ }
4961
+ else {
4962
+ this.showWarning("Changing directories is not supported with the active workspace backend.");
4963
+ }
4964
+ }
4892
4965
  async handleCdCommand(text) {
4893
4966
  if (!this.session.isIdle || this.session.isBashRunning) {
4894
4967
  this.showWarning("Wait for the current operation to finish before changing directories.");
4895
4968
  return;
4896
4969
  }
4897
4970
  if (!this.session.supportsDirectoryChange()) {
4898
- this.showWarning("Changing directories is not supported with the active workspace backend.");
4971
+ await this.handleUnavailableCdCommand(text);
4899
4972
  return;
4900
4973
  }
4901
4974
  const argument = this.getPathCommandArgument(text, "/cd");
@@ -5758,23 +5831,36 @@ export class InteractiveMode {
5758
5831
  this.chatContainer.addChild(new DynamicBorder());
5759
5832
  this.ui.requestRender();
5760
5833
  }
5761
- async handleClearCommand() {
5834
+ async handleClearCommand(reuseSandbox = false) {
5762
5835
  if (this.loadingAnimation) {
5763
5836
  this.loadingAnimation.stop();
5764
5837
  this.loadingAnimation = undefined;
5765
5838
  }
5766
5839
  this.statusContainer.clear();
5840
+ const sandboxState = reuseSandbox && this.activeSandboxBackendConnected
5841
+ ? this.sessionSandboxStates.get(getSessionSandboxKey(this.activeSession))
5842
+ : undefined;
5843
+ let newSessionKey;
5767
5844
  try {
5768
- const result = await this.runtimeHost.newSession();
5769
- if (result.cancelled) {
5845
+ const result = await this.runtimeHost.newSession(sandboxState
5846
+ ? {
5847
+ setup: async (nextSession) => {
5848
+ newSessionKey = getSessionSandboxKey(nextSession);
5849
+ this.sessionSandboxStates.set(newSessionKey, sandboxState);
5850
+ },
5851
+ }
5852
+ : undefined);
5853
+ if (result.cancelled)
5770
5854
  return;
5771
- }
5772
5855
  this.renderCurrentSessionState();
5773
5856
  this.chatContainer.addChild(new Spacer(1));
5774
5857
  this.chatContainer.addChild(new Text(`${theme.fg("accent", "✓ New session started")}`, 1, 1));
5775
5858
  this.ui.requestRender();
5776
5859
  }
5777
5860
  catch (error) {
5861
+ if (newSessionKey && newSessionKey !== getSessionSandboxKey(this.activeSession)) {
5862
+ this.sessionSandboxStates.delete(newSessionKey);
5863
+ }
5778
5864
  await this.handleFatalRuntimeError("Failed to create session", error);
5779
5865
  }
5780
5866
  }