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

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 (1039) hide show
  1. package/bootstrap.json +85 -5
  2. package/dist/admin/admin-agents.controller.d.ts +28 -0
  3. package/dist/admin/admin-agents.controller.js +79 -0
  4. package/dist/admin/admin-connectors.controller.d.ts +29 -0
  5. package/dist/admin/admin-connectors.controller.js +79 -0
  6. package/dist/admin/admin-items.schemas.d.ts +42 -0
  7. package/dist/admin/admin-items.schemas.js +48 -0
  8. package/dist/admin/admin.controller.d.ts +52 -80
  9. package/dist/admin/admin.controller.js +112 -81
  10. package/dist/admin/admin.module.d.ts +4 -1
  11. package/dist/admin/admin.module.js +50 -4
  12. package/dist/admin/admin.schemas.d.ts +69 -0
  13. package/dist/admin/admin.schemas.js +53 -0
  14. package/dist/admin/audit.controller.d.ts +14 -0
  15. package/dist/admin/audit.controller.js +42 -0
  16. package/dist/admin/audit.schemas.d.ts +8 -0
  17. package/dist/admin/audit.schemas.js +17 -0
  18. package/dist/admin/extensions.controller.d.ts +34 -3
  19. package/dist/admin/extensions.controller.js +66 -8
  20. package/dist/admin/extensions.schemas.d.ts +7 -0
  21. package/dist/admin/extensions.schemas.js +10 -0
  22. package/dist/admin/health.service.d.ts +104 -0
  23. package/dist/admin/health.service.js +246 -0
  24. package/dist/admin/limit-defaults.d.ts +20 -0
  25. package/dist/admin/limit-defaults.js +10 -0
  26. package/dist/admin/overview.controller.d.ts +31 -0
  27. package/dist/admin/overview.controller.js +78 -0
  28. package/dist/admin/overview.schemas.d.ts +8 -0
  29. package/dist/admin/overview.schemas.js +13 -0
  30. package/dist/admin/overview.service.d.ts +112 -0
  31. package/dist/admin/overview.service.js +223 -0
  32. package/dist/admin/platform-audit.service.d.ts +41 -0
  33. package/dist/admin/platform-audit.service.js +70 -0
  34. package/dist/admin/setup-lock.d.ts +1 -1
  35. package/dist/admin/setup-lock.js +1 -1
  36. package/dist/admin/setup.controller.d.ts +1 -1
  37. package/dist/admin/setup.controller.js +1 -1
  38. package/dist/admin/setup.service.d.ts +4 -4
  39. package/dist/admin/setup.service.js +8 -8
  40. package/dist/admin/usage.service.d.ts +149 -0
  41. package/dist/admin/usage.service.js +321 -0
  42. package/dist/agents/admin-agents.d.ts +92 -0
  43. package/dist/agents/admin-agents.js +170 -0
  44. package/dist/agents/agent-lookup.d.ts +24 -0
  45. package/dist/agents/agent-lookup.js +46 -2
  46. package/dist/agents/agent-profile.service.d.ts +31 -0
  47. package/dist/agents/agent-profile.service.js +122 -0
  48. package/dist/agents/agents.controller.d.ts +53 -168
  49. package/dist/agents/agents.controller.js +163 -34
  50. package/dist/agents/agents.module.d.ts +6 -2
  51. package/dist/agents/agents.module.js +41 -7
  52. package/dist/agents/agents.schemas.d.ts +392 -0
  53. package/dist/agents/agents.schemas.js +126 -0
  54. package/dist/agents/agents.service.d.ts +121 -36
  55. package/dist/agents/agents.service.js +411 -121
  56. package/dist/agents/definition.d.ts +142 -21
  57. package/dist/agents/definition.js +389 -43
  58. package/dist/agents/from-template.d.ts +106 -0
  59. package/dist/agents/from-template.js +680 -0
  60. package/dist/agents/from-template.service.d.ts +72 -0
  61. package/dist/agents/from-template.service.js +178 -0
  62. package/dist/agents/instruction-files.d.ts +60 -0
  63. package/dist/agents/instruction-files.js +111 -0
  64. package/dist/agents/models.controller.d.ts +44 -6
  65. package/dist/agents/models.controller.js +84 -8
  66. package/dist/agents/org-templates.d.ts +186 -0
  67. package/dist/agents/org-templates.js +876 -0
  68. package/dist/agents/pending-connector-requests.d.ts +79 -0
  69. package/dist/agents/pending-connector-requests.js +215 -0
  70. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  71. package/dist/agents/pending-connectors.controller.js +91 -0
  72. package/dist/agents/pending-connectors.service.d.ts +62 -0
  73. package/dist/agents/pending-connectors.service.js +282 -0
  74. package/dist/agents/profile.d.ts +114 -0
  75. package/dist/agents/profile.js +55 -0
  76. package/dist/agents/readiness.controller.d.ts +26 -0
  77. package/dist/agents/readiness.controller.js +56 -0
  78. package/dist/agents/templates.controller.d.ts +77 -5
  79. package/dist/agents/templates.controller.js +153 -7
  80. package/dist/agents/templates.d.ts +127 -23
  81. package/dist/agents/templates.js +482 -44
  82. package/dist/agents/templates.schemas.d.ts +20 -0
  83. package/dist/agents/templates.schemas.js +45 -0
  84. package/dist/background/background.controller.d.ts +38 -0
  85. package/dist/background/background.controller.js +88 -0
  86. package/dist/background/background.module.d.ts +10 -0
  87. package/dist/background/background.module.js +39 -0
  88. package/dist/background/background.schemas.d.ts +10 -0
  89. package/dist/background/background.schemas.js +16 -0
  90. package/dist/background/finish.d.ts +44 -0
  91. package/dist/background/finish.js +95 -0
  92. package/dist/background/launch-lock.d.ts +15 -0
  93. package/dist/background/launch-lock.js +40 -0
  94. package/dist/background/launch.d.ts +42 -0
  95. package/dist/background/launch.js +77 -0
  96. package/dist/background/poll.job.d.ts +56 -0
  97. package/dist/background/poll.job.js +195 -0
  98. package/dist/background/render.d.ts +23 -0
  99. package/dist/background/render.js +48 -0
  100. package/dist/background/session.d.ts +48 -0
  101. package/dist/background/session.js +80 -0
  102. package/dist/background/status.d.ts +35 -0
  103. package/dist/background/status.js +57 -0
  104. package/dist/background/stop.d.ts +68 -0
  105. package/dist/background/stop.js +244 -0
  106. package/dist/background/store.d.ts +167 -0
  107. package/dist/background/store.js +361 -0
  108. package/dist/background/store.module.d.ts +6 -0
  109. package/dist/background/store.module.js +22 -0
  110. package/dist/background/tasks.service.d.ts +109 -0
  111. package/dist/background/tasks.service.js +271 -0
  112. package/dist/background/wake-rules.d.ts +66 -0
  113. package/dist/background/wake-rules.js +113 -0
  114. package/dist/background/wake.d.ts +30 -0
  115. package/dist/background/wake.js +63 -0
  116. package/dist/catalog/admin-catalog.controller.d.ts +136 -52
  117. package/dist/catalog/admin-catalog.controller.js +275 -65
  118. package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
  119. package/dist/catalog/admin-catalog.schemas.js +99 -0
  120. package/dist/catalog/appearance.schemas.d.ts +10 -0
  121. package/dist/catalog/appearance.schemas.js +20 -0
  122. package/dist/catalog/appearance.service.d.ts +105 -0
  123. package/dist/catalog/appearance.service.js +306 -0
  124. package/dist/catalog/catalog-content.d.ts +122 -35
  125. package/dist/catalog/catalog-content.js +122 -14
  126. package/dist/catalog/catalog-files.d.ts +42 -0
  127. package/dist/catalog/catalog-files.js +89 -0
  128. package/dist/catalog/catalog-import.module.d.ts +7 -0
  129. package/dist/catalog/catalog-import.module.js +63 -0
  130. package/dist/catalog/catalog-items.d.ts +122 -7
  131. package/dist/catalog/catalog-items.js +301 -13
  132. package/dist/catalog/catalog-scope.service.d.ts +293 -0
  133. package/dist/catalog/catalog-scope.service.js +1236 -0
  134. package/dist/catalog/catalog.module.d.ts +7 -9
  135. package/dist/catalog/catalog.module.js +47 -31
  136. package/dist/catalog/catalog.service.d.ts +122 -31
  137. package/dist/catalog/catalog.service.js +177 -105
  138. package/dist/catalog/claude/agents.js +15 -10
  139. package/dist/catalog/claude/translate.js +3 -0
  140. package/dist/catalog/cli.d.ts +11 -1
  141. package/dist/catalog/cli.js +29 -1
  142. package/dist/catalog/component-promotion.d.ts +96 -0
  143. package/dist/catalog/component-promotion.js +395 -0
  144. package/dist/catalog/component-scope.controller.d.ts +102 -0
  145. package/dist/catalog/component-scope.controller.js +257 -0
  146. package/dist/catalog/component-scope.schemas.d.ts +118 -0
  147. package/dist/catalog/component-scope.schemas.js +97 -0
  148. package/dist/catalog/component-scope.service.d.ts +394 -0
  149. package/dist/catalog/component-scope.service.js +1133 -0
  150. package/dist/catalog/component-state.d.ts +207 -0
  151. package/dist/catalog/component-state.js +484 -0
  152. package/dist/catalog/git-source.d.ts +9 -1
  153. package/dist/catalog/git-source.js +29 -2
  154. package/dist/catalog/job-ids.d.ts +30 -0
  155. package/dist/catalog/job-ids.js +25 -0
  156. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  157. package/dist/catalog/marketplace-icons.d.ts +64 -0
  158. package/dist/catalog/marketplace-icons.js +131 -0
  159. package/dist/catalog/marketplaces.controller.d.ts +50 -41
  160. package/dist/catalog/marketplaces.controller.js +130 -46
  161. package/dist/catalog/marketplaces.schemas.d.ts +48 -0
  162. package/dist/catalog/marketplaces.schemas.js +53 -0
  163. package/dist/catalog/marketplaces.service.d.ts +110 -17
  164. package/dist/catalog/marketplaces.service.js +337 -29
  165. package/dist/catalog/org-catalog.controller.d.ts +114 -62
  166. package/dist/catalog/org-catalog.controller.js +191 -98
  167. package/dist/catalog/org-catalog.schemas.d.ts +104 -0
  168. package/dist/catalog/org-catalog.schemas.js +107 -0
  169. package/dist/catalog/org-catalog.service.d.ts +72 -33
  170. package/dist/catalog/org-catalog.service.js +367 -158
  171. package/dist/catalog/org-extension-switch.d.ts +41 -0
  172. package/dist/catalog/org-extension-switch.js +115 -0
  173. package/dist/catalog/org-extension.controller.d.ts +133 -0
  174. package/dist/catalog/org-extension.controller.js +313 -0
  175. package/dist/catalog/org-extension.schemas.d.ts +15 -0
  176. package/dist/catalog/org-extension.schemas.js +22 -0
  177. package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
  178. package/dist/catalog/org-plugin-uploads.controller.js +200 -0
  179. package/dist/catalog/org-plugin-uploads.d.ts +71 -0
  180. package/dist/catalog/org-plugin-uploads.js +122 -0
  181. package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
  182. package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
  183. package/dist/catalog/owned-items.d.ts +188 -0
  184. package/dist/catalog/owned-items.js +808 -0
  185. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  186. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  187. package/dist/catalog/ownership.d.ts +172 -0
  188. package/dist/catalog/ownership.js +326 -0
  189. package/dist/catalog/platform-components.d.ts +243 -0
  190. package/dist/catalog/platform-components.js +872 -0
  191. package/dist/catalog/platform-migration.d.ts +115 -0
  192. package/dist/catalog/platform-migration.js +583 -0
  193. package/dist/catalog/plugin-import.d.ts +254 -47
  194. package/dist/catalog/plugin-import.js +810 -112
  195. package/dist/catalog/plugin-install.d.ts +205 -42
  196. package/dist/catalog/plugin-install.js +828 -126
  197. package/dist/catalog/plugin-package.d.ts +43 -4
  198. package/dist/catalog/plugin-package.js +194 -7
  199. package/dist/catalog/plugin-upgrade.d.ts +308 -225
  200. package/dist/catalog/plugin-upgrade.js +1325 -1131
  201. package/dist/catalog/request-rules.d.ts +65 -0
  202. package/dist/catalog/request-rules.js +217 -0
  203. package/dist/catalog/requests.service.d.ts +194 -118
  204. package/dist/catalog/requests.service.js +530 -343
  205. package/dist/catalog/reserved-names.d.ts +8 -0
  206. package/dist/catalog/reserved-names.js +42 -0
  207. package/dist/catalog/scope-orgs.d.ts +21 -0
  208. package/dist/catalog/scope-orgs.js +67 -0
  209. package/dist/catalog/scope-state.d.ts +35 -0
  210. package/dist/catalog/scope-state.js +87 -0
  211. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  212. package/dist/catalog/scope-sync-workers.js +29 -0
  213. package/dist/catalog/scope-sync.d.ts +176 -0
  214. package/dist/catalog/scope-sync.js +576 -0
  215. package/dist/catalog/scope.d.ts +42 -0
  216. package/dist/catalog/scope.js +42 -0
  217. package/dist/catalog/unshare.d.ts +22 -0
  218. package/dist/catalog/unshare.js +119 -0
  219. package/dist/channels/actions.js +10 -3
  220. package/dist/channels/cards.d.ts +36 -10
  221. package/dist/channels/cards.js +100 -25
  222. package/dist/channels/channels.module.js +13 -2
  223. package/dist/channels/channels.schemas.d.ts +41 -0
  224. package/dist/channels/channels.schemas.js +40 -0
  225. package/dist/channels/connections.controller.d.ts +46 -37
  226. package/dist/channels/connections.controller.js +76 -34
  227. package/dist/channels/connections.service.d.ts +102 -10
  228. package/dist/channels/connections.service.js +271 -24
  229. package/dist/channels/inbound.d.ts +11 -1
  230. package/dist/channels/inbound.js +87 -7
  231. package/dist/channels/outbound.d.ts +14 -1
  232. package/dist/channels/outbound.js +64 -15
  233. package/dist/channels/phrases.d.ts +33 -2
  234. package/dist/channels/phrases.js +29 -1
  235. package/dist/channels/supervisor.d.ts +2 -0
  236. package/dist/channels/supervisor.js +4 -0
  237. package/dist/channels/threads.d.ts +5 -0
  238. package/dist/channels/threads.js +8 -0
  239. package/dist/channels/webhook.d.ts +21 -1
  240. package/dist/channels/webhook.js +39 -4
  241. package/dist/client/client-access.service.d.ts +102 -0
  242. package/dist/client/client-access.service.js +303 -0
  243. package/dist/client/client-builds.service.d.ts +109 -0
  244. package/dist/client/client-builds.service.js +229 -0
  245. package/dist/client/client-delivery.controller.d.ts +25 -0
  246. package/dist/client/client-delivery.controller.js +66 -0
  247. package/dist/client/client-files.d.ts +48 -0
  248. package/dist/client/client-files.js +136 -0
  249. package/dist/client/client-reports.cron.d.ts +13 -0
  250. package/dist/client/client-reports.cron.js +42 -0
  251. package/dist/client/client-reports.service.d.ts +30 -0
  252. package/dist/client/client-reports.service.js +102 -0
  253. package/dist/client/client-sign-in.service.d.ts +21 -0
  254. package/dist/client/client-sign-in.service.js +49 -0
  255. package/dist/client/client.controller.d.ts +49 -0
  256. package/dist/client/client.controller.js +129 -0
  257. package/dist/client/client.module.d.ts +8 -0
  258. package/dist/client/client.module.js +28 -0
  259. package/dist/client/client.schemas.d.ts +61 -0
  260. package/dist/client/client.schemas.js +27 -0
  261. package/dist/config/docs.js +5 -1
  262. package/dist/config/schema.d.ts +35 -2
  263. package/dist/config/schema.js +216 -21
  264. package/dist/conversations/access.d.ts +6 -4
  265. package/dist/conversations/access.js +29 -5
  266. package/dist/conversations/agent-tree.d.ts +46 -0
  267. package/dist/conversations/agent-tree.js +92 -0
  268. package/dist/conversations/artifacts.d.ts +1 -1
  269. package/dist/conversations/artifacts.js +1 -1
  270. package/dist/conversations/attachments.service.d.ts +30 -0
  271. package/dist/conversations/attachments.service.js +130 -5
  272. package/dist/conversations/conversations.controller.d.ts +79 -44
  273. package/dist/conversations/conversations.controller.js +133 -82
  274. package/dist/conversations/conversations.module.d.ts +1 -1
  275. package/dist/conversations/conversations.module.js +10 -7
  276. package/dist/conversations/conversations.schemas.d.ts +52 -0
  277. package/dist/conversations/conversations.schemas.js +79 -0
  278. package/dist/conversations/conversations.service.d.ts +161 -13
  279. package/dist/conversations/conversations.service.js +329 -57
  280. package/dist/conversations/device-status.d.ts +24 -0
  281. package/dist/conversations/device-status.js +71 -0
  282. package/dist/conversations/event-log.d.ts +45 -9
  283. package/dist/conversations/event-log.js +113 -6
  284. package/dist/conversations/events.d.ts +255 -9
  285. package/dist/conversations/events.js +250 -34
  286. package/dist/conversations/message-context.d.ts +79 -0
  287. package/dist/conversations/message-context.js +145 -0
  288. package/dist/conversations/queue.d.ts +5 -2
  289. package/dist/conversations/queue.js +24 -4
  290. package/dist/conversations/queue.service.d.ts +2 -2
  291. package/dist/conversations/queue.service.js +21 -3
  292. package/dist/conversations/titles.d.ts +12 -3
  293. package/dist/conversations/titles.js +40 -16
  294. package/dist/conversations/tree.d.ts +17 -0
  295. package/dist/conversations/tree.js +42 -0
  296. package/dist/ctx/create-ctx.d.ts +48 -5
  297. package/dist/ctx/create-ctx.js +174 -34
  298. package/dist/db/kernel-schema.d.ts +668 -27
  299. package/dist/db/pool.d.ts +5 -0
  300. package/dist/db/pool.js +3 -0
  301. package/dist/devices/access.d.ts +66 -0
  302. package/dist/devices/access.js +113 -0
  303. package/dist/devices/conversation-devices.d.ts +75 -0
  304. package/dist/devices/conversation-devices.js +230 -0
  305. package/dist/devices/devices.controller.d.ts +36 -0
  306. package/dist/devices/devices.controller.js +124 -0
  307. package/dist/devices/devices.module.d.ts +8 -0
  308. package/dist/devices/devices.module.js +34 -0
  309. package/dist/devices/devices.schemas.d.ts +3 -0
  310. package/dist/devices/devices.schemas.js +14 -0
  311. package/dist/devices/devices.service.d.ts +251 -0
  312. package/dist/devices/devices.service.js +791 -0
  313. package/dist/devices/dto.d.ts +25 -0
  314. package/dist/devices/dto.js +12 -0
  315. package/dist/devices/label.d.ts +11 -0
  316. package/dist/devices/label.js +25 -0
  317. package/dist/devices/legacy-cleanup.job.d.ts +34 -0
  318. package/dist/devices/legacy-cleanup.job.js +141 -0
  319. package/dist/errors.d.ts +215 -3
  320. package/dist/errors.js +215 -3
  321. package/dist/evals/evals.module.js +11 -2
  322. package/dist/evals/evals.schemas.d.ts +110 -0
  323. package/dist/evals/evals.schemas.js +107 -0
  324. package/dist/evals/reconstruct.d.ts +18 -9
  325. package/dist/evals/reconstruct.js +36 -10
  326. package/dist/evals/recorded-tools.d.ts +37 -1
  327. package/dist/evals/recorded-tools.js +120 -10
  328. package/dist/evals/run-replay.d.ts +20 -3
  329. package/dist/evals/run-replay.js +78 -14
  330. package/dist/evals/runs.controller.d.ts +2 -57
  331. package/dist/evals/runs.controller.js +1 -42
  332. package/dist/evals/runs.service.d.ts +8 -7
  333. package/dist/evals/runs.service.js +45 -30
  334. package/dist/evals/sets.controller.d.ts +2 -28
  335. package/dist/evals/sets.controller.js +1 -31
  336. package/dist/evals/sets.service.d.ts +7 -7
  337. package/dist/evals/sets.service.js +23 -17
  338. package/dist/evals/snapshot.d.ts +3 -2
  339. package/dist/evals/snapshot.js +17 -4
  340. package/dist/evals/step-replay.d.ts +4 -6
  341. package/dist/evals/step-replay.js +16 -9
  342. package/dist/evals/trajectory.d.ts +5 -3
  343. package/dist/evals/trajectory.js +4 -1
  344. package/dist/evals/trajectory.service.d.ts +8 -3
  345. package/dist/evals/trajectory.service.js +26 -14
  346. package/dist/evals/worker.d.ts +5 -5
  347. package/dist/evals/worker.js +9 -3
  348. package/dist/extensions/admin-ops.d.ts +81 -14
  349. package/dist/extensions/admin-ops.js +181 -47
  350. package/dist/extensions/admin-view.d.ts +57 -10
  351. package/dist/extensions/admin-view.js +249 -27
  352. package/dist/extensions/approvals.d.ts +12 -2
  353. package/dist/extensions/blobs.d.ts +14 -1
  354. package/dist/extensions/blobs.js +49 -5
  355. package/dist/extensions/bootstrap.d.ts +41 -5
  356. package/dist/extensions/bootstrap.js +121 -19
  357. package/dist/extensions/cli.d.ts +12 -0
  358. package/dist/extensions/cli.js +11 -2
  359. package/dist/extensions/config-hash.d.ts +10 -0
  360. package/dist/extensions/config-hash.js +38 -0
  361. package/dist/extensions/config-issues.d.ts +13 -1
  362. package/dist/extensions/config-issues.js +22 -5
  363. package/dist/extensions/config-json-schema.d.ts +43 -7
  364. package/dist/extensions/config-json-schema.js +124 -58
  365. package/dist/extensions/deployment-config-store.d.ts +6 -0
  366. package/dist/extensions/deployment-config.d.ts +94 -9
  367. package/dist/extensions/deployment-config.js +255 -34
  368. package/dist/extensions/display-name.d.ts +22 -0
  369. package/dist/extensions/display-name.js +77 -0
  370. package/dist/extensions/effective-config.d.ts +133 -0
  371. package/dist/extensions/effective-config.js +379 -0
  372. package/dist/extensions/extensions.module.js +31 -12
  373. package/dist/extensions/guide-places.d.ts +68 -0
  374. package/dist/extensions/guide-places.js +152 -0
  375. package/dist/extensions/hooks.d.ts +37 -4
  376. package/dist/extensions/hooks.js +82 -16
  377. package/dist/extensions/host.d.ts +105 -12
  378. package/dist/extensions/host.js +372 -87
  379. package/dist/extensions/installs.d.ts +30 -9
  380. package/dist/extensions/installs.js +57 -16
  381. package/dist/extensions/instance.d.ts +17 -2
  382. package/dist/extensions/instance.js +21 -0
  383. package/dist/extensions/ledger.d.ts +1 -1
  384. package/dist/extensions/locks.d.ts +12 -0
  385. package/dist/extensions/locks.js +26 -0
  386. package/dist/extensions/org-config.d.ts +97 -7
  387. package/dist/extensions/org-config.js +215 -45
  388. package/dist/extensions/org-levels.d.ts +37 -0
  389. package/dist/extensions/org-levels.js +71 -0
  390. package/dist/extensions/org-overrides.d.ts +151 -0
  391. package/dist/extensions/org-overrides.js +524 -0
  392. package/dist/extensions/package.d.ts +18 -4
  393. package/dist/extensions/package.js +56 -3
  394. package/dist/extensions/permission-set.d.ts +35 -5
  395. package/dist/extensions/permission-set.js +36 -5
  396. package/dist/extensions/permission-view.d.ts +106 -13
  397. package/dist/extensions/permission-view.js +33 -15
  398. package/dist/extensions/plugin-guides.d.ts +282 -0
  399. package/dist/extensions/plugin-guides.js +554 -0
  400. package/dist/extensions/plugin-icons.d.ts +54 -0
  401. package/dist/extensions/plugin-icons.js +125 -0
  402. package/dist/extensions/plugin-items.d.ts +21 -0
  403. package/dist/extensions/plugin-items.js +42 -0
  404. package/dist/extensions/point-defaults.controller.d.ts +28 -0
  405. package/dist/extensions/point-defaults.controller.js +69 -0
  406. package/dist/extensions/point-defaults.d.ts +73 -0
  407. package/dist/extensions/point-defaults.js +236 -0
  408. package/dist/extensions/point-defaults.schemas.d.ts +9 -0
  409. package/dist/extensions/point-defaults.schemas.js +14 -0
  410. package/dist/extensions/registry.d.ts +1 -1
  411. package/dist/extensions/registry.js +2 -0
  412. package/dist/extensions/resolve.d.ts +51 -1
  413. package/dist/extensions/resolve.js +85 -3
  414. package/dist/extensions/single-provider.d.ts +92 -0
  415. package/dist/extensions/single-provider.js +180 -0
  416. package/dist/extensions/sources.d.ts +13 -2
  417. package/dist/extensions/sources.js +2 -0
  418. package/dist/extensions/state.module.d.ts +9 -0
  419. package/dist/extensions/state.module.js +46 -0
  420. package/dist/extensions/unavailable.d.ts +50 -0
  421. package/dist/extensions/unavailable.js +115 -0
  422. package/dist/files/previewers.controller.js +2 -3
  423. package/dist/files/previewers.d.ts +10 -3
  424. package/dist/files/previewers.js +40 -11
  425. package/dist/files/previewers.schemas.d.ts +10 -0
  426. package/dist/files/previewers.schemas.js +9 -0
  427. package/dist/http/api.module.js +76 -4
  428. package/dist/http/app.d.ts +11 -2
  429. package/dist/http/app.js +31 -5
  430. package/dist/http/gateway-routes.d.ts +7 -3
  431. package/dist/http/gateway-routes.js +6 -3
  432. package/dist/http/nest-logger.d.ts +6 -5
  433. package/dist/http/nest-logger.js +24 -10
  434. package/dist/http/plugin-dispatch.d.ts +4 -1
  435. package/dist/http/plugin-dispatch.js +14 -2
  436. package/dist/identity/accounts.d.ts +77 -31
  437. package/dist/identity/accounts.js +133 -52
  438. package/dist/identity/audit.d.ts +2 -1
  439. package/dist/identity/auth.controller.js +9 -5
  440. package/dist/identity/auth.guard.d.ts +13 -5
  441. package/dist/identity/auth.guard.js +35 -9
  442. package/dist/identity/cookies.d.ts +26 -5
  443. package/dist/identity/cookies.js +58 -6
  444. package/dist/identity/identity.module.d.ts +1 -1
  445. package/dist/identity/identity.module.js +7 -4
  446. package/dist/identity/initial-passwords.controller.d.ts +22 -0
  447. package/dist/identity/initial-passwords.controller.js +49 -0
  448. package/dist/identity/initial-passwords.d.ts +61 -0
  449. package/dist/identity/initial-passwords.job.d.ts +16 -0
  450. package/dist/identity/initial-passwords.job.js +46 -0
  451. package/dist/identity/initial-passwords.js +159 -0
  452. package/dist/identity/me.controller.d.ts +17 -1
  453. package/dist/identity/me.controller.js +45 -4
  454. package/dist/identity/me.schemas.d.ts +24 -0
  455. package/dist/identity/me.schemas.js +25 -0
  456. package/dist/identity/principal.d.ts +11 -3
  457. package/dist/identity/principal.js +11 -3
  458. package/dist/identity/sessions.d.ts +12 -0
  459. package/dist/identity/sessions.js +45 -0
  460. package/dist/identity/settings.d.ts +99 -12
  461. package/dist/identity/settings.js +234 -25
  462. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  463. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  464. package/dist/identity/write-actor.d.ts +11 -0
  465. package/dist/identity/write-actor.js +7 -0
  466. package/dist/inbox/inbox.module.d.ts +4 -1
  467. package/dist/inbox/inbox.module.js +7 -3
  468. package/dist/inbox/inbox.schemas.d.ts +8 -0
  469. package/dist/inbox/inbox.schemas.js +11 -0
  470. package/dist/inbox/inbox.service.d.ts +64 -4
  471. package/dist/inbox/inbox.service.js +74 -4
  472. package/dist/inbox/org-notices.d.ts +63 -0
  473. package/dist/inbox/org-notices.js +91 -0
  474. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  475. package/dist/inbox/platform-inbox.controller.js +58 -0
  476. package/dist/inbox/platform-inbox.service.d.ts +157 -0
  477. package/dist/inbox/platform-inbox.service.js +281 -0
  478. package/dist/inbox/platform-notices.d.ts +19 -0
  479. package/dist/inbox/platform-notices.js +9 -0
  480. package/dist/index.d.ts +6 -2
  481. package/dist/index.js +7 -1
  482. package/dist/infra/cli/kernel-cli.module.js +9 -1
  483. package/dist/infra/config/kernel-config.service.js +32 -1
  484. package/dist/infra/database/database.module.js +1 -0
  485. package/dist/infra/database/xact-lock.d.ts +1 -1
  486. package/dist/infra/database/xact-lock.js +1 -1
  487. package/dist/infra/events/kernel-events.d.ts +31 -3
  488. package/dist/infra/lifecycle/process-guards.js +4 -0
  489. package/dist/infra/lock/lock.service.d.ts +8 -0
  490. package/dist/infra/lock/lock.service.js +27 -0
  491. package/dist/infra/logging/logging.module.d.ts +4 -2
  492. package/dist/infra/logging/logging.module.js +24 -6
  493. package/dist/infra/presence/presence.module.d.ts +6 -0
  494. package/dist/infra/presence/presence.module.js +22 -0
  495. package/dist/infra/presence/replica-presence.d.ts +87 -0
  496. package/dist/infra/presence/replica-presence.js +189 -0
  497. package/dist/infra/queue/add-job-once.d.ts +14 -0
  498. package/dist/infra/queue/add-job-once.js +16 -0
  499. package/dist/infra/queue/redis-connection.d.ts +6 -0
  500. package/dist/infra/queue/redis-connection.js +7 -0
  501. package/dist/infra/redis/redis.module.js +6 -2
  502. package/dist/infra/throttler/named-throttlers.d.ts +12 -0
  503. package/dist/infra/throttler/named-throttlers.js +67 -0
  504. package/dist/infra/throttler/throttler.guard.js +1 -1
  505. package/dist/infra/tokens.d.ts +6 -1
  506. package/dist/infra/tokens.js +6 -1
  507. package/dist/kernel.module.js +15 -0
  508. package/dist/lifecycle/kernel-lifecycle.d.ts +4 -2
  509. package/dist/lifecycle/kernel-lifecycle.js +35 -7
  510. package/dist/local-devices/device-auth.controller.d.ts +42 -0
  511. package/dist/local-devices/device-auth.controller.js +116 -0
  512. package/dist/local-devices/device-auth.d.ts +119 -0
  513. package/dist/local-devices/device-auth.js +401 -0
  514. package/dist/local-devices/device-auth.module.d.ts +7 -0
  515. package/dist/local-devices/device-auth.module.js +25 -0
  516. package/dist/local-devices/device-routes.d.ts +36 -0
  517. package/dist/local-devices/device-routes.js +90 -0
  518. package/dist/local-devices/dto.d.ts +66 -0
  519. package/dist/local-devices/dto.js +44 -0
  520. package/dist/local-devices/keys.d.ts +25 -0
  521. package/dist/local-devices/keys.js +25 -0
  522. package/dist/local-devices/local-device-gateway.d.ts +134 -0
  523. package/dist/local-devices/local-device-gateway.js +542 -0
  524. package/dist/local-devices/local-device-provider.d.ts +89 -0
  525. package/dist/local-devices/local-device-provider.js +151 -0
  526. package/dist/local-devices/local-devices.module.d.ts +16 -0
  527. package/dist/local-devices/local-devices.module.js +44 -0
  528. package/dist/local-devices/machines.d.ts +118 -0
  529. package/dist/local-devices/machines.js +366 -0
  530. package/dist/local-devices/relay.d.ts +100 -0
  531. package/dist/local-devices/relay.js +373 -0
  532. package/dist/local-devices/targets.d.ts +28 -0
  533. package/dist/local-devices/targets.js +73 -0
  534. package/dist/log.d.ts +13 -1
  535. package/dist/log.js +93 -17
  536. package/dist/models/embeddings.d.ts +82 -0
  537. package/dist/models/embeddings.js +326 -0
  538. package/dist/models/enablement.controller.d.ts +40 -0
  539. package/dist/models/enablement.controller.js +74 -0
  540. package/dist/models/enablement.d.ts +101 -0
  541. package/dist/models/enablement.js +264 -0
  542. package/dist/models/models.module.d.ts +5 -1
  543. package/dist/models/models.module.js +16 -4
  544. package/dist/models/org-models.schemas.d.ts +8 -0
  545. package/dist/models/org-models.schemas.js +22 -0
  546. package/dist/models/prices.d.ts +8 -6
  547. package/dist/models/prices.js +11 -9
  548. package/dist/models/purposes.controller.d.ts +6 -4
  549. package/dist/models/purposes.controller.js +13 -7
  550. package/dist/models/purposes.d.ts +72 -14
  551. package/dist/models/purposes.js +115 -34
  552. package/dist/orgs/directory-sync.d.ts +14 -5
  553. package/dist/orgs/directory-sync.js +41 -17
  554. package/dist/orgs/offboarding.d.ts +12 -8
  555. package/dist/orgs/offboarding.js +54 -33
  556. package/dist/orgs/org-lock.d.ts +5 -0
  557. package/dist/orgs/org-lock.js +13 -0
  558. package/dist/orgs/org.guard.d.ts +10 -0
  559. package/dist/orgs/org.guard.js +43 -32
  560. package/dist/orgs/orgs.controller.d.ts +2 -5
  561. package/dist/orgs/orgs.controller.js +3 -6
  562. package/dist/orgs/orgs.module.js +3 -0
  563. package/dist/orgs/orgs.schemas.d.ts +8 -0
  564. package/dist/orgs/orgs.schemas.js +16 -0
  565. package/dist/orgs/orgs.service.d.ts +23 -8
  566. package/dist/orgs/orgs.service.js +38 -16
  567. package/dist/orgs/roles.d.ts +1 -1
  568. package/dist/orgs/roles.js +5 -1
  569. package/dist/orgs/settings.controller.d.ts +1 -1
  570. package/dist/orgs/settings.service.d.ts +66 -6
  571. package/dist/orgs/settings.service.js +89 -10
  572. package/dist/overrides.d.ts +16 -1
  573. package/dist/overrides.js +10 -0
  574. package/dist/platform/actor.d.ts +48 -0
  575. package/dist/platform/actor.js +100 -0
  576. package/dist/platform/agent-docs.d.ts +18 -0
  577. package/dist/platform/agent-docs.js +59 -0
  578. package/dist/platform/availability.d.ts +14 -0
  579. package/dist/platform/availability.js +43 -0
  580. package/dist/platform/errors.d.ts +28 -0
  581. package/dist/platform/errors.js +65 -0
  582. package/dist/platform/exclusions.d.ts +11 -0
  583. package/dist/platform/exclusions.js +774 -0
  584. package/dist/platform/method.d.ts +6 -0
  585. package/dist/platform/method.js +15 -0
  586. package/dist/platform/operation.d.ts +169 -0
  587. package/dist/platform/operation.js +102 -0
  588. package/dist/platform/ops/accounts.ops.d.ts +32 -0
  589. package/dist/platform/ops/accounts.ops.js +291 -0
  590. package/dist/platform/ops/admin-items.ops.d.ts +37 -0
  591. package/dist/platform/ops/admin-items.ops.js +278 -0
  592. package/dist/platform/ops/admin.ops.d.ts +38 -0
  593. package/dist/platform/ops/admin.ops.js +497 -0
  594. package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
  595. package/dist/platform/ops/agent-skills.ops.js +509 -0
  596. package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
  597. package/dist/platform/ops/agent-templates.ops.js +272 -0
  598. package/dist/platform/ops/agents.ops.d.ts +37 -0
  599. package/dist/platform/ops/agents.ops.js +730 -0
  600. package/dist/platform/ops/approvals.ops.d.ts +30 -0
  601. package/dist/platform/ops/approvals.ops.js +116 -0
  602. package/dist/platform/ops/background.ops.d.ts +14 -0
  603. package/dist/platform/ops/background.ops.js +134 -0
  604. package/dist/platform/ops/catalog-admin.ops.d.ts +92 -0
  605. package/dist/platform/ops/catalog-admin.ops.js +682 -0
  606. package/dist/platform/ops/channels.ops.d.ts +16 -0
  607. package/dist/platform/ops/channels.ops.js +195 -0
  608. package/dist/platform/ops/components.ops.d.ts +46 -0
  609. package/dist/platform/ops/components.ops.js +854 -0
  610. package/dist/platform/ops/connectors.ops.d.ts +17 -0
  611. package/dist/platform/ops/connectors.ops.js +190 -0
  612. package/dist/platform/ops/conversations.ops.d.ts +30 -0
  613. package/dist/platform/ops/conversations.ops.js +470 -0
  614. package/dist/platform/ops/devices.ops.d.ts +26 -0
  615. package/dist/platform/ops/devices.ops.js +311 -0
  616. package/dist/platform/ops/errors.d.ts +16 -0
  617. package/dist/platform/ops/errors.js +30 -0
  618. package/dist/platform/ops/evals.ops.d.ts +28 -0
  619. package/dist/platform/ops/evals.ops.js +783 -0
  620. package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
  621. package/dist/platform/ops/extensions-admin.ops.js +372 -0
  622. package/dist/platform/ops/extensions.ops.d.ts +25 -0
  623. package/dist/platform/ops/extensions.ops.js +347 -0
  624. package/dist/platform/ops/inbox.ops.d.ts +25 -0
  625. package/dist/platform/ops/inbox.ops.js +381 -0
  626. package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
  627. package/dist/platform/ops/marketplaces.ops.js +466 -0
  628. package/dist/platform/ops/models.ops.d.ts +25 -0
  629. package/dist/platform/ops/models.ops.js +232 -0
  630. package/dist/platform/ops/org-plugins.ops.d.ts +35 -0
  631. package/dist/platform/ops/org-plugins.ops.js +388 -0
  632. package/dist/platform/ops/org-settings.ops.d.ts +18 -0
  633. package/dist/platform/ops/org-settings.ops.js +127 -0
  634. package/dist/platform/ops/orgs.ops.d.ts +28 -0
  635. package/dist/platform/ops/orgs.ops.js +298 -0
  636. package/dist/platform/ops/other-orgs.d.ts +20 -0
  637. package/dist/platform/ops/other-orgs.js +72 -0
  638. package/dist/platform/ops/paging.d.ts +14 -0
  639. package/dist/platform/ops/paging.js +20 -0
  640. package/dist/platform/ops/platform.ops.d.ts +30 -0
  641. package/dist/platform/ops/platform.ops.js +231 -0
  642. package/dist/platform/ops/plugins.ops.d.ts +35 -0
  643. package/dist/platform/ops/plugins.ops.js +476 -0
  644. package/dist/platform/ops/previewers.ops.d.ts +14 -0
  645. package/dist/platform/ops/previewers.ops.js +109 -0
  646. package/dist/platform/ops/requests.ops.d.ts +14 -0
  647. package/dist/platform/ops/requests.ops.js +191 -0
  648. package/dist/platform/ops/role.d.ts +4 -0
  649. package/dist/platform/ops/role.js +10 -0
  650. package/dist/platform/ops/setup.ops.d.ts +24 -0
  651. package/dist/platform/ops/setup.ops.js +212 -0
  652. package/dist/platform/ops/skills.ops.d.ts +17 -0
  653. package/dist/platform/ops/skills.ops.js +160 -0
  654. package/dist/platform/ops/summary.d.ts +10 -0
  655. package/dist/platform/ops/summary.js +18 -0
  656. package/dist/platform/ops/themes.ops.d.ts +14 -0
  657. package/dist/platform/ops/themes.ops.js +47 -0
  658. package/dist/platform/ops/ui.ops.d.ts +8 -0
  659. package/dist/platform/ops/ui.ops.js +41 -0
  660. package/dist/platform/ops/unavailable.d.ts +23 -0
  661. package/dist/platform/ops/unavailable.js +118 -0
  662. package/dist/platform/parity.d.ts +33 -0
  663. package/dist/platform/parity.js +272 -0
  664. package/dist/platform/platform-ops.module.d.ts +43 -0
  665. package/dist/platform/platform-ops.module.js +142 -0
  666. package/dist/platform/platform.module.d.ts +8 -0
  667. package/dist/platform/platform.module.js +25 -0
  668. package/dist/platform/registry.d.ts +30 -0
  669. package/dist/platform/registry.js +111 -0
  670. package/dist/platform/route-schemas.d.ts +18 -0
  671. package/dist/platform/route-schemas.js +85 -0
  672. package/dist/roles/gateway-role.d.ts +18 -3
  673. package/dist/roles/gateway-role.js +33 -5
  674. package/dist/roles/gateway.module.d.ts +2 -1
  675. package/dist/roles/gateway.module.js +6 -3
  676. package/dist/roles/worker-role.d.ts +6 -4
  677. package/dist/roles/worker-role.js +14 -7
  678. package/dist/roles/worker.module.d.ts +1 -1
  679. package/dist/roles/worker.module.js +21 -1
  680. package/dist/runtime/context/build.d.ts +21 -13
  681. package/dist/runtime/context/build.js +106 -29
  682. package/dist/runtime/context/claude-tools.d.ts +4 -1
  683. package/dist/runtime/context/claude-tools.js +13 -12
  684. package/dist/runtime/context/compaction.js +24 -1
  685. package/dist/runtime/context/device-paths.d.ts +40 -0
  686. package/dist/runtime/context/device-paths.js +48 -0
  687. package/dist/runtime/context/legacy-text.d.ts +22 -0
  688. package/dist/runtime/context/legacy-text.js +37 -0
  689. package/dist/runtime/context/reminders.d.ts +2 -0
  690. package/dist/runtime/context/reminders.js +2 -0
  691. package/dist/runtime/context/run-context.d.ts +65 -0
  692. package/dist/runtime/context/run-context.js +215 -0
  693. package/dist/runtime/context/skills.d.ts +29 -11
  694. package/dist/runtime/context/skills.js +46 -32
  695. package/dist/runtime/context/tool-changes.d.ts +27 -0
  696. package/dist/runtime/context/tool-changes.js +60 -0
  697. package/dist/runtime/hook-calls.d.ts +8 -1
  698. package/dist/runtime/hook-calls.js +40 -7
  699. package/dist/runtime/langgraph-loop.d.ts +3 -1
  700. package/dist/runtime/langgraph-loop.js +36 -17
  701. package/dist/runtime/loop.d.ts +35 -6
  702. package/dist/runtime/maintenance.d.ts +9 -4
  703. package/dist/runtime/maintenance.js +35 -8
  704. package/dist/runtime/model-call.d.ts +54 -11
  705. package/dist/runtime/model-call.js +105 -28
  706. package/dist/runtime/providers.d.ts +149 -29
  707. package/dist/runtime/providers.js +332 -63
  708. package/dist/runtime/run-context.service.d.ts +65 -0
  709. package/dist/runtime/run-context.service.js +236 -0
  710. package/dist/runtime/run-control.d.ts +11 -1
  711. package/dist/runtime/run-control.js +12 -0
  712. package/dist/runtime/run-drafts.d.ts +85 -0
  713. package/dist/runtime/run-drafts.js +230 -0
  714. package/dist/runtime/run-finish.d.ts +1 -1
  715. package/dist/runtime/run-jobs.d.ts +3 -5
  716. package/dist/runtime/run-jobs.js +7 -9
  717. package/dist/runtime/run-queue.d.ts +62 -5
  718. package/dist/runtime/run-queue.js +313 -40
  719. package/dist/runtime/run-worker.d.ts +19 -8
  720. package/dist/runtime/run-worker.js +105 -44
  721. package/dist/runtime/runtime.module.js +13 -3
  722. package/dist/runtime/step-log.d.ts +15 -4
  723. package/dist/runtime/step-log.js +24 -7
  724. package/dist/runtime/stream.controller.d.ts +23 -1
  725. package/dist/runtime/stream.controller.js +60 -3
  726. package/dist/runtime/stream.d.ts +4 -1
  727. package/dist/runtime/stream.js +27 -3
  728. package/dist/runtime/subagents/child.d.ts +55 -7
  729. package/dist/runtime/subagents/child.js +105 -7
  730. package/dist/runtime/subagents/definition.d.ts +31 -26
  731. package/dist/runtime/subagents/definition.js +89 -142
  732. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  733. package/dist/runtime/subagents/deliveries.js +228 -0
  734. package/dist/runtime/subagents/dispatch.d.ts +116 -27
  735. package/dist/runtime/subagents/dispatch.js +213 -142
  736. package/dist/runtime/subagents/limits.d.ts +24 -5
  737. package/dist/runtime/subagents/limits.js +40 -6
  738. package/dist/runtime/subagents/messages.d.ts +95 -0
  739. package/dist/runtime/subagents/messages.js +328 -0
  740. package/dist/runtime/subagents/org-agents.js +2 -1
  741. package/dist/runtime/subagents/preamble.d.ts +4 -4
  742. package/dist/runtime/subagents/preamble.js +9 -7
  743. package/dist/runtime/subagents/progress.d.ts +8 -6
  744. package/dist/runtime/subagents/progress.js +11 -6
  745. package/dist/runtime/subagents/render.d.ts +30 -0
  746. package/dist/runtime/subagents/render.js +53 -0
  747. package/dist/runtime/subagents/roster.d.ts +25 -8
  748. package/dist/runtime/subagents/roster.js +48 -12
  749. package/dist/runtime/subagents/skill-fork.d.ts +4 -3
  750. package/dist/runtime/subagents/skill-fork.js +9 -5
  751. package/dist/runtime/subagents/status.d.ts +14 -0
  752. package/dist/runtime/subagents/status.js +23 -0
  753. package/dist/runtime/subagents/subagents.service.d.ts +9 -6
  754. package/dist/runtime/subagents/subagents.service.js +13 -8
  755. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  756. package/dist/runtime/usage-report-jobs.js +158 -0
  757. package/dist/runtime/usage-report.d.ts +35 -39
  758. package/dist/runtime/usage-report.js +171 -97
  759. package/dist/runtime/waits.d.ts +148 -39
  760. package/dist/runtime/waits.js +426 -112
  761. package/dist/sandbox/jobs.d.ts +40 -13
  762. package/dist/sandbox/jobs.js +57 -20
  763. package/dist/sandbox/leases.d.ts +37 -54
  764. package/dist/sandbox/leases.js +71 -115
  765. package/dist/sandbox/providers.d.ts +34 -7
  766. package/dist/sandbox/providers.js +54 -9
  767. package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
  768. package/dist/sandbox/sandbox-file-reader.js +98 -0
  769. package/dist/sandbox/sandbox.module.d.ts +3 -2
  770. package/dist/sandbox/sandbox.module.js +10 -4
  771. package/dist/sandbox/sandbox.service.d.ts +345 -132
  772. package/dist/sandbox/sandbox.service.js +883 -399
  773. package/dist/sandbox/unreachable.d.ts +30 -0
  774. package/dist/sandbox/unreachable.js +108 -0
  775. package/dist/setup/kernel-checks.d.ts +91 -0
  776. package/dist/setup/kernel-checks.js +295 -0
  777. package/dist/setup/oauth-token-probe.d.ts +47 -0
  778. package/dist/setup/oauth-token-probe.js +108 -0
  779. package/dist/setup/redact-check.d.ts +18 -0
  780. package/dist/setup/redact-check.js +46 -0
  781. package/dist/setup/setup-check-registry.d.ts +86 -0
  782. package/dist/setup/setup-check-registry.js +75 -0
  783. package/dist/setup/setup-checks.controller.d.ts +28 -0
  784. package/dist/setup/setup-checks.controller.js +78 -0
  785. package/dist/setup/setup-checks.schemas.d.ts +38 -0
  786. package/dist/setup/setup-checks.schemas.js +43 -0
  787. package/dist/setup/setup-checks.service.d.ts +144 -0
  788. package/dist/setup/setup-checks.service.js +683 -0
  789. package/dist/setup/setup-guides.controller.d.ts +18 -0
  790. package/dist/setup/setup-guides.controller.js +48 -0
  791. package/dist/setup/setup-guides.schemas.d.ts +10 -0
  792. package/dist/setup/setup-guides.schemas.js +6 -0
  793. package/dist/setup/setup-guides.service.d.ts +126 -0
  794. package/dist/setup/setup-guides.service.js +315 -0
  795. package/dist/setup/setup.module.d.ts +8 -0
  796. package/dist/setup/setup.module.js +31 -0
  797. package/dist/skills/agent-skills.controller.d.ts +48 -0
  798. package/dist/skills/agent-skills.controller.js +131 -0
  799. package/dist/skills/agent-skills.service.d.ts +262 -0
  800. package/dist/skills/agent-skills.service.js +996 -0
  801. package/dist/skills/catalog.d.ts +14 -11
  802. package/dist/skills/catalog.js +32 -50
  803. package/dist/skills/changes.controller.d.ts +12 -22
  804. package/dist/skills/changes.controller.js +27 -56
  805. package/dist/skills/changes.service.d.ts +69 -115
  806. package/dist/skills/changes.service.js +249 -598
  807. package/dist/skills/conversation-catalog.d.ts +53 -0
  808. package/dist/skills/conversation-catalog.js +149 -0
  809. package/dist/skills/invocable.controller.d.ts +1 -1
  810. package/dist/skills/invocable.controller.js +2 -2
  811. package/dist/skills/invocation-keys.d.ts +1 -1
  812. package/dist/skills/invocation-keys.js +1 -1
  813. package/dist/skills/invoke.d.ts +3 -3
  814. package/dist/skills/invoke.js +21 -8
  815. package/dist/skills/package.d.ts +15 -1
  816. package/dist/skills/package.js +14 -1
  817. package/dist/skills/skills.controller.d.ts +32 -6
  818. package/dist/skills/skills.controller.js +64 -11
  819. package/dist/skills/skills.module.js +25 -3
  820. package/dist/skills/skills.schemas.d.ts +44 -0
  821. package/dist/skills/skills.schemas.js +68 -0
  822. package/dist/skills/skills.service.d.ts +123 -26
  823. package/dist/skills/skills.service.js +493 -76
  824. package/dist/skills/usable.d.ts +82 -0
  825. package/dist/skills/usable.js +388 -0
  826. package/dist/themes/render-css.d.ts +13 -0
  827. package/dist/themes/render-css.js +135 -0
  828. package/dist/themes/theme-delivery.service.d.ts +36 -0
  829. package/dist/themes/theme-delivery.service.js +116 -0
  830. package/dist/themes/theme-state.d.ts +116 -0
  831. package/dist/themes/theme-state.js +221 -0
  832. package/dist/themes/theme-usage.d.ts +61 -0
  833. package/dist/themes/theme-usage.js +98 -0
  834. package/dist/themes/themes-public.controller.d.ts +33 -0
  835. package/dist/themes/themes-public.controller.js +98 -0
  836. package/dist/themes/themes.controller.d.ts +13 -0
  837. package/dist/themes/themes.controller.js +38 -0
  838. package/dist/themes/themes.module.d.ts +3 -0
  839. package/dist/themes/themes.module.js +21 -0
  840. package/dist/themes/themes.schemas.d.ts +3 -0
  841. package/dist/themes/themes.schemas.js +2 -0
  842. package/dist/themes/themes.service.d.ts +50 -0
  843. package/dist/themes/themes.service.js +99 -0
  844. package/dist/time-zone.d.ts +5 -0
  845. package/dist/time-zone.js +19 -0
  846. package/dist/tools/admin-connectors.d.ts +69 -0
  847. package/dist/tools/admin-connectors.js +135 -0
  848. package/dist/tools/approvals.controller.js +2 -3
  849. package/dist/tools/approvals.schemas.d.ts +21 -0
  850. package/dist/tools/approvals.schemas.js +15 -0
  851. package/dist/tools/approvals.service.d.ts +26 -2
  852. package/dist/tools/approvals.service.js +44 -5
  853. package/dist/tools/builtin-names.d.ts +104 -0
  854. package/dist/tools/builtin-names.js +164 -0
  855. package/dist/tools/builtins/agent.d.ts +27 -25
  856. package/dist/tools/builtins/agent.js +66 -63
  857. package/dist/tools/builtins/ask-user.d.ts +1 -1
  858. package/dist/tools/builtins/ask-user.js +5 -4
  859. package/dist/tools/builtins/builtin-tools.d.ts +23 -4
  860. package/dist/tools/builtins/builtin-tools.js +78 -12
  861. package/dist/tools/builtins/current-time.d.ts +26 -0
  862. package/dist/tools/builtins/current-time.js +99 -0
  863. package/dist/tools/builtins/handback.d.ts +28 -0
  864. package/dist/tools/builtins/handback.js +53 -0
  865. package/dist/tools/builtins/platform.d.ts +51 -0
  866. package/dist/tools/builtins/platform.js +451 -0
  867. package/dist/tools/builtins/read-tool-output.d.ts +1 -1
  868. package/dist/tools/builtins/read-tool-output.js +2 -2
  869. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  870. package/dist/tools/builtins/sandbox/bash.js +291 -39
  871. package/dist/tools/builtins/sandbox/common.d.ts +135 -36
  872. package/dist/tools/builtins/sandbox/common.js +222 -62
  873. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  874. package/dist/tools/builtins/sandbox/deliver.js +19 -16
  875. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  876. package/dist/tools/builtins/sandbox/edit.js +64 -50
  877. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  878. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  879. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  880. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  881. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  882. package/dist/tools/builtins/sandbox/glob.js +17 -12
  883. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  884. package/dist/tools/builtins/sandbox/grep.js +153 -34
  885. package/dist/tools/builtins/sandbox/index.d.ts +9 -5
  886. package/dist/tools/builtins/sandbox/index.js +13 -5
  887. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  888. package/dist/tools/builtins/sandbox/read.js +29 -19
  889. package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
  890. package/dist/tools/builtins/sandbox/task-output.js +334 -0
  891. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  892. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  893. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  894. package/dist/tools/builtins/sandbox/write.js +51 -44
  895. package/dist/tools/builtins/send-message.d.ts +56 -0
  896. package/dist/tools/builtins/send-message.js +100 -0
  897. package/dist/tools/builtins/skill-load.d.ts +29 -18
  898. package/dist/tools/builtins/skill-load.js +125 -73
  899. package/dist/tools/builtins/tool-search.d.ts +13 -9
  900. package/dist/tools/builtins/tool-search.js +25 -14
  901. package/dist/tools/builtins/web/errors.d.ts +8 -0
  902. package/dist/tools/builtins/web/errors.js +53 -0
  903. package/dist/tools/builtins/web/extract.d.ts +62 -0
  904. package/dist/tools/builtins/web/extract.js +271 -0
  905. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  906. package/dist/tools/builtins/web/fetch.js +175 -0
  907. package/dist/tools/builtins/web/index.d.ts +13 -0
  908. package/dist/tools/builtins/web/index.js +12 -0
  909. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  910. package/dist/tools/builtins/web/page-cache.js +77 -0
  911. package/dist/tools/builtins/web/search.d.ts +25 -0
  912. package/dist/tools/builtins/web/search.js +210 -0
  913. package/dist/tools/builtins/web/url.d.ts +17 -0
  914. package/dist/tools/builtins/web/url.js +43 -0
  915. package/dist/tools/connector-account-policies.d.ts +51 -0
  916. package/dist/tools/connector-account-policies.js +165 -0
  917. package/dist/tools/connectors.controller.d.ts +74 -9
  918. package/dist/tools/connectors.controller.js +133 -16
  919. package/dist/tools/connectors.schemas.d.ts +27 -0
  920. package/dist/tools/connectors.schemas.js +34 -0
  921. package/dist/tools/connectors.service.d.ts +101 -8
  922. package/dist/tools/connectors.service.js +266 -28
  923. package/dist/tools/credentials.d.ts +23 -0
  924. package/dist/tools/credentials.js +90 -1
  925. package/dist/tools/display-names.d.ts +9 -0
  926. package/dist/tools/display-names.js +24 -0
  927. package/dist/tools/drift.js +5 -5
  928. package/dist/tools/elicitation.js +1 -1
  929. package/dist/tools/extension-tools.controller.d.ts +14 -0
  930. package/dist/tools/extension-tools.controller.js +37 -0
  931. package/dist/tools/info.d.ts +61 -4
  932. package/dist/tools/info.js +119 -33
  933. package/dist/tools/legacy-data.d.ts +34 -0
  934. package/dist/tools/legacy-data.js +76 -0
  935. package/dist/tools/legacy-keys.d.ts +51 -0
  936. package/dist/tools/legacy-keys.js +114 -0
  937. package/dist/tools/naming.d.ts +1 -5
  938. package/dist/tools/naming.js +1 -7
  939. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  940. package/dist/tools/oauth/flow-paths.js +1 -1
  941. package/dist/tools/oauth/flow.js +1 -1
  942. package/dist/tools/oauth/tokens.d.ts +54 -7
  943. package/dist/tools/oauth/tokens.js +87 -17
  944. package/dist/tools/org-tool-switches.d.ts +89 -0
  945. package/dist/tools/org-tool-switches.js +201 -0
  946. package/dist/tools/outputs.js +1 -1
  947. package/dist/tools/pipeline.d.ts +67 -47
  948. package/dist/tools/pipeline.js +319 -380
  949. package/dist/tools/policy.d.ts +30 -23
  950. package/dist/tools/policy.js +142 -64
  951. package/dist/tools/questions.controller.d.ts +1 -1
  952. package/dist/tools/questions.controller.js +1 -1
  953. package/dist/tools/questions.service.d.ts +23 -2
  954. package/dist/tools/questions.service.js +104 -2
  955. package/dist/tools/registry.d.ts +189 -68
  956. package/dist/tools/registry.js +318 -236
  957. package/dist/tools/resources.d.ts +1 -1
  958. package/dist/tools/resources.js +1 -1
  959. package/dist/tools/tools.module.js +31 -3
  960. package/dist/tools/validate.js +1 -1
  961. package/dist/ui/admin-ui.controller.d.ts +56 -0
  962. package/dist/ui/admin-ui.controller.js +192 -0
  963. package/dist/ui/arrangement.d.ts +65 -0
  964. package/dist/ui/arrangement.js +171 -0
  965. package/dist/ui/embed-token.d.ts +2 -2
  966. package/dist/ui/embed-token.js +30 -5
  967. package/dist/ui/registry.d.ts +42 -17
  968. package/dist/ui/registry.js +46 -14
  969. package/dist/ui/slots.controller.d.ts +11 -0
  970. package/dist/ui/slots.controller.js +25 -0
  971. package/dist/ui/ui-stream.d.ts +20 -3
  972. package/dist/ui/ui-stream.js +25 -7
  973. package/dist/ui/ui.schemas.d.ts +70 -0
  974. package/dist/ui/ui.schemas.js +65 -0
  975. package/dist/ui/views.controller.d.ts +35 -49
  976. package/dist/ui/views.controller.js +48 -70
  977. package/dist/ui/views.d.ts +112 -18
  978. package/dist/ui/views.js +254 -47
  979. package/package.json +6 -3
  980. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  981. package/src/migrations/0064_account_last_org.sql +7 -0
  982. package/src/migrations/0065_conversation_archive.sql +8 -0
  983. package/src/migrations/0066_extension_display_name.sql +4 -0
  984. package/src/migrations/0067_agent_profiles.sql +20 -0
  985. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  986. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  987. package/src/migrations/0070_background_tasks.sql +37 -0
  988. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  989. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  990. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  991. package/src/migrations/0074_subagent_tree.sql +50 -0
  992. package/src/migrations/0075_plugin_scope.sql +61 -0
  993. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  994. package/src/migrations/0077_scope_requests.sql +52 -0
  995. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  996. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  997. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  998. package/src/migrations/0081_platform_components.sql +129 -0
  999. package/src/migrations/0082_platform_migration.sql +33 -0
  1000. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  1001. package/src/migrations/0084_org_owned_items.sql +85 -0
  1002. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  1003. package/src/migrations/0086_org_layering.sql +30 -0
  1004. package/src/migrations/0087_approval_summary.sql +6 -0
  1005. package/src/migrations/0088_environments.sql +80 -0
  1006. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  1007. package/src/migrations/0090_initial_passwords.sql +27 -0
  1008. package/src/migrations/0091_account_time_zone.sql +4 -0
  1009. package/src/migrations/0092_tools_default_on.sql +27 -0
  1010. package/src/migrations/0093_connected_environments.sql +37 -0
  1011. package/src/migrations/0094_environment_paths_idx.sql +7 -0
  1012. package/src/migrations/0095_environment_files_resets.sql +5 -0
  1013. package/src/migrations/0096_environment_demoted_default.sql +18 -0
  1014. package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
  1015. package/src/migrations/0098_single_provider_running_first.sql +41 -0
  1016. package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
  1017. package/src/migrations/0100_catalog_files.sql +13 -0
  1018. package/src/migrations/0101_marketplace_icons.sql +32 -0
  1019. package/src/migrations/0102_themes.sql +64 -0
  1020. package/src/migrations/0103_ui_theme_setting.sql +7 -0
  1021. package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
  1022. package/src/migrations/0105_devices_rename.sql +136 -0
  1023. package/src/migrations/0106_setup_guides_v2.sql +10 -0
  1024. package/src/migrations/0107_extension_client_builds.sql +50 -0
  1025. package/src/migrations/0108_question_skipped.sql +6 -0
  1026. package/src/migrations/0109_audit_platform_idx.sql +5 -0
  1027. package/src/migrations/0110_usage_time_idx.sql +8 -0
  1028. package/src/migrations/0111_agent_skill_sharing.sql +22 -0
  1029. package/src/migrations/0112_skill_share_requests.sql +4 -0
  1030. package/dist/catalog/upgrade-targets.d.ts +0 -56
  1031. package/dist/catalog/upgrade-targets.js +0 -90
  1032. package/dist/conversations/sandbox-status.d.ts +0 -24
  1033. package/dist/conversations/sandbox-status.js +0 -52
  1034. package/dist/extensions/org-config.controller.d.ts +0 -24
  1035. package/dist/extensions/org-config.controller.js +0 -62
  1036. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  1037. package/dist/tools/builtins/sandbox/names.js +0 -20
  1038. package/dist/tools/builtins/skill-write.d.ts +0 -59
  1039. package/dist/tools/builtins/skill-write.js +0 -244
@@ -7,14 +7,13 @@ 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 { createHash } from "node:crypto";
11
10
  import { readFile } from "node:fs/promises";
12
11
  import { createRequire } from "node:module";
13
12
  import { dirname, isAbsolute, join, resolve as resolvePath } from "node:path";
14
13
  import { fileURLToPath, pathToFileURL } from "node:url";
15
14
  import { EXTENSION_POINT_CARDINALITY, parseExtensionPoint, SDK_VERSION, } from "@capybara-hq/plugin-sdk";
16
15
  import { Inject, Injectable } from "@nestjs/common";
17
- import { changedPaths, configFields, getPath, secretValues, setPath, unreachableSecrets, } from "../config/fields.js";
16
+ import { changedPaths, configFields, secretValues, unreachableSecrets } from "../config/fields.js";
18
17
  import { pluginSchemaName, queryEnabledPlugins, } from "../ctx/create-ctx.js";
19
18
  import { kernelDb } from "../db/kernel-schema.js";
20
19
  import { migrate } from "../db/migrator.js";
@@ -25,56 +24,26 @@ import { KernelDb } from "../infra/database/kernel-db.js";
25
24
  import { LockService } from "../infra/lock/lock.service.js";
26
25
  import { KERNEL_LOGGER, KEYRING, REDIS, REDIS_SUBSCRIBER } from "../infra/tokens.js";
27
26
  import { KERNEL_APP_OPTIONS } from "../lifecycle/tokens.js";
27
+ import { ModelEmbeddings } from "../models/embeddings.js";
28
28
  import { packagePath } from "../packages/tgz.js";
29
29
  import { EmbedTokens } from "../ui/embed-token.js";
30
30
  import { ExtensionApprovals, planApprovals, readSnapshots, withPreApproved, } from "./approvals.js";
31
31
  import { ExtensionBlobIntegrityError } from "./blobs.js";
32
+ import { deploymentConfigHash } from "./config-hash.js";
32
33
  import { toIssues } from "./config-issues.js";
34
+ import { configFormSchema, describeConfigUiProblems } from "./config-json-schema.js";
35
+ import { EffectiveConfigs } from "./effective-config.js";
33
36
  import { HookRegistry } from "./hooks.js";
34
37
  import { ExtensionInstalls } from "./installs.js";
35
38
  import { ImportTracker, importExtensionModule, ManifestMismatchError, matchesSection, setupInstance, warnUpgrades, } from "./instance.js";
36
- import { permissionSetOfSection, readMigrationSql } from "./package.js";
37
- import { blockingKeys, computePermissionSet, UI_VIEW_KEY_PREFIX, } from "./permission-set.js";
39
+ import { parseLoadGate } from "./org-levels.js";
40
+ import { declaredDisplayName, permissionSetOfSection, readMigrationSql } from "./package.js";
41
+ import { blockingKeys, computePermissionSet, SETUP_CHECK_KEY_PREFIX, UI_VIEW_KEY_PREFIX, } from "./permission-set.js";
38
42
  import { ExtensionRegistry } from "./registry.js";
39
- import { ExtensionResolveError, resolveExtensions } from "./resolve.js";
43
+ import { ExtensionResolveError, electSingleProviders, PROVIDER_CONFLICT, providerConflictMessage, resolveExtensions, } from "./resolve.js";
40
44
  import { ReplicaStatusStore, } from "./sources.js";
41
45
  import { PackageShaMismatchError, packageRootOf } from "./sync.js";
42
- /** 键排序后的 JSON(对象键顺序不影响结果);undefined 字段与 JSON.stringify 一样省略。 */
43
- const canonicalJson = (v) => {
44
- if (Array.isArray(v))
45
- return `[${v.map((x) => (x === undefined ? "null" : canonicalJson(x))).join(",")}]`;
46
- if (v !== null && typeof v === "object") {
47
- const entries = Object.entries(v)
48
- .filter(([, x]) => x !== undefined)
49
- .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
50
- return `{${entries.map(([k, x]) => `${JSON.stringify(k)}:${canonicalJson(x)}`).join(",")}}`;
51
- }
52
- return JSON.stringify(v) ?? "null";
53
- };
54
- /** 遮蔽 secret 字段后参与摘要的固定占位值。 */
55
- const SECRET_PLACEHOLDER = "<secret>";
56
- /**
57
- * 插件部署配置(校验后)中非密钥部分的摘要:先把 schema 里所有 secret 叶子(`configFields` 可达路径,
58
- * 加载时 `assertSecretsReachable` 已保证密钥都在这些路径上)换成固定占位值,再取 sha256(键排序 JSON) 前 16 位十六进制。
59
- * 给需要「配置变了就失效」的缓存键用(如模型列表)。密钥不参与摘要:不加盐的短摘要写进 Redis 键名后,
60
- * 低熵密钥可被离线猜测、泄露的密钥可被确认;代价是轮换密钥不会让缓存失效(缓存内容本来就不该依赖密钥)。
61
- * 没有部署配置 schema 时无从得知哪些是密钥,摘要不按配置区分。同一份配置在各副本上得到同一摘要。
62
- * 函数自己按 schema 遮蔽,调用方不必(也不能忘记)先打码。
63
- */
64
- export function deploymentConfigHash(schema, config) {
65
- let redacted = null;
66
- if (schema) {
67
- redacted = structuredClone(config);
68
- if (redacted !== null && typeof redacted === "object") {
69
- for (const f of configFields(schema)) {
70
- if (f.meta?.secret && getPath(redacted, f.path) !== undefined) {
71
- setPath(redacted, f.path, SECRET_PLACEHOLDER);
72
- }
73
- }
74
- }
75
- }
76
- return createHash("sha256").update(canonicalJson(redacted)).digest("hex").slice(0, 16);
77
- }
46
+ export { deploymentConfigHash };
78
47
  const CLOSED_DURING_LOAD = "plugin host closed during load";
79
48
  /** 停机时等进行中的 unload / reload 的上限(之后直接关闭 setup 中的 ctx、撤销其余实例)。 */
80
49
  const CLOSE_LIFECYCLE_WAIT_MS = 2_000;
@@ -162,8 +131,31 @@ async function permissionSets(ordered, dirs) {
162
131
  }
163
132
  return sets;
164
133
  }
134
+ /**
135
+ * The single-provider extension points `manifest` provides that `others` already provide, with
136
+ * those providers (a `conflict` pending's {@link PendingExtension.conflicts}).
137
+ */
138
+ function conflictsOf(manifest, others) {
139
+ return manifest.provides
140
+ .filter((ref) => EXTENSION_POINT_CARDINALITY[parseExtensionPoint(ref).name] === "single")
141
+ .map((extensionPoint) => ({
142
+ extensionPoint,
143
+ providers: others
144
+ .filter((m) => m.name !== manifest.name && m.provides.includes(extensionPoint))
145
+ .map((m) => m.name),
146
+ }))
147
+ .filter((c) => c.providers.length > 0);
148
+ }
149
+ /** The replica status reason of a pending extension (`new` / `added` are both `approval`). */
150
+ function pendingReasonOf(p) {
151
+ return p.reason === "dependency" || p.reason === "conflict" ? p.reason : "approval";
152
+ }
165
153
  /** 待批准插件的 warn 日志:点名插件、原因与新增项(依赖原因写明阻塞的能力与提供方)。 */
166
154
  function warnPending(log, p) {
155
+ if (p.reason === "conflict") {
156
+ log.warn("extension not loaded: it provides a single-provider extension point another extension already provides (disable that one and this one loads, no restart)", { plugin: p.plugin, version: p.version, conflicts: p.conflicts });
157
+ return;
158
+ }
167
159
  if (p.reason === "dependency") {
168
160
  const missing = (p.blockedBy ?? []).some((b) => b.providers.length === 0);
169
161
  log.warn(missing
@@ -171,7 +163,7 @@ function warnPending(log, p) {
171
163
  : "extension not loaded: a required extension point is only provided by extensions awaiting permission approval", { plugin: p.plugin, version: p.version, blockedBy: p.blockedBy });
172
164
  return;
173
165
  }
174
- log.warn("extension not loaded: permissions awaiting approval (an enterprise admin approves it in the admin console, or run `capybara extensions review`, then `capybara extensions approve <name>`; running replicas load it without a restart)", { plugin: p.plugin, version: p.version, reason: p.reason, added: p.added, removed: p.removed });
166
+ log.warn("extension not loaded: permissions awaiting approval (a super admin approves it in the admin console, or run `capybara extensions review`, then `capybara extensions approve <name>`; running replicas load it without a restart)", { plugin: p.plugin, version: p.version, reason: p.reason, added: p.added, removed: p.removed });
175
167
  }
176
168
  /**
177
169
  * 跑单个插件的迁移(`migrationsDir` 为迁移目录的绝对路径;没有迁移时为 undefined);返回已应用的文件,
@@ -234,6 +226,7 @@ let ExtensionHost = class ExtensionHost {
234
226
  status;
235
227
  config;
236
228
  log;
229
+ effective;
237
230
  /**
238
231
  * Only resolves extensions and runs migrations in dependency order: no deployment config check, no
239
232
  * setup, no Redis (for `capybara migrate`). Like `load()` it checks secret markers first
@@ -298,12 +291,18 @@ let ExtensionHost = class ExtensionHost {
298
291
  for (const manifest of ordered)
299
292
  assertSecretsReachable(manifest);
300
293
  const sets = await permissionSets(ordered, dirs);
301
- return ordered.map((manifest) => ({
302
- source: "config",
303
- manifest,
304
- dir: dirs.get(manifest.name),
305
- permissions: sets.get(manifest.name),
306
- }));
294
+ const out = [];
295
+ for (const manifest of ordered) {
296
+ const dir = dirs.get(manifest.name);
297
+ out.push({
298
+ source: "config",
299
+ manifest,
300
+ dir,
301
+ permissions: sets.get(manifest.name),
302
+ displayName: (await declaredDisplayName(dir, manifest.name)).displayName ?? null,
303
+ });
304
+ }
305
+ return out;
307
306
  }
308
307
  /**
309
308
  * M-1: plugin → mount points where deployment state expects `policy` hooks. A per-replica copy of PG
@@ -335,6 +334,11 @@ let ExtensionHost = class ExtensionHost {
335
334
  * 安装记录不在这里:每次 converge 都按 PG 期望状态重新判定。
336
335
  */
337
336
  pendingActivations = new Map();
337
+ /**
338
+ * The load parameters of each config-declared extension that loaded: when its deployment config
339
+ * is cleared and the rest is invalid it goes back to {@link pendingActivations} (pending config).
340
+ */
341
+ declaredActivations = new Map();
338
342
  /** 安装记录准备好的候选(按插件名;sha 变了就作废)。 */
339
343
  prepared = new Map();
340
344
  /** 闸门放行后导入过的安装记录真实清单(按插件名;部署配置 schema 用,含待配置而未加载的)。 */
@@ -351,6 +355,11 @@ let ExtensionHost = class ExtensionHost {
351
355
  retiring = new Map();
352
356
  /** 配置声明插件的清单与权限集合(含未加载的;后台列表与网页批准用)。 */
353
357
  declaredInfo = new Map();
358
+ /**
359
+ * Config-declared extensions' display names, read from their plugin directory's plugin.json at
360
+ * load (from the startup config, the same on every replica; never written elsewhere).
361
+ */
362
+ declaredDisplayNames = new Map();
354
363
  /** 导入过的插件名 → 来源与包(含未加载的;重名被跳过的一方不在这里)。 */
355
364
  sources = new Map();
356
365
  didLoad = false;
@@ -370,6 +379,8 @@ let ExtensionHost = class ExtensionHost {
370
379
  configValidity = new Map();
371
380
  /** 已告警过的「部署配置不合法」(插件名 → 说明;每个周期都会重新判定,同一说明只告警一次)。 */
372
381
  configWarned = new Map();
382
+ /** `<name>@<version>` whose invalid config UI hints were warned about (a log dedupe only). */
383
+ configUiWarned = new Set();
373
384
  /**
374
385
  * The host builds each extension's `ctx` from the injected kernel services: the pool for
375
386
  * `ctx.db` on the extension's schema, Redis for `kv` / `lock` / `bus` and the queues, the
@@ -393,14 +404,32 @@ let ExtensionHost = class ExtensionHost {
393
404
  */
394
405
  installs, approvals,
395
406
  /** This replica's load status table (`extension_replica_status`): every load result writes a row. */
396
- status, config, kdb, redis, busSubscriber, keyring, embedTokens, locks, log, options) {
407
+ status, config, kdb, redis, busSubscriber, keyring, embedTokens, locks, log, options,
408
+ /**
409
+ * Each hook call's effective config for its organization, and the providers excluded from an
410
+ * org's point resolution (layering spec A §6).
411
+ */
412
+ effective,
413
+ /** `ctx.models`: the embeddings broker (spec B §5.4). */
414
+ models) {
397
415
  this.registry = registry;
398
416
  this.installs = installs;
399
417
  this.approvals = approvals;
400
418
  this.status = status;
401
419
  this.config = config;
402
420
  this.log = log;
421
+ this.effective = effective;
403
422
  const c = config.get();
423
+ this.hooks = new HookRegistry({
424
+ instances: () => this.registry.all(),
425
+ current: (plugin) => this.registry.current(plugin),
426
+ expectedPolicy: (mount) => this.expectedPolicy(mount),
427
+ enabledPlugins: (orgId) => this.enabledPlugins(orgId),
428
+ effectiveConfig: (orgId, plugin) => effective.get(orgId, plugin),
429
+ locks,
430
+ config: () => ({ hooks: { timeoutMs: this.config.get().hooks.timeoutMs } }),
431
+ log,
432
+ });
404
433
  this.deps = {
405
434
  db: kdb.pool,
406
435
  dbUrl: c.db.url,
@@ -410,19 +439,13 @@ let ExtensionHost = class ExtensionHost {
410
439
  redisUrl: c.redis.url,
411
440
  keyring,
412
441
  embedTokens,
442
+ models,
443
+ // ctx.models.embed fires model.request through the same registry (spec B §5.4)
444
+ hooks: this.hooks,
413
445
  locks,
414
446
  runWorkers: c.roles.includes("worker"),
415
447
  log,
416
448
  };
417
- this.hooks = new HookRegistry({
418
- instances: () => this.registry.all(),
419
- current: (plugin) => this.registry.current(plugin),
420
- expectedPolicy: (mount) => this.expectedPolicy(mount),
421
- enabledPlugins: (orgId) => this.enabledPlugins(orgId),
422
- locks,
423
- config: () => ({ hooks: { timeoutMs: this.config.get().hooks.timeoutMs } }),
424
- log,
425
- });
426
449
  this.registry.onChange(() => {
427
450
  this.installedCache = undefined;
428
451
  });
@@ -461,6 +484,8 @@ let ExtensionHost = class ExtensionHost {
461
484
  manifest: p.manifest,
462
485
  set: p.permissions,
463
486
  });
487
+ if (p.displayName)
488
+ this.declaredDisplayNames.set(p.manifest.name, p.displayName);
464
489
  const valid = configValid.get(p.manifest.name);
465
490
  if (valid !== undefined)
466
491
  this.configValidity.set(p.manifest.name, valid);
@@ -516,6 +541,7 @@ let ExtensionHost = class ExtensionHost {
516
541
  this.installLoader = p.installs;
517
542
  const entries = await importEntries(p.config ?? [], this.resolveFrom);
518
543
  await this.claimNames(entries);
544
+ await this.noteDisplayNames(entries);
519
545
  const dirs = new Map(entries.map((e) => [e.manifest.name, e.dir]));
520
546
  const urls = new Map(entries.map((e) => [e.manifest.name, e.url]));
521
547
  // 有安装记录时:配置声明的插件若 requires 只能由安装记录满足,先挑出来,等安装记录加载完再解析与加载
@@ -568,7 +594,7 @@ let ExtensionHost = class ExtensionHost {
568
594
  // the first pass unloads nothing; the second skips what the first loaded.
569
595
  const inPg = desired.filter((d) => d.blobStore === "pg");
570
596
  if (inPg.length > 0 && inPg.length < desired.length) {
571
- await this.applyInstalls(p.installs, inPg, true);
597
+ await this.applyInstalls(p.installs, inPg, true, desired);
572
598
  }
573
599
  installProviders = await this.applyInstalls(p.installs, desired, true);
574
600
  }
@@ -584,6 +610,23 @@ let ExtensionHost = class ExtensionHost {
584
610
  });
585
611
  }
586
612
  }
613
+ /**
614
+ * Records each config-declared extension's display name from its plugin directory's plugin.json
615
+ * (spec §2.2); an invalid plugin.json only warns (no display name).
616
+ */
617
+ async noteDisplayNames(entries) {
618
+ for (const e of entries) {
619
+ const { displayName, problem } = await declaredDisplayName(e.dir, e.manifest.name);
620
+ if (displayName)
621
+ this.declaredDisplayNames.set(e.manifest.name, displayName);
622
+ if (problem !== undefined) {
623
+ this.log.warn("plugin.json of a config-declared extension is invalid; no display name", {
624
+ plugin: e.manifest.name,
625
+ problem,
626
+ });
627
+ }
628
+ }
629
+ }
587
630
  /**
588
631
  * Config-declared extensions also take their name (I4, an addition to Ruling P3): the
589
632
  * name is inserted into `extension_name_owners` with its npm package name (left alone when present).
@@ -683,10 +726,23 @@ let ExtensionHost = class ExtensionHost {
683
726
  * 4. 运行中(非启动):对变了的能力做依赖方连锁(本轮刚加载的除外),此前因依赖卸下的插件随之补回。
684
727
  * 返回启用的安装记录在静态清单里声明提供的能力(启动第 4 步据此判断待定还是缺提供方)。
685
728
  */
686
- async applyInstalls(loader, desired, startup) {
729
+ async applyInstalls(loader, desired, startup,
730
+ /**
731
+ * Every install record desired enabled, in {@link ExtensionInstalls.desired} order (the
732
+ * single-provider election runs over all of them even when `desired` is the startup's first
733
+ * pass over the packages kept in PG).
734
+ */
735
+ electAmong = desired) {
687
736
  const declared = this.declared();
688
737
  const installProviders = new Map();
689
738
  const wanted = new Map();
739
+ // Single-provider election: of the enabled install records providing one single-provider
740
+ // extension point, only the earliest enabled is loaded (desired() order: enabled_at, install
741
+ // time, name). Decided from PG alone, never from what loaded here, so every replica and every
742
+ // restart picks the same one. Two enabled providers only remain from before a second enable
743
+ // was refused; the others are pending / conflict until the super admin disables one. A loser
744
+ // provides nothing (left out of `installProviders`, so `blockedBy` never names it).
745
+ const { losers } = electSingleProviders(electAmong.filter((d) => !declared.has(d.name)));
690
746
  for (const d of desired) {
691
747
  const taken = declared.get(d.name);
692
748
  if (taken) {
@@ -698,6 +754,8 @@ let ExtensionHost = class ExtensionHost {
698
754
  }
699
755
  continue;
700
756
  }
757
+ if (losers.has(d.name))
758
+ continue;
701
759
  wanted.set(d.name, d);
702
760
  // 按审阅过的静态清单(不论随后加载成败)
703
761
  for (const cap of d.section.manifest.provides) {
@@ -716,7 +774,7 @@ let ExtensionHost = class ExtensionHost {
716
774
  changed.push(...gone.manifest.provides);
717
775
  }
718
776
  for (const [name, row] of [...this.installRows]) {
719
- if (wanted.has(name) || this.registry.current(name))
777
+ if (wanted.has(name) || losers.has(name) || this.registry.current(name))
720
778
  continue;
721
779
  this.dropPending(name);
722
780
  this.prepared.delete(name);
@@ -774,22 +832,30 @@ let ExtensionHost = class ExtensionHost {
774
832
  }
775
833
  for (const c of remaining) {
776
834
  let detail = "cannot resolve the plugin's dependencies";
835
+ let conflict = false;
777
836
  try {
778
837
  tryResolve(c);
779
838
  }
780
839
  catch (e) {
781
840
  detail = errMsg(e);
841
+ conflict = e instanceof ExtensionResolveError && e.code === PROVIDER_CONFLICT;
782
842
  }
843
+ // A single-provider point another extension already provides: a conflict, not a missing
844
+ // dependency. Converge tries it again on every pass, so it loads once the other is gone.
845
+ const reason = conflict ? "conflict" : "dependency";
783
846
  this.notePending({
784
847
  plugin: c.d.name,
785
848
  version: c.d.version,
786
849
  added: [],
787
850
  removed: [],
788
- reason: "dependency",
851
+ reason,
789
852
  blockedBy: (c.manifest.requires ?? []).map((extensionPoint) => ({
790
853
  extensionPoint,
791
854
  providers: (installProviders.get(extensionPoint) ?? []).filter((n) => n !== c.d.name),
792
855
  })),
856
+ ...(conflict && {
857
+ conflicts: conflictsOf(c.manifest, [...base(), ...accepted.map((a) => a.manifest)]),
858
+ }),
793
859
  });
794
860
  await this.writeStatus({
795
861
  plugin: c.d.name,
@@ -797,11 +863,12 @@ let ExtensionHost = class ExtensionHost {
797
863
  sha256: c.d.sha256,
798
864
  source: "install",
799
865
  state: "pending",
800
- reason: "dependency",
866
+ reason,
801
867
  detail,
802
868
  });
803
869
  }
804
870
  if (accepted.length === 0) {
871
+ await this.noteLosers(desired, losers);
805
872
  if (!startup && changed.length > 0)
806
873
  await this.cascade(changed, drainMs);
807
874
  return installProviders;
@@ -841,10 +908,42 @@ let ExtensionHost = class ExtensionHost {
841
908
  changed.push(...inst.manifest.provides, ...(old?.manifest.provides ?? []));
842
909
  }
843
910
  }
911
+ await this.noteLosers(desired, losers);
844
912
  if (!startup && changed.length > 0)
845
913
  await this.cascade(changed, drainMs, activated);
846
914
  return installProviders;
847
915
  }
916
+ /**
917
+ * Marks the losers of the single-provider election pending / conflict, naming the winner; after
918
+ * this pass loaded what it could, so a winner not loaded here (failed, pending) is known: the
919
+ * election stays (replicas must agree), but the loser's detail says the point has no running
920
+ * provider and the admin view warns about it.
921
+ */
922
+ async noteLosers(desired, losers) {
923
+ for (const d of desired) {
924
+ const lost = losers.get(d.name);
925
+ if (!lost)
926
+ continue;
927
+ const unloaded = this.registry.current(lost.winner) === undefined;
928
+ this.notePending({
929
+ plugin: d.name,
930
+ version: d.version,
931
+ added: [],
932
+ removed: [],
933
+ reason: "conflict",
934
+ conflicts: [{ extensionPoint: lost.extensionPoint, providers: [lost.winner] }],
935
+ });
936
+ await this.writeStatus({
937
+ plugin: d.name,
938
+ version: d.version,
939
+ sha256: d.sha256,
940
+ source: "install",
941
+ state: "pending",
942
+ reason: "conflict",
943
+ detail: providerConflictMessage(lost.extensionPoint, [lost.winner, d.name], unloaded ? lost.winner : undefined),
944
+ });
945
+ }
946
+ }
848
947
  /**
849
948
  * The load candidate of an install record: sync it locally, then compute the permission set from
850
949
  * the reviewed static manifest and the package's migration SQL (the same algorithm as
@@ -1032,6 +1131,39 @@ let ExtensionHost = class ExtensionHost {
1032
1131
  });
1033
1132
  }
1034
1133
  }
1134
+ /**
1135
+ * Checks the config UI hints of a loaded module's deployment and org schemas (spec §4.1). Invalid
1136
+ * hints never fail the load: the form schemas drop their `x-ui` (`configFormSchema`), one warning
1137
+ * per `<name>@<version>` is logged, and the returned text goes into the status detail (null when
1138
+ * every hint is valid). The packer refuses such a package; this covers hand-made ones. It never
1139
+ * throws (it runs after the instance is active, before its status row is written): a conversion
1140
+ * that throws is warned about and reported in the detail the same way.
1141
+ */
1142
+ checkConfigUi(manifest) {
1143
+ const parts = [];
1144
+ for (const level of ["deployment", "org"]) {
1145
+ const schema = manifest.config?.[level];
1146
+ if (!schema)
1147
+ continue;
1148
+ try {
1149
+ const { problems } = configFormSchema(schema, level);
1150
+ if (problems.length > 0)
1151
+ parts.push(describeConfigUiProblems(level, problems));
1152
+ }
1153
+ catch (err) {
1154
+ parts.push(`${level} config UI hints could not be checked (${err instanceof Error ? err.message : String(err)})`);
1155
+ }
1156
+ }
1157
+ if (parts.length === 0)
1158
+ return null;
1159
+ const detail = parts.join("; ");
1160
+ const key = `${manifest.name}@${manifest.version}`;
1161
+ if (!this.configUiWarned.has(key)) {
1162
+ this.configUiWarned.add(key);
1163
+ this.log.warn("extension config UI hints are invalid and ignored: its config forms show plain fields", { plugin: manifest.name, version: manifest.version, detail });
1164
+ }
1165
+ return detail;
1166
+ }
1035
1167
  /** 给已有状态行补说明;失败只记 warn。 */
1036
1168
  async noteStatus(plugin, detail) {
1037
1169
  try {
@@ -1044,15 +1176,24 @@ let ExtensionHost = class ExtensionHost {
1044
1176
  /**
1045
1177
  * 写本副本的加载状态;失败只记 warn(状态是给后台看的,不影响加载)。这一行的版本没加载成(failed / pending)
1046
1178
  * 而本副本仍有别的版本在跑时,记下那个版本(`servingVersion`,后台同时显示「新版失败、旧版仍在服务」)。
1179
+ * `servingSha256` is the package this replica actually serves for the plugin (client code follows
1180
+ * it, client extensions spec §9.3): the row's own package when loaded; for a failed / pending row
1181
+ * the package of the instance still running here (an older one, or the row's own package when it
1182
+ * stays loaded, e.g. beside a provider conflict), else null.
1047
1183
  */
1048
1184
  async writeStatus(s) {
1049
- if (s.servingVersion === undefined && (s.state === "failed" || s.state === "pending")) {
1050
- const cur = this.registry.current(s.plugin);
1051
- s = {
1052
- ...s,
1053
- servingVersion: cur && (cur.sha256 !== s.sha256 || cur.version !== s.version) ? cur.version : null,
1054
- };
1055
- }
1185
+ const waiting = s.state === "failed" || s.state === "pending";
1186
+ const cur = waiting ? this.registry.current(s.plugin) : undefined;
1187
+ const other = cur && (cur.sha256 !== s.sha256 || cur.version !== s.version) ? cur : null;
1188
+ s = {
1189
+ ...s,
1190
+ ...(waiting && s.servingVersion === undefined && { servingVersion: other?.version ?? null }),
1191
+ servingSha256: s.servingSha256 !== undefined
1192
+ ? s.servingSha256
1193
+ : s.state === "loaded"
1194
+ ? s.sha256
1195
+ : (cur?.sha256 ?? null),
1196
+ };
1056
1197
  if (s.source === "install") {
1057
1198
  if (s.state === "unloaded")
1058
1199
  this.installRows.delete(s.plugin);
@@ -1123,7 +1264,9 @@ let ExtensionHost = class ExtensionHost {
1123
1264
  return undefined;
1124
1265
  }
1125
1266
  let config = raw;
1126
- const parsed = readConfig ? schema?.safeParse(raw) : undefined;
1267
+ // the load gate (spec A §5.4a): overridable fields may stay empty on the platform, so
1268
+ // `ctx.config` may lack them; hidden and read-only fields must be complete
1269
+ const parsed = readConfig && schema ? parseLoadGate(schema, raw) : undefined;
1127
1270
  if (a.source !== "install")
1128
1271
  this.configValidity.set(name, parsed?.success ?? true);
1129
1272
  if (decision.action === "pending") {
@@ -1138,7 +1281,7 @@ let ExtensionHost = class ExtensionHost {
1138
1281
  before.reason !== decision.pending.reason) {
1139
1282
  warnPending(this.log, decision.pending);
1140
1283
  }
1141
- const reason = decision.pending.reason === "dependency" ? "dependency" : "approval";
1284
+ const reason = pendingReasonOf(decision.pending);
1142
1285
  await this.writeStatus({ ...base, state: "pending", reason, detail: null });
1143
1286
  return undefined;
1144
1287
  }
@@ -1157,9 +1300,9 @@ let ExtensionHost = class ExtensionHost {
1157
1300
  // 权限变少、不变(版本变了)或只多出视图(ui.view:*,不卡加载):直接加载,快照跟上当前清单。
1158
1301
  // 补进视图不写审计(与 autoApprove 一样,Ruling A4),只记日志
1159
1302
  const updated = await approvals.refresh(name, manifest.version, a.set);
1160
- const merged = decision.added.filter((k) => k.startsWith(UI_VIEW_KEY_PREFIX));
1303
+ const merged = decision.added.filter((k) => k.startsWith(UI_VIEW_KEY_PREFIX) || k.startsWith(SETUP_CHECK_KEY_PREFIX));
1161
1304
  if (updated && merged.length > 0 && blockingKeys(decision.added).length === 0) {
1162
- this.log.info("plugin ui views merged into the permission snapshot", {
1305
+ this.log.info("plugin ui views and setup checks merged into the permission snapshot", {
1163
1306
  plugin: name,
1164
1307
  version: manifest.version,
1165
1308
  merged,
@@ -1244,10 +1387,17 @@ let ExtensionHost = class ExtensionHost {
1244
1387
  }
1245
1388
  // 升级:替换加载参数(之后的依赖方连锁与 reload 用新版本),先登记新实例、再撤销旧实例
1246
1389
  this.specs.set(name, spec);
1390
+ if (a.source !== "install")
1391
+ this.declaredActivations.set(name, a);
1247
1392
  this.unloadedForDependency.delete(name);
1248
1393
  const old = this.registry.activate(inst);
1249
1394
  this.loggedFailures.delete(name);
1250
- await this.writeStatus({ ...base, state: "loaded", reason: null, detail: null });
1395
+ await this.writeStatus({
1396
+ ...base,
1397
+ state: "loaded",
1398
+ reason: null,
1399
+ detail: this.checkConfigUi(manifest),
1400
+ });
1251
1401
  if (old)
1252
1402
  this.retire(old);
1253
1403
  return inst;
@@ -1293,7 +1443,8 @@ let ExtensionHost = class ExtensionHost {
1293
1443
  permissions: d.set,
1294
1444
  configurable: schema !== undefined,
1295
1445
  configValid: this.configValidity.get(name) ??
1296
- (schema ? schema.safeParse(this.extensionConfig[name] ?? {}).success : true),
1446
+ (schema ? parseLoadGate(schema, this.extensionConfig[name] ?? {}).success : true),
1447
+ displayName: this.declaredDisplayNames.get(name) ?? null,
1297
1448
  };
1298
1449
  });
1299
1450
  }
@@ -1491,7 +1642,7 @@ let ExtensionHost = class ExtensionHost {
1491
1642
  this.pendingPlugins.push(p);
1492
1643
  if (before?.reason === p.reason)
1493
1644
  return;
1494
- const reason = p.reason === "dependency" ? "dependency" : "approval";
1645
+ const reason = pendingReasonOf(p);
1495
1646
  await this.writeStatus({
1496
1647
  plugin: p.plugin,
1497
1648
  version: a.manifest.version,
@@ -1531,6 +1682,7 @@ let ExtensionHost = class ExtensionHost {
1531
1682
  .all()
1532
1683
  .flatMap((i) => i.provided.has(ref) ? [{ plugin: i.name, impl: i.provided.get(ref) }] : []),
1533
1684
  enabledPlugins: (orgId) => this.enabledPlugins(orgId),
1685
+ configOk: async (orgId, plugin) => (await this.effective.get(orgId, plugin)).ok,
1534
1686
  };
1535
1687
  get loadDeps() {
1536
1688
  return {
@@ -1569,7 +1721,7 @@ let ExtensionHost = class ExtensionHost {
1569
1721
  },
1570
1722
  });
1571
1723
  if (timeoutMs === undefined)
1572
- return p;
1724
+ return p.then((inst) => this.logUiResolution(inst));
1573
1725
  let timer;
1574
1726
  let onClose = () => { };
1575
1727
  const stop = new Promise((resolve) => {
@@ -1582,8 +1734,9 @@ let ExtensionHost = class ExtensionHost {
1582
1734
  });
1583
1735
  try {
1584
1736
  const r = await Promise.race([p.then((inst) => ({ inst })), stop]);
1737
+ // a late instance that is disposed right away never logs its UI resolution
1585
1738
  if (typeof r === "object")
1586
- return r.inst;
1739
+ return this.logUiResolution(r.inst);
1587
1740
  // setup 迟迟不返回:关闭它的 ctx(此后它的登记立即撤销),迟到完成的实例直接撤销
1588
1741
  p.then((inst) => this.disposeQuietly(inst, 0), () => { });
1589
1742
  if (this.settingUp === ctx)
@@ -1600,6 +1753,20 @@ let ExtensionHost = class ExtensionHost {
1600
1753
  this.abort.signal.removeEventListener("abort", onClose);
1601
1754
  }
1602
1755
  }
1756
+ /** Logs once per load what slot resolution left out or flagged (UI slots spec §3.2). */
1757
+ logUiResolution(inst) {
1758
+ const at = { plugin: inst.name, version: inst.version };
1759
+ if (inst.uiDropped.length > 0) {
1760
+ this.log.warn("plugin ui contributions dropped", { ...at, dropped: inst.uiDropped });
1761
+ }
1762
+ if (inst.uiUnknownAnchors.length > 0) {
1763
+ this.log.warn("plugin ui anchors unknown", { ...at, anchors: inst.uiUnknownAnchors });
1764
+ }
1765
+ if (inst.uiDeprecatedPlace.length > 0) {
1766
+ this.log.info("plugin ui uses the deprecated place", { ...at, ids: inst.uiDeprecatedPlace });
1767
+ }
1768
+ return inst;
1769
+ }
1603
1770
  /** 取能力实现:单选能力无需 providerName,多选能力必须指定。 */
1604
1771
  get(capability, providerName) {
1605
1772
  const providers = this.registry.all().filter((i) => i.provided.has(capability));
@@ -1638,6 +1805,15 @@ let ExtensionHost = class ExtensionHost {
1638
1805
  deploymentConfig(plugin) {
1639
1806
  return this.registry.deploymentConfig(plugin);
1640
1807
  }
1808
+ /**
1809
+ * The raw (unparsed) deployment config of a running extension: the startup config merged with
1810
+ * the PG values, as the host reads it before parsing (secrets included; never echo it). An org
1811
+ * copy is applied to this and parsed once (layering spec A §6), so schema transforms are not
1812
+ * run twice. Without a running instance, the stored values without a schema.
1813
+ */
1814
+ rawDeploymentConfig(plugin) {
1815
+ return this.rawConfigOf(plugin, this.registry.current(plugin)?.manifest.config?.deployment);
1816
+ }
1641
1817
  /**
1642
1818
  * 本副本拿得到的插件清单里的部署级 schema(生效实例 → 配置声明 → 安装记录准备好的候选);
1643
1819
  * 都没有返回 undefined(如未加载的安装记录:调用方改用包内静态清单)。
@@ -1658,7 +1834,9 @@ let ExtensionHost = class ExtensionHost {
1658
1834
  /**
1659
1835
  * 部署配置保存后(`kernel.plugin-deployment-config`)本副本重读并校验(C10;与 unload / reload 串行):
1660
1836
  * - 插件没在本副本生效 → `not_loaded`(配置声明的刷新后台的合法性判定;待配置的由 reconcile 加载);
1661
- * - 不合法 → `invalid`:保持当前值,告警;
1837
+ * - 不合法 → `invalid`:保持当前值,告警;但 PG 里已没有保存的配置(超级管理员清空了,`DELETE
1838
+ * /api/v1/admin/extensions/:name/config`)、剩下的来源(启动配置、默认值)又不够时 → `unloaded`:卸下实例、
1839
+ * 记为待配置(pending / config),依赖方连锁;重新配好后由 reconcile 加载;
1662
1840
  * - 没变 → `unchanged`;只改了 hot 字段 → `hot`:就地替换,插件经 `ctx.config` 读到新值,不重新 setup;
1663
1841
  * - 改了非 hot 字段 → `reload`:用新配置重新加载实例(先新后旧,排空在途调用),依赖方连锁;
1664
1842
  * 重新加载失败旧实例保留(`reload_failed`,记 error)。
@@ -1673,7 +1851,7 @@ let ExtensionHost = class ExtensionHost {
1673
1851
  if (schema) {
1674
1852
  try {
1675
1853
  const raw = await this.rawConfigOf(plugin, schema);
1676
- this.configValidity.set(plugin, schema.safeParse(raw).success);
1854
+ this.configValidity.set(plugin, parseLoadGate(schema, raw).success);
1677
1855
  }
1678
1856
  catch (err) {
1679
1857
  this.log.warn("cannot read the stored deployment config of plugin", {
@@ -1695,8 +1873,12 @@ let ExtensionHost = class ExtensionHost {
1695
1873
  this.log.error("cannot read the stored deployment config of plugin; keeping its current config", { plugin, err });
1696
1874
  return "invalid";
1697
1875
  }
1698
- const r = schema.safeParse(raw);
1876
+ const r = parseLoadGate(schema, raw);
1699
1877
  if (!r.success) {
1878
+ if (await this.clearedInPg(plugin)) {
1879
+ await this.unloadForMissingConfig(inst, toIssues(r.error));
1880
+ return "unloaded";
1881
+ }
1700
1882
  this.log.warn("plugin deployment config changed but is invalid on this replica; keeping the current config", {
1701
1883
  plugin,
1702
1884
  detail: toIssues(r.error)
@@ -1746,6 +1928,95 @@ let ExtensionHost = class ExtensionHost {
1746
1928
  return "reload";
1747
1929
  });
1748
1930
  }
1931
+ /** PG holds no deployment config for the plugin (it was cleared); a read error counts as no. */
1932
+ async clearedInPg(plugin) {
1933
+ try {
1934
+ return !(await this.installs.hasStoredDeploymentConfig(plugin));
1935
+ }
1936
+ catch (err) {
1937
+ this.log.warn("cannot read whether the plugin has a stored deployment config", {
1938
+ plugin,
1939
+ err,
1940
+ });
1941
+ return false;
1942
+ }
1943
+ }
1944
+ /**
1945
+ * Unloads an extension whose deployment config was cleared and is now missing or invalid (in
1946
+ * the host's serial queue): drains it, records pending / config (a config-declared one goes back
1947
+ * to {@link pendingActivations}; an install record is decided again on every converge) and
1948
+ * cascades to its dependents. It loads again without a restart once it is configured.
1949
+ */
1950
+ async unloadForMissingConfig(inst, issues) {
1951
+ const plugin = inst.name;
1952
+ const drainMs = this.drainMs();
1953
+ const gone = await this.doUnload(plugin, drainMs, null);
1954
+ if (!gone)
1955
+ return;
1956
+ await this.markPendingConfig({ plugin, version: gone.version, sha256: gone.sha256, source: gone.source }, issues, "extension unloaded: its deployment config was cleared and what remains is missing or invalid (set it in the admin console or the startup config; it loads without a restart)");
1957
+ await this.cascade(gone.manifest.provides, drainMs);
1958
+ }
1959
+ /**
1960
+ * Records an extension that is not loaded as pending configuration: a config-declared one goes
1961
+ * back to {@link pendingActivations} (a later save loads it); an install record is decided again
1962
+ * on every converge.
1963
+ */
1964
+ async markPendingConfig(p, issues, message) {
1965
+ const detail = issues.map((i) => `${i.path || "<root>"}: ${i.message}`).join("; ");
1966
+ const declared = this.declaredActivations.get(p.plugin);
1967
+ if (p.source !== "install") {
1968
+ this.configValidity.set(p.plugin, false);
1969
+ if (declared)
1970
+ this.pendingActivations.set(p.plugin, { ...declared, fatal: false });
1971
+ }
1972
+ this.configWarned.set(p.plugin, detail);
1973
+ this.log.warn(message, { plugin: p.plugin, source: p.source, detail });
1974
+ await this.writeStatus({ ...p, state: "pending", reason: "config", detail });
1975
+ }
1976
+ /**
1977
+ * Before an extension unloaded for a dependency comes back ({@link cascade}): re-reads its
1978
+ * deployment config, which may have been saved or cleared while it was down (applyDeploymentConfig
1979
+ * only records validity then), and refreshes its load parameters, so it never returns on a stale
1980
+ * config or revoked secrets. Returns false when the config is now missing or invalid and PG holds
1981
+ * none: the extension is left pending configuration instead. A read error, or an invalid config
1982
+ * that is still stored, keeps the previous config (as for a loaded extension).
1983
+ */
1984
+ async refreshConfigForRestore(name, spec) {
1985
+ const schema = spec.manifest.config?.deployment;
1986
+ if (!schema)
1987
+ return true;
1988
+ let raw;
1989
+ try {
1990
+ raw = await this.rawConfigOf(name, schema);
1991
+ }
1992
+ catch (err) {
1993
+ this.log.error("cannot read the stored deployment config of plugin; restoring it on its previous config", { plugin: name, err });
1994
+ return true;
1995
+ }
1996
+ const r = parseLoadGate(schema, raw);
1997
+ if (!r.success) {
1998
+ if (!(await this.clearedInPg(name)))
1999
+ return true;
2000
+ await this.markPendingConfig({
2001
+ plugin: name,
2002
+ version: spec.manifest.version,
2003
+ sha256: spec.sha256,
2004
+ source: spec.source,
2005
+ }, toIssues(r.error), "extension not restored after its dependency came back: its deployment config was cleared and what remains is missing or invalid (set it in the admin console or the startup config; it loads without a restart)");
2006
+ return false;
2007
+ }
2008
+ if (spec.source !== "install")
2009
+ this.configValidity.set(name, true);
2010
+ if (changedPaths(schema, spec.config, r.data).length > 0) {
2011
+ this.reportSecrets(schema, r.data);
2012
+ this.specs.set(name, {
2013
+ ...spec,
2014
+ config: r.data,
2015
+ configHash: deploymentConfigHash(schema, r.data),
2016
+ });
2017
+ }
2018
+ return true;
2019
+ }
1749
2020
  /** 本次未加载、等待批准权限的插件(含因 `requires` 只能由它们满足而未加载的插件),按依赖拓扑序。 */
1750
2021
  pending() {
1751
2022
  return structuredClone(this.pendingPlugins);
@@ -1840,17 +2111,25 @@ let ExtensionHost = class ExtensionHost {
1840
2111
  * 是否在某组织启用由调用方另查(每次查询,不缓存)。
1841
2112
  */
1842
2113
  uiContributions() {
1843
- return this.registry.all().flatMap((i) => (i.manifest.ui ?? []).map((c) => {
1844
- const render = c.kind === "view" ? i.uiViews.get(c.id) : undefined;
1845
- const action = c.kind === "view" ? i.uiActions.get(c.id) : undefined;
2114
+ return this.registry.all().flatMap((i) => i.ui.map(({ contribution: c, slot, after }) => {
2115
+ // a view's, or a component's server view (client extensions spec §5.2); embeds have none
2116
+ const served = c.kind === "view" || c.kind === "component";
2117
+ const render = served ? i.uiViews.get(c.id) : undefined;
2118
+ const action = served ? i.uiActions.get(c.id) : undefined;
1846
2119
  return {
1847
2120
  plugin: i.name,
1848
2121
  contribution: c,
2122
+ slot,
2123
+ ...(after !== undefined && { after }),
1849
2124
  ...(render !== undefined && { render }),
1850
2125
  ...(action !== undefined && { action }),
1851
2126
  };
1852
2127
  }));
1853
2128
  }
2129
+ /** The UI contributions the loaded extension left out at load (UI slots spec §3.2); `[]` when not loaded. */
2130
+ uiDropped(name) {
2131
+ return [...(this.registry.current(name)?.uiDropped ?? [])];
2132
+ }
1854
2133
  /** 串行执行生命周期操作(unload / reload 互不交错);宿主关闭后拒绝。 */
1855
2134
  serial(fn) {
1856
2135
  const guarded = () => {
@@ -1947,7 +2226,7 @@ let ExtensionHost = class ExtensionHost {
1947
2226
  source: inst.source,
1948
2227
  state: "loaded",
1949
2228
  reason: null,
1950
- detail: null,
2229
+ detail: this.checkConfigUi(spec.manifest),
1951
2230
  });
1952
2231
  if (old)
1953
2232
  await this.disposeQuietly(old, drainMs);
@@ -2023,6 +2302,10 @@ let ExtensionHost = class ExtensionHost {
2023
2302
  const available = providedNow();
2024
2303
  if (!(spec.manifest.requires ?? []).every((c) => available.has(c)))
2025
2304
  continue;
2305
+ if (!(await this.refreshConfigForRestore(name, spec))) {
2306
+ this.unloadedForDependency.delete(name);
2307
+ continue;
2308
+ }
2026
2309
  try {
2027
2310
  await this.doReload(name, drainMs);
2028
2311
  progress = true;
@@ -2105,6 +2388,8 @@ ExtensionHost = __decorate([
2105
2388
  __param(9, Inject(EmbedTokens)),
2106
2389
  __param(10, Inject(LockService)),
2107
2390
  __param(11, Inject(KERNEL_LOGGER)),
2108
- __param(12, Inject(KERNEL_APP_OPTIONS))
2391
+ __param(12, Inject(KERNEL_APP_OPTIONS)),
2392
+ __param(13, Inject(EffectiveConfigs)),
2393
+ __param(14, Inject(ModelEmbeddings))
2109
2394
  ], ExtensionHost);
2110
2395
  export { ExtensionHost };