@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.1

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 (637) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +2 -0
  3. package/README.md +20 -2
  4. package/bootstrap.json +26 -0
  5. package/dist/admin/admin.controller.d.ts +139 -0
  6. package/dist/admin/admin.controller.js +238 -0
  7. package/dist/admin/extensions.controller.d.ts +100 -0
  8. package/dist/admin/extensions.controller.js +226 -0
  9. package/dist/admin/setup.controller.d.ts +36 -0
  10. package/dist/admin/setup.controller.js +106 -0
  11. package/dist/admin/setup.service.d.ts +47 -0
  12. package/dist/admin/setup.service.js +90 -0
  13. package/dist/agents/agents.controller.d.ts +205 -0
  14. package/dist/agents/agents.controller.js +144 -0
  15. package/dist/agents/agents.service.d.ts +177 -0
  16. package/dist/agents/agents.service.js +677 -0
  17. package/dist/agents/definition.d.ts +198 -0
  18. package/dist/agents/definition.js +152 -0
  19. package/dist/agents/models.controller.d.ts +13 -0
  20. package/dist/agents/models.controller.js +31 -0
  21. package/dist/agents/templates.controller.d.ts +15 -0
  22. package/dist/agents/templates.controller.js +37 -0
  23. package/dist/agents/templates.d.ts +83 -0
  24. package/dist/agents/templates.js +173 -0
  25. package/dist/catalog/admin-catalog.controller.d.ts +143 -0
  26. package/dist/catalog/admin-catalog.controller.js +245 -0
  27. package/dist/catalog/catalog.service.d.ts +430 -0
  28. package/dist/catalog/catalog.service.js +882 -0
  29. package/dist/catalog/claude/agents.d.ts +27 -0
  30. package/dist/catalog/claude/agents.js +270 -0
  31. package/dist/catalog/claude/commands.d.ts +50 -0
  32. package/dist/catalog/claude/commands.js +179 -0
  33. package/dist/catalog/claude/manifest.d.ts +69 -0
  34. package/dist/catalog/claude/manifest.js +134 -0
  35. package/dist/catalog/claude/marketplace.d.ts +35 -0
  36. package/dist/catalog/claude/marketplace.js +194 -0
  37. package/dist/catalog/claude/mcp.d.ts +33 -0
  38. package/dist/catalog/claude/mcp.js +226 -0
  39. package/dist/catalog/claude/report.d.ts +86 -0
  40. package/dist/catalog/claude/report.js +121 -0
  41. package/dist/catalog/claude/translate.d.ts +56 -0
  42. package/dist/catalog/claude/translate.js +857 -0
  43. package/dist/catalog/cli.d.ts +46 -0
  44. package/dist/catalog/cli.js +211 -0
  45. package/dist/catalog/git-source.d.ts +127 -0
  46. package/dist/catalog/git-source.js +520 -0
  47. package/dist/catalog/marketplace-fetch.d.ts +99 -0
  48. package/dist/catalog/marketplace-fetch.js +203 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +97 -0
  50. package/dist/catalog/marketplaces.controller.js +197 -0
  51. package/dist/catalog/marketplaces.service.d.ts +340 -0
  52. package/dist/catalog/marketplaces.service.js +1217 -0
  53. package/dist/catalog/org-catalog.controller.d.ts +128 -0
  54. package/dist/catalog/org-catalog.controller.js +277 -0
  55. package/dist/catalog/org-catalog.service.d.ts +246 -0
  56. package/dist/catalog/org-catalog.service.js +625 -0
  57. package/dist/catalog/plugin-import.d.ts +436 -0
  58. package/dist/catalog/plugin-import.js +1069 -0
  59. package/dist/catalog/plugin-install.d.ts +447 -0
  60. package/dist/catalog/plugin-install.js +1333 -0
  61. package/dist/catalog/plugin-package.d.ts +143 -0
  62. package/dist/catalog/plugin-package.js +382 -0
  63. package/dist/catalog/plugin-upgrade.d.ts +222 -0
  64. package/dist/catalog/plugin-upgrade.js +1219 -0
  65. package/dist/catalog/requests.service.d.ts +162 -0
  66. package/dist/catalog/requests.service.js +504 -0
  67. package/dist/catalog/schema-path.d.ts +7 -0
  68. package/dist/catalog/schema-path.js +63 -0
  69. package/dist/catalog/upgrade-targets.d.ts +59 -0
  70. package/dist/catalog/upgrade-targets.js +90 -0
  71. package/dist/catalog/versions.d.ts +31 -0
  72. package/dist/catalog/versions.js +44 -0
  73. package/dist/channels/actions.d.ts +37 -0
  74. package/dist/channels/actions.js +121 -0
  75. package/dist/channels/cards.d.ts +44 -0
  76. package/dist/channels/cards.js +156 -0
  77. package/dist/channels/connections.controller.d.ts +59 -0
  78. package/dist/channels/connections.controller.js +115 -0
  79. package/dist/channels/connections.service.d.ts +187 -0
  80. package/dist/channels/connections.service.js +534 -0
  81. package/dist/channels/features.d.ts +12 -0
  82. package/dist/channels/features.js +22 -0
  83. package/dist/channels/inbound.d.ts +120 -0
  84. package/dist/channels/inbound.js +332 -0
  85. package/dist/channels/outbound.d.ts +140 -0
  86. package/dist/channels/outbound.js +1126 -0
  87. package/dist/channels/phrases.d.ts +100 -0
  88. package/dist/channels/phrases.js +81 -0
  89. package/dist/channels/supervisor.d.ts +182 -0
  90. package/dist/channels/supervisor.js +625 -0
  91. package/dist/channels/threads.d.ts +29 -0
  92. package/dist/channels/threads.js +104 -0
  93. package/dist/channels/webhook-url.d.ts +16 -0
  94. package/dist/channels/webhook-url.js +34 -0
  95. package/dist/channels/webhook.controller.d.ts +19 -0
  96. package/dist/channels/webhook.controller.js +72 -0
  97. package/dist/channels/webhook.d.ts +73 -0
  98. package/dist/channels/webhook.js +274 -0
  99. package/dist/config/docs.d.ts +9 -0
  100. package/dist/config/docs.js +85 -0
  101. package/dist/config/env.d.ts +6 -0
  102. package/dist/config/env.js +73 -0
  103. package/dist/config/fields.d.ts +42 -0
  104. package/dist/config/fields.js +214 -0
  105. package/dist/config/file-source.d.ts +3 -0
  106. package/dist/config/file-source.js +31 -0
  107. package/dist/config/load.d.ts +20 -0
  108. package/dist/config/load.js +98 -0
  109. package/dist/config/nacos-source.d.ts +31 -0
  110. package/dist/config/nacos-source.js +229 -0
  111. package/dist/config/schema.d.ts +237 -0
  112. package/dist/config/schema.js +1192 -0
  113. package/dist/config/sources.d.ts +18 -0
  114. package/dist/config/sources.js +59 -0
  115. package/dist/config/types.d.ts +9 -0
  116. package/dist/config/types.js +7 -0
  117. package/dist/conversations/artifacts.d.ts +52 -0
  118. package/dist/conversations/artifacts.js +137 -0
  119. package/dist/conversations/attachments.controller.d.ts +28 -0
  120. package/dist/conversations/attachments.controller.js +96 -0
  121. package/dist/conversations/attachments.service.d.ts +180 -0
  122. package/dist/conversations/attachments.service.js +578 -0
  123. package/dist/conversations/conversations.controller.d.ts +288 -0
  124. package/dist/conversations/conversations.controller.js +607 -0
  125. package/dist/conversations/conversations.service.d.ts +321 -0
  126. package/dist/conversations/conversations.service.js +754 -0
  127. package/dist/conversations/event-log.d.ts +122 -0
  128. package/dist/conversations/event-log.js +259 -0
  129. package/dist/conversations/events.d.ts +856 -0
  130. package/dist/conversations/events.js +639 -0
  131. package/dist/conversations/files.d.ts +92 -0
  132. package/dist/conversations/files.js +213 -0
  133. package/dist/conversations/outputs-read.d.ts +34 -0
  134. package/dist/conversations/outputs-read.js +37 -0
  135. package/dist/conversations/queue.d.ts +169 -0
  136. package/dist/conversations/queue.js +527 -0
  137. package/dist/conversations/sandbox-status.d.ts +21 -0
  138. package/dist/conversations/sandbox-status.js +24 -0
  139. package/dist/conversations/selection.d.ts +46 -0
  140. package/dist/conversations/selection.js +75 -0
  141. package/dist/conversations/titles.d.ts +93 -0
  142. package/dist/conversations/titles.js +423 -0
  143. package/dist/ctx/bus.d.ts +16 -0
  144. package/dist/ctx/bus.js +101 -0
  145. package/dist/ctx/create-ctx.d.ts +109 -0
  146. package/dist/ctx/create-ctx.js +592 -0
  147. package/dist/ctx/kv.d.ts +4 -0
  148. package/dist/ctx/kv.js +31 -0
  149. package/dist/ctx/lock.d.ts +4 -0
  150. package/dist/ctx/lock.js +39 -0
  151. package/dist/ctx/namespace.d.ts +6 -0
  152. package/dist/ctx/namespace.js +12 -0
  153. package/dist/ctx/queue.d.ts +25 -0
  154. package/dist/ctx/queue.js +151 -0
  155. package/dist/ctx/secrets.d.ts +45 -0
  156. package/dist/ctx/secrets.js +175 -0
  157. package/dist/db/kernel-schema.d.ts +1122 -0
  158. package/dist/db/kernel-schema.js +5 -0
  159. package/dist/db/migrator.d.ts +28 -0
  160. package/dist/db/migrator.js +140 -0
  161. package/dist/db/pool.d.ts +21 -0
  162. package/dist/db/pool.js +28 -0
  163. package/dist/db/sql-statements.d.ts +34 -0
  164. package/dist/db/sql-statements.js +168 -0
  165. package/dist/errors.d.ts +211 -0
  166. package/dist/errors.js +213 -0
  167. package/dist/evals/budget.d.ts +61 -0
  168. package/dist/evals/budget.js +181 -0
  169. package/dist/evals/diff.d.ts +55 -0
  170. package/dist/evals/diff.js +133 -0
  171. package/dist/evals/judge.d.ts +53 -0
  172. package/dist/evals/judge.js +149 -0
  173. package/dist/evals/plan.d.ts +47 -0
  174. package/dist/evals/plan.js +77 -0
  175. package/dist/evals/reconstruct.d.ts +137 -0
  176. package/dist/evals/reconstruct.js +322 -0
  177. package/dist/evals/recorded-tools.d.ts +54 -0
  178. package/dist/evals/recorded-tools.js +167 -0
  179. package/dist/evals/run-replay.d.ts +86 -0
  180. package/dist/evals/run-replay.js +502 -0
  181. package/dist/evals/runs.controller.d.ts +100 -0
  182. package/dist/evals/runs.controller.js +199 -0
  183. package/dist/evals/runs.service.d.ts +275 -0
  184. package/dist/evals/runs.service.js +836 -0
  185. package/dist/evals/sets.controller.d.ts +61 -0
  186. package/dist/evals/sets.controller.js +183 -0
  187. package/dist/evals/sets.service.d.ts +128 -0
  188. package/dist/evals/sets.service.js +558 -0
  189. package/dist/evals/snapshot.d.ts +76 -0
  190. package/dist/evals/snapshot.js +207 -0
  191. package/dist/evals/step-replay.d.ts +113 -0
  192. package/dist/evals/step-replay.js +181 -0
  193. package/dist/evals/trajectory.controller.d.ts +41 -0
  194. package/dist/evals/trajectory.controller.js +88 -0
  195. package/dist/evals/trajectory.d.ts +144 -0
  196. package/dist/evals/trajectory.js +338 -0
  197. package/dist/evals/trajectory.service.d.ts +108 -0
  198. package/dist/evals/trajectory.service.js +323 -0
  199. package/dist/evals/worker.d.ts +101 -0
  200. package/dist/evals/worker.js +790 -0
  201. package/dist/extensions/admin-ops.d.ts +105 -0
  202. package/dist/extensions/admin-ops.js +353 -0
  203. package/dist/extensions/admin-view.d.ts +79 -0
  204. package/dist/extensions/admin-view.js +327 -0
  205. package/dist/extensions/approvals.d.ts +119 -0
  206. package/dist/extensions/approvals.js +205 -0
  207. package/dist/extensions/blobs.d.ts +45 -0
  208. package/dist/extensions/blobs.js +160 -0
  209. package/dist/extensions/bootstrap.d.ts +176 -0
  210. package/dist/extensions/bootstrap.js +535 -0
  211. package/dist/extensions/cli.d.ts +61 -0
  212. package/dist/extensions/cli.js +165 -0
  213. package/dist/extensions/config-json-schema.d.ts +9 -0
  214. package/dist/extensions/config-json-schema.js +73 -0
  215. package/dist/extensions/deployment-config.d.ts +138 -0
  216. package/dist/extensions/deployment-config.js +394 -0
  217. package/dist/extensions/enabled.d.ts +31 -0
  218. package/dist/extensions/enabled.js +55 -0
  219. package/dist/extensions/hooks.d.ts +161 -0
  220. package/dist/extensions/hooks.js +425 -0
  221. package/dist/extensions/host.d.ts +577 -0
  222. package/dist/extensions/host.js +2071 -0
  223. package/dist/extensions/inflight.d.ts +69 -0
  224. package/dist/extensions/inflight.js +277 -0
  225. package/dist/extensions/installs.d.ts +166 -0
  226. package/dist/extensions/installs.js +253 -0
  227. package/dist/extensions/instance.d.ts +167 -0
  228. package/dist/extensions/instance.js +329 -0
  229. package/dist/extensions/ledger.d.ts +30 -0
  230. package/dist/extensions/ledger.js +50 -0
  231. package/dist/extensions/lifecycle.d.ts +80 -0
  232. package/dist/extensions/lifecycle.js +152 -0
  233. package/dist/extensions/migrate-lock.d.ts +51 -0
  234. package/dist/extensions/migrate-lock.js +100 -0
  235. package/dist/extensions/org-config.controller.d.ts +24 -0
  236. package/dist/extensions/org-config.controller.js +59 -0
  237. package/dist/extensions/org-config.d.ts +169 -0
  238. package/dist/extensions/org-config.js +520 -0
  239. package/dist/extensions/package.d.ts +115 -0
  240. package/dist/extensions/package.js +246 -0
  241. package/dist/extensions/permission-set.d.ts +117 -0
  242. package/dist/extensions/permission-set.js +184 -0
  243. package/dist/extensions/permission-view.d.ts +194 -0
  244. package/dist/extensions/permission-view.js +284 -0
  245. package/dist/extensions/registry.d.ts +24 -0
  246. package/dist/extensions/registry.js +56 -0
  247. package/dist/extensions/resolve.d.ts +12 -0
  248. package/dist/extensions/resolve.js +71 -0
  249. package/dist/extensions/sources.d.ts +69 -0
  250. package/dist/extensions/sources.js +120 -0
  251. package/dist/extensions/sync.d.ts +40 -0
  252. package/dist/extensions/sync.js +242 -0
  253. package/dist/files/previewers.controller.d.ts +46 -0
  254. package/dist/files/previewers.controller.js +105 -0
  255. package/dist/files/previewers.d.ts +100 -0
  256. package/dist/files/previewers.js +250 -0
  257. package/dist/http/api.module.d.ts +114 -0
  258. package/dist/http/api.module.js +448 -0
  259. package/dist/http/app.d.ts +77 -0
  260. package/dist/http/app.js +220 -0
  261. package/dist/http/error.filter.d.ts +21 -0
  262. package/dist/http/error.filter.js +85 -0
  263. package/dist/http/gateway.module.d.ts +15 -0
  264. package/dist/http/gateway.module.js +13 -0
  265. package/dist/http/health.controller.d.ts +26 -0
  266. package/dist/http/health.controller.js +79 -0
  267. package/dist/http/nest-logger.d.ts +20 -0
  268. package/dist/http/nest-logger.js +28 -0
  269. package/dist/http/plugin-dispatch.d.ts +68 -0
  270. package/dist/http/plugin-dispatch.js +200 -0
  271. package/dist/http/tokens.d.ts +131 -0
  272. package/dist/http/tokens.js +131 -0
  273. package/dist/http/zod.pipe.d.ts +8 -0
  274. package/dist/http/zod.pipe.js +14 -0
  275. package/dist/identity/accounts.d.ts +93 -0
  276. package/dist/identity/accounts.js +367 -0
  277. package/dist/identity/api-tokens.d.ts +73 -0
  278. package/dist/identity/api-tokens.js +197 -0
  279. package/dist/identity/audit.d.ts +23 -0
  280. package/dist/identity/audit.js +41 -0
  281. package/dist/identity/auth.controller.d.ts +40 -0
  282. package/dist/identity/auth.controller.js +130 -0
  283. package/dist/identity/auth.guard.d.ts +41 -0
  284. package/dist/identity/auth.guard.js +162 -0
  285. package/dist/identity/binding.d.ts +47 -0
  286. package/dist/identity/binding.js +84 -0
  287. package/dist/identity/cookies.d.ts +16 -0
  288. package/dist/identity/cookies.js +32 -0
  289. package/dist/identity/credential-check.d.ts +17 -0
  290. package/dist/identity/credential-check.js +24 -0
  291. package/dist/identity/enterprise-admin.d.ts +14 -0
  292. package/dist/identity/enterprise-admin.js +27 -0
  293. package/dist/identity/external.d.ts +106 -0
  294. package/dist/identity/external.js +337 -0
  295. package/dist/identity/hash.d.ts +2 -0
  296. package/dist/identity/hash.js +3 -0
  297. package/dist/identity/login.d.ts +6 -0
  298. package/dist/identity/login.js +20 -0
  299. package/dist/identity/me.controller.d.ts +61 -0
  300. package/dist/identity/me.controller.js +159 -0
  301. package/dist/identity/passwords.d.ts +6 -0
  302. package/dist/identity/passwords.js +37 -0
  303. package/dist/identity/principal.d.ts +56 -0
  304. package/dist/identity/principal.js +38 -0
  305. package/dist/identity/rate-limit.d.ts +55 -0
  306. package/dist/identity/rate-limit.js +121 -0
  307. package/dist/identity/sessions.d.ts +84 -0
  308. package/dist/identity/sessions.js +306 -0
  309. package/dist/identity/settings.d.ts +121 -0
  310. package/dist/identity/settings.js +248 -0
  311. package/dist/identity/sso.controller.d.ts +59 -0
  312. package/dist/identity/sso.controller.js +192 -0
  313. package/dist/identity/sso.d.ts +83 -0
  314. package/dist/identity/sso.js +202 -0
  315. package/dist/inbox/inbox.service.d.ts +43 -0
  316. package/dist/inbox/inbox.service.js +57 -0
  317. package/dist/index.d.ts +69 -0
  318. package/dist/index.js +67 -0
  319. package/dist/kernel.d.ts +259 -0
  320. package/dist/kernel.js +1326 -0
  321. package/dist/log-config.d.ts +9 -0
  322. package/dist/log-config.js +27 -0
  323. package/dist/log-context.d.ts +32 -0
  324. package/dist/log-context.js +40 -0
  325. package/dist/log-loki.d.ts +34 -0
  326. package/dist/log-loki.js +145 -0
  327. package/dist/log.d.ts +79 -0
  328. package/dist/log.js +303 -0
  329. package/dist/models/prices.d.ts +53 -0
  330. package/dist/models/prices.js +121 -0
  331. package/dist/models/purposes.controller.d.ts +19 -0
  332. package/dist/models/purposes.controller.js +56 -0
  333. package/dist/models/purposes.d.ts +140 -0
  334. package/dist/models/purposes.js +267 -0
  335. package/dist/net/proxy.d.ts +44 -0
  336. package/dist/net/proxy.js +162 -0
  337. package/dist/net/public-address.d.ts +60 -0
  338. package/dist/net/public-address.js +272 -0
  339. package/dist/net/safe-fetch.d.ts +38 -0
  340. package/dist/net/safe-fetch.js +140 -0
  341. package/dist/orgs/directory-sync.controller.d.ts +14 -0
  342. package/dist/orgs/directory-sync.controller.js +40 -0
  343. package/dist/orgs/directory-sync.d.ts +166 -0
  344. package/dist/orgs/directory-sync.js +558 -0
  345. package/dist/orgs/invitations.controller.d.ts +58 -0
  346. package/dist/orgs/invitations.controller.js +137 -0
  347. package/dist/orgs/invitations.service.d.ts +80 -0
  348. package/dist/orgs/invitations.service.js +217 -0
  349. package/dist/orgs/members.service.d.ts +63 -0
  350. package/dist/orgs/members.service.js +234 -0
  351. package/dist/orgs/offboarding.d.ts +141 -0
  352. package/dist/orgs/offboarding.js +398 -0
  353. package/dist/orgs/org-lock.d.ts +32 -0
  354. package/dist/orgs/org-lock.js +46 -0
  355. package/dist/orgs/org.guard.d.ts +35 -0
  356. package/dist/orgs/org.guard.js +95 -0
  357. package/dist/orgs/orgs.controller.d.ts +78 -0
  358. package/dist/orgs/orgs.controller.js +192 -0
  359. package/dist/orgs/orgs.service.d.ts +61 -0
  360. package/dist/orgs/orgs.service.js +209 -0
  361. package/dist/orgs/roles.d.ts +13 -0
  362. package/dist/orgs/roles.js +58 -0
  363. package/dist/orgs/settings.controller.d.ts +20 -0
  364. package/dist/orgs/settings.controller.js +53 -0
  365. package/dist/orgs/settings.service.d.ts +120 -0
  366. package/dist/orgs/settings.service.js +178 -0
  367. package/dist/packages/npm.d.ts +50 -0
  368. package/dist/packages/npm.js +218 -0
  369. package/dist/packages/provenance.d.ts +47 -0
  370. package/dist/packages/provenance.js +147 -0
  371. package/dist/packages/tgz.d.ts +76 -0
  372. package/dist/packages/tgz.js +225 -0
  373. package/dist/runtime/abort.d.ts +32 -0
  374. package/dist/runtime/abort.js +71 -0
  375. package/dist/runtime/checkpointer.d.ts +32 -0
  376. package/dist/runtime/checkpointer.js +243 -0
  377. package/dist/runtime/context/build.d.ts +254 -0
  378. package/dist/runtime/context/build.js +693 -0
  379. package/dist/runtime/context/claude-tools.d.ts +11 -0
  380. package/dist/runtime/context/claude-tools.js +24 -0
  381. package/dist/runtime/context/compaction.d.ts +26 -0
  382. package/dist/runtime/context/compaction.js +195 -0
  383. package/dist/runtime/context/pairing.d.ts +11 -0
  384. package/dist/runtime/context/pairing.js +82 -0
  385. package/dist/runtime/context/reminders.d.ts +5 -0
  386. package/dist/runtime/context/reminders.js +11 -0
  387. package/dist/runtime/context/skills.d.ts +105 -0
  388. package/dist/runtime/context/skills.js +283 -0
  389. package/dist/runtime/context/tokens.d.ts +19 -0
  390. package/dist/runtime/context/tokens.js +104 -0
  391. package/dist/runtime/conversation-lock.d.ts +40 -0
  392. package/dist/runtime/conversation-lock.js +97 -0
  393. package/dist/runtime/hook-calls.d.ts +84 -0
  394. package/dist/runtime/hook-calls.js +136 -0
  395. package/dist/runtime/langgraph-loop.d.ts +52 -0
  396. package/dist/runtime/langgraph-loop.js +247 -0
  397. package/dist/runtime/loop.d.ts +93 -0
  398. package/dist/runtime/loop.js +7 -0
  399. package/dist/runtime/maintenance.d.ts +80 -0
  400. package/dist/runtime/maintenance.js +148 -0
  401. package/dist/runtime/media-cache.d.ts +21 -0
  402. package/dist/runtime/media-cache.js +51 -0
  403. package/dist/runtime/model-call.d.ts +176 -0
  404. package/dist/runtime/model-call.js +1049 -0
  405. package/dist/runtime/providers.d.ts +86 -0
  406. package/dist/runtime/providers.js +224 -0
  407. package/dist/runtime/quota.d.ts +29 -0
  408. package/dist/runtime/quota.js +70 -0
  409. package/dist/runtime/run-finish.d.ts +45 -0
  410. package/dist/runtime/run-finish.js +69 -0
  411. package/dist/runtime/run-queue.d.ts +121 -0
  412. package/dist/runtime/run-queue.js +493 -0
  413. package/dist/runtime/run-worker.d.ts +138 -0
  414. package/dist/runtime/run-worker.js +806 -0
  415. package/dist/runtime/stream.controller.d.ts +34 -0
  416. package/dist/runtime/stream.controller.js +122 -0
  417. package/dist/runtime/stream.d.ts +63 -0
  418. package/dist/runtime/stream.js +262 -0
  419. package/dist/runtime/subagents/child.d.ts +80 -0
  420. package/dist/runtime/subagents/child.js +225 -0
  421. package/dist/runtime/subagents/definition.d.ts +103 -0
  422. package/dist/runtime/subagents/definition.js +392 -0
  423. package/dist/runtime/subagents/dispatch.d.ts +69 -0
  424. package/dist/runtime/subagents/dispatch.js +502 -0
  425. package/dist/runtime/subagents/limits.d.ts +23 -0
  426. package/dist/runtime/subagents/limits.js +34 -0
  427. package/dist/runtime/subagents/org-agents.d.ts +50 -0
  428. package/dist/runtime/subagents/org-agents.js +70 -0
  429. package/dist/runtime/subagents/preamble.d.ts +7 -0
  430. package/dist/runtime/subagents/preamble.js +11 -0
  431. package/dist/runtime/subagents/progress.d.ts +26 -0
  432. package/dist/runtime/subagents/progress.js +36 -0
  433. package/dist/runtime/subagents/roster.d.ts +55 -0
  434. package/dist/runtime/subagents/roster.js +111 -0
  435. package/dist/runtime/subagents/skill-fork.d.ts +123 -0
  436. package/dist/runtime/subagents/skill-fork.js +259 -0
  437. package/dist/runtime/usage-report.d.ts +163 -0
  438. package/dist/runtime/usage-report.js +551 -0
  439. package/dist/runtime/waits.d.ts +233 -0
  440. package/dist/runtime/waits.js +883 -0
  441. package/dist/sandbox/leases.d.ts +169 -0
  442. package/dist/sandbox/leases.js +515 -0
  443. package/dist/sandbox/lifecycle.d.ts +21 -0
  444. package/dist/sandbox/lifecycle.js +68 -0
  445. package/dist/sandbox/sandbox.service.d.ts +249 -0
  446. package/dist/sandbox/sandbox.service.js +908 -0
  447. package/dist/skills/catalog.d.ts +149 -0
  448. package/dist/skills/catalog.js +405 -0
  449. package/dist/skills/changes.controller.d.ts +56 -0
  450. package/dist/skills/changes.controller.js +136 -0
  451. package/dist/skills/changes.service.d.ts +175 -0
  452. package/dist/skills/changes.service.js +805 -0
  453. package/dist/skills/invocable.controller.d.ts +23 -0
  454. package/dist/skills/invocable.controller.js +50 -0
  455. package/dist/skills/invocation-keys.d.ts +23 -0
  456. package/dist/skills/invocation-keys.js +44 -0
  457. package/dist/skills/invoke.d.ts +135 -0
  458. package/dist/skills/invoke.js +286 -0
  459. package/dist/skills/package.d.ts +87 -0
  460. package/dist/skills/package.js +227 -0
  461. package/dist/skills/skills.controller.d.ts +40 -0
  462. package/dist/skills/skills.controller.js +110 -0
  463. package/dist/skills/skills.service.d.ts +192 -0
  464. package/dist/skills/skills.service.js +567 -0
  465. package/dist/storage/prefix.d.ts +36 -0
  466. package/dist/storage/prefix.js +104 -0
  467. package/dist/storage/purge.d.ts +27 -0
  468. package/dist/storage/purge.js +75 -0
  469. package/dist/storage/storage.service.d.ts +44 -0
  470. package/dist/storage/storage.service.js +145 -0
  471. package/dist/text.d.ts +13 -0
  472. package/dist/text.js +13 -0
  473. package/dist/tools/approvals.controller.d.ts +53 -0
  474. package/dist/tools/approvals.controller.js +128 -0
  475. package/dist/tools/approvals.service.d.ts +172 -0
  476. package/dist/tools/approvals.service.js +568 -0
  477. package/dist/tools/breaker.d.ts +28 -0
  478. package/dist/tools/breaker.js +72 -0
  479. package/dist/tools/builtins/agent.d.ts +81 -0
  480. package/dist/tools/builtins/agent.js +223 -0
  481. package/dist/tools/builtins/ask-user.d.ts +28 -0
  482. package/dist/tools/builtins/ask-user.js +139 -0
  483. package/dist/tools/builtins/read-tool-output.d.ts +18 -0
  484. package/dist/tools/builtins/read-tool-output.js +108 -0
  485. package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
  486. package/dist/tools/builtins/sandbox/bash.js +137 -0
  487. package/dist/tools/builtins/sandbox/common.d.ts +116 -0
  488. package/dist/tools/builtins/sandbox/common.js +306 -0
  489. package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
  490. package/dist/tools/builtins/sandbox/deliver.js +180 -0
  491. package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
  492. package/dist/tools/builtins/sandbox/edit.js +98 -0
  493. package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
  494. package/dist/tools/builtins/sandbox/glob-match.js +240 -0
  495. package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
  496. package/dist/tools/builtins/sandbox/glob.js +104 -0
  497. package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
  498. package/dist/tools/builtins/sandbox/grep.js +133 -0
  499. package/dist/tools/builtins/sandbox/index.d.ts +12 -0
  500. package/dist/tools/builtins/sandbox/index.js +27 -0
  501. package/dist/tools/builtins/sandbox/names.d.ts +7 -0
  502. package/dist/tools/builtins/sandbox/names.js +20 -0
  503. package/dist/tools/builtins/sandbox/read.d.ts +8 -0
  504. package/dist/tools/builtins/sandbox/read.js +121 -0
  505. package/dist/tools/builtins/sandbox/write.d.ts +4 -0
  506. package/dist/tools/builtins/sandbox/write.js +88 -0
  507. package/dist/tools/builtins/skill-load.d.ts +53 -0
  508. package/dist/tools/builtins/skill-load.js +446 -0
  509. package/dist/tools/builtins/skill-write.d.ts +59 -0
  510. package/dist/tools/builtins/skill-write.js +244 -0
  511. package/dist/tools/builtins/tool-search.d.ts +31 -0
  512. package/dist/tools/builtins/tool-search.js +171 -0
  513. package/dist/tools/connector-content.controller.d.ts +34 -0
  514. package/dist/tools/connector-content.controller.js +78 -0
  515. package/dist/tools/connector-content.d.ts +104 -0
  516. package/dist/tools/connector-content.js +267 -0
  517. package/dist/tools/connectors.controller.d.ts +210 -0
  518. package/dist/tools/connectors.controller.js +234 -0
  519. package/dist/tools/connectors.service.d.ts +303 -0
  520. package/dist/tools/connectors.service.js +1102 -0
  521. package/dist/tools/credentials.d.ts +139 -0
  522. package/dist/tools/credentials.js +351 -0
  523. package/dist/tools/drift.d.ts +141 -0
  524. package/dist/tools/drift.js +539 -0
  525. package/dist/tools/elicitation.d.ts +81 -0
  526. package/dist/tools/elicitation.js +266 -0
  527. package/dist/tools/endpoint.d.ts +18 -0
  528. package/dist/tools/endpoint.js +115 -0
  529. package/dist/tools/info.d.ts +67 -0
  530. package/dist/tools/info.js +113 -0
  531. package/dist/tools/naming.d.ts +27 -0
  532. package/dist/tools/naming.js +47 -0
  533. package/dist/tools/oauth/discovery.d.ts +65 -0
  534. package/dist/tools/oauth/discovery.js +307 -0
  535. package/dist/tools/oauth/flow.d.ts +63 -0
  536. package/dist/tools/oauth/flow.js +237 -0
  537. package/dist/tools/oauth/oauth.controller.d.ts +31 -0
  538. package/dist/tools/oauth/oauth.controller.js +95 -0
  539. package/dist/tools/oauth/tokens.d.ts +111 -0
  540. package/dist/tools/oauth/tokens.js +258 -0
  541. package/dist/tools/outputs.d.ts +61 -0
  542. package/dist/tools/outputs.js +156 -0
  543. package/dist/tools/pipeline.d.ts +322 -0
  544. package/dist/tools/pipeline.js +1236 -0
  545. package/dist/tools/policy.d.ts +60 -0
  546. package/dist/tools/policy.js +236 -0
  547. package/dist/tools/questions.controller.d.ts +24 -0
  548. package/dist/tools/questions.controller.js +58 -0
  549. package/dist/tools/questions.service.d.ts +103 -0
  550. package/dist/tools/questions.service.js +295 -0
  551. package/dist/tools/redact.d.ts +20 -0
  552. package/dist/tools/redact.js +60 -0
  553. package/dist/tools/registry.d.ts +246 -0
  554. package/dist/tools/registry.js +481 -0
  555. package/dist/tools/resources.d.ts +16 -0
  556. package/dist/tools/resources.js +76 -0
  557. package/dist/tools/specs.d.ts +14 -0
  558. package/dist/tools/specs.js +31 -0
  559. package/dist/tools/validate.d.ts +20 -0
  560. package/dist/tools/validate.js +183 -0
  561. package/dist/tools/view.d.ts +43 -0
  562. package/dist/tools/view.js +225 -0
  563. package/dist/ui/embed-token.d.ts +31 -0
  564. package/dist/ui/embed-token.js +132 -0
  565. package/dist/ui/registry.d.ts +58 -0
  566. package/dist/ui/registry.js +90 -0
  567. package/dist/ui/ui-stream.d.ts +37 -0
  568. package/dist/ui/ui-stream.js +162 -0
  569. package/dist/ui/views.controller.d.ts +81 -0
  570. package/dist/ui/views.controller.js +261 -0
  571. package/dist/ui/views.d.ts +155 -0
  572. package/dist/ui/views.js +306 -0
  573. package/dist/version.d.ts +5 -0
  574. package/dist/version.js +6 -0
  575. package/package.json +69 -3
  576. package/src/migrations/0001_init.sql +8 -0
  577. package/src/migrations/0002_secrets.sql +8 -0
  578. package/src/migrations/0003_identity.sql +117 -0
  579. package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
  580. package/src/migrations/0005_agents.sql +27 -0
  581. package/src/migrations/0006_conversations.sql +37 -0
  582. package/src/migrations/0007_checkpoints.sql +26 -0
  583. package/src/migrations/0008_runs_trigger_seq.sql +3 -0
  584. package/src/migrations/0009_runs_active_unique.sql +4 -0
  585. package/src/migrations/0010_tools.sql +125 -0
  586. package/src/migrations/0011_approvals_spec.sql +10 -0
  587. package/src/migrations/0012_run_waits.sql +24 -0
  588. package/src/migrations/0013_app_tools_source.sql +4 -0
  589. package/src/migrations/0014_tool_specs.sql +8 -0
  590. package/src/migrations/0015_tool_drift.sql +20 -0
  591. package/src/migrations/0016_plugin_permissions.sql +11 -0
  592. package/src/migrations/0017_identity_sources.sql +6 -0
  593. package/src/migrations/0018_channels.sql +74 -0
  594. package/src/migrations/0019_identity_trust.sql +17 -0
  595. package/src/migrations/0020_channel_card_lookup.sql +10 -0
  596. package/src/migrations/0021_org_storage_purge.sql +9 -0
  597. package/src/migrations/0022_attachments.sql +29 -0
  598. package/src/migrations/0023_sandboxes.sql +37 -0
  599. package/src/migrations/0024_skills.sql +46 -0
  600. package/src/migrations/0025_skills_catalog_idx.sql +6 -0
  601. package/src/migrations/0026_skill_changes.sql +34 -0
  602. package/src/migrations/0027_model_prices.sql +18 -0
  603. package/src/migrations/0028_evals.sql +105 -0
  604. package/src/migrations/0029_model_purposes.sql +18 -0
  605. package/src/migrations/0030_plugin_installs.sql +73 -0
  606. package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
  607. package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
  608. package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
  609. package/src/migrations/0034_directory.sql +49 -0
  610. package/src/migrations/0035_catalogs.sql +40 -0
  611. package/src/migrations/0036_app_import_staging.sql +17 -0
  612. package/src/migrations/0037_directory_installs.sql +92 -0
  613. package/src/migrations/0038_channel_inbound_mode.sql +6 -0
  614. package/src/migrations/0039_channel_card_pending.sql +8 -0
  615. package/src/migrations/0040_usage_report_sweep.sql +10 -0
  616. package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
  617. package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
  618. package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
  619. package/src/migrations/0044_catalog_one_kind.sql +90 -0
  620. package/src/migrations/0045_plugin_dependencies.sql +9 -0
  621. package/src/migrations/0046_git_sources.sql +25 -0
  622. package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
  623. package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
  624. package/src/migrations/0049_plugin_upgrades.sql +37 -0
  625. package/src/migrations/0050_bootstrap.sql +53 -0
  626. package/src/migrations/0051_claude_compat.sql +26 -0
  627. package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
  628. package/src/migrations/0053_subagents.sql +73 -0
  629. package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
  630. package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
  631. package/src/migrations/0056_approval_reason.sql +3 -0
  632. package/src/migrations/0057_conversation_titles.sql +11 -0
  633. package/src/migrations/0058_conversation_selection.sql +4 -0
  634. package/src/migrations/0059_conversation_queue.sql +22 -0
  635. package/src/migrations/0060_file_previewers.sql +10 -0
  636. package/src/migrations/0061_queue_selection.sql +5 -0
  637. package/src/migrations/0062_queued_skill.sql +8 -0
@@ -0,0 +1,100 @@
1
+ import { z } from "zod";
2
+ import type { KernelConfig } from "../config/schema.js";
3
+ import type { ExtensionAdminOps } from "../extensions/admin-ops.js";
4
+ import type { ExtensionAdmin } from "../extensions/admin-view.js";
5
+ import type { DeploymentConfigView, ExtensionDeploymentConfigService } from "../extensions/deployment-config.js";
6
+ import type { ExtensionInstalls, PackageReview } from "../extensions/installs.js";
7
+ import type { AdminExtensionView } from "../extensions/permission-view.js";
8
+ import { type Principal } from "../identity/principal.js";
9
+ declare const ApproveBody: z.ZodObject<{
10
+ sha256: z.ZodNullable<z.ZodString>;
11
+ reviewHash: z.ZodString;
12
+ }, z.core.$strip>;
13
+ declare const InstallBody: z.ZodObject<{
14
+ sha256: z.ZodString;
15
+ }, z.core.$strip>;
16
+ declare const ConfigBody: z.ZodObject<{
17
+ values: z.ZodRecord<z.ZodString, z.ZodUnknown>;
18
+ }, z.core.$strip>;
19
+ declare const NpmBody: z.ZodObject<{
20
+ package: z.ZodString;
21
+ version: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strip>;
23
+ /**
24
+ * Deployment-level extension management (`/api/v1/admin/extensions/*`, enterprise admins): package
25
+ * import (upload / npm, returns the review), the extension list and detail, web permission approval
26
+ * (D8), install / enable / disable / uninstall (only writes the desired state and publishes
27
+ * `kernel.plugins.changed`; every replica reconciles, no restart; replicas may still be converging
28
+ * when the call returns).
29
+ */
30
+ export declare class AdminExtensionsController {
31
+ private readonly installs;
32
+ private readonly admin;
33
+ private readonly ops;
34
+ private readonly deploymentConfigs;
35
+ private readonly kernelConfig;
36
+ constructor(installs: ExtensionInstalls, admin: ExtensionAdmin, ops: ExtensionAdminOps, deploymentConfigs: ExtensionDeploymentConfigService, kernelConfig: () => KernelConfig);
37
+ /**
38
+ * 部署上的全部插件(内置、配置声明、安装记录)及其状态、权限与快照;`drainSeconds` 为停用 / 升级时
39
+ * 在途工具调用最多等待的秒数(`extensionHost.drainSeconds`,界面提示用)。
40
+ */
41
+ list(): Promise<{
42
+ extensions: AdminExtensionView[];
43
+ drainSeconds: number;
44
+ }>;
45
+ /** A single extension; unknown -> 404 `extension.not_found`. */
46
+ get(name: string): Promise<AdminExtensionView>;
47
+ /**
48
+ * Deployment config (D8 / C10): each field's source (read-only from file / Nacos / env), the
49
+ * effective value (secrets only say whether they are set), the JSON Schema and the validation
50
+ * result. Unknown -> 404 `extension.not_found`.
51
+ */
52
+ config(name: string): Promise<DeploymentConfigView>;
53
+ /**
54
+ * Saves the deployment config (`values` keyed by field dot path; `null` clears, omitted keeps).
55
+ * A field present in the startup config -> 409 `extension.config_readonly`; unknown or invalid
56
+ * -> 400 `extension.config_invalid` (values not echoed). A problem in a read-only field itself
57
+ * (a value from the startup config) does not block the PUT: it saves anyway, the extension stays
58
+ * pending configuration and the startup config has to change. Every replica re-reads after saving:
59
+ * hot fields are replaced in place, other fields reload the extension, and a pending extension
60
+ * loads (no restart).
61
+ */
62
+ putConfig(principal: Principal, name: string, body: z.infer<typeof ConfigBody>): Promise<DeploymentConfigView>;
63
+ /**
64
+ * Web approval: writes the snapshot (source web), audits `extension.permissions_approved` and
65
+ * publishes `kernel.plugins.changed`. Package or
66
+ * permissions changed after the review -> 409 `extension.approval_stale`; nothing to approve ->
67
+ * 409 `extension.not_pending`.
68
+ */
69
+ approve(principal: Principal, name: string, body: z.infer<typeof ApproveBody>): Promise<AdminExtensionView>;
70
+ /**
71
+ * New install or version change (upgrade / downgrade): the install record points at `sha256` in the
72
+ * package store; the desired state is unchanged (a new install is disabled).
73
+ * Config-declared -> 409 `extension.config_declared`; package
74
+ * missing -> 404 `extension.package_not_found`; extension name in the package differs -> 409
75
+ * `extension.name_mismatch`; an extension of the same name comes from another npm package -> 409
76
+ * `extension.name_conflict`; downgrade to a version with unrun migrations -> 409
77
+ * `extension.downgrade_unsupported`.
78
+ */
79
+ install(principal: Principal, name: string, body: z.infer<typeof InstallBody>): Promise<AdminExtensionView>;
80
+ /** Enable on the deployment; not installed -> 404 `extension.not_found`; config-declared -> 409. */
81
+ enable(principal: Principal, name: string): Promise<AdminExtensionView>;
82
+ /**
83
+ * 部署上停用(各副本排空在途调用后卸下);未安装 → 404;配置声明 → 409;必需的引导插件 → 409
84
+ * `extension.required`。
85
+ */
86
+ disable(principal: Principal, name: string): Promise<AdminExtensionView>;
87
+ /** Uninstall (must be disabled first, otherwise 409 `extension.not_disabled`); data is kept. */
88
+ uninstall(principal: Principal, name: string): Promise<void>;
89
+ /**
90
+ * Uploads an extension package (the body is the raw tgz bytes, `application/octet-stream`, limit
91
+ * `packages.maxBytes`). Invalid package -> 400 `extension.package_invalid` (details list each
92
+ * problem); over the limit -> 413; same name as a config-declared extension -> 409.
93
+ */
94
+ uploadFile(principal: Principal, req: {
95
+ body?: unknown;
96
+ }): Promise<PackageReview>;
97
+ /** 从配置的 npm registry 拉取(`version` 可以是版本、dist-tag 或范围,缺省 latest)。下载失败 → 502。 */
98
+ fromNpm(principal: Principal, body: z.infer<typeof NpmBody>): Promise<PackageReview>;
99
+ }
100
+ export {};
@@ -0,0 +1,226 @@
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 { Body, Controller, Delete, Get, HttpCode, Inject, Param, Post, Put, Req, } from "@nestjs/common";
11
+ import { z } from "zod";
12
+ import { ApiError } from "../errors.js";
13
+ import { EXTENSION_ADMIN, EXTENSION_ADMIN_OPS, EXTENSION_DEPLOYMENT_CONFIGS, EXTENSION_INSTALLS, KERNEL_CONFIG, } from "../http/tokens.js";
14
+ import { ZodPipe } from "../http/zod.pipe.js";
15
+ import { CurrentPrincipal, EnterpriseAdmin, patTokenId, requireUser, } from "../identity/principal.js";
16
+ const ApproveBody = z.object({
17
+ /** 安装记录的包(审阅时的 sha256);配置声明的插件为 null。 */
18
+ sha256: z
19
+ .string()
20
+ .regex(/^[0-9a-f]{64}$/)
21
+ .nullable(),
22
+ reviewHash: z.string().regex(/^[0-9a-f]{16}$/),
23
+ });
24
+ const InstallBody = z.object({
25
+ /** 包存储里的包(上传 / npm 导入返回的 sha256)。 */
26
+ sha256: z.string().regex(/^[0-9a-f]{64}$/),
27
+ });
28
+ const ConfigBody = z.object({
29
+ /** 字段点路径 → 新值(`null` 清除)。 */
30
+ values: z.record(z.string().min(1).max(256), z.unknown()),
31
+ });
32
+ const NpmBody = z.object({
33
+ package: z.string().min(1).max(214),
34
+ version: z.string().min(1).max(256).optional(),
35
+ });
36
+ /**
37
+ * Deployment-level extension management (`/api/v1/admin/extensions/*`, enterprise admins): package
38
+ * import (upload / npm, returns the review), the extension list and detail, web permission approval
39
+ * (D8), install / enable / disable / uninstall (only writes the desired state and publishes
40
+ * `kernel.plugins.changed`; every replica reconciles, no restart; replicas may still be converging
41
+ * when the call returns).
42
+ */
43
+ let AdminExtensionsController = class AdminExtensionsController {
44
+ installs;
45
+ admin;
46
+ ops;
47
+ deploymentConfigs;
48
+ kernelConfig;
49
+ constructor(installs, admin, ops, deploymentConfigs,
50
+ // 字段名不能与路由方法同名(如 `config`):实例字段会遮住原型上的处理函数
51
+ kernelConfig) {
52
+ this.installs = installs;
53
+ this.admin = admin;
54
+ this.ops = ops;
55
+ this.deploymentConfigs = deploymentConfigs;
56
+ this.kernelConfig = kernelConfig;
57
+ }
58
+ /**
59
+ * 部署上的全部插件(内置、配置声明、安装记录)及其状态、权限与快照;`drainSeconds` 为停用 / 升级时
60
+ * 在途工具调用最多等待的秒数(`extensionHost.drainSeconds`,界面提示用)。
61
+ */
62
+ async list() {
63
+ return {
64
+ extensions: await this.admin.list(),
65
+ drainSeconds: this.kernelConfig().extensionHost.drainSeconds,
66
+ };
67
+ }
68
+ /** A single extension; unknown -> 404 `extension.not_found`. */
69
+ get(name) {
70
+ return this.admin.get(name);
71
+ }
72
+ /**
73
+ * Deployment config (D8 / C10): each field's source (read-only from file / Nacos / env), the
74
+ * effective value (secrets only say whether they are set), the JSON Schema and the validation
75
+ * result. Unknown -> 404 `extension.not_found`.
76
+ */
77
+ config(name) {
78
+ return this.deploymentConfigs.view(name);
79
+ }
80
+ /**
81
+ * Saves the deployment config (`values` keyed by field dot path; `null` clears, omitted keeps).
82
+ * A field present in the startup config -> 409 `extension.config_readonly`; unknown or invalid
83
+ * -> 400 `extension.config_invalid` (values not echoed). A problem in a read-only field itself
84
+ * (a value from the startup config) does not block the PUT: it saves anyway, the extension stays
85
+ * pending configuration and the startup config has to change. Every replica re-reads after saving:
86
+ * hot fields are replaced in place, other fields reload the extension, and a pending extension
87
+ * loads (no restart).
88
+ */
89
+ putConfig(principal, name, body) {
90
+ const actor = requireUser(principal);
91
+ return this.deploymentConfigs.put(name, body.values, actor.account.id, patTokenId(actor));
92
+ }
93
+ /**
94
+ * Web approval: writes the snapshot (source web), audits `extension.permissions_approved` and
95
+ * publishes `kernel.plugins.changed`. Package or
96
+ * permissions changed after the review -> 409 `extension.approval_stale`; nothing to approve ->
97
+ * 409 `extension.not_pending`.
98
+ */
99
+ async approve(principal, name, body) {
100
+ const actor = requireUser(principal);
101
+ const tokenId = patTokenId(actor);
102
+ return this.admin.approve(actor.account.id, name, body, tokenId !== undefined ? { actorTokenId: tokenId } : {});
103
+ }
104
+ /**
105
+ * New install or version change (upgrade / downgrade): the install record points at `sha256` in the
106
+ * package store; the desired state is unchanged (a new install is disabled).
107
+ * Config-declared -> 409 `extension.config_declared`; package
108
+ * missing -> 404 `extension.package_not_found`; extension name in the package differs -> 409
109
+ * `extension.name_mismatch`; an extension of the same name comes from another npm package -> 409
110
+ * `extension.name_conflict`; downgrade to a version with unrun migrations -> 409
111
+ * `extension.downgrade_unsupported`.
112
+ */
113
+ install(principal, name, body) {
114
+ const actor = requireUser(principal);
115
+ return this.ops.install(name, body.sha256, actor.account.id, patTokenId(actor));
116
+ }
117
+ /** Enable on the deployment; not installed -> 404 `extension.not_found`; config-declared -> 409. */
118
+ enable(principal, name) {
119
+ const actor = requireUser(principal);
120
+ return this.ops.enable(name, actor.account.id, patTokenId(actor));
121
+ }
122
+ /**
123
+ * 部署上停用(各副本排空在途调用后卸下);未安装 → 404;配置声明 → 409;必需的引导插件 → 409
124
+ * `extension.required`。
125
+ */
126
+ disable(principal, name) {
127
+ const actor = requireUser(principal);
128
+ return this.ops.disable(name, actor.account.id, patTokenId(actor));
129
+ }
130
+ /** Uninstall (must be disabled first, otherwise 409 `extension.not_disabled`); data is kept. */
131
+ async uninstall(principal, name) {
132
+ const actor = requireUser(principal);
133
+ await this.ops.uninstall(name, actor.account.id, patTokenId(actor));
134
+ }
135
+ /**
136
+ * Uploads an extension package (the body is the raw tgz bytes, `application/octet-stream`, limit
137
+ * `packages.maxBytes`). Invalid package -> 400 `extension.package_invalid` (details list each
138
+ * problem); over the limit -> 413; same name as a config-declared extension -> 409.
139
+ */
140
+ async uploadFile(principal, req) {
141
+ const actor = requireUser(principal);
142
+ const body = req.body;
143
+ if (!Buffer.isBuffer(body) || body.byteLength === 0) {
144
+ throw new ApiError("unsupported_media_type", "Send the extension package (.tgz) as the request body with content-type application/octet-stream");
145
+ }
146
+ const tokenId = patTokenId(actor);
147
+ return this.installs.ingestFile(actor.account.id, new Uint8Array(body.buffer, body.byteOffset, body.byteLength), tokenId !== undefined ? { actorTokenId: tokenId } : {});
148
+ }
149
+ /** 从配置的 npm registry 拉取(`version` 可以是版本、dist-tag 或范围,缺省 latest)。下载失败 → 502。 */
150
+ async fromNpm(principal, body) {
151
+ const actor = requireUser(principal);
152
+ const tokenId = patTokenId(actor);
153
+ return this.installs.ingestNpm(actor.account.id, { package: body.package, ...(body.version !== undefined && { version: body.version }) }, tokenId !== undefined ? { actorTokenId: tokenId } : {});
154
+ }
155
+ };
156
+ __decorate([
157
+ Get()
158
+ ], AdminExtensionsController.prototype, "list", null);
159
+ __decorate([
160
+ Get(":name"),
161
+ __param(0, Param("name"))
162
+ ], AdminExtensionsController.prototype, "get", null);
163
+ __decorate([
164
+ Get(":name/config"),
165
+ __param(0, Param("name"))
166
+ ], AdminExtensionsController.prototype, "config", null);
167
+ __decorate([
168
+ Put(":name/config"),
169
+ __param(0, CurrentPrincipal()),
170
+ __param(1, Param("name")),
171
+ __param(2, Body(new ZodPipe(ConfigBody)))
172
+ ], AdminExtensionsController.prototype, "putConfig", null);
173
+ __decorate([
174
+ Post(":name/approve"),
175
+ HttpCode(200),
176
+ __param(0, CurrentPrincipal()),
177
+ __param(1, Param("name")),
178
+ __param(2, Body(new ZodPipe(ApproveBody)))
179
+ ], AdminExtensionsController.prototype, "approve", null);
180
+ __decorate([
181
+ Post(":name/install"),
182
+ HttpCode(200),
183
+ __param(0, CurrentPrincipal()),
184
+ __param(1, Param("name")),
185
+ __param(2, Body(new ZodPipe(InstallBody)))
186
+ ], AdminExtensionsController.prototype, "install", null);
187
+ __decorate([
188
+ Post(":name/enable"),
189
+ HttpCode(200),
190
+ __param(0, CurrentPrincipal()),
191
+ __param(1, Param("name"))
192
+ ], AdminExtensionsController.prototype, "enable", null);
193
+ __decorate([
194
+ Post(":name/disable"),
195
+ HttpCode(200),
196
+ __param(0, CurrentPrincipal()),
197
+ __param(1, Param("name"))
198
+ ], AdminExtensionsController.prototype, "disable", null);
199
+ __decorate([
200
+ Delete(":name"),
201
+ HttpCode(204),
202
+ __param(0, CurrentPrincipal()),
203
+ __param(1, Param("name"))
204
+ ], AdminExtensionsController.prototype, "uninstall", null);
205
+ __decorate([
206
+ Post("packages/file"),
207
+ HttpCode(200),
208
+ __param(0, CurrentPrincipal()),
209
+ __param(1, Req())
210
+ ], AdminExtensionsController.prototype, "uploadFile", null);
211
+ __decorate([
212
+ Post("packages/npm"),
213
+ HttpCode(200),
214
+ __param(0, CurrentPrincipal()),
215
+ __param(1, Body(new ZodPipe(NpmBody)))
216
+ ], AdminExtensionsController.prototype, "fromNpm", null);
217
+ AdminExtensionsController = __decorate([
218
+ Controller("api/v1/admin/extensions"),
219
+ EnterpriseAdmin(),
220
+ __param(0, Inject(EXTENSION_INSTALLS)),
221
+ __param(1, Inject(EXTENSION_ADMIN)),
222
+ __param(2, Inject(EXTENSION_ADMIN_OPS)),
223
+ __param(3, Inject(EXTENSION_DEPLOYMENT_CONFIGS)),
224
+ __param(4, Inject(KERNEL_CONFIG))
225
+ ], AdminExtensionsController);
226
+ export { AdminExtensionsController };
@@ -0,0 +1,36 @@
1
+ import type { FastifyReply, FastifyRequest } from "fastify";
2
+ import { z } from "zod";
3
+ import type { KernelConfig } from "../config/schema.js";
4
+ import type { Account } from "../identity/accounts.js";
5
+ import type { LoginRateLimiter } from "../identity/rate-limit.js";
6
+ import type { SessionService } from "../identity/sessions.js";
7
+ import type { Org } from "../orgs/orgs.service.js";
8
+ import type { SetupService } from "./setup.service.js";
9
+ declare const SetupBody: z.ZodObject<{
10
+ login: z.ZodString;
11
+ password: z.ZodString;
12
+ displayName: z.ZodString;
13
+ orgName: z.ZodOptional<z.ZodString>;
14
+ setupToken: z.ZodOptional<z.ZodString>;
15
+ }, z.core.$strip>;
16
+ /** 初始化向导(`/api/v1/setup`,均为公开路由)。 */
17
+ export declare class SetupController {
18
+ private readonly setup;
19
+ private readonly sessions;
20
+ private readonly config;
21
+ private readonly limiter;
22
+ constructor(setup: SetupService, sessions: SessionService, config: () => KernelConfig, limiter: LoginRateLimiter);
23
+ status(): Promise<{
24
+ needsSetup: boolean;
25
+ }>;
26
+ /**
27
+ * 建首个企业管理员(可选同时建组织),成功后直接登录(设会话 Cookie)。
28
+ * 配置了 `auth.setupToken` 时 body 中的 `setupToken` 必须与之相等,否则 `setup.token_invalid`;
29
+ * 核对前先占用限流额度,超限 → 429 `auth.rate_limited`,核对通过后退还。
30
+ */
31
+ complete(body: z.infer<typeof SetupBody>, req: FastifyRequest, reply: FastifyReply): Promise<{
32
+ account: Account;
33
+ org?: Org;
34
+ }>;
35
+ }
36
+ export {};
@@ -0,0 +1,106 @@
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 { createHash, timingSafeEqual } from "node:crypto";
11
+ import { Body, Controller, Get, HttpCode, Inject, Post, Req, Res } from "@nestjs/common";
12
+ import { z } from "zod";
13
+ import { ApiError } from "../errors.js";
14
+ import { KERNEL_CONFIG, RATE_LIMITER, SESSIONS, SETUP } from "../http/tokens.js";
15
+ import { ZodPipe } from "../http/zod.pipe.js";
16
+ import { clientMeta } from "../identity/auth.controller.js";
17
+ import { setSessionCookies } from "../identity/cookies.js";
18
+ import { MAX_PASSWORD_LENGTH } from "../identity/login.js";
19
+ import { Public } from "../identity/principal.js";
20
+ const SetupBody = z.object({
21
+ login: z.string().min(1).max(64),
22
+ password: z.string().min(1).max(MAX_PASSWORD_LENGTH),
23
+ displayName: z.string().trim().min(1).max(100),
24
+ orgName: z.string().max(100).optional(),
25
+ setupToken: z.string().max(1024).optional(),
26
+ });
27
+ /**
28
+ * 初始化令牌的限流(scope `setup`):同一客户端 IP 10 次、全部署合计 100 次 / 900s
29
+ * (合计上限防换 IP 爆破;令牌本身应足够长,正常情况下打不满)。
30
+ */
31
+ const SETUP_TOKEN_LIMIT_TOTAL = 100;
32
+ const SETUP_TOKEN_LIMIT_PER_IP = 10;
33
+ const sha256 = (s) => createHash("sha256").update(s, "utf8").digest();
34
+ /** 常数时间比较:两边先取 SHA-256,长度恒等,不因长度不同提前返回或抛错。 */
35
+ function tokenMatches(given, expected) {
36
+ return timingSafeEqual(sha256(given ?? ""), sha256(expected)) && given !== undefined;
37
+ }
38
+ /** 初始化向导(`/api/v1/setup`,均为公开路由)。 */
39
+ let SetupController = class SetupController {
40
+ setup;
41
+ sessions;
42
+ config;
43
+ limiter;
44
+ constructor(setup, sessions, config, limiter) {
45
+ this.setup = setup;
46
+ this.sessions = sessions;
47
+ this.config = config;
48
+ this.limiter = limiter;
49
+ }
50
+ async status() {
51
+ return this.setup.status();
52
+ }
53
+ /**
54
+ * 建首个企业管理员(可选同时建组织),成功后直接登录(设会话 Cookie)。
55
+ * 配置了 `auth.setupToken` 时 body 中的 `setupToken` 必须与之相等,否则 `setup.token_invalid`;
56
+ * 核对前先占用限流额度,超限 → 429 `auth.rate_limited`,核对通过后退还。
57
+ */
58
+ async complete(body, req, reply) {
59
+ const cfg = this.config();
60
+ const expected = cfg.auth.setupToken;
61
+ if (expected !== undefined) {
62
+ const { ip } = clientMeta(req);
63
+ const rl = await this.limiter.reserveScoped("setup", "token", ip, SETUP_TOKEN_LIMIT_TOTAL, SETUP_TOKEN_LIMIT_PER_IP);
64
+ if (!rl.allowed) {
65
+ reply.header("retry-after", String(rl.retryAfterSeconds));
66
+ throw new ApiError("auth.rate_limited", "Too many setup attempts; try again later");
67
+ }
68
+ if (!tokenMatches(body.setupToken, expected)) {
69
+ throw new ApiError("setup.token_invalid", "Setup token is missing or invalid");
70
+ }
71
+ await this.limiter.succeededScoped("setup", "token", ip);
72
+ }
73
+ // 会话行与账号 / 组织在同一事务里写入;Cookie 在提交之后才设置
74
+ const meta = clientMeta(req);
75
+ const { extra: session, ...result } = await this.setup.complete({
76
+ login: body.login,
77
+ password: body.password,
78
+ displayName: body.displayName,
79
+ orgName: body.orgName,
80
+ }, (trx, account) => this.sessions.create(account.id, meta, trx));
81
+ if (!session)
82
+ throw new Error("setup completed without a session");
83
+ setSessionCookies(reply, session, cfg);
84
+ return result;
85
+ }
86
+ };
87
+ __decorate([
88
+ Get(),
89
+ Public()
90
+ ], SetupController.prototype, "status", null);
91
+ __decorate([
92
+ Post(),
93
+ Public(),
94
+ HttpCode(201),
95
+ __param(0, Body(new ZodPipe(SetupBody))),
96
+ __param(1, Req()),
97
+ __param(2, Res({ passthrough: true }))
98
+ ], SetupController.prototype, "complete", null);
99
+ SetupController = __decorate([
100
+ Controller("api/v1/setup"),
101
+ __param(0, Inject(SETUP)),
102
+ __param(1, Inject(SESSIONS)),
103
+ __param(2, Inject(KERNEL_CONFIG)),
104
+ __param(3, Inject(RATE_LIMITER))
105
+ ], SetupController);
106
+ export { SetupController };
@@ -0,0 +1,47 @@
1
+ import type { Transaction } from "kysely";
2
+ import type { KernelDatabase, KernelDb } from "../db/kernel-schema.js";
3
+ import type { Account, AccountsService } from "../identity/accounts.js";
4
+ import type { Org, OrgsService } from "../orgs/orgs.service.js";
5
+ /** 初始化向导与 CLI 建企业管理员。框架无关,由调用方注入依赖。 */
6
+ export declare class SetupService {
7
+ private readonly db;
8
+ private readonly accounts;
9
+ private readonly orgs;
10
+ constructor(db: KernelDb, accounts: AccountsService, orgs: OrgsService);
11
+ /** 不存在活跃企业管理员即需要初始化(每次实时查 PG,不缓存)。 */
12
+ status(): Promise<{
13
+ needsSetup: boolean;
14
+ }>;
15
+ /**
16
+ * 完成初始化:单个事务内先取咨询锁串行化并发的初始化请求,锁内再确认没有活跃企业管理员,
17
+ * 然后建企业管理员账号、(给了 `orgName` 时)建组织并以其为 owner。任一步失败整体回滚。
18
+ * 给了 `inTx` 时在同一事务的最后调用它(初始化向导用它建会话),结果放在 `extra`;它失败同样整体回滚。
19
+ */
20
+ complete<T = undefined>(input: {
21
+ login: string;
22
+ password: string;
23
+ displayName: string;
24
+ orgName?: string | undefined;
25
+ }, inTx?: (trx: Transaction<KernelDatabase>, account: Account) => Promise<T>): Promise<{
26
+ account: Account;
27
+ org?: Org;
28
+ extra: T | undefined;
29
+ }>;
30
+ /** CLI 用:直接建企业管理员,不检查是否已初始化;登录名已存在 → `account.login_taken`。 */
31
+ createEnterpriseAdmin(input: EnterpriseAdminInput): Promise<Account>;
32
+ /**
33
+ * CLI `admin create --if-none`: create an enterprise admin only when no active one exists. The
34
+ * check and the insert run in one transaction under the same advisory lock as {@link complete},
35
+ * so concurrent runs (and a concurrent web setup) create exactly one. Returns undefined when an
36
+ * active enterprise admin already exists; a taken login still throws `account.login_taken`.
37
+ */
38
+ createEnterpriseAdminIfNone(input: EnterpriseAdminInput): Promise<Account | undefined>;
39
+ private insertEnterpriseAdmin;
40
+ }
41
+ /** Input of the CLI enterprise admin creation. */
42
+ export interface EnterpriseAdminInput {
43
+ login: string;
44
+ password: string;
45
+ displayName: string;
46
+ email?: string | undefined;
47
+ }
@@ -0,0 +1,90 @@
1
+ import { sql } from "kysely";
2
+ import { ApiError } from "../errors.js";
3
+ import { audit } from "../identity/audit.js";
4
+ const alreadyCompleted = () => new ApiError("setup.already_completed", "Deployment is already set up");
5
+ /** 初始化向导与 CLI 建企业管理员。框架无关,由调用方注入依赖。 */
6
+ export class SetupService {
7
+ db;
8
+ accounts;
9
+ orgs;
10
+ constructor(db, accounts, orgs) {
11
+ this.db = db;
12
+ this.accounts = accounts;
13
+ this.orgs = orgs;
14
+ }
15
+ /** 不存在活跃企业管理员即需要初始化(每次实时查 PG,不缓存)。 */
16
+ async status() {
17
+ return { needsSetup: (await this.accounts.countEnterpriseAdmins()) === 0 };
18
+ }
19
+ /**
20
+ * 完成初始化:单个事务内先取咨询锁串行化并发的初始化请求,锁内再确认没有活跃企业管理员,
21
+ * 然后建企业管理员账号、(给了 `orgName` 时)建组织并以其为 owner。任一步失败整体回滚。
22
+ * 给了 `inTx` 时在同一事务的最后调用它(初始化向导用它建会话),结果放在 `extra`;它失败同样整体回滚。
23
+ */
24
+ async complete(input, inTx) {
25
+ // 先做一次廉价的预检查(已初始化的部署不白跑 scrypt),再在 BEGIN 之前算好哈希:
26
+ // 不在持有咨询锁的事务里跑 scrypt;锁内仍会复核
27
+ if ((await this.accounts.countEnterpriseAdmins()) > 0)
28
+ throw alreadyCompleted();
29
+ const passwordHash = await this.accounts.hashNewPassword(input.password);
30
+ return this.db.transaction().execute(async (trx) => {
31
+ await sql `SELECT pg_advisory_xact_lock(hashtext('capybara.setup'))`.execute(trx);
32
+ if ((await this.accounts.countEnterpriseAdmins(trx)) > 0)
33
+ throw alreadyCompleted();
34
+ const account = await this.accounts.createLocal({
35
+ login: input.login,
36
+ password: input.password,
37
+ displayName: input.displayName,
38
+ enterpriseAdmin: true,
39
+ }, trx, passwordHash);
40
+ const org = input.orgName !== undefined
41
+ ? await this.orgs.create({ name: input.orgName }, account, { trx })
42
+ : undefined;
43
+ await audit(trx, {
44
+ actorAccountId: account.id,
45
+ action: "deployment.setup_completed",
46
+ target: account.id,
47
+ ...(org && { orgId: org.id, detail: { orgId: org.id } }),
48
+ });
49
+ const extra = inTx ? await inTx(trx, account) : undefined;
50
+ return { account, ...(org && { org }), extra };
51
+ });
52
+ }
53
+ /** CLI 用:直接建企业管理员,不检查是否已初始化;登录名已存在 → `account.login_taken`。 */
54
+ async createEnterpriseAdmin(input) {
55
+ const passwordHash = await this.accounts.hashNewPassword(input.password);
56
+ return this.db
57
+ .transaction()
58
+ .execute((trx) => this.insertEnterpriseAdmin(trx, input, passwordHash));
59
+ }
60
+ /**
61
+ * CLI `admin create --if-none`: create an enterprise admin only when no active one exists. The
62
+ * check and the insert run in one transaction under the same advisory lock as {@link complete},
63
+ * so concurrent runs (and a concurrent web setup) create exactly one. Returns undefined when an
64
+ * active enterprise admin already exists; a taken login still throws `account.login_taken`.
65
+ */
66
+ async createEnterpriseAdminIfNone(input) {
67
+ const passwordHash = await this.accounts.hashNewPassword(input.password);
68
+ return this.db.transaction().execute(async (trx) => {
69
+ await sql `SELECT pg_advisory_xact_lock(hashtext('capybara.setup'))`.execute(trx);
70
+ if ((await this.accounts.countEnterpriseAdmins(trx)) > 0)
71
+ return undefined;
72
+ return this.insertEnterpriseAdmin(trx, input, passwordHash);
73
+ });
74
+ }
75
+ async insertEnterpriseAdmin(trx, input, passwordHash) {
76
+ const account = await this.accounts.createLocal({
77
+ login: input.login,
78
+ password: input.password,
79
+ displayName: input.displayName,
80
+ enterpriseAdmin: true,
81
+ ...(input.email !== undefined && { email: input.email }),
82
+ }, trx, passwordHash);
83
+ await audit(trx, {
84
+ action: "account.created",
85
+ target: account.id,
86
+ detail: { enterpriseAdmin: true, via: "cli" },
87
+ });
88
+ return account;
89
+ }
90
+ }