@astralyn/pi 0.85.1 → 0.85.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 (316) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/bundle/chunks/anthropic-messages-IHRRITCV.js +6 -0
  3. package/dist/bundle/chunks/anthropic.js +75 -0
  4. package/dist/bundle/chunks/azure-openai-responses-QXBIDYXO.js +2 -0
  5. package/dist/bundle/chunks/bedrock-converse-stream.js +78 -0
  6. package/dist/bundle/chunks/chunk-37ATLPRE.js +2 -0
  7. package/dist/bundle/chunks/chunk-4L3WN2XY.js +2 -0
  8. package/dist/bundle/chunks/chunk-5B3S5DVL.js +4 -0
  9. package/dist/bundle/chunks/chunk-5FDOJRDS.js +2 -0
  10. package/dist/bundle/chunks/chunk-6CYCI3EJ.js +12 -0
  11. package/dist/bundle/chunks/chunk-7LO5Z4WE.js +2 -0
  12. package/dist/bundle/chunks/chunk-APKJ4JGA.js +2 -0
  13. package/dist/bundle/chunks/chunk-EDBLK2JQ.js +2 -0
  14. package/dist/bundle/chunks/chunk-FEZ5RM2B.js +2 -0
  15. package/dist/bundle/chunks/chunk-JEIV47WR.js +2 -0
  16. package/dist/bundle/chunks/chunk-JSJPY26N.js +2 -0
  17. package/dist/bundle/chunks/chunk-KI6LC764.js +42 -0
  18. package/dist/bundle/chunks/chunk-LB4P77SH.js +1688 -0
  19. package/dist/bundle/chunks/chunk-NUHFSC37.js +25 -0
  20. package/dist/bundle/chunks/chunk-O36ZMA3U.js +2 -0
  21. package/dist/bundle/chunks/chunk-OWESLY5T.js +11 -0
  22. package/dist/bundle/chunks/chunk-RRBI7OUG.js +50 -0
  23. package/dist/bundle/chunks/chunk-S2DJQQI2.js +2 -0
  24. package/dist/bundle/chunks/chunk-UP6RLTHQ.js +2 -0
  25. package/dist/bundle/chunks/chunk-UUSTLCVC.js +2 -0
  26. package/dist/bundle/chunks/chunk-WWBSZG5V.js +2 -0
  27. package/dist/bundle/chunks/chunk-YZJWMPUI.js +2 -0
  28. package/dist/bundle/chunks/github-copilot.js +2 -0
  29. package/dist/bundle/chunks/google-generative-ai-NBOR3IQR.js +2 -0
  30. package/dist/bundle/chunks/google-vertex-VTHX3SUB.js +2 -0
  31. package/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +13 -0
  32. package/dist/bundle/chunks/image-resize-worker.js +2 -0
  33. package/dist/bundle/chunks/kimi-coding.js +2 -0
  34. package/dist/bundle/chunks/mistral-conversations-NO4ANAA5.js +5 -0
  35. package/dist/bundle/chunks/multipart-parser-SQ6GDJL7.js +3 -0
  36. package/dist/bundle/chunks/node-7L5OTM6S.js +2 -0
  37. package/dist/bundle/chunks/node-G4XOIDPH.js +16 -0
  38. package/dist/bundle/chunks/openai-codex-responses-5S3T3HMA.js +10 -0
  39. package/dist/bundle/chunks/openai-codex.js +75 -0
  40. package/dist/bundle/chunks/openai-completions-CXRRTRWE.js +7 -0
  41. package/dist/bundle/chunks/openai-responses-CV3MH6VP.js +2 -0
  42. package/dist/bundle/chunks/openrouter-images-6XDE2CEW.js +2 -0
  43. package/dist/bundle/chunks/openrouter.js +75 -0
  44. package/dist/bundle/chunks/pi-messages-PE6B42TG.js +8 -0
  45. package/dist/bundle/chunks/radius.js +75 -0
  46. package/dist/bundle/chunks/src-UK77SYZE.js +4 -0
  47. package/dist/bundle/chunks/xai.js +2 -0
  48. package/dist/bundle/cli.js +3 -0
  49. package/dist/bundle/index.js +2 -0
  50. package/dist/bundle/rpc-entry.js +3 -0
  51. package/dist/cli.js +5 -2469
  52. package/dist/core/agent-session.d.ts.map +1 -1
  53. package/dist/core/agent-session.js +2 -6
  54. package/dist/core/agent-session.js.map +1 -1
  55. package/dist/core/background/history.d.ts.map +1 -1
  56. package/dist/core/background/history.js +6 -0
  57. package/dist/core/background/history.js.map +1 -1
  58. package/dist/core/background/presentation.d.ts.map +1 -1
  59. package/dist/core/background/presentation.js +41 -4
  60. package/dist/core/background/presentation.js.map +1 -1
  61. package/dist/core/background/service.d.ts +2 -2
  62. package/dist/core/background/service.d.ts.map +1 -1
  63. package/dist/core/background/service.js +38 -15
  64. package/dist/core/background/service.js.map +1 -1
  65. package/dist/core/background/types.d.ts +9 -0
  66. package/dist/core/background/types.d.ts.map +1 -1
  67. package/dist/core/background/types.js +4 -0
  68. package/dist/core/background/types.js.map +1 -1
  69. package/dist/core/compaction/compaction.d.ts +5 -12
  70. package/dist/core/compaction/compaction.d.ts.map +1 -1
  71. package/dist/core/compaction/compaction.js +11 -19
  72. package/dist/core/compaction/compaction.js.map +1 -1
  73. package/dist/core/compaction/settings.d.ts +27 -0
  74. package/dist/core/compaction/settings.d.ts.map +1 -0
  75. package/dist/core/compaction/settings.js +40 -0
  76. package/dist/core/compaction/settings.js.map +1 -0
  77. package/dist/core/extensions/index.d.ts +1 -1
  78. package/dist/core/extensions/index.d.ts.map +1 -1
  79. package/dist/core/extensions/index.js.map +1 -1
  80. package/dist/core/extensions/runner.d.ts +0 -1
  81. package/dist/core/extensions/runner.d.ts.map +1 -1
  82. package/dist/core/extensions/runner.js +0 -6
  83. package/dist/core/extensions/runner.js.map +1 -1
  84. package/dist/core/extensions/types.d.ts +0 -11
  85. package/dist/core/extensions/types.d.ts.map +1 -1
  86. package/dist/core/extensions/types.js.map +1 -1
  87. package/dist/core/keybindings.d.ts +15 -0
  88. package/dist/core/keybindings.d.ts.map +1 -1
  89. package/dist/core/keybindings.js +12 -0
  90. package/dist/core/keybindings.js.map +1 -1
  91. package/dist/core/model-config.d.ts +32 -10
  92. package/dist/core/model-config.d.ts.map +1 -1
  93. package/dist/core/model-config.js +38 -1
  94. package/dist/core/model-config.js.map +1 -1
  95. package/dist/core/model-runtime.d.ts +2 -0
  96. package/dist/core/model-runtime.d.ts.map +1 -1
  97. package/dist/core/model-runtime.js +4 -0
  98. package/dist/core/model-runtime.js.map +1 -1
  99. package/dist/core/settings-manager.d.ts +4 -7
  100. package/dist/core/settings-manager.d.ts.map +1 -1
  101. package/dist/core/settings-manager.js +7 -6
  102. package/dist/core/settings-manager.js.map +1 -1
  103. package/dist/core/tools/bash.d.ts +3 -9
  104. package/dist/core/tools/bash.d.ts.map +1 -1
  105. package/dist/core/tools/bash.js +3 -8
  106. package/dist/core/tools/bash.js.map +1 -1
  107. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  108. package/dist/core/tools/shell-execution.js +3 -1
  109. package/dist/core/tools/shell-execution.js.map +1 -1
  110. package/dist/extensions/background/manager.d.ts +8 -5
  111. package/dist/extensions/background/manager.d.ts.map +1 -1
  112. package/dist/extensions/background/manager.js +115 -39
  113. package/dist/extensions/background/manager.js.map +1 -1
  114. package/dist/extensions/background/task-view.d.ts +5 -0
  115. package/dist/extensions/background/task-view.d.ts.map +1 -1
  116. package/dist/extensions/background/task-view.js +4 -0
  117. package/dist/extensions/background/task-view.js.map +1 -1
  118. package/dist/extensions/btw/controller.d.ts +1 -1
  119. package/dist/extensions/btw/controller.d.ts.map +1 -1
  120. package/dist/extensions/btw/controller.js +4 -4
  121. package/dist/extensions/btw/controller.js.map +1 -1
  122. package/dist/extensions/btw/index.js +3 -3
  123. package/dist/extensions/btw/index.js.map +1 -1
  124. package/dist/extensions/index.js +2 -2
  125. package/dist/extensions/index.js.map +1 -1
  126. package/dist/extensions/provider/catalog.d.ts +57 -0
  127. package/dist/extensions/provider/catalog.d.ts.map +1 -0
  128. package/dist/extensions/provider/catalog.js +181 -0
  129. package/dist/extensions/provider/catalog.js.map +1 -0
  130. package/dist/extensions/provider/compat-fields.d.ts +25 -0
  131. package/dist/extensions/provider/compat-fields.d.ts.map +1 -0
  132. package/dist/extensions/provider/compat-fields.js +148 -0
  133. package/dist/extensions/provider/compat-fields.js.map +1 -0
  134. package/dist/extensions/provider/configuration.d.ts +8 -0
  135. package/dist/extensions/provider/configuration.d.ts.map +1 -0
  136. package/dist/extensions/provider/configuration.js +21 -0
  137. package/dist/extensions/provider/configuration.js.map +1 -0
  138. package/dist/extensions/provider/connection.d.ts +14 -0
  139. package/dist/extensions/provider/connection.d.ts.map +1 -0
  140. package/dist/extensions/provider/connection.js +86 -0
  141. package/dist/extensions/provider/connection.js.map +1 -0
  142. package/dist/extensions/provider/constants.d.ts +38 -0
  143. package/dist/extensions/provider/constants.d.ts.map +1 -0
  144. package/dist/extensions/provider/constants.js +75 -0
  145. package/dist/extensions/provider/constants.js.map +1 -0
  146. package/dist/extensions/provider/index.d.ts +4 -0
  147. package/dist/extensions/provider/index.d.ts.map +1 -0
  148. package/dist/extensions/provider/index.js +65 -0
  149. package/dist/extensions/provider/index.js.map +1 -0
  150. package/dist/extensions/provider/probe.d.ts +34 -0
  151. package/dist/extensions/provider/probe.d.ts.map +1 -0
  152. package/dist/extensions/provider/probe.js +178 -0
  153. package/dist/extensions/provider/probe.js.map +1 -0
  154. package/dist/extensions/provider/refresh.d.ts +30 -0
  155. package/dist/extensions/provider/refresh.d.ts.map +1 -0
  156. package/dist/extensions/provider/refresh.js +66 -0
  157. package/dist/extensions/provider/refresh.js.map +1 -0
  158. package/dist/extensions/provider/store.d.ts +131 -0
  159. package/dist/extensions/provider/store.d.ts.map +1 -0
  160. package/dist/extensions/provider/store.js +503 -0
  161. package/dist/extensions/provider/store.js.map +1 -0
  162. package/dist/extensions/provider/ui/app.d.ts +25 -0
  163. package/dist/extensions/provider/ui/app.d.ts.map +1 -0
  164. package/dist/extensions/provider/ui/app.js +153 -0
  165. package/dist/extensions/provider/ui/app.js.map +1 -0
  166. package/dist/extensions/provider/ui/builtin-data.d.ts +53 -0
  167. package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -0
  168. package/dist/extensions/provider/ui/builtin-data.js +315 -0
  169. package/dist/extensions/provider/ui/builtin-data.js.map +1 -0
  170. package/dist/extensions/provider/ui/compat.d.ts +57 -0
  171. package/dist/extensions/provider/ui/compat.d.ts.map +1 -0
  172. package/dist/extensions/provider/ui/compat.js +427 -0
  173. package/dist/extensions/provider/ui/compat.js.map +1 -0
  174. package/dist/extensions/provider/ui/dialogs.d.ts +30 -0
  175. package/dist/extensions/provider/ui/dialogs.d.ts.map +1 -0
  176. package/dist/extensions/provider/ui/dialogs.js +89 -0
  177. package/dist/extensions/provider/ui/dialogs.js.map +1 -0
  178. package/dist/extensions/provider/ui/dictionary.d.ts +29 -0
  179. package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -0
  180. package/dist/extensions/provider/ui/dictionary.js +385 -0
  181. package/dist/extensions/provider/ui/dictionary.js.map +1 -0
  182. package/dist/extensions/provider/ui/editor.d.ts +91 -0
  183. package/dist/extensions/provider/ui/editor.d.ts.map +1 -0
  184. package/dist/extensions/provider/ui/editor.js +667 -0
  185. package/dist/extensions/provider/ui/editor.js.map +1 -0
  186. package/dist/extensions/provider/ui/fetch-models.d.ts +39 -0
  187. package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -0
  188. package/dist/extensions/provider/ui/fetch-models.js +320 -0
  189. package/dist/extensions/provider/ui/fetch-models.js.map +1 -0
  190. package/dist/extensions/provider/ui/model-fields.d.ts +43 -0
  191. package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -0
  192. package/dist/extensions/provider/ui/model-fields.js +441 -0
  193. package/dist/extensions/provider/ui/model-fields.js.map +1 -0
  194. package/dist/extensions/provider/ui/model-options.d.ts +93 -0
  195. package/dist/extensions/provider/ui/model-options.d.ts.map +1 -0
  196. package/dist/extensions/provider/ui/model-options.js +529 -0
  197. package/dist/extensions/provider/ui/model-options.js.map +1 -0
  198. package/dist/extensions/provider/ui/pane.d.ts +81 -0
  199. package/dist/extensions/provider/ui/pane.d.ts.map +1 -0
  200. package/dist/extensions/provider/ui/pane.js +3 -0
  201. package/dist/extensions/provider/ui/pane.js.map +1 -0
  202. package/dist/extensions/provider/ui/provider-fields.d.ts +60 -0
  203. package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -0
  204. package/dist/extensions/provider/ui/provider-fields.js +326 -0
  205. package/dist/extensions/provider/ui/provider-fields.js.map +1 -0
  206. package/dist/extensions/provider/ui/provider-list.d.ts +34 -0
  207. package/dist/extensions/provider/ui/provider-list.d.ts.map +1 -0
  208. package/dist/extensions/provider/ui/provider-list.js +162 -0
  209. package/dist/extensions/provider/ui/provider-list.js.map +1 -0
  210. package/dist/extensions/provider/ui/session.d.ts +20 -0
  211. package/dist/extensions/provider/ui/session.d.ts.map +1 -0
  212. package/dist/extensions/provider/ui/session.js +52 -0
  213. package/dist/extensions/provider/ui/session.js.map +1 -0
  214. package/dist/extensions/provider/ui/thinking-map.d.ts +20 -0
  215. package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -0
  216. package/dist/extensions/provider/ui/thinking-map.js +166 -0
  217. package/dist/extensions/provider/ui/thinking-map.js.map +1 -0
  218. package/dist/extensions/provider/ui/value-row.d.ts +88 -0
  219. package/dist/extensions/provider/ui/value-row.d.ts.map +1 -0
  220. package/dist/extensions/provider/ui/value-row.js +158 -0
  221. package/dist/extensions/provider/ui/value-row.js.map +1 -0
  222. package/dist/extensions/statusline/index.js +2 -2
  223. package/dist/extensions/statusline/index.js.map +1 -1
  224. package/dist/extensions/subagent/index.d.ts.map +1 -1
  225. package/dist/extensions/subagent/index.js +4 -2
  226. package/dist/extensions/subagent/index.js.map +1 -1
  227. package/dist/extensions/subagent/resolve.d.ts +5 -0
  228. package/dist/extensions/subagent/resolve.d.ts.map +1 -1
  229. package/dist/extensions/subagent/resolve.js +15 -7
  230. package/dist/extensions/subagent/resolve.js.map +1 -1
  231. package/dist/extensions/subagent/schema.d.ts +2 -0
  232. package/dist/extensions/subagent/schema.d.ts.map +1 -1
  233. package/dist/extensions/subagent/schema.js +1 -0
  234. package/dist/extensions/subagent/schema.js.map +1 -1
  235. package/dist/index.d.ts +1 -1
  236. package/dist/index.d.ts.map +1 -1
  237. package/dist/index.js.map +1 -1
  238. package/dist/modes/interactive/components/tool-execution.d.ts +10 -0
  239. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  240. package/dist/modes/interactive/components/tool-execution.js +20 -2
  241. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  242. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  243. package/dist/modes/interactive/interactive-mode.js +6 -1
  244. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  245. package/dist/rpc-entry.js +10 -2469
  246. package/docs/bundled/README.md +1 -1
  247. package/docs/bundled/extensions/background.md +5 -5
  248. package/docs/bundled/extensions/provider.md +117 -0
  249. package/docs/bundled/extensions/statusline.md +1 -1
  250. package/docs/bundled/extensions/subagent.md +7 -3
  251. package/docs/compaction.md +16 -6
  252. package/docs/development.md +1 -1
  253. package/docs/docs.json +2 -2
  254. package/docs/extensions.md +0 -13
  255. package/docs/keybindings.md +3 -0
  256. package/docs/settings.md +11 -7
  257. package/npm-shrinkwrap.json +4 -4
  258. package/package.json +6 -5
  259. package/dist/extensions/router/constants.d.ts +0 -23
  260. package/dist/extensions/router/constants.d.ts.map +0 -1
  261. package/dist/extensions/router/constants.js +0 -30
  262. package/dist/extensions/router/constants.js.map +0 -1
  263. package/dist/extensions/router/dialog-host.d.ts +0 -60
  264. package/dist/extensions/router/dialog-host.d.ts.map +0 -1
  265. package/dist/extensions/router/dialog-host.js +0 -196
  266. package/dist/extensions/router/dialog-host.js.map +0 -1
  267. package/dist/extensions/router/dialog.d.ts +0 -45
  268. package/dist/extensions/router/dialog.d.ts.map +0 -1
  269. package/dist/extensions/router/dialog.js +0 -378
  270. package/dist/extensions/router/dialog.js.map +0 -1
  271. package/dist/extensions/router/identity.d.ts +0 -15
  272. package/dist/extensions/router/identity.d.ts.map +0 -1
  273. package/dist/extensions/router/identity.js +0 -173
  274. package/dist/extensions/router/identity.js.map +0 -1
  275. package/dist/extensions/router/index.d.ts +0 -15
  276. package/dist/extensions/router/index.d.ts.map +0 -1
  277. package/dist/extensions/router/index.js +0 -70
  278. package/dist/extensions/router/index.js.map +0 -1
  279. package/dist/extensions/router/presets.d.ts +0 -51
  280. package/dist/extensions/router/presets.d.ts.map +0 -1
  281. package/dist/extensions/router/presets.js +0 -108
  282. package/dist/extensions/router/presets.js.map +0 -1
  283. package/dist/extensions/router/probe.d.ts +0 -26
  284. package/dist/extensions/router/probe.d.ts.map +0 -1
  285. package/dist/extensions/router/probe.js +0 -216
  286. package/dist/extensions/router/probe.js.map +0 -1
  287. package/dist/extensions/router/register.d.ts +0 -12
  288. package/dist/extensions/router/register.d.ts.map +0 -1
  289. package/dist/extensions/router/register.js +0 -90
  290. package/dist/extensions/router/register.js.map +0 -1
  291. package/dist/extensions/router/state.d.ts +0 -20
  292. package/dist/extensions/router/state.d.ts.map +0 -1
  293. package/dist/extensions/router/state.js +0 -169
  294. package/dist/extensions/router/state.js.map +0 -1
  295. package/dist/extensions/router/store.d.ts +0 -12
  296. package/dist/extensions/router/store.d.ts.map +0 -1
  297. package/dist/extensions/router/store.js +0 -266
  298. package/dist/extensions/router/store.js.map +0 -1
  299. package/dist/extensions/router/stream.d.ts +0 -12
  300. package/dist/extensions/router/stream.d.ts.map +0 -1
  301. package/dist/extensions/router/stream.js +0 -233
  302. package/dist/extensions/router/stream.js.map +0 -1
  303. package/dist/extensions/router/transport.d.ts +0 -9
  304. package/dist/extensions/router/transport.d.ts.map +0 -1
  305. package/dist/extensions/router/transport.js +0 -81
  306. package/dist/extensions/router/transport.js.map +0 -1
  307. package/dist/extensions/router/types.d.ts +0 -39
  308. package/dist/extensions/router/types.d.ts.map +0 -1
  309. package/dist/extensions/router/types.js +0 -2
  310. package/dist/extensions/router/types.js.map +0 -1
  311. package/dist/extensions/router/ui.d.ts +0 -26
  312. package/dist/extensions/router/ui.d.ts.map +0 -1
  313. package/dist/extensions/router/ui.js +0 -897
  314. package/dist/extensions/router/ui.js.map +0 -1
  315. package/dist/image-resize-worker.js +0 -2
  316. package/docs/bundled/extensions/router.md +0 -197
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Runtime refresh coordination for /provider.
3
+ *
4
+ * Saves hit disk immediately; runtime refreshes are deferred: normal field
5
+ * edits mark the provider as touched and flush when the session closes, while
6
+ * Fetch Models refreshes the current provider right before auth resolution
7
+ * and right after importing. Save failures and refresh failures are reported
8
+ * separately so a successful write is never misreported.
9
+ */
10
+ import { formatError, REFRESH_TIMEOUT_MS } from "./constants.js";
11
+ export class RefreshCoordinator {
12
+ constructor(runtime) {
13
+ this.pending = new Map();
14
+ this.changed = new Set();
15
+ this.revision = 0;
16
+ this.runtime = runtime;
17
+ }
18
+ touch(providerId) {
19
+ this.pending.set(providerId, ++this.revision);
20
+ this.changed.add(providerId);
21
+ }
22
+ get touchedProviders() {
23
+ return [...this.changed];
24
+ }
25
+ /** Offline-scoped refresh of a single provider (fetch prep / post-import). */
26
+ async refreshNow(providerId, signal) {
27
+ return this.run([providerId], signal);
28
+ }
29
+ /** Refresh everything touched, including deleted provider ids. */
30
+ async flush(signal) {
31
+ const providers = [...this.pending.keys()];
32
+ if (providers.length === 0)
33
+ return { ok: true, aborted: false, errors: [] };
34
+ return this.run(providers, signal);
35
+ }
36
+ async run(providers, signal) {
37
+ const revisions = new Map(providers.map((id) => [id, this.pending.get(id)]));
38
+ const combined = AbortSignal.any([...(signal ? [signal] : []), AbortSignal.timeout(REFRESH_TIMEOUT_MS)]);
39
+ const errors = [];
40
+ try {
41
+ const result = await this.runtime.refresh({ allowNetwork: false, providers, signal: combined });
42
+ for (const [providerId, error] of result.errors) {
43
+ errors.push(`${providerId}: ${formatError(error)}`);
44
+ }
45
+ const configError = this.runtime.getError();
46
+ if (configError)
47
+ errors.push(configError);
48
+ const aborted = result.aborted || combined.aborted;
49
+ if (aborted && errors.length === 0)
50
+ errors.push("Refresh was cancelled or timed out.");
51
+ const ok = errors.length === 0 && !aborted;
52
+ if (ok) {
53
+ for (const id of providers) {
54
+ if (this.pending.get(id) === revisions.get(id))
55
+ this.pending.delete(id);
56
+ }
57
+ }
58
+ return { ok, aborted, errors };
59
+ }
60
+ catch (error) {
61
+ errors.push(formatError(error));
62
+ return { ok: false, aborted: combined.aborted, errors };
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../../src/extensions/provider/refresh.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Runtime refresh coordination for /provider.\n *\n * Saves hit disk immediately; runtime refreshes are deferred: normal field\n * edits mark the provider as touched and flush when the session closes, while\n * Fetch Models refreshes the current provider right before auth resolution\n * and right after importing. Save failures and refresh failures are reported\n * separately so a successful write is never misreported.\n */\n\nimport type { ModelRuntime } from \"../../core/model-runtime.ts\";\nimport { formatError, REFRESH_TIMEOUT_MS } from \"./constants.ts\";\n\nexport interface RefreshOutcome {\n\tok: boolean;\n\taborted: boolean;\n\terrors: string[];\n}\n\nexport class RefreshCoordinator {\n\tprivate readonly runtime: Pick<ModelRuntime, \"refresh\" | \"getError\">;\n\tprivate readonly pending = new Map<string, number>();\n\tprivate readonly changed = new Set<string>();\n\tprivate revision = 0;\n\n\tconstructor(runtime: Pick<ModelRuntime, \"refresh\" | \"getError\">) {\n\t\tthis.runtime = runtime;\n\t}\n\n\ttouch(providerId: string): void {\n\t\tthis.pending.set(providerId, ++this.revision);\n\t\tthis.changed.add(providerId);\n\t}\n\n\tget touchedProviders(): readonly string[] {\n\t\treturn [...this.changed];\n\t}\n\n\t/** Offline-scoped refresh of a single provider (fetch prep / post-import). */\n\tasync refreshNow(providerId: string, signal?: AbortSignal): Promise<RefreshOutcome> {\n\t\treturn this.run([providerId], signal);\n\t}\n\n\t/** Refresh everything touched, including deleted provider ids. */\n\tasync flush(signal?: AbortSignal): Promise<RefreshOutcome> {\n\t\tconst providers = [...this.pending.keys()];\n\t\tif (providers.length === 0) return { ok: true, aborted: false, errors: [] };\n\t\treturn this.run(providers, signal);\n\t}\n\n\tprivate async run(providers: readonly string[], signal?: AbortSignal): Promise<RefreshOutcome> {\n\t\tconst revisions = new Map(providers.map((id) => [id, this.pending.get(id)]));\n\t\tconst combined = AbortSignal.any([...(signal ? [signal] : []), AbortSignal.timeout(REFRESH_TIMEOUT_MS)]);\n\t\tconst errors: string[] = [];\n\t\ttry {\n\t\t\tconst result = await this.runtime.refresh({ allowNetwork: false, providers, signal: combined });\n\t\t\tfor (const [providerId, error] of result.errors) {\n\t\t\t\terrors.push(`${providerId}: ${formatError(error)}`);\n\t\t\t}\n\t\t\tconst configError = this.runtime.getError();\n\t\t\tif (configError) errors.push(configError);\n\t\t\tconst aborted = result.aborted || combined.aborted;\n\t\t\tif (aborted && errors.length === 0) errors.push(\"Refresh was cancelled or timed out.\");\n\t\t\tconst ok = errors.length === 0 && !aborted;\n\t\t\tif (ok) {\n\t\t\t\tfor (const id of providers) {\n\t\t\t\t\tif (this.pending.get(id) === revisions.get(id)) this.pending.delete(id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { ok, aborted, errors };\n\t\t} catch (error) {\n\t\t\terrors.push(formatError(error));\n\t\t\treturn { ok: false, aborted: combined.aborted, errors };\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Op-based models.json editing store.
3
+ *
4
+ * Three states are tracked: `baseline` (last known disk content), pending
5
+ * field-level ops, and `view` (baseline + ops, what the UI renders). Every
6
+ * confirmed edit queues an op and schedules a save. A save re-reads the file
7
+ * under a cross-process lock and applies the pending ops onto that freshest
8
+ * content — unrelated external edits are preserved, a same-field race
9
+ * resolves last-writer-wins, and ops targeting externally removed models
10
+ * simply miss. The candidate is validated via ModelConfig on a temp file,
11
+ * backed up once per session, and atomically renamed into place. Failed
12
+ * saves keep the ops pending; closing offers retry or explicit discard.
13
+ * Whole-snapshot blind overwrites are never performed.
14
+ *
15
+ * Comments and custom formatting are normalized to two-space JSON on save;
16
+ * unknown fields anywhere in the document are preserved verbatim.
17
+ */
18
+ import { type ModelsJsonModel, type ModelsJsonProvider } from "../../core/model-config.ts";
19
+ /** Sentinel op value removing the key at the op path. */
20
+ export declare const DELETE: unique symbol;
21
+ export type DeleteMarker = typeof DELETE;
22
+ export interface ModelsJsonDocument {
23
+ providers: Record<string, ModelsJsonProvider>;
24
+ [key: string]: unknown;
25
+ }
26
+ interface OpBase {
27
+ seq: number;
28
+ }
29
+ export interface SetFieldOp extends OpBase {
30
+ kind: "set";
31
+ providerId: string;
32
+ /** Undefined for provider-level fields. */
33
+ modelId?: string;
34
+ /** Path within the provider/model object, e.g. ["compat", "allowEmptySignature"]. */
35
+ path: readonly string[];
36
+ value: unknown;
37
+ createProvider: boolean;
38
+ }
39
+ export interface AddModelOp extends OpBase {
40
+ kind: "addModel";
41
+ providerId: string;
42
+ model: ModelsJsonModel;
43
+ createProvider: boolean;
44
+ }
45
+ export interface RemoveModelOp extends OpBase {
46
+ kind: "removeModel";
47
+ providerId: string;
48
+ modelId: string;
49
+ }
50
+ export interface RenameModelOp extends OpBase {
51
+ kind: "renameModel";
52
+ providerId: string;
53
+ oldId: string;
54
+ newId: string;
55
+ }
56
+ export interface RemoveProviderOp extends OpBase {
57
+ kind: "removeProvider";
58
+ providerId: string;
59
+ }
60
+ export type Op = SetFieldOp | AddModelOp | RemoveModelOp | RenameModelOp | RemoveProviderOp;
61
+ export type SaveResult = {
62
+ kind: "clean";
63
+ } | {
64
+ kind: "saved";
65
+ applied: number;
66
+ } | {
67
+ kind: "invalid";
68
+ error: string;
69
+ } | {
70
+ kind: "error";
71
+ error: string;
72
+ };
73
+ export type StoreLoad = {
74
+ ok: true;
75
+ store: ModelsJsonStore;
76
+ } | {
77
+ ok: false;
78
+ error: string;
79
+ };
80
+ /** Canonical comparison for JSON values, insensitive to object key order. */
81
+ export declare function jsonEquals(a: unknown, b: unknown): boolean;
82
+ export declare class ModelsJsonStore {
83
+ readonly path: string;
84
+ private baseline;
85
+ private ops;
86
+ private view;
87
+ private seq;
88
+ private backedUp;
89
+ private batching;
90
+ private saveChain;
91
+ private readonly drafts;
92
+ private lastSaveResult;
93
+ /** Called after each save settles (success, conflict, or failure). */
94
+ onSaveResult: ((result: SaveResult) => void) | undefined;
95
+ private constructor();
96
+ static load(path: string): Promise<StoreLoad>;
97
+ getDoc(): ModelsJsonDocument;
98
+ getProviderIds(): string[];
99
+ getProvider(providerId: string): ModelsJsonProvider | undefined;
100
+ /** Materialize a draft provider in the view without queueing an op (never written while empty). */
101
+ ensureProviderView(providerId: string): void;
102
+ /** Provider present in the view but not yet on disk. */
103
+ isDraftProvider(providerId: string): boolean;
104
+ getModels(providerId: string): ModelsJsonModel[];
105
+ getModel(providerId: string, modelId: string): ModelsJsonModel | undefined;
106
+ get pendingCount(): number;
107
+ getPendingError(providerId?: string): string | undefined;
108
+ retrySave(): void;
109
+ /** Used only after flush, when the user explicitly discards unsaved edits. */
110
+ discardPending(): void;
111
+ private enqueue;
112
+ private nextSeq;
113
+ setProviderField(providerId: string, path: readonly string[], value: unknown): void;
114
+ setModelField(providerId: string, modelId: string, path: readonly string[], value: unknown): void;
115
+ addModel(providerId: string, model: ModelsJsonModel): void;
116
+ removeModel(providerId: string, modelId: string): void;
117
+ renameModel(providerId: string, oldId: string, newId: string): Promise<string | undefined>;
118
+ removeProvider(providerId: string): void;
119
+ /** Queue several ops but schedule a single save (batch import, built-in data apply). */
120
+ batch(mutate: () => void): void;
121
+ /** Drop all pending ops targeting a draft provider (used when leaving its editor untouched). */
122
+ discardProviderDraft(providerId: string): void;
123
+ private recomputeView;
124
+ private scheduleSave;
125
+ /** Wait for all scheduled saves; the settled result of the last save, if any. */
126
+ flush(): Promise<void>;
127
+ private save;
128
+ private saveLocked;
129
+ }
130
+ export {};
131
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/extensions/provider/store.ts"],"names":[],"mappings":"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"}