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

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 +94 -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 +85 -10
  356. package/dist/extensions/bootstrap.js +215 -36
  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 +9 -3
  509. package/dist/lifecycle/kernel-lifecycle.js +51 -11
  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
@@ -0,0 +1,791 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { randomUUID } from "node:crypto";
11
+ import { Inject, Injectable } from "@nestjs/common";
12
+ import { sql } from "kysely";
13
+ import { ApiError } from "../errors.js";
14
+ import { ExtensionDisplayNames } from "../extensions/display-name.js";
15
+ import { audit } from "../identity/audit.js";
16
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
17
+ import { afterCommit } from "../infra/database/after-commit.js";
18
+ import { KernelDb } from "../infra/database/kernel-db.js";
19
+ import { TransactionHost } from "../infra/database/transaction-host.js";
20
+ import { Transactional } from "../infra/database/transactional.decorator.js";
21
+ import { LockService } from "../infra/lock/lock.service.js";
22
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
23
+ import { deviceLeaseKey } from "../local-devices/keys.js";
24
+ import { MachinesService } from "../local-devices/machines.js";
25
+ import { SandboxJobs } from "../sandbox/jobs.js";
26
+ import { isInternalProvider, LOCAL_PROVIDER, SandboxProviders } from "../sandbox/providers.js";
27
+ import { deviceNotFound, SandboxService } from "../sandbox/sandbox.service.js";
28
+ import { DeviceAccess, demotedProvider, deviceProvider, deviceUnavailable, inUseForDefault, } from "./access.js";
29
+ const isUniqueViolation = (e, constraint) => typeof e === "object" &&
30
+ e !== null &&
31
+ e.code === "23505" &&
32
+ e.constraint === constraint;
33
+ const nameTaken = () => new ApiError("device.name_taken", "You already have a device with this name");
34
+ /**
35
+ * Personal devices (spec 2026-11-07-environments-design §4.2 items 7, 12, 13; §6; §9):
36
+ * cloud ones on the deployment's sandbox provider and `device` ones on a connected machine; a
37
+ * person's devices in an org, visible and usable only by their owner (anyone else gets
38
+ * `device.not_found`). Deleting one soft-deletes it and destroys its instance and files in a
39
+ * `sandbox-destroy-for` job after the commit.
40
+ */
41
+ let DevicesService = class DevicesService {
42
+ db;
43
+ txHost;
44
+ config;
45
+ providers;
46
+ sandbox;
47
+ sandboxJobs;
48
+ access;
49
+ displayNames;
50
+ log;
51
+ locks;
52
+ machines;
53
+ constructor(db, txHost, config, providers, sandbox, sandboxJobs, access, displayNames, log,
54
+ /** Reads the device relay's lease (`online`). */
55
+ locks, machines) {
56
+ this.db = db;
57
+ this.txHost = txHost;
58
+ this.config = config;
59
+ this.providers = providers;
60
+ this.sandbox = sandbox;
61
+ this.sandboxJobs = sandboxJobs;
62
+ this.access = access;
63
+ this.displayNames = displayNames;
64
+ this.log = log;
65
+ this.locks = locks;
66
+ this.machines = machines;
67
+ }
68
+ /**
69
+ * The person's live devices in the org, the default first, then by creation. With a
70
+ * current sandbox provider the default device is created first if missing (its first need,
71
+ * spec §4.2 item 7; an existing one is only read).
72
+ */
73
+ async list(orgId, accountId) {
74
+ const cloudAvailable = this.providers.cloud() !== undefined;
75
+ const defaultId = cloudAvailable ? await this.ensureDefault(orgId, accountId) : null;
76
+ const items = await this.views(orgId, accountId);
77
+ const last = await this.db
78
+ .selectFrom("conversations as c")
79
+ .innerJoin("devices as e", "e.id", "c.device_id")
80
+ .select("c.device_id")
81
+ .where("c.org_id", "=", orgId)
82
+ .where("c.account_id", "=", accountId)
83
+ .where("e.org_id", "=", orgId)
84
+ .where("e.owner_kind", "=", "personal")
85
+ .where("e.owner_account_id", "=", accountId)
86
+ .where("e.deleted_at", "is", null)
87
+ .orderBy("c.updated_at", "desc")
88
+ .limit(1)
89
+ .executeTakeFirst();
90
+ return {
91
+ items,
92
+ defaultId: defaultId ?? items.find((v) => v.isDefault)?.id ?? null,
93
+ lastUsedId: last?.device_id ?? null,
94
+ cloudAvailable,
95
+ };
96
+ }
97
+ /** One of the person's live devices; anyone else's (or a missing one) → `not_found`. */
98
+ async get(orgId, accountId, id) {
99
+ const [view] = await this.views(orgId, accountId, id);
100
+ if (!view)
101
+ throw deviceNotFound();
102
+ return view;
103
+ }
104
+ /**
105
+ * A new personal cloud device, ready at once (its instance and files are made on first
106
+ * use). Needs a current sandbox provider (`device.unavailable`); a live name of the person's
107
+ * (case-insensitive) → `device.name_taken`; `devices.maxPersonal` live ones (the
108
+ * default counts) → `device.limit_reached`. Serialized per person by their membership row.
109
+ */
110
+ async create(orgId, accountId, input, actorTokenId, auditDetail) {
111
+ const id = await this.insert(orgId, accountId, input.name, actorTokenId, auditDetail);
112
+ return this.get(orgId, accountId, id);
113
+ }
114
+ async insert(orgId, accountId, name, actorTokenId, auditDetail) {
115
+ const current = this.providers.cloud();
116
+ if (!current)
117
+ throw deviceUnavailable(null);
118
+ return this.insertNamed(orgId, accountId, name, "cloud", current.plugin, actorTokenId, auditDetail ?? {});
119
+ }
120
+ /**
121
+ * A new personal local device for a machine being connected (provider `@local`; the
122
+ * machine row is the caller's). Joins the caller's transaction (the device authorization's).
123
+ * Counted against `devices.maxPersonal` (`device.limit_reached`); a live name of the
124
+ * person's → `device.name_taken`. Needs no cloud provider.
125
+ */
126
+ async createLocal(orgId, accountId, name) {
127
+ const id = await this.insertNamed(orgId, accountId, name, "local", LOCAL_PROVIDER, undefined, {
128
+ source: "local",
129
+ });
130
+ return { id };
131
+ }
132
+ /**
133
+ * Inserts a named personal device under the person's membership lock, after the limit
134
+ * and name checks, and audits `device.created`. Runs in the caller's transaction.
135
+ */
136
+ async insertNamed(orgId, accountId, name, source, provider, actorTokenId, auditDetail) {
137
+ await this.lockMember(orgId, accountId);
138
+ const { n } = await this.db
139
+ .selectFrom("devices")
140
+ .select((eb) => eb.fn.countAll().as("n"))
141
+ .where("org_id", "=", orgId)
142
+ .where("owner_kind", "=", "personal")
143
+ .where("owner_account_id", "=", accountId)
144
+ .where("deleted_at", "is", null)
145
+ .executeTakeFirstOrThrow();
146
+ const max = this.config.get().devices.maxPersonal;
147
+ if (Number(n) >= max) {
148
+ throw new ApiError("device.limit_reached", `You already have ${max} devices in this organization; delete one to create another`);
149
+ }
150
+ await this.assertNameFree(orgId, accountId, name);
151
+ const id = randomUUID();
152
+ try {
153
+ await this.db
154
+ .insertInto("devices")
155
+ .values({
156
+ id,
157
+ org_id: orgId,
158
+ owner_kind: "personal",
159
+ owner_account_id: accountId,
160
+ name,
161
+ source,
162
+ provider,
163
+ })
164
+ .execute();
165
+ }
166
+ catch (e) {
167
+ if (isUniqueViolation(e, "devices_name_uq"))
168
+ throw nameTaken();
169
+ throw e;
170
+ }
171
+ await audit(this.db.db, {
172
+ actorAccountId: accountId,
173
+ ...(actorTokenId !== undefined && { actorTokenId }),
174
+ orgId,
175
+ action: "device.created",
176
+ target: id,
177
+ detail: { name, ...auditDetail },
178
+ });
179
+ return id;
180
+ }
181
+ /**
182
+ * The refusals {@link create} would raise, read without locks or writes (a precheck before a
183
+ * confirmation card): no sandbox provider, the person's limit, a name already taken. Throws the
184
+ * same {@link ApiError}s; a race still ends in `create`'s own refusal.
185
+ */
186
+ async checkCreate(orgId, accountId, name) {
187
+ if (!this.providers.cloud())
188
+ throw deviceUnavailable(null);
189
+ const { n } = await this.db
190
+ .selectFrom("devices")
191
+ .select((eb) => eb.fn.countAll().as("n"))
192
+ .where("org_id", "=", orgId)
193
+ .where("owner_kind", "=", "personal")
194
+ .where("owner_account_id", "=", accountId)
195
+ .where("deleted_at", "is", null)
196
+ .executeTakeFirstOrThrow();
197
+ const max = this.config.get().devices.maxPersonal;
198
+ if (Number(n) >= max) {
199
+ throw new ApiError("device.limit_reached", `You already have ${max} devices in this organization; delete one to create another`);
200
+ }
201
+ await this.assertNameFree(orgId, accountId, name);
202
+ }
203
+ /** How many of the person's conversations work in the device (read only). */
204
+ async boundConversations(orgId, accountId, id) {
205
+ const { n } = await this.db
206
+ .selectFrom("conversations")
207
+ .select((eb) => eb.fn.countAll().as("n"))
208
+ .where("org_id", "=", orgId)
209
+ .where("account_id", "=", accountId)
210
+ .where("device_id", "=", id)
211
+ .executeTakeFirstOrThrow();
212
+ return Number(n);
213
+ }
214
+ /**
215
+ * The refusals {@link resetFiles} would raise (not found, its provider not current, a connected
216
+ * device), read only.
217
+ */
218
+ async checkReset(orgId, accountId, id) {
219
+ refuseDeviceReset(await this.access.usable(orgId, accountId, id));
220
+ }
221
+ /** The refusals {@link rename} would raise, read without locks (see {@link checkCreate}). */
222
+ async checkRename(orgId, accountId, id, name) {
223
+ const before = await this.get(orgId, accountId, id);
224
+ if (before.name?.toLowerCase() !== name.toLowerCase()) {
225
+ await this.assertNameFree(orgId, accountId, name);
226
+ }
227
+ }
228
+ /**
229
+ * Renames one of the person's live devices (the default too); see {@link create}. A
230
+ * renamed former default is the person's own from then on: it loses its demotion mark, so a
231
+ * switch back to its provider no longer restores it.
232
+ */
233
+ async rename(orgId, accountId, id, name, actorTokenId, auditDetail) {
234
+ await this.renameIn(orgId, accountId, id, name, actorTokenId, auditDetail);
235
+ return this.get(orgId, accountId, id);
236
+ }
237
+ async renameIn(orgId, accountId, id, name, actorTokenId, auditDetail) {
238
+ const before = await this.lockOwn(orgId, accountId, id);
239
+ if (before.name === name)
240
+ return;
241
+ // the same name in another case is this device's own: the index allows it
242
+ if (before.name?.toLowerCase() !== name.toLowerCase()) {
243
+ await this.assertNameFree(orgId, accountId, name);
244
+ }
245
+ try {
246
+ await this.db
247
+ .updateTable("devices")
248
+ .set({ name, demoted_from_provider: null, updated_at: sql `now()` })
249
+ .where("id", "=", id)
250
+ .execute();
251
+ }
252
+ catch (e) {
253
+ if (isUniqueViolation(e, "devices_name_uq"))
254
+ throw nameTaken();
255
+ throw e;
256
+ }
257
+ await audit(this.db.db, {
258
+ actorAccountId: accountId,
259
+ ...(actorTokenId !== undefined && { actorTokenId }),
260
+ orgId,
261
+ action: "device.renamed",
262
+ target: id,
263
+ detail: { from: before.name, to: name, ...auditDetail },
264
+ });
265
+ }
266
+ /**
267
+ * Deletes one of the person's live devices: soft delete, its IM default row cleared, and
268
+ * after the commit a `sandbox-destroy-for` job (the worker waits for running commands, then
269
+ * destroys the instance and the files). Conversations bound to it keep pointing at it; their
270
+ * sandbox tools then fail with `device.not_found`. A local device's machine is
271
+ * revoked in the same transaction; after the commit it is told `stop { reason: "deleted" }`
272
+ * (while connected) and its connection is closed.
273
+ */
274
+ async remove(orgId, accountId, id, actorTokenId, auditDetail) {
275
+ const before = await this.lockOwn(orgId, accountId, id);
276
+ await this.db
277
+ .updateTable("devices")
278
+ .set({ deleted_at: sql `now()`, updated_at: sql `now()` })
279
+ .where("id", "=", id)
280
+ .execute();
281
+ await this.db
282
+ .deleteFrom("device_defaults")
283
+ .where("org_id", "=", orgId)
284
+ .where("account_id", "=", accountId)
285
+ .where("device_id", "=", id)
286
+ .execute();
287
+ await this.machines.revokeActive(id, "deleted");
288
+ await audit(this.db.db, {
289
+ actorAccountId: accountId,
290
+ ...(actorTokenId !== undefined && { actorTokenId }),
291
+ orgId,
292
+ action: "device.deleted",
293
+ target: id,
294
+ detail: { name: before.name, isDefault: before.is_default, ...auditDetail },
295
+ });
296
+ afterCommit(async () => {
297
+ try {
298
+ await this.sandboxJobs.destroy([id]);
299
+ }
300
+ catch (err) {
301
+ // the hourly destruction sweep destroys deleted devices too
302
+ this.log.warn("cannot schedule device destruction", { deviceId: id, err });
303
+ }
304
+ });
305
+ }
306
+ /**
307
+ * Disconnects the machine of one of the person's own local devices (it must sign in
308
+ * again); see {@link MachinesService.revoke}.
309
+ */
310
+ async revokeMachine(orgId, accountId, id, actorTokenId) {
311
+ await this.machines.revoke(orgId, accountId, id, actorTokenId);
312
+ }
313
+ /**
314
+ * Starts one of the person's devices over with empty files (after
315
+ * `device.files_lost`): records the request (audit), then, after the commit, enqueues the
316
+ * `sandbox-reset-files` job (deterministic id per device), whose worker waits for running
317
+ * commands and destroys any instance and the file system; the next use creates new ones. Its
318
+ * provider must be the current one (`device.unavailable`); a local device's files
319
+ * are its machine owner's (`device.files_on_device`). An enqueue failure is thrown
320
+ * (the request can be repeated: the reset is idempotent).
321
+ */
322
+ async resetFiles(orgId, accountId, id, actorTokenId, auditDetail) {
323
+ await this.recordReset(orgId, accountId, id, actorTokenId, auditDetail);
324
+ await this.sandboxJobs.resetFiles(id);
325
+ }
326
+ /** The check and audit row of {@link resetFiles}, committed before the job is enqueued. */
327
+ async recordReset(orgId, accountId, id, actorTokenId, auditDetail) {
328
+ refuseDeviceReset(await this.access.usable(orgId, accountId, id));
329
+ await audit(this.db.db, {
330
+ actorAccountId: accountId,
331
+ ...(actorTokenId !== undefined && { actorTokenId }),
332
+ orgId,
333
+ action: "device.files_reset",
334
+ target: id,
335
+ ...(auditDetail !== undefined && { detail: auditDetail }),
336
+ });
337
+ }
338
+ /**
339
+ * The person's default device in the org, created when missing (named by the UI, `name`
340
+ * NULL). An existing usable one is read without locking. A live default whose files or
341
+ * instance are kept by a provider that is not the current one (a provider switch, spec §4.2
342
+ * item 13) is stranded: it is demoted (marked with the provider it was demoted from; the UI
343
+ * names it 「个人设备(<provider display name>)」) and stays listed as unavailable and deletable.
344
+ * Its replacement is the person's former default demoted from the current provider when there
345
+ * is one (switching back restores it, with its files), else a fresh default. A live default
346
+ * not in use yet (no healthy files, no instance, none being created: {@link inUseForDefault})
347
+ * is likewise swapped for a former default holding healthy files at the current provider; it is
348
+ * demoted (from the provider it was made under) so it can come back in turn. A former default
349
+ * belongs to the provider holding its resources once it holds any, else to the one it was
350
+ * demoted from ({@link demotedProvider}), so one swapped out empty and used afterwards is
351
+ * labelled and restored by where its files are.
352
+ * All of it in one transaction: switching back and forth never adds devices.
353
+ *
354
+ * Replacing one first takes the person's membership row (`FOR SHARE`, after the org row), so an
355
+ * offboarding that removes them cannot leave a live default behind; not a member (any more) →
356
+ * `org.not_found`. Idempotent under concurrency: the live default row and the person's former
357
+ * defaults of the current provider are locked (`FOR NO KEY UPDATE`) and the live default re-read
358
+ * after them, the partial unique index on the live default makes a racing insert do nothing, and
359
+ * the select that follows reads the winner. Needs a current sandbox provider
360
+ * (`device.unavailable`). It is the person's baseline, so it is created even at
361
+ * `devices.maxPersonal`.
362
+ */
363
+ async ensureDefault(orgId, accountId) {
364
+ const live = await this.defaultOf(orgId, accountId);
365
+ if (live && !this.stranded(live)) {
366
+ const current = this.providers.cloud()?.plugin;
367
+ if (inUseForDefault(live) || current === undefined)
368
+ return live.id;
369
+ const former = await this.formerDefaults(orgId, accountId, current);
370
+ if (!former.some((f) => f.holdsFiles))
371
+ return live.id;
372
+ }
373
+ return this.insertDefault(orgId, accountId);
374
+ }
375
+ async insertDefault(orgId, accountId) {
376
+ const current = this.providers.cloud();
377
+ if (!current)
378
+ throw deviceUnavailable(null);
379
+ await this.lockMember(orgId, accountId, "share");
380
+ const locked = await this.defaultOf(orgId, accountId, true);
381
+ const former = await this.formerDefaults(orgId, accountId, current.plugin, true);
382
+ // a racing replacement committed while this waited: its default is the answer
383
+ const live = locked ?? (await this.defaultOf(orgId, accountId));
384
+ if (live && live !== locked)
385
+ return live.id;
386
+ const stranded = live !== undefined && this.stranded(live);
387
+ const withFiles = former.find((f) => f.holdsFiles);
388
+ if (live && !stranded && (inUseForDefault(live) || withFiles === undefined))
389
+ return live.id;
390
+ // a default is needed (none, or a stranded one): any former default will do, files first
391
+ const restore = withFiles ?? (live === undefined || stranded ? former[0] : undefined);
392
+ if (live) {
393
+ const from = stranded
394
+ ? (deviceProvider(live, current.plugin) ?? "unknown")
395
+ : (live.provider ?? current.plugin);
396
+ await this.demote(live.id, from);
397
+ }
398
+ if (restore) {
399
+ await this.db
400
+ .updateTable("devices")
401
+ .set({ is_default: true, demoted_from_provider: null, updated_at: sql `now()` })
402
+ .where("id", "=", restore.id)
403
+ .execute();
404
+ return restore.id;
405
+ }
406
+ await this.db
407
+ .insertInto("devices")
408
+ .values({
409
+ id: randomUUID(),
410
+ org_id: orgId,
411
+ owner_kind: "personal",
412
+ owner_account_id: accountId,
413
+ name: null,
414
+ is_default: true,
415
+ source: "cloud",
416
+ provider: current.plugin,
417
+ })
418
+ .onConflict((oc) => oc
419
+ .columns(["org_id", "owner_account_id"])
420
+ .where(sql `is_default AND deleted_at IS NULL`)
421
+ .doNothing())
422
+ .execute();
423
+ const row = await this.defaultOf(orgId, accountId);
424
+ if (row === undefined)
425
+ throw new Error("the default device was not created");
426
+ return row.id;
427
+ }
428
+ /**
429
+ * Turns the live default into an ordinary device marked as demoted from `provider`; a name
430
+ * the person gave it stays. Runs under the person's membership lock and the default row's lock,
431
+ * before any other row becomes the default (the partial unique index).
432
+ */
433
+ async demote(id, provider) {
434
+ await this.db
435
+ .updateTable("devices")
436
+ .set({ is_default: false, demoted_from_provider: provider, updated_at: sql `now()` })
437
+ .where("id", "=", id)
438
+ .execute();
439
+ }
440
+ /**
441
+ * The person's live former defaults of `provider` ({@link demotedProvider}: files or an instance
442
+ * kept by `provider`, or none and demoted from it), the ones holding healthy files first (lost
443
+ * files count as none), then the most recently used, then the most recently demoted. `lock`
444
+ * takes their rows (`FOR NO KEY UPDATE`, in id order, so racing replacements queue on the same
445
+ * rows).
446
+ */
447
+ async formerDefaults(orgId, accountId, provider, lock = false) {
448
+ const rows = await this.db
449
+ .selectFrom("devices as e")
450
+ .leftJoin("device_instances as i", "i.device_id", "e.id")
451
+ .select([
452
+ "e.id",
453
+ "e.provider",
454
+ "e.updated_at",
455
+ "i.provider as instance_provider",
456
+ "i.fs_status",
457
+ "e.demoted_from_provider",
458
+ "i.handle",
459
+ "i.status",
460
+ "i.last_used_at",
461
+ ])
462
+ .where("e.org_id", "=", orgId)
463
+ .where("e.owner_kind", "=", "personal")
464
+ .where("e.owner_account_id", "=", accountId)
465
+ .where("e.is_default", "=", false)
466
+ .where("e.demoted_from_provider", "is not", null)
467
+ .where((eb) => eb.or([eb("e.demoted_from_provider", "=", provider), eb("i.provider", "=", provider)]))
468
+ .where("e.deleted_at", "is", null)
469
+ .orderBy("e.id")
470
+ .$if(lock, (q) => q.forNoKeyUpdate("e"))
471
+ .execute();
472
+ const time = (d) => d?.getTime() ?? 0;
473
+ return rows
474
+ .map((r) => {
475
+ const facts = {
476
+ provider: r.provider,
477
+ instanceProvider: r.instance_provider,
478
+ fsStatus: r.fs_status,
479
+ hasInstance: r.handle !== null,
480
+ };
481
+ return {
482
+ r,
483
+ holdsFiles: inUseForDefault({ ...facts, status: r.status }),
484
+ belongs: demotedProvider(r.demoted_from_provider, facts) === provider,
485
+ };
486
+ })
487
+ .filter(({ belongs }) => belongs)
488
+ .sort((a, b) => Number(b.holdsFiles) - Number(a.holdsFiles) ||
489
+ time(b.r.last_used_at) - time(a.r.last_used_at) ||
490
+ time(b.r.updated_at) - time(a.r.updated_at))
491
+ .map(({ r, holdsFiles }) => ({ id: r.id, holdsFiles }));
492
+ }
493
+ /**
494
+ * The person's IM default (what `/device` set): the device their next new IM conversation
495
+ * uses. Null when none was set, or the chosen one is deleted (the row is cleared with it).
496
+ */
497
+ async imDefault(orgId, accountId) {
498
+ const row = await this.db
499
+ .selectFrom("device_defaults as d")
500
+ .innerJoin("devices as e", "e.id", "d.device_id")
501
+ .select("e.id")
502
+ .where("d.org_id", "=", orgId)
503
+ .where("d.account_id", "=", accountId)
504
+ .where("e.org_id", "=", orgId)
505
+ .where("e.owner_kind", "=", "personal")
506
+ .where("e.owner_account_id", "=", accountId)
507
+ .where("e.deleted_at", "is", null)
508
+ .executeTakeFirst();
509
+ return row?.id ?? null;
510
+ }
511
+ /**
512
+ * Sets the person's IM default. Only one of their own live devices in the org, usable now
513
+ * (`device.not_found` / `device.unavailable` otherwise); the row is written by one
514
+ * statement that re-checks the device is live. There is no row lock, so a delete racing
515
+ * past that check can leave a stale row; reads ignore it ({@link imDefault} joins on
516
+ * `deleted_at IS NULL`).
517
+ */
518
+ async setImDefault(orgId, accountId, deviceId) {
519
+ await this.access.usable(orgId, accountId, deviceId);
520
+ const written = await this.db
521
+ .insertInto("device_defaults")
522
+ .columns(["org_id", "account_id", "device_id"])
523
+ .expression(this.db
524
+ .selectFrom("devices")
525
+ .select([
526
+ sql `${orgId}::text`.as("org_id"),
527
+ sql `${accountId}::text`.as("account_id"),
528
+ "id",
529
+ ])
530
+ .where("id", "=", deviceId)
531
+ .where("org_id", "=", orgId)
532
+ .where("owner_kind", "=", "personal")
533
+ .where("owner_account_id", "=", accountId)
534
+ .where("deleted_at", "is", null))
535
+ .onConflict((oc) => oc
536
+ .columns(["org_id", "account_id"])
537
+ .doUpdateSet({ device_id: deviceId, updated_at: new Date() }))
538
+ .executeTakeFirst();
539
+ if (Number(written.numInsertedOrUpdatedRows ?? 0) === 0)
540
+ throw deviceNotFound();
541
+ }
542
+ /**
543
+ * The person's live default device in the org, if any, with what decides its provider;
544
+ * `lock` takes its row (`FOR NO KEY UPDATE`; a racing demotion makes it read none).
545
+ */
546
+ async defaultOf(orgId, accountId, lock = false) {
547
+ const row = await this.db
548
+ .selectFrom("devices as e")
549
+ .leftJoin("device_instances as i", "i.device_id", "e.id")
550
+ .select([
551
+ "e.id",
552
+ "e.provider",
553
+ "i.provider as instance_provider",
554
+ "i.fs_status",
555
+ "i.handle",
556
+ "i.status",
557
+ ])
558
+ .where("e.org_id", "=", orgId)
559
+ .where("e.owner_kind", "=", "personal")
560
+ .where("e.owner_account_id", "=", accountId)
561
+ .where("e.is_default", "=", true)
562
+ .where("e.deleted_at", "is", null)
563
+ .$if(lock, (q) => q.forNoKeyUpdate("e"))
564
+ .executeTakeFirst();
565
+ return (row && {
566
+ id: row.id,
567
+ provider: row.provider,
568
+ instanceProvider: row.instance_provider,
569
+ fsStatus: row.fs_status,
570
+ hasInstance: row.handle !== null,
571
+ status: row.status,
572
+ });
573
+ }
574
+ /** Its files or instance are kept by a provider that is not the current one. */
575
+ stranded(f) {
576
+ const current = this.providers.cloud()?.plugin;
577
+ return current !== undefined && deviceProvider(f, current) !== current;
578
+ }
579
+ /** The person's live devices (or the one `id`) as views. */
580
+ async views(orgId, accountId, id) {
581
+ // all of them even for one `id`: a former default's ordinal counts its siblings
582
+ const all = await this.db
583
+ .selectFrom("devices as e")
584
+ .leftJoin("device_instances as i", "i.device_id", "e.id")
585
+ .leftJoin("device_machines as m", (j) => j.onRef("m.device_id", "=", "e.id").on("m.revoked_at", "is", null))
586
+ .select([
587
+ "e.id",
588
+ "e.name",
589
+ "e.is_default",
590
+ "e.source",
591
+ "e.provider",
592
+ "e.demoted_from_provider",
593
+ "e.created_at",
594
+ "m.id as machine_id",
595
+ "m.name as machine_name",
596
+ "m.os as machine_os",
597
+ "m.mode as machine_mode",
598
+ "m.program_version as machine_program_version",
599
+ "m.last_seen_at as machine_last_seen_at",
600
+ "m.session_isolation as machine_session_isolation",
601
+ "i.provider as instance_provider",
602
+ "i.fs_status",
603
+ "i.handle",
604
+ "i.status",
605
+ "i.last_used_at",
606
+ ])
607
+ .where("e.org_id", "=", orgId)
608
+ .where("e.owner_kind", "=", "personal")
609
+ .where("e.owner_account_id", "=", accountId)
610
+ .where("e.deleted_at", "is", null)
611
+ .orderBy("e.is_default", "desc")
612
+ .orderBy("e.created_at")
613
+ .orderBy("e.id")
614
+ .execute();
615
+ const rows = id === undefined ? all : all.filter((r) => r.id === id);
616
+ if (rows.length === 0)
617
+ return [];
618
+ const factsOf = (r) => ({
619
+ provider: r.provider,
620
+ instanceProvider: r.instance_provider,
621
+ fsStatus: r.fs_status,
622
+ hasInstance: r.handle !== null,
623
+ });
624
+ // a former default is labelled after the provider holding its resources, else its marker
625
+ const demoted = new Map(all.map((r) => [r.id, demotedProvider(r.demoted_from_provider, factsOf(r))]));
626
+ const ordinals = new Map();
627
+ const seen = new Map();
628
+ for (const r of [...all].sort((a, b) => a.created_at.getTime() - b.created_at.getTime() || a.id.localeCompare(b.id))) {
629
+ const from = demoted.get(r.id) ?? null;
630
+ if (from === null || r.name !== null)
631
+ continue;
632
+ const n = (seen.get(from) ?? 0) + 1;
633
+ seen.set(from, n);
634
+ ordinals.set(r.id, n);
635
+ }
636
+ const demotedProviders = [
637
+ ...new Set(rows.flatMap((r) => (demoted.get(r.id) ? [demoted.get(r.id)] : []))),
638
+ ];
639
+ const [limits, names] = await Promise.all([
640
+ this.sandbox.orgLimits(orgId),
641
+ this.displayNames.many(demotedProviders),
642
+ ]);
643
+ const current = this.providers.cloud()?.plugin;
644
+ // a local device is online while a replica holds its machine's connection lease
645
+ const online = new Map(await Promise.all(rows
646
+ .filter((r) => r.source === "local")
647
+ .map(async (r) => [r.id, (await this.locks.holderOf(deviceLeaseKey(r.id))) !== null])));
648
+ return rows.map((r) => {
649
+ const provider = deviceProvider(factsOf(r), current);
650
+ const live = (r.status === "running" || r.status === "suspended") && r.last_used_at;
651
+ const from = demoted.get(r.id) ?? null;
652
+ return {
653
+ id: r.id,
654
+ name: r.name,
655
+ isDefault: r.is_default,
656
+ demotedFrom: from === null
657
+ ? null
658
+ : {
659
+ provider: from,
660
+ displayName: names.get(from) ?? null,
661
+ ordinal: ordinals.get(r.id) ?? 1,
662
+ },
663
+ ownerKind: "personal",
664
+ source: r.source,
665
+ provider,
666
+ available: provider !== null && isInternalProvider(provider)
667
+ ? this.providers.forName(provider) !== undefined
668
+ : current !== undefined && provider === current,
669
+ online: r.source === "local" ? (online.get(r.id) ?? false) : null,
670
+ machine: r.machine_id !== null && r.machine_name !== null && r.machine_os !== null
671
+ ? {
672
+ id: r.machine_id,
673
+ name: r.machine_name,
674
+ os: r.machine_os,
675
+ mode: r.machine_mode,
676
+ programVersion: r.machine_program_version,
677
+ lastSeenAt: r.machine_last_seen_at?.toISOString() ?? null,
678
+ }
679
+ : null,
680
+ // a local device's machine decides it; cloud devices have none in phase 2
681
+ sessionIsolation: r.machine_session_isolation ?? false,
682
+ filesLost: r.fs_status === "lost",
683
+ instance: live
684
+ ? {
685
+ status: r.status,
686
+ lastUsedAt: r.last_used_at.toISOString(),
687
+ }
688
+ : null,
689
+ limits: { ...limits, allowHosts: [...limits.allowHosts] },
690
+ createdAt: r.created_at.toISOString(),
691
+ };
692
+ });
693
+ }
694
+ /**
695
+ * Serializes the person's device writes in the org: the org row (`FOR SHARE`), then their
696
+ * membership row (`FOR NO KEY UPDATE`, or `FOR SHARE` with `mode` share: enough to keep the
697
+ * membership from being removed meanwhile), the order member removal locks them in. Not a
698
+ * member (any more) → `org.not_found`, as the org guard answers.
699
+ */
700
+ async lockMember(orgId, accountId, mode = "update") {
701
+ const org = await this.db
702
+ .selectFrom("orgs")
703
+ .select("id")
704
+ .where("id", "=", orgId)
705
+ .where("deleted_at", "is", null)
706
+ .forShare()
707
+ .executeTakeFirst();
708
+ const m = org &&
709
+ (await this.db
710
+ .selectFrom("memberships")
711
+ .select("account_id")
712
+ .where("org_id", "=", orgId)
713
+ .where("account_id", "=", accountId)
714
+ .$if(mode === "update", (q) => q.forNoKeyUpdate())
715
+ .$if(mode === "share", (q) => q.forShare())
716
+ .executeTakeFirst());
717
+ if (!m)
718
+ throw new ApiError("org.not_found", "Organization not found");
719
+ }
720
+ /** Locks one of the person's live devices (after their membership); else `not_found`. */
721
+ async lockOwn(orgId, accountId, id) {
722
+ await this.lockMember(orgId, accountId);
723
+ const row = await this.db
724
+ .selectFrom("devices")
725
+ .select(["name", "is_default"])
726
+ .where("id", "=", id)
727
+ .where("org_id", "=", orgId)
728
+ .where("owner_kind", "=", "personal")
729
+ .where("owner_account_id", "=", accountId)
730
+ .where("deleted_at", "is", null)
731
+ .forNoKeyUpdate()
732
+ .executeTakeFirst();
733
+ if (!row)
734
+ throw deviceNotFound();
735
+ return row;
736
+ }
737
+ async assertNameFree(orgId, accountId, name) {
738
+ const clash = await this.db
739
+ .selectFrom("devices")
740
+ .select("id")
741
+ .where("org_id", "=", orgId)
742
+ .where("owner_account_id", "=", accountId)
743
+ .where("deleted_at", "is", null)
744
+ .where(sql `lower(name) = lower(${name})`)
745
+ .executeTakeFirst();
746
+ if (clash)
747
+ throw nameTaken();
748
+ }
749
+ };
750
+ __decorate([
751
+ Transactional()
752
+ ], DevicesService.prototype, "insert", null);
753
+ __decorate([
754
+ Transactional()
755
+ ], DevicesService.prototype, "createLocal", null);
756
+ __decorate([
757
+ Transactional()
758
+ ], DevicesService.prototype, "renameIn", null);
759
+ __decorate([
760
+ Transactional()
761
+ ], DevicesService.prototype, "remove", null);
762
+ __decorate([
763
+ Transactional()
764
+ ], DevicesService.prototype, "recordReset", null);
765
+ __decorate([
766
+ Transactional()
767
+ ], DevicesService.prototype, "insertDefault", null);
768
+ DevicesService = __decorate([
769
+ Injectable(),
770
+ __param(0, Inject(KernelDb)),
771
+ __param(1, Inject(TransactionHost)),
772
+ __param(2, Inject(KernelConfigService)),
773
+ __param(3, Inject(SandboxProviders)),
774
+ __param(4, Inject(SandboxService)),
775
+ __param(5, Inject(SandboxJobs)),
776
+ __param(6, Inject(DeviceAccess)),
777
+ __param(7, Inject(ExtensionDisplayNames)),
778
+ __param(8, Inject(KERNEL_LOGGER)),
779
+ __param(9, Inject(LockService)),
780
+ __param(10, Inject(MachinesService))
781
+ ], DevicesService);
782
+ export { DevicesService };
783
+ /**
784
+ * Ruling R24: a local device's files are in a directory on its machine, which the
785
+ * platform never wipes; a lost directory comes back with `capybara-device logout` and a new `login` on the machine.
786
+ */
787
+ function refuseDeviceReset(env) {
788
+ if (env.provider === LOCAL_PROVIDER) {
789
+ throw new ApiError("device.files_on_device", "This device's files are in a directory on its connected machine and cannot be reset from here. To start over, run capybara-device logout, then capybara-device login into this device, on that machine.");
790
+ }
791
+ }