@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,246 @@
1
+ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
2
+ import { dirname, posix, relative, resolve as resolvePath } from "node:path";
3
+ import { checkEntryImports, isSafePackagePath, PLUGIN_MANIFEST_FILE, } from "@capybara-hq/plugin-sdk";
4
+ import { init as lexerInit, parse as lexerParse } from "es-module-lexer";
5
+ import { PluginPackageError, readPluginPackage } from "../catalog/plugin-package.js";
6
+ import { pluginSchemaName } from "../ctx/create-ctx.js";
7
+ import { MIGRATION_FILE_RE } from "../db/migrator.js";
8
+ import { ApiError } from "../errors.js";
9
+ import { HOST_ZOD_VERSION, PACKAGE_TGZ_LIMITS, PackageTgzError, packagePath, unpackPackageTgz, } from "../packages/tgz.js";
10
+ import { buildPermissionSet, parseCreatedTables } from "./permission-set.js";
11
+ import { migrationWarnings, warningsDigest } from "./permission-view.js";
12
+ /**
13
+ * Reading and validating an extension package: a plugin tgz (`readPluginPackage`,
14
+ * `catalog/plugin-package.ts`: unpacking by the rules of `packages/tgz.ts`, plugin.json, the
15
+ * package.json rules of plugin-sdk `validatePluginPackageJsonFor`, the pre-0.1.0 format rejected)
16
+ * with an `extension` section. On top of the plugin rules:
17
+ *
18
+ * - import 白名单:用 es-module-lexer(2.3.2,固定版本)静态分析 entry 及其包内相对 import 到的模块:
19
+ * 静态 import / `export ... from` / 字面量动态 `import()` 只许 `node:*`、宿主两包(含子路径)与包内相对路径;
20
+ * **非字面量的动态 `import()` 拒绝**。相对路径解析后必须仍在包内、指向包里存在的 `.mjs` / `.js`,并同样被扫描。
21
+ * - `require`:ESM 里没有 `require` 绑定,bundle 只能经 `node:module` 的 `createRequire` 得到它(打包工具的横幅
22
+ * 就是这样给打进来的 CJS 依赖用的)。这里**不**静态分析 `require(...)`:一是 bundle 里大量 `require("x")`
23
+ * 字样出现在字符串 / 代码生成模板里(实测 connector-mcp 里 ajv 的模板、object-store-s3 的报错文案),正则必然误报,
24
+ * 为此在安装路径上引入完整 JS 解析器不值得;二是插件本来就以批准过的代码在进程内运行(权限是治理而非沙箱),
25
+ * 拦 `require` 拦不住 `process.getBuiltinModule`。打包工具在构建时已保证 require 只指向 `node:*` 与宿主包
26
+ * (其余全部打进 bundle);插件目录不在宿主 `node_modules` 的上游路径里,漏打的 `require("x")` 加载时找不到,
27
+ * 安装记录转为 failed。
28
+ */
29
+ /** Limits on unpacking an extension package (the shared tgz limits). */
30
+ export const EXTENSION_PACKAGE_LIMITS = PACKAGE_TGZ_LIMITS;
31
+ export { HOST_ZOD_VERSION };
32
+ /** The extension package is invalid; `issues` lists the problems (English, shown to the admin). */
33
+ export class ExtensionPackageError extends Error {
34
+ code;
35
+ issues;
36
+ constructor(issues, code = "extension.package_invalid") {
37
+ super(code === "extension.package_invalid"
38
+ ? `Invalid plugin package: ${issues[0] ?? "unknown problem"}`
39
+ : (issues[0] ?? code));
40
+ this.name = "ExtensionPackageError";
41
+ this.code = code;
42
+ this.issues = issues;
43
+ }
44
+ }
45
+ /** The API error for an {@link ExtensionPackageError} (its code, message and issues as details). */
46
+ export function extensionPackageApiError(e) {
47
+ return new ApiError(e.code, e.message, e.issues);
48
+ }
49
+ const fail = (issue) => {
50
+ throw new ExtensionPackageError([issue]);
51
+ };
52
+ const errMsg = (e) => (e instanceof Error ? e.message : String(e));
53
+ const utf8 = (path, data) => {
54
+ try {
55
+ return new TextDecoder("utf-8", { fatal: true }).decode(data);
56
+ }
57
+ catch {
58
+ return fail(`${path} is not valid UTF-8 text`);
59
+ }
60
+ };
61
+ /** 扫描一个模块的 import(es-module-lexer);`import.meta` 不算 import。 */
62
+ function scanImports(path, code) {
63
+ let imports;
64
+ try {
65
+ [imports] = lexerParse(code, path);
66
+ }
67
+ catch (e) {
68
+ return fail(`${path} is not valid ES module syntax: ${errMsg(e)}`);
69
+ }
70
+ const out = [];
71
+ for (const i of imports) {
72
+ if (i.d === -2)
73
+ continue; // import.meta
74
+ const dynamic = i.d > -1;
75
+ out.push({ name: i.n ?? "", dynamic, literal: i.n !== undefined });
76
+ }
77
+ return out;
78
+ }
79
+ /** 从 entry 出发,沿包内相对 import 逐个扫描,汇总问题。 */
80
+ function checkModuleGraph(entry, byPath) {
81
+ const issues = [];
82
+ const queue = [entry];
83
+ const visited = new Set();
84
+ while (queue.length > 0) {
85
+ const path = queue.shift();
86
+ if (visited.has(path))
87
+ continue;
88
+ visited.add(path);
89
+ const specs = scanImports(path, utf8(path, byPath.get(path)));
90
+ for (const msg of checkEntryImports(specs))
91
+ issues.push(`${path}: ${msg}`);
92
+ for (const s of specs) {
93
+ if (!s.name.startsWith("./") && !s.name.startsWith("../"))
94
+ continue;
95
+ const target = posix.normalize(posix.join(posix.dirname(path), s.name));
96
+ if (target.startsWith("../") || target === ".." || !isSafePackagePath(target)) {
97
+ issues.push(`${path}: import "${s.name}" points outside the package`);
98
+ continue;
99
+ }
100
+ if (!byPath.has(target)) {
101
+ issues.push(`${path}: import "${s.name}" not found in the package`);
102
+ continue;
103
+ }
104
+ if (!target.endsWith(".mjs") && !target.endsWith(".js")) {
105
+ issues.push(`${path}: import "${s.name}" must point to a .mjs or .js module`);
106
+ continue;
107
+ }
108
+ queue.push(target);
109
+ }
110
+ }
111
+ return issues;
112
+ }
113
+ /** Maps an error of `readPluginPackage` to the extension package error. */
114
+ const fromPluginPackageError = (e) => new ExtensionPackageError(e.issues, e.code === "catalog.legacy_format" ? "extension.legacy_format" : "extension.package_invalid");
115
+ /**
116
+ * Reads and validates an extension package without running any code from it: a plugin tgz
117
+ * (`readPluginPackage`) with an `extension` section, whose entry's module graph passes the import
118
+ * rules (file header) and whose `extension.migrations` SQL is collected. Invalid ->
119
+ * {@link ExtensionPackageError} (listing every problem it can find; problems while unpacking stop
120
+ * at the first): `extension.legacy_format` for the pre-0.1.0 format, `extension.no_extension` for a
121
+ * plugin without an extension, otherwise `extension.package_invalid`.
122
+ */
123
+ export async function readExtensionPackage(bytes, opts) {
124
+ let plugin;
125
+ try {
126
+ plugin = await readPluginPackage(bytes, opts);
127
+ }
128
+ catch (e) {
129
+ if (e instanceof PluginPackageError)
130
+ throw fromPluginPackageError(e);
131
+ throw e;
132
+ }
133
+ const { manifest, files } = plugin;
134
+ const ext = manifest.extension;
135
+ if (ext === undefined) {
136
+ throw new ExtensionPackageError([
137
+ `plugin ${manifest.name} has no extension (no "extension" in ${PLUGIN_MANIFEST_FILE}); import it into the catalog instead`,
138
+ ], "extension.no_extension");
139
+ }
140
+ await lexerInit;
141
+ const issues = checkModuleGraph(packagePath(ext.entry), files);
142
+ const migrationSql = [];
143
+ if (ext.migrations !== undefined) {
144
+ const dir = packagePath(ext.migrations);
145
+ for (const [path, data] of files) {
146
+ if (!path.startsWith(`${dir}/`))
147
+ continue;
148
+ const file = path.slice(dir.length + 1);
149
+ if (file.includes("/") || !MIGRATION_FILE_RE.test(file))
150
+ continue;
151
+ migrationSql.push({ file, sql: utf8(path, data) });
152
+ }
153
+ migrationSql.sort((a, b) => (a.file < b.file ? -1 : a.file > b.file ? 1 : 0));
154
+ }
155
+ if (issues.length > 0)
156
+ throw new ExtensionPackageError(issues);
157
+ return {
158
+ sha256: plugin.sha256,
159
+ size: plugin.size,
160
+ packageJson: plugin.packageJson,
161
+ section: { ...ext, name: manifest.name, version: manifest.version },
162
+ files: [...files].map(([path, data]) => ({ path, size: data.byteLength })),
163
+ migrationSql,
164
+ };
165
+ }
166
+ /**
167
+ * The package's permission set from the static manifest and the migration SQL only (review runs no
168
+ * extension code), in the same shape as `computePermissionSet` on the real module (config fields
169
+ * keep only path / secret).
170
+ */
171
+ export function permissionSetOfPackage(p) {
172
+ return permissionSetOfSection(p.section, p.migrationSql);
173
+ }
174
+ /**
175
+ * Same as {@link permissionSetOfPackage}, from the extension section and the migration SQL (the host
176
+ * uses it on the locally synced package for the permission gate without importing the module: no
177
+ * extension code, top-level code included, runs before approval).
178
+ */
179
+ export function permissionSetOfSection(section, migrationSql) {
180
+ const m = section.manifest;
181
+ const schema = pluginSchemaName(m.name);
182
+ const tables = migrationSql.flatMap((f) => parseCreatedTables(f.sql, schema));
183
+ const strip = (fs) => fs.map((f) => ({ path: f.path, secret: f.secret }));
184
+ return buildPermissionSet({
185
+ provides: m.provides,
186
+ requires: m.requires,
187
+ optional: m.optional,
188
+ config: { deployment: strip(m.config.deployment), org: strip(m.config.org) },
189
+ tables,
190
+ permissions: m.permissions,
191
+ warningsDigest: warningsDigest(migrationWarnings(migrationSql, m.name)),
192
+ });
193
+ }
194
+ /**
195
+ * Reads the migration SQL in `extension.migrations` under the locally unpacked directory `root` (not
196
+ * recursive, only files with migration names, sorted by name), in the same shape as the
197
+ * `migrationSql` of {@link readExtensionPackage}; empty when no migrations are declared.
198
+ */
199
+ export async function readMigrationSql(root, section) {
200
+ if (section.migrations === undefined)
201
+ return [];
202
+ const dir = resolvePath(root, packagePath(section.migrations));
203
+ const names = (await readdir(dir)).filter((f) => MIGRATION_FILE_RE.test(f)).sort();
204
+ const out = [];
205
+ for (const file of names)
206
+ out.push({ file, sql: await readFile(resolvePath(dir, file), "utf8") });
207
+ return out;
208
+ }
209
+ /**
210
+ * Unpacks the package into `dir` (dropping the `package/` prefix). `dir` must not exist or be empty;
211
+ * the unpack rules and limits are the same as {@link readExtensionPackage} (paths, file types, entry
212
+ * count and unpacked size; pass the same `limits`, i.e. `packages.maxBytes`), and the package should
213
+ * have been validated with it first. Files 0644, directories 0755, written with `wx` (no overwrite,
214
+ * no following existing links).
215
+ */
216
+ export async function extractExtensionPackage(bytes, dir, limits) {
217
+ let files;
218
+ try {
219
+ files = await unpackPackageTgz(bytes, limits);
220
+ }
221
+ catch (e) {
222
+ if (e instanceof PackageTgzError)
223
+ throw new ExtensionPackageError(e.issues);
224
+ throw e;
225
+ }
226
+ const root = resolvePath(dir);
227
+ let existing = [];
228
+ try {
229
+ existing = await readdir(root);
230
+ }
231
+ catch (e) {
232
+ if (e.code !== "ENOENT")
233
+ throw e;
234
+ }
235
+ if (existing.length > 0)
236
+ throw new Error(`extract target ${root} is not empty`);
237
+ await mkdir(root, { recursive: true, mode: 0o755 });
238
+ for (const f of files) {
239
+ const target = resolvePath(root, f.path);
240
+ const rel = relative(root, target);
241
+ if (rel.startsWith("..") || rel === "")
242
+ fail(`${f.path}: unsafe path`);
243
+ await mkdir(dirname(target), { recursive: true, mode: 0o755 });
244
+ await writeFile(target, f.data, { flag: "wx", mode: 0o644 });
245
+ }
246
+ }
@@ -0,0 +1,117 @@
1
+ import type { ExtensionManifest, ExtensionPermissions } from "@capybara-hq/plugin-sdk";
2
+ /** 一个配置字段:点路径(根即叶子时为空串)与是否密钥。 */
3
+ export interface PermissionConfigField {
4
+ path: string;
5
+ secret: boolean;
6
+ }
7
+ /**
8
+ * Everything an extension uses (extension model 7.2), normalized and stored as the approved snapshot
9
+ * (`extension_permission_snapshots.permissions`). Every list is sorted and deduplicated; comparisons
10
+ * use stable string keys ({@link permissionKeys}).
11
+ */
12
+ export interface PermissionSet {
13
+ provides: string[];
14
+ requires: string[];
15
+ optional: string[];
16
+ config: {
17
+ deployment: PermissionConfigField[];
18
+ org: PermissionConfigField[];
19
+ };
20
+ /** 插件迁移里 `CREATE TABLE` 的表名(插件自己 schema 下的不带前缀)。 */
21
+ tables: string[];
22
+ permissions: {
23
+ secrets: boolean;
24
+ storage: boolean;
25
+ http: {
26
+ method: string;
27
+ path: string;
28
+ public: boolean;
29
+ }[];
30
+ tools: string[];
31
+ hooks: string[];
32
+ /**
33
+ * Mount points with `policy` hooks (`permissions.policyHooks`, M-1). Deployment state reads it from
34
+ * the approved snapshot to fail calls closed where the plugin is not loaded. Absent when none are
35
+ * declared (and in older snapshots).
36
+ */
37
+ policyHooks?: string[];
38
+ /** 模型用途(label 只是展示文案,不参与比较)。 */
39
+ models: {
40
+ purpose: string;
41
+ kind: string;
42
+ }[];
43
+ network: string[];
44
+ /**
45
+ * 界面贡献(`permissions.ui`):`views` 记入快照但不卡加载(升级时自动补进快照);
46
+ * `embeds` 与其他权限一样卡加载。旧快照没有这一项(按空处理)。
47
+ */
48
+ ui: {
49
+ views: string[];
50
+ embeds: string[];
51
+ };
52
+ };
53
+ /**
54
+ * 安装记录包迁移警告的摘要(`warningsDigest`,Ruling P4);没有警告或不是安装记录时省略。
55
+ * 记入快照:权限不变、警告变了同样要重新批准;没有摘要的旧快照遇到有警告的包同样要重新批准。
56
+ */
57
+ warningsDigest?: string;
58
+ }
59
+ /** 迁移警告摘要的权限键前缀(`migration.warnings:<摘要>`)。 */
60
+ export declare const WARNINGS_KEY_PREFIX = "migration.warnings:";
61
+ /**
62
+ * 解析 SQL 中 `CREATE [TEMP|UNLOGGED] TABLE [IF NOT EXISTS] [schema.]name` 的表名(按出现顺序,不去重);
63
+ * 其他语句忽略。schema 等于 `ownSchema` 时去掉前缀(与不带前缀等价),其他 schema 保留 `schema.name`。
64
+ *
65
+ * 已知局限(够用即可,不是 SQL 解析器):
66
+ * - 只看 `CREATE TABLE`:`ALTER TABLE ... RENAME TO` 改名后的新表名不会出现;视图 / 物化视图、
67
+ * 序列、函数等其他建对象语句不计入;
68
+ * - 不带引号的标识符只识别 ASCII(字母、数字、`_`、`$`),不带引号的非 ASCII 表名会被截断或漏掉;
69
+ * - 去注释不理会字符串字面量与 `$$` 块:字符串里的 `--` / `/*` 会被当作注释,字符串里的
70
+ * `CREATE TABLE x` 文本会被误计。
71
+ */
72
+ export declare function parseCreatedTables(sql: string, ownSchema: string): string[];
73
+ /**
74
+ * 计算插件的权限集合:provides / requires / optional、两级配置字段(路径与是否密钥,经 `configFields` 遍历 zod schema)、
75
+ * 迁移 SQL 中创建的表、清单 `permissions` 各项;全部规范化排序。
76
+ * @param pluginDir 插件模块所在目录(`manifest.migrations` 相对它解析)。
77
+ */
78
+ export declare function computePermissionSet(manifest: ExtensionManifest, pluginDir: string): Promise<PermissionSet>;
79
+ /**
80
+ * 由已提取的各项拼出规范化的权限集合(排序去重):{@link computePermissionSet}(真实模块)与
81
+ * 插件包的 `permissionSetOfPackage`(静态 manifest + 迁移 SQL)共用,保证两边同形。
82
+ */
83
+ export declare function buildPermissionSet(input: {
84
+ provides: readonly string[];
85
+ requires?: readonly string[] | undefined;
86
+ optional?: readonly string[] | undefined;
87
+ config: {
88
+ deployment: PermissionConfigField[];
89
+ org: PermissionConfigField[];
90
+ };
91
+ tables: readonly string[];
92
+ permissions?: ExtensionPermissions | undefined;
93
+ warningsDigest?: string | undefined;
94
+ }): PermissionSet;
95
+ /**
96
+ * 权限集合的稳定字符串键(排序),如 `provides:channel@1`、`config.org.secret:apiKey`、`table:todos`、
97
+ * `permissions.tools:write`、`permissions.http.public:POST /events`、`ui.view:tasks`、`ui.embed:board`。
98
+ * 容忍旧快照缺字段(按空处理),快照格式演进时不会抛错。
99
+ */
100
+ export declare function permissionKeys(set: PermissionSet): string[];
101
+ /**
102
+ * Key prefix of a policy hook mount (manifest `permissions.policyHooks`): needs approval like any hook.
103
+ * Lower-case letters and dots only, as catalog permission keys require (`PERMISSION_KEY_RE`).
104
+ */
105
+ export declare const POLICY_HOOK_KEY_PREFIX = "permissions.hooks.policy:";
106
+ /** 渲染 schema 视图的权限键前缀:记入快照但不卡加载(见 {@link blockingKeys})。 */
107
+ export declare const UI_VIEW_KEY_PREFIX = "ui.view:";
108
+ /**
109
+ * 新增项里需要批准(卡加载)的部分:除 `ui.view:*` 之外的全部。视图只是把插件已有的数据交给内核组件来画,
110
+ * 不给插件新能力(spec §4.1),升级多出视图时插件照常加载、快照自动补上。
111
+ */
112
+ export declare function blockingKeys(added: readonly string[]): string[];
113
+ /** 两份权限集合的差异(按 {@link permissionKeys});`prev` 为空(无快照)时全部算新增。 */
114
+ export declare function diffPermissions(prev: PermissionSet | undefined, next: PermissionSet): {
115
+ added: string[];
116
+ removed: string[];
117
+ };
@@ -0,0 +1,184 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { resolve as resolvePath } from "node:path";
3
+ import { configFields } from "../config/fields.js";
4
+ import { pluginSchemaName } from "../ctx/create-ctx.js";
5
+ import { MIGRATION_FILE_RE } from "../db/migrator.js";
6
+ /** 迁移警告摘要的权限键前缀(`migration.warnings:<摘要>`)。 */
7
+ export const WARNINGS_KEY_PREFIX = "migration.warnings:";
8
+ const cmp = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
9
+ const sortedUnique = (xs) => [...new Set(xs ?? [])].sort(cmp);
10
+ const IDENT = '(?:"(?:[^"]|"")+"|[A-Za-z_][A-Za-z0-9_$]*)';
11
+ const CREATE_TABLE_RE = new RegExp(String.raw `\bcreate\s+(?:(?:global|local)\s+)?(?:(?:temp|temporary|unlogged)\s+)?table\s+(?:if\s+not\s+exists\s+)?(${IDENT}(?:\s*\.\s*${IDENT})?)`, "gi");
12
+ /** 标识符规范化:带引号的去引号(`""` 还原为 `"`),不带引号的转小写(同 PG 规则)。 */
13
+ const normIdent = (s) => s.startsWith('"') ? s.slice(1, -1).replaceAll('""', '"') : s.toLowerCase();
14
+ /** 把一段 SQL 的 `--` 行注释与 `/* *\/` 块注释去掉(不处理字符串字面量里的注释符:够用即可)。 */
15
+ const stripComments = (sql) => sql.replace(/\/\*[\s\S]*?\*\//g, " ").replace(/--[^\n]*/g, " ");
16
+ /**
17
+ * 解析 SQL 中 `CREATE [TEMP|UNLOGGED] TABLE [IF NOT EXISTS] [schema.]name` 的表名(按出现顺序,不去重);
18
+ * 其他语句忽略。schema 等于 `ownSchema` 时去掉前缀(与不带前缀等价),其他 schema 保留 `schema.name`。
19
+ *
20
+ * 已知局限(够用即可,不是 SQL 解析器):
21
+ * - 只看 `CREATE TABLE`:`ALTER TABLE ... RENAME TO` 改名后的新表名不会出现;视图 / 物化视图、
22
+ * 序列、函数等其他建对象语句不计入;
23
+ * - 不带引号的标识符只识别 ASCII(字母、数字、`_`、`$`),不带引号的非 ASCII 表名会被截断或漏掉;
24
+ * - 去注释不理会字符串字面量与 `$$` 块:字符串里的 `--` / `/*` 会被当作注释,字符串里的
25
+ * `CREATE TABLE x` 文本会被误计。
26
+ */
27
+ export function parseCreatedTables(sql, ownSchema) {
28
+ const out = [];
29
+ for (const m of stripComments(sql).matchAll(CREATE_TABLE_RE)) {
30
+ const parts = m[1].match(new RegExp(IDENT, "g")) ?? [];
31
+ const names = parts.map(normIdent);
32
+ if (names.length === 2 && names[0] === ownSchema)
33
+ out.push(names[1]);
34
+ else
35
+ out.push(names.join("."));
36
+ }
37
+ return out;
38
+ }
39
+ function fieldsOf(schema) {
40
+ if (!schema)
41
+ return [];
42
+ return configFields(schema)
43
+ .map((f) => ({ path: f.path, secret: f.meta?.secret === true }))
44
+ .sort((a, b) => cmp(a.path, b.path));
45
+ }
46
+ /**
47
+ * 计算插件的权限集合:provides / requires / optional、两级配置字段(路径与是否密钥,经 `configFields` 遍历 zod schema)、
48
+ * 迁移 SQL 中创建的表、清单 `permissions` 各项;全部规范化排序。
49
+ * @param pluginDir 插件模块所在目录(`manifest.migrations` 相对它解析)。
50
+ */
51
+ export async function computePermissionSet(manifest, pluginDir) {
52
+ const tables = [];
53
+ if (manifest.migrations) {
54
+ const dir = resolvePath(pluginDir, manifest.migrations);
55
+ const schema = pluginSchemaName(manifest.name);
56
+ try {
57
+ const names = (await readdir(dir)).filter((f) => MIGRATION_FILE_RE.test(f)).sort();
58
+ for (const n of names) {
59
+ tables.push(...parseCreatedTables(await readFile(resolvePath(dir, n), "utf8"), schema));
60
+ }
61
+ }
62
+ catch (e) {
63
+ throw new Error(`plugin ${manifest.name}: cannot read migrations at "${dir}": ${e instanceof Error ? e.message : String(e)}`, { cause: e });
64
+ }
65
+ }
66
+ return buildPermissionSet({
67
+ provides: manifest.provides,
68
+ requires: manifest.requires,
69
+ optional: manifest.optional,
70
+ config: {
71
+ deployment: fieldsOf(manifest.config?.deployment),
72
+ org: fieldsOf(manifest.config?.org),
73
+ },
74
+ tables,
75
+ permissions: manifest.permissions,
76
+ });
77
+ }
78
+ /**
79
+ * 由已提取的各项拼出规范化的权限集合(排序去重):{@link computePermissionSet}(真实模块)与
80
+ * 插件包的 `permissionSetOfPackage`(静态 manifest + 迁移 SQL)共用,保证两边同形。
81
+ */
82
+ export function buildPermissionSet(input) {
83
+ const p = input.permissions ?? {};
84
+ const byPath = (a, b) => cmp(a.path, b.path);
85
+ return {
86
+ provides: sortedUnique(input.provides),
87
+ requires: sortedUnique(input.requires),
88
+ optional: sortedUnique(input.optional),
89
+ config: {
90
+ deployment: [...input.config.deployment].sort(byPath),
91
+ org: [...input.config.org].sort(byPath),
92
+ },
93
+ tables: sortedUnique(input.tables),
94
+ permissions: {
95
+ secrets: p.secrets === true,
96
+ storage: p.storage === true,
97
+ http: (p.http ?? [])
98
+ .map((r) => ({ method: r.method, path: r.path, public: r.public === true }))
99
+ .sort((a, b) => cmp(`${a.method} ${a.path}`, `${b.method} ${b.path}`)),
100
+ tools: sortedUnique(p.tools),
101
+ hooks: sortedUnique(p.hooks),
102
+ // only when declared: sets (and snapshots) of plugins without policy hooks stay as they were
103
+ ...(p.policyHooks && p.policyHooks.length > 0
104
+ ? { policyHooks: sortedUnique(p.policyHooks) }
105
+ : {}),
106
+ models: (p.models ?? [])
107
+ .map((m) => ({ purpose: m.purpose, kind: m.kind }))
108
+ .sort((a, b) => cmp(a.purpose, b.purpose)),
109
+ network: sortedUnique(p.network),
110
+ ui: { views: sortedUnique(p.ui?.views), embeds: sortedUnique(p.ui?.embeds) },
111
+ },
112
+ ...(input.warningsDigest ? { warningsDigest: input.warningsDigest } : {}),
113
+ };
114
+ }
115
+ /**
116
+ * 权限集合的稳定字符串键(排序),如 `provides:channel@1`、`config.org.secret:apiKey`、`table:todos`、
117
+ * `permissions.tools:write`、`permissions.http.public:POST /events`、`ui.view:tasks`、`ui.embed:board`。
118
+ * 容忍旧快照缺字段(按空处理),快照格式演进时不会抛错。
119
+ */
120
+ export function permissionKeys(set) {
121
+ const s = (set ?? {});
122
+ const p = (s.permissions ?? {});
123
+ const keys = [];
124
+ for (const r of s.provides ?? [])
125
+ keys.push(`provides:${r}`);
126
+ for (const r of s.requires ?? [])
127
+ keys.push(`requires:${r}`);
128
+ for (const r of s.optional ?? [])
129
+ keys.push(`optional:${r}`);
130
+ for (const level of ["deployment", "org"]) {
131
+ for (const f of s.config?.[level] ?? []) {
132
+ keys.push(`config.${level}${f.secret ? ".secret" : ""}:${f.path || "<root>"}`);
133
+ }
134
+ }
135
+ for (const t of s.tables ?? [])
136
+ keys.push(`table:${t}`);
137
+ if (p.secrets)
138
+ keys.push("permissions.secrets");
139
+ if (p.storage)
140
+ keys.push("permissions.storage");
141
+ for (const r of p.http ?? []) {
142
+ keys.push(`permissions.http${r.public ? ".public" : ""}:${r.method} ${r.path}`);
143
+ }
144
+ for (const t of p.tools ?? [])
145
+ keys.push(`permissions.tools:${t}`);
146
+ for (const h of p.hooks ?? [])
147
+ keys.push(`permissions.hooks:${h}`);
148
+ for (const h of p.policyHooks ?? [])
149
+ keys.push(`${POLICY_HOOK_KEY_PREFIX}${h}`);
150
+ for (const m of p.models ?? [])
151
+ keys.push(`permissions.models:${m.purpose} (${m.kind})`);
152
+ for (const d of p.network ?? [])
153
+ keys.push(`permissions.network:${d}`);
154
+ for (const v of p.ui?.views ?? [])
155
+ keys.push(`${UI_VIEW_KEY_PREFIX}${v}`);
156
+ for (const e of p.ui?.embeds ?? [])
157
+ keys.push(`ui.embed:${e}`);
158
+ if (s.warningsDigest)
159
+ keys.push(`${WARNINGS_KEY_PREFIX}${s.warningsDigest}`);
160
+ return sortedUnique(keys);
161
+ }
162
+ /**
163
+ * Key prefix of a policy hook mount (manifest `permissions.policyHooks`): needs approval like any hook.
164
+ * Lower-case letters and dots only, as catalog permission keys require (`PERMISSION_KEY_RE`).
165
+ */
166
+ export const POLICY_HOOK_KEY_PREFIX = "permissions.hooks.policy:";
167
+ /** 渲染 schema 视图的权限键前缀:记入快照但不卡加载(见 {@link blockingKeys})。 */
168
+ export const UI_VIEW_KEY_PREFIX = "ui.view:";
169
+ /**
170
+ * 新增项里需要批准(卡加载)的部分:除 `ui.view:*` 之外的全部。视图只是把插件已有的数据交给内核组件来画,
171
+ * 不给插件新能力(spec §4.1),升级多出视图时插件照常加载、快照自动补上。
172
+ */
173
+ export function blockingKeys(added) {
174
+ return added.filter((k) => !k.startsWith(UI_VIEW_KEY_PREFIX));
175
+ }
176
+ /** 两份权限集合的差异(按 {@link permissionKeys});`prev` 为空(无快照)时全部算新增。 */
177
+ export function diffPermissions(prev, next) {
178
+ const a = new Set(prev ? permissionKeys(prev) : []);
179
+ const b = new Set(permissionKeys(next));
180
+ return {
181
+ added: [...b].filter((k) => !a.has(k)),
182
+ removed: [...a].filter((k) => !b.has(k)),
183
+ };
184
+ }