@capybara-hq/kernel 0.1.0-rc.5 → 0.1.0-rc.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 (362) hide show
  1. package/bootstrap.json +27 -3
  2. package/dist/admin/admin.controller.d.ts +21 -74
  3. package/dist/admin/admin.controller.js +50 -50
  4. package/dist/admin/admin.schemas.d.ts +57 -0
  5. package/dist/admin/admin.schemas.js +50 -0
  6. package/dist/admin/extensions.controller.d.ts +10 -0
  7. package/dist/admin/extensions.controller.js +18 -0
  8. package/dist/admin/extensions.schemas.d.ts +7 -0
  9. package/dist/admin/extensions.schemas.js +10 -0
  10. package/dist/admin/limit-defaults.d.ts +20 -0
  11. package/dist/admin/limit-defaults.js +10 -0
  12. package/dist/agents/agent-profile.service.d.ts +7 -5
  13. package/dist/agents/agent-profile.service.js +14 -9
  14. package/dist/agents/agents.controller.d.ts +7 -287
  15. package/dist/agents/agents.controller.js +7 -67
  16. package/dist/agents/agents.schemas.d.ts +389 -0
  17. package/dist/agents/agents.schemas.js +126 -0
  18. package/dist/agents/agents.service.d.ts +16 -6
  19. package/dist/agents/agents.service.js +75 -19
  20. package/dist/agents/definition.d.ts +47 -19
  21. package/dist/agents/definition.js +119 -38
  22. package/dist/agents/from-template.d.ts +2 -2
  23. package/dist/agents/from-template.js +76 -45
  24. package/dist/agents/from-template.service.d.ts +12 -0
  25. package/dist/agents/from-template.service.js +23 -6
  26. package/dist/agents/models.controller.d.ts +33 -5
  27. package/dist/agents/models.controller.js +50 -6
  28. package/dist/agents/org-templates.d.ts +13 -3
  29. package/dist/agents/org-templates.js +69 -28
  30. package/dist/agents/pending-connector-requests.d.ts +2 -0
  31. package/dist/agents/pending-connector-requests.js +1 -1
  32. package/dist/agents/pending-connectors.controller.d.ts +1 -1
  33. package/dist/agents/pending-connectors.controller.js +2 -2
  34. package/dist/agents/pending-connectors.service.d.ts +2 -2
  35. package/dist/agents/pending-connectors.service.js +19 -19
  36. package/dist/agents/profile.d.ts +18 -0
  37. package/dist/agents/profile.js +5 -1
  38. package/dist/agents/readiness.controller.d.ts +5 -5
  39. package/dist/agents/readiness.controller.js +6 -6
  40. package/dist/agents/templates.controller.d.ts +8 -17
  41. package/dist/agents/templates.controller.js +13 -31
  42. package/dist/agents/templates.schemas.d.ts +20 -0
  43. package/dist/agents/templates.schemas.js +45 -0
  44. package/dist/background/background.controller.js +3 -2
  45. package/dist/background/background.schemas.d.ts +10 -0
  46. package/dist/background/background.schemas.js +16 -0
  47. package/dist/background/tasks.service.d.ts +1 -1
  48. package/dist/background/tasks.service.js +7 -2
  49. package/dist/catalog/admin-catalog.controller.d.ts +4 -57
  50. package/dist/catalog/admin-catalog.controller.js +8 -45
  51. package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
  52. package/dist/catalog/admin-catalog.schemas.js +92 -0
  53. package/dist/catalog/catalog-content.d.ts +12 -2
  54. package/dist/catalog/catalog-scope.service.js +8 -2
  55. package/dist/catalog/catalog.service.d.ts +2 -0
  56. package/dist/catalog/catalog.service.js +3 -0
  57. package/dist/catalog/component-scope.controller.d.ts +3 -65
  58. package/dist/catalog/component-scope.controller.js +3 -56
  59. package/dist/catalog/component-scope.schemas.d.ts +114 -0
  60. package/dist/catalog/component-scope.schemas.js +97 -0
  61. package/dist/catalog/component-scope.service.d.ts +28 -4
  62. package/dist/catalog/component-scope.service.js +55 -3
  63. package/dist/catalog/component-state.d.ts +9 -2
  64. package/dist/catalog/component-state.js +22 -13
  65. package/dist/catalog/marketplaces.controller.d.ts +5 -35
  66. package/dist/catalog/marketplaces.controller.js +6 -34
  67. package/dist/catalog/marketplaces.schemas.d.ts +48 -0
  68. package/dist/catalog/marketplaces.schemas.js +53 -0
  69. package/dist/catalog/marketplaces.service.d.ts +15 -1
  70. package/dist/catalog/marketplaces.service.js +22 -1
  71. package/dist/catalog/org-catalog.controller.d.ts +6 -62
  72. package/dist/catalog/org-catalog.controller.js +12 -66
  73. package/dist/catalog/org-catalog.schemas.d.ts +79 -0
  74. package/dist/catalog/org-catalog.schemas.js +82 -0
  75. package/dist/catalog/org-catalog.service.d.ts +9 -2
  76. package/dist/catalog/org-catalog.service.js +38 -5
  77. package/dist/catalog/org-extension.controller.d.ts +1 -12
  78. package/dist/catalog/org-extension.controller.js +1 -10
  79. package/dist/catalog/org-extension.schemas.d.ts +15 -0
  80. package/dist/catalog/org-extension.schemas.js +22 -0
  81. package/dist/catalog/org-plugin-uploads.controller.d.ts +2 -19
  82. package/dist/catalog/org-plugin-uploads.controller.js +15 -28
  83. package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
  84. package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
  85. package/dist/catalog/owned-items.d.ts +6 -2
  86. package/dist/catalog/owned-items.js +16 -4
  87. package/dist/catalog/platform-components.d.ts +2 -0
  88. package/dist/catalog/platform-components.js +2 -0
  89. package/dist/catalog/plugin-import.js +1 -0
  90. package/dist/catalog/plugin-install.js +1 -1
  91. package/dist/catalog/requests.service.d.ts +2 -1
  92. package/dist/catalog/requests.service.js +6 -2
  93. package/dist/channels/channels.schemas.d.ts +33 -0
  94. package/dist/channels/channels.schemas.js +34 -0
  95. package/dist/channels/connections.controller.d.ts +2 -29
  96. package/dist/channels/connections.controller.js +1 -23
  97. package/dist/channels/connections.service.d.ts +8 -2
  98. package/dist/channels/connections.service.js +23 -5
  99. package/dist/channels/inbound.js +4 -0
  100. package/dist/config/schema.d.ts +4 -0
  101. package/dist/config/schema.js +24 -0
  102. package/dist/conversations/conversations.controller.d.ts +16 -37
  103. package/dist/conversations/conversations.controller.js +16 -56
  104. package/dist/conversations/conversations.schemas.d.ts +52 -0
  105. package/dist/conversations/conversations.schemas.js +79 -0
  106. package/dist/conversations/conversations.service.d.ts +13 -4
  107. package/dist/conversations/conversations.service.js +32 -26
  108. package/dist/conversations/events.d.ts +80 -6
  109. package/dist/conversations/events.js +60 -5
  110. package/dist/conversations/message-context.d.ts +28 -0
  111. package/dist/conversations/message-context.js +56 -0
  112. package/dist/conversations/queue.d.ts +2 -1
  113. package/dist/conversations/queue.js +11 -2
  114. package/dist/ctx/create-ctx.d.ts +15 -1
  115. package/dist/ctx/create-ctx.js +23 -2
  116. package/dist/db/kernel-schema.d.ts +44 -0
  117. package/dist/environments/environments.schemas.d.ts +3 -0
  118. package/dist/environments/environments.schemas.js +14 -0
  119. package/dist/environments/environments.service.d.ts +16 -4
  120. package/dist/environments/environments.service.js +58 -13
  121. package/dist/errors.d.ts +6 -0
  122. package/dist/errors.js +6 -0
  123. package/dist/evals/evals.schemas.d.ts +110 -0
  124. package/dist/evals/evals.schemas.js +107 -0
  125. package/dist/evals/reconstruct.js +18 -11
  126. package/dist/evals/recorded-tools.d.ts +2 -1
  127. package/dist/evals/recorded-tools.js +11 -3
  128. package/dist/evals/run-replay.d.ts +8 -1
  129. package/dist/evals/run-replay.js +17 -2
  130. package/dist/evals/runs.controller.d.ts +2 -57
  131. package/dist/evals/runs.controller.js +1 -42
  132. package/dist/evals/runs.service.d.ts +8 -7
  133. package/dist/evals/runs.service.js +45 -30
  134. package/dist/evals/sets.controller.d.ts +2 -28
  135. package/dist/evals/sets.controller.js +1 -31
  136. package/dist/evals/sets.service.d.ts +7 -7
  137. package/dist/evals/sets.service.js +23 -17
  138. package/dist/evals/snapshot.d.ts +3 -2
  139. package/dist/evals/snapshot.js +17 -4
  140. package/dist/evals/step-replay.d.ts +2 -1
  141. package/dist/evals/step-replay.js +3 -2
  142. package/dist/extensions/admin-ops.d.ts +5 -3
  143. package/dist/extensions/admin-ops.js +17 -12
  144. package/dist/extensions/config-hash.d.ts +10 -0
  145. package/dist/extensions/config-hash.js +38 -0
  146. package/dist/extensions/deployment-config.d.ts +16 -1
  147. package/dist/extensions/deployment-config.js +83 -0
  148. package/dist/extensions/extensions.module.js +9 -12
  149. package/dist/extensions/host.d.ts +39 -12
  150. package/dist/extensions/host.js +129 -51
  151. package/dist/extensions/installs.d.ts +5 -0
  152. package/dist/extensions/installs.js +12 -0
  153. package/dist/extensions/org-config.d.ts +17 -2
  154. package/dist/extensions/org-config.js +23 -4
  155. package/dist/extensions/point-defaults.controller.d.ts +2 -8
  156. package/dist/extensions/point-defaults.controller.js +1 -3
  157. package/dist/extensions/point-defaults.d.ts +3 -1
  158. package/dist/extensions/point-defaults.js +4 -2
  159. package/dist/extensions/point-defaults.schemas.d.ts +9 -0
  160. package/dist/extensions/point-defaults.schemas.js +14 -0
  161. package/dist/extensions/state.module.d.ts +9 -0
  162. package/dist/extensions/state.module.js +38 -0
  163. package/dist/extensions/unavailable.d.ts +49 -0
  164. package/dist/extensions/unavailable.js +113 -0
  165. package/dist/files/previewers.controller.js +2 -3
  166. package/dist/files/previewers.d.ts +1 -1
  167. package/dist/files/previewers.js +4 -4
  168. package/dist/files/previewers.schemas.d.ts +10 -0
  169. package/dist/files/previewers.schemas.js +9 -0
  170. package/dist/http/api.module.js +4 -0
  171. package/dist/http/plugin-dispatch.d.ts +4 -1
  172. package/dist/http/plugin-dispatch.js +14 -2
  173. package/dist/identity/accounts.d.ts +43 -4
  174. package/dist/identity/accounts.js +74 -6
  175. package/dist/identity/auth.guard.js +10 -1
  176. package/dist/identity/cookies.d.ts +6 -0
  177. package/dist/identity/cookies.js +14 -0
  178. package/dist/identity/identity.module.js +3 -0
  179. package/dist/identity/initial-passwords.controller.d.ts +22 -0
  180. package/dist/identity/initial-passwords.controller.js +49 -0
  181. package/dist/identity/initial-passwords.d.ts +61 -0
  182. package/dist/identity/initial-passwords.job.d.ts +16 -0
  183. package/dist/identity/initial-passwords.job.js +46 -0
  184. package/dist/identity/initial-passwords.js +159 -0
  185. package/dist/identity/me.controller.d.ts +14 -0
  186. package/dist/identity/me.controller.js +39 -1
  187. package/dist/identity/principal.d.ts +8 -0
  188. package/dist/identity/principal.js +8 -0
  189. package/dist/identity/settings.d.ts +3 -1
  190. package/dist/identity/settings.js +6 -4
  191. package/dist/inbox/inbox.schemas.d.ts +8 -0
  192. package/dist/inbox/inbox.schemas.js +11 -0
  193. package/dist/inbox/platform-inbox.controller.d.ts +1 -1
  194. package/dist/inbox/platform-inbox.controller.js +2 -2
  195. package/dist/index.d.ts +4 -0
  196. package/dist/index.js +6 -0
  197. package/dist/infra/config/kernel-config.service.js +3 -0
  198. package/dist/infra/events/kernel-events.d.ts +8 -0
  199. package/dist/lifecycle/kernel-lifecycle.js +4 -0
  200. package/dist/models/embeddings.d.ts +82 -0
  201. package/dist/models/embeddings.js +326 -0
  202. package/dist/models/enablement.controller.d.ts +40 -0
  203. package/dist/models/enablement.controller.js +74 -0
  204. package/dist/models/enablement.d.ts +101 -0
  205. package/dist/models/enablement.js +264 -0
  206. package/dist/models/models.module.d.ts +5 -1
  207. package/dist/models/models.module.js +16 -4
  208. package/dist/models/org-models.schemas.d.ts +8 -0
  209. package/dist/models/org-models.schemas.js +22 -0
  210. package/dist/models/prices.d.ts +3 -1
  211. package/dist/models/prices.js +7 -5
  212. package/dist/models/purposes.d.ts +30 -6
  213. package/dist/models/purposes.js +68 -17
  214. package/dist/orgs/orgs.controller.d.ts +2 -5
  215. package/dist/orgs/orgs.controller.js +3 -6
  216. package/dist/orgs/orgs.schemas.d.ts +8 -0
  217. package/dist/orgs/orgs.schemas.js +16 -0
  218. package/dist/orgs/orgs.service.d.ts +3 -1
  219. package/dist/orgs/orgs.service.js +6 -4
  220. package/dist/orgs/settings.service.d.ts +9 -1
  221. package/dist/orgs/settings.service.js +20 -5
  222. package/dist/overrides.d.ts +4 -0
  223. package/dist/overrides.js +2 -0
  224. package/dist/platform/errors.d.ts +21 -4
  225. package/dist/platform/errors.js +45 -6
  226. package/dist/platform/exclusions.d.ts +2 -3
  227. package/dist/platform/exclusions.js +68 -831
  228. package/dist/platform/method.js +1 -1
  229. package/dist/platform/operation.d.ts +82 -5
  230. package/dist/platform/operation.js +62 -7
  231. package/dist/platform/ops/accounts.ops.d.ts +32 -0
  232. package/dist/platform/ops/accounts.ops.js +291 -0
  233. package/dist/platform/ops/admin.ops.d.ts +36 -0
  234. package/dist/platform/ops/admin.ops.js +389 -0
  235. package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
  236. package/dist/platform/ops/agent-skills.ops.js +226 -0
  237. package/dist/platform/ops/agent-templates.ops.d.ts +4 -1
  238. package/dist/platform/ops/agent-templates.ops.js +194 -14
  239. package/dist/platform/ops/agents.ops.d.ts +19 -1
  240. package/dist/platform/ops/agents.ops.js +481 -58
  241. package/dist/platform/ops/approvals.ops.d.ts +30 -0
  242. package/dist/platform/ops/approvals.ops.js +116 -0
  243. package/dist/platform/ops/background.ops.d.ts +14 -0
  244. package/dist/platform/ops/background.ops.js +134 -0
  245. package/dist/platform/ops/catalog-admin.ops.d.ts +74 -0
  246. package/dist/platform/ops/catalog-admin.ops.js +587 -0
  247. package/dist/platform/ops/channels.ops.d.ts +16 -0
  248. package/dist/platform/ops/channels.ops.js +195 -0
  249. package/dist/platform/ops/components.ops.d.ts +46 -0
  250. package/dist/platform/ops/components.ops.js +853 -0
  251. package/dist/platform/ops/connectors.ops.d.ts +4 -2
  252. package/dist/platform/ops/connectors.ops.js +68 -6
  253. package/dist/platform/ops/conversations.ops.d.ts +30 -0
  254. package/dist/platform/ops/conversations.ops.js +470 -0
  255. package/dist/platform/ops/environments.ops.d.ts +26 -0
  256. package/dist/platform/ops/environments.ops.js +289 -0
  257. package/dist/platform/ops/errors.d.ts +10 -5
  258. package/dist/platform/ops/errors.js +19 -11
  259. package/dist/platform/ops/evals.ops.d.ts +28 -0
  260. package/dist/platform/ops/evals.ops.js +783 -0
  261. package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
  262. package/dist/platform/ops/extensions-admin.ops.js +344 -0
  263. package/dist/platform/ops/extensions.ops.d.ts +7 -1
  264. package/dist/platform/ops/extensions.ops.js +248 -17
  265. package/dist/platform/ops/inbox.ops.d.ts +25 -0
  266. package/dist/platform/ops/inbox.ops.js +378 -0
  267. package/dist/platform/ops/marketplaces.ops.d.ts +7 -1
  268. package/dist/platform/ops/marketplaces.ops.js +326 -17
  269. package/dist/platform/ops/models.ops.d.ts +25 -0
  270. package/dist/platform/ops/models.ops.js +232 -0
  271. package/dist/platform/ops/org-plugins.ops.d.ts +29 -0
  272. package/dist/platform/ops/org-plugins.ops.js +329 -0
  273. package/dist/platform/ops/org-settings.ops.d.ts +16 -0
  274. package/dist/platform/ops/org-settings.ops.js +102 -0
  275. package/dist/platform/ops/orgs.ops.d.ts +28 -0
  276. package/dist/platform/ops/orgs.ops.js +295 -0
  277. package/dist/platform/ops/other-orgs.d.ts +20 -0
  278. package/dist/platform/ops/other-orgs.js +72 -0
  279. package/dist/platform/ops/platform.ops.d.ts +4 -4
  280. package/dist/platform/ops/platform.ops.js +23 -24
  281. package/dist/platform/ops/plugins.ops.d.ts +10 -8
  282. package/dist/platform/ops/plugins.ops.js +176 -77
  283. package/dist/platform/ops/previewers.ops.d.ts +14 -0
  284. package/dist/platform/ops/previewers.ops.js +109 -0
  285. package/dist/platform/ops/requests.ops.js +57 -19
  286. package/dist/platform/ops/skills.ops.d.ts +5 -1
  287. package/dist/platform/ops/skills.ops.js +129 -11
  288. package/dist/platform/ops/unavailable.d.ts +23 -0
  289. package/dist/platform/ops/unavailable.js +111 -0
  290. package/dist/platform/parity.d.ts +33 -0
  291. package/dist/platform/parity.js +272 -0
  292. package/dist/platform/platform-ops.module.d.ts +32 -0
  293. package/dist/platform/platform-ops.module.js +78 -11
  294. package/dist/platform/route-schemas.d.ts +18 -0
  295. package/dist/platform/route-schemas.js +60 -0
  296. package/dist/roles/worker.module.js +2 -0
  297. package/dist/runtime/context/build.d.ts +2 -0
  298. package/dist/runtime/context/build.js +28 -2
  299. package/dist/runtime/context/compaction.js +10 -1
  300. package/dist/runtime/context/run-context.d.ts +65 -0
  301. package/dist/runtime/context/run-context.js +215 -0
  302. package/dist/runtime/hook-calls.d.ts +8 -1
  303. package/dist/runtime/hook-calls.js +40 -9
  304. package/dist/runtime/model-call.d.ts +8 -3
  305. package/dist/runtime/model-call.js +30 -6
  306. package/dist/runtime/providers.d.ts +146 -32
  307. package/dist/runtime/providers.js +328 -67
  308. package/dist/runtime/run-context.service.d.ts +65 -0
  309. package/dist/runtime/run-context.service.js +220 -0
  310. package/dist/runtime/run-worker.d.ts +6 -1
  311. package/dist/runtime/run-worker.js +35 -10
  312. package/dist/runtime/runtime.module.js +2 -0
  313. package/dist/runtime/subagents/definition.d.ts +15 -15
  314. package/dist/runtime/subagents/definition.js +49 -118
  315. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  316. package/dist/runtime/usage-report-jobs.js +158 -0
  317. package/dist/runtime/usage-report.d.ts +33 -38
  318. package/dist/runtime/usage-report.js +152 -84
  319. package/dist/skills/changes.controller.js +2 -1
  320. package/dist/skills/changes.service.d.ts +1 -1
  321. package/dist/skills/changes.service.js +4 -4
  322. package/dist/skills/invocable.controller.d.ts +1 -1
  323. package/dist/skills/invocable.controller.js +2 -2
  324. package/dist/skills/invoke.d.ts +2 -2
  325. package/dist/skills/invoke.js +8 -1
  326. package/dist/skills/skills.controller.d.ts +4 -13
  327. package/dist/skills/skills.controller.js +8 -24
  328. package/dist/skills/skills.schemas.d.ts +48 -0
  329. package/dist/skills/skills.schemas.js +61 -0
  330. package/dist/skills/skills.service.d.ts +11 -1
  331. package/dist/skills/skills.service.js +37 -14
  332. package/dist/time-zone.d.ts +5 -0
  333. package/dist/time-zone.js +19 -0
  334. package/dist/tools/approvals.controller.js +2 -3
  335. package/dist/tools/approvals.schemas.d.ts +21 -0
  336. package/dist/tools/approvals.schemas.js +15 -0
  337. package/dist/tools/builtin-names.d.ts +10 -8
  338. package/dist/tools/builtin-names.js +16 -11
  339. package/dist/tools/builtins/builtin-tools.d.ts +3 -1
  340. package/dist/tools/builtins/builtin-tools.js +15 -3
  341. package/dist/tools/builtins/current-time.d.ts +26 -0
  342. package/dist/tools/builtins/current-time.js +99 -0
  343. package/dist/tools/builtins/platform.d.ts +19 -2
  344. package/dist/tools/builtins/platform.js +105 -16
  345. package/dist/tools/connectors.controller.d.ts +1 -2
  346. package/dist/tools/connectors.controller.js +1 -4
  347. package/dist/tools/connectors.schemas.d.ts +12 -0
  348. package/dist/tools/connectors.schemas.js +19 -0
  349. package/dist/tools/connectors.service.d.ts +5 -2
  350. package/dist/tools/connectors.service.js +7 -5
  351. package/dist/tools/org-tool-switches.d.ts +16 -2
  352. package/dist/tools/org-tool-switches.js +26 -9
  353. package/dist/tools/pipeline.js +9 -1
  354. package/dist/tools/registry.d.ts +48 -51
  355. package/dist/tools/registry.js +222 -233
  356. package/package.json +3 -3
  357. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  358. package/src/migrations/0090_initial_passwords.sql +27 -0
  359. package/src/migrations/0091_account_time_zone.sql +4 -0
  360. package/src/migrations/0092_tools_default_on.sql +27 -0
  361. package/dist/platform/redact-orgs.d.ts +0 -7
  362. package/dist/platform/redact-orgs.js +0 -52
@@ -0,0 +1,101 @@
1
+ import { ExtensionRegistry } from "../extensions/registry.js";
2
+ import { SuperAdminLock } from "../identity/super-admin.js";
3
+ import { CacheService } from "../infra/cache/cache.service.js";
4
+ import { KernelDb } from "../infra/database/kernel-db.js";
5
+ import { TransactionHost } from "../infra/database/transaction-host.js";
6
+ import { OrgLock } from "../orgs/org-lock.js";
7
+ /** The key of a model in a disabled set: `provider\u0000model`. */
8
+ export declare const modelKey: (provider: string, model: string) => string;
9
+ /** An agent whose current version uses a newly disabled model as its main model or fallback. */
10
+ export interface AffectedModelAgent {
11
+ id: string;
12
+ name: string;
13
+ orgId: string;
14
+ }
15
+ /** A purpose mapping targeting a newly disabled model: a deployment default (`orgId` null) or an org override. */
16
+ export interface AffectedModelPurpose {
17
+ purpose: string;
18
+ orgId: string | null;
19
+ }
20
+ /** The result of a disabled-list write: what now points at a model it disabled (spec B §5.3). */
21
+ export interface ModelDisableResult {
22
+ affected: {
23
+ agents: AffectedModelAgent[];
24
+ purposes: AffectedModelPurpose[];
25
+ };
26
+ }
27
+ /**
28
+ * A change to one layer's disabled list of a provider: ids to disable and ids to enable. An id in
29
+ * neither list keeps its stored state; an id in both is refused.
30
+ */
31
+ export interface ModelDisableChange {
32
+ disable: string[];
33
+ enable: string[];
34
+ }
35
+ /** The acting person of a write. */
36
+ export interface ModelDisableActor {
37
+ accountId: string;
38
+ tokenId?: string | undefined;
39
+ /** Merged into the audit detail (a write made through the Platform tool). */
40
+ auditDetail?: Record<string, unknown>;
41
+ }
42
+ /**
43
+ * Models disabled on two layers (spec B §5.3, table `model_disabled`): the platform's list (the
44
+ * super admin; such a model is invisible to every org) and each org's (an org admin). Every model a
45
+ * provider lists is enabled unless a layer disabled it; a row keys on the model id, so it applies to
46
+ * whichever list the org sees, and an id the list does not contain is kept harmlessly. Disabling
47
+ * never creates an org config copy.
48
+ *
49
+ * The lists are read from PG and cached in Redis (`@Cacheable`, evicted after the commit of each
50
+ * write), never in process memory. `ProviderRegistry` filters its lists and `resolve` with them;
51
+ * purposes check their targets with {@link isEnabled}.
52
+ */
53
+ export declare class ModelEnablement {
54
+ private readonly kdb;
55
+ readonly txHost: TransactionHost;
56
+ readonly cacheService: CacheService;
57
+ private readonly extensions;
58
+ private readonly adminLock;
59
+ private readonly orgLock;
60
+ constructor(kdb: KernelDb, txHost: TransactionHost, cacheService: CacheService, extensions: Pick<ExtensionRegistry, "list">, adminLock: Pick<SuperAdminLock, "lockAndAuthorize">, orgLock: Pick<OrgLock, "lockAndAuthorize">);
61
+ private get db();
62
+ /** One layer's disabled models (keys {@link modelKey}): the platform's (`null`) or the org's own. */
63
+ disabled(orgId: string | null): Promise<Set<string>>;
64
+ private disabledKeys;
65
+ private rowsOf;
66
+ /**
67
+ * The extensions `orgId` explicitly turned off: a row of the org's own switch
68
+ * (`extension_org_configs.enabled = false`, what the org's extension or plugin switch writes when
69
+ * an org admin turns it off), never a required bootstrap plugin. An extension with no row for the
70
+ * org is not in the set (it keeps working as before: spec A §8 with B's no-breakage anti-goal).
71
+ * Read from PG on every call (one small query; the switch has its own writers, nothing to evict).
72
+ */
73
+ switchedOff(orgId: string): Promise<Set<string>>;
74
+ /** Whether neither the platform nor `orgId` disabled the model (the lists only; see the class). */
75
+ isEnabled(orgId: string, provider: string, model: string): Promise<boolean>;
76
+ /**
77
+ * Changes the platform's disabled ids of `provider` by `change` (super admin, re-checked under
78
+ * the lock): ids in neither list keep their stored state. Returns what now points at a newly
79
+ * disabled model, across orgs.
80
+ */
81
+ setPlatform(provider: string, change: ModelDisableChange, actor: ModelDisableActor): Promise<ModelDisableResult>;
82
+ /**
83
+ * Changes the org's disabled ids of `provider` by `change` (`org.models.manage`, re-checked under
84
+ * the org lock): ids in neither list keep their stored state, so rows for models the org's page
85
+ * does not show (platform-disabled, or no longer listed) survive. Returns what in the org now
86
+ * points at a newly disabled model (its agents, its overrides and the deployment defaults it uses).
87
+ */
88
+ setOrg(orgId: string, provider: string, change: ModelDisableChange, actor: ModelDisableActor): Promise<ModelDisableResult>;
89
+ private apply;
90
+ /** Live agents (of `orgId`, or of every org) whose current version uses one of `models`. */
91
+ private agentsUsing;
92
+ /**
93
+ * Purpose mappings targeting one of `models`: for the platform every default and override, for
94
+ * an org its overrides and the deployment defaults (an org that disabled a default's model has
95
+ * that purpose unconfigured).
96
+ */
97
+ private purposesUsing;
98
+ }
99
+ /** The one {@link ModelEnablement}: the provider registry, purposes and the controllers read it. */
100
+ export declare class ModelEnablementModule {
101
+ }
@@ -0,0 +1,264 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable, Module } from "@nestjs/common";
11
+ import { ApiError } from "../errors.js";
12
+ import { ExtensionRegistry, ExtensionRegistryModule } from "../extensions/registry.js";
13
+ import { audit } from "../identity/audit.js";
14
+ import { SuperAdminLock, SuperAdminLockModule } from "../identity/super-admin.js";
15
+ import { CacheService } from "../infra/cache/cache.service.js";
16
+ import { Cacheable, CacheEvict } from "../infra/cache/cacheable.decorator.js";
17
+ import { KernelDb } from "../infra/database/kernel-db.js";
18
+ import { TransactionHost } from "../infra/database/transaction-host.js";
19
+ import { Transactional } from "../infra/database/transactional.decorator.js";
20
+ import { OrgLock, OrgLockModule } from "../orgs/org-lock.js";
21
+ /** The key of a model in a disabled set: `provider\u0000model`. */
22
+ export const modelKey = (provider, model) => `${provider}\u0000${model}`;
23
+ /** How long a disabled list stays cached (s); every write evicts it after its commit. */
24
+ const DISABLED_TTL_SECONDS = 300;
25
+ /** The cache key of a scope's disabled list (`platform` or `org.<id>`). */
26
+ const PLATFORM_SCOPE = "platform";
27
+ const orgScope = (orgId) => `org.${orgId}`;
28
+ /**
29
+ * Models disabled on two layers (spec B §5.3, table `model_disabled`): the platform's list (the
30
+ * super admin; such a model is invisible to every org) and each org's (an org admin). Every model a
31
+ * provider lists is enabled unless a layer disabled it; a row keys on the model id, so it applies to
32
+ * whichever list the org sees, and an id the list does not contain is kept harmlessly. Disabling
33
+ * never creates an org config copy.
34
+ *
35
+ * The lists are read from PG and cached in Redis (`@Cacheable`, evicted after the commit of each
36
+ * write), never in process memory. `ProviderRegistry` filters its lists and `resolve` with them;
37
+ * purposes check their targets with {@link isEnabled}.
38
+ */
39
+ let ModelEnablement = class ModelEnablement {
40
+ kdb;
41
+ txHost;
42
+ cacheService;
43
+ extensions;
44
+ adminLock;
45
+ orgLock;
46
+ constructor(kdb, txHost, cacheService, extensions, adminLock, orgLock) {
47
+ this.kdb = kdb;
48
+ this.txHost = txHost;
49
+ this.cacheService = cacheService;
50
+ this.extensions = extensions;
51
+ this.adminLock = adminLock;
52
+ this.orgLock = orgLock;
53
+ }
54
+ get db() {
55
+ return this.kdb.db;
56
+ }
57
+ /** One layer's disabled models (keys {@link modelKey}): the platform's (`null`) or the org's own. */
58
+ async disabled(orgId) {
59
+ return new Set(await this.disabledKeys(orgId === null ? PLATFORM_SCOPE : orgScope(orgId)));
60
+ }
61
+ async disabledKeys(scope) {
62
+ const orgId = scope === PLATFORM_SCOPE ? null : scope.slice("org.".length);
63
+ const rows = await this.rowsOf(orgId);
64
+ return rows.map((r) => modelKey(r.provider, r.model)).sort();
65
+ }
66
+ rowsOf(orgId, provider) {
67
+ let q = this.db
68
+ .selectFrom("model_disabled")
69
+ .select(["provider", "model"])
70
+ .where((eb) => (orgId === null ? eb("org_id", "is", null) : eb("org_id", "=", orgId)));
71
+ if (provider !== undefined)
72
+ q = q.where("provider", "=", provider);
73
+ return q.execute();
74
+ }
75
+ /**
76
+ * The extensions `orgId` explicitly turned off: a row of the org's own switch
77
+ * (`extension_org_configs.enabled = false`, what the org's extension or plugin switch writes when
78
+ * an org admin turns it off), never a required bootstrap plugin. An extension with no row for the
79
+ * org is not in the set (it keeps working as before: spec A §8 with B's no-breakage anti-goal).
80
+ * Read from PG on every call (one small query; the switch has its own writers, nothing to evict).
81
+ */
82
+ async switchedOff(orgId) {
83
+ const rows = await this.db
84
+ .selectFrom("extension_org_configs as eoc")
85
+ .leftJoin("extension_installs as ri", (j) => j.onRef("ri.name", "=", "eoc.plugin").on("ri.required", "=", true))
86
+ .select("eoc.plugin")
87
+ .where("eoc.org_id", "=", orgId)
88
+ .where("eoc.enabled", "=", false)
89
+ .where("ri.name", "is", null)
90
+ .execute();
91
+ return new Set(rows.map((r) => r.plugin));
92
+ }
93
+ /** Whether neither the platform nor `orgId` disabled the model (the lists only; see the class). */
94
+ async isEnabled(orgId, provider, model) {
95
+ const key = modelKey(provider, model);
96
+ const [platform, org] = await Promise.all([this.disabled(null), this.disabled(orgId)]);
97
+ return !platform.has(key) && !org.has(key);
98
+ }
99
+ /**
100
+ * Changes the platform's disabled ids of `provider` by `change` (super admin, re-checked under
101
+ * the lock): ids in neither list keep their stored state. Returns what now points at a newly
102
+ * disabled model, across orgs.
103
+ */
104
+ async setPlatform(provider, change, actor) {
105
+ await this.adminLock.lockAndAuthorize(actor.accountId);
106
+ return this.apply(null, provider, change, actor);
107
+ }
108
+ /**
109
+ * Changes the org's disabled ids of `provider` by `change` (`org.models.manage`, re-checked under
110
+ * the org lock): ids in neither list keep their stored state, so rows for models the org's page
111
+ * does not show (platform-disabled, or no longer listed) survive. Returns what in the org now
112
+ * points at a newly disabled model (its agents, its overrides and the deployment defaults it uses).
113
+ */
114
+ async setOrg(orgId, provider, change, actor) {
115
+ await this.orgLock.lockAndAuthorize(orgId, actor.accountId, "org.models.manage");
116
+ return this.apply(orgId, provider, change, actor);
117
+ }
118
+ async apply(orgId, provider, change, actor) {
119
+ if (!this.extensions.list("model-provider").some((e) => e.plugin === provider)) {
120
+ throw new ApiError("model.provider_not_found", `Model provider ${provider} is not installed`);
121
+ }
122
+ const disable = new Set(change.disable);
123
+ const both = change.enable.filter((m) => disable.has(m));
124
+ if (both.length > 0) {
125
+ throw new ApiError("validation_failed", `A model cannot be both disabled and enabled: ${[...new Set(both)].join(", ")}`);
126
+ }
127
+ const had = new Set((await this.rowsOf(orgId, provider)).map((r) => r.model));
128
+ const added = [...disable].filter((m) => !had.has(m)).sort();
129
+ const removed = [...new Set(change.enable)].filter((m) => had.has(m)).sort();
130
+ if (removed.length > 0) {
131
+ await this.db
132
+ .deleteFrom("model_disabled")
133
+ .where((eb) => (orgId === null ? eb("org_id", "is", null) : eb("org_id", "=", orgId)))
134
+ .where("provider", "=", provider)
135
+ .where("model", "in", removed)
136
+ .execute();
137
+ }
138
+ if (added.length > 0) {
139
+ await this.db
140
+ .insertInto("model_disabled")
141
+ .values(added.map((model) => ({
142
+ org_id: orgId,
143
+ provider,
144
+ model,
145
+ disabled_by: actor.accountId,
146
+ })))
147
+ .execute();
148
+ }
149
+ if (added.length > 0 || removed.length > 0) {
150
+ await audit(this.db, {
151
+ actorAccountId: actor.accountId,
152
+ ...(actor.tokenId !== undefined && { actorTokenId: actor.tokenId }),
153
+ ...(orgId !== null && { orgId }),
154
+ action: orgId === null ? "model.disabled_set" : "org.model_disabled_set",
155
+ target: provider,
156
+ detail: {
157
+ scope: orgId === null ? "platform" : "org",
158
+ disabled: added,
159
+ enabled: removed,
160
+ ...actor.auditDetail,
161
+ },
162
+ });
163
+ }
164
+ return {
165
+ affected: {
166
+ agents: await this.agentsUsing(orgId, provider, added),
167
+ purposes: await this.purposesUsing(orgId, provider, added),
168
+ },
169
+ };
170
+ }
171
+ /** Live agents (of `orgId`, or of every org) whose current version uses one of `models`. */
172
+ async agentsUsing(orgId, provider, models) {
173
+ if (models.length === 0)
174
+ return [];
175
+ const wanted = new Set(models);
176
+ let q = this.db
177
+ .selectFrom("agents as a")
178
+ .innerJoin("agent_versions as v", (j) => j.onRef("v.agent_id", "=", "a.id").onRef("v.version", "=", "a.current_version"))
179
+ .select(["a.id", "a.org_id", "v.definition"])
180
+ .where("a.deleted_at", "is", null)
181
+ .orderBy("a.org_id")
182
+ .orderBy("a.id");
183
+ if (orgId !== null)
184
+ q = q.where("a.org_id", "=", orgId);
185
+ const out = [];
186
+ for (const r of await q.execute()) {
187
+ const def = r.definition;
188
+ const uses = [def?.model, def?.fallback].some((x) => {
189
+ const ref = x;
190
+ return ref?.provider === provider && typeof ref.model === "string" && wanted.has(ref.model);
191
+ });
192
+ if (uses) {
193
+ out.push({
194
+ id: r.id,
195
+ name: typeof def?.name === "string" ? def.name : r.id,
196
+ orgId: r.org_id,
197
+ });
198
+ }
199
+ }
200
+ return out;
201
+ }
202
+ /**
203
+ * Purpose mappings targeting one of `models`: for the platform every default and override, for
204
+ * an org its overrides and the deployment defaults (an org that disabled a default's model has
205
+ * that purpose unconfigured).
206
+ */
207
+ async purposesUsing(orgId, provider, models) {
208
+ if (models.length === 0)
209
+ return [];
210
+ let q = this.db
211
+ .selectFrom("model_purpose_mappings")
212
+ .select(["purpose", "org_id"])
213
+ .where("provider", "=", provider)
214
+ .where("model", "in", models)
215
+ .orderBy("purpose")
216
+ .orderBy("org_id", (ob) => ob.nullsFirst());
217
+ if (orgId === null) {
218
+ return (await q.execute()).map((r) => ({ purpose: r.purpose, orgId: r.org_id }));
219
+ }
220
+ q = q.where((eb) => eb.or([eb("org_id", "is", null), eb("org_id", "=", orgId)]));
221
+ const rows = await q.execute();
222
+ // a default the org overrides is not what the org uses
223
+ const overridden = new Set((await this.db
224
+ .selectFrom("model_purpose_mappings")
225
+ .select("purpose")
226
+ .where("org_id", "=", orgId)
227
+ .execute()).map((r) => r.purpose));
228
+ return rows
229
+ .filter((r) => r.org_id !== null || !overridden.has(r.purpose))
230
+ .map((r) => ({ purpose: r.purpose, orgId: r.org_id }));
231
+ }
232
+ };
233
+ __decorate([
234
+ Cacheable({ key: "capk:model-disabled:#{0}", ttl: DISABLED_TTL_SECONDS })
235
+ ], ModelEnablement.prototype, "disabledKeys", null);
236
+ __decorate([
237
+ Transactional(),
238
+ CacheEvict({ key: `capk:model-disabled:${PLATFORM_SCOPE}` })
239
+ ], ModelEnablement.prototype, "setPlatform", null);
240
+ __decorate([
241
+ Transactional(),
242
+ CacheEvict({ key: "capk:model-disabled:org.#{0}" })
243
+ ], ModelEnablement.prototype, "setOrg", null);
244
+ ModelEnablement = __decorate([
245
+ Injectable(),
246
+ __param(0, Inject(KernelDb)),
247
+ __param(1, Inject(TransactionHost)),
248
+ __param(2, Inject(CacheService)),
249
+ __param(3, Inject(ExtensionRegistry)),
250
+ __param(4, Inject(SuperAdminLock)),
251
+ __param(5, Inject(OrgLock))
252
+ ], ModelEnablement);
253
+ export { ModelEnablement };
254
+ /** The one {@link ModelEnablement}: the provider registry, purposes and the controllers read it. */
255
+ let ModelEnablementModule = class ModelEnablementModule {
256
+ };
257
+ ModelEnablementModule = __decorate([
258
+ Module({
259
+ imports: [ExtensionRegistryModule, SuperAdminLockModule, OrgLockModule],
260
+ providers: [ModelEnablement],
261
+ exports: [ModelEnablement],
262
+ })
263
+ ], ModelEnablementModule);
264
+ export { ModelEnablementModule };
@@ -1,3 +1,7 @@
1
- /** Model prices and model purposes. */
1
+ /**
2
+ * Model prices, model purposes, the model disabled lists and the `ctx.models` embeddings broker.
3
+ * Below the extension host (the host injects {@link ModelEmbeddings} for `ctx.models`): it must not
4
+ * import `ExtensionsModule`.
5
+ */
2
6
  export declare class ModelsModule {
3
7
  }
@@ -9,16 +9,28 @@ import { ExtensionRegistryModule } from "../extensions/registry.js";
9
9
  import { IdentityModule } from "../identity/identity.module.js";
10
10
  import { OrgLockModule } from "../orgs/org-lock.js";
11
11
  import { ProvidersModule } from "../runtime/providers.js";
12
+ import { ModelEmbeddings } from "./embeddings.js";
13
+ import { ModelEnablementModule } from "./enablement.js";
12
14
  import { PricesService } from "./prices.js";
13
15
  import { ModelPurposesService } from "./purposes.js";
14
- /** Model prices and model purposes. */
16
+ /**
17
+ * Model prices, model purposes, the model disabled lists and the `ctx.models` embeddings broker.
18
+ * Below the extension host (the host injects {@link ModelEmbeddings} for `ctx.models`): it must not
19
+ * import `ExtensionsModule`.
20
+ */
15
21
  let ModelsModule = class ModelsModule {
16
22
  };
17
23
  ModelsModule = __decorate([
18
24
  Module({
19
- imports: [ExtensionRegistryModule, IdentityModule, OrgLockModule, ProvidersModule],
20
- providers: [PricesService, ModelPurposesService],
21
- exports: [PricesService, ModelPurposesService],
25
+ imports: [
26
+ ExtensionRegistryModule,
27
+ IdentityModule,
28
+ OrgLockModule,
29
+ ProvidersModule,
30
+ ModelEnablementModule,
31
+ ],
32
+ providers: [PricesService, ModelPurposesService, ModelEmbeddings],
33
+ exports: [PricesService, ModelPurposesService, ModelEnablementModule, ModelEmbeddings],
22
34
  })
23
35
  ], ModelsModule);
24
36
  export { ModelsModule };
@@ -0,0 +1,8 @@
1
+ import { z } from "zod";
2
+ import type { RouteSchemas } from "../platform/route-schemas.js";
3
+ /** `:purpose` as the org purpose route takes it (`@Param`). */
4
+ export declare const ModelPurposePathParams: z.ZodObject<{
5
+ purpose: z.ZodString;
6
+ }, z.core.$strip>;
7
+ /** The org's model routes (the admin console's are the platform-admin domain's). */
8
+ export declare const ORG_MODEL_ROUTES: readonly RouteSchemas[];
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ import { ModelsQuery } from "../agents/models.controller.js";
3
+ import { ModelDisabledPatch, ModelProviderParams } from "./enablement.controller.js";
4
+ import { PURPOSE_PUT } from "./purposes.js";
5
+ /** `:purpose` as the org purpose route takes it (`@Param`). */
6
+ export const ModelPurposePathParams = z.object({ purpose: z.string().min(1) });
7
+ /** The org's model routes (the admin console's are the platform-admin domain's). */
8
+ export const ORG_MODEL_ROUTES = [
9
+ { route: "GET /api/v1/orgs/:orgId/models", query: ModelsQuery },
10
+ { route: "GET /api/v1/orgs/:orgId/models/catalog" },
11
+ { route: "GET /api/v1/orgs/:orgId/model-purposes" },
12
+ {
13
+ route: "PUT /api/v1/orgs/:orgId/model-purposes/:purpose",
14
+ params: ModelPurposePathParams,
15
+ body: PURPOSE_PUT,
16
+ },
17
+ {
18
+ route: "PATCH /api/v1/orgs/:orgId/models/:provider/disabled",
19
+ params: ModelProviderParams,
20
+ body: ModelDisabledPatch,
21
+ },
22
+ ];
@@ -53,7 +53,9 @@ export declare class PricesService {
53
53
  provider: string;
54
54
  model: string;
55
55
  price: null;
56
- }, actorAccountId: string, actorTokenId?: string): Promise<void>;
56
+ }, actorAccountId: string, actorTokenId?: string,
57
+ /** Merged into the audit detail (the Platform tool's `via: "agent"`). */
58
+ auditDetail?: Record<string, unknown>): Promise<void>;
57
59
  /** The write of {@link put}, under the super admin lock. */
58
60
  private write;
59
61
  }
@@ -90,15 +90,17 @@ let PricesService = class PricesService {
90
90
  * 设置或删除(`price: null`)一个模型的价格:事务内取超级管理员锁并复核发起人仍是活跃超级管理员
91
91
  * (否则 `forbidden`),写审计 `model_price.updated` / `model_price.deleted`。
92
92
  */
93
- async put(input, actorAccountId, actorTokenId) {
93
+ async put(input, actorAccountId, actorTokenId,
94
+ /** Merged into the audit detail (the Platform tool's `via: "agent"`). */
95
+ auditDetail) {
94
96
  const check = MODEL_PRICE_PUT.safeParse(input);
95
97
  if (!check.success) {
96
98
  throw new ApiError("validation_failed", "Invalid model price", check.error.issues.map((i) => ({ path: i.path.join("."), message: i.message })));
97
99
  }
98
- await this.write(check.data, actorAccountId, actorTokenId);
100
+ await this.write(check.data, actorAccountId, actorTokenId, auditDetail);
99
101
  }
100
102
  /** The write of {@link put}, under the super admin lock. */
101
- async write(v, actorAccountId, actorTokenId) {
103
+ async write(v, actorAccountId, actorTokenId, auditDetail) {
102
104
  await this.adminLock.lockAndAuthorize(actorAccountId);
103
105
  const target = `${v.provider}/${v.model}`;
104
106
  if ("price" in v) {
@@ -112,7 +114,7 @@ let PricesService = class PricesService {
112
114
  ...(actorTokenId !== undefined && { actorTokenId }),
113
115
  action: "model_price.deleted",
114
116
  target,
115
- detail: { provider: v.provider, model: v.model },
117
+ detail: { provider: v.provider, model: v.model, ...auditDetail },
116
118
  });
117
119
  return;
118
120
  }
@@ -133,7 +135,7 @@ let PricesService = class PricesService {
133
135
  ...(actorTokenId !== undefined && { actorTokenId }),
134
136
  action: "model_price.updated",
135
137
  target,
136
- detail: { ...v },
138
+ detail: { ...v, ...auditDetail },
137
139
  });
138
140
  }
139
141
  };
@@ -13,7 +13,9 @@ import { ProviderRegistry } from "../runtime/providers.js";
13
13
  * - 用途 = 内核用途 {@link KERNEL_PURPOSES}(目前只有评委 `eval`),或已加载插件 `permissions.models` 声明的;
14
14
  * - 映射 = 部署默认(`org_id` 为 null,超级管理员设)+ 组织覆盖(组织管理员设,`org.models.manage`);
15
15
  * 生效的映射先取组织覆盖、再取部署默认,都没有 → `model.unconfigured`;
16
- * - 目标模型按部署范围解析(与运行时一致),参数按目标模型自己的声明严格校验;不做模型白名单;
16
+ * - a target's kind must equal the purpose's kind; an org's override must be enabled in the org on
17
+ * save (a deployment default: not disabled on the platform), and an effective target disabled in
18
+ * the org (by either layer) counts as unconfigured there (spec B §5.3);参数按目标模型自己的声明严格校验;
17
19
  * - 每次都查 PG,不在进程内缓存(多副本下改映射立即生效)。`ctx.models` 仍预留,插件暂不能调用。
18
20
  */
19
21
  /**
@@ -139,7 +141,7 @@ export declare class ModelPurposesService {
139
141
  readonly txHost: TransactionHost;
140
142
  private readonly adminLock;
141
143
  private readonly orgLock;
142
- constructor(db: KernelDb, extensions: ExtensionRegistry, config: KernelConfigService, providers: Pick<ProviderRegistry, "resolve">, txHost: TransactionHost, adminLock: SuperAdminLock, orgLock: OrgLock);
144
+ constructor(db: KernelDb, extensions: ExtensionRegistry, config: KernelConfigService, providers: Pick<ProviderRegistry, "resolve" | "platformInfo">, txHost: TransactionHost, adminLock: SuperAdminLock, orgLock: OrgLock);
143
145
  /** 全部已声明的用途:内核的在前,其后按插件加载顺序。 */
144
146
  private declared;
145
147
  private find;
@@ -147,16 +149,38 @@ export declare class ModelPurposesService {
147
149
  private views;
148
150
  /** 全部用途与映射;不给 `orgId` = 部署级视图(`override` 一律为 null)。 */
149
151
  list(orgId?: string): Promise<PurposeView[]>;
150
- /** 校验目标:模型可解析(部署范围)、参数按它的声明严格通过。 */
152
+ /**
153
+ * 校验目标:模型可解析且启用(an org's override for the org, a deployment default in the
154
+ * platform view)、its kind is the purpose's `kind`、参数按它的声明严格通过。
155
+ */
151
156
  private check;
152
157
  private set;
158
+ /**
159
+ * The checks {@link set} runs before writing, nothing written: an unknown purpose, and a target
160
+ * model the scope cannot use, of another kind, or with invalid params (the Platform tool's
161
+ * precheck, so a known failure never reaches the confirmation card).
162
+ */
163
+ validate(orgId: string | null, purpose: string, target: PurposeTarget | null): Promise<void>;
153
164
  /** The mapping write of {@link set}, under the super admin or org lock. */
154
165
  private write;
155
166
  /** 设置(或 `null` 清除)部署默认;只有超级管理员(事务内复核)。 */
156
- setDefault(purpose: string, target: PurposeTarget | null, actor: string, actorTokenId?: string): Promise<PurposeView>;
167
+ setDefault(purpose: string, target: PurposeTarget | null, actor: string, actorTokenId?: string,
168
+ /** Merged into the audit detail (a write made through the Platform tool). */
169
+ auditDetail?: Record<string, unknown>): Promise<PurposeView>;
157
170
  /** 设置(或 `null` 清除)组织覆盖;事务内锁组织并复核 `org.models.manage`。 */
158
- setOrg(orgId: string, purpose: string, target: PurposeTarget | null, actor: string, actorTokenId?: string): Promise<PurposeView>;
159
- /** 生效的映射:组织覆盖,否则部署默认;都没有 → `model.unconfigured`;用途未声明 → `model.purpose_unknown`。 */
171
+ setOrg(orgId: string, purpose: string, target: PurposeTarget | null, actor: string, actorTokenId?: string,
172
+ /** Merged into the audit detail (a write made through the Platform tool). */
173
+ auditDetail?: Record<string, unknown>): Promise<PurposeView>;
174
+ /**
175
+ * 生效的映射:组织覆盖,否则部署默认;都没有 → `model.unconfigured`;用途未声明 → `model.purpose_unknown`。
176
+ * An effective target the org cannot use counts as unconfigured there (spec B §5.3): checked in
177
+ * the registry's org view, so a model the platform or the org disabled, a provider off or needing
178
+ * configuration in the org, a model gone from the org's list or of another kind than the purpose
179
+ * all give `model.unconfigured`. A provider whose list fails (`ProviderListError`) keeps the
180
+ * mapping: the call that follows resolves the model again and fails there, retryably, so paths
181
+ * that only read the mapping (sub-agent tiers, eval start, `ctx.models.describe`) do not fail on
182
+ * a transient list error.
183
+ */
160
184
  resolve(orgId: string, purpose: string): Promise<PurposeTarget>;
161
185
  /** The target a {@link chat} call on `purpose` uses: the mapping, else `fallback` when unmapped. */
162
186
  private chatTarget;