@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
@@ -1,20 +1,6 @@
1
1
  import type { KernelSchemaDb } from "../db/kernel-schema.js";
2
2
  import type { DecidePolicy } from "./pipeline.js";
3
3
  import type { ResolvedTool, ToolPolicy } from "./registry.js";
4
- /**
5
- * spec 3.6 R3「有权 ≠ 已确认」固定清单上的工具 key:策略至少为 `ask`,记住的授权也不放行。
6
- *
7
- * R3 清单:发布到公共市场、安装连接器、提插件申请、改角色与成员、删除、改共享技能、改自己的指令。
8
- * M3 的内置工具(`ask_user`、`read_tool_output`、`tool_search`)与连接器工具都不在清单上;M5 T15 加入
9
- * `skill_write`(改共享技能)。后续实现上述动作的内置工具时把 key 登记在这里。连接器 / 插件工具由
10
- * `annotations.requiresUserInteraction` 表达同一约束。
11
- */
12
- export declare const R3_FIXED_ASK_TOOL_KEYS: ReadonlySet<string>;
13
- /**
14
- * R3 清单里只对共享 agent 生效的 key(窄口子):R3 的条目是「改共享技能」,私有 agent(`visibility = private`,
15
- * 只有负责人本人能用)的技能不是共享的,`skill_write` 直接生效、不询问(R4)。其余 R3 条目不论可见性一律固定 ask。
16
- */
17
- export declare const R3_SHARED_AGENT_ONLY_TOOL_KEYS: ReadonlySet<string>;
18
4
  /** 取更严的策略(`allow < ask < deny`)。 */
19
5
  export declare function stricter(a: ToolPolicy, b: ToolPolicy | undefined): ToolPolicy;
20
6
  export interface PolicyInput {
@@ -22,22 +8,43 @@ export interface PolicyInput {
22
8
  connectorDefault: ToolPolicy;
23
9
  /** agent 负责人的收紧(`definition.toolPolicies[key]`)。 */
24
10
  agentOverride?: "ask" | "deny";
25
- /** R3 清单或 `requiresUserInteraction`。 */
11
+ /** `requiresUserInteraction`。 */
26
12
  fixedAsk: boolean;
27
13
  /** 已记住且 specHash 与当前一致的授权。 */
28
14
  grant: "session" | "always" | null;
29
15
  }
30
16
  /**
31
- * 策略判定(纯函数):取组织默认、agent 收紧、R3 固定询问三者中最严者;
32
- * 记住的授权只能把 `ask` 放行为 `allow`,不能越过 `deny`,对 R3 / `requiresUserInteraction` 的工具无效。
17
+ * 策略判定(纯函数):取组织默认、agent 收紧、固定询问三者中最严者;
18
+ * 记住的授权只能把 `ask` 放行为 `allow`,不能越过 `deny`,对 `requiresUserInteraction` 的工具无效。
33
19
  */
34
20
  export declare function decide(input: PolicyInput): ToolPolicy;
35
21
  /**
36
- * 是否属于 R3 固定询问(清单或工具声明需要用户交互)。`visibility` 为 agent 当前的可见性:
37
- * {@link R3_SHARED_AGENT_ONLY_TOOL_KEYS} 里的内置工具在私有 agent 上不算固定询问,
38
- * 除非 agent 当前版本的 `skills.writePolicy` 为 `ask`(`skillWritePolicy`);不知道可见性时按共享处理(更严)。
22
+ * Whether the tool is a fixed ask: its spec declares `requiresUserInteraction`, so its policy is
23
+ * at least `ask` and remembered grants never let it through.
24
+ */
25
+ export declare function isFixedAsk(tool: ResolvedTool): boolean;
26
+ /** Which level decided a connector tool's policy ({@link connectorPolicy}). */
27
+ export type ConnectorPolicySource = "org" | "member" | "agent";
28
+ /**
29
+ * A personal-credential connector tool's policy for one call (maintainer decisions 2026-11-09;
30
+ * an org-credential connector's tool keeps the org default with the agent's tightening only),
31
+ * highest first:
32
+ * 1. the org's default `deny` (a tool the org switched off never gets here: it is unavailable);
33
+ * 2. the member's own `deny` for calls with their connection (`member`): a floor no agent lifts;
34
+ * 3. the agent's setting (`agent`, from its tools page): `allow` / `ask` / `deny`;
35
+ * 4. the member's own `allow` / `ask`;
36
+ * 5. the org's default (`connector_tools.default_policy`, the annotation default unless an org
37
+ * admin changed it: `readOnlyHint: true` allows, anything else asks).
38
+ * Fixed asks (`requiresUserInteraction`), role escalation and grants apply after this.
39
39
  */
40
- export declare function isFixedAsk(tool: ResolvedTool, visibility?: "private" | "org" | "members" | undefined, skillWritePolicy?: "allow" | "ask" | undefined): boolean;
40
+ export declare function connectorPolicy(input: {
41
+ orgDefault: ToolPolicy;
42
+ member?: ToolPolicy | undefined;
43
+ agent?: ToolPolicy | undefined;
44
+ }): {
45
+ policy: ToolPolicy;
46
+ source: ConnectorPolicySource;
47
+ };
41
48
  /**
42
49
  * 执行时的策略判定(spec 3.6 R5:在动作执行那一刻判定)。每次调用都实时读取:
43
50
  * - 沙箱工具(bash / write / edit / deliver)的组织设置 `sandboxToolPolicy`(为 ask 时组织默认至少 ask);
@@ -47,9 +54,9 @@ export declare function isFixedAsk(tool: ResolvedTool, visibility?: "private" |
47
54
  * - a sub-agent (template or general-purpose): `agentDef` is its frozen effective definition (the
48
55
  * parent's policies with the template's on top) and `ctx.agentId` is the parent's agent, so the
49
56
  * parent's current version still tightens it (sub-agents spec §5.3, §9); its "this conversation"
50
- * grants are the parent conversation's; an org agent sub-agent (§5.5): `ctx.agentId` is the
57
+ * grants are the root conversation's (agent map spec §7); an org agent sub-agent (§5.5): `ctx.agentId` is the
51
58
  * dispatched agent (its current version, its "always" grants) and the parent agent's current
52
- * policies apply on top ({@link parentAgentOverride});
59
+ * policies apply on top ({@link parentAgentSetting});
53
60
  * - 授权表(`conversation_tool_grants` / `tool_grants`),`spec_hash` 与当前定义不一致视为无效(D8),
54
61
  * `connector_id` 与工具的来源连接器不一致也无效(删除后用同一 slug 重新安装的连接器不继承旧授权);
55
62
  * - 工具声明了 `requiredRole`(R1)时,发起人在组织中的当前角色:不是成员 → 拒绝;角色不足 → 按角色升级的审批
@@ -1,29 +1,17 @@
1
1
  import { sql } from "kysely";
2
2
  import { roleAtLeast } from "../orgs/roles.js";
3
3
  import { readOrgSettings } from "../orgs/settings.service.js";
4
- import { SANDBOX_ASK_TOOL_NAMES } from "./builtins/sandbox/names.js";
5
- /**
6
- * spec 3.6 R3「有权 ≠ 已确认」固定清单上的工具 key:策略至少为 `ask`,记住的授权也不放行。
7
- *
8
- * R3 清单:发布到公共市场、安装连接器、提插件申请、改角色与成员、删除、改共享技能、改自己的指令。
9
- * M3 的内置工具(`ask_user`、`read_tool_output`、`tool_search`)与连接器工具都不在清单上;M5 T15 加入
10
- * `skill_write`(改共享技能)。后续实现上述动作的内置工具时把 key 登记在这里。连接器 / 插件工具由
11
- * `annotations.requiresUserInteraction` 表达同一约束。
12
- */
13
- export const R3_FIXED_ASK_TOOL_KEYS = new Set(["skill_write"]);
14
- /**
15
- * R3 清单里只对共享 agent 生效的 key(窄口子):R3 的条目是「改共享技能」,私有 agent(`visibility = private`,
16
- * 只有负责人本人能用)的技能不是共享的,`skill_write` 直接生效、不询问(R4)。其余 R3 条目不论可见性一律固定 ask。
17
- */
18
- export const R3_SHARED_AGENT_ONLY_TOOL_KEYS = new Set(["skill_write"]);
4
+ import { SANDBOX_ASK_TOOL_NAMES } from "./builtin-names.js";
5
+ import { personalAuth } from "./connector-account-policies.js";
6
+ import { normalizeStoredDefinitionIn } from "./legacy-data.js";
19
7
  const RANK = { allow: 0, ask: 1, deny: 2 };
20
8
  /** 取更严的策略(`allow < ask < deny`)。 */
21
9
  export function stricter(a, b) {
22
10
  return b !== undefined && RANK[b] > RANK[a] ? b : a;
23
11
  }
24
12
  /**
25
- * 策略判定(纯函数):取组织默认、agent 收紧、R3 固定询问三者中最严者;
26
- * 记住的授权只能把 `ask` 放行为 `allow`,不能越过 `deny`,对 R3 / `requiresUserInteraction` 的工具无效。
13
+ * 策略判定(纯函数):取组织默认、agent 收紧、固定询问三者中最严者;
14
+ * 记住的授权只能把 `ask` 放行为 `allow`,不能越过 `deny`,对 `requiresUserInteraction` 的工具无效。
27
15
  */
28
16
  export function decide(input) {
29
17
  let p = stricter(input.connectorDefault, input.agentOverride);
@@ -34,20 +22,58 @@ export function decide(input) {
34
22
  return p;
35
23
  }
36
24
  /**
37
- * 是否属于 R3 固定询问(清单或工具声明需要用户交互)。`visibility` 为 agent 当前的可见性:
38
- * {@link R3_SHARED_AGENT_ONLY_TOOL_KEYS} 里的内置工具在私有 agent 上不算固定询问,
39
- * 除非 agent 当前版本的 `skills.writePolicy` 为 `ask`(`skillWritePolicy`);不知道可见性时按共享处理(更严)。
25
+ * Whether the tool is a fixed ask: its spec declares `requiresUserInteraction`, so its policy is
26
+ * at least `ask` and remembered grants never let it through.
27
+ */
28
+ export function isFixedAsk(tool) {
29
+ return tool.spec.annotations?.requiresUserInteraction === true;
30
+ }
31
+ const asSetting = (v) => v === "allow" || v === "ask" || v === "deny" ? v : undefined;
32
+ /** The stricter of the settings that are set (none set: undefined). */
33
+ function combine(...xs) {
34
+ let out;
35
+ for (const x of xs)
36
+ if (x !== undefined)
37
+ out = out === undefined ? x : stricter(out, x);
38
+ return out;
39
+ }
40
+ /**
41
+ * An agent's setting for a call: its policy on the tool key and, for a per-call key
42
+ * (`Platform:<operation>`), on that key, the stricter of the two; undefined when neither is set.
43
+ * `allow` counts only for a connector tool ({@link connectorPolicy}); elsewhere an agent's policy
44
+ * can only tighten ({@link tighteningOf}).
40
45
  */
41
- export function isFixedAsk(tool, visibility, skillWritePolicy) {
42
- if (tool.spec.annotations?.requiresUserInteraction === true)
43
- return true;
44
- if (!R3_FIXED_ASK_TOOL_KEYS.has(tool.key))
45
- return false;
46
- const builtinOnly = tool.source.kind === "builtin" && R3_SHARED_AGENT_ONLY_TOOL_KEYS.has(tool.key);
47
- // 私有 agent:缺省 / allow 不问(R4),负责人设为 ask(D10)时与共享 agent 一样固定询问
48
- return !(builtinOnly && visibility === "private" && skillWritePolicy !== "ask");
46
+ function settingOf(policies, toolKey, policyKey) {
47
+ const own = asSetting(policies?.[toolKey]);
48
+ if (policyKey === toolKey)
49
+ return own;
50
+ return combine(own, asSetting(policies?.[policyKey]));
51
+ }
52
+ /** An agent setting as a tightening (`allow` tightens nothing). */
53
+ const tighteningOf = (s) => s === "ask" || s === "deny" ? s : undefined;
54
+ /**
55
+ * A personal-credential connector tool's policy for one call (maintainer decisions 2026-11-09;
56
+ * an org-credential connector's tool keeps the org default with the agent's tightening only),
57
+ * highest first:
58
+ * 1. the org's default `deny` (a tool the org switched off never gets here: it is unavailable);
59
+ * 2. the member's own `deny` for calls with their connection (`member`): a floor no agent lifts;
60
+ * 3. the agent's setting (`agent`, from its tools page): `allow` / `ask` / `deny`;
61
+ * 4. the member's own `allow` / `ask`;
62
+ * 5. the org's default (`connector_tools.default_policy`, the annotation default unless an org
63
+ * admin changed it: `readOnlyHint: true` allows, anything else asks).
64
+ * Fixed asks (`requiresUserInteraction`), role escalation and grants apply after this.
65
+ */
66
+ export function connectorPolicy(input) {
67
+ if (input.orgDefault === "deny")
68
+ return { policy: "deny", source: "org" };
69
+ if (input.member === "deny")
70
+ return { policy: "deny", source: "member" };
71
+ if (input.agent !== undefined)
72
+ return { policy: input.agent, source: "agent" };
73
+ if (input.member !== undefined)
74
+ return { policy: input.member, source: "member" };
75
+ return { policy: input.orgDefault, source: "org" };
49
76
  }
50
- const asOverride = (v) => v === "ask" || v === "deny" ? v : undefined;
51
77
  /**
52
78
  * 执行时的策略判定(spec 3.6 R5:在动作执行那一刻判定)。每次调用都实时读取:
53
79
  * - 沙箱工具(bash / write / edit / deliver)的组织设置 `sandboxToolPolicy`(为 ask 时组织默认至少 ask);
@@ -57,9 +83,9 @@ const asOverride = (v) => v === "ask" || v === "deny" ? v : undefined;
57
83
  * - a sub-agent (template or general-purpose): `agentDef` is its frozen effective definition (the
58
84
  * parent's policies with the template's on top) and `ctx.agentId` is the parent's agent, so the
59
85
  * parent's current version still tightens it (sub-agents spec §5.3, §9); its "this conversation"
60
- * grants are the parent conversation's; an org agent sub-agent (§5.5): `ctx.agentId` is the
86
+ * grants are the root conversation's (agent map spec §7); an org agent sub-agent (§5.5): `ctx.agentId` is the
61
87
  * dispatched agent (its current version, its "always" grants) and the parent agent's current
62
- * policies apply on top ({@link parentAgentOverride});
88
+ * policies apply on top ({@link parentAgentSetting});
63
89
  * - 授权表(`conversation_tool_grants` / `tool_grants`),`spec_hash` 与当前定义不一致视为无效(D8),
64
90
  * `connector_id` 与工具的来源连接器不一致也无效(删除后用同一 slug 重新安装的连接器不继承旧授权);
65
91
  * - 工具声明了 `requiredRole`(R1)时,发起人在组织中的当前角色:不是成员 → 拒绝;角色不足 → 按角色升级的审批
@@ -69,14 +95,22 @@ const asOverride = (v) => v === "ask" || v === "deny" ? v : undefined;
69
95
  */
70
96
  export function createDecidePolicy(db) {
71
97
  return async (tool, agentDef, ctx) => {
72
- let connectorDefault = tool.defaultPolicy;
98
+ // a per-call policy (Platform tool spec §6.2): its key replaces the tool key for policies,
99
+ // grants and approvals, and its policy replaces the tool's default
100
+ const call = ctx.callPolicy ?? null;
101
+ const policyKey = call?.key ?? tool.key;
102
+ let connectorDefault = call?.policy ?? tool.defaultPolicy;
73
103
  let connectorId = null;
74
104
  let hashCurrent = true;
105
+ /** The member's own setting for a call with their connection (a personal-credential connector). */
106
+ let memberSetting;
107
+ /** A personal-credential connector: calls use the acting account's own connection. */
108
+ let personal = false;
75
109
  if (tool.source.kind === "connector") {
76
110
  connectorId = tool.source.connectorId;
77
111
  const app = await db
78
112
  .selectFrom("connectors")
79
- .select(["slug", "status", "deleted_at"])
113
+ .select(["slug", "status", "deleted_at", "auth"])
80
114
  .where("id", "=", tool.source.connectorId)
81
115
  .where("org_id", "=", ctx.orgId)
82
116
  .executeTakeFirst();
@@ -102,6 +136,19 @@ export function createDecidePolicy(db) {
102
136
  return { unavailable: "Tool is pending review" };
103
137
  connectorDefault = row.default_policy;
104
138
  hashCurrent = row.spec_hash === tool.specHash;
139
+ // The call is made with the acting account's own connection (the credential the pipeline
140
+ // injects for `ctx.accountId`): that account's settings apply, never another's
141
+ personal = personalAuth(app.auth);
142
+ if (personal) {
143
+ const mine = await db
144
+ .selectFrom("connector_tool_account_policies")
145
+ .select("policy")
146
+ .where("connector_id", "=", tool.source.connectorId)
147
+ .where("account_id", "=", ctx.accountId)
148
+ .where("tool_name", "=", tool.source.name)
149
+ .executeTakeFirst();
150
+ memberSetting = mine?.policy;
151
+ }
105
152
  }
106
153
  // 沙箱工具的组织默认(M5 T8):组织设置 sandboxToolPolicy 为 ask 时,有副作用的沙箱工具至少 ask
107
154
  // `orgAsk`: the org setting, not the tool's own default, is what makes it ask
@@ -113,22 +160,47 @@ export function createDecidePolicy(db) {
113
160
  }
114
161
  }
115
162
  // 运行所用版本可能是加 toolPolicies 字段之前保存的:缺省为空
116
- const runOverride = asOverride(agentDef.toolPolicies?.[tool.key]);
163
+ const runSetting = settingOf(agentDef.toolPolicies, tool.key, policyKey);
117
164
  const current = await db
118
165
  .selectFrom("agents")
119
166
  .innerJoin("agent_versions", (j) => j
120
167
  .onRef("agent_versions.agent_id", "=", "agents.id")
121
168
  .onRef("agent_versions.version", "=", "agents.current_version"))
122
- .select(["agent_versions.definition", "agents.visibility"])
169
+ .select(["agent_versions.definition"])
123
170
  .where("agents.id", "=", ctx.agentId)
124
171
  .executeTakeFirst();
125
- const currentPolicies = current?.definition?.toolPolicies;
126
- const currentOverride = asOverride(currentPolicies?.[tool.key]);
127
- let strictest = stricter(runOverride ?? "allow", currentOverride);
172
+ // stored raw: an rc version's keys read as current keys, so its deny keeps applying (§8.3)
173
+ const currentDef = current === undefined
174
+ ? undefined
175
+ : await normalizeStoredDefinitionIn(db, ctx.orgId, current.definition);
176
+ const currentPolicies = currentDef?.toolPolicies;
177
+ const currentSetting = settingOf(currentPolicies, tool.key, policyKey);
178
+ // the run's version, the agent's current version and (a sub-agent) its parent agent's
179
+ // current version: the stricter of the ones that are set
180
+ // (an `allow` the owner removed since the run started no longer applies: removing it tightens)
181
+ const runKept = runSetting === "allow" && current !== undefined && currentSetting === undefined
182
+ ? undefined
183
+ : runSetting;
184
+ let agentSetting = combine(runKept, currentSetting);
128
185
  if (ctx.parentConversationId !== undefined && ctx.parentAgentDiffers !== false) {
129
- strictest = stricter(strictest, await parentAgentOverride(db, tool.key, ctx));
186
+ agentSetting = combine(agentSetting, await parentAgentSetting(db, tool.key, policyKey, ctx));
187
+ }
188
+ let agentOverride = tighteningOf(agentSetting);
189
+ // A personal-credential connector's tool: the levels of `connectorPolicy` decide its base
190
+ // policy (an agent's `allow` counts here, below the org's and the member's deny). A connector
191
+ // with one org credential has no member level and its calls act as the whole org: there the
192
+ // agent's setting only tightens the org default, as for every other tool (review 2026-11-09)
193
+ let decidedBy = null;
194
+ if (tool.source.kind === "connector" && personal) {
195
+ const r = connectorPolicy({
196
+ orgDefault: connectorDefault,
197
+ member: memberSetting,
198
+ agent: agentSetting,
199
+ });
200
+ connectorDefault = r.policy;
201
+ decidedBy = r.source;
202
+ agentOverride = undefined;
130
203
  }
131
- const agentOverride = strictest === "allow" ? undefined : strictest;
132
204
  let escalateTo = null;
133
205
  if (tool.requiredRole !== undefined) {
134
206
  const m = await db
@@ -142,10 +214,10 @@ export function createDecidePolicy(db) {
142
214
  if (!roleAtLeast(m.role, tool.requiredRole))
143
215
  escalateTo = tool.requiredRole;
144
216
  }
145
- // 可见性实时读(R5):共享 agent 的 skill_write 固定 ask,私有 agent 不问(见 R3_SHARED_AGENT_ONLY_TOOL_KEYS)
146
- // 当前版本的 skills.writePolicy 同样实时读(R5):运行中改为 ask,下一次调用即生效;固定 ask 时授权不放行
147
- const writePolicy = current?.definition?.skills?.writePolicy;
148
- const fixedAsk = isFixedAsk(tool, current?.visibility, writePolicy);
217
+ // `remember: false` on a call that is not a plain allow (an org / platform operation, or a read
218
+ // an agent tightened to ask): every call asks, grants never apply. A read (`allow`) never asks.
219
+ const fixedAsk = isFixedAsk(tool) ||
220
+ (call !== null && !call.remember && (call.policy !== "allow" || agentOverride !== undefined));
149
221
  const input = {
150
222
  connectorDefault,
151
223
  ...(agentOverride !== undefined && { agentOverride }),
@@ -156,7 +228,7 @@ export function createDecidePolicy(db) {
156
228
  if (pre === "deny")
157
229
  return "deny";
158
230
  if (pre === "ask" && !fixedAsk && escalateTo === null && hashCurrent) {
159
- input.grant = await findGrant(db, tool, connectorId, ctx);
231
+ input.grant = await findGrant(db, tool, policyKey, connectorId, ctx);
160
232
  }
161
233
  const result = decide(input);
162
234
  if (result === "allow" && escalateTo === null) {
@@ -164,25 +236,27 @@ export function createDecidePolicy(db) {
164
236
  return pre === "ask" && input.grant !== null ? { grant: input.grant } : "allow";
165
237
  }
166
238
  const ask = {
167
- toolKey: tool.key,
239
+ toolKey: policyKey,
168
240
  specHash: tool.specHash,
169
241
  connectorId,
170
242
  requestedFor: escalateTo === null ? ctx.accountId : null,
171
243
  approverRole: escalateTo,
172
244
  // the most specific rule that asked: role escalation, the agent's tightening, the connector,
173
- // a fixed ask (R3, requiresUserInteraction), the org's sandboxToolPolicy, else the tool's own
245
+ // a fixed ask (requiresUserInteraction), the org's sandboxToolPolicy, else the tool's own
174
246
  // default
175
247
  policy: escalateTo !== null
176
248
  ? "role"
177
- : agentOverride === "ask"
249
+ : agentOverride === "ask" || (decidedBy === "agent" && connectorDefault === "ask")
178
250
  ? "agent"
179
- : tool.source.kind === "connector" && connectorDefault === "ask"
180
- ? "connector"
181
- : fixedAsk
182
- ? "fixed"
183
- : orgAsk
184
- ? "org"
185
- : "default",
251
+ : decidedBy === "member" && connectorDefault === "ask"
252
+ ? "member"
253
+ : tool.source.kind === "connector" && connectorDefault === "ask"
254
+ ? "connector"
255
+ : fixedAsk
256
+ ? "fixed"
257
+ : orgAsk
258
+ ? "org"
259
+ : "default",
186
260
  };
187
261
  return { ask };
188
262
  };
@@ -193,7 +267,7 @@ export function createDecidePolicy(db) {
193
267
  * policy for the same key applies on top, so the parent's owner can tighten a running child too.
194
268
  * For a template or general-purpose child the parent conversation has the same agent, already read.
195
269
  */
196
- async function parentAgentOverride(db, toolKey, ctx) {
270
+ async function parentAgentSetting(db, toolKey, policyKey, ctx) {
197
271
  const row = await db
198
272
  .selectFrom("conversations as c")
199
273
  .innerJoin("agents as a", "a.id", "c.agent_id")
@@ -203,22 +277,26 @@ async function parentAgentOverride(db, toolKey, ctx) {
203
277
  .executeTakeFirst();
204
278
  if (!row || row.id === ctx.agentId)
205
279
  return undefined;
206
- const policies = row.definition.toolPolicies;
207
- return asOverride(policies?.[toolKey]);
280
+ // stored raw: an rc version's keys read as current keys, so its deny keeps applying (§8.3)
281
+ const policies = (await normalizeStoredDefinitionIn(db, ctx.orgId, row.definition))
282
+ .toolPolicies;
283
+ return settingOf(policies, toolKey, policyKey);
208
284
  }
209
285
  /**
210
- * A grant matching the current definition hash and source connector: this conversation's first,
286
+ * A grant matching the current definition hash and source connector, keyed by the call's policy key
287
+ * (the tool key, or a per-call key such as `Platform:<operation>`): this conversation's first,
211
288
  * then "always". `connectorId` is the tool's source connector (null for plugin and builtin tools,
212
289
  * which match only grants without a connector). A sub-agent's "this conversation" grants live on
213
- * its parent conversation (sub-agents spec §9), so parallel children are approved once.
290
+ * the root conversation of its tree (agent map spec §7), so the root and every sub-agent at any
291
+ * depth are approved once.
214
292
  */
215
- async function findGrant(db, tool, connectorId, ctx) {
293
+ async function findGrant(db, tool, policyKey, connectorId, ctx) {
216
294
  const sameConnector = sql `connector_id IS NOT DISTINCT FROM ${connectorId}`;
217
295
  const session = await db
218
296
  .selectFrom("conversation_tool_grants")
219
297
  .select("spec_hash")
220
- .where("conversation_id", "=", ctx.parentConversationId ?? ctx.conversationId)
221
- .where("tool_key", "=", tool.key)
298
+ .where("conversation_id", "=", ctx.rootConversationId ?? ctx.conversationId)
299
+ .where("tool_key", "=", policyKey)
222
300
  .where(sameConnector)
223
301
  .executeTakeFirst();
224
302
  if (session?.spec_hash === tool.specHash)
@@ -229,7 +307,7 @@ async function findGrant(db, tool, connectorId, ctx) {
229
307
  .where("org_id", "=", ctx.orgId)
230
308
  .where("account_id", "=", ctx.accountId)
231
309
  .where("agent_id", "=", ctx.agentId)
232
- .where("tool_key", "=", tool.key)
310
+ .where("tool_key", "=", policyKey)
233
311
  .where(sameConnector)
234
312
  .executeTakeFirst();
235
313
  return always?.spec_hash === tool.specHash ? "always" : null;
@@ -7,7 +7,7 @@ declare const AnswerBody: z.ZodObject<{
7
7
  answer: z.ZodRecord<z.ZodString, z.ZodUnknown>;
8
8
  }, z.core.$strict>;
9
9
  /**
10
- * 输入请求(`ask_user`、插件工具的 `input_required`):`/api/v1/orgs/:orgId/questions`。
10
+ * 输入请求(`AskUserQuestion`、插件工具的 `input_required`):`/api/v1/orgs/:orgId/questions`。
11
11
  * 动作用 `approvals.decide`(访客起、仅限用户主体):回答必须由人做出,agent / 服务令牌不能代答;
12
12
  * 具体是否允许由服务判定——只有该运行的发起人能读取与回答,其他成员 403。
13
13
  */
@@ -19,7 +19,7 @@ const AnswerBody = z.object({ answer: z.record(z.string().max(200), z.unknown())
19
19
  class QuestionAnswerBody extends createZodDto(AnswerBody, "QuestionAnswerBody") {
20
20
  }
21
21
  /**
22
- * 输入请求(`ask_user`、插件工具的 `input_required`):`/api/v1/orgs/:orgId/questions`。
22
+ * 输入请求(`AskUserQuestion`、插件工具的 `input_required`):`/api/v1/orgs/:orgId/questions`。
23
23
  * 动作用 `approvals.decide`(访客起、仅限用户主体):回答必须由人做出,agent / 服务令牌不能代答;
24
24
  * 具体是否允许由服务判定——只有该运行的发起人能读取与回答,其他成员 403。
25
25
  */
@@ -4,8 +4,8 @@ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
4
4
  import { KernelDb } from "../infra/database/kernel-db.js";
5
5
  import { TransactionHost } from "../infra/database/transaction-host.js";
6
6
  import { KernelEvents } from "../infra/events/kernel-events.js";
7
- export type QuestionStatus = "pending" | "answered" | "expired" | "cancelled";
8
- /** 一条输入请求(`ask_user`、插件工具的 `input_required`、MCP elicitation 共用)。 */
7
+ export type QuestionStatus = "pending" | "answered" | "skipped" | "expired" | "cancelled";
8
+ /** 一条输入请求(`AskUserQuestion`、插件工具的 `input_required`、MCP elicitation 共用)。 */
9
9
  export interface QuestionRecord {
10
10
  id: string;
11
11
  orgId: string;
@@ -75,6 +75,13 @@ export declare class QuestionsService {
75
75
  * 传 `orgId` 时还要求输入请求属于该组织(HTTP 接口用)。
76
76
  */
77
77
  answer(questionId: string, accountId: string, answer: unknown, orgId?: string): Promise<QuestionRecord>;
78
+ /**
79
+ * Locks the conversation row of question `questionId` (`SELECT … FOR UPDATE`; re-entrant with the
80
+ * lock `EventLog.appendIn` takes later). Every write to a question row takes the conversation lock
81
+ * first, then the question row (reply-while-question spec §8.2, D7), as the message's skip and
82
+ * the stop of a waiting run do, so no two of them can deadlock. False: no such question (in `orgId`).
83
+ */
84
+ private lockConversationOf;
78
85
  private answerIn;
79
86
  /**
80
87
  * 超时(等待机制的超时任务调用):仍 pending 且已到期 → 置 expired、写 `question_answered{expired}`。
@@ -99,6 +106,20 @@ export declare class QuestionsService {
99
106
  records: QuestionRecord[];
100
107
  seqs: Map<string, number>;
101
108
  }>;
109
+ /**
110
+ * Skips, in the caller's transaction (`mandatory`, the message's), every question a message by
111
+ * `accountId` just written at `messageSeq` closes (reply-while-question spec §4.2, §8.1): pending,
112
+ * not yet due, asked in `conversationId` (a sub-agent's question lives in the child conversation)
113
+ * by a run of it that is `running` or `waiting` and was started by `accountId`. The caller holds
114
+ * the conversation row lock (its `appendIn`), so only questions logged before the message are
115
+ * seen. Each becomes `skipped` with `question_answered { outcome: "skipped", skippedBySeq }`.
116
+ * Returns the records and the highest seq written (null: none); the caller notifies and emits
117
+ * `question.answered` after the commit.
118
+ */
119
+ skipPendingIn(conversationId: string, accountId: string, messageSeq: number): Promise<{
120
+ records: QuestionRecord[];
121
+ toSeq: number | null;
122
+ }>;
102
123
  /** `question_answered` in the current transaction; returns its seq. */
103
124
  private answeredEvent;
104
125
  }
@@ -169,13 +169,38 @@ let QuestionsService = class QuestionsService {
169
169
  orgId: record.orgId,
170
170
  conversationId: record.conversationId,
171
171
  runId: record.runId,
172
+ outcome: "answered",
172
173
  });
173
174
  return record;
174
175
  }
176
+ /**
177
+ * Locks the conversation row of question `questionId` (`SELECT … FOR UPDATE`; re-entrant with the
178
+ * lock `EventLog.appendIn` takes later). Every write to a question row takes the conversation lock
179
+ * first, then the question row (reply-while-question spec §8.2, D7), as the message's skip and
180
+ * the stop of a waiting run do, so no two of them can deadlock. False: no such question (in `orgId`).
181
+ */
182
+ async lockConversationOf(questionId, orgId) {
183
+ const t = this.db.db;
184
+ let q = t.selectFrom("questions").select("conversation_id").where("id", "=", questionId);
185
+ if (orgId !== undefined)
186
+ q = q.where("org_id", "=", orgId);
187
+ const row = await q.executeTakeFirst();
188
+ if (!row)
189
+ return false;
190
+ await t
191
+ .selectFrom("conversations")
192
+ .select("id")
193
+ .where("id", "=", row.conversation_id)
194
+ .forUpdate()
195
+ .executeTakeFirst();
196
+ return true;
197
+ }
175
198
  // its own transaction (as the legacy one was): `question.answered` is emitted only after the
176
199
  // answer committed, even when a caller has a transaction open
177
200
  async answerIn(questionId, accountId, answer, orgId) {
178
201
  const t = this.db.db;
202
+ if (!(await this.lockConversationOf(questionId, orgId)))
203
+ throw notFound();
179
204
  let q = t
180
205
  .selectFrom("questions")
181
206
  .selectAll()
@@ -194,6 +219,9 @@ let QuestionsService = class QuestionsService {
194
219
  if (run?.trigger_account_id !== accountId)
195
220
  throw notInitiator();
196
221
  const before = toRecord(locked);
222
+ if (before.status === "skipped") {
223
+ throw new ApiError("question.already_answered", "Question was skipped: the user sent a message instead");
224
+ }
197
225
  if (before.status !== "pending") {
198
226
  throw new ApiError("question.already_answered", "Question has already been answered");
199
227
  }
@@ -233,6 +261,8 @@ let QuestionsService = class QuestionsService {
233
261
  }
234
262
  async expireIn(questionId) {
235
263
  const t = this.db.db;
264
+ if (!(await this.lockConversationOf(questionId)))
265
+ return { outcome: "settled" };
236
266
  const locked = await t
237
267
  .selectFrom("questions")
238
268
  .selectAll()
@@ -291,10 +321,33 @@ let QuestionsService = class QuestionsService {
291
321
  */
292
322
  async cancelPendingFor(orgId, accountId) {
293
323
  const t = this.db.db;
324
+ // the conversations first, in id order (lock order D7: conversation, then question rows)
325
+ const convs = await t
326
+ .selectFrom("questions")
327
+ .select("conversation_id")
328
+ .distinct()
329
+ .where("org_id", "=", orgId)
330
+ .where("status", "=", "pending")
331
+ .where("run_id", "in", (eb) => eb.selectFrom("runs").select("id").where("trigger_account_id", "=", accountId))
332
+ .execute();
333
+ if (convs.length > 0) {
334
+ await t
335
+ .selectFrom("conversations")
336
+ .select("id")
337
+ .where("id", "in", convs.map((c) => c.conversation_id))
338
+ .orderBy("id")
339
+ .forUpdate()
340
+ .execute();
341
+ }
342
+ // only the conversations locked above: a question asked meanwhile in another one waits for
343
+ // the run's stop (offboarding aborts it) or the sweep, so no conversation is locked after a row
344
+ if (convs.length === 0)
345
+ return { records: [], seqs: new Map() };
294
346
  const rows = await t
295
347
  .selectFrom("questions")
296
348
  .selectAll()
297
349
  .where("org_id", "=", orgId)
350
+ .where("conversation_id", "in", convs.map((c) => c.conversation_id))
298
351
  .where("status", "=", "pending")
299
352
  .where("run_id", "in", (eb) => eb.selectFrom("runs").select("id").where("trigger_account_id", "=", accountId))
300
353
  .orderBy("created_at")
@@ -315,14 +368,60 @@ let QuestionsService = class QuestionsService {
315
368
  }
316
369
  return { records, seqs };
317
370
  }
371
+ /**
372
+ * Skips, in the caller's transaction (`mandatory`, the message's), every question a message by
373
+ * `accountId` just written at `messageSeq` closes (reply-while-question spec §4.2, §8.1): pending,
374
+ * not yet due, asked in `conversationId` (a sub-agent's question lives in the child conversation)
375
+ * by a run of it that is `running` or `waiting` and was started by `accountId`. The caller holds
376
+ * the conversation row lock (its `appendIn`), so only questions logged before the message are
377
+ * seen. Each becomes `skipped` with `question_answered { outcome: "skipped", skippedBySeq }`.
378
+ * Returns the records and the highest seq written (null: none); the caller notifies and emits
379
+ * `question.answered` after the commit.
380
+ */
381
+ async skipPendingIn(conversationId, accountId, messageSeq) {
382
+ const t = this.db.db;
383
+ const rows = await t
384
+ .selectFrom("questions as q")
385
+ .innerJoin("runs as r", "r.id", "q.run_id")
386
+ .selectAll("q")
387
+ .where("q.conversation_id", "=", conversationId)
388
+ .where("q.status", "=", "pending")
389
+ .where(sql `q.expires_at > now()`)
390
+ .where("r.status", "in", ["running", "waiting"])
391
+ .where("r.trigger_account_id", "=", accountId)
392
+ .orderBy("q.created_at")
393
+ .orderBy("q.id")
394
+ .forUpdate("q")
395
+ .execute();
396
+ const records = [];
397
+ let toSeq = null;
398
+ for (const row of rows) {
399
+ const updated = await t
400
+ .updateTable("questions")
401
+ .set({ status: "skipped", answered_by: accountId, answered_at: sql `now()` })
402
+ .where("id", "=", row.id)
403
+ .returningAll()
404
+ .executeTakeFirstOrThrow();
405
+ toSeq = await this.answeredEvent(toRecord(row), null, accountId, "skipped", messageSeq);
406
+ records.push(toRecord(updated));
407
+ }
408
+ return { records, toSeq };
409
+ }
318
410
  /** `question_answered` in the current transaction; returns its seq. */
319
- async answeredEvent(q, answer, byAccountId, outcome) {
411
+ async answeredEvent(q, answer, byAccountId, outcome, skippedBySeq) {
320
412
  const written = await this.eventLog.appendIn(q.conversationId, [
321
413
  {
322
414
  type: "question_answered",
323
415
  runId: q.runId,
324
416
  idemKey: `question_answered:${q.id}`,
325
- payload: { questionId: q.id, callId: q.callId, answer, byAccountId, outcome },
417
+ payload: {
418
+ questionId: q.id,
419
+ callId: q.callId,
420
+ answer,
421
+ byAccountId,
422
+ outcome,
423
+ ...(skippedBySeq !== undefined && { skippedBySeq }),
424
+ },
326
425
  },
327
426
  ]);
328
427
  return Math.max(...written.map((e) => e.seq));
@@ -343,6 +442,9 @@ __decorate([
343
442
  __decorate([
344
443
  Transactional({ propagation: "mandatory" })
345
444
  ], QuestionsService.prototype, "cancelPendingFor", null);
445
+ __decorate([
446
+ Transactional({ propagation: "mandatory" })
447
+ ], QuestionsService.prototype, "skipPendingIn", null);
346
448
  QuestionsService = __decorate([
347
449
  Injectable(),
348
450
  __param(0, Inject(KernelDb)),