@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.5

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 (507) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +39 -13
  3. package/dist/admin/admin.controller.js +33 -17
  4. package/dist/admin/extensions.controller.d.ts +16 -2
  5. package/dist/admin/extensions.controller.js +26 -6
  6. package/dist/admin/setup-lock.d.ts +1 -1
  7. package/dist/admin/setup-lock.js +1 -1
  8. package/dist/admin/setup.controller.d.ts +1 -1
  9. package/dist/admin/setup.controller.js +1 -1
  10. package/dist/admin/setup.service.d.ts +4 -4
  11. package/dist/admin/setup.service.js +8 -8
  12. package/dist/agents/agent-lookup.d.ts +16 -0
  13. package/dist/agents/agent-lookup.js +11 -0
  14. package/dist/agents/agents.controller.d.ts +76 -1
  15. package/dist/agents/agents.controller.js +90 -11
  16. package/dist/agents/agents.module.d.ts +4 -1
  17. package/dist/agents/agents.module.js +32 -6
  18. package/dist/agents/agents.service.d.ts +51 -22
  19. package/dist/agents/agents.service.js +172 -70
  20. package/dist/agents/definition.d.ts +49 -0
  21. package/dist/agents/definition.js +45 -0
  22. package/dist/agents/from-template.d.ts +106 -0
  23. package/dist/agents/from-template.js +649 -0
  24. package/dist/agents/from-template.service.d.ts +60 -0
  25. package/dist/agents/from-template.service.js +161 -0
  26. package/dist/agents/org-templates.d.ts +176 -0
  27. package/dist/agents/org-templates.js +827 -0
  28. package/dist/agents/pending-connector-requests.d.ts +77 -0
  29. package/dist/agents/pending-connector-requests.js +215 -0
  30. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  31. package/dist/agents/pending-connectors.controller.js +91 -0
  32. package/dist/agents/pending-connectors.service.d.ts +62 -0
  33. package/dist/agents/pending-connectors.service.js +282 -0
  34. package/dist/agents/templates.controller.d.ts +86 -5
  35. package/dist/agents/templates.controller.js +171 -7
  36. package/dist/agents/templates.d.ts +127 -23
  37. package/dist/agents/templates.js +475 -52
  38. package/dist/background/background.module.js +8 -1
  39. package/dist/background/finish.d.ts +3 -2
  40. package/dist/background/launch-lock.d.ts +4 -3
  41. package/dist/background/launch-lock.js +4 -3
  42. package/dist/background/poll.job.d.ts +9 -6
  43. package/dist/background/poll.job.js +30 -22
  44. package/dist/background/session.d.ts +13 -2
  45. package/dist/background/session.js +13 -0
  46. package/dist/background/stop.d.ts +12 -6
  47. package/dist/background/stop.js +57 -39
  48. package/dist/background/store.d.ts +18 -6
  49. package/dist/background/store.js +12 -6
  50. package/dist/background/tasks.service.d.ts +15 -5
  51. package/dist/background/tasks.service.js +42 -17
  52. package/dist/background/wake-rules.d.ts +27 -18
  53. package/dist/background/wake-rules.js +52 -22
  54. package/dist/background/wake.d.ts +13 -11
  55. package/dist/background/wake.js +20 -14
  56. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  57. package/dist/catalog/admin-catalog.controller.js +213 -42
  58. package/dist/catalog/catalog-content.d.ts +58 -32
  59. package/dist/catalog/catalog-content.js +34 -8
  60. package/dist/catalog/catalog-import.module.d.ts +7 -0
  61. package/dist/catalog/catalog-import.module.js +60 -0
  62. package/dist/catalog/catalog-items.d.ts +111 -7
  63. package/dist/catalog/catalog-items.js +279 -13
  64. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  65. package/dist/catalog/catalog-scope.service.js +1116 -0
  66. package/dist/catalog/catalog.module.d.ts +7 -9
  67. package/dist/catalog/catalog.module.js +41 -31
  68. package/dist/catalog/catalog.service.d.ts +101 -29
  69. package/dist/catalog/catalog.service.js +104 -106
  70. package/dist/catalog/cli.d.ts +11 -1
  71. package/dist/catalog/cli.js +26 -1
  72. package/dist/catalog/component-promotion.d.ts +96 -0
  73. package/dist/catalog/component-promotion.js +395 -0
  74. package/dist/catalog/component-scope.controller.d.ts +152 -0
  75. package/dist/catalog/component-scope.controller.js +287 -0
  76. package/dist/catalog/component-scope.service.d.ts +303 -0
  77. package/dist/catalog/component-scope.service.js +936 -0
  78. package/dist/catalog/component-state.d.ts +174 -0
  79. package/dist/catalog/component-state.js +437 -0
  80. package/dist/catalog/job-ids.d.ts +30 -0
  81. package/dist/catalog/job-ids.js +25 -0
  82. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  83. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  84. package/dist/catalog/marketplaces.controller.js +56 -7
  85. package/dist/catalog/marketplaces.service.d.ts +54 -14
  86. package/dist/catalog/marketplaces.service.js +71 -22
  87. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  88. package/dist/catalog/org-catalog.controller.js +181 -65
  89. package/dist/catalog/org-catalog.service.d.ts +65 -33
  90. package/dist/catalog/org-catalog.service.js +324 -157
  91. package/dist/catalog/org-extension-switch.d.ts +41 -0
  92. package/dist/catalog/org-extension-switch.js +115 -0
  93. package/dist/catalog/org-extension.controller.d.ts +119 -0
  94. package/dist/catalog/org-extension.controller.js +266 -0
  95. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  96. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  97. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  98. package/dist/catalog/org-plugin-uploads.js +116 -0
  99. package/dist/catalog/owned-items.d.ts +184 -0
  100. package/dist/catalog/owned-items.js +789 -0
  101. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  102. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  103. package/dist/catalog/ownership.d.ts +172 -0
  104. package/dist/catalog/ownership.js +326 -0
  105. package/dist/catalog/platform-components.d.ts +221 -0
  106. package/dist/catalog/platform-components.js +761 -0
  107. package/dist/catalog/platform-migration.d.ts +115 -0
  108. package/dist/catalog/platform-migration.js +582 -0
  109. package/dist/catalog/plugin-import.d.ts +178 -34
  110. package/dist/catalog/plugin-import.js +622 -82
  111. package/dist/catalog/plugin-install.d.ts +185 -41
  112. package/dist/catalog/plugin-install.js +758 -126
  113. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  114. package/dist/catalog/plugin-upgrade.js +1147 -1136
  115. package/dist/catalog/request-rules.d.ts +65 -0
  116. package/dist/catalog/request-rules.js +217 -0
  117. package/dist/catalog/requests.service.d.ts +193 -118
  118. package/dist/catalog/requests.service.js +526 -343
  119. package/dist/catalog/reserved-names.d.ts +8 -0
  120. package/dist/catalog/reserved-names.js +42 -0
  121. package/dist/catalog/scope-orgs.d.ts +21 -0
  122. package/dist/catalog/scope-orgs.js +67 -0
  123. package/dist/catalog/scope-state.d.ts +35 -0
  124. package/dist/catalog/scope-state.js +87 -0
  125. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  126. package/dist/catalog/scope-sync-workers.js +29 -0
  127. package/dist/catalog/scope-sync.d.ts +176 -0
  128. package/dist/catalog/scope-sync.js +576 -0
  129. package/dist/catalog/scope.d.ts +42 -0
  130. package/dist/catalog/scope.js +42 -0
  131. package/dist/catalog/unshare.d.ts +22 -0
  132. package/dist/catalog/unshare.js +118 -0
  133. package/dist/channels/actions.js +1 -0
  134. package/dist/channels/cards.js +20 -2
  135. package/dist/channels/channels.module.js +2 -0
  136. package/dist/channels/inbound.d.ts +9 -1
  137. package/dist/channels/inbound.js +67 -5
  138. package/dist/channels/phrases.d.ts +35 -0
  139. package/dist/channels/phrases.js +29 -0
  140. package/dist/config/docs.js +3 -1
  141. package/dist/config/schema.d.ts +6 -2
  142. package/dist/config/schema.js +46 -22
  143. package/dist/conversations/access.d.ts +6 -4
  144. package/dist/conversations/access.js +27 -5
  145. package/dist/conversations/agent-tree.d.ts +46 -0
  146. package/dist/conversations/agent-tree.js +92 -0
  147. package/dist/conversations/conversations.controller.d.ts +43 -18
  148. package/dist/conversations/conversations.controller.js +79 -38
  149. package/dist/conversations/conversations.module.d.ts +1 -1
  150. package/dist/conversations/conversations.module.js +7 -7
  151. package/dist/conversations/conversations.service.d.ts +69 -12
  152. package/dist/conversations/conversations.service.js +106 -27
  153. package/dist/conversations/environment-status.d.ts +24 -0
  154. package/dist/conversations/environment-status.js +71 -0
  155. package/dist/conversations/event-log.d.ts +20 -5
  156. package/dist/conversations/event-log.js +60 -0
  157. package/dist/conversations/events.d.ts +84 -2
  158. package/dist/conversations/events.js +91 -17
  159. package/dist/conversations/queue.service.d.ts +1 -1
  160. package/dist/conversations/queue.service.js +5 -0
  161. package/dist/conversations/titles.d.ts +5 -3
  162. package/dist/conversations/titles.js +21 -8
  163. package/dist/conversations/tree.d.ts +17 -0
  164. package/dist/conversations/tree.js +42 -0
  165. package/dist/ctx/create-ctx.d.ts +5 -0
  166. package/dist/ctx/create-ctx.js +15 -5
  167. package/dist/db/kernel-schema.d.ts +362 -18
  168. package/dist/environments/access.d.ts +41 -0
  169. package/dist/environments/access.js +77 -0
  170. package/dist/environments/conversation-environments.d.ts +61 -0
  171. package/dist/environments/conversation-environments.js +170 -0
  172. package/dist/environments/dto.d.ts +25 -0
  173. package/dist/environments/dto.js +12 -0
  174. package/dist/environments/environments.controller.d.ts +33 -0
  175. package/dist/environments/environments.controller.js +110 -0
  176. package/dist/environments/environments.module.d.ts +8 -0
  177. package/dist/environments/environments.module.js +27 -0
  178. package/dist/environments/environments.service.d.ts +153 -0
  179. package/dist/environments/environments.service.js +541 -0
  180. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  181. package/dist/environments/legacy-cleanup.job.js +141 -0
  182. package/dist/errors.d.ts +82 -2
  183. package/dist/errors.js +82 -2
  184. package/dist/evals/reconstruct.d.ts +18 -9
  185. package/dist/evals/reconstruct.js +26 -7
  186. package/dist/evals/run-replay.d.ts +4 -2
  187. package/dist/evals/run-replay.js +16 -4
  188. package/dist/evals/step-replay.d.ts +2 -5
  189. package/dist/evals/step-replay.js +1 -1
  190. package/dist/evals/trajectory.service.d.ts +8 -3
  191. package/dist/evals/trajectory.service.js +26 -14
  192. package/dist/evals/worker.d.ts +5 -5
  193. package/dist/evals/worker.js +9 -3
  194. package/dist/extensions/admin-ops.d.ts +36 -10
  195. package/dist/extensions/admin-ops.js +65 -42
  196. package/dist/extensions/admin-view.d.ts +37 -10
  197. package/dist/extensions/admin-view.js +103 -20
  198. package/dist/extensions/bootstrap.d.ts +17 -4
  199. package/dist/extensions/bootstrap.js +70 -9
  200. package/dist/extensions/cli.d.ts +12 -0
  201. package/dist/extensions/cli.js +11 -2
  202. package/dist/extensions/deployment-config.d.ts +28 -5
  203. package/dist/extensions/deployment-config.js +48 -7
  204. package/dist/extensions/effective-config.d.ts +127 -0
  205. package/dist/extensions/effective-config.js +368 -0
  206. package/dist/extensions/extensions.module.js +8 -2
  207. package/dist/extensions/hooks.d.ts +37 -4
  208. package/dist/extensions/hooks.js +82 -16
  209. package/dist/extensions/host.d.ts +19 -1
  210. package/dist/extensions/host.js +30 -7
  211. package/dist/extensions/installs.d.ts +20 -8
  212. package/dist/extensions/installs.js +37 -15
  213. package/dist/extensions/org-config.d.ts +75 -6
  214. package/dist/extensions/org-config.js +184 -32
  215. package/dist/extensions/org-levels.d.ts +37 -0
  216. package/dist/extensions/org-levels.js +71 -0
  217. package/dist/extensions/org-overrides.d.ts +151 -0
  218. package/dist/extensions/org-overrides.js +524 -0
  219. package/dist/extensions/permission-view.d.ts +16 -4
  220. package/dist/extensions/permission-view.js +4 -4
  221. package/dist/extensions/plugin-items.d.ts +21 -0
  222. package/dist/extensions/plugin-items.js +42 -0
  223. package/dist/extensions/point-defaults.d.ts +12 -5
  224. package/dist/extensions/point-defaults.js +37 -9
  225. package/dist/extensions/resolve.d.ts +5 -1
  226. package/dist/extensions/resolve.js +15 -2
  227. package/dist/files/previewers.d.ts +8 -1
  228. package/dist/files/previewers.js +35 -6
  229. package/dist/http/api.module.js +23 -3
  230. package/dist/http/app.d.ts +11 -2
  231. package/dist/http/app.js +31 -5
  232. package/dist/identity/accounts.d.ts +29 -29
  233. package/dist/identity/accounts.js +47 -47
  234. package/dist/identity/audit.d.ts +2 -1
  235. package/dist/identity/auth.guard.d.ts +13 -5
  236. package/dist/identity/auth.guard.js +26 -9
  237. package/dist/identity/identity.module.d.ts +1 -1
  238. package/dist/identity/identity.module.js +4 -4
  239. package/dist/identity/me.controller.js +1 -1
  240. package/dist/identity/principal.d.ts +3 -3
  241. package/dist/identity/principal.js +3 -3
  242. package/dist/identity/settings.d.ts +22 -11
  243. package/dist/identity/settings.js +53 -18
  244. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  245. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  246. package/dist/inbox/inbox.module.d.ts +4 -1
  247. package/dist/inbox/inbox.module.js +7 -3
  248. package/dist/inbox/inbox.service.d.ts +62 -3
  249. package/dist/inbox/inbox.service.js +74 -4
  250. package/dist/inbox/org-notices.d.ts +63 -0
  251. package/dist/inbox/org-notices.js +91 -0
  252. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  253. package/dist/inbox/platform-inbox.controller.js +58 -0
  254. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  255. package/dist/inbox/platform-inbox.service.js +263 -0
  256. package/dist/inbox/platform-notices.d.ts +19 -0
  257. package/dist/inbox/platform-notices.js +9 -0
  258. package/dist/index.d.ts +1 -1
  259. package/dist/index.js +1 -1
  260. package/dist/infra/cli/kernel-cli.module.js +9 -1
  261. package/dist/infra/config/kernel-config.service.js +21 -1
  262. package/dist/infra/database/xact-lock.d.ts +1 -1
  263. package/dist/infra/database/xact-lock.js +1 -1
  264. package/dist/infra/events/kernel-events.d.ts +11 -2
  265. package/dist/infra/queue/add-job-once.d.ts +14 -0
  266. package/dist/infra/queue/add-job-once.js +16 -0
  267. package/dist/kernel.module.js +6 -0
  268. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  269. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  270. package/dist/models/prices.d.ts +5 -5
  271. package/dist/models/prices.js +4 -4
  272. package/dist/models/purposes.controller.d.ts +6 -4
  273. package/dist/models/purposes.controller.js +13 -7
  274. package/dist/models/purposes.d.ts +20 -9
  275. package/dist/models/purposes.js +17 -8
  276. package/dist/orgs/directory-sync.d.ts +14 -5
  277. package/dist/orgs/directory-sync.js +41 -17
  278. package/dist/orgs/offboarding.d.ts +9 -7
  279. package/dist/orgs/offboarding.js +28 -17
  280. package/dist/orgs/org-lock.d.ts +5 -0
  281. package/dist/orgs/org-lock.js +13 -0
  282. package/dist/orgs/org.guard.d.ts +10 -0
  283. package/dist/orgs/org.guard.js +43 -32
  284. package/dist/orgs/orgs.module.js +3 -0
  285. package/dist/orgs/orgs.service.d.ts +20 -7
  286. package/dist/orgs/orgs.service.js +32 -12
  287. package/dist/orgs/roles.d.ts +1 -1
  288. package/dist/orgs/roles.js +5 -1
  289. package/dist/orgs/settings.controller.d.ts +1 -1
  290. package/dist/orgs/settings.service.d.ts +15 -3
  291. package/dist/orgs/settings.service.js +6 -2
  292. package/dist/overrides.d.ts +3 -0
  293. package/dist/overrides.js +2 -0
  294. package/dist/platform/actor.d.ts +48 -0
  295. package/dist/platform/actor.js +100 -0
  296. package/dist/platform/agent-docs.d.ts +18 -0
  297. package/dist/platform/agent-docs.js +59 -0
  298. package/dist/platform/availability.d.ts +14 -0
  299. package/dist/platform/availability.js +43 -0
  300. package/dist/platform/errors.d.ts +11 -0
  301. package/dist/platform/errors.js +26 -0
  302. package/dist/platform/exclusions.d.ts +12 -0
  303. package/dist/platform/exclusions.js +1387 -0
  304. package/dist/platform/method.d.ts +6 -0
  305. package/dist/platform/method.js +15 -0
  306. package/dist/platform/operation.d.ts +92 -0
  307. package/dist/platform/operation.js +35 -0
  308. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  309. package/dist/platform/ops/agent-templates.ops.js +92 -0
  310. package/dist/platform/ops/agents.ops.d.ts +19 -0
  311. package/dist/platform/ops/agents.ops.js +294 -0
  312. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  313. package/dist/platform/ops/connectors.ops.js +126 -0
  314. package/dist/platform/ops/errors.d.ts +11 -0
  315. package/dist/platform/ops/errors.js +22 -0
  316. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  317. package/dist/platform/ops/extensions.ops.js +116 -0
  318. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  319. package/dist/platform/ops/marketplaces.ops.js +157 -0
  320. package/dist/platform/ops/paging.d.ts +14 -0
  321. package/dist/platform/ops/paging.js +20 -0
  322. package/dist/platform/ops/platform.ops.d.ts +23 -0
  323. package/dist/platform/ops/platform.ops.js +158 -0
  324. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  325. package/dist/platform/ops/plugins.ops.js +377 -0
  326. package/dist/platform/ops/requests.ops.d.ts +14 -0
  327. package/dist/platform/ops/requests.ops.js +153 -0
  328. package/dist/platform/ops/role.d.ts +4 -0
  329. package/dist/platform/ops/role.js +10 -0
  330. package/dist/platform/ops/skills.ops.d.ts +13 -0
  331. package/dist/platform/ops/skills.ops.js +98 -0
  332. package/dist/platform/ops/summary.d.ts +10 -0
  333. package/dist/platform/ops/summary.js +18 -0
  334. package/dist/platform/platform-ops.module.d.ts +7 -0
  335. package/dist/platform/platform-ops.module.js +55 -0
  336. package/dist/platform/platform.module.d.ts +8 -0
  337. package/dist/platform/platform.module.js +25 -0
  338. package/dist/platform/redact-orgs.d.ts +7 -0
  339. package/dist/platform/redact-orgs.js +52 -0
  340. package/dist/platform/registry.d.ts +30 -0
  341. package/dist/platform/registry.js +111 -0
  342. package/dist/roles/worker-role.d.ts +6 -4
  343. package/dist/roles/worker-role.js +14 -7
  344. package/dist/roles/worker.module.d.ts +1 -1
  345. package/dist/roles/worker.module.js +9 -1
  346. package/dist/runtime/context/build.d.ts +6 -4
  347. package/dist/runtime/context/build.js +26 -7
  348. package/dist/runtime/context/claude-tools.d.ts +2 -1
  349. package/dist/runtime/context/claude-tools.js +5 -4
  350. package/dist/runtime/context/compaction.js +9 -0
  351. package/dist/runtime/context/reminders.d.ts +2 -0
  352. package/dist/runtime/context/reminders.js +2 -0
  353. package/dist/runtime/context/skills.js +9 -2
  354. package/dist/runtime/context/tool-changes.d.ts +27 -0
  355. package/dist/runtime/context/tool-changes.js +60 -0
  356. package/dist/runtime/hook-calls.js +2 -0
  357. package/dist/runtime/langgraph-loop.d.ts +3 -1
  358. package/dist/runtime/langgraph-loop.js +35 -17
  359. package/dist/runtime/loop.d.ts +32 -4
  360. package/dist/runtime/maintenance.d.ts +7 -4
  361. package/dist/runtime/maintenance.js +23 -8
  362. package/dist/runtime/model-call.d.ts +30 -8
  363. package/dist/runtime/model-call.js +69 -19
  364. package/dist/runtime/run-control.d.ts +11 -1
  365. package/dist/runtime/run-control.js +12 -0
  366. package/dist/runtime/run-drafts.d.ts +85 -0
  367. package/dist/runtime/run-drafts.js +230 -0
  368. package/dist/runtime/run-jobs.d.ts +3 -5
  369. package/dist/runtime/run-jobs.js +3 -7
  370. package/dist/runtime/run-queue.d.ts +37 -3
  371. package/dist/runtime/run-queue.js +188 -11
  372. package/dist/runtime/run-worker.d.ts +11 -5
  373. package/dist/runtime/run-worker.js +54 -31
  374. package/dist/runtime/runtime.module.js +3 -0
  375. package/dist/runtime/step-log.d.ts +9 -4
  376. package/dist/runtime/step-log.js +8 -5
  377. package/dist/runtime/stream.controller.d.ts +23 -1
  378. package/dist/runtime/stream.controller.js +60 -3
  379. package/dist/runtime/stream.d.ts +4 -1
  380. package/dist/runtime/stream.js +27 -3
  381. package/dist/runtime/subagents/child.d.ts +55 -7
  382. package/dist/runtime/subagents/child.js +105 -7
  383. package/dist/runtime/subagents/definition.d.ts +12 -3
  384. package/dist/runtime/subagents/definition.js +43 -29
  385. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  386. package/dist/runtime/subagents/deliveries.js +228 -0
  387. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  388. package/dist/runtime/subagents/dispatch.js +212 -141
  389. package/dist/runtime/subagents/limits.d.ts +24 -5
  390. package/dist/runtime/subagents/limits.js +40 -6
  391. package/dist/runtime/subagents/messages.d.ts +95 -0
  392. package/dist/runtime/subagents/messages.js +328 -0
  393. package/dist/runtime/subagents/preamble.d.ts +4 -4
  394. package/dist/runtime/subagents/preamble.js +9 -7
  395. package/dist/runtime/subagents/progress.d.ts +8 -6
  396. package/dist/runtime/subagents/progress.js +11 -6
  397. package/dist/runtime/subagents/render.d.ts +30 -0
  398. package/dist/runtime/subagents/render.js +53 -0
  399. package/dist/runtime/subagents/roster.d.ts +24 -7
  400. package/dist/runtime/subagents/roster.js +47 -11
  401. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  402. package/dist/runtime/subagents/skill-fork.js +8 -4
  403. package/dist/runtime/subagents/status.d.ts +14 -0
  404. package/dist/runtime/subagents/status.js +23 -0
  405. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  406. package/dist/runtime/subagents/subagents.service.js +11 -6
  407. package/dist/runtime/usage-report.js +17 -12
  408. package/dist/runtime/waits.d.ts +140 -37
  409. package/dist/runtime/waits.js +394 -106
  410. package/dist/sandbox/jobs.d.ts +40 -13
  411. package/dist/sandbox/jobs.js +57 -20
  412. package/dist/sandbox/leases.d.ts +37 -54
  413. package/dist/sandbox/leases.js +71 -115
  414. package/dist/sandbox/providers.d.ts +2 -2
  415. package/dist/sandbox/providers.js +1 -1
  416. package/dist/sandbox/sandbox.module.d.ts +3 -2
  417. package/dist/sandbox/sandbox.module.js +4 -3
  418. package/dist/sandbox/sandbox.service.d.ts +229 -134
  419. package/dist/sandbox/sandbox.service.js +630 -409
  420. package/dist/skills/catalog.d.ts +3 -2
  421. package/dist/skills/catalog.js +21 -43
  422. package/dist/skills/changes.controller.d.ts +7 -0
  423. package/dist/skills/changes.controller.js +19 -1
  424. package/dist/skills/invoke.js +8 -3
  425. package/dist/skills/package.d.ts +20 -1
  426. package/dist/skills/package.js +28 -1
  427. package/dist/skills/skills.controller.d.ts +39 -4
  428. package/dist/skills/skills.controller.js +88 -10
  429. package/dist/skills/skills.module.js +10 -1
  430. package/dist/skills/skills.service.d.ts +106 -26
  431. package/dist/skills/skills.service.js +421 -75
  432. package/dist/skills/usable.d.ts +81 -0
  433. package/dist/skills/usable.js +379 -0
  434. package/dist/tools/approvals.service.d.ts +20 -2
  435. package/dist/tools/approvals.service.js +23 -4
  436. package/dist/tools/builtin-names.d.ts +21 -5
  437. package/dist/tools/builtin-names.js +30 -5
  438. package/dist/tools/builtins/agent.d.ts +23 -21
  439. package/dist/tools/builtins/agent.js +62 -55
  440. package/dist/tools/builtins/builtin-tools.d.ts +6 -2
  441. package/dist/tools/builtins/builtin-tools.js +37 -12
  442. package/dist/tools/builtins/handback.d.ts +28 -0
  443. package/dist/tools/builtins/handback.js +53 -0
  444. package/dist/tools/builtins/platform.d.ts +34 -0
  445. package/dist/tools/builtins/platform.js +362 -0
  446. package/dist/tools/builtins/sandbox/bash.js +13 -3
  447. package/dist/tools/builtins/sandbox/common.d.ts +43 -24
  448. package/dist/tools/builtins/sandbox/common.js +80 -45
  449. package/dist/tools/builtins/sandbox/edit.js +2 -2
  450. package/dist/tools/builtins/sandbox/glob.js +2 -2
  451. package/dist/tools/builtins/sandbox/grep.js +2 -4
  452. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  453. package/dist/tools/builtins/sandbox/index.js +1 -1
  454. package/dist/tools/builtins/sandbox/read.js +1 -1
  455. package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
  456. package/dist/tools/builtins/sandbox/task-output.js +30 -5
  457. package/dist/tools/builtins/sandbox/task-stop.js +2 -1
  458. package/dist/tools/builtins/sandbox/write.js +2 -2
  459. package/dist/tools/builtins/send-message.d.ts +56 -0
  460. package/dist/tools/builtins/send-message.js +100 -0
  461. package/dist/tools/builtins/skill-load.d.ts +22 -14
  462. package/dist/tools/builtins/skill-load.js +86 -57
  463. package/dist/tools/builtins/skill-write.js +1 -1
  464. package/dist/tools/builtins/web/extract.js +5 -1
  465. package/dist/tools/builtins/web/fetch.js +1 -0
  466. package/dist/tools/builtins/web/search.js +1 -0
  467. package/dist/tools/connectors.controller.d.ts +10 -0
  468. package/dist/tools/connectors.controller.js +12 -0
  469. package/dist/tools/connectors.service.d.ts +46 -5
  470. package/dist/tools/connectors.service.js +94 -15
  471. package/dist/tools/extension-tools.controller.d.ts +14 -0
  472. package/dist/tools/extension-tools.controller.js +37 -0
  473. package/dist/tools/info.d.ts +42 -1
  474. package/dist/tools/info.js +64 -1
  475. package/dist/tools/org-tool-switches.d.ts +74 -0
  476. package/dist/tools/org-tool-switches.js +184 -0
  477. package/dist/tools/pipeline.d.ts +46 -40
  478. package/dist/tools/pipeline.js +187 -364
  479. package/dist/tools/policy.d.ts +1 -1
  480. package/dist/tools/policy.js +36 -16
  481. package/dist/tools/registry.d.ts +98 -5
  482. package/dist/tools/registry.js +87 -9
  483. package/dist/tools/tools.module.js +12 -2
  484. package/dist/ui/views.d.ts +2 -1
  485. package/dist/ui/views.js +17 -3
  486. package/package.json +3 -3
  487. package/src/migrations/0074_subagent_tree.sql +50 -0
  488. package/src/migrations/0075_plugin_scope.sql +61 -0
  489. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  490. package/src/migrations/0077_scope_requests.sql +52 -0
  491. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  492. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  493. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  494. package/src/migrations/0081_platform_components.sql +129 -0
  495. package/src/migrations/0082_platform_migration.sql +33 -0
  496. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  497. package/src/migrations/0084_org_owned_items.sql +85 -0
  498. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  499. package/src/migrations/0086_org_layering.sql +30 -0
  500. package/src/migrations/0087_approval_summary.sql +6 -0
  501. package/src/migrations/0088_environments.sql +80 -0
  502. package/dist/catalog/upgrade-targets.d.ts +0 -56
  503. package/dist/catalog/upgrade-targets.js +0 -90
  504. package/dist/conversations/sandbox-status.d.ts +0 -24
  505. package/dist/conversations/sandbox-status.js +0 -52
  506. package/dist/extensions/org-config.controller.d.ts +0 -32
  507. package/dist/extensions/org-config.controller.js +0 -70
@@ -64,7 +64,7 @@ export interface ResolvedSkill {
64
64
  */
65
65
  export declare function resolveSkills(db: KernelSchemaDb, input: Omit<EffectiveSkillsInput, "conversationId"> & {
66
66
  conversationId?: string;
67
- }): Promise<ResolvedSkill[]>;
67
+ }, log?: Pick<Logger, "warn">): Promise<ResolvedSkill[]>;
68
68
  /** A pinned skill to read: an effective skill the agent version pins. */
69
69
  interface PinnedCandidate {
70
70
  id: string;
@@ -81,7 +81,8 @@ interface PinnedCandidate {
81
81
  */
82
82
  export declare function pinnedFailureText(e: ApiError): string;
83
83
  /**
84
- * Reads each pinned skill's SKILL.md from `kernel/<orgId>/<source>SKILL.md`, verifies it against
84
+ * Reads each pinned skill's SKILL.md from `kernel/<orgId>/<source>SKILL.md` (a platform version's
85
+ * `platform:<prefix>` from `deployment/<prefix>SKILL.md`), verifies it against
85
86
  * the manifest's size and sha256 and returns the parsed body, in order. Every failure throws
86
87
  * `storage.unavailable` (Decision 9: the run fails before any model request):
87
88
  * - a read error is retried once ({@link PINNED_READ_ATTEMPTS}), then is transient (the user
@@ -21,6 +21,7 @@ import { KERNEL_LOGGER } from "../infra/tokens.js";
21
21
  import { CLAUDE_CODE_TOOL_MAP } from "../runtime/context/claude-tools.js";
22
22
  import { sameSnapshot, } from "../runtime/context/skills.js";
23
23
  import { StorageService } from "../storage/storage.service.js";
24
+ import { selectedSkills, skillFileStore } from "./usable.js";
24
25
  /**
25
26
  * 技能目录快照(M5 T14,Ruling M17):运行开始时解析「此刻对这个对话生效的技能」,与日志里最新一份快照不同才写
26
27
  * `skills_catalog`。模型看到的目录与 `Skill` 的名字解析只来自日志,不读实时的库。
@@ -73,43 +74,18 @@ function forModel(all, input, log) {
73
74
  * included and not truncated ({@link forModel} gives the model's part). Without
74
75
  * `conversationId` (a conversation not created yet) no trial draft applies.
75
76
  */
76
- export async function resolveSkills(db, input) {
77
- const orgSkills = [...new Set(input.agent.skills?.orgSkills ?? [])];
78
- const rows = await db
79
- .selectFrom("skills")
80
- .innerJoin("skill_versions", (j) => j
81
- .onRef("skill_versions.skill_id", "=", "skills.id")
82
- .onRef("skill_versions.version", "=", "skills.current_version"))
83
- .leftJoin("catalog_items", "catalog_items.id", "skills.catalog_item_id")
84
- .select([
85
- "skills.id",
86
- "skills.scope",
87
- "skills.name",
88
- "skills.current_version",
89
- "skill_versions.manifest",
90
- "skill_versions.object_prefix",
91
- "skill_versions.source_format",
92
- "catalog_items.name as item_name",
93
- ])
94
- .where("skills.org_id", "=", input.orgId)
95
- .where("skills.deleted_at", "is", null)
96
- .where((eb) => {
97
- const agentOwn = eb.and([
98
- eb("skills.scope", "=", "agent"),
99
- eb("skills.agent_id", "=", input.agentId),
100
- ]);
101
- if (orgSkills.length === 0)
102
- return agentOwn;
103
- return eb.or([
104
- agentOwn,
105
- eb.and([eb("skills.scope", "=", "org"), eb("skills.id", "in", orgSkills)]),
106
- ]);
107
- })
108
- .execute();
77
+ export async function resolveSkills(db, input, log) {
78
+ // Phase 2 (Task 3): `orgSkills` ids may be org skills, org copies linked to a platform skill
79
+ // (served as its current version under the copy's id, ruling B2) or platform skill ids; only
80
+ // those usable in the org resolve (skills/usable.ts)
81
+ const rows = await selectedSkills(db, { orgId: input.orgId, agentId: input.agentId, orgSkills: input.agent.skills?.orgSkills ?? [] }, log);
82
+ // One skill per name: the agent's own, then an org skill or copy (an id the agent kept from
83
+ // before the platform component existed), then a platform skill id; ties by id
84
+ const rank = (r) => r.scope === "agent" ? 0 : r.platformSkillId === r.id ? 2 : 1;
109
85
  const byName = new Map();
110
86
  for (const r of rows) {
111
87
  const prev = byName.get(r.name);
112
- if (!prev || (prev.scope === "org" && r.scope === "agent"))
88
+ if (!prev || rank(r) < rank(prev))
113
89
  byName.set(r.name, r);
114
90
  }
115
91
  const effective = new Map([...byName.values()].map((r) => [
@@ -118,12 +94,12 @@ export async function resolveSkills(db, input) {
118
94
  skill: {
119
95
  id: r.id,
120
96
  name: r.name,
121
- description: r.manifest.description,
122
- version: r.current_version,
123
- source: r.object_prefix,
124
- ...(r.item_name !== null && { plugin: r.item_name }),
97
+ description: r.description,
98
+ version: r.version,
99
+ source: r.source,
100
+ ...(r.plugin !== null && { plugin: r.plugin }),
125
101
  },
126
- format: r.source_format,
102
+ format: r.format,
127
103
  manifest: r.manifest,
128
104
  },
129
105
  ]));
@@ -210,7 +186,8 @@ export function pinnedFailureText(e) {
210
186
  return "File storage is temporarily unavailable, so this agent's pinned skills cannot be read; send the message again later.";
211
187
  }
212
188
  /**
213
- * Reads each pinned skill's SKILL.md from `kernel/<orgId>/<source>SKILL.md`, verifies it against
189
+ * Reads each pinned skill's SKILL.md from `kernel/<orgId>/<source>SKILL.md` (a platform version's
190
+ * `platform:<prefix>` from `deployment/<prefix>SKILL.md`), verifies it against
214
191
  * the manifest's size and sha256 and returns the parsed body, in order. Every failure throws
215
192
  * `storage.unavailable` (Decision 9: the run fails before any model request):
216
193
  * - a read error is retried once ({@link PINNED_READ_ATTEMPTS}), then is transient (the user
@@ -224,9 +201,10 @@ export async function loadPinnedBodies(storage, orgId, pinned, opts = {}) {
224
201
  if (pinned.length === 0)
225
202
  return [];
226
203
  storage.assertAvailable();
227
- const store = storage.kernel(orgId);
228
204
  const out = [];
229
205
  for (const p of pinned) {
206
+ // a platform version (`platform:<prefix>`) is read from deployment/ (ruling D2)
207
+ const { store, prefix } = skillFileStore(storage, orgId, p.source);
230
208
  const unreadable = (problem) => {
231
209
  opts.log?.error("pinned skill unreadable", {
232
210
  orgId,
@@ -246,7 +224,7 @@ export async function loadPinnedBodies(storage, orgId, pinned, opts = {}) {
246
224
  for (let attempt = 1; bytes === null; attempt++) {
247
225
  let got;
248
226
  try {
249
- got = await store.get(`${p.source}${SKILL_ENTRY_FILE}`, opts.signal && { signal: opts.signal });
227
+ got = await store.get(`${prefix}${SKILL_ENTRY_FILE}`, opts.signal && { signal: opts.signal });
250
228
  if (got)
251
229
  bytes = new Uint8Array(await new Response(got.body).arrayBuffer());
252
230
  }
@@ -390,7 +368,7 @@ let SkillsCatalogService = class SkillsCatalogService {
390
368
  async record(input, opts = {}) {
391
369
  const log = opts.log ?? this.log;
392
370
  for (let attempt = 1; attempt <= RECORD_ATTEMPTS; attempt++) {
393
- const all = await resolveSkills(this.db.db, input);
371
+ const all = await resolveSkills(this.db.db, input, attempt === 1 ? log : undefined);
394
372
  // Warn about manual-only pins once, on the first attempt
395
373
  const first = pinnedCandidates(forModel(all, input), input.agent, input, all, attempt === 1 ? log : undefined);
396
374
  const pinned = fitPinned(await loadPinnedBodies(this.storage, input.orgId, first, { log }), log, input);
@@ -12,6 +12,9 @@ declare const DecideBody: z.ZodObject<{
12
12
  }>;
13
13
  note: z.ZodOptional<z.ZodString>;
14
14
  }, z.core.$strict>;
15
+ declare const NoticeParamsSchema: z.ZodObject<{
16
+ id: z.ZodString;
17
+ }, z.core.$strip>;
15
18
  /**
16
19
  * 共享 agent 的技能变更申请(`/api/v1/orgs/:orgId/skill-changes`,M5 T15,R4)。动作 `approvals.decide`
17
20
  * (访客起、仅限用户主体:agent / 服务令牌不能决定,R2);能否决定由服务按该 agent **当前的负责人**判定,
@@ -47,10 +50,14 @@ export declare class AgentSkillsController {
47
50
  /**
48
51
  * 收件箱(`GET /api/v1/orgs/:orgId/inbox`,计划取舍 C6:按类型汇总):当前用户待处理的工具审批与
49
52
  * 能决定的技能变更,新的在前、最多 100 项(`truncated` 表示还有更多)。仅限用户主体。
53
+ * Org admins also see the org's open notices and dismiss them with
54
+ * `POST /api/v1/orgs/:orgId/inbox/notices/:id/dismiss`.
50
55
  */
51
56
  export declare class InboxController {
52
57
  private readonly inbox;
53
58
  constructor(inbox: InboxService);
54
59
  list(principal: Principal, org: OrgContext): Promise<InboxView>;
60
+ /** An org admin dismisses an org notice (`skill_renamed`) -> 204. */
61
+ dismissNotice(principal: Principal, org: OrgContext, params: z.infer<typeof NoticeParamsSchema>): Promise<void>;
55
62
  }
56
63
  export {};
@@ -13,7 +13,7 @@ import { AgentsService } from "../agents/agents.service.js";
13
13
  import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
14
14
  import { InboxService } from "../inbox/inbox.service.js";
15
15
  import { createZodDto } from "../infra/validation/create-zod-dto.js";
16
- import { ZBody } from "../infra/validation/zod-params.js";
16
+ import { ZBody, ZParam } from "../infra/validation/zod-params.js";
17
17
  import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
18
18
  import { SkillChangesService, } from "./changes.service.js";
19
19
  import { SkillsService } from "./skills.service.js";
@@ -25,6 +25,9 @@ const DecideBody = z
25
25
  .strict();
26
26
  class SkillChangeDecideBody extends createZodDto(DecideBody, "SkillChangeDecideBody") {
27
27
  }
28
+ const NoticeParamsSchema = z.object({ id: z.string().min(1).max(100) });
29
+ class NoticeParams extends createZodDto(NoticeParamsSchema, "InboxNoticeParams") {
30
+ }
28
31
  /**
29
32
  * 共享 agent 的技能变更申请(`/api/v1/orgs/:orgId/skill-changes`,M5 T15,R4)。动作 `approvals.decide`
30
33
  * (访客起、仅限用户主体:agent / 服务令牌不能决定,R2);能否决定由服务按该 agent **当前的负责人**判定,
@@ -118,6 +121,8 @@ export { AgentSkillsController };
118
121
  /**
119
122
  * 收件箱(`GET /api/v1/orgs/:orgId/inbox`,计划取舍 C6:按类型汇总):当前用户待处理的工具审批与
120
123
  * 能决定的技能变更,新的在前、最多 100 项(`truncated` 表示还有更多)。仅限用户主体。
124
+ * Org admins also see the org's open notices and dismiss them with
125
+ * `POST /api/v1/orgs/:orgId/inbox/notices/:id/dismiss`.
121
126
  */
122
127
  let InboxController = class InboxController {
123
128
  inbox;
@@ -128,6 +133,11 @@ let InboxController = class InboxController {
128
133
  const p = requireUser(principal);
129
134
  return this.inbox.list(org.orgId, p.account.id);
130
135
  }
136
+ /** An org admin dismisses an org notice (`skill_renamed`) -> 204. */
137
+ async dismissNotice(principal, org, params) {
138
+ const p = requireUser(principal);
139
+ await this.inbox.dismissNotice(org.orgId, p.account.id, params.id);
140
+ }
131
141
  };
132
142
  __decorate([
133
143
  Get(),
@@ -135,6 +145,14 @@ __decorate([
135
145
  __param(0, CurrentPrincipal()),
136
146
  __param(1, CurrentOrg())
137
147
  ], InboxController.prototype, "list", null);
148
+ __decorate([
149
+ Post("notices/:id/dismiss"),
150
+ HttpCode(204),
151
+ OrgAction("approvals.decide"),
152
+ __param(0, CurrentPrincipal()),
153
+ __param(1, CurrentOrg()),
154
+ __param(2, ZParam(NoticeParams))
155
+ ], InboxController.prototype, "dismissNotice", null);
138
156
  InboxController = __decorate([
139
157
  Controller("api/v1/orgs/:orgId/inbox"),
140
158
  __param(0, Inject(InboxService))
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
- import { escapeSkillInvocationTags, hasShellInjection, parseSkillMd, renderSkillBody, renderSkillInvocation, SKILL_ENTRY_FILE, SKILL_INVOCATION_LIMITS, } from "@capybara-hq/plugin-sdk";
10
+ import { escapeSkillInvocationTags, hasShellInjection, parseSkillMd, renderSkillBody, renderSkillInvocation, SKILL_ENTRY_FILE, SKILL_INVOCATION_LIMITS, skillDigest, } from "@capybara-hq/plugin-sdk";
11
11
  import { Inject, Injectable } from "@nestjs/common";
12
12
  import { AgentLookup } from "../agents/agent-lookup.js";
13
13
  import { ApiError } from "../errors.js";
@@ -18,6 +18,7 @@ import { StorageService } from "../storage/storage.service.js";
18
18
  import { BUILTIN } from "../tools/builtin-names.js";
19
19
  import { findSkillVersion, readSkillFile, SkillIntegrityError, } from "../tools/builtins/skill-load.js";
20
20
  import { invocationOf, resolveSkills } from "./catalog.js";
21
+ import { skillFileStore } from "./usable.js";
21
22
  /** A leading `/<name>` or `/<plugin>:<name>`, then whitespace or the end (spec §3.2). */
22
23
  const SLASH_COMMAND_RE = /^\/([a-z0-9-]+(?::[a-z0-9-]+)?)(?:\s|$)/;
23
24
  /** `/name args` at the very start of a message, or null (`/etc/hosts`, ` /x`, `/Upper`). */
@@ -151,6 +152,7 @@ let SkillInvoker = class SkillInvoker {
151
152
  const input = {
152
153
  name: a.name,
153
154
  skillName: found.skill.name,
155
+ digest: skillDigest(found.manifest.files),
154
156
  version: found.skill.version,
155
157
  body,
156
158
  invocation: inv,
@@ -159,7 +161,7 @@ let SkillInvoker = class SkillInvoker {
159
161
  };
160
162
  // a SKILL.md whose body alone renders over the limit can never be invoked: say so, rather than
161
163
  // "shorten the arguments"
162
- tooLarge(found.skill.name, () => renderSkillBody(body, inv, "", found.skill.name));
164
+ tooLarge(found.skill.name, () => renderSkillBody(body, inv, "", found.skill.name, input.digest));
163
165
  const args = a.args.trim();
164
166
  const record = {
165
167
  id: found.skill.id,
@@ -219,6 +221,7 @@ let SkillInvoker = class SkillInvoker {
219
221
  const task = (child) => renderSkillInvocation({
220
222
  name: skill.name,
221
223
  skillName: skill.name,
224
+ digest: skillDigest(found.manifest.files),
222
225
  version: skill.version,
223
226
  body,
224
227
  invocation: inv,
@@ -254,7 +257,9 @@ let SkillInvoker = class SkillInvoker {
254
257
  this.storage.assertAvailable();
255
258
  let bytes;
256
259
  try {
257
- bytes = await readSkillFile(this.storage.kernel(orgId), `${r.skill.source}${SKILL_ENTRY_FILE}`, md);
260
+ // a platform version (`platform:<prefix>`) is read from deployment/ (ruling D2)
261
+ const { store, prefix } = skillFileStore(this.storage, orgId, r.skill.source);
262
+ bytes = await readSkillFile(store, `${prefix}${SKILL_ENTRY_FILE}`, md);
258
263
  }
259
264
  catch (e) {
260
265
  if (e instanceof SkillIntegrityError)
@@ -1,4 +1,5 @@
1
1
  import { type SkillInvocation } from "@capybara-hq/plugin-sdk";
2
+ import type { SkillManifest } from "../db/kernel-schema.js";
2
3
  /**
3
4
  * 技能包(zip)解包与校验。zip 一律当作恶意输入:
4
5
  *
@@ -45,7 +46,7 @@ export interface SkillPackage {
45
46
  export declare function storedInvocation(i: SkillInvocation): SkillInvocation | undefined;
46
47
  /**
47
48
  * Invalid zip or skill content (`problems` lists each one, in English). Independent of HTTP: a
48
- * skill upload maps it to `skill.invalid_package`, an enterprise catalog import to
49
+ * skill upload maps it to `skill.invalid_package`, a platform catalog import to
49
50
  * `catalog.invalid_manifest`.
50
51
  */
51
52
  export declare class SkillArchiveError extends Error {
@@ -85,3 +86,21 @@ export declare function checkSkillFiles(files: SkillPackageFile[], opts?: {
85
86
  * 不合法 → {@link SkillArchiveError}。
86
87
  */
87
88
  export declare function readZipFiles(bytes: Uint8Array, maxBytes: number): Promise<SkillPackageFile[]>;
89
+ /**
90
+ * Checks skill files that are already unpacked (paths relative to the skill root), e.g. the ones
91
+ * built from text, with the rules of {@link readSkillPackage}. Invalid -> `skill.invalid_package`.
92
+ */
93
+ export declare function checkBuiltSkillFiles(files: SkillPackageFile[]): SkillPackage;
94
+ /** A validated skill package: its name, description, files and invocation. */
95
+ export interface SkillPackageInput {
96
+ name: string;
97
+ description: string;
98
+ files: SkillPackageFile[];
99
+ /** Phase D: stored in the manifest when it is not the default. */
100
+ invocation?: SkillInvocation;
101
+ }
102
+ /**
103
+ * The stored manifest of a skill package (the invocation only when it is not the default); org
104
+ * skills and platform skills store the same shape.
105
+ */
106
+ export declare function skillManifest(pkg: SkillPackageInput): SkillManifest;
@@ -48,7 +48,7 @@ export function storedInvocation(i) {
48
48
  const ignored = (path) => path.startsWith("__MACOSX/") || path === ".DS_Store" || path.endsWith("/.DS_Store");
49
49
  /**
50
50
  * Invalid zip or skill content (`problems` lists each one, in English). Independent of HTTP: a
51
- * skill upload maps it to `skill.invalid_package`, an enterprise catalog import to
51
+ * skill upload maps it to `skill.invalid_package`, a platform catalog import to
52
52
  * `catalog.invalid_manifest`.
53
53
  */
54
54
  export class SkillArchiveError extends Error {
@@ -225,3 +225,30 @@ export async function readZipFiles(bytes, maxBytes) {
225
225
  }
226
226
  return raw;
227
227
  }
228
+ /**
229
+ * Checks skill files that are already unpacked (paths relative to the skill root), e.g. the ones
230
+ * built from text, with the rules of {@link readSkillPackage}. Invalid -> `skill.invalid_package`.
231
+ */
232
+ export function checkBuiltSkillFiles(files) {
233
+ try {
234
+ return { ...checkSkillFiles(files), files };
235
+ }
236
+ catch (e) {
237
+ if (e instanceof SkillArchiveError)
238
+ throw invalid(e.problems);
239
+ throw e;
240
+ }
241
+ }
242
+ /**
243
+ * The stored manifest of a skill package (the invocation only when it is not the default); org
244
+ * skills and platform skills store the same shape.
245
+ */
246
+ export function skillManifest(pkg) {
247
+ const invocation = pkg.invocation && storedInvocation(pkg.invocation);
248
+ return {
249
+ name: pkg.name,
250
+ description: pkg.description,
251
+ files: pkg.files.map(({ path, size, sha256 }) => ({ path, size, sha256 })),
252
+ ...(invocation !== undefined && { invocation }),
253
+ };
254
+ }
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { OwnedItems, type OwnedSkillDeletePreview } from "../catalog/owned-items.js";
2
3
  import { type CreatedAttachment } from "../conversations/attachments.service.js";
3
4
  import { type Principal } from "../identity/principal.js";
4
5
  import { type OrgContext } from "../orgs/org.guard.js";
@@ -8,7 +9,17 @@ declare const UploadBody: z.ZodObject<{
8
9
  size: z.ZodNumber;
9
10
  }, z.core.$strict>;
10
11
  declare const CreateBody: z.ZodObject<{
11
- uploadId: z.ZodString;
12
+ uploadId: z.ZodOptional<z.ZodString>;
13
+ name: z.ZodOptional<z.ZodString & z.ZodType<string, string, z.core.$ZodTypeInternals<string, string>>>;
14
+ description: z.ZodOptional<z.ZodString>;
15
+ body: z.ZodOptional<z.ZodString>;
16
+ shareable: z.ZodOptional<z.ZodBoolean>;
17
+ }, z.core.$strict>;
18
+ declare const IdParams: z.ZodObject<{
19
+ id: z.ZodString;
20
+ }, z.core.$strip>;
21
+ declare const ShareableBody: z.ZodObject<{
22
+ shareable: z.ZodBoolean;
12
23
  }, z.core.$strict>;
13
24
  /**
14
25
  * The org skill library (`/api/v1/orgs/:orgId/skills`, human users only):
@@ -21,20 +32,44 @@ declare const CreateBody: z.ZodObject<{
21
32
  * `POST /attachments/:id/finalize`, or skip it and let the next step finalize);
22
33
  * 3. `POST /` `{ uploadId }` unpacks and checks it, creating a skill or adding a version to the
23
34
  * skill with the same name;
24
- * `DELETE /:id` soft-deletes (the web asks for confirmation, R3).
35
+ * `DELETE /:id` soft-deletes (the web asks for confirmation, R3; `GET /:id/delete-preview` says
36
+ * what it does), `PUT /:id/shareable` sets 可共享 (plugin scope phase 3, ruling P3-6).
25
37
  * When the deployment setting `customSkills` is deny, registering an upload and creating both
26
38
  * return 403 `catalog.custom_disabled` (decided in the service, re-checked inside the org row lock
27
- * on create); installing skills from the enterprise catalog is unaffected.
39
+ * on create); installing skills from the platform catalog is unaffected.
28
40
  */
29
41
  export declare class SkillsController {
30
42
  private readonly skills;
31
- constructor(skills: SkillsService);
43
+ /** The org's own items: 可共享 and the delete of a promoted skill (rulings P3-3, P3-19). */
44
+ private readonly owned;
45
+ constructor(skills: SkillsService,
46
+ /** The org's own items: 可共享 and the delete of a promoted skill (rulings P3-3, P3-19). */
47
+ owned: OwnedItems);
32
48
  createUpload(principal: Principal, org: OrgContext, body: z.infer<typeof UploadBody>): Promise<CreatedAttachment>;
33
49
  create(principal: Principal, org: OrgContext, body: z.infer<typeof CreateBody>): Promise<UploadedSkill>;
34
50
  list(principal: Principal, org: OrgContext): Promise<{
35
51
  skills: SkillSummary[];
36
52
  }>;
37
53
  get(principal: Principal, org: OrgContext, id: string): Promise<SkillDetail>;
54
+ /**
55
+ * Sets 可共享 on the org's own skill (`{ shareable }` -> 200 `{ id, shareable }`): only an org
56
+ * skill of the org's own (P3-6: an agent's skill or a copy of another owner's platform skill ->
57
+ * 409 `catalog.not_owned`); one it promoted writes its platform row too (ruling P3-2).
58
+ */
59
+ setShareable(principal: Principal, org: OrgContext, params: z.infer<typeof IdParams>, body: z.infer<typeof ShareableBody>): Promise<{
60
+ id: string;
61
+ shareable: boolean;
62
+ }>;
63
+ /**
64
+ * What deleting the skill does (pre-flight F19, P3-19; nothing written): `outcome`
65
+ * `transferred` when it was shared and another org uses it (`orgs`), else `removed`; `agents`
66
+ * the org's agents that lose it.
67
+ */
68
+ deletePreview(principal: Principal, org: OrgContext, params: z.infer<typeof IdParams>): Promise<OwnedSkillDeletePreview>;
69
+ /**
70
+ * Soft-deletes the skill; one the org shared that another org uses is transferred to the
71
+ * platform first (P3-19, platform notice `ownership_transferred`). 204.
72
+ */
38
73
  remove(principal: Principal, org: OrgContext, id: string): Promise<void>;
39
74
  }
40
75
  export {};
@@ -7,14 +7,16 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
- import { hasControlChars, MEDIA_NAME_MAX_CHARS } from "@capybara-hq/plugin-sdk";
11
- import { Controller, Delete, Get, HttpCode, Inject, Param, Post } from "@nestjs/common";
10
+ import { hasControlChars, isSkillName, MEDIA_NAME_MAX_CHARS, SKILL_LIMITS, } from "@capybara-hq/plugin-sdk";
11
+ import { Controller, Delete, Get, HttpCode, Inject, Param, Post, Put } from "@nestjs/common";
12
12
  import { z } from "zod";
13
+ import { OwnedItems } from "../catalog/owned-items.js";
13
14
  import { SKILL_PACKAGE_UPLOAD_MAX_BYTES, } from "../conversations/attachments.service.js";
14
15
  import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
15
16
  import { createZodDto } from "../infra/validation/create-zod-dto.js";
16
- import { ZBody } from "../infra/validation/zod-params.js";
17
+ import { ZBody, ZParam } from "../infra/validation/zod-params.js";
17
18
  import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
19
+ import { SKILL_WRITE_MAX_BYTES } from "../tools/builtins/skill-write.js";
18
20
  import { SkillsService, } from "./skills.service.js";
19
21
  const UploadBody = z
20
22
  .object({
@@ -26,11 +28,31 @@ const UploadBody = z
26
28
  size: z.number().int().min(1).max(SKILL_PACKAGE_UPLOAD_MAX_BYTES),
27
29
  })
28
30
  .strict();
29
- const CreateBody = z.object({ uploadId: z.string().min(1).max(100) }).strict();
31
+ const CreateBody = z
32
+ .object({
33
+ uploadId: z.string().min(1).max(100).optional(),
34
+ name: z
35
+ .string()
36
+ .refine(isSkillName, "name must be 1-64 lowercase letters, digits and single hyphens")
37
+ .optional(),
38
+ description: z.string().min(1).max(SKILL_LIMITS.descriptionMaxChars).optional(),
39
+ body: z.string().max(SKILL_WRITE_MAX_BYTES).optional(),
40
+ shareable: z.boolean().optional(),
41
+ })
42
+ .strict()
43
+ .refine((v) => v.uploadId !== undefined
44
+ ? v.name === undefined && v.description === undefined && v.body === undefined
45
+ : v.name !== undefined && v.description !== undefined && v.body !== undefined, "send either { uploadId } or { name, description, body }");
30
46
  class SkillUploadBody extends createZodDto(UploadBody, "SkillUploadBody") {
31
47
  }
32
48
  class SkillCreateBody extends createZodDto(CreateBody, "SkillCreateBody") {
33
49
  }
50
+ const IdParams = z.object({ id: z.string().min(1).max(100) });
51
+ const ShareableBody = z.object({ shareable: z.boolean() }).strict();
52
+ class SkillIdParams extends createZodDto(IdParams, "SkillIdParams") {
53
+ }
54
+ class SkillShareableBody extends createZodDto(ShareableBody, "SkillShareableBody") {
55
+ }
34
56
  /**
35
57
  * The org skill library (`/api/v1/orgs/:orgId/skills`, human users only):
36
58
  * - read: `skills.read` (member and up) — `GET /` list, `GET /:id` detail (versions and file
@@ -42,15 +64,20 @@ class SkillCreateBody extends createZodDto(CreateBody, "SkillCreateBody") {
42
64
  * `POST /attachments/:id/finalize`, or skip it and let the next step finalize);
43
65
  * 3. `POST /` `{ uploadId }` unpacks and checks it, creating a skill or adding a version to the
44
66
  * skill with the same name;
45
- * `DELETE /:id` soft-deletes (the web asks for confirmation, R3).
67
+ * `DELETE /:id` soft-deletes (the web asks for confirmation, R3; `GET /:id/delete-preview` says
68
+ * what it does), `PUT /:id/shareable` sets 可共享 (plugin scope phase 3, ruling P3-6).
46
69
  * When the deployment setting `customSkills` is deny, registering an upload and creating both
47
70
  * return 403 `catalog.custom_disabled` (decided in the service, re-checked inside the org row lock
48
- * on create); installing skills from the enterprise catalog is unaffected.
71
+ * on create); installing skills from the platform catalog is unaffected.
49
72
  */
50
73
  let SkillsController = class SkillsController {
51
74
  skills;
52
- constructor(skills) {
75
+ owned;
76
+ constructor(skills,
77
+ /** The org's own items: 可共享 and the delete of a promoted skill (rulings P3-3, P3-19). */
78
+ owned) {
53
79
  this.skills = skills;
80
+ this.owned = owned;
54
81
  }
55
82
  async createUpload(principal, org, body) {
56
83
  const p = requireUser(principal);
@@ -58,7 +85,17 @@ let SkillsController = class SkillsController {
58
85
  }
59
86
  async create(principal, org, body) {
60
87
  const p = requireUser(principal);
61
- return this.skills.upload(org.orgId, p.account.id, body.uploadId, patTokenId(p));
88
+ const tokenId = patTokenId(p);
89
+ if (body.uploadId !== undefined) {
90
+ return this.skills.upload(org.orgId, p.account.id, body.uploadId, tokenId, body.shareable);
91
+ }
92
+ return this.skills.createFromText(org.orgId, p.account.id, {
93
+ name: body.name,
94
+ description: body.description,
95
+ body: body.body,
96
+ ...(body.shareable !== undefined && { shareable: body.shareable }),
97
+ ...(tokenId !== undefined && { actorTokenId: tokenId }),
98
+ });
62
99
  }
63
100
  async list(principal, org) {
64
101
  requireUser(principal);
@@ -68,9 +105,34 @@ let SkillsController = class SkillsController {
68
105
  requireUser(principal);
69
106
  return this.skills.get(org.orgId, id);
70
107
  }
108
+ /**
109
+ * Sets 可共享 on the org's own skill (`{ shareable }` -> 200 `{ id, shareable }`): only an org
110
+ * skill of the org's own (P3-6: an agent's skill or a copy of another owner's platform skill ->
111
+ * 409 `catalog.not_owned`); one it promoted writes its platform row too (ruling P3-2).
112
+ */
113
+ async setShareable(principal, org, params, body) {
114
+ const p = requireUser(principal);
115
+ const tokenId = patTokenId(p);
116
+ await this.owned.setShareable(org.orgId, p.account.id, { kind: "skill", id: params.id }, body.shareable, tokenId !== undefined ? { actorTokenId: tokenId } : {});
117
+ return { id: params.id, shareable: body.shareable };
118
+ }
119
+ /**
120
+ * What deleting the skill does (pre-flight F19, P3-19; nothing written): `outcome`
121
+ * `transferred` when it was shared and another org uses it (`orgs`), else `removed`; `agents`
122
+ * the org's agents that lose it.
123
+ */
124
+ async deletePreview(principal, org, params) {
125
+ requireUser(principal);
126
+ return this.owned.previewSkillDelete(org.orgId, params.id);
127
+ }
128
+ /**
129
+ * Soft-deletes the skill; one the org shared that another org uses is transferred to the
130
+ * platform first (P3-19, platform notice `ownership_transferred`). 204.
131
+ */
71
132
  async remove(principal, org, id) {
72
133
  const p = requireUser(principal);
73
- await this.skills.softDelete(org.orgId, id, p.account.id, patTokenId(p));
134
+ const tokenId = patTokenId(p);
135
+ await this.owned.deleteSkill(org.orgId, p.account.id, id, tokenId !== undefined ? { actorTokenId: tokenId } : {});
74
136
  }
75
137
  };
76
138
  __decorate([
@@ -100,6 +162,21 @@ __decorate([
100
162
  __param(1, CurrentOrg()),
101
163
  __param(2, Param("id"))
102
164
  ], SkillsController.prototype, "get", null);
165
+ __decorate([
166
+ Put(":id/shareable"),
167
+ OrgAction("skills.manage"),
168
+ __param(0, CurrentPrincipal()),
169
+ __param(1, CurrentOrg()),
170
+ __param(2, ZParam(SkillIdParams)),
171
+ __param(3, ZBody(SkillShareableBody))
172
+ ], SkillsController.prototype, "setShareable", null);
173
+ __decorate([
174
+ Get(":id/delete-preview"),
175
+ OrgAction("skills.manage"),
176
+ __param(0, CurrentPrincipal()),
177
+ __param(1, CurrentOrg()),
178
+ __param(2, ZParam(SkillIdParams))
179
+ ], SkillsController.prototype, "deletePreview", null);
103
180
  __decorate([
104
181
  Delete(":id"),
105
182
  HttpCode(204),
@@ -110,6 +187,7 @@ __decorate([
110
187
  ], SkillsController.prototype, "remove", null);
111
188
  SkillsController = __decorate([
112
189
  Controller("api/v1/orgs/:orgId/skills"),
113
- __param(0, Inject(SkillsService))
190
+ __param(0, Inject(SkillsService)),
191
+ __param(1, Inject(OwnedItems))
114
192
  ], SkillsController);
115
193
  export { SkillsController };
@@ -6,6 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { Module } from "@nestjs/common";
8
8
  import { AgentLookupModule } from "../agents/agent-lookup.js";
9
+ import { CatalogImportModule } from "../catalog/catalog-import.module.js";
9
10
  import { AttachmentsModule } from "../conversations/attachments.module.js";
10
11
  import { EventLogModule } from "../conversations/event-log.js";
11
12
  import { OrgLockModule } from "../orgs/org-lock.js";
@@ -22,7 +23,15 @@ let SkillsModule = class SkillsModule {
22
23
  };
23
24
  SkillsModule = __decorate([
24
25
  Module({
25
- imports: [StorageModule, OrgLockModule, EventLogModule, AttachmentsModule, AgentLookupModule],
26
+ imports: [
27
+ StorageModule,
28
+ OrgLockModule,
29
+ EventLogModule,
30
+ AttachmentsModule,
31
+ AgentLookupModule,
32
+ // the owner's new version of a skill it promoted goes to the platform row (ruling P3-4)
33
+ CatalogImportModule,
34
+ ],
26
35
  providers: [SkillsService, SkillChangesService, SkillsCatalogService, SkillInvoker],
27
36
  exports: [SkillsService, SkillChangesService, SkillsCatalogService, SkillInvoker],
28
37
  })