@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,389 @@
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 } from "@nestjs/common";
11
+ import { z } from "zod";
12
+ import { DeploymentSettingsBody, PurposeParams } from "../../admin/admin.schemas.js";
13
+ import { CatalogRequestsService } from "../../catalog/requests.service.js";
14
+ import { ApiError } from "../../errors.js";
15
+ import { ExtensionAdmin } from "../../extensions/admin-view.js";
16
+ import { ExtensionDisplayNames } from "../../extensions/display-name.js";
17
+ import { extensionNeedsAction } from "../../extensions/permission-view.js";
18
+ import { ExtensionRegistry } from "../../extensions/registry.js";
19
+ import { AccountsService } from "../../identity/accounts.js";
20
+ import { DEPLOYMENT_SETTINGS_PATCH, SettingsService } from "../../identity/settings.js";
21
+ import { ModelDisabledPatch, ModelProviderParams } from "../../models/enablement.controller.js";
22
+ import { ModelEnablement } from "../../models/enablement.js";
23
+ import { MODEL_PRICE_PUT, PricesService } from "../../models/prices.js";
24
+ import { purposeTargetOf } from "../../models/purposes.controller.js";
25
+ import { ModelPurposesService, PURPOSE_PUT, withDeclaredByNames } from "../../models/purposes.js";
26
+ import { OrgsService } from "../../orgs/orgs.service.js";
27
+ import { ProviderRegistry } from "../../runtime/providers.js";
28
+ import { defineOperation } from "../operation.js";
29
+ import { PlatformOperations } from "../registry.js";
30
+ import { precheckBy, viaAgent } from "./errors.js";
31
+ import { Cursor, pageOf, startOf } from "./paging.js";
32
+ import { localized, named } from "./summary.js";
33
+ const PAGE = 50;
34
+ /** The deployment-wide settings `admin.update-settings` changes (the per-org limits are orgs.set-limits). */
35
+ const SettingsInput = DEPLOYMENT_SETTINGS_PATCH.pick({
36
+ orgCreation: true,
37
+ priceCurrency: true,
38
+ customConnectors: true,
39
+ customSkills: true,
40
+ orgMarketplaceBrowse: true,
41
+ }).strict();
42
+ const ProviderId = ModelProviderParams.shape.provider.describe("The model provider (models.platform-list), e.g. the plugin name of its extension.");
43
+ /** `provider/model` of a purpose target, or null. */
44
+ const refOf = (t) => t === null ? null : `${t.model.provider}/${t.model.model}`;
45
+ /**
46
+ * Admin console operations of the `Platform` tool (spec §14.2): the dashboard totals, the
47
+ * deployment settings, and the platform's models (the model catalog with the platform's disabled
48
+ * list, the price table, the default model per purpose). Super admin only, through their own
49
+ * private agent. The per-org overrides of models and purposes are the org's own pages.
50
+ */
51
+ let AdminOperations = class AdminOperations {
52
+ registry;
53
+ extensions;
54
+ orgs;
55
+ accounts;
56
+ catalogRequests;
57
+ settings;
58
+ providers;
59
+ displayNames;
60
+ extensionRegistry;
61
+ enablement;
62
+ prices;
63
+ purposes;
64
+ constructor(registry, extensions, orgs, accounts, catalogRequests, settings, providers, displayNames, extensionRegistry, enablement, prices, purposes) {
65
+ this.registry = registry;
66
+ this.extensions = extensions;
67
+ this.orgs = orgs;
68
+ this.accounts = accounts;
69
+ this.catalogRequests = catalogRequests;
70
+ this.settings = settings;
71
+ this.providers = providers;
72
+ this.displayNames = displayNames;
73
+ this.extensionRegistry = extensionRegistry;
74
+ this.enablement = enablement;
75
+ this.prices = prices;
76
+ this.purposes = purposes;
77
+ }
78
+ assertProvider(provider) {
79
+ if (!this.extensionRegistry.list("model-provider").some((e) => e.plugin === provider)) {
80
+ throw new ApiError("model.provider_not_found", `Model provider ${provider} is not installed`);
81
+ }
82
+ }
83
+ onModuleInit() {
84
+ this.registry.register([
85
+ defineOperation({
86
+ id: "admin.overview",
87
+ description: "The admin console's dashboard totals (super admin): extensions that need the super admin's action, catalog requests waiting for deployment, and the numbers of orgs and accounts.",
88
+ input: z.object({}).strict(),
89
+ example: {},
90
+ authz: { superAdmin: true },
91
+ mirrors: ["GET /api/v1/admin/overview"],
92
+ confirm: "read",
93
+ run: async () => {
94
+ const [plugins, orgs, accounts, catalogRequestsPending] = await Promise.all([
95
+ this.extensions.list(),
96
+ this.orgs.listAll(),
97
+ this.accounts.count(),
98
+ this.catalogRequests.countPendingDeployment(),
99
+ ]);
100
+ return {
101
+ extensionsNeedingAction: plugins.filter((p) => extensionNeedsAction(p.status)).length,
102
+ catalogRequestsPending,
103
+ orgs: orgs.length,
104
+ accounts,
105
+ };
106
+ },
107
+ }),
108
+ defineOperation({
109
+ id: "admin.settings",
110
+ description: "Read the deployment settings (super admin): who may create orgs (orgCreation), the price currency, whether orgs may create their own connectors and skills, whether org admins may browse the marketplaces, and the per-org limit overrides keyed by org id (orgs.get reads one org's).",
111
+ input: z.object({}).strict(),
112
+ example: {},
113
+ authz: { superAdmin: true },
114
+ mirrors: ["GET /api/v1/admin/settings"],
115
+ confirm: "read",
116
+ run: () => this.settings.get(),
117
+ }),
118
+ defineOperation({
119
+ id: "admin.update-settings",
120
+ description: "Change deployment settings (super admin); give only the keys to change: orgCreation (anyone or super_admin), priceCurrency (ISO 4217 code), customConnectors / customSkills (allow or deny: whether orgs may create their own instead of installing from the catalog), orgMarketplaceBrowse (true or false). Per-org limits are orgs.set-limits.",
121
+ input: SettingsInput.refine((b) => Object.keys(b).length > 0, {
122
+ message: "at least one setting is required",
123
+ }),
124
+ example: { orgCreation: "super_admin" },
125
+ authz: { superAdmin: true },
126
+ mirrors: ["PUT /api/v1/admin/settings"],
127
+ // the per-org override records are orgs.set-limits (one org at a time)
128
+ omits: ["runConcurrencyOverrides", "sandboxLimitOverrides", "subagentLimitOverrides"],
129
+ confirm: "platform",
130
+ errors: [
131
+ {
132
+ code: "validation_failed",
133
+ next: "Fix the values as the message says (admin.settings shows the current ones).",
134
+ },
135
+ ],
136
+ precheck: async (i) => {
137
+ const r = DeploymentSettingsBody.safeParse(i);
138
+ return r.success
139
+ ? { ok: true }
140
+ : { ok: false, code: "validation_failed", message: r.error.issues[0]?.message ?? "" };
141
+ },
142
+ summary: (i) => {
143
+ const parts = Object.entries(i).map(([k, v]) => `${k}=${String(v)}`);
144
+ return {
145
+ zh: `修改平台部署设置:${parts.join(",")}`,
146
+ en: `Change the deployment settings: ${parts.join(", ")}`,
147
+ };
148
+ },
149
+ run: (input, ctx) => this.settings.update(input, ctx.actorAccountId, undefined, viaAgent("admin.update-settings", ctx)),
150
+ }),
151
+ defineOperation({
152
+ id: "models.platform-list",
153
+ description: "The platform's model catalog (super admin). Without provider: one row per model provider with its state (ok, error with the reason, org_configured: each org configures it), its plugin and how many models it lists and how many the platform disabled. With provider: that provider's models, one row each (id, name, kind, disabled), paged by 50 (pass the returned next as params.cursor).",
154
+ input: z.object({ provider: ProviderId.optional(), cursor: Cursor.optional() }).strict(),
155
+ example: {},
156
+ authz: { superAdmin: true },
157
+ mirrors: ["GET /api/v1/admin/models"],
158
+ extras: ["provider", "cursor"],
159
+ confirm: "read",
160
+ errors: [
161
+ {
162
+ code: "model.provider_not_found",
163
+ next: "Pick a provider from models.platform-list.",
164
+ },
165
+ ],
166
+ run: async (input) => {
167
+ const providers = await this.providers.listWithStatus();
168
+ if (input.provider === undefined) {
169
+ const names = await this.displayNames.many(providers.map((p) => p.plugin));
170
+ return {
171
+ items: providers.map((p) => ({
172
+ id: p.provider,
173
+ name: localized(names.get(p.plugin), p.plugin).en,
174
+ state: p.status,
175
+ ...(p.error !== undefined && { reason: p.error }),
176
+ plugin: p.plugin,
177
+ models: p.models.length,
178
+ disabled: p.models.filter((m) => m.disabled === true).length,
179
+ })),
180
+ };
181
+ }
182
+ const p = providers.find((x) => x.provider === input.provider);
183
+ if (!p) {
184
+ throw new ApiError("model.provider_not_found", `Model provider ${input.provider} is not installed`);
185
+ }
186
+ return pageOf(p.models.map((m) => ({
187
+ id: m.id,
188
+ name: m.displayName ?? m.id,
189
+ kind: m.kind,
190
+ disabled: m.disabled === true,
191
+ })), startOf(input.cursor), PAGE);
192
+ },
193
+ }),
194
+ defineOperation({
195
+ id: "models.set-platform-disabled",
196
+ description: "Disable or enable models of one provider for the whole platform (super admin): disable and enable list model ids (models.platform-list with provider); ids in neither keep their state. A disabled model is invisible to every org. The result lists the agents and purposes, across orgs, that point at a newly disabled model (the disable is not refused for them).",
197
+ input: z
198
+ .object({
199
+ provider: ProviderId,
200
+ disable: ModelDisabledPatch.shape.disable,
201
+ enable: ModelDisabledPatch.shape.enable,
202
+ })
203
+ .strict()
204
+ .refine((i) => i.disable.length > 0 || i.enable.length > 0, {
205
+ message: "give disable or enable",
206
+ }),
207
+ example: { provider: "model-fake", disable: ["fake-1"], enable: [] },
208
+ authz: { superAdmin: true },
209
+ mirrors: ["PATCH /api/v1/admin/models/:provider/disabled"],
210
+ confirm: "platform",
211
+ errors: [
212
+ {
213
+ code: "model.provider_not_found",
214
+ next: "Pick a provider from models.platform-list.",
215
+ },
216
+ {
217
+ code: "validation_failed",
218
+ next: "Fix the lists as the message says (an id in both is refused).",
219
+ },
220
+ ],
221
+ precheck: async (i) => {
222
+ const r = await precheckBy(async () => this.assertProvider(i.provider));
223
+ if (!r.ok)
224
+ return r;
225
+ const disable = new Set(i.disable);
226
+ const both = i.enable.filter((m) => disable.has(m));
227
+ return both.length === 0
228
+ ? { ok: true }
229
+ : {
230
+ ok: false,
231
+ code: "validation_failed",
232
+ message: `Both disabled and enabled: ${both.slice(0, 5).join(", ")}`,
233
+ };
234
+ },
235
+ summary: (i) => {
236
+ const list = (ids) => ids.slice(0, 5).map(named).join(", ") + (ids.length > 5 ? ` (+${ids.length - 5})` : "");
237
+ const zh = [
238
+ i.disable.length > 0 && `停用 ${list(i.disable)}`,
239
+ i.enable.length > 0 && `启用 ${list(i.enable)}`,
240
+ ].filter((p) => typeof p === "string");
241
+ const en = [
242
+ i.disable.length > 0 && `disable ${list(i.disable)}`,
243
+ i.enable.length > 0 && `enable ${list(i.enable)}`,
244
+ ].filter((p) => typeof p === "string");
245
+ return {
246
+ zh: `在全平台${zh.join(",")}(供应商 ${named(i.provider)})`,
247
+ en: `Platform-wide, ${en.join(" and ")} (provider ${named(i.provider)})`,
248
+ };
249
+ },
250
+ run: (input, ctx) => this.enablement.setPlatform(input.provider, { disable: input.disable, enable: input.enable }, {
251
+ accountId: ctx.actorAccountId,
252
+ auditDetail: viaAgent("models.set-platform-disabled", ctx),
253
+ }),
254
+ }),
255
+ defineOperation({
256
+ id: "models.prices",
257
+ description: "The model price table (super admin): price per million tokens for input, output, cache read and cache write, by provider and model, in the deployment's currency. Pages by 50: pass the returned next as params.cursor.",
258
+ input: z.object({ cursor: Cursor.optional() }).strict(),
259
+ example: {},
260
+ authz: { superAdmin: true },
261
+ mirrors: ["GET /api/v1/admin/model-prices"],
262
+ extras: ["cursor"],
263
+ confirm: "read",
264
+ run: async (input) => {
265
+ const [prices, s] = await Promise.all([this.prices.list(), this.settings.get()]);
266
+ return { currency: s.priceCurrency, ...pageOf(prices, startOf(input.cursor), PAGE) };
267
+ },
268
+ }),
269
+ defineOperation({
270
+ id: "models.set-price",
271
+ description: "Set the price of one model per million tokens (super admin): provider, model, inputPerMTok, outputPerMTok, cacheReadPerMTok and cacheWritePerMTok (null when the model has none); or provider, model and price: null to remove its price. Prices only estimate costs in the deployment's currency.",
272
+ input: MODEL_PRICE_PUT,
273
+ example: {
274
+ provider: "model-fake",
275
+ model: "fake-1",
276
+ inputPerMTok: 3,
277
+ outputPerMTok: 15,
278
+ cacheReadPerMTok: null,
279
+ cacheWritePerMTok: null,
280
+ },
281
+ authz: { superAdmin: true },
282
+ mirrors: ["PUT /api/v1/admin/model-prices"],
283
+ confirm: "platform",
284
+ errors: [{ code: "validation_failed", next: "Fix the prices as the message says." }],
285
+ summary: (i) => {
286
+ const m = `${named(i.provider)}/${named(i.model)}`;
287
+ return "price" in i
288
+ ? { zh: `删除模型 ${m} 的价格`, en: `Remove the price of model ${m}` }
289
+ : {
290
+ zh: `设置模型 ${m} 的价格(每百万 token):输入 ${i.inputPerMTok},输出 ${i.outputPerMTok}`,
291
+ en: `Set the price of model ${m} per million tokens: input ${i.inputPerMTok}, output ${i.outputPerMTok}`,
292
+ };
293
+ },
294
+ run: async (input, ctx) => {
295
+ await this.prices.put(input, ctx.actorAccountId, undefined, viaAgent("models.set-price", ctx));
296
+ const [prices, s] = await Promise.all([this.prices.list(), this.settings.get()]);
297
+ const price = prices.find((p) => p.provider === input.provider && p.model === input.model);
298
+ return { price: price ?? null, currency: s.priceCurrency };
299
+ },
300
+ }),
301
+ defineOperation({
302
+ id: "models.platform-purposes",
303
+ description: "The model purposes (super admin): what the kernel and extensions use a model for (title generation, summaries, embeddings, …), one row each with its kind (chat or embedding), who declares it, and the platform's default model (provider/model, null when none). Orgs may override a purpose on their own page.",
304
+ input: z.object({}).strict(),
305
+ example: {},
306
+ authz: { superAdmin: true },
307
+ mirrors: ["GET /api/v1/admin/model-purposes"],
308
+ confirm: "read",
309
+ run: async () => {
310
+ const list = await withDeclaredByNames(await this.purposes.list(), this.displayNames);
311
+ return {
312
+ items: list.map((p) => ({
313
+ id: p.purpose,
314
+ name: p.label.en,
315
+ state: p.default === null ? "unconfigured" : "configured",
316
+ kind: p.kind,
317
+ declaredBy: p.declaredBy,
318
+ default: refOf(p.default),
319
+ })),
320
+ };
321
+ },
322
+ }),
323
+ defineOperation({
324
+ id: "models.set-platform-purpose",
325
+ description: "Set the platform's default model of a purpose (super admin), or clear it with target: null. target is {model: {provider, model}, params?}; the model must be a platform model of the purpose's kind (models.platform-purposes, models.platform-list) and params must fit its declared parameters.",
326
+ input: z
327
+ .object({ purpose: PurposeParams.shape.purpose, target: PURPOSE_PUT.shape.target })
328
+ .strict(),
329
+ example: {
330
+ purpose: "title",
331
+ target: { model: { provider: "model-fake", model: "fake-1" } },
332
+ },
333
+ authz: { superAdmin: true },
334
+ mirrors: ["PUT /api/v1/admin/model-purposes/:purpose"],
335
+ confirm: "platform",
336
+ errors: [
337
+ {
338
+ code: "model.purpose_unknown",
339
+ next: "Pick a purpose from models.platform-purposes.",
340
+ },
341
+ {
342
+ code: "validation_failed",
343
+ next: "Pick a model of the purpose's kind from models.platform-list, with params it declares.",
344
+ },
345
+ ],
346
+ precheck: (i) => precheckBy(() => this.purposes.validate(null, i.purpose, purposeTargetOf({ target: i.target }))),
347
+ summary: (i) => {
348
+ const target = refOf(i.target);
349
+ return target === null
350
+ ? {
351
+ zh: `清除用途「${named(i.purpose)}」的平台默认模型`,
352
+ en: `Clear the platform default model of purpose "${named(i.purpose)}"`,
353
+ }
354
+ : {
355
+ zh: `把用途「${named(i.purpose)}」的平台默认模型设为 ${named(target)}`,
356
+ en: `Set the platform default model of purpose "${named(i.purpose)}" to ${named(target)}`,
357
+ };
358
+ },
359
+ run: async (input, ctx) => {
360
+ const view = await this.purposes.setDefault(input.purpose, purposeTargetOf({ target: input.target }), ctx.actorAccountId, undefined, viaAgent("models.set-platform-purpose", ctx));
361
+ return {
362
+ purpose: {
363
+ id: view.purpose,
364
+ kind: view.kind,
365
+ default: refOf(view.default),
366
+ params: view.default?.params ?? null,
367
+ },
368
+ };
369
+ },
370
+ }),
371
+ ]);
372
+ }
373
+ };
374
+ AdminOperations = __decorate([
375
+ Injectable(),
376
+ __param(0, Inject(PlatformOperations)),
377
+ __param(1, Inject(ExtensionAdmin)),
378
+ __param(2, Inject(OrgsService)),
379
+ __param(3, Inject(AccountsService)),
380
+ __param(4, Inject(CatalogRequestsService)),
381
+ __param(5, Inject(SettingsService)),
382
+ __param(6, Inject(ProviderRegistry)),
383
+ __param(7, Inject(ExtensionDisplayNames)),
384
+ __param(8, Inject(ExtensionRegistry)),
385
+ __param(9, Inject(ModelEnablement)),
386
+ __param(10, Inject(PricesService)),
387
+ __param(11, Inject(ModelPurposesService))
388
+ ], AdminOperations);
389
+ export { AdminOperations };
@@ -0,0 +1,24 @@
1
+ import { type OnModuleInit } from "@nestjs/common";
2
+ import { AgentsService } from "../../agents/agents.service.js";
3
+ import { SkillChangesService } from "../../skills/changes.service.js";
4
+ import { SkillInvoker } from "../../skills/invoke.js";
5
+ import { SkillsService } from "../../skills/skills.service.js";
6
+ import { PlatformOperations } from "../registry.js";
7
+ /**
8
+ * The skills of one agent and the skill change inbox detail (`Platform` tool, spec §14): reads of
9
+ * the agent's own skills and of the invocable ones, detaching a skill, and the detail of a pending
10
+ * skill change as the inbox shows it. Deciding a change stays `human-only`.
11
+ */
12
+ export declare class AgentSkillsOperations implements OnModuleInit {
13
+ private readonly registry;
14
+ private readonly agents;
15
+ private readonly skills;
16
+ private readonly changes;
17
+ private readonly invoker;
18
+ constructor(registry: PlatformOperations, agents: AgentsService, skills: SkillsService, changes: SkillChangesService, invoker: SkillInvoker);
19
+ /** Class of deleting a skill: your own private agent is personal; a shared agent is the org's. */
20
+ private deleteClass;
21
+ /** The route's refusals, read before the card: a visible agent, owned by the actor, with the skill. */
22
+ private deleteCheck;
23
+ onModuleInit(): void;
24
+ }
@@ -0,0 +1,226 @@
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 } from "@nestjs/common";
11
+ import { z } from "zod";
12
+ import { AgentsService } from "../../agents/agents.service.js";
13
+ import { ApiError } from "../../errors.js";
14
+ import { SkillChangesService } from "../../skills/changes.service.js";
15
+ import { SkillInvoker } from "../../skills/invoke.js";
16
+ import { AgentSkillPathParams, AgentSkillsListParams, InvocableSkillsQuerySchema, SkillChangePathParams, } from "../../skills/skills.schemas.js";
17
+ import { SkillsService } from "../../skills/skills.service.js";
18
+ import { defineOperation, } from "../operation.js";
19
+ import { PlatformOperations } from "../registry.js";
20
+ import { precheckBy, viaAgent } from "./errors.js";
21
+ import { named, orElse } from "./summary.js";
22
+ const AgentId = AgentSkillsListParams.shape.agentId;
23
+ const DESCRIPTION_MAX = 200;
24
+ const clip = (s) => s.length > DESCRIPTION_MAX ? `${s.slice(0, DESCRIPTION_MAX)}…` : s;
25
+ const skillRow = (s) => ({
26
+ id: s.id,
27
+ name: s.name,
28
+ state: "active",
29
+ description: clip(s.description),
30
+ version: s.currentVersion,
31
+ manual: s.manual,
32
+ });
33
+ /**
34
+ * The skills of one agent and the skill change inbox detail (`Platform` tool, spec §14): reads of
35
+ * the agent's own skills and of the invocable ones, detaching a skill, and the detail of a pending
36
+ * skill change as the inbox shows it. Deciding a change stays `human-only`.
37
+ */
38
+ let AgentSkillsOperations = class AgentSkillsOperations {
39
+ registry;
40
+ agents;
41
+ skills;
42
+ changes;
43
+ invoker;
44
+ constructor(registry, agents, skills, changes, invoker) {
45
+ this.registry = registry;
46
+ this.agents = agents;
47
+ this.skills = skills;
48
+ this.changes = changes;
49
+ this.invoker = invoker;
50
+ }
51
+ /** Class of deleting a skill: your own private agent is personal; a shared agent is the org's. */
52
+ async deleteClass(agentId, ctx) {
53
+ const a = await this.agents.get(ctx.orgId, agentId, ctx.actorAccountId);
54
+ return a.visibility === "private" && a.ownerAccountId === ctx.actorAccountId
55
+ ? "personal"
56
+ : "org";
57
+ }
58
+ /** The route's refusals, read before the card: a visible agent, owned by the actor, with the skill. */
59
+ async deleteCheck(agentId, skillId, ctx) {
60
+ const seen = await precheckBy(async () => {
61
+ const a = await this.agents.get(ctx.orgId, agentId, ctx.actorAccountId);
62
+ if (a.ownerAccountId !== ctx.actorAccountId) {
63
+ throw new ApiError("forbidden", "Only the agent's owner can delete its skills");
64
+ }
65
+ });
66
+ if (!seen.ok)
67
+ return seen;
68
+ const list = await this.skills.listForAgent(ctx.orgId, agentId);
69
+ return list.some((s) => s.id === skillId)
70
+ ? { ok: true }
71
+ : { ok: false, code: "skill.not_found", message: "Skill not found" };
72
+ }
73
+ onModuleInit() {
74
+ this.registry.register([
75
+ defineOperation({
76
+ id: "agents.skills",
77
+ description: "List the skills an agent wrote for itself (its own skills, not org or platform ones), by name: id, name, description, version and whether it is manual-only. Takes the agent id from agents.list.",
78
+ input: z.object({ agentId: AgentId }).strict(),
79
+ example: { agentId: "7c1a5b0e-9a53-4c6b-8d64-2f5a1b0c3e77" },
80
+ authz: { orgAction: "agents.use" },
81
+ mirrors: ["GET /api/v1/orgs/:orgId/agents/:agentId/skills"],
82
+ confirm: "read",
83
+ errors: [
84
+ {
85
+ code: "agent.not_found",
86
+ next: "Check the agent id with agents.list: only agents you can see are readable.",
87
+ },
88
+ ],
89
+ run: async (input, ctx) => {
90
+ await this.agents.get(ctx.orgId, input.agentId, ctx.actorAccountId);
91
+ return {
92
+ items: (await this.skills.listForAgent(ctx.orgId, input.agentId)).map(skillRow),
93
+ };
94
+ },
95
+ }),
96
+ defineOperation({
97
+ id: "agents.invocable-skills",
98
+ description: "List the skills a person can invoke with / on an agent (its effective skills: org, platform and its own), by name: id, name, state (manual for manual-only), description, version and the plugin. Optionally pass a conversation of yours with that agent to include its trial drafts.",
99
+ input: z
100
+ .object({
101
+ agentId: AgentId,
102
+ conversationId: InvocableSkillsQuerySchema.shape.conversationId,
103
+ })
104
+ .strict(),
105
+ example: { agentId: "7c1a5b0e-9a53-4c6b-8d64-2f5a1b0c3e77" },
106
+ authz: { orgAction: "agents.use" },
107
+ mirrors: ["GET /api/v1/orgs/:orgId/agents/:agentId/invocable-skills"],
108
+ confirm: "read",
109
+ errors: [
110
+ {
111
+ code: "agent.not_found",
112
+ next: "Check the agent id with agents.list: only agents you can see are readable.",
113
+ },
114
+ {
115
+ code: "conversation.not_found",
116
+ next: "Pass one of your own conversations with this agent (conversations.list), or leave it out.",
117
+ },
118
+ ],
119
+ run: async (input, ctx) => ({
120
+ items: (await this.invoker.listFor(ctx.orgId, input.agentId, ctx.actorAccountId, input.conversationId)).map((s) => ({
121
+ id: s.id,
122
+ name: s.name,
123
+ state: s.manual ? "manual" : "active",
124
+ description: clip(s.description),
125
+ version: s.version,
126
+ ...(s.plugin !== undefined && { plugin: s.plugin }),
127
+ })),
128
+ }),
129
+ }),
130
+ defineOperation({
131
+ id: "agents.delete-skill",
132
+ description: "Delete one of an agent's own skills (soft delete; a pending change of the same name is cancelled and the name can be written again). Only the agent's owner can; takes the agent id from agents.list and the skill id from agents.skills. The person confirms every delete; it is never remembered.",
133
+ input: z.object({ agentId: AgentId, skillId: AgentSkillPathParams.shape.skillId }).strict(),
134
+ example: {
135
+ agentId: "7c1a5b0e-9a53-4c6b-8d64-2f5a1b0c3e77",
136
+ skillId: "0b9f2c4e-1d3a-4c55-9e0a-7a2f6d1c8b11",
137
+ },
138
+ authz: { orgAction: "agents.create" },
139
+ mirrors: ["DELETE /api/v1/orgs/:orgId/agents/:agentId/skills/:skillId"],
140
+ confirm: "personal",
141
+ // destructive: a shared agent's skill is asked as an org write, every time
142
+ rememberable: false,
143
+ confirmFor: (i, ctx) => this.deleteClass(i.agentId, ctx),
144
+ errors: [
145
+ {
146
+ code: "agent.not_found",
147
+ next: "Check the agent id with agents.list: only agents you can see are readable.",
148
+ },
149
+ {
150
+ code: "forbidden",
151
+ next: {
152
+ orgAdmin: "Only the agent's owner can delete its skills; the owner can change it on the web.",
153
+ member: "Only the agent's owner can delete its skills; ask the owner.",
154
+ },
155
+ },
156
+ {
157
+ code: "skill.not_found",
158
+ next: "Check the skill id with agents.skills; it may already be deleted.",
159
+ },
160
+ ],
161
+ precheck: (i, ctx) => this.deleteCheck(i.agentId, i.skillId, ctx),
162
+ summary: async (i, ctx) => {
163
+ const agent = await orElse(async () => named((await this.agents.get(ctx.orgId, i.agentId, ctx.actorAccountId)).definition.name), i.agentId);
164
+ const skill = await orElse(async () => named((await this.skills.listForAgent(ctx.orgId, i.agentId)).find((s) => s.id === i.skillId)?.name ?? i.skillId), i.skillId);
165
+ return {
166
+ zh: `删除智能体「${agent}」的技能「${skill}」`,
167
+ en: `Delete skill "${skill}" of agent "${agent}"`,
168
+ };
169
+ },
170
+ run: async (input, ctx) => {
171
+ await this.changes.deleteAgentSkill(ctx.orgId, input.agentId, input.skillId, ctx.actorAccountId, undefined, viaAgent("agents.delete-skill", ctx));
172
+ return { id: input.skillId, deleted: true };
173
+ },
174
+ }),
175
+ defineOperation({
176
+ id: "skills.get-change",
177
+ description: "Read one skill change a shared agent proposed, as the inbox shows it: the agent, the skill name and description, the version it would become, its file paths and sizes, who asked, its state and who decided. Never file contents: review those on the web, where you also decide it (agents never decide skill changes). Only the agent's owner and the person who asked can read it.",
178
+ input: z.object({ changeId: SkillChangePathParams.shape.id }).strict(),
179
+ example: { changeId: "6a1d3e5f-2b4c-4d70-8e91-0f2a4c6e8b13" },
180
+ // approvals.decide is stricter than the service (a plain-member requester is refused by
181
+ // the gate), on purpose
182
+ authz: { orgAction: "approvals.decide" },
183
+ mirrors: ["GET /api/v1/orgs/:orgId/skill-changes/:id"],
184
+ renames: { changeId: "id" },
185
+ confirm: "read",
186
+ errors: [
187
+ {
188
+ code: "skill_change.not_found",
189
+ next: "No change with this id is yours to read; the inbox lists those waiting for you (inbox.list).",
190
+ },
191
+ ],
192
+ run: async (input, ctx) => {
193
+ const d = await this.changes.get(ctx.orgId, input.changeId, ctx.actorAccountId);
194
+ return {
195
+ skillChange: {
196
+ id: d.id,
197
+ name: d.name,
198
+ state: d.status,
199
+ description: d.description,
200
+ agent: d.agent,
201
+ skillId: d.skillId,
202
+ version: d.version,
203
+ files: d.files.map((f) => ({ path: f.path, size: f.size })),
204
+ requestedByName: d.requestedByName,
205
+ conversationPath: d.conversationPath,
206
+ decidedAt: d.decidedAt,
207
+ createdAt: d.createdAt,
208
+ ...(d.status === "pending" && {
209
+ next: "Review the files and decide it on the web, in the inbox; agents never decide skill changes.",
210
+ }),
211
+ },
212
+ };
213
+ },
214
+ }),
215
+ ]);
216
+ }
217
+ };
218
+ AgentSkillsOperations = __decorate([
219
+ Injectable(),
220
+ __param(0, Inject(PlatformOperations)),
221
+ __param(1, Inject(AgentsService)),
222
+ __param(2, Inject(SkillsService)),
223
+ __param(3, Inject(SkillChangesService)),
224
+ __param(4, Inject(SkillInvoker))
225
+ ], AgentSkillsOperations);
226
+ export { AgentSkillsOperations };
@@ -2,6 +2,7 @@ import { type OnModuleInit } from "@nestjs/common";
2
2
  import { AgentsService } from "../../agents/agents.service.js";
3
3
  import { OrgAgentTemplates } from "../../agents/org-templates.js";
4
4
  import { AgentTemplatesService } from "../../agents/templates.js";
5
+ import { OwnedItems } from "../../catalog/owned-items.js";
5
6
  import { PlatformOperations } from "../registry.js";
6
7
  /** Agent template operations of the `Platform` tool (spec §7). */
7
8
  export declare class AgentTemplatesOperations implements OnModuleInit {
@@ -9,6 +10,8 @@ export declare class AgentTemplatesOperations implements OnModuleInit {
9
10
  private readonly templates;
10
11
  private readonly orgTemplates;
11
12
  private readonly agents;
12
- constructor(registry: PlatformOperations, templates: AgentTemplatesService, orgTemplates: OrgAgentTemplates, agents: AgentsService);
13
+ private readonly owned;
14
+ constructor(registry: PlatformOperations, templates: AgentTemplatesService, orgTemplates: OrgAgentTemplates, agents: AgentsService, owned: OwnedItems);
15
+ private templateName;
13
16
  onModuleInit(): void;
14
17
  }