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

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 (616) 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 +179 -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 +261 -329
  21. package/dist/agents/definition.d.ts +8 -0
  22. package/dist/agents/definition.js +8 -0
  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 +20 -4
  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 +323 -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/cli.d.ts +3 -2
  42. package/dist/catalog/cli.js +13 -31
  43. package/dist/catalog/job-ids.d.ts +15 -0
  44. package/dist/catalog/job-ids.js +15 -0
  45. package/dist/catalog/jobs.d.ts +27 -0
  46. package/dist/catalog/jobs.js +70 -0
  47. package/dist/catalog/locks.d.ts +24 -0
  48. package/dist/catalog/locks.js +63 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  50. package/dist/catalog/marketplaces.controller.js +22 -11
  51. package/dist/catalog/marketplaces.service.d.ts +30 -13
  52. package/dist/catalog/marketplaces.service.js +330 -256
  53. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  54. package/dist/catalog/org-catalog.controller.js +29 -14
  55. package/dist/catalog/org-catalog.service.d.ts +32 -198
  56. package/dist/catalog/org-catalog.service.js +159 -400
  57. package/dist/catalog/plugin-import.d.ts +73 -34
  58. package/dist/catalog/plugin-import.js +356 -217
  59. package/dist/catalog/plugin-install.d.ts +83 -41
  60. package/dist/catalog/plugin-install.js +421 -269
  61. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  62. package/dist/catalog/plugin-upgrade.js +407 -282
  63. package/dist/catalog/requests.service.d.ts +27 -15
  64. package/dist/catalog/requests.service.js +201 -145
  65. package/dist/catalog/upgrade-targets.d.ts +4 -7
  66. package/dist/channels/actions.d.ts +6 -4
  67. package/dist/channels/actions.js +1 -1
  68. package/dist/channels/cards.d.ts +2 -2
  69. package/dist/channels/channels.module.d.ts +40 -0
  70. package/dist/channels/channels.module.js +128 -0
  71. package/dist/channels/connections.controller.d.ts +1 -1
  72. package/dist/channels/connections.controller.js +11 -6
  73. package/dist/channels/connections.service.d.ts +43 -21
  74. package/dist/channels/connections.service.js +236 -131
  75. package/dist/channels/inbound.d.ts +34 -38
  76. package/dist/channels/inbound.js +107 -41
  77. package/dist/channels/job-ids.d.ts +10 -0
  78. package/dist/channels/job-ids.js +10 -0
  79. package/dist/channels/jobs.d.ts +85 -0
  80. package/dist/channels/jobs.js +157 -0
  81. package/dist/channels/outbound.d.ts +60 -82
  82. package/dist/channels/outbound.js +165 -194
  83. package/dist/channels/supervisor.d.ts +88 -46
  84. package/dist/channels/supervisor.js +230 -132
  85. package/dist/channels/threads.d.ts +29 -8
  86. package/dist/channels/threads.js +71 -13
  87. package/dist/channels/webhook.d.ts +20 -14
  88. package/dist/channels/webhook.js +51 -20
  89. package/dist/config/load.d.ts +3 -2
  90. package/dist/config/load.js +3 -2
  91. package/dist/config/nacos-source.js +11 -2
  92. package/dist/config/schema.d.ts +1 -0
  93. package/dist/config/schema.js +10 -4
  94. package/dist/conversations/access.d.ts +29 -0
  95. package/dist/conversations/access.js +86 -0
  96. package/dist/conversations/artifacts.d.ts +10 -10
  97. package/dist/conversations/artifacts.js +35 -9
  98. package/dist/conversations/attachments.controller.d.ts +1 -1
  99. package/dist/conversations/attachments.controller.js +8 -6
  100. package/dist/conversations/attachments.module.d.ts +7 -0
  101. package/dist/conversations/attachments.module.js +25 -0
  102. package/dist/conversations/attachments.service.d.ts +30 -22
  103. package/dist/conversations/attachments.service.js +119 -46
  104. package/dist/conversations/conversations.controller.d.ts +8 -7
  105. package/dist/conversations/conversations.controller.js +59 -29
  106. package/dist/conversations/conversations.module.d.ts +8 -0
  107. package/dist/conversations/conversations.module.js +69 -0
  108. package/dist/conversations/conversations.service.d.ts +40 -38
  109. package/dist/conversations/conversations.service.js +130 -140
  110. package/dist/conversations/event-log.d.ts +28 -18
  111. package/dist/conversations/event-log.js +74 -27
  112. package/dist/conversations/files.d.ts +10 -10
  113. package/dist/conversations/files.js +37 -11
  114. package/dist/conversations/idem-keys.d.ts +5 -0
  115. package/dist/conversations/idem-keys.js +5 -0
  116. package/dist/conversations/job-ids.d.ts +6 -0
  117. package/dist/conversations/job-ids.js +6 -0
  118. package/dist/conversations/outputs-read.d.ts +11 -11
  119. package/dist/conversations/outputs-read.js +31 -7
  120. package/dist/conversations/queue.d.ts +48 -56
  121. package/dist/conversations/queue.js +13 -289
  122. package/dist/conversations/queue.service.d.ts +60 -0
  123. package/dist/conversations/queue.service.js +343 -0
  124. package/dist/conversations/sandbox-status.d.ts +13 -10
  125. package/dist/conversations/sandbox-status.js +36 -8
  126. package/dist/conversations/titles.d.ts +71 -24
  127. package/dist/conversations/titles.js +159 -63
  128. package/dist/ctx/bus.js +9 -3
  129. package/dist/ctx/create-ctx.d.ts +6 -0
  130. package/dist/ctx/create-ctx.js +7 -9
  131. package/dist/ctx/lock.d.ts +7 -3
  132. package/dist/ctx/lock.js +9 -20
  133. package/dist/ctx/secrets.d.ts +10 -2
  134. package/dist/ctx/secrets.js +7 -3
  135. package/dist/db/kernel-schema.d.ts +2 -2
  136. package/dist/db/pool.d.ts +5 -0
  137. package/dist/db/pool.js +1 -0
  138. package/dist/errors.d.ts +1 -0
  139. package/dist/errors.js +1 -0
  140. package/dist/evals/budget.d.ts +42 -21
  141. package/dist/evals/budget.js +114 -62
  142. package/dist/evals/evals.module.d.ts +31 -0
  143. package/dist/evals/evals.module.js +114 -0
  144. package/dist/evals/jobs.d.ts +20 -0
  145. package/dist/evals/jobs.js +45 -0
  146. package/dist/evals/run-replay.d.ts +56 -8
  147. package/dist/evals/run-replay.js +140 -80
  148. package/dist/evals/runs.controller.d.ts +1 -1
  149. package/dist/evals/runs.controller.js +17 -8
  150. package/dist/evals/runs.service.d.ts +23 -45
  151. package/dist/evals/runs.service.js +245 -234
  152. package/dist/evals/sets.controller.d.ts +1 -1
  153. package/dist/evals/sets.controller.js +17 -8
  154. package/dist/evals/sets.service.d.ts +22 -6
  155. package/dist/evals/sets.service.js +248 -194
  156. package/dist/evals/snapshot.d.ts +2 -2
  157. package/dist/evals/step-replay.d.ts +2 -2
  158. package/dist/evals/step-replay.js +1 -1
  159. package/dist/evals/trajectory.controller.d.ts +1 -1
  160. package/dist/evals/trajectory.controller.js +11 -7
  161. package/dist/evals/trajectory.service.d.ts +5 -4
  162. package/dist/evals/trajectory.service.js +30 -7
  163. package/dist/evals/worker.d.ts +44 -27
  164. package/dist/evals/worker.js +220 -121
  165. package/dist/extensions/admin-ops.d.ts +61 -33
  166. package/dist/extensions/admin-ops.js +248 -154
  167. package/dist/extensions/admin-view.d.ts +38 -27
  168. package/dist/extensions/admin-view.js +126 -55
  169. package/dist/extensions/approvals.d.ts +12 -8
  170. package/dist/extensions/approvals.js +73 -46
  171. package/dist/extensions/blobs.d.ts +27 -10
  172. package/dist/extensions/blobs.js +111 -45
  173. package/dist/extensions/bootstrap.d.ts +58 -31
  174. package/dist/extensions/bootstrap.js +175 -121
  175. package/dist/extensions/cli.d.ts +20 -10
  176. package/dist/extensions/cli.js +41 -96
  177. package/dist/extensions/config-issues.d.ts +7 -0
  178. package/dist/extensions/config-issues.js +31 -0
  179. package/dist/extensions/deployment-config-store.d.ts +49 -0
  180. package/dist/extensions/deployment-config-store.js +133 -0
  181. package/dist/extensions/deployment-config.d.ts +58 -67
  182. package/dist/extensions/deployment-config.js +202 -230
  183. package/dist/extensions/enabled.d.ts +5 -5
  184. package/dist/extensions/extensions.module.d.ts +8 -0
  185. package/dist/extensions/extensions.module.js +77 -0
  186. package/dist/extensions/hooks.d.ts +3 -2
  187. package/dist/extensions/hooks.js +1 -1
  188. package/dist/extensions/host.d.ts +72 -68
  189. package/dist/extensions/host.js +191 -152
  190. package/dist/extensions/installs.d.ts +49 -16
  191. package/dist/extensions/installs.js +128 -32
  192. package/dist/extensions/job-ids.d.ts +6 -0
  193. package/dist/extensions/job-ids.js +6 -0
  194. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  195. package/dist/extensions/lifecycle-topics.js +18 -0
  196. package/dist/extensions/lifecycle.d.ts +35 -47
  197. package/dist/extensions/lifecycle.js +103 -39
  198. package/dist/extensions/locks.d.ts +33 -0
  199. package/dist/extensions/locks.js +86 -0
  200. package/dist/extensions/migrate-lock.d.ts +3 -4
  201. package/dist/extensions/org-config.controller.d.ts +1 -1
  202. package/dist/extensions/org-config.controller.js +8 -5
  203. package/dist/extensions/org-config.d.ts +48 -46
  204. package/dist/extensions/org-config.js +284 -226
  205. package/dist/extensions/registry.d.ts +50 -2
  206. package/dist/extensions/registry.js +89 -4
  207. package/dist/extensions/sources.d.ts +12 -8
  208. package/dist/extensions/sources.js +34 -13
  209. package/dist/files/files.module.d.ts +3 -0
  210. package/dist/files/files.module.js +22 -0
  211. package/dist/files/previewers.controller.d.ts +7 -2
  212. package/dist/files/previewers.controller.js +17 -9
  213. package/dist/files/previewers.d.ts +13 -18
  214. package/dist/files/previewers.js +83 -36
  215. package/dist/http/adapter.d.ts +3 -0
  216. package/dist/http/adapter.js +25 -0
  217. package/dist/http/api.module.d.ts +3 -110
  218. package/dist/http/api.module.js +47 -355
  219. package/dist/http/app.d.ts +11 -15
  220. package/dist/http/app.js +17 -62
  221. package/dist/http/error-filter.module.d.ts +5 -0
  222. package/dist/http/error-filter.module.js +18 -0
  223. package/dist/http/error.filter.js +2 -2
  224. package/dist/identity/accounts.d.ts +82 -29
  225. package/dist/identity/accounts.js +294 -175
  226. package/dist/identity/api-tokens.d.ts +11 -7
  227. package/dist/identity/api-tokens.js +71 -44
  228. package/dist/identity/audit.d.ts +7 -4
  229. package/dist/identity/audit.js +5 -1
  230. package/dist/identity/auth.controller.d.ts +11 -10
  231. package/dist/identity/auth.controller.js +31 -25
  232. package/dist/identity/auth.guard.d.ts +3 -3
  233. package/dist/identity/auth.guard.js +6 -4
  234. package/dist/identity/binding.d.ts +9 -11
  235. package/dist/identity/binding.js +41 -13
  236. package/dist/identity/enterprise-admin.d.ts +18 -12
  237. package/dist/identity/enterprise-admin.js +67 -13
  238. package/dist/identity/external-identity-lock.d.ts +17 -0
  239. package/dist/identity/external-identity-lock.js +39 -0
  240. package/dist/identity/external.d.ts +19 -15
  241. package/dist/identity/external.js +163 -125
  242. package/dist/identity/identity.module.d.ts +6 -0
  243. package/dist/identity/identity.module.js +56 -0
  244. package/dist/identity/me.controller.d.ts +16 -15
  245. package/dist/identity/me.controller.js +37 -31
  246. package/dist/identity/sessions.d.ts +12 -10
  247. package/dist/identity/sessions.js +74 -42
  248. package/dist/identity/settings.d.ts +20 -14
  249. package/dist/identity/settings.js +85 -57
  250. package/dist/identity/sso.controller.d.ts +7 -7
  251. package/dist/identity/sso.controller.js +13 -9
  252. package/dist/identity/sso.d.ts +9 -12
  253. package/dist/identity/sso.js +54 -24
  254. package/dist/inbox/inbox.module.d.ts +3 -0
  255. package/dist/inbox/inbox.module.js +22 -0
  256. package/dist/inbox/inbox.service.d.ts +7 -9
  257. package/dist/inbox/inbox.service.js +32 -11
  258. package/dist/index.d.ts +16 -11
  259. package/dist/index.js +9 -6
  260. package/dist/infra/cache/cache.module.d.ts +3 -0
  261. package/dist/infra/cache/cache.module.js +16 -0
  262. package/dist/infra/cache/cache.service.d.ts +21 -0
  263. package/dist/infra/cache/cache.service.js +80 -0
  264. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  265. package/dist/infra/cache/cacheable.decorator.js +83 -0
  266. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  267. package/dist/infra/cli/kernel-cli.module.js +165 -0
  268. package/dist/infra/close-within.d.ts +15 -0
  269. package/dist/infra/close-within.js +36 -0
  270. package/dist/infra/config/config.module.d.ts +13 -0
  271. package/dist/infra/config/config.module.js +39 -0
  272. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  273. package/dist/infra/config/kernel-config.service.js +126 -0
  274. package/dist/infra/database/after-commit.d.ts +6 -0
  275. package/dist/infra/database/after-commit.js +9 -0
  276. package/dist/infra/database/database.module.d.ts +25 -0
  277. package/dist/infra/database/database.module.js +90 -0
  278. package/dist/infra/database/kernel-db.d.ts +22 -0
  279. package/dist/infra/database/kernel-db.js +65 -0
  280. package/dist/infra/database/transaction-host.d.ts +50 -0
  281. package/dist/infra/database/transaction-host.js +125 -0
  282. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  283. package/dist/infra/database/transactional.decorator.js +27 -0
  284. package/dist/infra/database/xact-lock.d.ts +17 -0
  285. package/dist/infra/database/xact-lock.js +43 -0
  286. package/dist/infra/events/kernel-events.d.ts +96 -0
  287. package/dist/infra/events/kernel-events.js +65 -0
  288. package/dist/infra/health/health.controller.d.ts +26 -0
  289. package/dist/infra/health/health.controller.js +104 -0
  290. package/dist/infra/health/health.module.d.ts +9 -0
  291. package/dist/infra/health/health.module.js +24 -0
  292. package/dist/infra/health/health.options.d.ts +10 -0
  293. package/dist/infra/health/health.options.js +15 -0
  294. package/dist/infra/health/shutdown-state.d.ts +6 -0
  295. package/dist/infra/health/shutdown-state.js +2 -0
  296. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  297. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  300. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  301. package/dist/infra/lifecycle/process-guards.js +86 -0
  302. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  303. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  304. package/dist/infra/lock/key-template.d.ts +13 -0
  305. package/dist/infra/lock/key-template.js +46 -0
  306. package/dist/infra/lock/lock.module.d.ts +3 -0
  307. package/dist/infra/lock/lock.module.js +16 -0
  308. package/dist/infra/lock/lock.service.d.ts +120 -0
  309. package/dist/infra/lock/lock.service.js +343 -0
  310. package/dist/infra/lock/shared-lease.d.ts +44 -0
  311. package/dist/infra/lock/shared-lease.js +121 -0
  312. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  313. package/dist/infra/lock/with-lock.decorator.js +49 -0
  314. package/dist/infra/logging/logging.module.d.ts +16 -0
  315. package/dist/infra/logging/logging.module.js +34 -0
  316. package/dist/infra/queue/configured-processor.d.ts +18 -0
  317. package/dist/infra/queue/configured-processor.js +23 -0
  318. package/dist/infra/queue/job-failure.d.ts +18 -0
  319. package/dist/infra/queue/job-failure.js +26 -0
  320. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  321. package/dist/infra/queue/queue-shutdown.js +81 -0
  322. package/dist/infra/queue/queue.module.d.ts +16 -0
  323. package/dist/infra/queue/queue.module.js +61 -0
  324. package/dist/infra/queue/redis-connection.d.ts +7 -0
  325. package/dist/infra/queue/redis-connection.js +18 -0
  326. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  327. package/dist/infra/queue/retired-schedulers.js +9 -0
  328. package/dist/infra/queue/run-job.d.ts +16 -0
  329. package/dist/infra/queue/run-job.js +19 -0
  330. package/dist/infra/redis/redis.module.d.ts +24 -0
  331. package/dist/infra/redis/redis.module.js +87 -0
  332. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  333. package/dist/infra/schedule/cron-tick.js +25 -0
  334. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  335. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  336. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  337. package/dist/infra/schedule/locked-interval.js +190 -0
  338. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  339. package/dist/infra/schedule/locked-tick.js +137 -0
  340. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  341. package/dist/infra/schedule/schedule.module.js +27 -0
  342. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  343. package/dist/infra/schedule/scheduled-runs.js +163 -0
  344. package/dist/infra/swagger/swagger.d.ts +16 -0
  345. package/dist/infra/swagger/swagger.js +31 -0
  346. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  347. package/dist/infra/throttler/credential-throttler.js +77 -0
  348. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  349. package/dist/infra/throttler/named-throttlers.js +119 -0
  350. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  351. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  352. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  353. package/dist/infra/throttler/throttler.guard.js +68 -0
  354. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  355. package/dist/infra/throttler/throttler.module.js +53 -0
  356. package/dist/infra/tokens.d.ts +15 -0
  357. package/dist/infra/tokens.js +15 -0
  358. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  359. package/dist/infra/validation/create-zod-dto.js +35 -0
  360. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  361. package/dist/infra/validation/parse-with-zod.js +12 -0
  362. package/dist/infra/validation/validation.module.d.ts +3 -0
  363. package/dist/infra/validation/validation.module.js +16 -0
  364. package/dist/infra/validation/zod-params.d.ts +7 -0
  365. package/dist/infra/validation/zod-params.js +42 -0
  366. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  367. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  368. package/dist/kernel.d.ts +9 -244
  369. package/dist/kernel.js +8 -1305
  370. package/dist/kernel.module.d.ts +17 -0
  371. package/dist/kernel.module.js +136 -0
  372. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  373. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  374. package/dist/lifecycle/tokens.d.ts +3 -0
  375. package/dist/lifecycle/tokens.js +3 -0
  376. package/dist/log-context.d.ts +2 -0
  377. package/dist/log-context.js +4 -0
  378. package/dist/models/models.module.d.ts +3 -0
  379. package/dist/models/models.module.js +24 -0
  380. package/dist/models/prices.d.ts +8 -2
  381. package/dist/models/prices.js +65 -37
  382. package/dist/models/purposes.controller.d.ts +1 -1
  383. package/dist/models/purposes.controller.js +5 -6
  384. package/dist/models/purposes.d.ts +35 -13
  385. package/dist/models/purposes.js +101 -51
  386. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  387. package/dist/orgs/directory-sync.controller.js +2 -2
  388. package/dist/orgs/directory-sync.d.ts +61 -31
  389. package/dist/orgs/directory-sync.js +212 -125
  390. package/dist/orgs/invitations.controller.d.ts +8 -8
  391. package/dist/orgs/invitations.controller.js +27 -26
  392. package/dist/orgs/invitations.service.d.ts +12 -9
  393. package/dist/orgs/invitations.service.js +130 -92
  394. package/dist/orgs/job-ids.d.ts +8 -0
  395. package/dist/orgs/job-ids.js +8 -0
  396. package/dist/orgs/members.service.d.ts +19 -12
  397. package/dist/orgs/members.service.js +161 -117
  398. package/dist/orgs/offboarding.d.ts +54 -57
  399. package/dist/orgs/offboarding.js +161 -71
  400. package/dist/orgs/org-lock.d.ts +28 -19
  401. package/dist/orgs/org-lock.js +81 -35
  402. package/dist/orgs/org.guard.d.ts +1 -1
  403. package/dist/orgs/org.guard.js +2 -2
  404. package/dist/orgs/orgs.controller.d.ts +13 -13
  405. package/dist/orgs/orgs.controller.js +29 -17
  406. package/dist/orgs/orgs.module.d.ts +6 -0
  407. package/dist/orgs/orgs.module.js +68 -0
  408. package/dist/orgs/orgs.service.d.ts +30 -19
  409. package/dist/orgs/orgs.service.js +139 -86
  410. package/dist/orgs/settings.controller.d.ts +1 -1
  411. package/dist/orgs/settings.controller.js +8 -6
  412. package/dist/orgs/settings.service.d.ts +14 -8
  413. package/dist/orgs/settings.service.js +75 -46
  414. package/dist/overrides.d.ts +56 -0
  415. package/dist/overrides.js +30 -0
  416. package/dist/roles/gateway-role.d.ts +43 -0
  417. package/dist/roles/gateway-role.js +98 -0
  418. package/dist/roles/gateway.module.d.ts +8 -0
  419. package/dist/roles/gateway.module.js +28 -0
  420. package/dist/roles/worker-role.d.ts +63 -0
  421. package/dist/roles/worker-role.js +144 -0
  422. package/dist/roles/worker.module.d.ts +14 -0
  423. package/dist/roles/worker.module.js +90 -0
  424. package/dist/runtime/abort.js +19 -2
  425. package/dist/runtime/checkpointer.d.ts +8 -3
  426. package/dist/runtime/checkpointer.js +87 -55
  427. package/dist/runtime/conversation-lock.d.ts +20 -11
  428. package/dist/runtime/conversation-lock.js +62 -72
  429. package/dist/runtime/hook-calls.d.ts +3 -3
  430. package/dist/runtime/hook-calls.js +1 -6
  431. package/dist/runtime/job-ids.d.ts +10 -0
  432. package/dist/runtime/job-ids.js +10 -0
  433. package/dist/runtime/langgraph-loop.js +1 -1
  434. package/dist/runtime/loop.d.ts +7 -0
  435. package/dist/runtime/loop.js +14 -0
  436. package/dist/runtime/maintenance-queue.d.ts +10 -0
  437. package/dist/runtime/maintenance-queue.js +10 -0
  438. package/dist/runtime/maintenance.d.ts +45 -74
  439. package/dist/runtime/maintenance.js +139 -137
  440. package/dist/runtime/model-call.d.ts +7 -4
  441. package/dist/runtime/model-call.js +24 -57
  442. package/dist/runtime/providers.d.ts +17 -6
  443. package/dist/runtime/providers.js +66 -25
  444. package/dist/runtime/quota.d.ts +17 -3
  445. package/dist/runtime/quota.js +27 -2
  446. package/dist/runtime/retired-schedulers.d.ts +7 -0
  447. package/dist/runtime/retired-schedulers.js +31 -0
  448. package/dist/runtime/run-control.d.ts +33 -0
  449. package/dist/runtime/run-control.js +77 -0
  450. package/dist/runtime/run-finish.d.ts +26 -17
  451. package/dist/runtime/run-finish.js +98 -51
  452. package/dist/runtime/run-jobs.d.ts +48 -0
  453. package/dist/runtime/run-jobs.js +95 -0
  454. package/dist/runtime/run-processors.d.ts +60 -0
  455. package/dist/runtime/run-processors.js +185 -0
  456. package/dist/runtime/run-queue.d.ts +32 -57
  457. package/dist/runtime/run-queue.js +291 -295
  458. package/dist/runtime/run-steps.d.ts +39 -0
  459. package/dist/runtime/run-steps.js +96 -0
  460. package/dist/runtime/run-worker.d.ts +121 -75
  461. package/dist/runtime/run-worker.js +340 -226
  462. package/dist/runtime/runtime.module.d.ts +10 -0
  463. package/dist/runtime/runtime.module.js +112 -0
  464. package/dist/runtime/step-log.d.ts +40 -0
  465. package/dist/runtime/step-log.js +94 -0
  466. package/dist/runtime/stream.controller.d.ts +5 -8
  467. package/dist/runtime/stream.controller.js +14 -12
  468. package/dist/runtime/stream.d.ts +24 -6
  469. package/dist/runtime/stream.js +78 -7
  470. package/dist/runtime/subagents/child.d.ts +3 -44
  471. package/dist/runtime/subagents/child.js +0 -79
  472. package/dist/runtime/subagents/definition.d.ts +4 -4
  473. package/dist/runtime/subagents/definition.js +2 -2
  474. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  475. package/dist/runtime/subagents/dispatch.js +135 -140
  476. package/dist/runtime/subagents/limits.d.ts +9 -4
  477. package/dist/runtime/subagents/limits.js +4 -2
  478. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  479. package/dist/runtime/subagents/org-agents.js +1 -1
  480. package/dist/runtime/subagents/progress.d.ts +2 -2
  481. package/dist/runtime/subagents/roster.d.ts +3 -3
  482. package/dist/runtime/subagents/roster.js +1 -1
  483. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  484. package/dist/runtime/subagents/skill-fork.js +16 -5
  485. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  486. package/dist/runtime/subagents/subagents.service.js +101 -0
  487. package/dist/runtime/usage-report.d.ts +94 -52
  488. package/dist/runtime/usage-report.js +200 -100
  489. package/dist/runtime/waits.d.ts +125 -57
  490. package/dist/runtime/waits.js +431 -208
  491. package/dist/sandbox/job-ids.d.ts +10 -0
  492. package/dist/sandbox/job-ids.js +10 -0
  493. package/dist/sandbox/jobs.d.ts +41 -0
  494. package/dist/sandbox/jobs.js +113 -0
  495. package/dist/sandbox/leases.d.ts +39 -31
  496. package/dist/sandbox/leases.js +117 -257
  497. package/dist/sandbox/providers.d.ts +19 -0
  498. package/dist/sandbox/providers.js +38 -0
  499. package/dist/sandbox/sandbox.module.d.ts +8 -0
  500. package/dist/sandbox/sandbox.module.js +30 -0
  501. package/dist/sandbox/sandbox.service.d.ts +24 -29
  502. package/dist/sandbox/sandbox.service.js +106 -75
  503. package/dist/skills/catalog.d.ts +33 -20
  504. package/dist/skills/catalog.js +96 -53
  505. package/dist/skills/changes.controller.d.ts +4 -4
  506. package/dist/skills/changes.controller.js +15 -9
  507. package/dist/skills/changes.service.d.ts +28 -18
  508. package/dist/skills/changes.service.js +421 -364
  509. package/dist/skills/invocable.controller.d.ts +1 -1
  510. package/dist/skills/invocable.controller.js +8 -5
  511. package/dist/skills/invoke.d.ts +16 -15
  512. package/dist/skills/invoke.js +48 -17
  513. package/dist/skills/skills.controller.d.ts +1 -1
  514. package/dist/skills/skills.controller.js +11 -6
  515. package/dist/skills/skills.module.d.ts +6 -0
  516. package/dist/skills/skills.module.js +30 -0
  517. package/dist/skills/skills.service.d.ts +47 -30
  518. package/dist/skills/skills.service.js +221 -158
  519. package/dist/storage/job-ids.d.ts +6 -0
  520. package/dist/storage/job-ids.js +6 -0
  521. package/dist/storage/purge.d.ts +22 -7
  522. package/dist/storage/purge.js +55 -3
  523. package/dist/storage/storage.module.d.ts +6 -0
  524. package/dist/storage/storage.module.js +23 -0
  525. package/dist/storage/storage.service.d.ts +18 -4
  526. package/dist/storage/storage.service.js +44 -3
  527. package/dist/tools/approvals.controller.d.ts +1 -1
  528. package/dist/tools/approvals.controller.js +12 -8
  529. package/dist/tools/approvals.service.d.ts +27 -25
  530. package/dist/tools/approvals.service.js +324 -258
  531. package/dist/tools/breaker.d.ts +2 -2
  532. package/dist/tools/breaker.js +21 -3
  533. package/dist/tools/builtins/ask-user.d.ts +2 -2
  534. package/dist/tools/builtins/ask-user.js +1 -1
  535. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  536. package/dist/tools/builtins/builtin-tools.js +80 -0
  537. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  538. package/dist/tools/builtins/read-tool-output.js +1 -1
  539. package/dist/tools/builtins/sandbox/bash.js +2 -2
  540. package/dist/tools/builtins/sandbox/common.d.ts +2 -1
  541. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  542. package/dist/tools/builtins/sandbox/edit.js +1 -1
  543. package/dist/tools/builtins/sandbox/glob.js +2 -2
  544. package/dist/tools/builtins/sandbox/grep.js +2 -2
  545. package/dist/tools/builtins/sandbox/read.js +1 -1
  546. package/dist/tools/builtins/sandbox/write.js +1 -1
  547. package/dist/tools/builtins/skill-load.d.ts +3 -3
  548. package/dist/tools/builtins/skill-load.js +1 -1
  549. package/dist/tools/canonical-json.d.ts +6 -0
  550. package/dist/tools/canonical-json.js +16 -0
  551. package/dist/tools/connector-content.controller.d.ts +1 -1
  552. package/dist/tools/connector-content.controller.js +11 -6
  553. package/dist/tools/connector-content.d.ts +12 -15
  554. package/dist/tools/connector-content.js +53 -18
  555. package/dist/tools/connectors.controller.d.ts +1 -1
  556. package/dist/tools/connectors.controller.js +21 -10
  557. package/dist/tools/connectors.service.d.ts +31 -13
  558. package/dist/tools/connectors.service.js +434 -344
  559. package/dist/tools/credentials.d.ts +17 -20
  560. package/dist/tools/credentials.js +55 -34
  561. package/dist/tools/drift.d.ts +29 -41
  562. package/dist/tools/drift.js +111 -79
  563. package/dist/tools/info.d.ts +12 -9
  564. package/dist/tools/info.js +33 -7
  565. package/dist/tools/job-ids.d.ts +13 -0
  566. package/dist/tools/job-ids.js +15 -0
  567. package/dist/tools/jobs.d.ts +24 -0
  568. package/dist/tools/jobs.js +69 -0
  569. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  570. package/dist/tools/oauth/flow-paths.js +38 -0
  571. package/dist/tools/oauth/flow.d.ts +30 -30
  572. package/dist/tools/oauth/flow.js +109 -81
  573. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  574. package/dist/tools/oauth/oauth.controller.js +12 -9
  575. package/dist/tools/oauth/tokens.d.ts +11 -3
  576. package/dist/tools/oauth/tokens.js +15 -14
  577. package/dist/tools/outputs.d.ts +13 -4
  578. package/dist/tools/outputs.js +47 -3
  579. package/dist/tools/pipeline.d.ts +62 -46
  580. package/dist/tools/pipeline.js +145 -64
  581. package/dist/tools/policy.d.ts +2 -2
  582. package/dist/tools/questions.controller.d.ts +1 -1
  583. package/dist/tools/questions.controller.js +8 -5
  584. package/dist/tools/questions.service.d.ts +25 -24
  585. package/dist/tools/questions.service.js +201 -142
  586. package/dist/tools/registry.d.ts +30 -20
  587. package/dist/tools/registry.js +73 -37
  588. package/dist/tools/specs.d.ts +5 -4
  589. package/dist/tools/specs.js +3 -1
  590. package/dist/tools/tools.module.d.ts +10 -0
  591. package/dist/tools/tools.module.js +91 -0
  592. package/dist/ui/call-extension.d.ts +16 -0
  593. package/dist/ui/call-extension.js +38 -0
  594. package/dist/ui/embed-token.d.ts +9 -5
  595. package/dist/ui/embed-token.js +34 -6
  596. package/dist/ui/ui-stream.d.ts +22 -17
  597. package/dist/ui/ui-stream.js +72 -12
  598. package/dist/ui/ui.module.d.ts +7 -0
  599. package/dist/ui/ui.module.js +28 -0
  600. package/dist/ui/views.controller.d.ts +14 -12
  601. package/dist/ui/views.controller.js +32 -25
  602. package/dist/ui/views.d.ts +9 -57
  603. package/dist/ui/views.js +43 -45
  604. package/package.json +9 -2
  605. package/dist/http/health.controller.d.ts +0 -26
  606. package/dist/http/health.controller.js +0 -79
  607. package/dist/http/tokens.d.ts +0 -131
  608. package/dist/http/tokens.js +0 -131
  609. package/dist/http/zod.pipe.d.ts +0 -8
  610. package/dist/http/zod.pipe.js +0 -14
  611. package/dist/identity/rate-limit.d.ts +0 -55
  612. package/dist/identity/rate-limit.js +0 -121
  613. package/dist/sandbox/lifecycle.d.ts +0 -21
  614. package/dist/sandbox/lifecycle.js +0 -68
  615. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  616. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,13 +1,33 @@
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 { EXTENSION_POINTS, parseExtensionPoint, } from "@capybara-hq/plugin-sdk";
11
+ import { Inject, Injectable } from "@nestjs/common";
2
12
  import { assertItemInstallable, assertPluginSourcesInstallable, disabledPluginItems, pluginItemDisabled, } from "../catalog/requests.service.js";
3
13
  import { changedPaths, configFields, getPath, secretValues } from "../config/fields.js";
4
14
  import { createSecrets } from "../ctx/secrets.js";
5
15
  import { ApiError } from "../errors.js";
6
16
  import { audit } from "../identity/audit.js";
7
- import { lockOrgAndAuthorize } from "../orgs/org-lock.js";
17
+ import { afterCommit } from "../infra/database/after-commit.js";
18
+ import { KernelDb } from "../infra/database/kernel-db.js";
19
+ import { TransactionHost } from "../infra/database/transaction-host.js";
20
+ import { Transactional } from "../infra/database/transactional.decorator.js";
21
+ import { KernelEvents } from "../infra/events/kernel-events.js";
22
+ import { KERNEL_LOGGER, KEYRING } from "../infra/tokens.js";
23
+ import { OrgLock } from "../orgs/org-lock.js";
24
+ import { toIssues } from "./config-issues.js";
8
25
  import { configToJsonSchema } from "./config-json-schema.js";
9
26
  import { enabledExtensionsQuery, requiredExtensions } from "./enabled.js";
27
+ import { ExtensionHost } from "./host.js";
28
+ import { ExtensionInstalls } from "./installs.js";
10
29
  import { permissionGroups } from "./permission-view.js";
30
+ export { toIssues };
11
31
  /** 内核自己的 secrets 命名空间(plugin-sdk 把 `kernel` 列为保留插件名,插件不会与之相撞)。 */
12
32
  const SECRETS_NAMESPACE = "kernel";
13
33
  const secretKey = (plugin, path) => `plugin-config:${plugin}:${path}`;
@@ -48,37 +68,6 @@ function deleteDeep(obj, path) {
48
68
  if (isObj(node))
49
69
  delete node[segs[segs.length - 1]];
50
70
  }
51
- /** 由 issue 类型与结构字段生成说明;不用 zod 的 message(自定义消息可能拼入输入值)。 */
52
- function issueMessage(i) {
53
- switch (i.code) {
54
- case "invalid_type":
55
- return `expected ${i.expected}`;
56
- case "too_small":
57
- return `too small (minimum ${String(i.minimum)})`;
58
- case "too_big":
59
- return `too big (maximum ${String(i.maximum)})`;
60
- case "invalid_format":
61
- return `invalid ${i.format}`;
62
- case "not_multiple_of":
63
- return `not a multiple of ${String(i.divisor)}`;
64
- case "unrecognized_keys":
65
- return "unrecognized keys";
66
- case "invalid_union":
67
- return "no union member matched";
68
- case "invalid_key":
69
- return "invalid key";
70
- case "invalid_element":
71
- return "invalid element";
72
- default:
73
- return "invalid value";
74
- }
75
- }
76
- export function toIssues(error) {
77
- return error.issues.map((i) => ({
78
- path: i.path.map(String).join("."),
79
- message: issueMessage(i),
80
- }));
81
- }
82
71
  /** 插件组织级 schema 中标记 secret 的叶子点路径(对象路径之外的 secret 已在插件加载时拒绝)。 */
83
72
  function secretPaths(schema) {
84
73
  return configFields(schema)
@@ -92,69 +81,94 @@ function secretPaths(schema) {
92
81
  * written in the same transaction as the config row.
93
82
  * No in-process state: every call reads PG, safe with multiple replicas.
94
83
  */
95
- export class OrgExtensionConfigs {
96
- db;
84
+ let OrgExtensionConfigs = class OrgExtensionConfigs {
85
+ kdb;
86
+ txHost;
97
87
  keyring;
98
88
  host;
99
- hooks;
100
- constructor(db, keyring, host, hooks = {}) {
101
- this.db = db;
89
+ orgLock;
90
+ installs;
91
+ events;
92
+ log;
93
+ /** Test seam only: a deterministic interleaving point after the config rows are read, before the secrets. */
94
+ afterConfigRowRead;
95
+ constructor(kdb, txHost, keyring, host,
96
+ /** The org row lock (orgs/org-lock.ts): joins the transaction. */
97
+ orgLock,
98
+ /** Install records (any desired state): the ones not loaded are listed unavailable (T14). */
99
+ installs,
100
+ /** `extension.org-disabled` after a disable commits (channel connections drop at once). */
101
+ events,
102
+ /** Secret values handled (written or decrypted) are masked in the logs after the commit. */
103
+ log) {
104
+ this.kdb = kdb;
105
+ this.txHost = txHost;
102
106
  this.keyring = keyring;
103
107
  this.host = host;
104
- this.hooks = hooks;
108
+ this.orgLock = orgLock;
109
+ this.installs = installs;
110
+ this.events = events;
111
+ this.log = log;
105
112
  }
106
- /** 把一份组织配置里的密钥值交给 onSecrets(无回调或无密钥时无操作);调用方须在事务提交后调用。 */
113
+ /** The kernel-schema handle of the current transaction. */
114
+ get db() {
115
+ return this.kdb.db;
116
+ }
117
+ /** 把一份组织配置里的密钥值登记到日志打码(无密钥时无操作);调用方须在事务提交后调用。 */
107
118
  reportSecrets(found) {
108
- if (!found || !this.hooks.onSecrets)
119
+ if (!found)
109
120
  return;
110
121
  const values = secretValues(found.schema, found.config);
111
122
  if (values.length > 0)
112
- this.hooks.onSecrets(values);
123
+ this.log.addOrgSecrets(values);
113
124
  }
114
- /** `REPEATABLE READ` 只读事务:配置行与密钥来自同一个快照,不会读到跨两次提交的混合状态。 */
115
- snapshot(fn) {
116
- return this.db
117
- .transaction()
118
- .setIsolationLevel("repeatable read")
119
- .setAccessMode("read only")
120
- .execute(fn);
125
+ /** After a write committed: a disabled extension's channel connections drop at once. */
126
+ async afterPut(orgId, plugin, enabled) {
127
+ if (!enabled)
128
+ await this.events.emit("extension.org-disabled", { orgId, plugin });
121
129
  }
122
130
  /**
123
131
  * 列出所有已加载插件在该组织下的状态(按加载顺序);无记录时 enabled=false、config=null。
124
132
  * 之后是已安装但此刻没加载的插件(部署上停用等),`available: false`,按名字排序。
125
133
  */
126
134
  async list(orgId) {
127
- const installed = (await this.hooks.installed?.()) ?? [];
128
- return this.snapshot(async (t) => {
129
- const rows = await t
130
- .selectFrom("extension_org_configs")
131
- .select(["plugin", "enabled", "config"])
132
- .where("org_id", "=", orgId)
133
- .execute();
134
- await this.hooks.afterConfigRowRead?.();
135
- const setKeys = await this.setSecretKeys(t, orgId);
136
- // Required bootstrap plugins are listed enabled (no org config row needed, spec §7)
137
- const required = await requiredExtensions(t);
138
- const loaded = this.host.manifests();
139
- const views = loaded.map((m) => this.view(m, rows.find((r) => r.plugin === m.name), setKeys, required.has(m.name)));
140
- const names = new Set(loaded.map((m) => m.name));
141
- const unavailable = installed
142
- .filter((i) => !names.has(i.name))
143
- .sort((a, b) => a.name.localeCompare(b.name))
144
- .map((i) => ({
145
- plugin: i.name,
146
- version: i.version,
147
- enabled: required.has(i.name) || (rows.find((r) => r.plugin === i.name)?.enabled ?? false),
148
- configurable: false,
149
- config: null,
150
- secrets: [],
151
- permissions: [],
152
- orgConfigSchema: null,
153
- available: false,
154
- required: required.has(i.name),
155
- }));
156
- return [...views, ...unavailable];
157
- });
135
+ const installed = (await this.installs.list()).map((r) => ({
136
+ name: r.name,
137
+ version: r.version,
138
+ }));
139
+ return this.listSnapshot(orgId, installed);
140
+ }
141
+ /** `REPEATABLE READ` read-only: the config rows and the secrets come from one snapshot. */
142
+ async listSnapshot(orgId, installed) {
143
+ const t = this.db;
144
+ const rows = await t
145
+ .selectFrom("extension_org_configs")
146
+ .select(["plugin", "enabled", "config"])
147
+ .where("org_id", "=", orgId)
148
+ .execute();
149
+ await this.afterConfigRowRead?.();
150
+ const setKeys = await this.setSecretKeys(t, orgId);
151
+ // Required bootstrap plugins are listed enabled (no org config row needed, spec §7)
152
+ const required = await requiredExtensions(t);
153
+ const loaded = this.host.manifests();
154
+ const views = loaded.map((m) => this.view(m, rows.find((r) => r.plugin === m.name), setKeys, required.has(m.name)));
155
+ const names = new Set(loaded.map((m) => m.name));
156
+ const unavailable = installed
157
+ .filter((i) => !names.has(i.name))
158
+ .sort((a, b) => a.name.localeCompare(b.name))
159
+ .map((i) => ({
160
+ plugin: i.name,
161
+ version: i.version,
162
+ enabled: required.has(i.name) || (rows.find((r) => r.plugin === i.name)?.enabled ?? false),
163
+ configurable: false,
164
+ config: null,
165
+ secrets: [],
166
+ permissions: [],
167
+ orgConfigSchema: null,
168
+ available: false,
169
+ required: required.has(i.name),
170
+ }));
171
+ return [...views, ...unavailable];
158
172
  }
159
173
  /**
160
174
  * Writes enablement and / or config. The actor's role is re-read under the org row lock (needs
@@ -173,141 +187,145 @@ export class OrgExtensionConfigs {
173
187
  if (input.config !== undefined && !schema) {
174
188
  throw new ApiError("extension.no_org_config", `Extension ${plugin} has no organization config`);
175
189
  }
190
+ return this.write(orgId, plugin, manifest, input, actorAccountId, actorTokenId, opts);
191
+ }
192
+ async write(orgId, plugin, manifest, input, actorAccountId, actorTokenId, opts) {
193
+ const schema = manifest.config?.org;
176
194
  let seen;
177
- const view = await this.db.transaction().execute(async (t) => {
178
- await lockOrgAndAuthorize(t, orgId, actorAccountId, "org.extensions.manage");
179
- const row = await t
180
- .selectFrom("extension_org_configs")
181
- .select(["enabled", "config"])
182
- .where("plugin", "=", plugin)
183
- .where("org_id", "=", orgId)
184
- .executeTakeFirst();
185
- const required = (await requiredExtensions(t)).has(plugin);
186
- if (required && input.enabled === false)
187
- throw requiredError(plugin);
188
- if (opts.ifDisabled && (row?.enabled === true || required)) {
189
- opts.ifDisabled.skipped = true;
190
- await opts.inTransaction?.(t, true);
191
- return this.view(manifest, row, await this.setSecretKeys(t, orgId), required);
192
- }
193
- // A required plugin is enabled whatever the row said (it may predate `required`)
194
- const enabled = required || (input.enabled ?? row?.enabled ?? false);
195
- // 新启用来自企业目录的插件:按条目策略与授予复核(C22;已启用的不受影响)
196
- if (input.enabled === true && row?.enabled !== true && !required) {
197
- // 插件自己的条目 disabled 是总开关,任何途径都不能新启用(裁决 M-5)
198
- const killed = await disabledPluginItems(t, [plugin]);
199
- if (killed.length > 0)
200
- throw pluginItemDisabled(killed);
201
- // 经某个条目安装:只看该条目(应用里的插件按应用条目,C22);直接启用:全部来源里最严格的生效
202
- if (opts.viaItem !== undefined) {
203
- await assertItemInstallable(t, orgId, opts.viaItem, opts.approvedBy ?? opts.viaItem);
204
- }
205
- else
206
- await assertPluginSourcesInstallable(t, orgId, plugin);
195
+ const t = this.db;
196
+ await this.orgLock.lockAndAuthorize(orgId, actorAccountId, "org.extensions.manage");
197
+ const row = await t
198
+ .selectFrom("extension_org_configs")
199
+ .select(["enabled", "config"])
200
+ .where("plugin", "=", plugin)
201
+ .where("org_id", "=", orgId)
202
+ .executeTakeFirst();
203
+ const required = (await requiredExtensions(t)).has(plugin);
204
+ if (required && input.enabled === false)
205
+ throw requiredError(plugin);
206
+ if (opts.ifDisabled && (row?.enabled === true || required)) {
207
+ opts.ifDisabled.skipped = true;
208
+ return this.view(manifest, row, await this.setSecretKeys(t, orgId), required);
209
+ }
210
+ // A required plugin is enabled whatever the row said (it may predate `required`)
211
+ const enabled = required || (input.enabled ?? row?.enabled ?? false);
212
+ // 新启用来自企业目录的插件:按条目策略与授予复核(C22;已启用的不受影响)
213
+ if (input.enabled === true && row?.enabled !== true && !required) {
214
+ // 插件自己的条目 disabled 是总开关,任何途径都不能新启用(裁决 M-5)
215
+ const killed = await disabledPluginItems(t, [plugin]);
216
+ if (killed.length > 0)
217
+ throw pluginItemDisabled(killed);
218
+ // 经某个条目安装:只看该条目(应用里的插件按应用条目,C22);直接启用:全部来源里最严格的生效
219
+ if (opts.viaItem !== undefined) {
220
+ await assertItemInstallable(t, orgId, opts.viaItem, opts.approvedBy ?? opts.viaItem);
207
221
  }
208
- if (input.enabled === true)
209
- await this.assertDependenciesEnabled(t, orgId, manifest);
210
- else if (input.enabled === false && !input.force) {
211
- await this.assertNoEnabledDependents(t, orgId, manifest);
222
+ else
223
+ await assertPluginSourcesInstallable(t, orgId, plugin);
224
+ }
225
+ if (input.enabled === true)
226
+ await this.assertDependenciesEnabled(t, orgId, manifest);
227
+ else if (input.enabled === false && !input.force) {
228
+ await this.assertNoEnabledDependents(t, orgId, manifest);
229
+ }
230
+ let plain = row?.config ?? null;
231
+ let changed = [];
232
+ if (schema) {
233
+ const secrets = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
234
+ const paths = secretPaths(schema);
235
+ const before = structuredClone(plain ?? {});
236
+ for (const p of paths) {
237
+ const v = await secrets.get(orgId, secretKey(plugin, p));
238
+ if (v !== null)
239
+ setDeep(before, p, JSON.parse(v));
212
240
  }
213
- let plain = row?.config ?? null;
214
- let changed = [];
215
- if (schema) {
216
- const secrets = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
217
- const paths = secretPaths(schema);
218
- const before = structuredClone(plain ?? {});
241
+ let next;
242
+ if (input.config !== undefined) {
243
+ next = structuredClone(input.config);
219
244
  for (const p of paths) {
220
- const v = await secrets.get(orgId, secretKey(plugin, p));
221
- if (v !== null)
222
- setDeep(before, p, JSON.parse(v));
223
- }
224
- let next;
225
- if (input.config !== undefined) {
226
- next = structuredClone(input.config);
227
- for (const p of paths) {
228
- const v = getPath(input.config, p);
229
- if (v === null)
230
- deleteDeep(next, p);
231
- else if (v === undefined) {
232
- const old = getPath(before, p);
233
- if (old !== undefined)
234
- setDeep(next, p, old);
235
- }
236
- }
237
- }
238
- else {
239
- next = before;
240
- }
241
- if (input.config !== undefined || enabled) {
242
- const r = schema.safeParse(next);
243
- if (!r.success) {
244
- throw new ApiError("extension.config_invalid", `Invalid organization config for extension ${plugin}`, toIssues(r.error));
245
+ const v = getPath(input.config, p);
246
+ if (v === null)
247
+ deleteDeep(next, p);
248
+ else if (v === undefined) {
249
+ const old = getPath(before, p);
250
+ if (old !== undefined)
251
+ setDeep(next, p, old);
245
252
  }
246
- next = r.data;
247
253
  }
248
- seen = { schema, config: next };
249
- if (input.config !== undefined) {
250
- changed = changedPaths(schema, before, next);
251
- plain = structuredClone(next);
252
- for (const p of paths) {
253
- const v = getPath(next, p);
254
- deleteDeep(plain, p);
255
- if (v === undefined)
256
- await secrets.delete(orgId, secretKey(plugin, p));
257
- else
258
- await secrets.set(orgId, secretKey(plugin, p), JSON.stringify(v));
259
- }
254
+ }
255
+ else {
256
+ next = before;
257
+ }
258
+ if (input.config !== undefined || enabled) {
259
+ const r = schema.safeParse(next);
260
+ if (!r.success) {
261
+ throw new ApiError("extension.config_invalid", `Invalid organization config for extension ${plugin}`, toIssues(r.error));
260
262
  }
263
+ next = r.data;
261
264
  }
262
- // 当前 schema 中已不存在的密钥路径:同一事务内清掉遗留的密文行
263
- const live = new Set((schema ? secretPaths(schema) : []).map((p) => secretKey(plugin, p)));
264
- const prefix = secretKey(plugin, "");
265
- const cleanup = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
266
- for (const key of await this.setSecretKeys(t, orgId)) {
267
- if (key.startsWith(prefix) && !live.has(key))
268
- await cleanup.delete(orgId, key);
265
+ seen = { schema, config: next };
266
+ if (input.config !== undefined) {
267
+ changed = changedPaths(schema, before, next);
268
+ plain = structuredClone(next);
269
+ for (const p of paths) {
270
+ const v = getPath(next, p);
271
+ deleteDeep(plain, p);
272
+ if (v === undefined)
273
+ await secrets.delete(orgId, secretKey(plugin, p));
274
+ else
275
+ await secrets.set(orgId, secretKey(plugin, p), JSON.stringify(v));
276
+ }
269
277
  }
270
- await t
271
- .insertInto("extension_org_configs")
272
- .values({
273
- plugin,
274
- org_id: orgId,
275
- enabled,
276
- config: plain === null ? null : JSON.stringify(plain),
277
- updated_by: actorAccountId,
278
- })
279
- .onConflict((oc) => oc.columns(["plugin", "org_id"]).doUpdateSet({
278
+ }
279
+ // 当前 schema 中已不存在的密钥路径:同一事务内清掉遗留的密文行
280
+ const live = new Set((schema ? secretPaths(schema) : []).map((p) => secretKey(plugin, p)));
281
+ const prefix = secretKey(plugin, "");
282
+ const cleanup = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
283
+ for (const key of await this.setSecretKeys(t, orgId)) {
284
+ if (key.startsWith(prefix) && !live.has(key))
285
+ await cleanup.delete(orgId, key);
286
+ }
287
+ await t
288
+ .insertInto("extension_org_configs")
289
+ .values({
290
+ plugin,
291
+ org_id: orgId,
292
+ enabled,
293
+ config: plain === null ? null : JSON.stringify(plain),
294
+ updated_by: actorAccountId,
295
+ })
296
+ .onConflict((oc) => oc.columns(["plugin", "org_id"]).doUpdateSet({
297
+ enabled,
298
+ config: plain === null ? null : JSON.stringify(plain),
299
+ updated_by: actorAccountId,
300
+ updated_at: new Date(),
301
+ }))
302
+ .execute();
303
+ await audit(t, {
304
+ actorAccountId,
305
+ ...(actorTokenId !== undefined && { actorTokenId }),
306
+ orgId,
307
+ action: "org.plugin_config.updated",
308
+ target: plugin,
309
+ detail: {
280
310
  enabled,
281
- config: plain === null ? null : JSON.stringify(plain),
282
- updated_by: actorAccountId,
283
- updated_at: new Date(),
284
- }))
285
- .execute();
286
- await audit(t, {
287
- actorAccountId,
288
- ...(actorTokenId !== undefined && { actorTokenId }),
289
- orgId,
290
- action: "org.plugin_config.updated",
291
- target: plugin,
292
- detail: {
293
- enabled,
294
- changedPaths: changed,
295
- ...(opts.viaItem !== undefined && { catalogItemId: opts.viaItem }),
296
- },
297
- });
298
- await opts.inTransaction?.(t, false);
299
- // 在同一事务里读回,返回值就是刚提交的状态
300
- const saved = await t
301
- .selectFrom("extension_org_configs")
302
- .select(["plugin", "enabled", "config"])
303
- .where("plugin", "=", plugin)
304
- .where("org_id", "=", orgId)
305
- .executeTakeFirst();
306
- return this.view(manifest, saved, await this.setSecretKeys(t, orgId), required);
311
+ changedPaths: changed,
312
+ ...(opts.viaItem !== undefined && { catalogItemId: opts.viaItem }),
313
+ },
314
+ });
315
+ // 在同一事务里读回,返回值就是刚提交的状态
316
+ const saved = await t
317
+ .selectFrom("extension_org_configs")
318
+ .select(["plugin", "enabled", "config"])
319
+ .where("plugin", "=", plugin)
320
+ .where("org_id", "=", orgId)
321
+ .executeTakeFirst();
322
+ const view = this.view(manifest, saved, await this.setSecretKeys(t, orgId), required);
323
+ // Only once the root transaction committed (an outer caller's too): a rolled-back write
324
+ // registers no secrets and disconnects nothing
325
+ afterCommit(async () => {
326
+ this.reportSecrets(seen);
327
+ await this.afterPut(orgId, plugin, view.enabled);
307
328
  });
308
- // 事务已提交:回滚的写入不会走到这里
309
- this.reportSecrets(seen);
310
- await this.hooks.afterPut?.(orgId, plugin, view.enabled);
311
329
  return view;
312
330
  }
313
331
  /**
@@ -319,30 +337,33 @@ export class OrgExtensionConfigs {
319
337
  */
320
338
  async get(orgId, plugin) {
321
339
  const manifest = this.manifest(plugin);
322
- const result = await this.snapshot(async (t) => {
323
- const row = await t
324
- .selectFrom("extension_org_configs")
325
- .select(["enabled", "config"])
326
- .where("plugin", "=", plugin)
327
- .where("org_id", "=", orgId)
328
- .executeTakeFirst();
329
- await this.hooks.afterConfigRowRead?.();
330
- const required = (await requiredExtensions(t)).has(plugin);
331
- if (!row && !required)
332
- return undefined;
333
- const enabled = required || row?.enabled === true;
334
- const schema = manifest.config?.org;
335
- // 已停用的插件不会被实例化:不校验(可能是升级前存下的旧配置),也不解密密钥
336
- if (!schema || !enabled)
337
- return { enabled, config: null };
338
- return this.decode(t, orgId, plugin, schema, row?.config ?? {});
339
- });
340
+ const result = await this.getSnapshot(orgId, plugin, manifest);
340
341
  // 只读快照已结束;config 非 null 意味着插件有 org schema 且已解密
341
342
  const schema = manifest.config?.org;
342
343
  if (schema && result?.config != null)
343
344
  this.reportSecrets({ schema, config: result.config });
344
345
  return result;
345
346
  }
347
+ /** `REPEATABLE READ` read-only: the config row and the secrets come from one snapshot. */
348
+ async getSnapshot(orgId, plugin, manifest) {
349
+ const t = this.db;
350
+ const row = await t
351
+ .selectFrom("extension_org_configs")
352
+ .select(["enabled", "config"])
353
+ .where("plugin", "=", plugin)
354
+ .where("org_id", "=", orgId)
355
+ .executeTakeFirst();
356
+ await this.afterConfigRowRead?.();
357
+ const required = (await requiredExtensions(t)).has(plugin);
358
+ if (!row && !required)
359
+ return undefined;
360
+ const enabled = required || row?.enabled === true;
361
+ const schema = manifest.config?.org;
362
+ // 已停用的插件不会被实例化:不校验(可能是升级前存下的旧配置),也不解密密钥
363
+ if (!schema || !enabled)
364
+ return { enabled, config: null };
365
+ return this.decode(t, orgId, plugin, schema, row?.config ?? {});
366
+ }
346
367
  async decode(t, orgId, plugin, schema, stored) {
347
368
  const full = structuredClone(stored);
348
369
  const secrets = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
@@ -362,9 +383,10 @@ export class OrgExtensionConfigs {
362
383
  }
363
384
  /**
364
385
  * 该组织里已启用、且所 requires 的按组织启用的能力只剩这个插件提供的插件(停用它会让它们失去依赖)。
365
- * 在调用方事务里读(应用卸载 / 回滚前判断是否保留)。
386
+ * 在调用方事务里读(应用卸载 / 回滚前判断是否保留;`mandatory`: the caller holds the org row lock).
366
387
  */
367
- async enabledDependents(t, orgId, plugin) {
388
+ async enabledDependents(orgId, plugin) {
389
+ const t = this.db;
368
390
  const manifest = this.host.manifests().find((m) => m.name === plugin);
369
391
  if (!manifest)
370
392
  return [];
@@ -391,7 +413,8 @@ export class OrgExtensionConfigs {
391
413
  * 在调用方事务里停用(应用安装的回滚与卸载用;调用方已锁组织行并复核角色):不检查依赖方,配置保留,
392
414
  * 审计 `org.plugin_config.updated`(带 reason)。提交后调用方须再调 {@link afterDisable}。
393
415
  */
394
- async disableIn(t, orgId, plugin, actorAccountId, reason) {
416
+ async disableIn(orgId, plugin, actorAccountId, reason) {
417
+ const t = this.db;
395
418
  // A required bootstrap plugin stays enabled in every org
396
419
  if ((await requiredExtensions(t)).has(plugin))
397
420
  return false;
@@ -416,7 +439,7 @@ export class OrgExtensionConfigs {
416
439
  }
417
440
  /** {@link disableIn} 的事务提交之后:通知停用(断开该插件的渠道连接等)。 */
418
441
  async afterDisable(orgId, plugin) {
419
- await this.hooks.afterPut?.(orgId, plugin, false);
442
+ await this.afterPut(orgId, plugin, false);
420
443
  }
421
444
  /** 该组织已启用的插件名(只含当前已加载的插件;待批准的不算;必需的引导插件始终算启用)。 */
422
445
  async enabledSet(t, orgId) {
@@ -516,5 +539,40 @@ export class OrgExtensionConfigs {
516
539
  .execute();
517
540
  return new Set(rows.map((r) => r.key));
518
541
  }
519
- }
542
+ };
543
+ __decorate([
544
+ Transactional({
545
+ propagation: "requires_new",
546
+ isolationLevel: "repeatable read",
547
+ accessMode: "read only",
548
+ })
549
+ ], OrgExtensionConfigs.prototype, "listSnapshot", null);
550
+ __decorate([
551
+ Transactional()
552
+ ], OrgExtensionConfigs.prototype, "write", null);
553
+ __decorate([
554
+ Transactional({
555
+ propagation: "requires_new",
556
+ isolationLevel: "repeatable read",
557
+ accessMode: "read only",
558
+ })
559
+ ], OrgExtensionConfigs.prototype, "getSnapshot", null);
560
+ __decorate([
561
+ Transactional({ propagation: "mandatory" })
562
+ ], OrgExtensionConfigs.prototype, "enabledDependents", null);
563
+ __decorate([
564
+ Transactional({ propagation: "mandatory" })
565
+ ], OrgExtensionConfigs.prototype, "disableIn", null);
566
+ OrgExtensionConfigs = __decorate([
567
+ Injectable(),
568
+ __param(0, Inject(KernelDb)),
569
+ __param(1, Inject(TransactionHost)),
570
+ __param(2, Inject(KEYRING)),
571
+ __param(3, Inject(ExtensionHost)),
572
+ __param(4, Inject(OrgLock)),
573
+ __param(5, Inject(ExtensionInstalls)),
574
+ __param(6, Inject(KernelEvents)),
575
+ __param(7, Inject(KERNEL_LOGGER))
576
+ ], OrgExtensionConfigs);
577
+ export { OrgExtensionConfigs };
520
578
  const requiredError = (plugin) => new ApiError("extension.required", `Extension ${plugin} is required by this deployment (a bootstrap plugin): it is enabled in every organization and cannot be disabled`);