@astralyn/pi 1.4.5 → 1.4.7

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 (324) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/bundle/chunks/chunk-FODCTZXW.js +230 -0
  3. package/dist/bundle/chunks/{chunk-I5S7H7GA.js → chunk-FYKNSJG6.js} +1 -1
  4. package/dist/bundle/chunks/{chunk-AXFWZIHH.js → chunk-MG5XDTXV.js} +1 -1
  5. package/dist/bundle/chunks/{chunk-ALHAFUHP.js → chunk-PU2IWWXV.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-5M3YJ54Z.js → chunk-RO2VH6UZ.js} +1 -1
  7. package/dist/bundle/chunks/chunk-YJTSOLP2.js +1499 -0
  8. package/dist/bundle/chunks/{cli-FH77R7JR.js → cli-MEL7SGJD.js} +1 -1
  9. package/dist/bundle/chunks/{execute-GMFGC27P.js → execute-4CWRNHPO.js} +1 -1
  10. package/dist/bundle/chunks/{runtime-R5CMHJ5P.js → runtime-R3X67XMR.js} +1 -1
  11. package/dist/bundle/chunks/{virtual-modules-6FUV7ZDV.js → virtual-modules-PKEOKGYI.js} +1 -1
  12. package/dist/bundle/cli.js +1 -1
  13. package/dist/bundle/index.js +1 -1
  14. package/dist/bundle/rpc-entry.js +1 -1
  15. package/dist/core/agent-session.d.ts +0 -3
  16. package/dist/core/agent-session.d.ts.map +1 -1
  17. package/dist/core/agent-session.js +0 -4
  18. package/dist/core/agent-session.js.map +1 -1
  19. package/dist/core/extensions/index.d.ts +1 -1
  20. package/dist/core/extensions/index.d.ts.map +1 -1
  21. package/dist/core/extensions/index.js.map +1 -1
  22. package/dist/core/isolated-session.d.ts +23 -0
  23. package/dist/core/isolated-session.d.ts.map +1 -0
  24. package/dist/core/isolated-session.js +55 -0
  25. package/dist/core/isolated-session.js.map +1 -0
  26. package/dist/core/package-manager.d.ts +7 -1
  27. package/dist/core/package-manager.d.ts.map +1 -1
  28. package/dist/core/package-manager.js +72 -1
  29. package/dist/core/package-manager.js.map +1 -1
  30. package/dist/core/resource-loader.d.ts +1 -0
  31. package/dist/core/resource-loader.d.ts.map +1 -1
  32. package/dist/core/resource-loader.js +23 -7
  33. package/dist/core/resource-loader.js.map +1 -1
  34. package/dist/core/settings-manager.d.ts +4 -2
  35. package/dist/core/settings-manager.d.ts.map +1 -1
  36. package/dist/core/settings-manager.js +11 -0
  37. package/dist/core/settings-manager.js.map +1 -1
  38. package/dist/core/settings-schema.d.ts +7 -0
  39. package/dist/core/settings-schema.d.ts.map +1 -1
  40. package/dist/core/settings-schema.js +6 -0
  41. package/dist/core/settings-schema.js.map +1 -1
  42. package/dist/core/skills.d.ts +10 -0
  43. package/dist/core/skills.d.ts.map +1 -1
  44. package/dist/core/skills.js +23 -0
  45. package/dist/core/skills.js.map +1 -1
  46. package/dist/core/tasks/codec.d.ts +12 -0
  47. package/dist/core/tasks/codec.d.ts.map +1 -0
  48. package/dist/core/tasks/codec.js +139 -0
  49. package/dist/core/tasks/codec.js.map +1 -0
  50. package/dist/core/tasks/delivery.d.ts +11 -4
  51. package/dist/core/tasks/delivery.d.ts.map +1 -1
  52. package/dist/core/tasks/delivery.js +9 -9
  53. package/dist/core/tasks/delivery.js.map +1 -1
  54. package/dist/core/tasks/execution.d.ts +71 -0
  55. package/dist/core/tasks/execution.d.ts.map +1 -0
  56. package/dist/core/tasks/execution.js +292 -0
  57. package/dist/core/tasks/execution.js.map +1 -0
  58. package/dist/core/tasks/format.d.ts +0 -2
  59. package/dist/core/tasks/format.d.ts.map +1 -1
  60. package/dist/core/tasks/format.js +1 -16
  61. package/dist/core/tasks/format.js.map +1 -1
  62. package/dist/core/tasks/limits.d.ts +12 -1
  63. package/dist/core/tasks/limits.d.ts.map +1 -1
  64. package/dist/core/tasks/limits.js +20 -1
  65. package/dist/core/tasks/limits.js.map +1 -1
  66. package/dist/core/tasks/output.d.ts +17 -17
  67. package/dist/core/tasks/output.d.ts.map +1 -1
  68. package/dist/core/tasks/output.js +72 -69
  69. package/dist/core/tasks/output.js.map +1 -1
  70. package/dist/core/tasks/presentation.d.ts +14 -5
  71. package/dist/core/tasks/presentation.d.ts.map +1 -1
  72. package/dist/core/tasks/presentation.js +56 -185
  73. package/dist/core/tasks/presentation.js.map +1 -1
  74. package/dist/core/tasks/record.d.ts +45 -0
  75. package/dist/core/tasks/record.d.ts.map +1 -0
  76. package/dist/core/tasks/record.js +80 -0
  77. package/dist/core/tasks/record.js.map +1 -0
  78. package/dist/core/tasks/runtime.d.ts +22 -22
  79. package/dist/core/tasks/runtime.d.ts.map +1 -1
  80. package/dist/core/tasks/runtime.js +170 -343
  81. package/dist/core/tasks/runtime.js.map +1 -1
  82. package/dist/core/tasks/scheduler.d.ts +16 -0
  83. package/dist/core/tasks/scheduler.d.ts.map +1 -0
  84. package/dist/core/tasks/scheduler.js +42 -0
  85. package/dist/core/tasks/scheduler.js.map +1 -0
  86. package/dist/core/tasks/session.d.ts +1 -1
  87. package/dist/core/tasks/session.d.ts.map +1 -1
  88. package/dist/core/tasks/session.js +22 -35
  89. package/dist/core/tasks/session.js.map +1 -1
  90. package/dist/core/tasks/store.d.ts +18 -25
  91. package/dist/core/tasks/store.d.ts.map +1 -1
  92. package/dist/core/tasks/store.js +45 -43
  93. package/dist/core/tasks/store.js.map +1 -1
  94. package/dist/core/tasks/types.d.ts +159 -70
  95. package/dist/core/tasks/types.d.ts.map +1 -1
  96. package/dist/core/tasks/types.js +3 -9
  97. package/dist/core/tasks/types.js.map +1 -1
  98. package/dist/core/tools/shell-execution.d.ts +8 -7
  99. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  100. package/dist/core/tools/shell-execution.js +19 -27
  101. package/dist/core/tools/shell-execution.js.map +1 -1
  102. package/dist/core/tools/shell-tool.d.ts.map +1 -1
  103. package/dist/core/tools/shell-tool.js +42 -47
  104. package/dist/core/tools/shell-tool.js.map +1 -1
  105. package/dist/core/usage-totals.d.ts +4 -3
  106. package/dist/core/usage-totals.d.ts.map +1 -1
  107. package/dist/core/usage-totals.js +32 -8
  108. package/dist/core/usage-totals.js.map +1 -1
  109. package/dist/extensions/agent/activity.d.ts +4 -4
  110. package/dist/extensions/agent/activity.d.ts.map +1 -1
  111. package/dist/extensions/agent/activity.js +15 -24
  112. package/dist/extensions/agent/activity.js.map +1 -1
  113. package/dist/extensions/agent/index.d.ts +2 -11
  114. package/dist/extensions/agent/index.d.ts.map +1 -1
  115. package/dist/extensions/agent/index.js +3 -88
  116. package/dist/extensions/agent/index.js.map +1 -1
  117. package/dist/extensions/agent/progress.d.ts +31 -0
  118. package/dist/extensions/agent/progress.d.ts.map +1 -0
  119. package/dist/extensions/agent/progress.js +135 -0
  120. package/dist/extensions/agent/progress.js.map +1 -0
  121. package/dist/extensions/agent/render.d.ts.map +1 -1
  122. package/dist/extensions/agent/render.js +8 -17
  123. package/dist/extensions/agent/render.js.map +1 -1
  124. package/dist/extensions/agent/report.d.ts +9 -0
  125. package/dist/extensions/agent/report.d.ts.map +1 -0
  126. package/dist/extensions/agent/report.js +40 -0
  127. package/dist/extensions/agent/report.js.map +1 -0
  128. package/dist/extensions/agent/settings-panel.d.ts +43 -0
  129. package/dist/extensions/agent/settings-panel.d.ts.map +1 -0
  130. package/dist/extensions/agent/settings-panel.js +125 -0
  131. package/dist/extensions/agent/settings-panel.js.map +1 -0
  132. package/dist/extensions/agent/settings.d.ts +1 -1
  133. package/dist/extensions/agent/settings.d.ts.map +1 -1
  134. package/dist/extensions/agent/settings.js +101 -83
  135. package/dist/extensions/agent/settings.js.map +1 -1
  136. package/dist/extensions/agent/tool.d.ts +13 -0
  137. package/dist/extensions/agent/tool.d.ts.map +1 -0
  138. package/dist/extensions/agent/tool.js +88 -0
  139. package/dist/extensions/agent/tool.js.map +1 -0
  140. package/dist/extensions/agent/types.d.ts +19 -21
  141. package/dist/extensions/agent/types.d.ts.map +1 -1
  142. package/dist/extensions/agent/types.js +2 -10
  143. package/dist/extensions/agent/types.js.map +1 -1
  144. package/dist/extensions/agent/worker.d.ts +16 -0
  145. package/dist/extensions/agent/worker.d.ts.map +1 -0
  146. package/dist/extensions/agent/worker.js +66 -0
  147. package/dist/extensions/agent/worker.js.map +1 -0
  148. package/dist/extensions/btw/agent.d.ts +1 -1
  149. package/dist/extensions/btw/agent.d.ts.map +1 -1
  150. package/dist/extensions/btw/agent.js +3 -20
  151. package/dist/extensions/btw/agent.js.map +1 -1
  152. package/dist/extensions/cached-compaction/index.d.ts.map +1 -1
  153. package/dist/extensions/cached-compaction/index.js +3 -22
  154. package/dist/extensions/cached-compaction/index.js.map +1 -1
  155. package/dist/extensions/cached-compaction/render.d.ts +1 -0
  156. package/dist/extensions/cached-compaction/render.d.ts.map +1 -1
  157. package/dist/extensions/cached-compaction/render.js +42 -14
  158. package/dist/extensions/cached-compaction/render.js.map +1 -1
  159. package/dist/extensions/deepwiki/client.d.ts.map +1 -1
  160. package/dist/extensions/deepwiki/client.js +6 -78
  161. package/dist/extensions/deepwiki/client.js.map +1 -1
  162. package/dist/extensions/deepwiki/transport.d.ts +3 -0
  163. package/dist/extensions/deepwiki/transport.d.ts.map +1 -0
  164. package/dist/extensions/deepwiki/transport.js +96 -0
  165. package/dist/extensions/deepwiki/transport.js.map +1 -0
  166. package/dist/extensions/provider/ui/builtin-data.d.ts +3 -3
  167. package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
  168. package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
  169. package/dist/extensions/provider/ui/compat.d.ts +3 -3
  170. package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
  171. package/dist/extensions/provider/ui/compat.js.map +1 -1
  172. package/dist/extensions/provider/ui/controls.d.ts +2 -2
  173. package/dist/extensions/provider/ui/controls.d.ts.map +1 -1
  174. package/dist/extensions/provider/ui/controls.js.map +1 -1
  175. package/dist/extensions/provider/ui/dialogs.d.ts +3 -3
  176. package/dist/extensions/provider/ui/dialogs.d.ts.map +1 -1
  177. package/dist/extensions/provider/ui/dialogs.js.map +1 -1
  178. package/dist/extensions/provider/ui/dictionary.d.ts +2 -2
  179. package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
  180. package/dist/extensions/provider/ui/dictionary.js.map +1 -1
  181. package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
  182. package/dist/extensions/provider/ui/editor.js +1 -3
  183. package/dist/extensions/provider/ui/editor.js.map +1 -1
  184. package/dist/extensions/provider/ui/fetch-models.d.ts +2 -2
  185. package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
  186. package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
  187. package/dist/extensions/provider/ui/model-fields.d.ts +2 -2
  188. package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
  189. package/dist/extensions/provider/ui/model-fields.js.map +1 -1
  190. package/dist/extensions/provider/ui/model-options.d.ts +6 -6
  191. package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
  192. package/dist/extensions/provider/ui/model-options.js.map +1 -1
  193. package/dist/extensions/provider/ui/pane.d.ts +21 -12
  194. package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
  195. package/dist/extensions/provider/ui/pane.js.map +1 -1
  196. package/dist/extensions/provider/ui/provider-fields.d.ts +3 -3
  197. package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
  198. package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
  199. package/dist/extensions/provider/ui/thinking-map.d.ts +2 -2
  200. package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
  201. package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
  202. package/dist/extensions/run-summary/format.js +1 -1
  203. package/dist/extensions/run-summary/format.js.map +1 -1
  204. package/dist/extensions/statusline/usage.d.ts.map +1 -1
  205. package/dist/extensions/statusline/usage.js +2 -6
  206. package/dist/extensions/statusline/usage.js.map +1 -1
  207. package/dist/extensions/tasks/tool/actions.d.ts +1 -1
  208. package/dist/extensions/tasks/tool/actions.d.ts.map +1 -1
  209. package/dist/extensions/tasks/tool/actions.js +50 -115
  210. package/dist/extensions/tasks/tool/actions.js.map +1 -1
  211. package/dist/extensions/tasks/tool/constants.d.ts +1 -6
  212. package/dist/extensions/tasks/tool/constants.d.ts.map +1 -1
  213. package/dist/extensions/tasks/tool/constants.js +1 -6
  214. package/dist/extensions/tasks/tool/constants.js.map +1 -1
  215. package/dist/extensions/tasks/tool/schema.d.ts +0 -3
  216. package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
  217. package/dist/extensions/tasks/tool/schema.js +5 -14
  218. package/dist/extensions/tasks/tool/schema.js.map +1 -1
  219. package/dist/extensions/tasks/tool/types.d.ts +2 -8
  220. package/dist/extensions/tasks/tool/types.d.ts.map +1 -1
  221. package/dist/extensions/tasks/tool/types.js +0 -2
  222. package/dist/extensions/tasks/tool/types.js.map +1 -1
  223. package/dist/extensions/tasks/tool.d.ts.map +1 -1
  224. package/dist/extensions/tasks/tool.js +2 -2
  225. package/dist/extensions/tasks/tool.js.map +1 -1
  226. package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
  227. package/dist/extensions/tasks/ui/completion-render.js +46 -47
  228. package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
  229. package/dist/extensions/tasks/ui/inspector.d.ts +5 -3
  230. package/dist/extensions/tasks/ui/inspector.d.ts.map +1 -1
  231. package/dist/extensions/tasks/ui/inspector.js +18 -6
  232. package/dist/extensions/tasks/ui/inspector.js.map +1 -1
  233. package/dist/extensions/tasks/ui/layout.d.ts +7 -7
  234. package/dist/extensions/tasks/ui/layout.d.ts.map +1 -1
  235. package/dist/extensions/tasks/ui/layout.js +118 -84
  236. package/dist/extensions/tasks/ui/layout.js.map +1 -1
  237. package/dist/extensions/tasks/ui/list.d.ts.map +1 -1
  238. package/dist/extensions/tasks/ui/list.js +45 -31
  239. package/dist/extensions/tasks/ui/list.js.map +1 -1
  240. package/dist/extensions/tasks/ui/manager.d.ts +16 -7
  241. package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
  242. package/dist/extensions/tasks/ui/manager.js +167 -129
  243. package/dist/extensions/tasks/ui/manager.js.map +1 -1
  244. package/dist/extensions/tasks/ui/model.d.ts +29 -0
  245. package/dist/extensions/tasks/ui/model.d.ts.map +1 -1
  246. package/dist/extensions/tasks/ui/model.js +16 -1
  247. package/dist/extensions/tasks/ui/model.js.map +1 -1
  248. package/dist/extensions/tasks/ui/render.d.ts +1 -1
  249. package/dist/extensions/tasks/ui/render.d.ts.map +1 -1
  250. package/dist/extensions/tasks/ui/render.js +12 -9
  251. package/dist/extensions/tasks/ui/render.js.map +1 -1
  252. package/dist/extensions/tasks/ui/status.d.ts +15 -0
  253. package/dist/extensions/tasks/ui/status.d.ts.map +1 -0
  254. package/dist/extensions/tasks/ui/status.js +16 -0
  255. package/dist/extensions/tasks/ui/status.js.map +1 -0
  256. package/dist/extensions/tasks/ui/tree.js +1 -1
  257. package/dist/extensions/tasks/ui/tree.js.map +1 -1
  258. package/dist/extensions/tasks/ui/views.d.ts +10 -5
  259. package/dist/extensions/tasks/ui/views.d.ts.map +1 -1
  260. package/dist/extensions/tasks/ui/views.js +61 -36
  261. package/dist/extensions/tasks/ui/views.js.map +1 -1
  262. package/dist/index.d.ts +2 -1
  263. package/dist/index.d.ts.map +1 -1
  264. package/dist/index.js.map +1 -1
  265. package/dist/modes/interactive/components/config-selector.d.ts +14 -1
  266. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  267. package/dist/modes/interactive/components/config-selector.js +258 -7
  268. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  269. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  270. package/dist/modes/interactive/components/keybinding-hints.js +2 -1
  271. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  272. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  273. package/dist/modes/interactive/components/model-selector.js +7 -4
  274. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  275. package/dist/modes/interactive/components/status-marker.d.ts +2 -1
  276. package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
  277. package/dist/modes/interactive/components/status-marker.js +0 -1
  278. package/dist/modes/interactive/components/status-marker.js.map +1 -1
  279. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  280. package/dist/modes/interactive/components/thinking-selector.js +10 -3
  281. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  282. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  283. package/dist/modes/interactive/interactive-mode.js +7 -1
  284. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  285. package/dist/utils/duration.d.ts +3 -0
  286. package/dist/utils/duration.d.ts.map +1 -0
  287. package/dist/utils/duration.js +17 -0
  288. package/dist/utils/duration.js.map +1 -0
  289. package/dist/utils/number.d.ts +3 -0
  290. package/dist/utils/number.d.ts.map +1 -0
  291. package/dist/utils/number.js +5 -0
  292. package/dist/utils/number.js.map +1 -0
  293. package/docs/bundled/extensions/agent.md +14 -12
  294. package/docs/bundled/extensions/cached-compaction.md +13 -4
  295. package/docs/bundled/extensions/deepwiki.md +3 -1
  296. package/docs/bundled/extensions/statusline.md +1 -1
  297. package/docs/bundled/tasks.md +15 -14
  298. package/docs/extensions.md +26 -10
  299. package/docs/packages.md +5 -3
  300. package/docs/sdk.md +3 -3
  301. package/docs/session-format.md +28 -24
  302. package/docs/settings.md +11 -0
  303. package/docs/skills.md +23 -0
  304. package/npm-shrinkwrap.json +2 -2
  305. package/package.json +1 -1
  306. package/schemas/settings.schema.json +36 -0
  307. package/dist/bundle/chunks/chunk-FSJ45CRP.js +0 -229
  308. package/dist/bundle/chunks/chunk-W3FIUMGM.js +0 -1501
  309. package/dist/core/tasks/history.d.ts +0 -4
  310. package/dist/core/tasks/history.d.ts.map +0 -1
  311. package/dist/core/tasks/history.js +0 -131
  312. package/dist/core/tasks/history.js.map +0 -1
  313. package/dist/extensions/agent/runner.d.ts +0 -24
  314. package/dist/extensions/agent/runner.d.ts.map +0 -1
  315. package/dist/extensions/agent/runner.js +0 -274
  316. package/dist/extensions/agent/runner.js.map +0 -1
  317. package/dist/extensions/deepwiki/http.d.ts +0 -13
  318. package/dist/extensions/deepwiki/http.d.ts.map +0 -1
  319. package/dist/extensions/deepwiki/http.js +0 -88
  320. package/dist/extensions/deepwiki/http.js.map +0 -1
  321. package/dist/extensions/tasks/ui/task-view.d.ts +0 -13
  322. package/dist/extensions/tasks/ui/task-view.d.ts.map +0 -1
  323. package/dist/extensions/tasks/ui/task-view.js +0 -20
  324. package/dist/extensions/tasks/ui/task-view.js.map +0 -1
@@ -1,5 +1,4 @@
1
1
  /** Pane contract for the /provider two-pane editor's right column. */
2
- import type { TUI } from "@earendil-works/pi-tui";
3
2
  import type { KeybindingsManager } from "../../../core/keybindings.ts";
4
3
  import type { ModelsJsonModel } from "../../../core/model-config.ts";
5
4
  import type { Theme } from "../../../modes/interactive/theme/theme.ts";
@@ -32,36 +31,46 @@ export interface EditorPane {
32
31
  hints(): string;
33
32
  dispose?(): void;
34
33
  }
35
- export interface EditorHost {
36
- readonly tui: TUI;
34
+ /** What every pane gets: rendering resources, right-column navigation, and user feedback. */
35
+ export interface PaneHost {
37
36
  readonly theme: Theme;
38
37
  readonly keybindings: KeybindingsManager;
39
- readonly store: ProviderView;
40
- readonly edits: Pick<ProviderEdits, "setProviderField" | "removeModel" | "batch">;
41
- readonly providerId: string;
42
38
  pushPane(pane: EditorPane): void;
43
39
  popPane(): void;
44
40
  refresh(): void;
45
41
  notify(message: string, type: "info" | "warning" | "error"): void;
42
+ /** Push an in-editor Yes/No confirm into the right column. */
43
+ confirm(message: string, actionLabel: string, action: () => void): void;
44
+ }
45
+ /** A pane that reads or edits the provider being configured. */
46
+ export interface ProviderPaneHost extends PaneHost {
47
+ readonly store: ProviderView;
48
+ readonly edits: Pick<ProviderEdits, "setProviderField" | "removeModel" | "batch">;
49
+ readonly providerId: string;
46
50
  /** Effective api/baseUrl after provider-level and builtin-overlay fallbacks. */
47
51
  effectiveApi(model?: Partial<ModelsJsonModel>): string | undefined;
48
52
  effectiveBaseUrl(model?: Partial<ModelsJsonModel>): string | undefined;
53
+ }
54
+ /** The model fields pane, which also changes the left column's model rows. */
55
+ export interface ModelFieldsHost extends ProviderPaneHost {
49
56
  /** Commit the pending model draft (id validation + addModel op); returns an error or undefined. */
50
57
  commitModelDraft(): string | undefined;
51
58
  /** Drop the in-memory model draft; the left column returns to + Add Model. */
52
59
  discardModelDraft(): void;
53
- /** Current session model protection (§4.3): no delete/rename of the active model or its provider. */
60
+ /** Current session model protection (§4.3): no delete/rename of the active model. */
54
61
  isCurrentModel(modelId: string): boolean;
55
- isCurrentProvider(): boolean;
62
+ /** A model was just removed: rebuild the left column and reset the right stack. */
63
+ onModelRemoved(modelId: string): void;
64
+ }
65
+ /** The Fetch Models pane. */
66
+ export interface FetchModelsHost extends ProviderPaneHost {
56
67
  /** Last Fetch Models outcome shown next to the left-column action row. */
57
68
  setFetchStatus(status: string | undefined): void;
58
69
  /** Refresh the provider, resolve auth canonically, and GET {baseUrl}/models. */
59
70
  runFetch(signal: AbortSignal): Promise<ProbeResult>;
60
71
  /** Validate + batch-add imported models, save once, refresh; returns an error or undefined. */
61
72
  importModels(models: readonly ProbeModel[], signal: AbortSignal): Promise<string | undefined>;
62
- /** Push an in-editor Yes/No confirm into the right column. */
63
- confirm(message: string, actionLabel: string, action: () => void): void;
64
- /** A model was just removed: rebuild the left column and reset the right stack. */
65
- onModelRemoved(modelId: string): void;
66
73
  }
74
+ /** Everything the editor screen provides. Each pane declares only the part it uses. */
75
+ export type EditorHost = ModelFieldsHost & FetchModelsHost;
67
76
  //# sourceMappingURL=pane.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pane.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/pane.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pane.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/pane.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pane.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/pane.ts"],"names":[],"mappings":"AAAA,sEAAsE","sourcesContent":["/** Pane contract for the /provider two-pane editor's right column. */\n\nimport type { TUI } from \"@earendil-works/pi-tui\";\nimport type { KeybindingsManager } from \"../../../core/keybindings.ts\";\nimport type { ModelsJsonModel } from \"../../../core/model-config.ts\";\nimport type { Theme } from \"../../../modes/interactive/theme/theme.ts\";\nimport type { ProviderEdits, ProviderView } from \"../editing.ts\";\nimport type { ProbeModel, ProbeResult } from \"../probe.ts\";\n\nexport type { ModelHandle } from \"../editing.ts\";\n\nexport interface EditorPane {\n\t/** Drill-down label shown at the top of the right column while this sub-pane is open, e.g. \"cost\". */\n\treadonly crumb?: string;\n\t/**\n\t * Scroll position for the editor's fixed-height right column. `top` and\n\t * `bottom` count pinned render() lines that never scroll (filter inputs,\n\t * status/error lines); `cursor` is the render() line index the window\n\t * keeps visible. Omitted: no scrolling, content is expected to fit.\n\t */\n\tscrollWindow?(): { top?: number; bottom?: number; cursor?: number };\n\t/** Body lines for the right column. */\n\trender(width: number): string[];\n\t/** Input while the right column is focused. */\n\thandleInput(data: string): void;\n\t/** True while a text editor inside the pane owns ←/→ (cursor movement beats pane switching). */\n\tisEditing?(): boolean;\n\t/** Focus propagation for embedded Input components (IME cursor placement). */\n\tsetFocused(focused: boolean): void;\n\t/** Contextual footer hint line. */\n\thints(): string;\n\tdispose?(): void;\n}\n\nexport interface EditorHost {\n\treadonly tui: TUI;\n\treadonly theme: Theme;\n\treadonly keybindings: KeybindingsManager;\n\treadonly store: ProviderView;\n\treadonly edits: Pick<ProviderEdits, \"setProviderField\" | \"removeModel\" | \"batch\">;\n\treadonly providerId: string;\n\tpushPane(pane: EditorPane): void;\n\tpopPane(): void;\n\trefresh(): void;\n\tnotify(message: string, type: \"info\" | \"warning\" | \"error\"): void;\n\t/** Effective api/baseUrl after provider-level and builtin-overlay fallbacks. */\n\teffectiveApi(model?: Partial<ModelsJsonModel>): string | undefined;\n\teffectiveBaseUrl(model?: Partial<ModelsJsonModel>): string | undefined;\n\t/** Commit the pending model draft (id validation + addModel op); returns an error or undefined. */\n\tcommitModelDraft(): string | undefined;\n\t/** Drop the in-memory model draft; the left column returns to + Add Model. */\n\tdiscardModelDraft(): void;\n\t/** Current session model protection (§4.3): no delete/rename of the active model or its provider. */\n\tisCurrentModel(modelId: string): boolean;\n\tisCurrentProvider(): boolean;\n\t/** Last Fetch Models outcome shown next to the left-column action row. */\n\tsetFetchStatus(status: string | undefined): void;\n\t/** Refresh the provider, resolve auth canonically, and GET {baseUrl}/models. */\n\trunFetch(signal: AbortSignal): Promise<ProbeResult>;\n\t/** Validate + batch-add imported models, save once, refresh; returns an error or undefined. */\n\timportModels(models: readonly ProbeModel[], signal: AbortSignal): Promise<string | undefined>;\n\t/** Push an in-editor Yes/No confirm into the right column. */\n\tconfirm(message: string, actionLabel: string, action: () => void): void;\n\t/** A model was just removed: rebuild the left column and reset the right stack. */\n\tonModelRemoved(modelId: string): void;\n}\n"]}
1
+ {"version":3,"file":"pane.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/pane.ts"],"names":[],"mappings":"AAAA,sEAAsE","sourcesContent":["/** Pane contract for the /provider two-pane editor's right column. */\n\nimport type { KeybindingsManager } from \"../../../core/keybindings.ts\";\nimport type { ModelsJsonModel } from \"../../../core/model-config.ts\";\nimport type { Theme } from \"../../../modes/interactive/theme/theme.ts\";\nimport type { ProviderEdits, ProviderView } from \"../editing.ts\";\nimport type { ProbeModel, ProbeResult } from \"../probe.ts\";\n\nexport type { ModelHandle } from \"../editing.ts\";\n\nexport interface EditorPane {\n\t/** Drill-down label shown at the top of the right column while this sub-pane is open, e.g. \"cost\". */\n\treadonly crumb?: string;\n\t/**\n\t * Scroll position for the editor's fixed-height right column. `top` and\n\t * `bottom` count pinned render() lines that never scroll (filter inputs,\n\t * status/error lines); `cursor` is the render() line index the window\n\t * keeps visible. Omitted: no scrolling, content is expected to fit.\n\t */\n\tscrollWindow?(): { top?: number; bottom?: number; cursor?: number };\n\t/** Body lines for the right column. */\n\trender(width: number): string[];\n\t/** Input while the right column is focused. */\n\thandleInput(data: string): void;\n\t/** True while a text editor inside the pane owns ←/→ (cursor movement beats pane switching). */\n\tisEditing?(): boolean;\n\t/** Focus propagation for embedded Input components (IME cursor placement). */\n\tsetFocused(focused: boolean): void;\n\t/** Contextual footer hint line. */\n\thints(): string;\n\tdispose?(): void;\n}\n\n/** What every pane gets: rendering resources, right-column navigation, and user feedback. */\nexport interface PaneHost {\n\treadonly theme: Theme;\n\treadonly keybindings: KeybindingsManager;\n\tpushPane(pane: EditorPane): void;\n\tpopPane(): void;\n\trefresh(): void;\n\tnotify(message: string, type: \"info\" | \"warning\" | \"error\"): void;\n\t/** Push an in-editor Yes/No confirm into the right column. */\n\tconfirm(message: string, actionLabel: string, action: () => void): void;\n}\n\n/** A pane that reads or edits the provider being configured. */\nexport interface ProviderPaneHost extends PaneHost {\n\treadonly store: ProviderView;\n\treadonly edits: Pick<ProviderEdits, \"setProviderField\" | \"removeModel\" | \"batch\">;\n\treadonly providerId: string;\n\t/** Effective api/baseUrl after provider-level and builtin-overlay fallbacks. */\n\teffectiveApi(model?: Partial<ModelsJsonModel>): string | undefined;\n\teffectiveBaseUrl(model?: Partial<ModelsJsonModel>): string | undefined;\n}\n\n/** The model fields pane, which also changes the left column's model rows. */\nexport interface ModelFieldsHost extends ProviderPaneHost {\n\t/** Commit the pending model draft (id validation + addModel op); returns an error or undefined. */\n\tcommitModelDraft(): string | undefined;\n\t/** Drop the in-memory model draft; the left column returns to + Add Model. */\n\tdiscardModelDraft(): void;\n\t/** Current session model protection (§4.3): no delete/rename of the active model. */\n\tisCurrentModel(modelId: string): boolean;\n\t/** A model was just removed: rebuild the left column and reset the right stack. */\n\tonModelRemoved(modelId: string): void;\n}\n\n/** The Fetch Models pane. */\nexport interface FetchModelsHost extends ProviderPaneHost {\n\t/** Last Fetch Models outcome shown next to the left-column action row. */\n\tsetFetchStatus(status: string | undefined): void;\n\t/** Refresh the provider, resolve auth canonically, and GET {baseUrl}/models. */\n\trunFetch(signal: AbortSignal): Promise<ProbeResult>;\n\t/** Validate + batch-add imported models, save once, refresh; returns an error or undefined. */\n\timportModels(models: readonly ProbeModel[], signal: AbortSignal): Promise<string | undefined>;\n}\n\n/** Everything the editor screen provides. Each pane declares only the part it uses. */\nexport type EditorHost = ModelFieldsHost & FetchModelsHost;\n"]}
@@ -1,7 +1,7 @@
1
1
  /** Provider connection and API settings panes. */
2
2
  import "../keybindings.ts";
3
3
  import type { ModelRegistry } from "../../../core/model-registry.ts";
4
- import type { EditorHost, EditorPane } from "./pane.ts";
4
+ import type { EditorPane, ProviderPaneHost } from "./pane.ts";
5
5
  import { type ScrollWindowInfo } from "./value-row.ts";
6
6
  /**
7
7
  * One-line guidance on the baseUrl shape an API tag expects: pi-ai delegates
@@ -23,7 +23,7 @@ export declare class ApiAuthPane implements EditorPane {
23
23
  private focused;
24
24
  private readonly host;
25
25
  private readonly registry;
26
- constructor(host: EditorHost, registry: Pick<ModelRegistry, "getProviderAuthStatus">);
26
+ constructor(host: ProviderPaneHost, registry: Pick<ModelRegistry, "getProviderAuthStatus">);
27
27
  private provider;
28
28
  scrollWindow(): ScrollWindowInfo;
29
29
  private bottomNoteCount;
@@ -40,5 +40,5 @@ export declare class ApiAuthPane implements EditorPane {
40
40
  * returns. Clearing is refused while any model still resolves its api from
41
41
  * the provider — set a model-level API under Model-Specific API first.
42
42
  */
43
- export declare function createProviderApiPane(host: EditorHost): EditorPane;
43
+ export declare function createProviderApiPane(host: ProviderPaneHost): EditorPane;
44
44
  //# sourceMappingURL=provider-fields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-fields.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/provider-fields.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD,OAAO,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAMrE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAwD,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE7G;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAevE;AAED,2GAA2G;AAC3G,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CActE;AAED;;;;GAIG;AACH,qBAAa,WAAY,YAAW,UAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+C;gBAC5D,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,uBAAuB,CAAC;IAMpF,OAAO,CAAC,QAAQ;IAIhB,YAAY,IAAI,gBAAgB;IAKhC,OAAO,CAAC,eAAe;IAMvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA4C/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA2B/B,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,MAAM;IAsBd,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,MAAM;CAUf;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CA0BlE"}
1
+ {"version":3,"file":"provider-fields.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/provider-fields.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD,OAAO,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAMrE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAwD,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE7G;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAevE;AAED,2GAA2G;AAC3G,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CActE;AAED;;;;GAIG;AACH,qBAAa,WAAY,YAAW,UAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6C;IAClE,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmC;IACxD,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+C;gBAC5D,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,uBAAuB,CAAC;IAM1F,OAAO,CAAC,QAAQ;IAIhB,YAAY,IAAI,gBAAgB;IAKhC,OAAO,CAAC,eAAe;IAMvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA4C/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA2B/B,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,MAAM;IAsBd,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,MAAM;CAUf;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,UAAU,CA0BxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-fields.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/provider-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/** Provider connection and API settings panes. */\n\nimport \"../keybindings.ts\";\nimport type { ModelsJsonProvider } from \"../../../core/model-config.ts\";\nimport type { ModelRegistry } from \"../../../core/model-registry.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { builtinDefaults } from \"../catalog.ts\";\nimport { API_TYPES, maskApiKey, plural, truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { ChoicePane, InlineEdit, moveSelection } from \"./controls.ts\";\nimport type { EditorHost, EditorPane } from \"./pane.ts\";\nimport { isPrintableInput, renderInfoLine, renderKeyValueLine, type ScrollWindowInfo } from \"./value-row.ts\";\n\n/**\n * One-line guidance on the baseUrl shape an API tag expects: pi-ai delegates\n * URL assembly to the vendor SDKs, so OpenAI-style tags need the version path\n * in baseUrl while the Anthropic and Mistral clients append it themselves.\n */\nexport function baseUrlHint(api: string | undefined): string | undefined {\n\tswitch (api) {\n\t\tcase \"openai-responses\":\n\t\tcase \"openai-completions\":\n\t\tcase \"openai-codex-responses\":\n\t\t\treturn \"baseUrl includes the version path, e.g. https://api.openai.com/v1\";\n\t\tcase \"anthropic-messages\":\n\t\t\treturn \"baseUrl is the bare origin — /v1/messages is added automatically\";\n\t\tcase \"mistral-conversations\":\n\t\t\treturn \"baseUrl is the bare origin — /v1 is added automatically\";\n\t\tcase \"google-generative-ai\":\n\t\t\treturn \"baseUrl includes the version path, e.g. https://generativelanguage.googleapis.com/v1beta\";\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/** Shared baseUrl validation for provider-level and model-level entries; returns an error or undefined. */\nexport function validateBaseUrlValue(value: string): string | undefined {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(value);\n\t} catch {\n\t\treturn \"baseUrl must be a valid URL.\";\n\t}\n\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\treturn `Unsupported protocol: ${url.protocol}`;\n\t}\n\tif (url.username || url.password || url.hash) {\n\t\treturn \"baseUrl must not contain credentials or a fragment.\";\n\t}\n\treturn undefined;\n}\n\n/**\n * The provider's connection page: baseUrl and apiKey edit in place, while\n * API Type pushes the single-select sub-page. Credential-source notes and\n * the per-API baseUrl hint stay pinned below the rows.\n */\nexport class ApiAuthPane implements EditorPane {\n\tprivate readonly rows = [\"baseUrl\", \"apiKey\", \"apiType\"] as const;\n\tprivate index = 0;\n\tprivate readonly edit: InlineEdit<\"baseUrl\" | \"apiKey\">;\n\tprivate focused = false;\n\n\tprivate readonly host: EditorHost;\n\tprivate readonly registry: Pick<ModelRegistry, \"getProviderAuthStatus\">;\n\tconstructor(host: EditorHost, registry: Pick<ModelRegistry, \"getProviderAuthStatus\">) {\n\t\tthis.host = host;\n\t\tthis.edit = new InlineEdit(() => host.refresh());\n\t\tthis.registry = registry;\n\t}\n\n\tprivate provider(): ModelsJsonProvider | undefined {\n\t\treturn this.host.store.getProvider(this.host.providerId);\n\t}\n\n\tscrollWindow(): ScrollWindowInfo {\n\t\t// The value rows scroll; the credential-source notes stay pinned below.\n\t\treturn { cursor: this.index, bottom: this.bottomNoteCount() };\n\t}\n\n\tprivate bottomNoteCount(): number {\n\t\tconst status = this.registry.getProviderAuthStatus(this.host.providerId);\n\t\tconst hint = baseUrlHint(this.provider()?.api);\n\t\treturn (this.edit.error ? 1 : 0) + (status.configured ? 1 : 0) + 1 + (hint ? 1 : 0);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst provider = this.provider();\n\t\tconst lines: string[] = [];\n\t\tfor (const [rowIndex, row] of this.rows.entries()) {\n\t\t\tconst active = rowIndex === this.index;\n\t\t\tconst key = row === \"apiType\" ? \"api\" : row;\n\t\t\tconst value = provider?.[key];\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row === \"apiType\" ? \"API Type\" : row,\n\t\t\t\t\tvalueText: value ? (row === \"apiKey\" ? maskApiKey(value) : value) : \"not set\",\n\t\t\t\t\tunset: !value,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting: row === \"apiType\" ? undefined : this.edit.editor(row),\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (this.edit.error) lines.push(theme.fg(\"error\", truncate(this.edit.error, Math.max(10, width - 2))));\n\t\tconst status = this.registry.getProviderAuthStatus(this.host.providerId);\n\t\tif (status.configured && status.source === \"stored\") {\n\t\t\tlines.push(\n\t\t\t\trenderInfoLine(theme, \"A stored credential (auth.json) takes precedence over the apiKey here.\", width),\n\t\t\t);\n\t\t} else if (status.configured && status.source === \"environment\") {\n\t\t\tlines.push(\n\t\t\t\trenderInfoLine(\n\t\t\t\t\ttheme,\n\t\t\t\t\t`An environment variable (${status.label ?? \"env\"}) currently provides the key.`,\n\t\t\t\t\twidth,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tlines.push(\n\t\t\trenderInfoLine(theme, \"Values are stored raw; $VAR / !command references resolve at request time.\", width),\n\t\t);\n\t\tconst hint = baseUrlHint(provider?.api);\n\t\tif (hint) lines.push(renderInfoLine(theme, hint, width));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.edit.handleInput(data, kb)) return;\n\t\tconst next = moveSelection(kb, data, this.index, this.rows.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tconst row = this.rows[this.index]!;\n\t\t\tif (row === \"apiType\") this.host.pushPane(createProviderApiPane(this.host));\n\t\t\telse this.beginEdit(\"tweak\");\n\t\t\treturn;\n\t\t}\n\t\tif (isPrintableInput(data)) {\n\t\t\tconst row = this.rows[this.index]!;\n\t\t\tif (row === \"apiType\") return;\n\t\t\tthis.beginEdit(\"overwrite\", data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate beginEdit(mode: \"overwrite\" | \"tweak\", firstData?: string): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tif (row === \"apiType\") return;\n\t\tthis.edit.begin(\n\t\t\trow,\n\t\t\tthis.provider()?.[row] ?? \"\",\n\t\t\tmode,\n\t\t\tthis.focused,\n\t\t\t(value) => this.commit(row, value),\n\t\t\tfirstData,\n\t\t);\n\t}\n\n\tprivate commit(row: \"baseUrl\" | \"apiKey\", raw: string): string | undefined {\n\t\tconst value = raw.trim();\n\t\tif (row === \"baseUrl\" && value) {\n\t\t\tconst invalid = validateBaseUrlValue(value);\n\t\t\tif (invalid) {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t\tif (row === \"baseUrl\" && !value) {\n\t\t\t// Removing baseUrl is only allowed while models still resolve an address.\n\t\t\tconst builtin = builtinDefaults(this.host.providerId).baseUrl !== undefined;\n\t\t\tconst modelsCovered = this.host.store\n\t\t\t\t.getModels(this.host.providerId)\n\t\t\t\t.every((model) => model.baseUrl !== undefined);\n\t\t\tif (!builtin && !modelsCovered && this.host.store.getModels(this.host.providerId).length > 0) {\n\t\t\t\treturn \"baseUrl cannot be removed while models rely on it.\";\n\t\t\t}\n\t\t}\n\t\tthis.host.edits.setProviderField([row], value === \"\" ? DELETE : value);\n\t\treturn undefined;\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tthis.edit.setFocused(focused);\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.edit.editing;\n\t}\n\n\thints(): string {\n\t\tif (this.edit.editing) {\n\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\t}\n\t\treturn [\n\t\t\trawKeyHint(\"type\", \"overwrite\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"edit / open\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n\n/**\n * Single-select provider api sub-page of API Auth; Enter applies and\n * returns. Clearing is refused while any model still resolves its api from\n * the provider — set a model-level API under Model-Specific API first.\n */\nexport function createProviderApiPane(host: EditorHost): EditorPane {\n\tconst current = () => host.store.getProvider(host.providerId)?.api;\n\treturn new ChoicePane<string | undefined>(host, \"API Type\", {\n\t\tcurrent,\n\t\tchoices: () => {\n\t\t\tconst fallback = builtinDefaults(host.providerId).api;\n\t\t\tconst label = fallback ? `not set (built-in default: ${fallback})` : \"not set (models define their own)\";\n\t\t\tconst values: (string | undefined)[] = [undefined, ...API_TYPES];\n\t\t\tconst value = current();\n\t\t\tif (value && !values.includes(value)) values.push(value);\n\t\t\treturn values.map((value) => ({ value, label: value ?? label, dim: value === undefined }));\n\t\t},\n\t\tchoose: (api) => {\n\t\t\tif (api === undefined) {\n\t\t\t\tconst uncovered = host.store\n\t\t\t\t\t.getModels(host.providerId)\n\t\t\t\t\t.filter((model) => !model.api && !builtinDefaults(host.providerId, model.id).api);\n\t\t\t\tif (uncovered.length)\n\t\t\t\t\treturn uncovered.length === 1\n\t\t\t\t\t\t? `Model \"${uncovered[0].id}\" resolves its API from here — give it a model-level API first.`\n\t\t\t\t\t\t: `${uncovered.length} ${plural(uncovered.length, \"model\")} resolve their API from here — give them model-level APIs first.`;\n\t\t\t}\n\t\t\thost.edits.setProviderField([\"api\"], api ?? DELETE);\n\t\t\treturn undefined;\n\t\t},\n\t});\n}\n"]}
1
+ {"version":3,"file":"provider-fields.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/provider-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/** Provider connection and API settings panes. */\n\nimport \"../keybindings.ts\";\nimport type { ModelsJsonProvider } from \"../../../core/model-config.ts\";\nimport type { ModelRegistry } from \"../../../core/model-registry.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { builtinDefaults } from \"../catalog.ts\";\nimport { API_TYPES, maskApiKey, plural, truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { ChoicePane, InlineEdit, moveSelection } from \"./controls.ts\";\nimport type { EditorPane, ProviderPaneHost } from \"./pane.ts\";\nimport { isPrintableInput, renderInfoLine, renderKeyValueLine, type ScrollWindowInfo } from \"./value-row.ts\";\n\n/**\n * One-line guidance on the baseUrl shape an API tag expects: pi-ai delegates\n * URL assembly to the vendor SDKs, so OpenAI-style tags need the version path\n * in baseUrl while the Anthropic and Mistral clients append it themselves.\n */\nexport function baseUrlHint(api: string | undefined): string | undefined {\n\tswitch (api) {\n\t\tcase \"openai-responses\":\n\t\tcase \"openai-completions\":\n\t\tcase \"openai-codex-responses\":\n\t\t\treturn \"baseUrl includes the version path, e.g. https://api.openai.com/v1\";\n\t\tcase \"anthropic-messages\":\n\t\t\treturn \"baseUrl is the bare origin — /v1/messages is added automatically\";\n\t\tcase \"mistral-conversations\":\n\t\t\treturn \"baseUrl is the bare origin — /v1 is added automatically\";\n\t\tcase \"google-generative-ai\":\n\t\t\treturn \"baseUrl includes the version path, e.g. https://generativelanguage.googleapis.com/v1beta\";\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/** Shared baseUrl validation for provider-level and model-level entries; returns an error or undefined. */\nexport function validateBaseUrlValue(value: string): string | undefined {\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(value);\n\t} catch {\n\t\treturn \"baseUrl must be a valid URL.\";\n\t}\n\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n\t\treturn `Unsupported protocol: ${url.protocol}`;\n\t}\n\tif (url.username || url.password || url.hash) {\n\t\treturn \"baseUrl must not contain credentials or a fragment.\";\n\t}\n\treturn undefined;\n}\n\n/**\n * The provider's connection page: baseUrl and apiKey edit in place, while\n * API Type pushes the single-select sub-page. Credential-source notes and\n * the per-API baseUrl hint stay pinned below the rows.\n */\nexport class ApiAuthPane implements EditorPane {\n\tprivate readonly rows = [\"baseUrl\", \"apiKey\", \"apiType\"] as const;\n\tprivate index = 0;\n\tprivate readonly edit: InlineEdit<\"baseUrl\" | \"apiKey\">;\n\tprivate focused = false;\n\n\tprivate readonly host: ProviderPaneHost;\n\tprivate readonly registry: Pick<ModelRegistry, \"getProviderAuthStatus\">;\n\tconstructor(host: ProviderPaneHost, registry: Pick<ModelRegistry, \"getProviderAuthStatus\">) {\n\t\tthis.host = host;\n\t\tthis.edit = new InlineEdit(() => host.refresh());\n\t\tthis.registry = registry;\n\t}\n\n\tprivate provider(): ModelsJsonProvider | undefined {\n\t\treturn this.host.store.getProvider(this.host.providerId);\n\t}\n\n\tscrollWindow(): ScrollWindowInfo {\n\t\t// The value rows scroll; the credential-source notes stay pinned below.\n\t\treturn { cursor: this.index, bottom: this.bottomNoteCount() };\n\t}\n\n\tprivate bottomNoteCount(): number {\n\t\tconst status = this.registry.getProviderAuthStatus(this.host.providerId);\n\t\tconst hint = baseUrlHint(this.provider()?.api);\n\t\treturn (this.edit.error ? 1 : 0) + (status.configured ? 1 : 0) + 1 + (hint ? 1 : 0);\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst provider = this.provider();\n\t\tconst lines: string[] = [];\n\t\tfor (const [rowIndex, row] of this.rows.entries()) {\n\t\t\tconst active = rowIndex === this.index;\n\t\t\tconst key = row === \"apiType\" ? \"api\" : row;\n\t\t\tconst value = provider?.[key];\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: row === \"apiType\" ? \"API Type\" : row,\n\t\t\t\t\tvalueText: value ? (row === \"apiKey\" ? maskApiKey(value) : value) : \"not set\",\n\t\t\t\t\tunset: !value,\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting: row === \"apiType\" ? undefined : this.edit.editor(row),\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (this.edit.error) lines.push(theme.fg(\"error\", truncate(this.edit.error, Math.max(10, width - 2))));\n\t\tconst status = this.registry.getProviderAuthStatus(this.host.providerId);\n\t\tif (status.configured && status.source === \"stored\") {\n\t\t\tlines.push(\n\t\t\t\trenderInfoLine(theme, \"A stored credential (auth.json) takes precedence over the apiKey here.\", width),\n\t\t\t);\n\t\t} else if (status.configured && status.source === \"environment\") {\n\t\t\tlines.push(\n\t\t\t\trenderInfoLine(\n\t\t\t\t\ttheme,\n\t\t\t\t\t`An environment variable (${status.label ?? \"env\"}) currently provides the key.`,\n\t\t\t\t\twidth,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tlines.push(\n\t\t\trenderInfoLine(theme, \"Values are stored raw; $VAR / !command references resolve at request time.\", width),\n\t\t);\n\t\tconst hint = baseUrlHint(provider?.api);\n\t\tif (hint) lines.push(renderInfoLine(theme, hint, width));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.edit.handleInput(data, kb)) return;\n\t\tconst next = moveSelection(kb, data, this.index, this.rows.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tconst row = this.rows[this.index]!;\n\t\t\tif (row === \"apiType\") this.host.pushPane(createProviderApiPane(this.host));\n\t\t\telse this.beginEdit(\"tweak\");\n\t\t\treturn;\n\t\t}\n\t\tif (isPrintableInput(data)) {\n\t\t\tconst row = this.rows[this.index]!;\n\t\t\tif (row === \"apiType\") return;\n\t\t\tthis.beginEdit(\"overwrite\", data);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate beginEdit(mode: \"overwrite\" | \"tweak\", firstData?: string): void {\n\t\tconst row = this.rows[this.index]!;\n\t\tif (row === \"apiType\") return;\n\t\tthis.edit.begin(\n\t\t\trow,\n\t\t\tthis.provider()?.[row] ?? \"\",\n\t\t\tmode,\n\t\t\tthis.focused,\n\t\t\t(value) => this.commit(row, value),\n\t\t\tfirstData,\n\t\t);\n\t}\n\n\tprivate commit(row: \"baseUrl\" | \"apiKey\", raw: string): string | undefined {\n\t\tconst value = raw.trim();\n\t\tif (row === \"baseUrl\" && value) {\n\t\t\tconst invalid = validateBaseUrlValue(value);\n\t\t\tif (invalid) {\n\t\t\t\treturn invalid;\n\t\t\t}\n\t\t}\n\t\tif (row === \"baseUrl\" && !value) {\n\t\t\t// Removing baseUrl is only allowed while models still resolve an address.\n\t\t\tconst builtin = builtinDefaults(this.host.providerId).baseUrl !== undefined;\n\t\t\tconst modelsCovered = this.host.store\n\t\t\t\t.getModels(this.host.providerId)\n\t\t\t\t.every((model) => model.baseUrl !== undefined);\n\t\t\tif (!builtin && !modelsCovered && this.host.store.getModels(this.host.providerId).length > 0) {\n\t\t\t\treturn \"baseUrl cannot be removed while models rely on it.\";\n\t\t\t}\n\t\t}\n\t\tthis.host.edits.setProviderField([row], value === \"\" ? DELETE : value);\n\t\treturn undefined;\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tthis.edit.setFocused(focused);\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.edit.editing;\n\t}\n\n\thints(): string {\n\t\tif (this.edit.editing) {\n\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\t}\n\t\treturn [\n\t\t\trawKeyHint(\"type\", \"overwrite\"),\n\t\t\tkeyHint(\"tui.select.confirm\", \"edit / open\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n\n/**\n * Single-select provider api sub-page of API Auth; Enter applies and\n * returns. Clearing is refused while any model still resolves its api from\n * the provider — set a model-level API under Model-Specific API first.\n */\nexport function createProviderApiPane(host: ProviderPaneHost): EditorPane {\n\tconst current = () => host.store.getProvider(host.providerId)?.api;\n\treturn new ChoicePane<string | undefined>(host, \"API Type\", {\n\t\tcurrent,\n\t\tchoices: () => {\n\t\t\tconst fallback = builtinDefaults(host.providerId).api;\n\t\t\tconst label = fallback ? `not set (built-in default: ${fallback})` : \"not set (models define their own)\";\n\t\t\tconst values: (string | undefined)[] = [undefined, ...API_TYPES];\n\t\t\tconst value = current();\n\t\t\tif (value && !values.includes(value)) values.push(value);\n\t\t\treturn values.map((value) => ({ value, label: value ?? label, dim: value === undefined }));\n\t\t},\n\t\tchoose: (api) => {\n\t\t\tif (api === undefined) {\n\t\t\t\tconst uncovered = host.store\n\t\t\t\t\t.getModels(host.providerId)\n\t\t\t\t\t.filter((model) => !model.api && !builtinDefaults(host.providerId, model.id).api);\n\t\t\t\tif (uncovered.length)\n\t\t\t\t\treturn uncovered.length === 1\n\t\t\t\t\t\t? `Model \"${uncovered[0].id}\" resolves its API from here — give it a model-level API first.`\n\t\t\t\t\t\t: `${uncovered.length} ${plural(uncovered.length, \"model\")} resolve their API from here — give them model-level APIs first.`;\n\t\t\t}\n\t\t\thost.edits.setProviderField([\"api\"], api ?? DELETE);\n\t\t\treturn undefined;\n\t\t},\n\t});\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /** The seven thinking levels and their inherited, hidden, or string mappings. */
2
- import type { EditorHost, EditorPane, ModelHandle } from "./pane.ts";
2
+ import type { EditorPane, ModelHandle, PaneHost } from "./pane.ts";
3
3
  export declare class ThinkingMapPane implements EditorPane {
4
4
  readonly crumb = "thinkingLevelMap";
5
5
  private mode;
@@ -9,7 +9,7 @@ export declare class ThinkingMapPane implements EditorPane {
9
9
  private focused;
10
10
  private readonly host;
11
11
  private readonly model;
12
- constructor(host: EditorHost, model: ModelHandle);
12
+ constructor(host: PaneHost, model: ModelHandle);
13
13
  private map;
14
14
  render(width: number): string[];
15
15
  handleInput(data: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"thinking-map.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/thinking-map.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAOjF,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAYrE,qBAAa,eAAgB,YAAW,UAAU;IACjD,QAAQ,CAAC,KAAK,sBAAsB;IACpC,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW;IAKhD,OAAO,CAAC,GAAG;IAIX,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAsD/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA6E/B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,MAAM;CASf"}
1
+ {"version":3,"file":"thinking-map.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/thinking-map.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAOjF,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAYnE,qBAAa,eAAgB,YAAW,UAAU;IACjD,QAAQ,CAAC,KAAK,sBAAsB;IACpC,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;gBACxB,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW;IAK9C,OAAO,CAAC,GAAG;IAIX,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAsD/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA6E/B,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,KAAK,IAAI,MAAM;CASf"}
@@ -1 +1 @@
1
- {"version":3,"file":"thinking-map.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/thinking-map.ts"],"names":[],"mappings":"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","sourcesContent":["/** The seven thinking levels and their inherited, hidden, or string mappings. */\n\nimport type { ModelThinkingLevel } from \"@earendil-works/pi-ai\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { THINKING_LEVELS, truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { moveSelection } from \"./controls.ts\";\nimport type { EditorHost, EditorPane, ModelHandle } from \"./pane.ts\";\nimport { renderInfoLine, renderKeyValueLine, renderPlainLine, ValueEditor } from \"./value-row.ts\";\n\n// -------------------------------------------------------------------------\n// thinkingLevelMap\n// -------------------------------------------------------------------------\n\ntype ThinkingMapMode =\n\t| { type: \"levels\" }\n\t| { type: \"choice\"; level: ModelThinkingLevel; index: number }\n\t| { type: \"target\"; level: ModelThinkingLevel };\n\nexport class ThinkingMapPane implements EditorPane {\n\treadonly crumb = \"thinkingLevelMap\";\n\tprivate mode: ThinkingMapMode = { type: \"levels\" };\n\tprivate index = 0;\n\tprivate editor: ValueEditor | undefined;\n\tprivate error: string | undefined;\n\tprivate focused = false;\n\n\tprivate readonly host: EditorHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: EditorHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.model = model;\n\t}\n\n\tprivate map(): Partial<Record<ModelThinkingLevel, string | null>> {\n\t\treturn this.model.read().thinkingLevelMap ?? {};\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst lines: string[] = [];\n\t\tif (this.model.read().reasoning !== true) {\n\t\t\tlines.push(\n\t\t\t\trenderInfoLine(theme, \"reasoning is not true — the map is stored but currently has no effect.\", width),\n\t\t\t);\n\t\t}\n\t\tif (this.mode.type === \"levels\") {\n\t\t\tfor (const [rowIndex, level] of THINKING_LEVELS.entries()) {\n\t\t\t\tconst value = this.map()[level];\n\t\t\t\tconst status = value === undefined ? \"default\" : value === null ? \"null (hidden)\" : value;\n\t\t\t\tlines.push(\n\t\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\t\tkeyLabel: level,\n\t\t\t\t\t\tvalueText: status,\n\t\t\t\t\t\tunset: value === undefined,\n\t\t\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (this.mode.type === \"choice\") {\n\t\t\tlines.push(renderInfoLine(theme, `${this.mode.level} · mapping`, width));\n\t\t\tfor (const [choiceIndex, label] of [\n\t\t\t\t\"String target (provider effort)\",\n\t\t\t\t\"Hidden (null)\",\n\t\t\t\t\"Default (remove key)\",\n\t\t\t].entries()) {\n\t\t\t\tlines.push(\n\t\t\t\t\trenderPlainLine(theme, label, {\n\t\t\t\t\t\tactive: choiceIndex === this.mode.index,\n\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tlines.push(renderInfoLine(theme, `${this.mode.level} · non-empty provider effort`, width));\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: this.mode.level,\n\t\t\t\t\tactive: true,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting: this.editor,\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (this.error) lines.push(theme.fg(\"error\", truncate(this.error, Math.max(10, width - 2))));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.mode.type === \"target\") {\n\t\t\tif (kb.matches(data, \"tui.select.up\") || kb.matches(data, \"tui.select.down\")) return;\n\t\t\tthis.editor?.handleInput(data);\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.mode.type === \"choice\") {\n\t\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\t\tthis.mode = { ...this.mode, index: this.mode.index === 0 ? 2 : this.mode.index - 1 };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\t\tthis.mode = { ...this.mode, index: (this.mode.index + 1) % 3 };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\tthis.mode = { type: \"levels\" };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\t\tconst { level, index } = this.mode;\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tconst editor = new ValueEditor({\n\t\t\t\t\t\tonCommit: (value) => {\n\t\t\t\t\t\t\tconst target = value.trim();\n\t\t\t\t\t\t\tif (!target) {\n\t\t\t\t\t\t\t\tthis.error = \"A string target must be non-empty; use Hidden for null.\";\n\t\t\t\t\t\t\t\treturn this.host.refresh();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\t\t\tthis.mode = { type: \"levels\" };\n\t\t\t\t\t\t\tthis.editor = undefined;\n\t\t\t\t\t\t\tthis.model.setField([\"thinkingLevelMap\", level], target);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\t\tthis.editor = undefined;\n\t\t\t\t\t\t\tthis.mode = { type: \"levels\" };\n\t\t\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.editor = editor;\n\t\t\t\t\teditor.focused = this.focused;\n\t\t\t\t\tconst existing = this.map()[level];\n\t\t\t\t\tif (typeof existing === \"string\") editor.beginTweak(existing);\n\t\t\t\t\tthis.mode = { type: \"target\", level };\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.mode = { type: \"levels\" };\n\t\t\t\tthis.model.setField([\"thinkingLevelMap\", level], index === 1 ? null : DELETE);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t// levels\n\t\tconst next = moveSelection(kb, data, this.index, THINKING_LEVELS.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.mode = { type: \"choice\", level: THINKING_LEVELS[this.index]!, index: 0 };\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tif (this.editor) this.editor.focused = focused && this.mode.type === \"target\";\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.mode.type === \"target\";\n\t}\n\n\thints(): string {\n\t\tif (this.mode.type === \"target\")\n\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"back\")].join(\" \");\n\t\treturn [\n\t\t\trawKeyHint(\"↑↓\", \"move\"),\n\t\t\tkeyHint(\"tui.select.confirm\", this.mode.type === \"choice\" ? \"set\" : \"edit\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n"]}
1
+ {"version":3,"file":"thinking-map.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/thinking-map.ts"],"names":[],"mappings":"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","sourcesContent":["/** The seven thinking levels and their inherited, hidden, or string mappings. */\n\nimport type { ModelThinkingLevel } from \"@earendil-works/pi-ai\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { THINKING_LEVELS, truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { moveSelection } from \"./controls.ts\";\nimport type { EditorPane, ModelHandle, PaneHost } from \"./pane.ts\";\nimport { renderInfoLine, renderKeyValueLine, renderPlainLine, ValueEditor } from \"./value-row.ts\";\n\n// -------------------------------------------------------------------------\n// thinkingLevelMap\n// -------------------------------------------------------------------------\n\ntype ThinkingMapMode =\n\t| { type: \"levels\" }\n\t| { type: \"choice\"; level: ModelThinkingLevel; index: number }\n\t| { type: \"target\"; level: ModelThinkingLevel };\n\nexport class ThinkingMapPane implements EditorPane {\n\treadonly crumb = \"thinkingLevelMap\";\n\tprivate mode: ThinkingMapMode = { type: \"levels\" };\n\tprivate index = 0;\n\tprivate editor: ValueEditor | undefined;\n\tprivate error: string | undefined;\n\tprivate focused = false;\n\n\tprivate readonly host: PaneHost;\n\tprivate readonly model: ModelHandle;\n\tconstructor(host: PaneHost, model: ModelHandle) {\n\t\tthis.host = host;\n\t\tthis.model = model;\n\t}\n\n\tprivate map(): Partial<Record<ModelThinkingLevel, string | null>> {\n\t\treturn this.model.read().thinkingLevelMap ?? {};\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst lines: string[] = [];\n\t\tif (this.model.read().reasoning !== true) {\n\t\t\tlines.push(\n\t\t\t\trenderInfoLine(theme, \"reasoning is not true — the map is stored but currently has no effect.\", width),\n\t\t\t);\n\t\t}\n\t\tif (this.mode.type === \"levels\") {\n\t\t\tfor (const [rowIndex, level] of THINKING_LEVELS.entries()) {\n\t\t\t\tconst value = this.map()[level];\n\t\t\t\tconst status = value === undefined ? \"default\" : value === null ? \"null (hidden)\" : value;\n\t\t\t\tlines.push(\n\t\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\t\tkeyLabel: level,\n\t\t\t\t\t\tvalueText: status,\n\t\t\t\t\t\tunset: value === undefined,\n\t\t\t\t\t\tactive: rowIndex === this.index,\n\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (this.mode.type === \"choice\") {\n\t\t\tlines.push(renderInfoLine(theme, `${this.mode.level} · mapping`, width));\n\t\t\tfor (const [choiceIndex, label] of [\n\t\t\t\t\"String target (provider effort)\",\n\t\t\t\t\"Hidden (null)\",\n\t\t\t\t\"Default (remove key)\",\n\t\t\t].entries()) {\n\t\t\t\tlines.push(\n\t\t\t\t\trenderPlainLine(theme, label, {\n\t\t\t\t\t\tactive: choiceIndex === this.mode.index,\n\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tlines.push(renderInfoLine(theme, `${this.mode.level} · non-empty provider effort`, width));\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: this.mode.level,\n\t\t\t\t\tactive: true,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\tediting: this.editor,\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tif (this.error) lines.push(theme.fg(\"error\", truncate(this.error, Math.max(10, width - 2))));\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tif (this.mode.type === \"target\") {\n\t\t\tif (kb.matches(data, \"tui.select.up\") || kb.matches(data, \"tui.select.down\")) return;\n\t\t\tthis.editor?.handleInput(data);\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.mode.type === \"choice\") {\n\t\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\t\tthis.mode = { ...this.mode, index: this.mode.index === 0 ? 2 : this.mode.index - 1 };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\t\tthis.mode = { ...this.mode, index: (this.mode.index + 1) % 3 };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\t\tthis.mode = { type: \"levels\" };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\t\tconst { level, index } = this.mode;\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tconst editor = new ValueEditor({\n\t\t\t\t\t\tonCommit: (value) => {\n\t\t\t\t\t\t\tconst target = value.trim();\n\t\t\t\t\t\t\tif (!target) {\n\t\t\t\t\t\t\t\tthis.error = \"A string target must be non-empty; use Hidden for null.\";\n\t\t\t\t\t\t\t\treturn this.host.refresh();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\t\t\tthis.mode = { type: \"levels\" };\n\t\t\t\t\t\t\tthis.editor = undefined;\n\t\t\t\t\t\t\tthis.model.setField([\"thinkingLevelMap\", level], target);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\t\tthis.editor = undefined;\n\t\t\t\t\t\t\tthis.mode = { type: \"levels\" };\n\t\t\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthis.editor = editor;\n\t\t\t\t\teditor.focused = this.focused;\n\t\t\t\t\tconst existing = this.map()[level];\n\t\t\t\t\tif (typeof existing === \"string\") editor.beginTweak(existing);\n\t\t\t\t\tthis.mode = { type: \"target\", level };\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.mode = { type: \"levels\" };\n\t\t\t\tthis.model.setField([\"thinkingLevelMap\", level], index === 1 ? null : DELETE);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t// levels\n\t\tconst next = moveSelection(kb, data, this.index, THINKING_LEVELS.length);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.mode = { type: \"choice\", level: THINKING_LEVELS[this.index]!, index: 0 };\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tif (this.editor) this.editor.focused = focused && this.mode.type === \"target\";\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.mode.type === \"target\";\n\t}\n\n\thints(): string {\n\t\tif (this.mode.type === \"target\")\n\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"back\")].join(\" \");\n\t\treturn [\n\t\t\trawKeyHint(\"↑↓\", \"move\"),\n\t\t\tkeyHint(\"tui.select.confirm\", this.mode.type === \"choice\" ? \"set\" : \"edit\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { formatDuration } from "../../core/tasks/format.js";
1
+ import { formatDuration } from "../../utils/duration.js";
2
2
  function pad(value) {
3
3
  return String(value).padStart(2, "0");
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/extensions/run-summary/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,SAAS,GAAG,CAAC,KAAa;IACzB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,UAAkB,EAAE,UAA8B,MAAM;IAC3G,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;IAC/I,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,OAAO,cAAc,cAAc,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;AACvF,CAAC","sourcesContent":["import { formatDuration } from \"../../core/tasks/format.ts\";\n\nfunction pad(value: number): string {\n\treturn String(value).padStart(2, \"0\");\n}\n\nexport function formatRunSummary(startedAt: number, finishedAt: number, outcome: \"done\" | \"stopped\" = \"done\"): string {\n\tconst done = new Date(finishedAt);\n\tconst timestamp = `${done.getFullYear()}/${pad(done.getMonth() + 1)}/${pad(done.getDate())} ${pad(done.getHours())}:${pad(done.getMinutes())}`;\n\tconst label = outcome === \"done\" ? \"Done\" : \"Stopped\";\n\treturn `Worked for ${formatDuration(finishedAt - startedAt)} · ${label} ${timestamp}`;\n}\n"]}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/extensions/run-summary/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,SAAS,GAAG,CAAC,KAAa;IACzB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,UAAkB,EAAE,UAA8B,MAAM;IAC3G,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;IAC/I,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,OAAO,cAAc,cAAc,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;AACvF,CAAC","sourcesContent":["import { formatDuration } from \"../../utils/duration.ts\";\n\nfunction pad(value: number): string {\n\treturn String(value).padStart(2, \"0\");\n}\n\nexport function formatRunSummary(startedAt: number, finishedAt: number, outcome: \"done\" | \"stopped\" = \"done\"): string {\n\tconst done = new Date(finishedAt);\n\tconst timestamp = `${done.getFullYear()}/${pad(done.getMonth() + 1)}/${pad(done.getDate())} ${pad(done.getHours())}:${pad(done.getMinutes())}`;\n\tconst label = outcome === \"done\" ? \"Done\" : \"Stopped\";\n\treturn `Worked for ${formatDuration(finishedAt - startedAt)} · ${label} ${timestamp}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/extensions/statusline/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAA2D,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEvH,MAAM,WAAW,YAAa,SAAQ,WAAW;IAChD,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED,mGAAmG;AACnG,qBAAa,WAAW;IACvB,OAAO,CAAC,MAAM,CAAC,CAKb;IAEF,UAAU,IAAI,IAAI;IAIlB,IAAI,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY;CA6BnD"}
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../src/extensions/statusline/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAKN,KAAK,WAAW,EAChB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,YAAa,SAAQ,WAAW;IAChD,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C;AAED,mGAAmG;AACnG,qBAAa,WAAW;IACvB,OAAO,CAAC,MAAM,CAAC,CAKb;IAEF,UAAU,IAAI,IAAI;IAIlB,IAAI,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY;CAyBnD"}
@@ -1,4 +1,4 @@
1
- import { addUsageToTotals, createUsageTotals, getAccountedUsages } from "../../core/usage-totals.js";
1
+ import { addUsageToTotals, cacheHitPercent, createUsageTotals, getAccountedUsages, } from "../../core/usage-totals.js";
2
2
  /** Per-footer accounting cache. Persisted entries are append-only; every append moves the leaf. */
3
3
  export class BranchUsage {
4
4
  invalidate() {
@@ -21,11 +21,7 @@ export class BranchUsage {
21
21
  const entry = entries[index];
22
22
  if (entry.type !== "message" || entry.message.role !== "assistant")
23
23
  continue;
24
- const { input, cacheRead, cacheWrite } = entry.message.usage;
25
- const promptTokens = input + cacheRead + cacheWrite;
26
- if ((cacheRead > 0 || cacheWrite > 0) && promptTokens > 0) {
27
- latestCacheHitPercent = (cacheRead / promptTokens) * 100;
28
- }
24
+ latestCacheHitPercent = cacheHitPercent(entry.message.usage);
29
25
  break;
30
26
  }
31
27
  const usage = { ...totals, latestCacheHitPercent };
@@ -1 +1 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/extensions/statusline/usage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAoB,MAAM,4BAA4B,CAAC;AAMvH,mGAAmG;AACnG,MAAM,OAAO,WAAW;IAQvB,UAAU;QACT,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,OAA+B;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9G,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,OAAO,CAAC;YAAE,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEjF,wEAAwE;QACxE,2EAA2E;QAC3E,IAAI,qBAAyC,CAAC;QAC9C,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;gBAAE,SAAS;YAC7E,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7D,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;YACpD,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC3D,qBAAqB,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC;YAC1D,CAAC;YACD,MAAM;QACP,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACd,CAAC;CACD","sourcesContent":["import type { ReadonlySessionManager } from \"../../core/session-manager.ts\";\nimport { addUsageToTotals, createUsageTotals, getAccountedUsages, type UsageTotals } from \"../../core/usage-totals.ts\";\n\nexport interface UsageSummary extends UsageTotals {\n\tlatestCacheHitPercent: number | undefined;\n}\n\n/** Per-footer accounting cache. Persisted entries are append-only; every append moves the leaf. */\nexport class BranchUsage {\n\tprivate cached?: {\n\t\tmanager: ReadonlySessionManager;\n\t\tsessionId: string;\n\t\tleafId: string | null;\n\t\tusage: UsageSummary;\n\t};\n\n\tinvalidate(): void {\n\t\tthis.cached = undefined;\n\t}\n\n\tread(manager: ReadonlySessionManager): UsageSummary {\n\t\tconst sessionId = manager.getSessionId();\n\t\tconst leafId = manager.getLeafId();\n\t\tif (this.cached?.manager === manager && this.cached.sessionId === sessionId && this.cached.leafId === leafId) {\n\t\t\treturn this.cached.usage;\n\t\t}\n\n\t\tconst entries = manager.getBranch();\n\t\tconst totals = createUsageTotals();\n\t\tfor (const usage of getAccountedUsages(entries)) addUsageToTotals(totals, usage);\n\n\t\t// CH belongs to the latest assistant request, including failures. Other\n\t\t// usage contributes to totals without replacing that request's cache rate.\n\t\tlet latestCacheHitPercent: number | undefined;\n\t\tfor (let index = entries.length - 1; index >= 0; index--) {\n\t\t\tconst entry = entries[index];\n\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"assistant\") continue;\n\t\t\tconst { input, cacheRead, cacheWrite } = entry.message.usage;\n\t\t\tconst promptTokens = input + cacheRead + cacheWrite;\n\t\t\tif ((cacheRead > 0 || cacheWrite > 0) && promptTokens > 0) {\n\t\t\t\tlatestCacheHitPercent = (cacheRead / promptTokens) * 100;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\n\t\tconst usage = { ...totals, latestCacheHitPercent };\n\t\tthis.cached = { manager, sessionId, leafId, usage };\n\t\treturn usage;\n\t}\n}\n"]}
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/extensions/statusline/usage.ts"],"names":[],"mappings":"AACA,OAAO,EACN,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,GAElB,MAAM,4BAA4B,CAAC;AAMpC,mGAAmG;AACnG,MAAM,OAAO,WAAW;IAQvB,UAAU;QACT,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,OAA+B;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9G,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,OAAO,CAAC;YAAE,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEjF,wEAAwE;QACxE,2EAA2E;QAC3E,IAAI,qBAAyC,CAAC;QAC9C,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;gBAAE,SAAS;YAC7E,qBAAqB,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM;QACP,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,GAAG,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACd,CAAC;CACD","sourcesContent":["import type { ReadonlySessionManager } from \"../../core/session-manager.ts\";\nimport {\n\taddUsageToTotals,\n\tcacheHitPercent,\n\tcreateUsageTotals,\n\tgetAccountedUsages,\n\ttype UsageTotals,\n} from \"../../core/usage-totals.ts\";\n\nexport interface UsageSummary extends UsageTotals {\n\tlatestCacheHitPercent: number | undefined;\n}\n\n/** Per-footer accounting cache. Persisted entries are append-only; every append moves the leaf. */\nexport class BranchUsage {\n\tprivate cached?: {\n\t\tmanager: ReadonlySessionManager;\n\t\tsessionId: string;\n\t\tleafId: string | null;\n\t\tusage: UsageSummary;\n\t};\n\n\tinvalidate(): void {\n\t\tthis.cached = undefined;\n\t}\n\n\tread(manager: ReadonlySessionManager): UsageSummary {\n\t\tconst sessionId = manager.getSessionId();\n\t\tconst leafId = manager.getLeafId();\n\t\tif (this.cached?.manager === manager && this.cached.sessionId === sessionId && this.cached.leafId === leafId) {\n\t\t\treturn this.cached.usage;\n\t\t}\n\n\t\tconst entries = manager.getBranch();\n\t\tconst totals = createUsageTotals();\n\t\tfor (const usage of getAccountedUsages(entries)) addUsageToTotals(totals, usage);\n\n\t\t// CH belongs to the latest assistant request, including failures. Other\n\t\t// usage contributes to totals without replacing that request's cache rate.\n\t\tlet latestCacheHitPercent: number | undefined;\n\t\tfor (let index = entries.length - 1; index >= 0; index--) {\n\t\t\tconst entry = entries[index];\n\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"assistant\") continue;\n\t\t\tlatestCacheHitPercent = cacheHitPercent(entry.message.usage);\n\t\t\tbreak;\n\t\t}\n\n\t\tconst usage = { ...totals, latestCacheHitPercent };\n\t\tthis.cached = { manager, sessionId, leafId, usage };\n\t\treturn usage;\n\t}\n}\n"]}
@@ -6,7 +6,7 @@ import type { TasksKillDetails, TasksListDetails, TasksReadDetails, TasksWaitDet
6
6
  export declare function boundedText(text: string): string;
7
7
  export declare function describeTaskLine(task: TaskSnapshot, now?: number): string;
8
8
  export declare function runRead(background: TasksContext, input: TasksInput): Promise<AgentToolResult<TasksReadDetails>>;
9
- export declare function runWait(background: TasksContext, input: TasksInput, signal?: AbortSignal, onReady?: (taskId: string) => void, interruptSignal?: AbortSignal): Promise<AgentToolResult<TasksWaitDetails>>;
9
+ export declare function runWait(background: TasksContext, input: TasksInput, signal?: AbortSignal, toolCallId?: string): Promise<AgentToolResult<TasksWaitDetails>>;
10
10
  export declare function runKill(background: TasksContext, input: TasksInput): AgentToolResult<TasksKillDetails>;
11
11
  export declare function runList(background: TasksContext): AgentToolResult<TasksListDetails>;
12
12
  //# sourceMappingURL=actions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../../src/extensions/tasks/tool/actions.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,EAIN,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAA+D,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,KAAK,EAAgB,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,SAAa,GAAG,MAAM,CAE7E;AAwFD,wBAAsB,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAkBrH;AAyFD,wBAAsB,OAAO,CAC5B,UAAU,EAAE,YAAY,EACxB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAClC,eAAe,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAmE5C;AACD,wBAAgB,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAoBtG;AACD,wBAAgB,OAAO,CAAC,UAAU,EAAE,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAmBnF"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../../src/extensions/tasks/tool/actions.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAIzE,OAAO,EAIN,KAAK,YAAY,EACjB,KAAK,YAAY,EAEjB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAgB,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEvH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAID,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,SAAa,GAAG,MAAM,CAE7E;AAwFD,wBAAsB,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAkBrH;AAkED,wBAAsB,OAAO,CAC5B,UAAU,EAAE,YAAY,EACxB,KAAK,EAAE,UAAU,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAqB5C;AACD,wBAAgB,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAoBtG;AACD,wBAAgB,OAAO,CAAC,UAAU,EAAE,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAmBnF"}