@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +187 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +39 -8
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +326 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/claude/agents.js +13 -10
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +31 -14
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,15 +1,17 @@
1
1
  import { type Logger, type SkillInvocation } from "@capybara-hq/plugin-sdk";
2
- import { type Transaction } from "kysely";
3
2
  import type { AgentDefinition } from "../agents/definition.js";
4
- import type { EventLog } from "../conversations/event-log.js";
3
+ import { EventLog } from "../conversations/event-log.js";
5
4
  import { type ConversationEvent } from "../conversations/events.js";
6
- import type { KernelDatabase, KernelDb, SkillManifest, SourceFormat } from "../db/kernel-schema.js";
5
+ import type { KernelSchemaDb, SkillManifest, SourceFormat } from "../db/kernel-schema.js";
7
6
  import { ApiError } from "../errors.js";
7
+ import { KernelDb } from "../infra/database/kernel-db.js";
8
+ import { TransactionHost } from "../infra/database/transaction-host.js";
9
+ import type { KernelLogger } from "../log.js";
8
10
  import { type CatalogSkill, type PinnedSkill, type SkillsSnapshot } from "../runtime/context/skills.js";
9
- import type { StorageService } from "../storage/storage.service.js";
11
+ import { type PrefixedStorage, StorageService } from "../storage/storage.service.js";
10
12
  /**
11
13
  * 技能目录快照(M5 T14,Ruling M17):运行开始时解析「此刻对这个对话生效的技能」,与日志里最新一份快照不同才写
12
- * `skills_catalog`。模型看到的目录与 `skill_load` 的名字解析只来自日志,不读实时的库。
14
+ * `skills_catalog`。模型看到的目录与 `Skill` 的名字解析只来自日志,不读实时的库。
13
15
  */
14
16
  /**
15
17
  * Pinned skill limits (spec §9.1): at most `count` pinned skills per agent, whose current SKILL.md
@@ -44,7 +46,7 @@ export interface EffectiveSkillsInput {
44
46
  * (id 为已有技能或预先分配的 id,版本为批准后预期的版本号);其他对话照旧用 `current_version`。
45
47
  * 批准后版本成为当前版本,各对话下一次运行开始时由快照差异得到提醒;拒绝 / 取消后发起对话回到当前版本。
46
48
  */
47
- export declare function resolveEffectiveSkills(db: KernelDb, input: EffectiveSkillsInput, log?: Pick<Logger, "warn">): Promise<CatalogSkill[]>;
49
+ export declare function resolveEffectiveSkills(db: KernelSchemaDb, input: EffectiveSkillsInput, log?: Pick<Logger, "warn">): Promise<CatalogSkill[]>;
48
50
  /** The invocation metadata of a skill version: the manifest's, or the defaults when absent. */
49
51
  export declare function invocationOf(manifest: Pick<SkillManifest, "invocation">): SkillInvocation;
50
52
  /** An effective skill with what the snapshot needs beyond its catalog entry. */
@@ -60,7 +62,7 @@ export interface ResolvedSkill {
60
62
  * included and not truncated ({@link forModel} gives the model's part). Without
61
63
  * `conversationId` (a conversation not created yet) no trial draft applies.
62
64
  */
63
- export declare function resolveSkills(db: KernelDb, input: Omit<EffectiveSkillsInput, "conversationId"> & {
65
+ export declare function resolveSkills(db: KernelSchemaDb, input: Omit<EffectiveSkillsInput, "conversationId"> & {
64
66
  conversationId?: string;
65
67
  }): Promise<ResolvedSkill[]>;
66
68
  /** A pinned skill to read: an effective skill the agent version pins. */
@@ -73,7 +75,7 @@ interface PinnedCandidate {
73
75
  }
74
76
  /**
75
77
  * The `run_failed` message (shown to the user, English like the other run texts) for a
76
- * `storage.unavailable` from {@link recordSkillsCatalog}: a pinned SKILL.md that is missing,
78
+ * `storage.unavailable` from {@link SkillsCatalogService.record}: a pinned SKILL.md that is missing,
77
79
  * corrupt or unparsable points at the agent's owner, since sending again cannot help; anything
78
80
  * else is a transient storage failure.
79
81
  */
@@ -89,7 +91,7 @@ export declare function pinnedFailureText(e: ApiError): string;
89
91
  * carries `details: [{ reason: "pinned_unreadable", skillId, name, source }]`
90
92
  * ({@link pinnedFailureText} turns it into an owner-facing message).
91
93
  */
92
- export declare function loadPinnedBodies(storage: StorageService, orgId: string, pinned: readonly PinnedCandidate[], opts?: {
94
+ export declare function loadPinnedBodies(storage: PrefixedStorage, orgId: string, pinned: readonly PinnedCandidate[], opts?: {
93
95
  signal?: AbortSignal;
94
96
  log?: Pick<Logger, "error">;
95
97
  }): Promise<PinnedSkill[]>;
@@ -101,9 +103,9 @@ export declare function loadPinnedBodies(storage: StorageService, orgId: string,
101
103
  export declare function fitPinned(pinned: readonly PinnedSkill[], log: Pick<Logger, "warn"> | undefined, input: Partial<Pick<EffectiveSkillsInput, "orgId" | "agentId" | "conversationId">>): PinnedSkill[];
102
104
  /** `skills_catalog` 的幂等键:每次运行最多写一份。 */
103
105
  /**
104
- * 是否给模型 `skill_load`:日志里有过技能目录快照(Ruling M17),**即使最新一份是空的**。构建请求与执行工具调用
106
+ * 是否给模型 `Skill`:日志里有过技能目录快照(Ruling M17),**即使最新一份是空的**。构建请求与执行工具调用
105
107
  * 用同一判定。不因空快照收回这个工具:工具集合一变缓存前缀就失效;而且 agent 没有别的工具时会发出「没有工具
106
- * 但历史里有 tool_use」的请求,Anthropic 会拒绝。空目录下调用 skill_load 由 `NO_SKILLS_TEXT` 给出可执行的说明。
108
+ * 但历史里有 tool_use」的请求,Anthropic 会拒绝。空目录下调用 Skill 由 `NO_SKILLS_TEXT` 给出可执行的说明。
107
109
  */
108
110
  export declare function skillLoadOffered(latest: Extract<ConversationEvent, {
109
111
  type: "skills_catalog";
@@ -117,13 +119,14 @@ invoked?: boolean): boolean;
117
119
  /** Whether `events` hold a person's skill invocation (a `user_message` with `skill`). */
118
120
  export declare const hasInvocation: (events: readonly ConversationEvent[]) => boolean;
119
121
  /** {@link skillLoadOffered} for a conversation, read from the database. */
120
- export declare function skillLoadOfferedIn(db: KernelDb, eventLog: Pick<EventLog, "latestOfType">, conversationId: string): Promise<boolean>;
122
+ export declare function skillLoadOfferedIn(db: KernelSchemaDb, eventLog: Pick<EventLog, "latestOfType">, conversationId: string): Promise<boolean>;
121
123
  export declare const skillsCatalogIdemKey: (runId: string) => string;
122
124
  /**
123
- * 在事务 `t` 里锁会话行(与 `EventLog.append` 同一把锁)并读最新一份技能目录快照(没有为 undefined)。
124
- * 「读最新 → 推出下一份 → 追加」都在这把锁内,别的写快照的事务(运行开始、skill_write、拒绝时的回退)插不进来。
125
+ * 在调用方事务里锁会话行(与 `EventLog.append` 同一把锁)并读最新一份技能目录快照(没有为 undefined)。
126
+ * `db` is the caller's transaction handle (`KernelDb.db` inside `@Transactional`).
127
+ * 「读最新 → 推出下一份 → 追加」都在这把锁内,别的写快照的事务(运行开始、SkillWrite、拒绝时的回退)插不进来。
125
128
  */
126
- export declare function lockLatestCatalog(t: Transaction<KernelDatabase>, conversationId: string): Promise<SkillsSnapshot | undefined>;
129
+ export declare function lockLatestCatalog(db: KernelSchemaDb, conversationId: string): Promise<SkillsSnapshot | undefined>;
127
130
  /**
128
131
  * 运行开始时记录技能目录快照:解析生效的技能,与日志里最新一份不同才写(带幂等键,崩溃重试不重复)。
129
132
  * 从没有快照、现在也没有技能 → 不写(没有技能的 agent 不出现目录);之前有、现在全没了 → 写空快照(模型据此得知被移除)。
@@ -137,13 +140,23 @@ export declare function lockLatestCatalog(t: Transaction<KernelDatabase>, conver
137
140
  * whole thing starts over (at most {@link RECORD_ATTEMPTS} times, then `conflict`). A read failure
138
141
  * throws `storage.unavailable` before anything is written. Writes only when `!sameSnapshot`.
139
142
  */
140
- export declare function recordSkillsCatalog(deps: {
141
- db: KernelDb;
142
- eventLog: Pick<EventLog, "append" | "notify">;
143
- log?: Pick<Logger, "warn" | "error">;
144
- /** Reads pinned bodies; without it an agent with pinned skills fails `storage.unavailable`. */
145
- storage?: StorageService;
146
- }, input: EffectiveSkillsInput & {
147
- runId: string;
148
- }): Promise<void>;
143
+ export declare class SkillsCatalogService {
144
+ private readonly db;
145
+ private readonly storage;
146
+ private readonly eventLog;
147
+ private readonly log;
148
+ readonly txHost: TransactionHost;
149
+ constructor(db: KernelDb, storage: StorageService, eventLog: EventLog, log: KernelLogger, txHost: TransactionHost);
150
+ /**
151
+ * Records the run start's snapshot (see the class comment). `opts.log`: the run's logger
152
+ * (default the kernel logger).
153
+ */
154
+ record(input: EffectiveSkillsInput & {
155
+ runId: string;
156
+ }, opts?: {
157
+ log?: Pick<Logger, "warn" | "error">;
158
+ }): Promise<void>;
159
+ /** Step (2) of {@link record}: under the conversation row lock, resolve again and append. */
160
+ private append;
161
+ }
149
162
  export {};
@@ -1,13 +1,29 @@
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
+ };
1
10
  import { createHash } from "node:crypto";
2
11
  import { parseSkillMd, SKILL_ENTRY_FILE, } from "@capybara-hq/plugin-sdk";
12
+ import { Inject, Injectable } from "@nestjs/common";
3
13
  import { sql } from "kysely";
14
+ import { EventLog } from "../conversations/event-log.js";
4
15
  import { SKILLS_CATALOG_MAX } from "../conversations/events.js";
5
16
  import { ApiError } from "../errors.js";
17
+ import { KernelDb } from "../infra/database/kernel-db.js";
18
+ import { TransactionHost } from "../infra/database/transaction-host.js";
19
+ import { Transactional } from "../infra/database/transactional.decorator.js";
20
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
6
21
  import { CLAUDE_CODE_TOOL_MAP } from "../runtime/context/claude-tools.js";
7
22
  import { sameSnapshot, } from "../runtime/context/skills.js";
23
+ import { StorageService } from "../storage/storage.service.js";
8
24
  /**
9
25
  * 技能目录快照(M5 T14,Ruling M17):运行开始时解析「此刻对这个对话生效的技能」,与日志里最新一份快照不同才写
10
- * `skills_catalog`。模型看到的目录与 `skill_load` 的名字解析只来自日志,不读实时的库。
26
+ * `skills_catalog`。模型看到的目录与 `Skill` 的名字解析只来自日志,不读实时的库。
11
27
  */
12
28
  /**
13
29
  * Pinned skill limits (spec §9.1): at most `count` pinned skills per agent, whose current SKILL.md
@@ -182,7 +198,7 @@ const PINNED_UNREADABLE = "pinned_unreadable";
182
198
  const PINNED_READ_ATTEMPTS = 2;
183
199
  /**
184
200
  * The `run_failed` message (shown to the user, English like the other run texts) for a
185
- * `storage.unavailable` from {@link recordSkillsCatalog}: a pinned SKILL.md that is missing,
201
+ * `storage.unavailable` from {@link SkillsCatalogService.record}: a pinned SKILL.md that is missing,
186
202
  * corrupt or unparsable points at the agent's owner, since sending again cannot help; anything
187
203
  * else is a transient storage failure.
188
204
  */
@@ -287,9 +303,9 @@ export function fitPinned(pinned, log, input) {
287
303
  }
288
304
  /** `skills_catalog` 的幂等键:每次运行最多写一份。 */
289
305
  /**
290
- * 是否给模型 `skill_load`:日志里有过技能目录快照(Ruling M17),**即使最新一份是空的**。构建请求与执行工具调用
306
+ * 是否给模型 `Skill`:日志里有过技能目录快照(Ruling M17),**即使最新一份是空的**。构建请求与执行工具调用
291
307
  * 用同一判定。不因空快照收回这个工具:工具集合一变缓存前缀就失效;而且 agent 没有别的工具时会发出「没有工具
292
- * 但历史里有 tool_use」的请求,Anthropic 会拒绝。空目录下调用 skill_load 由 `NO_SKILLS_TEXT` 给出可执行的说明。
308
+ * 但历史里有 tool_use」的请求,Anthropic 会拒绝。空目录下调用 Skill 由 `NO_SKILLS_TEXT` 给出可执行的说明。
293
309
  */
294
310
  export function skillLoadOffered(latest,
295
311
  /**
@@ -318,17 +334,18 @@ export async function skillLoadOfferedIn(db, eventLog, conversationId) {
318
334
  }
319
335
  export const skillsCatalogIdemKey = (runId) => `skills_catalog:${runId}`;
320
336
  /**
321
- * 在事务 `t` 里锁会话行(与 `EventLog.append` 同一把锁)并读最新一份技能目录快照(没有为 undefined)。
322
- * 「读最新 → 推出下一份 → 追加」都在这把锁内,别的写快照的事务(运行开始、skill_write、拒绝时的回退)插不进来。
337
+ * 在调用方事务里锁会话行(与 `EventLog.append` 同一把锁)并读最新一份技能目录快照(没有为 undefined)。
338
+ * `db` is the caller's transaction handle (`KernelDb.db` inside `@Transactional`).
339
+ * 「读最新 → 推出下一份 → 追加」都在这把锁内,别的写快照的事务(运行开始、SkillWrite、拒绝时的回退)插不进来。
323
340
  */
324
- export async function lockLatestCatalog(t, conversationId) {
325
- await t
341
+ export async function lockLatestCatalog(db, conversationId) {
342
+ await db
326
343
  .selectFrom("conversations")
327
344
  .select("id")
328
345
  .where("id", "=", conversationId)
329
346
  .forUpdate()
330
347
  .executeTakeFirst();
331
- const last = await t
348
+ const last = await db
332
349
  .selectFrom("conversation_events")
333
350
  .select("payload")
334
351
  .where("conversation_id", "=", conversationId)
@@ -353,53 +370,79 @@ const RECORD_ATTEMPTS = 3;
353
370
  * whole thing starts over (at most {@link RECORD_ATTEMPTS} times, then `conflict`). A read failure
354
371
  * throws `storage.unavailable` before anything is written. Writes only when `!sameSnapshot`.
355
372
  */
356
- export async function recordSkillsCatalog(deps, input) {
357
- for (let attempt = 1; attempt <= RECORD_ATTEMPTS; attempt++) {
358
- const all = await resolveSkills(deps.db, input);
359
- // Warn about manual-only pins once, on the first attempt
360
- const first = pinnedCandidates(forModel(all, input), input.agent, input, all, attempt === 1 ? deps.log : undefined);
361
- if (first.length > 0 && !deps.storage) {
362
- throw storageUnavailable("No object storage to read pinned skills from");
373
+ let SkillsCatalogService = class SkillsCatalogService {
374
+ db;
375
+ storage;
376
+ eventLog;
377
+ log;
378
+ txHost;
379
+ constructor(db, storage, eventLog, log, txHost) {
380
+ this.db = db;
381
+ this.storage = storage;
382
+ this.eventLog = eventLog;
383
+ this.log = log;
384
+ this.txHost = txHost;
385
+ }
386
+ /**
387
+ * Records the run start's snapshot (see the class comment). `opts.log`: the run's logger
388
+ * (default the kernel logger).
389
+ */
390
+ async record(input, opts = {}) {
391
+ const log = opts.log ?? this.log;
392
+ for (let attempt = 1; attempt <= RECORD_ATTEMPTS; attempt++) {
393
+ const all = await resolveSkills(this.db.db, input);
394
+ // Warn about manual-only pins once, on the first attempt
395
+ const first = pinnedCandidates(forModel(all, input), input.agent, input, all, attempt === 1 ? log : undefined);
396
+ const pinned = fitPinned(await loadPinnedBodies(this.storage, input.orgId, first, { log }), log, input);
397
+ const toSeq = await this.append(input, first, pinned, log);
398
+ if (toSeq === "retry")
399
+ continue;
400
+ if (toSeq !== null)
401
+ await this.eventLog.notify(input.conversationId, toSeq);
402
+ return;
363
403
  }
364
- const pinned = fitPinned(deps.storage
365
- ? await loadPinnedBodies(deps.storage, input.orgId, first, {
366
- ...(deps.log && { log: deps.log }),
367
- })
368
- : [], deps.log, input);
369
- const toSeq = await deps.db.transaction().execute(async (t) => {
370
- const last = await lockLatestCatalog(t, input.conversationId);
371
- const all = await resolveSkills(t, input);
372
- const resolved = forModel(all, input, deps.log);
373
- if (!sameCandidates(first, pinnedCandidates(resolved, input.agent, input, all))) {
374
- return "retry";
375
- }
376
- const skills = resolved.map((r) => r.skill);
377
- const next = {
378
- skills,
379
- ...(pinned.length > 0 && { pinned }),
380
- // The model's (truncated) skills as before phase D, plus manual-only ones: a person can
381
- // invoke one whose body names Claude tools (batch 1 review M8)
382
- ...([...resolved, ...all.filter((r) => !invocationOf(r.manifest).model)].some((r) => r.format === "claude-code") && {
383
- toolMap: CLAUDE_CODE_TOOL_MAP,
384
- }),
385
- };
386
- if (last ? sameSnapshot(last, next) : skills.length === 0)
387
- return null;
388
- const written = await deps.eventLog.append(input.conversationId, [
389
- {
390
- type: "skills_catalog",
391
- runId: input.runId,
392
- idemKey: skillsCatalogIdemKey(input.runId),
393
- payload: next,
394
- },
395
- ], t);
396
- return Math.max(...written.map((e) => e.seq));
397
- });
398
- if (toSeq === "retry")
399
- continue;
400
- if (toSeq !== null)
401
- await deps.eventLog.notify(input.conversationId, toSeq);
402
- return;
404
+ throw new ApiError("conflict", "The pinned skills kept changing while the run started; send the message again.");
403
405
  }
404
- throw new ApiError("conflict", "The pinned skills kept changing while the run started; send the message again.");
405
- }
406
+ /** Step (2) of {@link record}: under the conversation row lock, resolve again and append. */
407
+ async append(input, first, pinned, log) {
408
+ const last = await lockLatestCatalog(this.db.db, input.conversationId);
409
+ const all = await resolveSkills(this.db.db, input);
410
+ const resolved = forModel(all, input, log);
411
+ if (!sameCandidates(first, pinnedCandidates(resolved, input.agent, input, all))) {
412
+ return "retry";
413
+ }
414
+ const skills = resolved.map((r) => r.skill);
415
+ const next = {
416
+ skills,
417
+ ...(pinned.length > 0 && { pinned }),
418
+ // The model's (truncated) skills as before phase D, plus manual-only ones: a person can
419
+ // invoke one whose body names Claude tools (batch 1 review M8)
420
+ ...([...resolved, ...all.filter((r) => !invocationOf(r.manifest).model)].some((r) => r.format === "claude-code") && {
421
+ toolMap: CLAUDE_CODE_TOOL_MAP,
422
+ }),
423
+ };
424
+ if (last ? sameSnapshot(last, next) : skills.length === 0)
425
+ return null;
426
+ const written = await this.eventLog.appendIn(input.conversationId, [
427
+ {
428
+ type: "skills_catalog",
429
+ runId: input.runId,
430
+ idemKey: skillsCatalogIdemKey(input.runId),
431
+ payload: next,
432
+ },
433
+ ]);
434
+ return Math.max(...written.map((e) => e.seq));
435
+ }
436
+ };
437
+ __decorate([
438
+ Transactional()
439
+ ], SkillsCatalogService.prototype, "append", null);
440
+ SkillsCatalogService = __decorate([
441
+ Injectable(),
442
+ __param(0, Inject(KernelDb)),
443
+ __param(1, Inject(StorageService)),
444
+ __param(2, Inject(EventLog)),
445
+ __param(3, Inject(KERNEL_LOGGER)),
446
+ __param(4, Inject(TransactionHost))
447
+ ], SkillsCatalogService);
448
+ export { SkillsCatalogService };
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
- import type { AgentsService } from "../agents/agents.service.js";
2
+ import { AgentsService } from "../agents/agents.service.js";
3
3
  import { type Principal } from "../identity/principal.js";
4
- import type { InboxService, InboxView } from "../inbox/inbox.service.js";
4
+ import { InboxService, type InboxView } from "../inbox/inbox.service.js";
5
5
  import { type OrgContext } from "../orgs/org.guard.js";
6
- import type { SkillChangeDetail, SkillChangesService, SkillChangeView } from "./changes.service.js";
7
- import type { SkillSummary, SkillsService } from "./skills.service.js";
6
+ import { type SkillChangeDetail, SkillChangesService, type SkillChangeView } from "./changes.service.js";
7
+ import { type SkillSummary, SkillsService } from "./skills.service.js";
8
8
  declare const DecideBody: z.ZodObject<{
9
9
  decision: z.ZodEnum<{
10
10
  approve: "approve";
@@ -7,18 +7,24 @@ 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 { Body, Controller, Delete, Get, HttpCode, Inject, Param, Post } from "@nestjs/common";
10
+ import { Controller, Delete, Get, HttpCode, Inject, Param, Post } from "@nestjs/common";
11
11
  import { z } from "zod";
12
- import { AGENTS, INBOX, SKILL_CHANGES, SKILLS } from "../http/tokens.js";
13
- import { ZodPipe } from "../http/zod.pipe.js";
12
+ import { AgentsService } from "../agents/agents.service.js";
14
13
  import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
14
+ import { InboxService } from "../inbox/inbox.service.js";
15
+ import { createZodDto } from "../infra/validation/create-zod-dto.js";
16
+ import { ZBody } from "../infra/validation/zod-params.js";
15
17
  import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
18
+ import { SkillChangesService, } from "./changes.service.js";
19
+ import { SkillsService } from "./skills.service.js";
16
20
  const DecideBody = z
17
21
  .object({
18
22
  decision: z.enum(["approve", "reject"]),
19
23
  note: z.string().max(1000).optional(),
20
24
  })
21
25
  .strict();
26
+ class SkillChangeDecideBody extends createZodDto(DecideBody, "SkillChangeDecideBody") {
27
+ }
22
28
  /**
23
29
  * 共享 agent 的技能变更申请(`/api/v1/orgs/:orgId/skill-changes`,M5 T15,R4)。动作 `approvals.decide`
24
30
  * (访客起、仅限用户主体:agent / 服务令牌不能决定,R2);能否决定由服务按该 agent **当前的负责人**判定,
@@ -54,11 +60,11 @@ __decorate([
54
60
  __param(0, CurrentPrincipal()),
55
61
  __param(1, CurrentOrg()),
56
62
  __param(2, Param("id")),
57
- __param(3, Body(new ZodPipe(DecideBody)))
63
+ __param(3, ZBody(SkillChangeDecideBody))
58
64
  ], SkillChangesController.prototype, "decide", null);
59
65
  SkillChangesController = __decorate([
60
66
  Controller("api/v1/orgs/:orgId/skill-changes"),
61
- __param(0, Inject(SKILL_CHANGES))
67
+ __param(0, Inject(SkillChangesService))
62
68
  ], SkillChangesController);
63
69
  export { SkillChangesController };
64
70
  /**
@@ -104,9 +110,9 @@ __decorate([
104
110
  ], AgentSkillsController.prototype, "remove", null);
105
111
  AgentSkillsController = __decorate([
106
112
  Controller("api/v1/orgs/:orgId/agents/:agentId/skills"),
107
- __param(0, Inject(SKILL_CHANGES)),
108
- __param(1, Inject(AGENTS)),
109
- __param(2, Inject(SKILLS))
113
+ __param(0, Inject(SkillChangesService)),
114
+ __param(1, Inject(AgentsService)),
115
+ __param(2, Inject(SkillsService))
110
116
  ], AgentSkillsController);
111
117
  export { AgentSkillsController };
112
118
  /**
@@ -131,6 +137,6 @@ __decorate([
131
137
  ], InboxController.prototype, "list", null);
132
138
  InboxController = __decorate([
133
139
  Controller("api/v1/orgs/:orgId/inbox"),
134
- __param(0, Inject(INBOX))
140
+ __param(0, Inject(InboxService))
135
141
  ], InboxController);
136
142
  export { InboxController };
@@ -1,9 +1,9 @@
1
- import { type Logger } from "@capybara-hq/plugin-sdk";
2
- import { type Transaction } from "kysely";
3
- import type { EventLog } from "../conversations/event-log.js";
4
- import type { KernelDatabase, KernelDb, SkillManifest } from "../db/kernel-schema.js";
5
- import type { StorageService } from "../storage/storage.service.js";
6
- type Trx = Transaction<KernelDatabase>;
1
+ import { EventLog } from "../conversations/event-log.js";
2
+ import type { SkillManifest } from "../db/kernel-schema.js";
3
+ import { KernelDb } from "../infra/database/kernel-db.js";
4
+ import { TransactionHost } from "../infra/database/transaction-host.js";
5
+ import type { KernelLogger } from "../log.js";
6
+ import { StorageService } from "../storage/storage.service.js";
7
7
  /**
8
8
  * 每个 agent 自己的技能(`scope = agent`)上限,含待批准的新技能。远低于目录快照的上限(`SKILLS_CATALOG_MAX`),
9
9
  * 正常使用不会让目录被截断。
@@ -95,17 +95,11 @@ export interface CancelledDrafts {
95
95
  prefixes: string[];
96
96
  seqs: [string, number][];
97
97
  }
98
- export interface SkillChangesDeps {
99
- db: KernelDb;
100
- storage: StorageService;
101
- eventLog: Pick<EventLog, "append" | "notify">;
102
- log: Pick<Logger, "warn">;
103
- }
104
98
  /**
105
99
  * agent 自写技能与共享 agent 的技能变更审批(M5 T15,R4):
106
- * - `write`(工具 `skill_write` 调用):私有 agent 直接生成新版本;共享 agent 生成一条待负责人批准的申请,
100
+ * - `write`(工具 `SkillWrite` 调用):私有 agent 直接生成新版本;共享 agent 生成一条待负责人批准的申请,
107
101
  * 期间只有发起对话试用(`resolveEffectiveSkills` 按对话合并);两种情况都在同一事务里往发起对话追加一份
108
- * 技能目录快照(Ruling M17:日志是唯一事实源),同一运行的下一步即可 `skill_load`;
102
+ * 技能目录快照(Ruling M17:日志是唯一事实源),同一运行的下一步即可 `Skill`;
109
103
  * - `decide`(HTTP,只有该 agent 当前的负责人):批准 → 版本对所有对话生效(各对话下一次运行开始时写新快照);
110
104
  * 拒绝 → 删除草稿对象,发起对话下一次运行开始时目录回到当前版本;
111
105
  * - 同一 agent 的同名技能最多一条待处理申请:同一对话再写取代旧的(旧的 cancelled、草稿删除、技能 id 不变),
@@ -113,8 +107,12 @@ export interface SkillChangesDeps {
113
107
  * 状态都在 PG(agent 行锁串行化同一 agent 的写与决定),文件在对象存储 `kernel/<orgId>/skills/<id>/`;无进程内状态。
114
108
  */
115
109
  export declare class SkillChangesService {
116
- private readonly d;
117
- constructor(d: SkillChangesDeps);
110
+ private readonly db;
111
+ private readonly storage;
112
+ private readonly eventLog;
113
+ private readonly log;
114
+ readonly txHost: TransactionHost;
115
+ constructor(db: KernelDb, storage: StorageService, eventLog: EventLog, log: KernelLogger, txHost: TransactionHost);
118
116
  /** 写技能(见类注释)。模型可见的失败抛 `ToolError`。 */
119
117
  write(ctx: SkillWriteContext, pkg: SkillWritePackage): Promise<SkillWriteOutcome>;
120
118
  /**
@@ -133,6 +131,12 @@ export declare class SkillChangesService {
133
131
  * 各对话下一次运行开始时目录里去掉它;之后同名可再写为新技能。
134
132
  */
135
133
  deleteAgentSkill(orgId: string, agentId: string, skillId: string, accountId: string, actorTokenId?: string): Promise<void>;
134
+ /** The transaction of {@link write}. */
135
+ private writeIn;
136
+ /** The transaction of {@link decide}. */
137
+ private decideIn;
138
+ /** The transaction of {@link deleteAgentSkill}. */
139
+ private deleteAgentSkillIn;
136
140
  /** 当前用户(作为 agent 负责人)能决定的待处理申请,新的在前,最多 {@link SKILL_CHANGES_LIST_MAX} 条。 */
137
141
  listPending(orgId: string, accountId: string): Promise<SkillChangeView[]>;
138
142
  /**
@@ -157,19 +161,25 @@ export declare class SkillChangesService {
157
161
  */
158
162
  private revertTrial;
159
163
  /**
160
- * 在事务 `t` 里取消该 agent 全部待处理的技能改动(agent 被删除时由 `AgentsService.softDelete` 调用):
161
- * 置 cancelled、审计、给各发起对话追加回退快照。提交后调用 {@link finishCancel} 删除草稿并发布事件。
164
+ * In the caller's transaction (`mandatory`: `AgentsService.softDelete` holds the org and agent
165
+ * row locks), cancels every pending skill change of the agent: marks them cancelled, audits, and
166
+ * appends a reverting snapshot to each requesting conversation. After the commit the caller runs
167
+ * {@link finishCancel} to delete the drafts and publish the events.
162
168
  */
163
- cancelPendingForAgent(t: Trx, orgId: string, agentId: string, actorAccountId: string, reason: string, actorTokenId?: string): Promise<CancelledDrafts>;
169
+ cancelPendingForAgent(orgId: string, agentId: string, actorAccountId: string, reason: string, actorTokenId?: string): Promise<CancelledDrafts>;
164
170
  /** {@link cancelPendingForAgent} 提交之后:发布事件、尽力删除草稿对象。 */
165
171
  finishCancel(orgId: string, c: CancelledDrafts): Promise<void>;
166
172
  /** 新技能的数量上限(含待批准的新技能;`excluding` 是将被取代的申请)。 */
167
173
  private assertBelowCap;
168
174
  /** 写一个版本并让 `current_version` 指向它(技能不存在则新建)。 */
169
175
  private createVersion;
176
+ /**
177
+ * 先给组织行加 KEY SHARE 锁,再锁 agent 行:与 `AgentsService`(组织行 FOR UPDATE → agent 行)同一顺序。
178
+ * 不先锁的话,本事务持有 agent 行后插入引用组织的行(外键取 KEY SHARE)会与之互相等待(40P01)。
179
+ */
180
+ private keyShareOrg;
170
181
  /** 尽力删除草稿对象(失败只记日志:孤儿对象随组织数据清理删除)。 */
171
182
  private deletePrefix;
172
183
  /** 补齐 agent 名。 */
173
184
  private views;
174
185
  }
175
- export {};