cordisx 0.1.0-beta.21 → 0.1.0-beta.22

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 (271) hide show
  1. package/THIRD_PARTY_NOTICES.md +10 -0
  2. package/dist/assets/model-brands/aws-bedrock.svg +12 -0
  3. package/dist/assets/model-brands/azure-foundry.svg +1 -0
  4. package/dist/assets/model-brands/azure-openai.svg +1 -0
  5. package/dist/assets/model-brands/cerebras.png +0 -0
  6. package/dist/assets/model-brands/claude.svg +1 -0
  7. package/dist/assets/model-brands/dashscope.svg +45 -0
  8. package/dist/assets/model-brands/deepseek.svg +3 -0
  9. package/dist/assets/model-brands/fireworks.svg +5 -0
  10. package/dist/assets/model-brands/gemini.png +0 -0
  11. package/dist/assets/model-brands/google-vertex.svg +25 -0
  12. package/dist/assets/model-brands/huggingface.svg +8 -0
  13. package/dist/assets/model-brands/kimi-dark.svg +5 -0
  14. package/dist/assets/model-brands/kimi-light.svg +5 -0
  15. package/dist/assets/model-brands/minimax-dark.svg +1 -0
  16. package/dist/assets/model-brands/minimax-light.svg +1 -0
  17. package/dist/assets/model-brands/moonshot-dark.svg +1 -0
  18. package/dist/assets/model-brands/moonshot-light.svg +1 -0
  19. package/dist/assets/model-brands/openai.svg +1 -0
  20. package/dist/assets/model-brands/opencode-dark.svg +18 -0
  21. package/dist/assets/model-brands/opencode-light.svg +18 -0
  22. package/dist/assets/model-brands/openrouter-dark.svg +3 -0
  23. package/dist/assets/model-brands/openrouter-light.svg +3 -0
  24. package/dist/assets/model-brands/siliconflow.png +0 -0
  25. package/dist/assets/model-brands/together.svg +21 -0
  26. package/dist/assets/model-brands/xai-dark.svg +19 -0
  27. package/dist/assets/model-brands/xai-light.svg +19 -0
  28. package/dist/assets/model-brands/zai-dark.svg +35 -0
  29. package/dist/assets/model-brands/zai-light.svg +35 -0
  30. package/dist/shortcut-presentation.js +19 -2
  31. package/dist/src/app-launcher/install.test.d.ts +2 -0
  32. package/dist/src/app-launcher/install.test.d.ts.map +1 -0
  33. package/dist/src/app-launcher/install.test.js +57 -0
  34. package/dist/src/app-launcher/install.test.js.map +1 -0
  35. package/dist/src/app-launcher/model.d.ts +23 -0
  36. package/dist/src/app-launcher/model.d.ts.map +1 -0
  37. package/dist/src/app-launcher/model.js +18 -0
  38. package/dist/src/app-launcher/model.js.map +1 -0
  39. package/dist/src/app-launcher/runtime.test.d.ts +2 -0
  40. package/dist/src/app-launcher/runtime.test.d.ts.map +1 -0
  41. package/dist/src/app-launcher/runtime.test.js +92 -0
  42. package/dist/src/app-launcher/runtime.test.js.map +1 -0
  43. package/dist/src/cli/activate-owned-host.d.ts +10 -0
  44. package/dist/src/cli/activate-owned-host.d.ts.map +1 -0
  45. package/dist/src/cli/activate-owned-host.js +29 -0
  46. package/dist/src/cli/activate-owned-host.js.map +1 -0
  47. package/dist/src/cli/app-command.d.ts +7 -0
  48. package/dist/src/cli/app-command.d.ts.map +1 -0
  49. package/dist/src/cli/app-command.js +111 -0
  50. package/dist/src/cli/app-command.js.map +1 -0
  51. package/dist/src/cli/app-entry.d.ts +12 -0
  52. package/dist/src/cli/app-entry.d.ts.map +1 -0
  53. package/dist/src/cli/app-entry.js +99 -0
  54. package/dist/src/cli/app-entry.js.map +1 -0
  55. package/dist/src/cli/parse.d.ts +5 -2
  56. package/dist/src/cli/parse.d.ts.map +1 -1
  57. package/dist/src/cli/parse.js +2 -1
  58. package/dist/src/cli/parse.js.map +1 -1
  59. package/dist/src/cli/run-command-dispatch.d.ts.map +1 -1
  60. package/dist/src/cli/run-command-dispatch.js +5 -0
  61. package/dist/src/cli/run-command-dispatch.js.map +1 -1
  62. package/dist/src/cli/run-command.d.ts.map +1 -1
  63. package/dist/src/cli/run-command.js +15 -3
  64. package/dist/src/cli/run-command.js.map +1 -1
  65. package/dist/src/cli/run-support.d.ts +8 -1
  66. package/dist/src/cli/run-support.d.ts.map +1 -1
  67. package/dist/src/cli/run-support.js +1 -0
  68. package/dist/src/cli/run-support.js.map +1 -1
  69. package/dist/src/cli/shortcut-entry.d.ts +2 -6
  70. package/dist/src/cli/shortcut-entry.d.ts.map +1 -1
  71. package/dist/src/cli/shortcut-entry.js +2 -25
  72. package/dist/src/cli/shortcut-entry.js.map +1 -1
  73. package/dist/src/cli/supervisor-command.d.ts.map +1 -1
  74. package/dist/src/cli/supervisor-command.js +12 -4
  75. package/dist/src/cli/supervisor-command.js.map +1 -1
  76. package/dist/src/config/home-config-model-catalogs.d.ts +13 -0
  77. package/dist/src/config/home-config-model-catalogs.d.ts.map +1 -0
  78. package/dist/src/config/home-config-model-catalogs.js +107 -0
  79. package/dist/src/config/home-config-model-catalogs.js.map +1 -0
  80. package/dist/src/config/home-config.d.ts +3 -0
  81. package/dist/src/config/home-config.d.ts.map +1 -1
  82. package/dist/src/config/home-config.js +10 -8
  83. package/dist/src/config/home-config.js.map +1 -1
  84. package/dist/src/current-user-native-pins.d.ts +6 -0
  85. package/dist/src/current-user-native-pins.d.ts.map +1 -1
  86. package/dist/src/current-user-native-pins.js +7 -0
  87. package/dist/src/current-user-native-pins.js.map +1 -1
  88. package/dist/src/launcher/codex-config-model-providers.d.ts +9 -1
  89. package/dist/src/launcher/codex-config-model-providers.d.ts.map +1 -1
  90. package/dist/src/launcher/codex-config-model-providers.js +86 -23
  91. package/dist/src/launcher/codex-config-model-providers.js.map +1 -1
  92. package/dist/src/launcher/model-catalog/abort.d.ts +3 -0
  93. package/dist/src/launcher/model-catalog/abort.d.ts.map +1 -0
  94. package/dist/src/launcher/model-catalog/abort.js +16 -0
  95. package/dist/src/launcher/model-catalog/abort.js.map +1 -0
  96. package/dist/src/launcher/model-catalog/atomic-store.d.ts +13 -0
  97. package/dist/src/launcher/model-catalog/atomic-store.d.ts.map +1 -0
  98. package/dist/src/launcher/model-catalog/atomic-store.js +85 -0
  99. package/dist/src/launcher/model-catalog/atomic-store.js.map +1 -0
  100. package/dist/src/launcher/model-catalog/builtin-registry.d.ts +4 -0
  101. package/dist/src/launcher/model-catalog/builtin-registry.d.ts.map +1 -0
  102. package/dist/src/launcher/model-catalog/builtin-registry.js +7 -0
  103. package/dist/src/launcher/model-catalog/builtin-registry.js.map +1 -0
  104. package/dist/src/launcher/model-catalog/configured-source.d.ts +15 -0
  105. package/dist/src/launcher/model-catalog/configured-source.d.ts.map +1 -0
  106. package/dist/src/launcher/model-catalog/configured-source.js +99 -0
  107. package/dist/src/launcher/model-catalog/configured-source.js.map +1 -0
  108. package/dist/src/launcher/model-catalog/contracts.d.ts +87 -0
  109. package/dist/src/launcher/model-catalog/contracts.d.ts.map +1 -0
  110. package/dist/src/launcher/model-catalog/contracts.js +54 -0
  111. package/dist/src/launcher/model-catalog/contracts.js.map +1 -0
  112. package/dist/src/launcher/model-catalog/deepseek.d.ts +4 -0
  113. package/dist/src/launcher/model-catalog/deepseek.d.ts.map +1 -0
  114. package/dist/src/launcher/model-catalog/deepseek.js +123 -0
  115. package/dist/src/launcher/model-catalog/deepseek.js.map +1 -0
  116. package/dist/src/launcher/model-catalog/file-source.d.ts +10 -0
  117. package/dist/src/launcher/model-catalog/file-source.d.ts.map +1 -0
  118. package/dist/src/launcher/model-catalog/file-source.js +136 -0
  119. package/dist/src/launcher/model-catalog/file-source.js.map +1 -0
  120. package/dist/src/launcher/model-catalog/managed-catalog-composition.d.ts +33 -0
  121. package/dist/src/launcher/model-catalog/managed-catalog-composition.d.ts.map +1 -0
  122. package/dist/src/launcher/model-catalog/managed-catalog-composition.js +528 -0
  123. package/dist/src/launcher/model-catalog/managed-catalog-composition.js.map +1 -0
  124. package/dist/src/launcher/model-catalog/managed-catalog-state.d.ts +16 -0
  125. package/dist/src/launcher/model-catalog/managed-catalog-state.d.ts.map +1 -0
  126. package/dist/src/launcher/model-catalog/managed-catalog-state.js +130 -0
  127. package/dist/src/launcher/model-catalog/managed-catalog-state.js.map +1 -0
  128. package/dist/src/launcher/model-catalog/managed-provider-api.d.ts +14 -0
  129. package/dist/src/launcher/model-catalog/managed-provider-api.d.ts.map +1 -0
  130. package/dist/src/launcher/model-catalog/managed-provider-api.js +53 -0
  131. package/dist/src/launcher/model-catalog/managed-provider-api.js.map +1 -0
  132. package/dist/src/launcher/model-catalog/managed-provider-capture.d.ts +4 -0
  133. package/dist/src/launcher/model-catalog/managed-provider-capture.d.ts.map +1 -0
  134. package/dist/src/launcher/model-catalog/managed-provider-capture.js +71 -0
  135. package/dist/src/launcher/model-catalog/managed-provider-capture.js.map +1 -0
  136. package/dist/src/launcher/model-catalog/managed-provider-owner.d.ts +38 -0
  137. package/dist/src/launcher/model-catalog/managed-provider-owner.d.ts.map +1 -0
  138. package/dist/src/launcher/model-catalog/managed-provider-owner.js +348 -0
  139. package/dist/src/launcher/model-catalog/managed-provider-owner.js.map +1 -0
  140. package/dist/src/launcher/model-catalog/managed-provider-schema.d.ts +31 -0
  141. package/dist/src/launcher/model-catalog/managed-provider-schema.d.ts.map +1 -0
  142. package/dist/src/launcher/model-catalog/managed-provider-schema.js +71 -0
  143. package/dist/src/launcher/model-catalog/managed-provider-schema.js.map +1 -0
  144. package/dist/src/launcher/model-catalog/owner-projection.d.ts +20 -0
  145. package/dist/src/launcher/model-catalog/owner-projection.d.ts.map +1 -0
  146. package/dist/src/launcher/model-catalog/owner-projection.js +37 -0
  147. package/dist/src/launcher/model-catalog/owner-projection.js.map +1 -0
  148. package/dist/src/launcher/model-catalog/registry.d.ts +7 -0
  149. package/dist/src/launcher/model-catalog/registry.d.ts.map +1 -0
  150. package/dist/src/launcher/model-catalog/registry.js +19 -0
  151. package/dist/src/launcher/model-catalog/registry.js.map +1 -0
  152. package/dist/src/launcher/model-catalog/request-capability.d.ts +10 -0
  153. package/dist/src/launcher/model-catalog/request-capability.d.ts.map +1 -0
  154. package/dist/src/launcher/model-catalog/request-capability.js +74 -0
  155. package/dist/src/launcher/model-catalog/request-capability.js.map +1 -0
  156. package/dist/src/launcher/model-catalog/script-composition.d.ts +18 -0
  157. package/dist/src/launcher/model-catalog/script-composition.d.ts.map +1 -0
  158. package/dist/src/launcher/model-catalog/script-composition.js +25 -0
  159. package/dist/src/launcher/model-catalog/script-composition.js.map +1 -0
  160. package/dist/src/launcher/model-catalog/script-executor.d.ts +5 -0
  161. package/dist/src/launcher/model-catalog/script-executor.d.ts.map +1 -0
  162. package/dist/src/launcher/model-catalog/script-executor.js +140 -0
  163. package/dist/src/launcher/model-catalog/script-executor.js.map +1 -0
  164. package/dist/src/launcher/model-catalog/script-management.d.ts +4 -0
  165. package/dist/src/launcher/model-catalog/script-management.d.ts.map +1 -0
  166. package/dist/src/launcher/model-catalog/script-management.js +29 -0
  167. package/dist/src/launcher/model-catalog/script-management.js.map +1 -0
  168. package/dist/src/launcher/model-catalog/script-output-parser.d.ts +3 -0
  169. package/dist/src/launcher/model-catalog/script-output-parser.d.ts.map +1 -0
  170. package/dist/src/launcher/model-catalog/script-output-parser.js +59 -0
  171. package/dist/src/launcher/model-catalog/script-output-parser.js.map +1 -0
  172. package/dist/src/launcher/model-catalog/script-runtime.d.ts +30 -0
  173. package/dist/src/launcher/model-catalog/script-runtime.d.ts.map +1 -0
  174. package/dist/src/launcher/model-catalog/script-runtime.js +164 -0
  175. package/dist/src/launcher/model-catalog/script-runtime.js.map +1 -0
  176. package/dist/src/launcher/model-catalog/script-schema.d.ts +42 -0
  177. package/dist/src/launcher/model-catalog/script-schema.d.ts.map +1 -0
  178. package/dist/src/launcher/model-catalog/script-schema.js +129 -0
  179. package/dist/src/launcher/model-catalog/script-schema.js.map +1 -0
  180. package/dist/src/launcher/model-catalog/script-types.d.ts +84 -0
  181. package/dist/src/launcher/model-catalog/script-types.d.ts.map +1 -0
  182. package/dist/src/launcher/model-catalog/script-types.js +9 -0
  183. package/dist/src/launcher/model-catalog/script-types.js.map +1 -0
  184. package/dist/src/launcher/model-catalog/service.d.ts +39 -0
  185. package/dist/src/launcher/model-catalog/service.d.ts.map +1 -0
  186. package/dist/src/launcher/model-catalog/service.js +292 -0
  187. package/dist/src/launcher/model-catalog/service.js.map +1 -0
  188. package/dist/src/launcher/model-catalog/supplement.d.ts +4 -0
  189. package/dist/src/launcher/model-catalog/supplement.d.ts.map +1 -0
  190. package/dist/src/launcher/model-catalog/supplement.js +44 -0
  191. package/dist/src/launcher/model-catalog/supplement.js.map +1 -0
  192. package/dist/src/launcher/native-model-provider-catalog.d.ts +6 -1
  193. package/dist/src/launcher/native-model-provider-catalog.d.ts.map +1 -1
  194. package/dist/src/launcher/native-model-provider-catalog.js +16 -3
  195. package/dist/src/launcher/native-model-provider-catalog.js.map +1 -1
  196. package/dist/src/launcher/native-submission-cdp-channel.d.ts +7 -0
  197. package/dist/src/launcher/native-submission-cdp-channel.d.ts.map +1 -1
  198. package/dist/src/launcher/native-submission-cdp-channel.js +54 -7
  199. package/dist/src/launcher/native-submission-cdp-channel.js.map +1 -1
  200. package/dist/src/launcher/native-submission-composition.d.ts +6 -0
  201. package/dist/src/launcher/native-submission-composition.d.ts.map +1 -1
  202. package/dist/src/launcher/native-submission-composition.js +58 -8
  203. package/dist/src/launcher/native-submission-composition.js.map +1 -1
  204. package/dist/src/launcher/native-submission-controller.d.ts +1 -0
  205. package/dist/src/launcher/native-submission-controller.d.ts.map +1 -1
  206. package/dist/src/launcher/native-submission-controller.js +24 -3
  207. package/dist/src/launcher/native-submission-controller.js.map +1 -1
  208. package/dist/src/launcher/native-submission-structure.d.ts.map +1 -1
  209. package/dist/src/launcher/native-submission-structure.js +15 -1
  210. package/dist/src/launcher/native-submission-structure.js.map +1 -1
  211. package/dist/src/launcher/secret-resolver.d.ts.map +1 -1
  212. package/dist/src/launcher/secret-resolver.js +3 -0
  213. package/dist/src/launcher/secret-resolver.js.map +1 -1
  214. package/dist/src/model-catalog/management-overlay.d.ts +67 -0
  215. package/dist/src/model-catalog/management-overlay.d.ts.map +1 -0
  216. package/dist/src/model-catalog/management-overlay.js +193 -0
  217. package/dist/src/model-catalog/management-overlay.js.map +1 -0
  218. package/dist/src/model-catalog-management.d.ts +130 -0
  219. package/dist/src/model-catalog-management.d.ts.map +1 -0
  220. package/dist/src/model-catalog-management.js +2 -0
  221. package/dist/src/model-catalog-management.js.map +1 -0
  222. package/dist/src/model-selector-branding.d.ts +24 -0
  223. package/dist/src/model-selector-branding.d.ts.map +1 -0
  224. package/dist/src/model-selector-branding.js +201 -0
  225. package/dist/src/model-selector-branding.js.map +1 -0
  226. package/dist/src/renderer/adapter/native-model-provider-interaction.d.ts +4 -0
  227. package/dist/src/renderer/adapter/native-model-provider-interaction.d.ts.map +1 -0
  228. package/dist/src/renderer/adapter/native-model-provider-interaction.js +45 -0
  229. package/dist/src/renderer/adapter/native-model-provider-interaction.js.map +1 -0
  230. package/dist/src/renderer/adapter/native-model-provider-seat.d.ts +2 -0
  231. package/dist/src/renderer/adapter/native-model-provider-seat.d.ts.map +1 -1
  232. package/dist/src/renderer/adapter/native-model-provider-seat.js +7 -7
  233. package/dist/src/renderer/adapter/native-model-provider-seat.js.map +1 -1
  234. package/dist/src/renderer/current-user/native.d.ts +17 -1
  235. package/dist/src/renderer/current-user/native.d.ts.map +1 -1
  236. package/dist/src/renderer/current-user/native.js +20 -7
  237. package/dist/src/renderer/current-user/native.js.map +1 -1
  238. package/dist/src/renderer/host-ui/HostMenu.d.ts +2 -1
  239. package/dist/src/renderer/host-ui/HostMenu.d.ts.map +1 -1
  240. package/dist/src/renderer/host-ui/HostMenu.js +13 -4
  241. package/dist/src/renderer/host-ui/HostMenu.js.map +1 -1
  242. package/dist/src/renderer/host-ui/ModelBrandIcon.d.ts +8 -0
  243. package/dist/src/renderer/host-ui/ModelBrandIcon.d.ts.map +1 -0
  244. package/dist/src/renderer/host-ui/ModelBrandIcon.js +93 -0
  245. package/dist/src/renderer/host-ui/ModelBrandIcon.js.map +1 -0
  246. package/dist/src/renderer/install-model-provider-selector.d.ts.map +1 -1
  247. package/dist/src/renderer/install-model-provider-selector.js +23 -7
  248. package/dist/src/renderer/install-model-provider-selector.js.map +1 -1
  249. package/dist/src/renderer/model-provider-selector.d.ts +2 -1
  250. package/dist/src/renderer/model-provider-selector.d.ts.map +1 -1
  251. package/dist/src/renderer/model-provider-selector.js +46 -12
  252. package/dist/src/renderer/model-provider-selector.js.map +1 -1
  253. package/dist/src/renderer/model-providers.css +14 -1
  254. package/dist/src/renderer/model-providers.d.ts +17 -2
  255. package/dist/src/renderer/model-providers.d.ts.map +1 -1
  256. package/dist/src/renderer/model-providers.js +51 -1
  257. package/dist/src/renderer/model-providers.js.map +1 -1
  258. package/dist/src/renderer/native-model-provider-transport.d.ts +1 -0
  259. package/dist/src/renderer/native-model-provider-transport.d.ts.map +1 -1
  260. package/dist/src/renderer/native-model-provider-transport.js +36 -6
  261. package/dist/src/renderer/native-model-provider-transport.js.map +1 -1
  262. package/dist/src/renderer/native-provider-selection-client.d.ts +6 -0
  263. package/dist/src/renderer/native-provider-selection-client.d.ts.map +1 -1
  264. package/dist/src/renderer/native-provider-selection-client.js.map +1 -1
  265. package/dist/src/shortcuts/native.d.ts +2 -0
  266. package/dist/src/shortcuts/native.d.ts.map +1 -1
  267. package/dist/src/shortcuts/native.js +7 -0
  268. package/dist/src/shortcuts/native.js.map +1 -1
  269. package/package.json +1 -1
  270. package/third_party/lobe-icons-MIT.txt +21 -0
  271. package/third_party/openai-apps-sdk-ui-MIT.txt +19 -0
@@ -1,8 +1,16 @@
1
1
  import type { NativeModelProviderCatalogEntry } from './native-model-provider-catalog.js';
2
+ import { type ModelSelectorIconOverrides } from '../model-selector-branding.js';
2
3
  export interface CodexConfigModelProviderProjection {
3
4
  readonly providers: readonly NativeModelProviderCatalogEntry[];
4
5
  readonly providerIds: ReadonlySet<string>;
6
+ /** Private source identity, not an effective native endpoint/account attestation. */
7
+ readonly sourceRevision?: string;
8
+ readonly sourceAvailable?: boolean;
9
+ readonly diagnostics: readonly {
10
+ readonly providerId: string;
11
+ readonly code: 'catalog-unavailable' | 'catalog-empty' | 'provider-missing';
12
+ }[];
5
13
  }
6
14
  /** Reads Codex configuration privately and returns only selector-safe provider/model metadata. */
7
- export declare function codexConfigModelProviders(codexHome: string): Promise<CodexConfigModelProviderProjection>;
15
+ export declare function codexConfigModelProviders(codexHome: string, configModelCatalogs?: Readonly<Record<string, string>>, selectorIcons?: ModelSelectorIconOverrides): Promise<CodexConfigModelProviderProjection>;
8
16
  //# sourceMappingURL=codex-config-model-providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-config-model-providers.d.ts","sourceRoot":"","sources":["../../../src/launcher/codex-config-model-providers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAA;AAsCzF,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,+BAA+B,EAAE,CAAA;IAC9D,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC1C;AAED,kGAAkG;AAClG,wBAAsB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kCAAkC,CAAC,CA0C9G"}
1
+ {"version":3,"file":"codex-config-model-providers.d.ts","sourceRoot":"","sources":["../../../src/launcher/codex-config-model-providers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAA;AAEzF,OAAO,EAAsB,KAAK,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AA+CnG,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,+BAA+B,EAAE,CAAA;IAC9D,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,qFAAqF;IACrF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;QAC3B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,eAAe,GAAG,kBAAkB,CAAA;KAC5E,EAAE,CAAA;CACJ;AAED,kGAAkG;AAClG,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtD,aAAa,CAAC,EAAE,0BAA0B,GACzC,OAAO,CAAC,kCAAkC,CAAC,CAmG7C"}
@@ -1,6 +1,9 @@
1
1
  import { readFile, stat } from 'node:fs/promises';
2
+ import { createHash } from 'node:crypto';
2
3
  import path from 'node:path';
3
4
  import { parse } from 'smol-toml';
5
+ import { parseConfigModelCatalogs } from '../config/home-config-model-catalogs.js';
6
+ import { inferProviderBrand } from '../model-selector-branding.js';
4
7
  const MAX_CONFIG_BYTES = 4 * 1024 * 1024;
5
8
  const MAX_CATALOG_BYTES = 32 * 1024 * 1024;
6
9
  const CONFIG_PLUGIN_ID = 'cordisx.codex-config';
@@ -17,14 +20,22 @@ async function boundedText(file, maximum) {
17
20
  throw new Error('Codex model configuration file is invalid');
18
21
  return value;
19
22
  }
20
- function catalogModels(value) {
23
+ function catalogModels(value, strict = false) {
21
24
  const models = record(value)?.models;
22
- if (!Array.isArray(models))
25
+ if (!Array.isArray(models)) {
26
+ if (strict)
27
+ throw new Error('Invalid model catalog');
23
28
  return [];
29
+ }
24
30
  const seen = new Set();
25
31
  return Object.freeze(models.flatMap(item => {
26
32
  const model = record(item);
27
33
  const id = text(model?.slug, 512);
34
+ if (strict && (id === undefined
35
+ || (model?.display_name !== undefined && text(model.display_name, 256) === undefined)
36
+ || (model?.aliases !== undefined && (!Array.isArray(model.aliases)
37
+ || model.aliases.some(alias => text(alias, 256) === undefined)))))
38
+ throw new Error('Invalid model catalog');
28
39
  if (id === undefined || seen.has(id))
29
40
  return [];
30
41
  seen.add(id);
@@ -36,34 +47,61 @@ function catalogModels(value) {
36
47
  }));
37
48
  }
38
49
  /** Reads Codex configuration privately and returns only selector-safe provider/model metadata. */
39
- export async function codexConfigModelProviders(codexHome) {
50
+ export async function codexConfigModelProviders(codexHome, configModelCatalogs, selectorIcons) {
51
+ const mappings = parseConfigModelCatalogs(configModelCatalogs) ?? {};
52
+ const diagnostics = [];
40
53
  let config;
54
+ let sourceRevision;
41
55
  try {
42
- config = record(parse(await boundedText(path.join(codexHome, 'config.toml'), MAX_CONFIG_BYTES))) ?? {};
56
+ const raw = await boundedText(path.join(codexHome, 'config.toml'), MAX_CONFIG_BYTES);
57
+ config = record(parse(raw)) ?? {};
58
+ sourceRevision = createHash('sha256').update(raw).digest('hex');
43
59
  }
44
60
  catch {
45
- return Object.freeze({ providers: Object.freeze([]), providerIds: new Set() });
61
+ return Object.freeze({
62
+ providers: Object.freeze([]),
63
+ sourceAvailable: false,
64
+ providerIds: new Set(),
65
+ diagnostics: Object.freeze(Object.keys(mappings).map(providerId => ({ providerId, code: 'provider-missing' }))),
66
+ });
46
67
  }
47
68
  const configured = record(config.model_providers) ?? {};
48
- const configuredIds = Object.entries(configured).flatMap(([providerId, value]) => {
49
- const id = text(providerId, 128);
50
- return id === undefined || id === 'openai' || record(value) === undefined ? [] : [id];
51
- });
52
69
  const activeProvider = text(config.model_provider, 128);
53
70
  const activeModel = text(config.model, 512);
54
- let models = [];
55
- const catalog = text(config.model_catalog_json, 4_096);
56
- if (catalog !== undefined) {
71
+ const readCatalog = async (value, providerId) => {
72
+ const catalog = text(value, 4_096);
73
+ if (catalog === undefined)
74
+ return [];
57
75
  try {
58
76
  const catalogPath = path.isAbsolute(catalog) ? catalog : path.resolve(codexHome, catalog);
59
- models = catalogModels(JSON.parse(await boundedText(catalogPath, MAX_CATALOG_BYTES)));
77
+ const models = catalogModels(JSON.parse(await boundedText(catalogPath, MAX_CATALOG_BYTES)), providerId !== undefined);
78
+ if (providerId !== undefined && models.length === 0)
79
+ diagnostics.push({ providerId, code: 'catalog-empty' });
80
+ return models;
60
81
  }
61
- catch { /* The active model remains a safe fallback when the optional catalog is unavailable. */ }
82
+ catch {
83
+ if (providerId !== undefined)
84
+ diagnostics.push({ providerId, code: 'catalog-unavailable' });
85
+ return [];
86
+ }
87
+ };
88
+ const globalModels = await readCatalog(config.model_catalog_json);
89
+ const boundModels = new Map();
90
+ // A global catalog describes capabilities, not endpoint ownership. Never scan
91
+ // unrelated native profiles or infer membership from a model/provider name.
92
+ for (const [providerId, file] of Object.entries(mappings)) {
93
+ if (record(configured[providerId]) === undefined) {
94
+ diagnostics.push({ providerId, code: 'provider-missing' });
95
+ continue;
96
+ }
97
+ boundModels.set(providerId, await readCatalog(file, providerId));
98
+ }
99
+ if (activeProvider !== undefined && activeModel !== undefined && !Object.hasOwn(mappings, activeProvider)) {
100
+ boundModels.set(activeProvider, [
101
+ globalModels.find(model => model.id === activeModel)
102
+ ?? Object.freeze({ id: activeModel, label: activeModel, aliases: Object.freeze([]) }),
103
+ ]);
62
104
  }
63
- const fallbackProvider = activeProvider ?? (configuredIds.length === 1 ? configuredIds[0] : undefined);
64
- const fallbackModel = activeModel === undefined || models.some(model => model.id === activeModel)
65
- ? undefined
66
- : Object.freeze({ id: activeModel, label: activeModel, aliases: Object.freeze([]) });
67
105
  const providers = Object.freeze(Object.entries(configured).flatMap(([providerId, value]) => {
68
106
  const id = text(providerId, 128);
69
107
  if (id === undefined || id === 'openai' || record(value) === undefined)
@@ -72,12 +110,37 @@ export async function codexConfigModelProviders(codexHome) {
72
110
  providerId: id,
73
111
  pluginId: CONFIG_PLUGIN_ID,
74
112
  title: text(record(value)?.name, 256) ?? id,
75
- models: fallbackModel === undefined || fallbackProvider !== id
76
- ? models
77
- : Object.freeze([fallbackModel, ...models]),
78
- ...(activeProvider === id && activeModel !== undefined ? { defaultModelId: activeModel } : {}),
113
+ ...(() => {
114
+ const override = selectorIcons?.providers[id];
115
+ const baseUrl = text(record(value)?.base_url, 4_096);
116
+ const title = text(record(value)?.name, 256);
117
+ const inferred = inferProviderBrand({
118
+ providerId: id,
119
+ ...(baseUrl === undefined ? {} : { baseUrl }),
120
+ ...(title === undefined ? {} : { title }),
121
+ });
122
+ return override !== undefined
123
+ ? { selectorBrand: Object.freeze({ brand: override, source: 'override' }) }
124
+ : inferred === undefined
125
+ ? {}
126
+ : { selectorBrand: Object.freeze({ brand: inferred, source: 'inferred' }) };
127
+ })(),
128
+ models: Object.freeze([...(boundModels.get(id) ?? [])].map(model => {
129
+ const selectorBrand = selectorIcons?.models[id]?.[model.id];
130
+ return selectorBrand === undefined ? model : Object.freeze({ ...model, selectorBrand });
131
+ })),
132
+ ...(activeProvider === id && activeModel !== undefined
133
+ && boundModels.get(id)?.some(model => model.id === activeModel)
134
+ ? { defaultModelId: activeModel }
135
+ : {}),
79
136
  })];
80
137
  }));
81
- return Object.freeze({ providers, providerIds: new Set(providers.map(provider => provider.providerId)) });
138
+ return Object.freeze({
139
+ providers,
140
+ sourceAvailable: true,
141
+ sourceRevision,
142
+ providerIds: new Set(providers.map(provider => provider.providerId)),
143
+ diagnostics: Object.freeze(diagnostics),
144
+ });
82
145
  }
83
146
  //# sourceMappingURL=codex-config-model-providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-config-model-providers.js","sourceRoot":"","sources":["../../../src/launcher/codex-config-model-providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-config-model-providers.js","sourceRoot":"","sources":["../../../src/launcher/codex-config-model-providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Stop awaiting even when an owner callback ignores cancellation. Late results are discarded. */
2
+ export declare function withAbort<T>(operation: Promise<T>, signal: AbortSignal): Promise<T>;
3
+ //# sourceMappingURL=abort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/abort.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAanF"}
@@ -0,0 +1,16 @@
1
+ /** Stop awaiting even when an owner callback ignores cancellation. Late results are discarded. */
2
+ export function withAbort(operation, signal) {
3
+ if (signal.aborted) {
4
+ void operation.catch(() => undefined);
5
+ return Promise.reject(signal.reason);
6
+ }
7
+ return new Promise((resolve, reject) => {
8
+ const abort = () => {
9
+ signal.removeEventListener('abort', abort);
10
+ reject(signal.reason);
11
+ };
12
+ signal.addEventListener('abort', abort, { once: true });
13
+ operation.then(resolve, reject).finally(() => signal.removeEventListener('abort', abort));
14
+ });
15
+ }
16
+ //# sourceMappingURL=abort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.js","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/abort.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,UAAU,SAAS,CAAI,SAAqB,EAAE,MAAmB;IACrE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACrC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACvB,CAAC,CAAA;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACvD,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type CatalogSnapshot } from './contracts.js';
2
+ /** Single-owner primitive; detects observed conflicts, not a cross-process filesystem CAS. */
3
+ export declare class AtomicCatalogStore {
4
+ private readonly file;
5
+ private lastWritten;
6
+ private initialized;
7
+ private queue;
8
+ constructor(file: string);
9
+ read(): Promise<unknown>;
10
+ commit(snapshot: CatalogSnapshot, current: () => boolean): Promise<'applied' | 'conflict' | 'stale'>;
11
+ private readRaw;
12
+ }
13
+ //# sourceMappingURL=atomic-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-store.d.ts","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/atomic-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,eAAe,EAAU,MAAM,gBAAgB,CAAA;AAE7D,8FAA8F;AAC9F,qBAAa,kBAAkB;IAKjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,KAAK,CAAsC;gBAEtB,IAAI,EAAE,MAAM;IAEnC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAY9B,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;YA+BtF,OAAO;CAetB"}
@@ -0,0 +1,85 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, open, rename, rm } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { object } from './contracts.js';
5
+ /** Single-owner primitive; detects observed conflicts, not a cross-process filesystem CAS. */
6
+ export class AtomicCatalogStore {
7
+ file;
8
+ lastWritten;
9
+ initialized = false;
10
+ queue = Promise.resolve();
11
+ constructor(file) {
12
+ this.file = file;
13
+ }
14
+ async read() {
15
+ const raw = await this.readRaw();
16
+ this.lastWritten = raw;
17
+ this.initialized = true;
18
+ if (raw === undefined)
19
+ return undefined;
20
+ try {
21
+ return JSON.parse(raw);
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ commit(snapshot, current) {
28
+ const operation = this.queue.then(async () => {
29
+ if (!this.initialized)
30
+ await this.read();
31
+ if (!current())
32
+ return 'stale';
33
+ if (await this.readRaw() !== this.lastWritten)
34
+ return 'conflict';
35
+ const raw = JSON.stringify({ schemaVersion: 1, snapshot });
36
+ const directory = path.dirname(this.file);
37
+ await mkdir(directory, { recursive: true, mode: 0o700 });
38
+ const temporary = path.join(directory, `.catalog-${randomUUID()}.tmp`);
39
+ try {
40
+ const handle = await open(temporary, 'wx', 0o600);
41
+ try {
42
+ await handle.writeFile(raw);
43
+ await handle.sync();
44
+ }
45
+ finally {
46
+ await handle.close();
47
+ }
48
+ if (!current())
49
+ return 'stale';
50
+ if (await this.readRaw() !== this.lastWritten)
51
+ return 'conflict';
52
+ if (!current())
53
+ return 'stale';
54
+ await rename(temporary, this.file);
55
+ this.lastWritten = raw;
56
+ return 'applied';
57
+ }
58
+ finally {
59
+ await rm(temporary, { force: true });
60
+ }
61
+ });
62
+ this.queue = operation.catch(() => undefined);
63
+ return operation;
64
+ }
65
+ async readRaw() {
66
+ try {
67
+ const handle = await open(this.file, 'r');
68
+ try {
69
+ const metadata = await handle.stat();
70
+ if (!metadata.isFile() || metadata.size > 32 * 1024 * 1024)
71
+ throw new Error('Catalog manifest exceeds budget');
72
+ return await handle.readFile('utf8');
73
+ }
74
+ finally {
75
+ await handle.close();
76
+ }
77
+ }
78
+ catch (error) {
79
+ if (object(error)?.code === 'ENOENT')
80
+ return undefined;
81
+ throw error;
82
+ }
83
+ }
84
+ }
85
+ //# sourceMappingURL=atomic-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-store.js","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/atomic-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DiscoveryAdapterRegistry } from './registry.js';
2
+ /** Production registration is closed over built-in Host code, never plugin contributions. */
3
+ export declare function builtinDiscoveryRegistry(): DiscoveryAdapterRegistry;
4
+ //# sourceMappingURL=builtin-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-registry.d.ts","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/builtin-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAExD,6FAA6F;AAC7F,wBAAgB,wBAAwB,IAAI,wBAAwB,CAEnE"}
@@ -0,0 +1,7 @@
1
+ import { deepSeekDiscoveryAdapter } from './deepseek.js';
2
+ import { DiscoveryAdapterRegistry } from './registry.js';
3
+ /** Production registration is closed over built-in Host code, never plugin contributions. */
4
+ export function builtinDiscoveryRegistry() {
5
+ return new DiscoveryAdapterRegistry([deepSeekDiscoveryAdapter()]);
6
+ }
7
+ //# sourceMappingURL=builtin-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-registry.js","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/builtin-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAExD,6FAA6F;AAC7F,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,wBAAwB,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type CodexConfigModelProviderProjection } from '../codex-config-model-providers.js';
2
+ import type { ModelSelectorIconOverrides } from '../../model-selector-branding.js';
3
+ /** Async source observation; selection/submission consume only the committed memory view. */
4
+ export declare function dynamicConfiguredCatalog(input: {
5
+ readonly codexHome: string;
6
+ readonly catalogs?: Readonly<Record<string, string>>;
7
+ readonly selectorIcons?: ModelSelectorIconOverrides;
8
+ readonly load?: () => Promise<CodexConfigModelProviderProjection>;
9
+ }): {
10
+ snapshot: () => CodexConfigModelProviderProjection;
11
+ refresh: () => Promise<void>;
12
+ subscribe(listener: () => void): () => void;
13
+ dispose(): void;
14
+ };
15
+ //# sourceMappingURL=configured-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configured-source.d.ts","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/configured-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,kCAAkC,EAA6B,MAAM,oCAAoC,CAAA;AACvH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAGlF,6FAA6F;AAC7F,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,0BAA0B,CAAA;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,kCAAkC,CAAC,CAAA;CAClE;;mBAeqB,OAAO,CAAC,IAAI,CAAC;wBA+DX,MAAM,IAAI;;EAajC"}
@@ -0,0 +1,99 @@
1
+ import path from 'node:path';
2
+ import { codexConfigModelProviders } from '../codex-config-model-providers.js';
3
+ import { watchCatalogFiles } from './file-source.js';
4
+ /** Async source observation; selection/submission consume only the committed memory view. */
5
+ export function dynamicConfiguredCatalog(input) {
6
+ let snapshot = { providers: [], providerIds: new Set(), diagnostics: [] };
7
+ let disposed = false;
8
+ let dirty = false;
9
+ let generation = 0;
10
+ let job;
11
+ const listeners = new Set();
12
+ const load = input.load ?? (() => codexConfigModelProviders(input.codexHome, input.catalogs, input.selectorIcons));
13
+ const notify = () => {
14
+ for (const listener of listeners) {
15
+ try {
16
+ listener();
17
+ }
18
+ catch { /* Readers cannot roll back a source commit. */ }
19
+ }
20
+ };
21
+ const refresh = () => {
22
+ if (disposed)
23
+ return Promise.resolve();
24
+ if (job) {
25
+ dirty = true;
26
+ return job;
27
+ }
28
+ const epoch = ++generation;
29
+ job = Promise.resolve().then(async () => {
30
+ try {
31
+ const candidate = await load();
32
+ if (disposed || generation !== epoch)
33
+ return;
34
+ // A broken connection config cannot attest account/endpoint continuity.
35
+ // Keep it display-only by publishing no selectable entries until recovered.
36
+ if (candidate.sourceAvailable === false) {
37
+ snapshot = candidate;
38
+ }
39
+ else {
40
+ const sameSource = candidate.sourceRevision !== undefined
41
+ && candidate.sourceRevision === snapshot.sourceRevision;
42
+ const invalid = new Set(candidate.diagnostics.filter(item => item.code === 'catalog-unavailable').map(item => item.providerId));
43
+ const old = new Map(snapshot.providers.map(provider => [provider.providerId, provider]));
44
+ snapshot = Object.freeze({
45
+ ...candidate,
46
+ providers: Object.freeze(candidate.providers.map(provider => sameSource && invalid.has(provider.providerId) && old.has(provider.providerId)
47
+ ? Object.freeze({ ...provider, models: old.get(provider.providerId).models })
48
+ : provider)),
49
+ });
50
+ }
51
+ notify();
52
+ }
53
+ catch {
54
+ if (disposed || generation !== epoch)
55
+ return;
56
+ // Unexpected source failure is not proof that the native binding stayed unchanged.
57
+ snapshot = { providers: [], providerIds: new Set(), diagnostics: [], sourceAvailable: false };
58
+ notify();
59
+ }
60
+ finally {
61
+ job = undefined;
62
+ if (dirty && !disposed) {
63
+ dirty = false;
64
+ void refresh();
65
+ }
66
+ }
67
+ });
68
+ return job;
69
+ };
70
+ const watcher = watchCatalogFiles([
71
+ path.join(input.codexHome, 'config.toml'),
72
+ ...Object.values(input.catalogs ?? {}).map(file => path.resolve(input.codexHome, file)),
73
+ ], () => {
74
+ // An observed write invalidates the current read before scheduling its successor.
75
+ generation++;
76
+ void refresh();
77
+ });
78
+ queueMicrotask(() => {
79
+ if (!disposed)
80
+ void refresh();
81
+ });
82
+ return {
83
+ snapshot: () => snapshot,
84
+ refresh,
85
+ subscribe(listener) {
86
+ listeners.add(listener);
87
+ return () => {
88
+ listeners.delete(listener);
89
+ };
90
+ },
91
+ dispose() {
92
+ disposed = true;
93
+ generation++;
94
+ watcher.dispose();
95
+ listeners.clear();
96
+ },
97
+ };
98
+ }
99
+ //# sourceMappingURL=configured-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configured-source.js","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/configured-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /** Host-private contracts. No endpoint or credential capability is renderer data. */
2
+ export interface CatalogModel {
3
+ readonly id: string;
4
+ readonly label: string;
5
+ readonly aliases: readonly string[];
6
+ readonly provenance?: readonly ('auto' | 'native' | 'manual' | 'manual-supplement')[];
7
+ readonly notListed?: boolean;
8
+ readonly protocolCapabilities?: {
9
+ readonly responses: boolean;
10
+ };
11
+ }
12
+ export type CatalogStrategy = {
13
+ readonly kind: 'native';
14
+ readonly mode?: 'only' | 'augment';
15
+ } | {
16
+ readonly kind: 'manual';
17
+ readonly ids: readonly string[];
18
+ } | {
19
+ readonly kind: 'manual';
20
+ readonly file: string;
21
+ } | {
22
+ readonly kind: 'auto';
23
+ readonly adapter: string;
24
+ readonly ttlMs: number;
25
+ readonly mode?: 'only' | 'augment';
26
+ } | {
27
+ readonly kind: 'script';
28
+ readonly commandRef: string;
29
+ readonly mode?: 'replace' | 'supplement';
30
+ };
31
+ export interface CatalogSupplement {
32
+ readonly scopeRevision: string;
33
+ readonly authorityRevision: string;
34
+ readonly models: readonly {
35
+ readonly id: string;
36
+ readonly label?: string;
37
+ }[];
38
+ }
39
+ export interface CatalogBinding {
40
+ readonly bindingRef: string;
41
+ readonly scopeRevision: string;
42
+ readonly authorityRevision: string;
43
+ readonly strategy: CatalogStrategy;
44
+ }
45
+ export interface DiscoveryRequest {
46
+ readonly origin: string;
47
+ readonly method: 'GET';
48
+ readonly path: '/models';
49
+ }
50
+ export interface DiscoveryConnection {
51
+ readonly endpoint: string;
52
+ readonly scopeRevision: string;
53
+ /** Host-injected operation capability. No raw credential is exposed to an adapter. */
54
+ readonly request: (operation: DiscoveryRequest, signal: AbortSignal) => Promise<Response>;
55
+ readonly current: () => boolean;
56
+ }
57
+ export interface DiscoveryAdapter {
58
+ readonly id: string;
59
+ readonly version: string;
60
+ readonly pagination: 'none' | 'cursor';
61
+ matches(endpoint: string): boolean;
62
+ discover(connection: DiscoveryConnection, signal: AbortSignal): Promise<readonly CatalogModel[]>;
63
+ }
64
+ export type CatalogErrorCode = 'unsupported' | 'ambiguous' | 'credential-unavailable' | 'authentication' | 'permission' | 'account' | 'rate-limit' | 'temporary' | 'protocol' | 'source-invalid' | 'cancelled';
65
+ export declare class CatalogError extends Error {
66
+ readonly code: CatalogErrorCode;
67
+ readonly retryAfterMs?: number | undefined;
68
+ constructor(code: CatalogErrorCode, retryAfterMs?: number | undefined);
69
+ }
70
+ export interface CatalogSnapshot {
71
+ readonly bindingRef: string;
72
+ readonly scopeRevision: string;
73
+ readonly authorityRevision: string;
74
+ readonly revision: number;
75
+ readonly models: readonly CatalogModel[];
76
+ readonly complete: boolean;
77
+ readonly freshness: 'unknown' | 'fresh' | 'stale';
78
+ readonly loading: boolean;
79
+ readonly lastSuccessAt?: number;
80
+ readonly error?: CatalogErrorCode;
81
+ readonly supplementError?: 'source-invalid';
82
+ }
83
+ export declare const object: (value: unknown) => Record<string, unknown> | undefined;
84
+ export declare function boundedString(value: unknown, max?: number): value is string;
85
+ export declare function catalogModels(ids: unknown): readonly CatalogModel[];
86
+ export declare function parseCatalogStrategy(value: unknown): CatalogStrategy;
87
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../src/launcher/model-catalog/contracts.ts"],"names":[],"mappings":"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"}