@bastani/atomic 0.9.11-alpha.1 → 0.9.11-alpha.3

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 (507) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/builtin/cursor/package.json +3 -3
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/package.json +3 -3
  5. package/dist/builtin/subagents/CHANGELOG.md +6 -0
  6. package/dist/builtin/subagents/package.json +4 -4
  7. package/dist/builtin/subagents/src/runs/background/notify.ts +3 -1
  8. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +5 -2
  9. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -1
  10. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +5 -2
  11. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +34 -0
  12. package/dist/builtin/web-access/package.json +2 -2
  13. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  14. package/dist/builtin/workflows/package.json +2 -2
  15. package/dist/builtin/workflows/src/durable/child-primitive.ts +3 -0
  16. package/dist/builtin/workflows/src/durable/completed-catalog.ts +182 -33
  17. package/dist/builtin/workflows/src/durable/completed-inspection.ts +9 -4
  18. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +31 -8
  19. package/dist/builtin/workflows/src/durable/resume-runtime.ts +6 -2
  20. package/dist/builtin/workflows/src/durable/stage-primitive.ts +48 -10
  21. package/dist/builtin/workflows/src/durable/types.ts +11 -0
  22. package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +9 -9
  23. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +89 -0
  24. package/dist/builtin/workflows/src/engine/run.ts +18 -16
  25. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +3 -0
  26. package/dist/builtin/workflows/src/extension/ui-surface.ts +4 -0
  27. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +3 -0
  28. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +6 -3
  29. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +2 -2
  30. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +4 -1
  31. package/dist/builtin/workflows/src/tui/host-input-form.ts +1 -1
  32. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +2 -3
  33. package/dist/cli/args.d.ts.map +1 -1
  34. package/dist/cli/args.js +4 -2
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/config-selector.d.ts +4 -2
  37. package/dist/cli/config-selector.d.ts.map +1 -1
  38. package/dist/cli/config-selector.js +1 -1
  39. package/dist/cli/config-selector.js.map +1 -1
  40. package/dist/cli/startup-ui.d.ts +3 -0
  41. package/dist/cli/startup-ui.d.ts.map +1 -1
  42. package/dist/cli/startup-ui.js +50 -1
  43. package/dist/cli/startup-ui.js.map +1 -1
  44. package/dist/config-command-parser.d.ts +9 -0
  45. package/dist/config-command-parser.d.ts.map +1 -0
  46. package/dist/config-command-parser.js +22 -0
  47. package/dist/config-command-parser.js.map +1 -0
  48. package/dist/config-self-update.d.ts +6 -2
  49. package/dist/config-self-update.d.ts.map +1 -1
  50. package/dist/config-self-update.js +17 -10
  51. package/dist/config-self-update.js.map +1 -1
  52. package/dist/config.d.ts +3 -3
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +4 -4
  55. package/dist/config.js.map +1 -1
  56. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  57. package/dist/core/agent-session-compaction.js +7 -1
  58. package/dist/core/agent-session-compaction.js.map +1 -1
  59. package/dist/core/agent-session-export.d.ts.map +1 -1
  60. package/dist/core/agent-session-export.js +32 -25
  61. package/dist/core/agent-session-export.js.map +1 -1
  62. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  63. package/dist/core/agent-session-extension-bindings.js +9 -3
  64. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  65. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  66. package/dist/core/agent-session-prompt.js +5 -0
  67. package/dist/core/agent-session-prompt.js.map +1 -1
  68. package/dist/core/agent-session-services.d.ts +2 -0
  69. package/dist/core/agent-session-services.d.ts.map +1 -1
  70. package/dist/core/agent-session-services.js +11 -5
  71. package/dist/core/agent-session-services.js.map +1 -1
  72. package/dist/core/agent-session-tree.d.ts.map +1 -1
  73. package/dist/core/agent-session-tree.js +7 -2
  74. package/dist/core/agent-session-tree.js.map +1 -1
  75. package/dist/core/agent-session-types.d.ts +20 -0
  76. package/dist/core/agent-session-types.d.ts.map +1 -1
  77. package/dist/core/agent-session-types.js.map +1 -1
  78. package/dist/core/auth-storage.d.ts +6 -2
  79. package/dist/core/auth-storage.d.ts.map +1 -1
  80. package/dist/core/auth-storage.js +5 -1
  81. package/dist/core/auth-storage.js.map +1 -1
  82. package/dist/core/cache-stats.d.ts +25 -0
  83. package/dist/core/cache-stats.d.ts.map +1 -0
  84. package/dist/core/cache-stats.js +68 -0
  85. package/dist/core/cache-stats.js.map +1 -0
  86. package/dist/core/compaction/branch-summarization.d.ts +7 -2
  87. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  88. package/dist/core/compaction/branch-summarization.js +8 -8
  89. package/dist/core/compaction/branch-summarization.js.map +1 -1
  90. package/dist/core/compaction/compaction-runner.d.ts +3 -1
  91. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  92. package/dist/core/compaction/compaction-runner.js +6 -1
  93. package/dist/core/compaction/compaction-runner.js.map +1 -1
  94. package/dist/core/compaction/range-planner.d.ts +3 -0
  95. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  96. package/dist/core/compaction/range-planner.js +2 -1
  97. package/dist/core/compaction/range-planner.js.map +1 -1
  98. package/dist/core/extensions/agent-events.d.ts +10 -0
  99. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  100. package/dist/core/extensions/agent-events.js.map +1 -1
  101. package/dist/core/extensions/api-types.d.ts +8 -2
  102. package/dist/core/extensions/api-types.d.ts.map +1 -1
  103. package/dist/core/extensions/api-types.js.map +1 -1
  104. package/dist/core/extensions/event-types.d.ts +2 -2
  105. package/dist/core/extensions/event-types.d.ts.map +1 -1
  106. package/dist/core/extensions/event-types.js.map +1 -1
  107. package/dist/core/extensions/index.d.ts +1 -1
  108. package/dist/core/extensions/index.d.ts.map +1 -1
  109. package/dist/core/extensions/index.js.map +1 -1
  110. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  111. package/dist/core/extensions/loader-api.js +13 -2
  112. package/dist/core/extensions/loader-api.js.map +1 -1
  113. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  114. package/dist/core/extensions/loader-core.js +1 -0
  115. package/dist/core/extensions/loader-core.js.map +1 -1
  116. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  117. package/dist/core/extensions/loader-runtime.js +15 -7
  118. package/dist/core/extensions/loader-runtime.js.map +1 -1
  119. package/dist/core/extensions/message-types.d.ts +5 -0
  120. package/dist/core/extensions/message-types.d.ts.map +1 -1
  121. package/dist/core/extensions/message-types.js.map +1 -1
  122. package/dist/core/extensions/provider-types.d.ts +46 -0
  123. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  124. package/dist/core/extensions/provider-types.js.map +1 -1
  125. package/dist/core/extensions/runner-registries.d.ts +2 -1
  126. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  127. package/dist/core/extensions/runner-registries.js +8 -0
  128. package/dist/core/extensions/runner-registries.js.map +1 -1
  129. package/dist/core/extensions/runner.d.ts +5 -2
  130. package/dist/core/extensions/runner.d.ts.map +1 -1
  131. package/dist/core/extensions/runner.js +35 -13
  132. package/dist/core/extensions/runner.js.map +1 -1
  133. package/dist/core/extensions/runtime-types.d.ts +8 -2
  134. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  135. package/dist/core/extensions/runtime-types.js.map +1 -1
  136. package/dist/core/extensions/ui-types.d.ts +4 -0
  137. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  138. package/dist/core/extensions/ui-types.js.map +1 -1
  139. package/dist/core/http-dispatcher.d.ts +1 -0
  140. package/dist/core/http-dispatcher.d.ts.map +1 -1
  141. package/dist/core/http-dispatcher.js +16 -2
  142. package/dist/core/http-dispatcher.js.map +1 -1
  143. package/dist/core/keybindings.d.ts +6 -1
  144. package/dist/core/keybindings.d.ts.map +1 -1
  145. package/dist/core/keybindings.js +3 -1
  146. package/dist/core/keybindings.js.map +1 -1
  147. package/dist/core/model-registry-auth.d.ts +2 -0
  148. package/dist/core/model-registry-auth.d.ts.map +1 -1
  149. package/dist/core/model-registry-auth.js +18 -1
  150. package/dist/core/model-registry-auth.js.map +1 -1
  151. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  152. package/dist/core/model-registry-custom-loader.js +14 -2
  153. package/dist/core/model-registry-custom-loader.js.map +1 -1
  154. package/dist/core/model-registry-dynamic.js +2 -2
  155. package/dist/core/model-registry-dynamic.js.map +1 -1
  156. package/dist/core/model-registry-loader.d.ts.map +1 -1
  157. package/dist/core/model-registry-loader.js +2 -1
  158. package/dist/core/model-registry-loader.js.map +1 -1
  159. package/dist/core/model-registry-schemas.d.ts +17 -0
  160. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  161. package/dist/core/model-registry-schemas.js +2 -0
  162. package/dist/core/model-registry-schemas.js.map +1 -1
  163. package/dist/core/model-registry-types.d.ts +10 -1
  164. package/dist/core/model-registry-types.d.ts.map +1 -1
  165. package/dist/core/model-registry-types.js.map +1 -1
  166. package/dist/core/model-registry.d.ts +26 -36
  167. package/dist/core/model-registry.d.ts.map +1 -1
  168. package/dist/core/model-registry.js +73 -68
  169. package/dist/core/model-registry.js.map +1 -1
  170. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  171. package/dist/core/model-resolver-defaults.js +5 -0
  172. package/dist/core/model-resolver-defaults.js.map +1 -1
  173. package/dist/core/model-runtime.d.ts +52 -0
  174. package/dist/core/model-runtime.d.ts.map +1 -0
  175. package/dist/core/model-runtime.js +120 -0
  176. package/dist/core/model-runtime.js.map +1 -0
  177. package/dist/core/oauth-provider-bridge.d.ts +3 -1
  178. package/dist/core/oauth-provider-bridge.d.ts.map +1 -1
  179. package/dist/core/oauth-provider-bridge.js +6 -4
  180. package/dist/core/oauth-provider-bridge.js.map +1 -1
  181. package/dist/core/package-manager-resolver.js +22 -11
  182. package/dist/core/package-manager-resolver.js.map +1 -1
  183. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  184. package/dist/core/package-manager-resource-collector.js +8 -2
  185. package/dist/core/package-manager-resource-collector.js.map +1 -1
  186. package/dist/core/package-manager-resource-patterns.d.ts +1 -0
  187. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  188. package/dist/core/package-manager-resource-patterns.js +15 -0
  189. package/dist/core/package-manager-resource-patterns.js.map +1 -1
  190. package/dist/core/package-manager-source.d.ts.map +1 -1
  191. package/dist/core/package-manager-source.js +15 -8
  192. package/dist/core/package-manager-source.js.map +1 -1
  193. package/dist/core/package-manager-types.d.ts +1 -0
  194. package/dist/core/package-manager-types.d.ts.map +1 -1
  195. package/dist/core/package-manager-types.js.map +1 -1
  196. package/dist/core/prompt-templates.d.ts +1 -0
  197. package/dist/core/prompt-templates.d.ts.map +1 -1
  198. package/dist/core/prompt-templates.js +6 -4
  199. package/dist/core/prompt-templates.js.map +1 -1
  200. package/dist/core/provider-display-names.d.ts.map +1 -1
  201. package/dist/core/provider-display-names.js +4 -0
  202. package/dist/core/provider-display-names.js.map +1 -1
  203. package/dist/core/remote-catalog-provider.d.ts +1 -1
  204. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  205. package/dist/core/remote-catalog-provider.js +25 -6
  206. package/dist/core/remote-catalog-provider.js.map +1 -1
  207. package/dist/core/resource-loader-core.d.ts.map +1 -1
  208. package/dist/core/resource-loader-core.js.map +1 -1
  209. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  210. package/dist/core/resource-loader-extensions.js +5 -2
  211. package/dist/core/resource-loader-extensions.js.map +1 -1
  212. package/dist/core/resource-loader-helpers.d.ts.map +1 -1
  213. package/dist/core/resource-loader-helpers.js +1 -0
  214. package/dist/core/resource-loader-helpers.js.map +1 -1
  215. package/dist/core/resource-loader-internals.d.ts +2 -2
  216. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  217. package/dist/core/resource-loader-internals.js.map +1 -1
  218. package/dist/core/resource-loader-types.d.ts +3 -3
  219. package/dist/core/resource-loader-types.d.ts.map +1 -1
  220. package/dist/core/resource-loader-types.js.map +1 -1
  221. package/dist/core/sdk-exports.d.ts +1 -1
  222. package/dist/core/sdk-exports.d.ts.map +1 -1
  223. package/dist/core/sdk-exports.js.map +1 -1
  224. package/dist/core/sdk-types.d.ts +3 -0
  225. package/dist/core/sdk-types.d.ts.map +1 -1
  226. package/dist/core/sdk-types.js.map +1 -1
  227. package/dist/core/sdk.d.ts.map +1 -1
  228. package/dist/core/sdk.js +10 -3
  229. package/dist/core/sdk.js.map +1 -1
  230. package/dist/core/session-manager-core.d.ts +2 -1
  231. package/dist/core/session-manager-core.d.ts.map +1 -1
  232. package/dist/core/session-manager-core.js +9 -6
  233. package/dist/core/session-manager-core.js.map +1 -1
  234. package/dist/core/session-manager-entries.d.ts +2 -2
  235. package/dist/core/session-manager-entries.d.ts.map +1 -1
  236. package/dist/core/session-manager-entries.js +2 -1
  237. package/dist/core/session-manager-entries.js.map +1 -1
  238. package/dist/core/session-manager-history.d.ts +5 -0
  239. package/dist/core/session-manager-history.d.ts.map +1 -1
  240. package/dist/core/session-manager-history.js +33 -0
  241. package/dist/core/session-manager-history.js.map +1 -1
  242. package/dist/core/session-manager-types.d.ts +4 -2
  243. package/dist/core/session-manager-types.d.ts.map +1 -1
  244. package/dist/core/session-manager-types.js.map +1 -1
  245. package/dist/core/session-manager-validation.d.ts.map +1 -1
  246. package/dist/core/session-manager-validation.js +3 -16
  247. package/dist/core/session-manager-validation.js.map +1 -1
  248. package/dist/core/session-manager.d.ts +1 -1
  249. package/dist/core/session-manager.d.ts.map +1 -1
  250. package/dist/core/session-manager.js +1 -1
  251. package/dist/core/session-manager.js.map +1 -1
  252. package/dist/core/settings-manager-basic-accessors.d.ts +7 -0
  253. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  254. package/dist/core/settings-manager-basic-accessors.js +35 -0
  255. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  256. package/dist/core/settings-manager-resource-accessors.d.ts +3 -0
  257. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  258. package/dist/core/settings-manager-resource-accessors.js +16 -0
  259. package/dist/core/settings-manager-resource-accessors.js.map +1 -1
  260. package/dist/core/settings-types.d.ts +8 -2
  261. package/dist/core/settings-types.d.ts.map +1 -1
  262. package/dist/core/settings-types.js.map +1 -1
  263. package/dist/core/slash-commands.d.ts +1 -0
  264. package/dist/core/slash-commands.d.ts.map +1 -1
  265. package/dist/core/slash-commands.js +1 -1
  266. package/dist/core/slash-commands.js.map +1 -1
  267. package/dist/core/summarization-retry.d.ts +11 -0
  268. package/dist/core/summarization-retry.d.ts.map +1 -0
  269. package/dist/core/summarization-retry.js +21 -0
  270. package/dist/core/summarization-retry.js.map +1 -0
  271. package/dist/core/tools/read.js +1 -1
  272. package/dist/core/tools/read.js.map +1 -1
  273. package/dist/core/usage-totals.d.ts +18 -0
  274. package/dist/core/usage-totals.d.ts.map +1 -0
  275. package/dist/core/usage-totals.js +40 -0
  276. package/dist/core/usage-totals.js.map +1 -0
  277. package/dist/extensions/index.d.ts +3 -0
  278. package/dist/extensions/index.d.ts.map +1 -0
  279. package/dist/extensions/index.js +5 -0
  280. package/dist/extensions/index.js.map +1 -0
  281. package/dist/extensions/llama/client.d.ts +61 -0
  282. package/dist/extensions/llama/client.d.ts.map +1 -0
  283. package/dist/extensions/llama/client.js +300 -0
  284. package/dist/extensions/llama/client.js.map +1 -0
  285. package/dist/extensions/llama/huggingface-ui.d.ts +33 -0
  286. package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -0
  287. package/dist/extensions/llama/huggingface-ui.js +166 -0
  288. package/dist/extensions/llama/huggingface-ui.js.map +1 -0
  289. package/dist/extensions/llama/huggingface.d.ts +23 -0
  290. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  291. package/dist/extensions/llama/huggingface.js +139 -0
  292. package/dist/extensions/llama/huggingface.js.map +1 -0
  293. package/dist/extensions/llama/index.d.ts +3 -0
  294. package/dist/extensions/llama/index.d.ts.map +1 -0
  295. package/dist/extensions/llama/index.js +208 -0
  296. package/dist/extensions/llama/index.js.map +1 -0
  297. package/dist/extensions/llama/provider.d.ts +11 -0
  298. package/dist/extensions/llama/provider.d.ts.map +1 -0
  299. package/dist/extensions/llama/provider.js +93 -0
  300. package/dist/extensions/llama/provider.js.map +1 -0
  301. package/dist/extensions/llama/ui.d.ts +42 -0
  302. package/dist/extensions/llama/ui.d.ts.map +1 -0
  303. package/dist/extensions/llama/ui.js +237 -0
  304. package/dist/extensions/llama/ui.js.map +1 -0
  305. package/dist/index-extensions.d.ts +1 -1
  306. package/dist/index-extensions.d.ts.map +1 -1
  307. package/dist/index-extensions.js.map +1 -1
  308. package/dist/index.d.ts +5 -4
  309. package/dist/index.d.ts.map +1 -1
  310. package/dist/index.js +4 -3
  311. package/dist/index.js.map +1 -1
  312. package/dist/main-first-time-setup.d.ts +6 -0
  313. package/dist/main-first-time-setup.d.ts.map +1 -0
  314. package/dist/main-first-time-setup.js +10 -0
  315. package/dist/main-first-time-setup.js.map +1 -0
  316. package/dist/main-types.d.ts +2 -2
  317. package/dist/main-types.d.ts.map +1 -1
  318. package/dist/main-types.js.map +1 -1
  319. package/dist/main.d.ts.map +1 -1
  320. package/dist/main.js +19 -7
  321. package/dist/main.js.map +1 -1
  322. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  323. package/dist/modes/interactive/chat-input-actions.js +14 -2
  324. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  325. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  326. package/dist/modes/interactive/components/chat-session-host-events.js +16 -0
  327. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  328. package/dist/modes/interactive/components/config-selector-list.d.ts +6 -6
  329. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  330. package/dist/modes/interactive/components/config-selector-list.js +64 -125
  331. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  332. package/dist/modes/interactive/components/config-selector-project-scope.d.ts +4 -0
  333. package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -0
  334. package/dist/modes/interactive/components/config-selector-project-scope.js +61 -0
  335. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -0
  336. package/dist/modes/interactive/components/config-selector.d.ts +8 -5
  337. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  338. package/dist/modes/interactive/components/config-selector.js +46 -22
  339. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  340. package/dist/modes/interactive/components/custom-entry.d.ts +16 -0
  341. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  342. package/dist/modes/interactive/components/custom-entry.js +45 -0
  343. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  344. package/dist/modes/interactive/components/first-time-setup.d.ts +24 -0
  345. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  346. package/dist/modes/interactive/components/first-time-setup.js +69 -0
  347. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  348. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  349. package/dist/modes/interactive/components/footer.js +48 -26
  350. package/dist/modes/interactive/components/footer.js.map +1 -1
  351. package/dist/modes/interactive/components/host-input-form.d.ts +2 -0
  352. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/host-input-form.js +6 -3
  354. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  355. package/dist/modes/interactive/components/idle-status.d.ts +8 -0
  356. package/dist/modes/interactive/components/idle-status.d.ts.map +1 -0
  357. package/dist/modes/interactive/components/idle-status.js +13 -0
  358. package/dist/modes/interactive/components/idle-status.js.map +1 -0
  359. package/dist/modes/interactive/components/index.d.ts +3 -0
  360. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  361. package/dist/modes/interactive/components/index.js +3 -0
  362. package/dist/modes/interactive/components/index.js.map +1 -1
  363. package/dist/modes/interactive/components/login-dialog.d.ts +5 -5
  364. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  365. package/dist/modes/interactive/components/login-dialog.js +14 -6
  366. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  367. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  368. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  369. package/dist/modes/interactive/components/oauth-selector.js +10 -6
  370. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  371. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  372. package/dist/modes/interactive/components/settings-selector-handlers.js +6 -0
  373. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  374. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  375. package/dist/modes/interactive/components/settings-selector-items.js +14 -0
  376. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  377. package/dist/modes/interactive/components/settings-selector-types.d.ts +4 -0
  378. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  379. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  380. package/dist/modes/interactive/interactive-agent-events.js +27 -0
  381. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  382. package/dist/modes/interactive/interactive-auth-login.js +17 -8
  383. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  384. package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -0
  385. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  386. package/dist/modes/interactive/interactive-auth-routing.js +88 -40
  387. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  388. package/dist/modes/interactive/interactive-autocomplete.js +6 -0
  389. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  390. package/dist/modes/interactive/interactive-extension-runtime.js +4 -0
  391. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  392. package/dist/modes/interactive/interactive-global-clear.d.ts +10 -2
  393. package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -1
  394. package/dist/modes/interactive/interactive-global-clear.js +3 -1
  395. package/dist/modes/interactive/interactive-global-clear.js.map +1 -1
  396. package/dist/modes/interactive/interactive-input-handling.js +6 -4
  397. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  398. package/dist/modes/interactive/interactive-mode-helpers.d.ts +2 -1
  399. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  400. package/dist/modes/interactive/interactive-mode-helpers.js +6 -10
  401. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  402. package/dist/modes/interactive/interactive-mode-surface.d.ts +11 -2
  403. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  404. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  405. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +13 -0
  406. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -0
  407. package/dist/modes/interactive/interactive-model-catalog-startup.js +24 -0
  408. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -0
  409. package/dist/modes/interactive/interactive-model-routing.js +4 -3
  410. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  411. package/dist/modes/interactive/interactive-queueing.js +3 -2
  412. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  413. package/dist/modes/interactive/interactive-render-chat.js +69 -12
  414. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  415. package/dist/modes/interactive/interactive-resource-rendering.js +1 -1
  416. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  417. package/dist/modes/interactive/interactive-selectors.js +10 -0
  418. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  419. package/dist/modes/interactive/interactive-session-routing.js +3 -0
  420. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  421. package/dist/modes/interactive/interactive-slash-commands.js +14 -0
  422. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  423. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  424. package/dist/modes/interactive/interactive-startup.js +4 -7
  425. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  426. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts +8 -0
  427. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -0
  428. package/dist/modes/interactive/interactive-summarization-retry-events.js +40 -0
  429. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -0
  430. package/dist/modes/interactive/login-provider-options.d.ts +21 -0
  431. package/dist/modes/interactive/login-provider-options.d.ts.map +1 -0
  432. package/dist/modes/interactive/login-provider-options.js +51 -0
  433. package/dist/modes/interactive/login-provider-options.js.map +1 -0
  434. package/dist/modes/interactive-engine/engine-input-form.d.ts +1 -1
  435. package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -1
  436. package/dist/modes/interactive-engine/engine-input-form.js +10 -2
  437. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  438. package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -1
  439. package/dist/modes/interactive-engine/input-form-host.js +7 -2
  440. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  441. package/dist/modes/interactive-engine/isolated-runtime.js +1 -1
  442. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  443. package/dist/modes/interactive-engine/protocol.d.ts +5 -0
  444. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  445. package/dist/modes/interactive-engine/protocol.js +9 -1
  446. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  447. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +2 -0
  448. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  449. package/dist/modes/interactive-engine/remote-model-catalog.js +33 -0
  450. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  451. package/dist/modes/rpc/rpc-client-api.d.ts +4 -1
  452. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  453. package/dist/modes/rpc/rpc-client-api.js +18 -0
  454. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  455. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  456. package/dist/modes/rpc/rpc-client.js +1 -0
  457. package/dist/modes/rpc/rpc-client.js.map +1 -1
  458. package/dist/modes/rpc/rpc-command-handler.d.ts +5 -1
  459. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  460. package/dist/modes/rpc/rpc-command-handler.js +67 -2
  461. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  462. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  463. package/dist/modes/rpc/rpc-input-scheduler.js +1 -0
  464. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  465. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  466. package/dist/modes/rpc/rpc-mode.js +1 -0
  467. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  468. package/dist/modes/rpc/rpc-types.d.ts +42 -0
  469. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  470. package/dist/modes/rpc/rpc-types.js.map +1 -1
  471. package/dist/package-manager-cli.d.ts +3 -3
  472. package/dist/package-manager-cli.d.ts.map +1 -1
  473. package/dist/package-manager-cli.js +55 -51
  474. package/dist/package-manager-cli.js.map +1 -1
  475. package/dist/self-update-plan.d.ts +12 -0
  476. package/dist/self-update-plan.d.ts.map +1 -0
  477. package/dist/self-update-plan.js +42 -0
  478. package/dist/self-update-plan.js.map +1 -0
  479. package/dist/utils/clipboard-native.d.ts +1 -0
  480. package/dist/utils/clipboard-native.d.ts.map +1 -1
  481. package/dist/utils/clipboard-native.js.map +1 -1
  482. package/dist/utils/clipboard.d.ts +3 -0
  483. package/dist/utils/clipboard.d.ts.map +1 -1
  484. package/dist/utils/clipboard.js +10 -0
  485. package/dist/utils/clipboard.js.map +1 -1
  486. package/dist/utils/version-check.d.ts +1 -0
  487. package/dist/utils/version-check.d.ts.map +1 -1
  488. package/dist/utils/version-check.js +3 -3
  489. package/dist/utils/version-check.js.map +1 -1
  490. package/docs/docs.json +2 -1
  491. package/docs/extensions.md +59 -7
  492. package/docs/json.md +7 -1
  493. package/docs/keybindings.md +3 -0
  494. package/docs/llama-cpp.md +70 -0
  495. package/docs/models.md +8 -3
  496. package/docs/packages.md +4 -2
  497. package/docs/prompt-templates.md +1 -0
  498. package/docs/providers.md +41 -3
  499. package/docs/rpc.md +49 -0
  500. package/docs/sdk.md +21 -0
  501. package/docs/settings.md +19 -3
  502. package/docs/tui.md +2 -2
  503. package/docs/workflows.md +6 -6
  504. package/examples/extensions/README.md +1 -1
  505. package/examples/extensions/sandbox/package-lock.json +3 -3
  506. package/npm-shrinkwrap.json +36 -36
  507. package/package.json +5 -5
@@ -12,7 +12,7 @@ export class OAuthSelectorComponent extends Container {
12
12
  this._focused = value;
13
13
  this.searchInput.focused = value;
14
14
  }
15
- constructor(mode, authStorage, providers, onSelect, onCancel, getAuthStatus) {
15
+ constructor(mode, authStorage, providers, onSelect, onCancel, getAuthStatus, initialSearchInput = "") {
16
16
  super();
17
17
  // Focusable implementation - propagate to search input for IME cursor positioning
18
18
  this._focused = false;
@@ -32,10 +32,11 @@ export class OAuthSelectorComponent extends Container {
32
32
  this.addChild(new TruncatedText(theme.fg("accent", theme.bold(title)), 1, 0));
33
33
  this.addChild(new Spacer(1));
34
34
  this.searchInput = new Input();
35
+ this.searchInput.setValue(initialSearchInput);
35
36
  this.searchInput.onSubmit = () => {
36
37
  const selectedProvider = this.filteredProviders[this.selectedIndex];
37
38
  if (selectedProvider) {
38
- this.onSelectCallback(selectedProvider.id);
39
+ this.onSelectCallback(selectedProvider.id, selectedProvider.authType);
39
40
  }
40
41
  };
41
42
  this.addChild(this.searchInput);
@@ -47,7 +48,7 @@ export class OAuthSelectorComponent extends Container {
47
48
  // Add bottom border
48
49
  this.addChild(new DynamicBorder());
49
50
  // Initial render
50
- this.filterProviders("");
51
+ this.filterProviders(initialSearchInput);
51
52
  }
52
53
  filterProviders(query) {
53
54
  this.filteredProviders = query
@@ -67,14 +68,17 @@ export class OAuthSelectorComponent extends Container {
67
68
  continue;
68
69
  const isSelected = i === this.selectedIndex;
69
70
  const statusIndicator = this.formatStatusIndicator(provider);
71
+ const hasMultipleMethods = this.allProviders.some((other) => other.id === provider.id && other.authType !== provider.authType);
72
+ const methodLabel = provider.authType === "oauth" ? "subscription" : "API key";
73
+ const providerLabel = hasMultipleMethods ? `${provider.name} · ${methodLabel}` : provider.name;
70
74
  let line = "";
71
75
  if (isSelected) {
72
76
  const prefix = theme.fg("accent", "→ ");
73
- const text = theme.fg("accent", provider.name);
77
+ const text = theme.fg("accent", providerLabel);
74
78
  line = prefix + text + statusIndicator;
75
79
  }
76
80
  else {
77
- const text = ` ${theme.fg("text", provider.name)}`;
81
+ const text = ` ${theme.fg("text", providerLabel)}`;
78
82
  line = text + statusIndicator;
79
83
  }
80
84
  this.listContainer.addChild(new TruncatedText(line, 1, 0));
@@ -139,7 +143,7 @@ export class OAuthSelectorComponent extends Container {
139
143
  else if (kb.matches(keyData, "tui.select.confirm")) {
140
144
  const selectedProvider = this.filteredProviders[this.selectedIndex];
141
145
  if (selectedProvider) {
142
- this.onSelectCallback(selectedProvider.id);
146
+ this.onSelectCallback(selectedProvider.id, selectedProvider.authType);
143
147
  }
144
148
  }
145
149
  // Escape or Ctrl+C
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/oauth-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tContainer,\n\ttype Focusable,\n\tfuzzyFilter,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\tTruncatedText,\n} from \"@earendil-works/pi-tui\";\nimport type { AuthStatus, AuthStorage } from \"../../../core/auth-storage.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\n\nexport type AuthSelectorProvider = {\n\tid: string;\n\tname: string;\n\tauthType: \"oauth\" | \"api_key\";\n};\n\n/**\n * Component that renders an auth provider selector\n */\nexport class OAuthSelectorComponent extends Container implements Focusable {\n\tprivate searchInput: Input;\n\n\t// Focusable implementation - propagate to search input for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.searchInput.focused = value;\n\t}\n\n\tprivate listContainer: Container;\n\tprivate allProviders: AuthSelectorProvider[];\n\tprivate filteredProviders: AuthSelectorProvider[];\n\tprivate selectedIndex: number = 0;\n\tprivate mode: \"login\" | \"logout\";\n\tprivate authStorage: AuthStorage;\n\tprivate getAuthStatus: (providerId: string) => AuthStatus;\n\tprivate onSelectCallback: (providerId: string) => void;\n\tprivate onCancelCallback: () => void;\n\n\tconstructor(\n\t\tmode: \"login\" | \"logout\",\n\t\tauthStorage: AuthStorage,\n\t\tproviders: AuthSelectorProvider[],\n\t\tonSelect: (providerId: string) => void,\n\t\tonCancel: () => void,\n\t\tgetAuthStatus?: (providerId: string) => AuthStatus,\n\t) {\n\t\tsuper();\n\n\t\tthis.mode = mode;\n\t\tthis.authStorage = authStorage;\n\t\tthis.getAuthStatus = getAuthStatus ?? ((providerId) => this.authStorage.getAuthStatus(providerId));\n\t\tthis.allProviders = providers;\n\t\tthis.filteredProviders = providers;\n\t\tthis.onSelectCallback = onSelect;\n\t\tthis.onCancelCallback = onCancel;\n\n\t\t// Add top border\n\t\tthis.addChild(new DynamicBorder());\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Add title\n\t\tconst title = mode === \"login\" ? \"Select provider to configure:\" : \"Select provider to logout:\";\n\t\tthis.addChild(new TruncatedText(theme.fg(\"accent\", theme.bold(title)), 1, 0));\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.searchInput = new Input();\n\t\tthis.searchInput.onSubmit = () => {\n\t\t\tconst selectedProvider = this.filteredProviders[this.selectedIndex];\n\t\t\tif (selectedProvider) {\n\t\t\t\tthis.onSelectCallback(selectedProvider.id);\n\t\t\t}\n\t\t};\n\t\tthis.addChild(this.searchInput);\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Create list container\n\t\tthis.listContainer = new Container();\n\t\tthis.addChild(this.listContainer);\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Add bottom border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Initial render\n\t\tthis.filterProviders(\"\");\n\t}\n\n\tprivate filterProviders(query: string): void {\n\t\tthis.filteredProviders = query\n\t\t\t? fuzzyFilter(this.allProviders, query, (provider) => `${provider.name} ${provider.id} ${provider.authType}`)\n\t\t\t: this.allProviders;\n\t\tthis.selectedIndex = Math.max(0, Math.min(this.selectedIndex, Math.max(0, this.filteredProviders.length - 1)));\n\t\tthis.updateList();\n\t}\n\n\tprivate updateList(): void {\n\t\tthis.listContainer.clear();\n\n\t\tconst maxVisible = 8;\n\t\tconst startIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(maxVisible / 2), this.filteredProviders.length - maxVisible),\n\t\t);\n\t\tconst endIndex = Math.min(startIndex + maxVisible, this.filteredProviders.length);\n\n\t\tfor (let i = startIndex; i < endIndex; i++) {\n\t\t\tconst provider = this.filteredProviders[i];\n\t\t\tif (!provider) continue;\n\n\t\t\tconst isSelected = i === this.selectedIndex;\n\n\t\t\tconst statusIndicator = this.formatStatusIndicator(provider);\n\t\t\tlet line = \"\";\n\t\t\tif (isSelected) {\n\t\t\t\tconst prefix = theme.fg(\"accent\", \"→ \");\n\t\t\t\tconst text = theme.fg(\"accent\", provider.name);\n\t\t\t\tline = prefix + text + statusIndicator;\n\t\t\t} else {\n\t\t\t\tconst text = ` ${theme.fg(\"text\", provider.name)}`;\n\t\t\t\tline = text + statusIndicator;\n\t\t\t}\n\n\t\t\tthis.listContainer.addChild(new TruncatedText(line, 1, 0));\n\t\t}\n\n\t\tif (startIndex > 0 || endIndex < this.filteredProviders.length) {\n\t\t\tconst scrollInfo = theme.fg(\"muted\", ` (${this.selectedIndex + 1}/${this.filteredProviders.length})`);\n\t\t\tthis.listContainer.addChild(new TruncatedText(scrollInfo, 1, 0));\n\t\t}\n\n\t\t// Show \"no providers\" if empty\n\t\tif (this.filteredProviders.length === 0) {\n\t\t\tconst message =\n\t\t\t\tthis.allProviders.length === 0\n\t\t\t\t\t? this.mode === \"login\"\n\t\t\t\t\t\t? \"No providers available\"\n\t\t\t\t\t\t: \"No providers logged in. Use /login first.\"\n\t\t\t\t\t: \"No matching providers\";\n\t\t\tthis.listContainer.addChild(new TruncatedText(theme.fg(\"muted\", ` ${message}`), 1, 0));\n\t\t}\n\t}\n\n\tprivate formatStatusIndicator(provider: AuthSelectorProvider): string {\n\t\tconst credential = this.authStorage.get(provider.id);\n\t\tif (credential?.type === provider.authType) return theme.fg(\"success\", \" ✓ configured\");\n\t\tif (credential) {\n\t\t\tconst label = credential.type === \"oauth\" ? \"subscription configured\" : \"API key configured\";\n\t\t\treturn theme.fg(\"muted\", \" • \") + theme.fg(\"warning\", label);\n\t\t}\n\t\tif (provider.authType !== \"api_key\") return theme.fg(\"muted\", \" • unconfigured\");\n\n\t\tconst status = this.getAuthStatus(provider.id);\n\t\tswitch (status.source) {\n\t\t\tcase \"environment\":\n\t\t\t\treturn theme.fg(\"success\", ` ✓ env: ${status.label ?? \"API key\"}`);\n\t\t\tcase \"runtime\":\n\t\t\t\treturn theme.fg(\"success\", \" ✓ runtime API key\");\n\t\t\tcase \"fallback\":\n\t\t\t\treturn theme.fg(\"success\", \" ✓ custom API key\");\n\t\t\tcase \"models_json_key\":\n\t\t\t\treturn theme.fg(\"success\", \" ✓ key in models.json\");\n\t\t\tcase \"models_json_command\":\n\t\t\t\treturn theme.fg(\"success\", \" ✓ command in models.json\");\n\t\t\tdefault:\n\t\t\t\treturn theme.fg(\"muted\", \" • unconfigured\");\n\t\t}\n\t}\n\n\thandleInput(keyData: string): void {\n\t\tconst kb = getKeybindings();\n\t\t// Up arrow\n\t\tif (kb.matches(keyData, \"tui.select.up\")) {\n\t\t\tif (this.filteredProviders.length === 0) return;\n\t\t\tthis.selectedIndex = Math.max(0, this.selectedIndex - 1);\n\t\t\tthis.updateList();\n\t\t}\n\t\t// Down arrow\n\t\telse if (kb.matches(keyData, \"tui.select.down\")) {\n\t\t\tif (this.filteredProviders.length === 0) return;\n\t\t\tthis.selectedIndex = Math.min(this.filteredProviders.length - 1, this.selectedIndex + 1);\n\t\t\tthis.updateList();\n\t\t}\n\t\t// Enter\n\t\telse if (kb.matches(keyData, \"tui.select.confirm\")) {\n\t\t\tconst selectedProvider = this.filteredProviders[this.selectedIndex];\n\t\t\tif (selectedProvider) {\n\t\t\t\tthis.onSelectCallback(selectedProvider.id);\n\t\t\t}\n\t\t}\n\t\t// Escape or Ctrl+C\n\t\telse if (kb.matches(keyData, \"tui.select.cancel\")) {\n\t\t\tthis.onCancelCallback();\n\t\t}\n\t\t// Pass everything else to search input\n\t\telse {\n\t\t\tthis.searchInput.handleInput(keyData);\n\t\t\tthis.filterProviders(this.searchInput.getValue());\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"oauth-selector.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/oauth-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tContainer,\n\ttype Focusable,\n\tfuzzyFilter,\n\tgetKeybindings,\n\tInput,\n\tSpacer,\n\tTruncatedText,\n} from \"@earendil-works/pi-tui\";\nimport type { AuthStatus, AuthStorage } from \"../../../core/auth-storage.ts\";\nimport { theme } from \"../theme/theme.ts\";\nimport { DynamicBorder } from \"./dynamic-border.ts\";\n\nexport type AuthSelectorProvider = {\n\tid: string;\n\tname: string;\n\tauthType: \"oauth\" | \"api_key\";\n};\n\n/**\n * Component that renders an auth provider selector\n */\nexport class OAuthSelectorComponent extends Container implements Focusable {\n\tprivate searchInput: Input;\n\n\t// Focusable implementation - propagate to search input for IME cursor positioning\n\tprivate _focused = false;\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.searchInput.focused = value;\n\t}\n\n\tprivate listContainer: Container;\n\tprivate allProviders: AuthSelectorProvider[];\n\tprivate filteredProviders: AuthSelectorProvider[];\n\tprivate selectedIndex: number = 0;\n\tprivate mode: \"login\" | \"logout\";\n\tprivate authStorage: AuthStorage;\n\tprivate getAuthStatus: (providerId: string) => AuthStatus;\n\tprivate onSelectCallback: (providerId: string, authType: AuthSelectorProvider[\"authType\"]) => void;\n\tprivate onCancelCallback: () => void;\n\n\tconstructor(\n\t\tmode: \"login\" | \"logout\",\n\t\tauthStorage: AuthStorage,\n\t\tproviders: AuthSelectorProvider[],\n\t\tonSelect: (providerId: string, authType: AuthSelectorProvider[\"authType\"]) => void,\n\t\tonCancel: () => void,\n\t\tgetAuthStatus?: (providerId: string) => AuthStatus,\n\t\tinitialSearchInput = \"\",\n\t) {\n\t\tsuper();\n\n\t\tthis.mode = mode;\n\t\tthis.authStorage = authStorage;\n\t\tthis.getAuthStatus = getAuthStatus ?? ((providerId) => this.authStorage.getAuthStatus(providerId));\n\t\tthis.allProviders = providers;\n\t\tthis.filteredProviders = providers;\n\t\tthis.onSelectCallback = onSelect;\n\t\tthis.onCancelCallback = onCancel;\n\n\t\t// Add top border\n\t\tthis.addChild(new DynamicBorder());\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Add title\n\t\tconst title = mode === \"login\" ? \"Select provider to configure:\" : \"Select provider to logout:\";\n\t\tthis.addChild(new TruncatedText(theme.fg(\"accent\", theme.bold(title)), 1, 0));\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.searchInput = new Input();\n\t\tthis.searchInput.setValue(initialSearchInput);\n\t\tthis.searchInput.onSubmit = () => {\n\t\t\tconst selectedProvider = this.filteredProviders[this.selectedIndex];\n\t\t\tif (selectedProvider) {\n\t\t\t\tthis.onSelectCallback(selectedProvider.id, selectedProvider.authType);\n\t\t\t}\n\t\t};\n\t\tthis.addChild(this.searchInput);\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Create list container\n\t\tthis.listContainer = new Container();\n\t\tthis.addChild(this.listContainer);\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\t// Add bottom border\n\t\tthis.addChild(new DynamicBorder());\n\n\t\t// Initial render\n\t\tthis.filterProviders(initialSearchInput);\n\t}\n\n\tprivate filterProviders(query: string): void {\n\t\tthis.filteredProviders = query\n\t\t\t? fuzzyFilter(this.allProviders, query, (provider) => `${provider.name} ${provider.id} ${provider.authType}`)\n\t\t\t: this.allProviders;\n\t\tthis.selectedIndex = Math.max(0, Math.min(this.selectedIndex, Math.max(0, this.filteredProviders.length - 1)));\n\t\tthis.updateList();\n\t}\n\n\tprivate updateList(): void {\n\t\tthis.listContainer.clear();\n\n\t\tconst maxVisible = 8;\n\t\tconst startIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(this.selectedIndex - Math.floor(maxVisible / 2), this.filteredProviders.length - maxVisible),\n\t\t);\n\t\tconst endIndex = Math.min(startIndex + maxVisible, this.filteredProviders.length);\n\n\t\tfor (let i = startIndex; i < endIndex; i++) {\n\t\t\tconst provider = this.filteredProviders[i];\n\t\t\tif (!provider) continue;\n\n\t\t\tconst isSelected = i === this.selectedIndex;\n\n\t\t\tconst statusIndicator = this.formatStatusIndicator(provider);\n\t\t\tconst hasMultipleMethods = this.allProviders.some(\n\t\t\t\t(other) => other.id === provider.id && other.authType !== provider.authType,\n\t\t\t);\n\t\t\tconst methodLabel = provider.authType === \"oauth\" ? \"subscription\" : \"API key\";\n\t\t\tconst providerLabel = hasMultipleMethods ? `${provider.name} · ${methodLabel}` : provider.name;\n\t\t\tlet line = \"\";\n\t\t\tif (isSelected) {\n\t\t\t\tconst prefix = theme.fg(\"accent\", \"→ \");\n\t\t\t\tconst text = theme.fg(\"accent\", providerLabel);\n\t\t\t\tline = prefix + text + statusIndicator;\n\t\t\t} else {\n\t\t\t\tconst text = ` ${theme.fg(\"text\", providerLabel)}`;\n\t\t\t\tline = text + statusIndicator;\n\t\t\t}\n\n\t\t\tthis.listContainer.addChild(new TruncatedText(line, 1, 0));\n\t\t}\n\n\t\tif (startIndex > 0 || endIndex < this.filteredProviders.length) {\n\t\t\tconst scrollInfo = theme.fg(\"muted\", ` (${this.selectedIndex + 1}/${this.filteredProviders.length})`);\n\t\t\tthis.listContainer.addChild(new TruncatedText(scrollInfo, 1, 0));\n\t\t}\n\n\t\t// Show \"no providers\" if empty\n\t\tif (this.filteredProviders.length === 0) {\n\t\t\tconst message =\n\t\t\t\tthis.allProviders.length === 0\n\t\t\t\t\t? this.mode === \"login\"\n\t\t\t\t\t\t? \"No providers available\"\n\t\t\t\t\t\t: \"No providers logged in. Use /login first.\"\n\t\t\t\t\t: \"No matching providers\";\n\t\t\tthis.listContainer.addChild(new TruncatedText(theme.fg(\"muted\", ` ${message}`), 1, 0));\n\t\t}\n\t}\n\n\tprivate formatStatusIndicator(provider: AuthSelectorProvider): string {\n\t\tconst credential = this.authStorage.get(provider.id);\n\t\tif (credential?.type === provider.authType) return theme.fg(\"success\", \" ✓ configured\");\n\t\tif (credential) {\n\t\t\tconst label = credential.type === \"oauth\" ? \"subscription configured\" : \"API key configured\";\n\t\t\treturn theme.fg(\"muted\", \" • \") + theme.fg(\"warning\", label);\n\t\t}\n\t\tif (provider.authType !== \"api_key\") return theme.fg(\"muted\", \" • unconfigured\");\n\n\t\tconst status = this.getAuthStatus(provider.id);\n\t\tswitch (status.source) {\n\t\t\tcase \"environment\":\n\t\t\t\treturn theme.fg(\"success\", ` ✓ env: ${status.label ?? \"API key\"}`);\n\t\t\tcase \"runtime\":\n\t\t\t\treturn theme.fg(\"success\", \" ✓ runtime API key\");\n\t\t\tcase \"fallback\":\n\t\t\t\treturn theme.fg(\"success\", \" ✓ custom API key\");\n\t\t\tcase \"models_json_key\":\n\t\t\t\treturn theme.fg(\"success\", \" ✓ key in models.json\");\n\t\t\tcase \"models_json_command\":\n\t\t\t\treturn theme.fg(\"success\", \" ✓ command in models.json\");\n\t\t\tdefault:\n\t\t\t\treturn theme.fg(\"muted\", \" • unconfigured\");\n\t\t}\n\t}\n\n\thandleInput(keyData: string): void {\n\t\tconst kb = getKeybindings();\n\t\t// Up arrow\n\t\tif (kb.matches(keyData, \"tui.select.up\")) {\n\t\t\tif (this.filteredProviders.length === 0) return;\n\t\t\tthis.selectedIndex = Math.max(0, this.selectedIndex - 1);\n\t\t\tthis.updateList();\n\t\t}\n\t\t// Down arrow\n\t\telse if (kb.matches(keyData, \"tui.select.down\")) {\n\t\t\tif (this.filteredProviders.length === 0) return;\n\t\t\tthis.selectedIndex = Math.min(this.filteredProviders.length - 1, this.selectedIndex + 1);\n\t\t\tthis.updateList();\n\t\t}\n\t\t// Enter\n\t\telse if (kb.matches(keyData, \"tui.select.confirm\")) {\n\t\t\tconst selectedProvider = this.filteredProviders[this.selectedIndex];\n\t\t\tif (selectedProvider) {\n\t\t\t\tthis.onSelectCallback(selectedProvider.id, selectedProvider.authType);\n\t\t\t}\n\t\t}\n\t\t// Escape or Ctrl+C\n\t\telse if (kb.matches(keyData, \"tui.select.cancel\")) {\n\t\t\tthis.onCancelCallback();\n\t\t}\n\t\t// Pass everything else to search input\n\t\telse {\n\t\t\tthis.searchInput.handleInput(keyData);\n\t\t\tthis.filterProviders(this.searchInput.getValue());\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-handlers.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-handlers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyC,iBAAiB,EAAkB,MAAM,8BAA8B,CAAC;AAE7H,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,iBAAiB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAmFhH"}
1
+ {"version":3,"file":"settings-selector-handlers.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-handlers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyC,iBAAiB,EAAkB,MAAM,8BAA8B,CAAC;AAE7H,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,iBAAiB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAyFhH"}
@@ -69,6 +69,9 @@ export function createSettingsChangeHandler(callbacks) {
69
69
  case "editor-padding":
70
70
  callbacks.onEditorPaddingXChange(parseInt(newValue, 10));
71
71
  break;
72
+ case "output-padding":
73
+ callbacks.onOutputPadChange(newValue === "0" ? 0 : 1);
74
+ break;
72
75
  case "autocomplete-max-visible":
73
76
  callbacks.onAutocompleteMaxVisibleChange(parseInt(newValue, 10));
74
77
  break;
@@ -78,6 +81,9 @@ export function createSettingsChangeHandler(callbacks) {
78
81
  case "terminal-progress":
79
82
  callbacks.onShowTerminalProgressChange(newValue === "true");
80
83
  break;
84
+ case "cache-miss-notices":
85
+ callbacks.onShowCacheMissNoticesChange(newValue === "true");
86
+ break;
81
87
  case "theme":
82
88
  callbacks.onThemeChange(newValue);
83
89
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-handlers.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Transport } from \"@earendil-works/pi-ai/compat\";\nimport { DEFAULT_HTTP_IDLE_TIMEOUT_MS, HTTP_IDLE_TIMEOUT_CHOICES } from \"../../../core/http-dispatcher.ts\";\nimport { DEFAULT_PROJECT_TRUST_BY_LABEL } from \"./settings-selector-options.ts\";\nimport type { DoubleEscapeAction, QueueDeliveryMode, SettingsCallbacks, TreeFilterMode } from \"./settings-selector-types.ts\";\n\nexport function createSettingsChangeHandler(callbacks: SettingsCallbacks): (id: string, newValue: string) => void {\n\treturn (id, newValue) => {\n\t\tswitch (id) {\n\t\t\tcase \"autocompact\":\n\t\t\t\tcallbacks.onAutoCompactChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"show-images\":\n\t\t\t\tcallbacks.onShowImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"image-width-cells\":\n\t\t\t\tcallbacks.onImageWidthCellsChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"auto-resize-images\":\n\t\t\t\tcallbacks.onAutoResizeImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"block-images\":\n\t\t\t\tcallbacks.onBlockImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"skill-commands\":\n\t\t\t\tcallbacks.onEnableSkillCommandsChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"steering-mode\":\n\t\t\t\tcallbacks.onSteeringModeChange(newValue as QueueDeliveryMode);\n\t\t\t\tbreak;\n\t\t\tcase \"follow-up-mode\":\n\t\t\t\tcallbacks.onFollowUpModeChange(newValue as QueueDeliveryMode);\n\t\t\t\tbreak;\n\t\t\tcase \"transport\":\n\t\t\t\tcallbacks.onTransportChange(newValue as Transport);\n\t\t\t\tbreak;\n\t\t\tcase \"http-idle-timeout\": {\n\t\t\t\tconst selected = HTTP_IDLE_TIMEOUT_CHOICES.find((choice) => choice.label === newValue);\n\t\t\t\tcallbacks.onHttpIdleTimeoutChange(selected?.timeoutMs ?? DEFAULT_HTTP_IDLE_TIMEOUT_MS);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"bash-interceptor\":\n\t\t\t\tcallbacks.onBashInterceptorEnabledChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"hide-thinking\":\n\t\t\t\tcallbacks.onHideThinkingBlockChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"collapse-changelog\":\n\t\t\t\tcallbacks.onCollapseChangelogChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"quiet-startup\":\n\t\t\t\tcallbacks.onQuietStartupChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"install-telemetry\":\n\t\t\t\tcallbacks.onEnableInstallTelemetryChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"default-project-trust\": {\n\t\t\t\tconst defaultProjectTrust = DEFAULT_PROJECT_TRUST_BY_LABEL.get(newValue);\n\t\t\t\tif (defaultProjectTrust) {\n\t\t\t\t\tcallbacks.onDefaultProjectTrustChange(defaultProjectTrust);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"double-escape-action\":\n\t\t\t\tcallbacks.onDoubleEscapeActionChange(newValue as DoubleEscapeAction);\n\t\t\t\tbreak;\n\t\t\tcase \"tree-filter-mode\":\n\t\t\t\tcallbacks.onTreeFilterModeChange(newValue as TreeFilterMode);\n\t\t\t\tbreak;\n\t\t\tcase \"show-hardware-cursor\":\n\t\t\t\tcallbacks.onShowHardwareCursorChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"editor-padding\":\n\t\t\t\tcallbacks.onEditorPaddingXChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"autocomplete-max-visible\":\n\t\t\t\tcallbacks.onAutocompleteMaxVisibleChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"clear-on-shrink\":\n\t\t\t\tcallbacks.onClearOnShrinkChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"terminal-progress\":\n\t\t\t\tcallbacks.onShowTerminalProgressChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"theme\":\n\t\t\t\tcallbacks.onThemeChange(newValue);\n\t\t\t\tbreak;\n\t\t}\n\t};\n}\n"]}
1
+ {"version":3,"file":"settings-selector-handlers.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Transport } from \"@earendil-works/pi-ai/compat\";\nimport { DEFAULT_HTTP_IDLE_TIMEOUT_MS, HTTP_IDLE_TIMEOUT_CHOICES } from \"../../../core/http-dispatcher.ts\";\nimport { DEFAULT_PROJECT_TRUST_BY_LABEL } from \"./settings-selector-options.ts\";\nimport type { DoubleEscapeAction, QueueDeliveryMode, SettingsCallbacks, TreeFilterMode } from \"./settings-selector-types.ts\";\n\nexport function createSettingsChangeHandler(callbacks: SettingsCallbacks): (id: string, newValue: string) => void {\n\treturn (id, newValue) => {\n\t\tswitch (id) {\n\t\t\tcase \"autocompact\":\n\t\t\t\tcallbacks.onAutoCompactChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"show-images\":\n\t\t\t\tcallbacks.onShowImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"image-width-cells\":\n\t\t\t\tcallbacks.onImageWidthCellsChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"auto-resize-images\":\n\t\t\t\tcallbacks.onAutoResizeImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"block-images\":\n\t\t\t\tcallbacks.onBlockImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"skill-commands\":\n\t\t\t\tcallbacks.onEnableSkillCommandsChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"steering-mode\":\n\t\t\t\tcallbacks.onSteeringModeChange(newValue as QueueDeliveryMode);\n\t\t\t\tbreak;\n\t\t\tcase \"follow-up-mode\":\n\t\t\t\tcallbacks.onFollowUpModeChange(newValue as QueueDeliveryMode);\n\t\t\t\tbreak;\n\t\t\tcase \"transport\":\n\t\t\t\tcallbacks.onTransportChange(newValue as Transport);\n\t\t\t\tbreak;\n\t\t\tcase \"http-idle-timeout\": {\n\t\t\t\tconst selected = HTTP_IDLE_TIMEOUT_CHOICES.find((choice) => choice.label === newValue);\n\t\t\t\tcallbacks.onHttpIdleTimeoutChange(selected?.timeoutMs ?? DEFAULT_HTTP_IDLE_TIMEOUT_MS);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"bash-interceptor\":\n\t\t\t\tcallbacks.onBashInterceptorEnabledChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"hide-thinking\":\n\t\t\t\tcallbacks.onHideThinkingBlockChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"collapse-changelog\":\n\t\t\t\tcallbacks.onCollapseChangelogChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"quiet-startup\":\n\t\t\t\tcallbacks.onQuietStartupChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"install-telemetry\":\n\t\t\t\tcallbacks.onEnableInstallTelemetryChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"default-project-trust\": {\n\t\t\t\tconst defaultProjectTrust = DEFAULT_PROJECT_TRUST_BY_LABEL.get(newValue);\n\t\t\t\tif (defaultProjectTrust) {\n\t\t\t\t\tcallbacks.onDefaultProjectTrustChange(defaultProjectTrust);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"double-escape-action\":\n\t\t\t\tcallbacks.onDoubleEscapeActionChange(newValue as DoubleEscapeAction);\n\t\t\t\tbreak;\n\t\t\tcase \"tree-filter-mode\":\n\t\t\t\tcallbacks.onTreeFilterModeChange(newValue as TreeFilterMode);\n\t\t\t\tbreak;\n\t\t\tcase \"show-hardware-cursor\":\n\t\t\t\tcallbacks.onShowHardwareCursorChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"editor-padding\":\n\t\t\t\tcallbacks.onEditorPaddingXChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"output-padding\":\n\t\t\t\tcallbacks.onOutputPadChange(newValue === \"0\" ? 0 : 1);\n\t\t\t\tbreak;\n\t\t\tcase \"autocomplete-max-visible\":\n\t\t\t\tcallbacks.onAutocompleteMaxVisibleChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"clear-on-shrink\":\n\t\t\t\tcallbacks.onClearOnShrinkChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"terminal-progress\":\n\t\t\t\tcallbacks.onShowTerminalProgressChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"cache-miss-notices\":\n\t\t\t\tcallbacks.onShowCacheMissNoticesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"theme\":\n\t\t\t\tcallbacks.onThemeChange(newValue);\n\t\t\t\tbreak;\n\t\t}\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-items.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-items.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAsFtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,GAAG,WAAW,EAAE,CAoJtG"}
1
+ {"version":3,"file":"settings-selector-items.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-items.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAoGtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,GAAG,WAAW,EAAE,CAoJtG"}
@@ -63,6 +63,13 @@ function insertUiToggles(items, config) {
63
63
  values: ["0", "1", "2", "3"],
64
64
  });
65
65
  insertAfter(items, "editor-padding", {
66
+ id: "output-padding",
67
+ label: "Output padding",
68
+ description: "Horizontal padding for rendered chat output (0-1)",
69
+ currentValue: String(config.outputPad),
70
+ values: ["0", "1"],
71
+ });
72
+ insertAfter(items, "output-padding", {
66
73
  id: "autocomplete-max-visible",
67
74
  label: "Autocomplete max items",
68
75
  description: "Max visible items in autocomplete dropdown (3-20)",
@@ -83,6 +90,13 @@ function insertUiToggles(items, config) {
83
90
  currentValue: config.showTerminalProgress ? "true" : "false",
84
91
  values: ["true", "false"],
85
92
  });
93
+ insertAfter(items, "terminal-progress", {
94
+ id: "cache-miss-notices",
95
+ label: "Cache miss notices",
96
+ description: "Show notices when a large prompt cache miss is detected",
97
+ currentValue: config.showCacheMissNotices ? "true" : "false",
98
+ values: ["true", "false"],
99
+ });
86
100
  }
87
101
  export function buildSettingsItems(config, callbacks) {
88
102
  const followUpKey = keyDisplayText("app.message.followUp");
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-items.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-items.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getCapabilities, type SettingItem } from \"@earendil-works/pi-tui\";\nimport { formatHttpIdleTimeoutMs, HTTP_IDLE_TIMEOUT_CHOICES } from \"../../../core/http-dispatcher.ts\";\nimport { keyDisplayText } from \"./keybinding-hints.ts\";\nimport { DEFAULT_PROJECT_TRUST_LABELS, THINKING_DESCRIPTIONS } from \"./settings-selector-options.ts\";\nimport { SelectSubmenu, ThemeSubmenu, WarningSettingsSubmenu } from \"./settings-selector-submenus.ts\";\nimport type { SettingsCallbacks, SettingsConfig } from \"./settings-selector-types.ts\";\n\nfunction insertImageItems(items: SettingItem[], config: SettingsConfig): void {\n\tif (!getCapabilities().images) return;\n\n\titems.splice(1, 0, {\n\t\tid: \"show-images\",\n\t\tlabel: \"Show images\",\n\t\tdescription: \"Render images inline in terminal\",\n\t\tcurrentValue: config.showImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\titems.splice(2, 0, {\n\t\tid: \"image-width-cells\",\n\t\tlabel: \"Image width\",\n\t\tdescription: \"Preferred inline image width in terminal cells\",\n\t\tcurrentValue: String(config.imageWidthCells),\n\t\tvalues: [\"60\", \"80\", \"120\"],\n\t});\n}\n\nfunction insertAfter(items: SettingItem[], afterId: string, item: SettingItem): void {\n\tconst index = items.findIndex((candidate) => candidate.id === afterId);\n\titems.splice(index + 1, 0, item);\n}\n\nfunction insertUiToggles(items: SettingItem[], config: SettingsConfig): void {\n\tconst supportsImages = getCapabilities().images;\n\titems.splice(supportsImages ? 3 : 1, 0, {\n\t\tid: \"auto-resize-images\",\n\t\tlabel: \"Auto-resize images\",\n\t\tdescription: \"Resize large images to 2000x2000 max for better model compatibility\",\n\t\tcurrentValue: config.autoResizeImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"auto-resize-images\", {\n\t\tid: \"block-images\",\n\t\tlabel: \"Block images\",\n\t\tdescription: \"Prevent images from being sent to LLM providers\",\n\t\tcurrentValue: config.blockImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"block-images\", {\n\t\tid: \"skill-commands\",\n\t\tlabel: \"Skill commands\",\n\t\tdescription: \"Register skills as /skill:name commands\",\n\t\tcurrentValue: config.enableSkillCommands ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"skill-commands\", {\n\t\tid: \"show-hardware-cursor\",\n\t\tlabel: \"Show hardware cursor\",\n\t\tdescription: \"Show the terminal cursor while still positioning it for IME support\",\n\t\tcurrentValue: config.showHardwareCursor ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"show-hardware-cursor\", {\n\t\tid: \"editor-padding\",\n\t\tlabel: \"Editor padding\",\n\t\tdescription: \"Horizontal padding for input editor (0-3)\",\n\t\tcurrentValue: String(config.editorPaddingX),\n\t\tvalues: [\"0\", \"1\", \"2\", \"3\"],\n\t});\n\tinsertAfter(items, \"editor-padding\", {\n\t\tid: \"autocomplete-max-visible\",\n\t\tlabel: \"Autocomplete max items\",\n\t\tdescription: \"Max visible items in autocomplete dropdown (3-20)\",\n\t\tcurrentValue: String(config.autocompleteMaxVisible),\n\t\tvalues: [\"3\", \"5\", \"7\", \"10\", \"15\", \"20\"],\n\t});\n\tinsertAfter(items, \"autocomplete-max-visible\", {\n\t\tid: \"clear-on-shrink\",\n\t\tlabel: \"Clear on shrink\",\n\t\tdescription: \"Clear empty rows when content shrinks (may cause flicker)\",\n\t\tcurrentValue: config.clearOnShrink ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"clear-on-shrink\", {\n\t\tid: \"terminal-progress\",\n\t\tlabel: \"Terminal progress\",\n\t\tdescription: \"Show OSC 9;4 progress indicators in the terminal tab bar\",\n\t\tcurrentValue: config.showTerminalProgress ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n}\n\nexport function buildSettingsItems(config: SettingsConfig, callbacks: SettingsCallbacks): SettingItem[] {\n\tconst followUpKey = keyDisplayText(\"app.message.followUp\");\n\tlet currentWarnings = { ...config.warnings };\n\n\tconst items: SettingItem[] = [\n\t\t{\n\t\t\tid: \"autocompact\",\n\t\t\tlabel: \"Auto-compact\",\n\t\t\tdescription: \"Automatically compact context when it gets too large\",\n\t\t\tcurrentValue: config.autoCompact ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"steering-mode\",\n\t\t\tlabel: \"Steering mode\",\n\t\t\tdescription:\n\t\t\t\t\"enter while streaming queues steering messages. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.\",\n\t\t\tcurrentValue: config.steeringMode,\n\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"follow-up-mode\",\n\t\t\tlabel: \"Follow-up mode\",\n\t\t\tdescription: `${followUpKey} queues follow-up messages until agent stops. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.`,\n\t\t\tcurrentValue: config.followUpMode,\n\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"transport\",\n\t\t\tlabel: \"Transport\",\n\t\t\tdescription: \"Preferred transport for providers that support multiple transports\",\n\t\t\tcurrentValue: config.transport,\n\t\t\tvalues: [\"sse\", \"websocket\", \"websocket-cached\", \"auto\"],\n\t\t},\n\t\t{\n\t\t\tid: \"http-idle-timeout\",\n\t\t\tlabel: \"HTTP idle timeout\",\n\t\t\tdescription:\n\t\t\t\t\"Maximum idle gap while waiting for HTTP headers or body chunks. Disable for local models that pause longer than five minutes.\",\n\t\t\tcurrentValue: formatHttpIdleTimeoutMs(config.httpIdleTimeoutMs),\n\t\t\tvalues: HTTP_IDLE_TIMEOUT_CHOICES.map((choice) => choice.label),\n\t\t},\n\t\t{\n\t\t\tid: \"bash-interceptor\",\n\t\t\tlabel: \"Bash Interceptor\",\n\t\t\tdescription: \"Block shell commands that have dedicated tools\",\n\t\t\tcurrentValue: config.bashInterceptorEnabled ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"hide-thinking\",\n\t\t\tlabel: \"Hide thinking\",\n\t\t\tdescription: \"Hide thinking blocks in assistant responses\",\n\t\t\tcurrentValue: config.hideThinkingBlock ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"collapse-changelog\",\n\t\t\tlabel: \"Collapse changelog\",\n\t\t\tdescription: \"Show condensed changelog after updates\",\n\t\t\tcurrentValue: config.collapseChangelog ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"quiet-startup\",\n\t\t\tlabel: \"Quiet startup\",\n\t\t\tdescription: \"Disable verbose printing at startup\",\n\t\t\tcurrentValue: config.quietStartup ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"install-telemetry\",\n\t\t\tlabel: \"Install telemetry\",\n\t\t\tdescription: \"Send an anonymous version/update ping after changelog-detected updates\",\n\t\t\tcurrentValue: config.enableInstallTelemetry ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"default-project-trust\",\n\t\t\tlabel: \"Default project trust\",\n\t\t\tdescription: \"Fallback behavior when no extension or saved trust decision decides project trust\",\n\t\t\tcurrentValue: DEFAULT_PROJECT_TRUST_LABELS[config.defaultProjectTrust],\n\t\t\tvalues: Object.values(DEFAULT_PROJECT_TRUST_LABELS),\n\t\t},\n\t\t{\n\t\t\tid: \"double-escape-action\",\n\t\t\tlabel: \"Double-escape action\",\n\t\t\tdescription: \"Action when pressing esc twice with empty editor\",\n\t\t\tcurrentValue: config.doubleEscapeAction,\n\t\t\tvalues: [\"tree\", \"fork\", \"none\"],\n\t\t},\n\t\t{\n\t\t\tid: \"tree-filter-mode\",\n\t\t\tlabel: \"Tree filter mode\",\n\t\t\tdescription: \"Default filter when opening /tree\",\n\t\t\tcurrentValue: config.treeFilterMode,\n\t\t\tvalues: [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"warnings\",\n\t\t\tlabel: \"Warnings\",\n\t\t\tdescription: \"Enable or disable individual warnings\",\n\t\t\tcurrentValue: \"configure\",\n\t\t\tsubmenu: (_currentValue, done) =>\n\t\t\t\tnew WarningSettingsSubmenu(\n\t\t\t\t\tcurrentWarnings,\n\t\t\t\t\t(warnings) => {\n\t\t\t\t\t\tcurrentWarnings = warnings;\n\t\t\t\t\t\tcallbacks.onWarningsChange(warnings);\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t),\n\t\t},\n\t\t{\n\t\t\tid: \"thinking\",\n\t\t\tlabel: \"Thinking level\",\n\t\t\tdescription: \"Reasoning depth for thinking-capable models\",\n\t\t\tcurrentValue: config.thinkingLevel,\n\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\tnew SelectSubmenu(\n\t\t\t\t\t\"Thinking Level\",\n\t\t\t\t\t\"Select reasoning depth for thinking-capable models\",\n\t\t\t\t\tconfig.availableThinkingLevels.map((level) => ({\n\t\t\t\t\t\tvalue: level,\n\t\t\t\t\t\tlabel: level,\n\t\t\t\t\t\tdescription: THINKING_DESCRIPTIONS[level],\n\t\t\t\t\t})),\n\t\t\t\t\tcurrentValue,\n\t\t\t\t\t(value) => {\n\t\t\t\t\t\tcallbacks.onThinkingLevelChange(value as ThinkingLevel);\n\t\t\t\t\t\tdone(value);\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t),\n\t\t},\n\t\t{\n\t\t\tid: \"theme\",\n\t\t\tlabel: \"Theme\",\n\t\t\tdescription: \"Color theme for the interface\",\n\t\t\tcurrentValue: config.currentTheme,\n\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\tnew ThemeSubmenu(currentValue, config.terminalTheme, config.availableThemes, callbacks, done),\n\t\t},\n\t];\n\n\tinsertImageItems(items, config);\n\tinsertUiToggles(items, config);\n\treturn items;\n}\n"]}
1
+ {"version":3,"file":"settings-selector-items.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-items.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getCapabilities, type SettingItem } from \"@earendil-works/pi-tui\";\nimport { formatHttpIdleTimeoutMs, HTTP_IDLE_TIMEOUT_CHOICES } from \"../../../core/http-dispatcher.ts\";\nimport { keyDisplayText } from \"./keybinding-hints.ts\";\nimport { DEFAULT_PROJECT_TRUST_LABELS, THINKING_DESCRIPTIONS } from \"./settings-selector-options.ts\";\nimport { SelectSubmenu, ThemeSubmenu, WarningSettingsSubmenu } from \"./settings-selector-submenus.ts\";\nimport type { SettingsCallbacks, SettingsConfig } from \"./settings-selector-types.ts\";\n\nfunction insertImageItems(items: SettingItem[], config: SettingsConfig): void {\n\tif (!getCapabilities().images) return;\n\n\titems.splice(1, 0, {\n\t\tid: \"show-images\",\n\t\tlabel: \"Show images\",\n\t\tdescription: \"Render images inline in terminal\",\n\t\tcurrentValue: config.showImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\titems.splice(2, 0, {\n\t\tid: \"image-width-cells\",\n\t\tlabel: \"Image width\",\n\t\tdescription: \"Preferred inline image width in terminal cells\",\n\t\tcurrentValue: String(config.imageWidthCells),\n\t\tvalues: [\"60\", \"80\", \"120\"],\n\t});\n}\n\nfunction insertAfter(items: SettingItem[], afterId: string, item: SettingItem): void {\n\tconst index = items.findIndex((candidate) => candidate.id === afterId);\n\titems.splice(index + 1, 0, item);\n}\n\nfunction insertUiToggles(items: SettingItem[], config: SettingsConfig): void {\n\tconst supportsImages = getCapabilities().images;\n\titems.splice(supportsImages ? 3 : 1, 0, {\n\t\tid: \"auto-resize-images\",\n\t\tlabel: \"Auto-resize images\",\n\t\tdescription: \"Resize large images to 2000x2000 max for better model compatibility\",\n\t\tcurrentValue: config.autoResizeImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"auto-resize-images\", {\n\t\tid: \"block-images\",\n\t\tlabel: \"Block images\",\n\t\tdescription: \"Prevent images from being sent to LLM providers\",\n\t\tcurrentValue: config.blockImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"block-images\", {\n\t\tid: \"skill-commands\",\n\t\tlabel: \"Skill commands\",\n\t\tdescription: \"Register skills as /skill:name commands\",\n\t\tcurrentValue: config.enableSkillCommands ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"skill-commands\", {\n\t\tid: \"show-hardware-cursor\",\n\t\tlabel: \"Show hardware cursor\",\n\t\tdescription: \"Show the terminal cursor while still positioning it for IME support\",\n\t\tcurrentValue: config.showHardwareCursor ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"show-hardware-cursor\", {\n\t\tid: \"editor-padding\",\n\t\tlabel: \"Editor padding\",\n\t\tdescription: \"Horizontal padding for input editor (0-3)\",\n\t\tcurrentValue: String(config.editorPaddingX),\n\t\tvalues: [\"0\", \"1\", \"2\", \"3\"],\n\t});\n\tinsertAfter(items, \"editor-padding\", {\n\t\tid: \"output-padding\",\n\t\tlabel: \"Output padding\",\n\t\tdescription: \"Horizontal padding for rendered chat output (0-1)\",\n\t\tcurrentValue: String(config.outputPad),\n\t\tvalues: [\"0\", \"1\"],\n\t});\n\tinsertAfter(items, \"output-padding\", {\n\t\tid: \"autocomplete-max-visible\",\n\t\tlabel: \"Autocomplete max items\",\n\t\tdescription: \"Max visible items in autocomplete dropdown (3-20)\",\n\t\tcurrentValue: String(config.autocompleteMaxVisible),\n\t\tvalues: [\"3\", \"5\", \"7\", \"10\", \"15\", \"20\"],\n\t});\n\tinsertAfter(items, \"autocomplete-max-visible\", {\n\t\tid: \"clear-on-shrink\",\n\t\tlabel: \"Clear on shrink\",\n\t\tdescription: \"Clear empty rows when content shrinks (may cause flicker)\",\n\t\tcurrentValue: config.clearOnShrink ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"clear-on-shrink\", {\n\t\tid: \"terminal-progress\",\n\t\tlabel: \"Terminal progress\",\n\t\tdescription: \"Show OSC 9;4 progress indicators in the terminal tab bar\",\n\t\tcurrentValue: config.showTerminalProgress ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"terminal-progress\", {\n\t\tid: \"cache-miss-notices\",\n\t\tlabel: \"Cache miss notices\",\n\t\tdescription: \"Show notices when a large prompt cache miss is detected\",\n\t\tcurrentValue: config.showCacheMissNotices ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n}\n\nexport function buildSettingsItems(config: SettingsConfig, callbacks: SettingsCallbacks): SettingItem[] {\n\tconst followUpKey = keyDisplayText(\"app.message.followUp\");\n\tlet currentWarnings = { ...config.warnings };\n\n\tconst items: SettingItem[] = [\n\t\t{\n\t\t\tid: \"autocompact\",\n\t\t\tlabel: \"Auto-compact\",\n\t\t\tdescription: \"Automatically compact context when it gets too large\",\n\t\t\tcurrentValue: config.autoCompact ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"steering-mode\",\n\t\t\tlabel: \"Steering mode\",\n\t\t\tdescription:\n\t\t\t\t\"enter while streaming queues steering messages. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.\",\n\t\t\tcurrentValue: config.steeringMode,\n\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"follow-up-mode\",\n\t\t\tlabel: \"Follow-up mode\",\n\t\t\tdescription: `${followUpKey} queues follow-up messages until agent stops. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.`,\n\t\t\tcurrentValue: config.followUpMode,\n\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"transport\",\n\t\t\tlabel: \"Transport\",\n\t\t\tdescription: \"Preferred transport for providers that support multiple transports\",\n\t\t\tcurrentValue: config.transport,\n\t\t\tvalues: [\"sse\", \"websocket\", \"websocket-cached\", \"auto\"],\n\t\t},\n\t\t{\n\t\t\tid: \"http-idle-timeout\",\n\t\t\tlabel: \"HTTP idle timeout\",\n\t\t\tdescription:\n\t\t\t\t\"Maximum idle gap while waiting for HTTP headers or body chunks. Disable for local models that pause longer than five minutes.\",\n\t\t\tcurrentValue: formatHttpIdleTimeoutMs(config.httpIdleTimeoutMs),\n\t\t\tvalues: HTTP_IDLE_TIMEOUT_CHOICES.map((choice) => choice.label),\n\t\t},\n\t\t{\n\t\t\tid: \"bash-interceptor\",\n\t\t\tlabel: \"Bash Interceptor\",\n\t\t\tdescription: \"Block shell commands that have dedicated tools\",\n\t\t\tcurrentValue: config.bashInterceptorEnabled ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"hide-thinking\",\n\t\t\tlabel: \"Hide thinking\",\n\t\t\tdescription: \"Hide thinking blocks in assistant responses\",\n\t\t\tcurrentValue: config.hideThinkingBlock ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"collapse-changelog\",\n\t\t\tlabel: \"Collapse changelog\",\n\t\t\tdescription: \"Show condensed changelog after updates\",\n\t\t\tcurrentValue: config.collapseChangelog ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"quiet-startup\",\n\t\t\tlabel: \"Quiet startup\",\n\t\t\tdescription: \"Disable verbose printing at startup\",\n\t\t\tcurrentValue: config.quietStartup ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"install-telemetry\",\n\t\t\tlabel: \"Install telemetry\",\n\t\t\tdescription: \"Send an anonymous version/update ping after changelog-detected updates\",\n\t\t\tcurrentValue: config.enableInstallTelemetry ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"default-project-trust\",\n\t\t\tlabel: \"Default project trust\",\n\t\t\tdescription: \"Fallback behavior when no extension or saved trust decision decides project trust\",\n\t\t\tcurrentValue: DEFAULT_PROJECT_TRUST_LABELS[config.defaultProjectTrust],\n\t\t\tvalues: Object.values(DEFAULT_PROJECT_TRUST_LABELS),\n\t\t},\n\t\t{\n\t\t\tid: \"double-escape-action\",\n\t\t\tlabel: \"Double-escape action\",\n\t\t\tdescription: \"Action when pressing esc twice with empty editor\",\n\t\t\tcurrentValue: config.doubleEscapeAction,\n\t\t\tvalues: [\"tree\", \"fork\", \"none\"],\n\t\t},\n\t\t{\n\t\t\tid: \"tree-filter-mode\",\n\t\t\tlabel: \"Tree filter mode\",\n\t\t\tdescription: \"Default filter when opening /tree\",\n\t\t\tcurrentValue: config.treeFilterMode,\n\t\t\tvalues: [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"warnings\",\n\t\t\tlabel: \"Warnings\",\n\t\t\tdescription: \"Enable or disable individual warnings\",\n\t\t\tcurrentValue: \"configure\",\n\t\t\tsubmenu: (_currentValue, done) =>\n\t\t\t\tnew WarningSettingsSubmenu(\n\t\t\t\t\tcurrentWarnings,\n\t\t\t\t\t(warnings) => {\n\t\t\t\t\t\tcurrentWarnings = warnings;\n\t\t\t\t\t\tcallbacks.onWarningsChange(warnings);\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t),\n\t\t},\n\t\t{\n\t\t\tid: \"thinking\",\n\t\t\tlabel: \"Thinking level\",\n\t\t\tdescription: \"Reasoning depth for thinking-capable models\",\n\t\t\tcurrentValue: config.thinkingLevel,\n\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\tnew SelectSubmenu(\n\t\t\t\t\t\"Thinking Level\",\n\t\t\t\t\t\"Select reasoning depth for thinking-capable models\",\n\t\t\t\t\tconfig.availableThinkingLevels.map((level) => ({\n\t\t\t\t\t\tvalue: level,\n\t\t\t\t\t\tlabel: level,\n\t\t\t\t\t\tdescription: THINKING_DESCRIPTIONS[level],\n\t\t\t\t\t})),\n\t\t\t\t\tcurrentValue,\n\t\t\t\t\t(value) => {\n\t\t\t\t\t\tcallbacks.onThinkingLevelChange(value as ThinkingLevel);\n\t\t\t\t\t\tdone(value);\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t),\n\t\t},\n\t\t{\n\t\t\tid: \"theme\",\n\t\t\tlabel: \"Theme\",\n\t\t\tdescription: \"Color theme for the interface\",\n\t\t\tcurrentValue: config.currentTheme,\n\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\tnew ThemeSubmenu(currentValue, config.terminalTheme, config.availableThemes, callbacks, done),\n\t\t},\n\t];\n\n\tinsertImageItems(items, config);\n\tinsertUiToggles(items, config);\n\treturn items;\n}\n"]}
@@ -29,6 +29,8 @@ export interface SettingsConfig {
29
29
  treeFilterMode: TreeFilterMode;
30
30
  showHardwareCursor: boolean;
31
31
  editorPaddingX: number;
32
+ outputPad: 0 | 1;
33
+ showCacheMissNotices: boolean;
32
34
  autocompleteMaxVisible: number;
33
35
  quietStartup: boolean;
34
36
  defaultProjectTrust: DefaultProjectTrust;
@@ -58,6 +60,8 @@ export interface SettingsCallbacks {
58
60
  onTreeFilterModeChange: (mode: TreeFilterMode) => void;
59
61
  onShowHardwareCursorChange: (enabled: boolean) => void;
60
62
  onEditorPaddingXChange: (padding: number) => void;
63
+ onOutputPadChange: (padding: 0 | 1) => void;
64
+ onShowCacheMissNoticesChange: (enabled: boolean) => void;
61
65
  onAutocompleteMaxVisibleChange: (maxVisible: number) => void;
62
66
  onQuietStartupChange: (enabled: boolean) => void;
63
67
  onDefaultProjectTrustChange: (defaultProjectTrust: DefaultProjectTrust) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-types.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-selector-types.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-types.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Transport } from \"@earendil-works/pi-ai/compat\";\nimport type { DefaultProjectTrust, WarningSettings } from \"../../../core/settings-manager.ts\";\nimport type { TerminalTheme } from \"../theme/theme.ts\";\n\nexport type QueueDeliveryMode = \"all\" | \"one-at-a-time\";\nexport type DoubleEscapeAction = \"fork\" | \"tree\" | \"none\";\nexport type TreeFilterMode = \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\";\n\nexport interface SettingsConfig {\n\tautoCompact: boolean;\n\tshowImages: boolean;\n\timageWidthCells: number;\n\tautoResizeImages: boolean;\n\tblockImages: boolean;\n\tenableSkillCommands: boolean;\n\tsteeringMode: QueueDeliveryMode;\n\tfollowUpMode: QueueDeliveryMode;\n\ttransport: Transport;\n\thttpIdleTimeoutMs: number;\n\tbashInterceptorEnabled: boolean;\n\tthinkingLevel: ThinkingLevel;\n\tavailableThinkingLevels: ThinkingLevel[];\n\tcurrentTheme: string;\n\tterminalTheme: TerminalTheme;\n\tavailableThemes: string[];\n\thideThinkingBlock: boolean;\n\tcollapseChangelog: boolean;\n\tenableInstallTelemetry: boolean;\n\tdoubleEscapeAction: DoubleEscapeAction;\n\ttreeFilterMode: TreeFilterMode;\n\tshowHardwareCursor: boolean;\n\teditorPaddingX: number;\n\tautocompleteMaxVisible: number;\n\tquietStartup: boolean;\n\tdefaultProjectTrust: DefaultProjectTrust;\n\tclearOnShrink: boolean;\n\tshowTerminalProgress: boolean;\n\twarnings: WarningSettings;\n}\n\nexport interface SettingsCallbacks {\n\tonAutoCompactChange: (enabled: boolean) => void;\n\tonShowImagesChange: (enabled: boolean) => void;\n\tonImageWidthCellsChange: (width: number) => void;\n\tonAutoResizeImagesChange: (enabled: boolean) => void;\n\tonBlockImagesChange: (blocked: boolean) => void;\n\tonEnableSkillCommandsChange: (enabled: boolean) => void;\n\tonSteeringModeChange: (mode: QueueDeliveryMode) => void;\n\tonFollowUpModeChange: (mode: QueueDeliveryMode) => void;\n\tonTransportChange: (transport: Transport) => void;\n\tonHttpIdleTimeoutChange: (timeoutMs: number) => void;\n\tonBashInterceptorEnabledChange: (enabled: boolean) => void;\n\tonThinkingLevelChange: (level: ThinkingLevel) => void;\n\tonThemeChange: (theme: string) => void;\n\tonThemePreview?: (theme: string) => void;\n\tonHideThinkingBlockChange: (hidden: boolean) => void;\n\tonCollapseChangelogChange: (collapsed: boolean) => void;\n\tonEnableInstallTelemetryChange: (enabled: boolean) => void;\n\tonDoubleEscapeActionChange: (action: DoubleEscapeAction) => void;\n\tonTreeFilterModeChange: (mode: TreeFilterMode) => void;\n\tonShowHardwareCursorChange: (enabled: boolean) => void;\n\tonEditorPaddingXChange: (padding: number) => void;\n\tonAutocompleteMaxVisibleChange: (maxVisible: number) => void;\n\tonQuietStartupChange: (enabled: boolean) => void;\n\tonDefaultProjectTrustChange: (defaultProjectTrust: DefaultProjectTrust) => void;\n\tonClearOnShrinkChange: (enabled: boolean) => void;\n\tonShowTerminalProgressChange: (enabled: boolean) => void;\n\tonWarningsChange: (warnings: WarningSettings) => void;\n\tonCancel: () => void;\n}\n"]}
1
+ {"version":3,"file":"settings-selector-types.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Transport } from \"@earendil-works/pi-ai/compat\";\nimport type { DefaultProjectTrust, WarningSettings } from \"../../../core/settings-manager.ts\";\nimport type { TerminalTheme } from \"../theme/theme.ts\";\n\nexport type QueueDeliveryMode = \"all\" | \"one-at-a-time\";\nexport type DoubleEscapeAction = \"fork\" | \"tree\" | \"none\";\nexport type TreeFilterMode = \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\";\n\nexport interface SettingsConfig {\n\tautoCompact: boolean;\n\tshowImages: boolean;\n\timageWidthCells: number;\n\tautoResizeImages: boolean;\n\tblockImages: boolean;\n\tenableSkillCommands: boolean;\n\tsteeringMode: QueueDeliveryMode;\n\tfollowUpMode: QueueDeliveryMode;\n\ttransport: Transport;\n\thttpIdleTimeoutMs: number;\n\tbashInterceptorEnabled: boolean;\n\tthinkingLevel: ThinkingLevel;\n\tavailableThinkingLevels: ThinkingLevel[];\n\tcurrentTheme: string;\n\tterminalTheme: TerminalTheme;\n\tavailableThemes: string[];\n\thideThinkingBlock: boolean;\n\tcollapseChangelog: boolean;\n\tenableInstallTelemetry: boolean;\n\tdoubleEscapeAction: DoubleEscapeAction;\n\ttreeFilterMode: TreeFilterMode;\n\tshowHardwareCursor: boolean;\n\teditorPaddingX: number;\n\toutputPad: 0 | 1;\n\tshowCacheMissNotices: boolean;\n\tautocompleteMaxVisible: number;\n\tquietStartup: boolean;\n\tdefaultProjectTrust: DefaultProjectTrust;\n\tclearOnShrink: boolean;\n\tshowTerminalProgress: boolean;\n\twarnings: WarningSettings;\n}\n\nexport interface SettingsCallbacks {\n\tonAutoCompactChange: (enabled: boolean) => void;\n\tonShowImagesChange: (enabled: boolean) => void;\n\tonImageWidthCellsChange: (width: number) => void;\n\tonAutoResizeImagesChange: (enabled: boolean) => void;\n\tonBlockImagesChange: (blocked: boolean) => void;\n\tonEnableSkillCommandsChange: (enabled: boolean) => void;\n\tonSteeringModeChange: (mode: QueueDeliveryMode) => void;\n\tonFollowUpModeChange: (mode: QueueDeliveryMode) => void;\n\tonTransportChange: (transport: Transport) => void;\n\tonHttpIdleTimeoutChange: (timeoutMs: number) => void;\n\tonBashInterceptorEnabledChange: (enabled: boolean) => void;\n\tonThinkingLevelChange: (level: ThinkingLevel) => void;\n\tonThemeChange: (theme: string) => void;\n\tonThemePreview?: (theme: string) => void;\n\tonHideThinkingBlockChange: (hidden: boolean) => void;\n\tonCollapseChangelogChange: (collapsed: boolean) => void;\n\tonEnableInstallTelemetryChange: (enabled: boolean) => void;\n\tonDoubleEscapeActionChange: (action: DoubleEscapeAction) => void;\n\tonTreeFilterModeChange: (mode: TreeFilterMode) => void;\n\tonShowHardwareCursorChange: (enabled: boolean) => void;\n\tonEditorPaddingXChange: (padding: number) => void;\n\tonOutputPadChange: (padding: 0 | 1) => void;\n\tonShowCacheMissNoticesChange: (enabled: boolean) => void;\n\tonAutocompleteMaxVisibleChange: (maxVisible: number) => void;\n\tonQuietStartupChange: (enabled: boolean) => void;\n\tonDefaultProjectTrustChange: (defaultProjectTrust: DefaultProjectTrust) => void;\n\tonClearOnShrinkChange: (enabled: boolean) => void;\n\tonShowTerminalProgressChange: (enabled: boolean) => void;\n\tonWarningsChange: (warnings: WarningSettings) => void;\n\tonCancel: () => void;\n}\n"]}
@@ -3,6 +3,9 @@ import { Loader, Spacer, Text, pickWhimsicalWorkingMessage, AssistantMessageComp
3
3
  import { appendNewChildrenBeforeAttachedChild } from "./interactive-child-ordering.js";
4
4
  import { IsolatedInteractiveRuntime } from "../interactive-engine/isolated-runtime.js";
5
5
  import { RemoteToolExecutionComponent } from "../interactive-engine/remote-renderer.js";
6
+ import { handleSummarizationRetryEvent } from "./interactive-summarization-retry-events.js";
7
+ import { CACHE_TTL_MS, detectCacheMiss } from "../../core/cache-stats.js";
8
+ import { mountIdleStatus } from "./components/idle-status.js";
6
9
  function createToolComponent(mode, toolName, toolCallId, args) {
7
10
  const options = {
8
11
  showImages: mode.settingsManager.getShowImages(),
@@ -90,6 +93,14 @@ InteractiveModeBase.prototype.handleEvent = async function (event) {
90
93
  this.usageMeter.invalidate();
91
94
  this.ui.requestRender();
92
95
  break;
96
+ case "entry_appended":
97
+ if (event.entry.type === "custom")
98
+ this.addCustomEntryToChat(event.entry);
99
+ this.ui.requestRender();
100
+ break;
101
+ case "agent_settled":
102
+ await this.checkShutdownRequested();
103
+ break;
93
104
  case "message_start":
94
105
  if (event.message.role === "custom") {
95
106
  appendNewChildrenBeforeAttachedChild(this.chatContainer, this.streamingComponent, () => this.addMessageToChat(event.message));
@@ -173,6 +184,13 @@ InteractiveModeBase.prototype.handleEvent = async function (event) {
173
184
  this.streamingMessage = undefined;
174
185
  this.footer.invalidate();
175
186
  }
187
+ if (event.message.role === "assistant" && this.settingsManager.getShowCacheMissNotices()) {
188
+ const miss = detectCacheMiss(this.sessionManager.getEntries(), event.message, { getModel: (provider, model) => this.session.modelRegistry.find(provider, model) });
189
+ if (miss) {
190
+ const cause = miss.modelChanged ? " after model switch" : miss.idleMs >= CACHE_TTL_MS ? " after cache TTL expiry" : "";
191
+ this.chatContainer.addChild(new Text(theme.fg("warning", `Prompt cache miss${cause}: ${miss.missedTokens.toLocaleString()} tokens re-billed ($${miss.missedCost.toFixed(3)})`), 1, 0));
192
+ }
193
+ }
176
194
  this.ui.requestRender();
177
195
  break;
178
196
  case "tool_execution_start": {
@@ -212,6 +230,7 @@ InteractiveModeBase.prototype.handleEvent = async function (event) {
212
230
  this.loadingAnimation.stop();
213
231
  this.loadingAnimation = undefined;
214
232
  this.statusContainer.clear();
233
+ mountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());
215
234
  }
216
235
  if (this.streamingComponent) {
217
236
  this.chatContainer.removeChild(this.streamingComponent);
@@ -265,6 +284,7 @@ InteractiveModeBase.prototype.handleEvent = async function (event) {
265
284
  this.autoCompactionLoader.stop();
266
285
  this.autoCompactionLoader = undefined;
267
286
  this.statusContainer.clear();
287
+ mountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());
268
288
  }
269
289
  if (event.aborted) {
270
290
  if (event.reason === "manual") {
@@ -299,6 +319,11 @@ InteractiveModeBase.prototype.handleEvent = async function (event) {
299
319
  this.ui.requestRender();
300
320
  break;
301
321
  }
322
+ case "summarization_retry_scheduled":
323
+ case "summarization_retry_attempt_start":
324
+ case "summarization_retry_finished":
325
+ handleSummarizationRetryEvent(this, event);
326
+ break;
302
327
  case "auto_retry_start": {
303
328
  // Set up escape to abort retry
304
329
  this.retryEscapeHandler = this.defaultEditor.onEscape;
@@ -336,6 +361,7 @@ InteractiveModeBase.prototype.handleEvent = async function (event) {
336
361
  this.fallbackLoader = undefined;
337
362
  }
338
363
  this.statusContainer.clear();
364
+ mountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());
339
365
  this.ui.requestRender();
340
366
  break;
341
367
  }
@@ -354,6 +380,7 @@ InteractiveModeBase.prototype.handleEvent = async function (event) {
354
380
  this.retryLoader.stop();
355
381
  this.retryLoader = undefined;
356
382
  this.statusContainer.clear();
383
+ mountIdleStatus(this.statusContainer, this.settingsManager.getClearOnShrink());
357
384
  }
358
385
  // Show error only on final failure (success shows normal response)
359
386
  if (!event.success) {