@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,80 @@
1
+ -- Phase 0a terminology: catalog sources become marketplaces, then the enterprise directory becomes
2
+ -- the catalog (in that order: the catalog_* names are free only once the sources are renamed).
3
+ -- Columns directory_item_id / directory_version / catalog_source_id become catalog_item_id /
4
+ -- catalog_version / marketplace_id. Index, FK and PK names are not renamed (as in 0033). A catalog
5
+ -- item version's `source` value 'catalog' (imported from a catalog source) becomes 'marketplace'.
6
+ -- directory_exclusions belongs to directory sync (directory@1) and is not touched. No compatibility
7
+ -- views (nothing is released yet).
8
+
9
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
10
+ ALTER TABLE IF EXISTS catalog_sources RENAME TO marketplaces;
11
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
12
+ ALTER TABLE IF EXISTS catalog_entries RENAME TO marketplace_entries;
13
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
14
+ ALTER TABLE IF EXISTS directory_items RENAME TO catalog_items;
15
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
16
+ ALTER TABLE IF EXISTS directory_item_versions RENAME TO catalog_item_versions;
17
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
18
+ ALTER TABLE IF EXISTS directory_requests RENAME TO catalog_requests;
19
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
20
+ ALTER TABLE IF EXISTS directory_org_grants RENAME TO catalog_org_grants;
21
+
22
+ -- RENAME COLUMN has no IF EXISTS: check information_schema first, so a second run does nothing.
23
+ -- capybara:allow-destructive column rename; code is renamed in the same release (project not released, no compatibility layer)
24
+ DO $$
25
+ DECLARE
26
+ r record;
27
+ BEGIN
28
+ FOR r IN
29
+ SELECT * FROM (VALUES
30
+ ('connectors', 'directory_item_id', 'catalog_item_id'),
31
+ ('connectors', 'directory_version', 'catalog_version'),
32
+ ('skills', 'directory_item_id', 'catalog_item_id'),
33
+ ('skills', 'directory_version', 'catalog_version'),
34
+ ('skill_versions', 'directory_item_id', 'catalog_item_id'),
35
+ ('skill_versions', 'directory_version', 'catalog_version'),
36
+ ('extension_installs', 'directory_item_id', 'catalog_item_id'),
37
+ ('catalog_items', 'catalog_source_id', 'marketplace_id')
38
+ ) AS c(t, old_name, new_name)
39
+ LOOP
40
+ IF EXISTS (
41
+ SELECT 1 FROM information_schema.columns
42
+ WHERE table_schema = 'capybara' AND table_name = r.t AND column_name = r.old_name
43
+ ) THEN
44
+ EXECUTE format('ALTER TABLE capybara.%I RENAME COLUMN %I TO %I', r.t, r.old_name, r.new_name);
45
+ END IF;
46
+ END LOOP;
47
+ END
48
+ $$;
49
+
50
+ -- source 'catalog' -> 'marketplace': drop the CHECK (under its 0035 name, or ours on a second run),
51
+ -- rewrite the rows, add it back. The whole file runs in one transaction, so this is repeatable.
52
+ ALTER TABLE catalog_item_versions DROP CONSTRAINT IF EXISTS directory_item_versions_source_check;
53
+ ALTER TABLE catalog_item_versions DROP CONSTRAINT IF EXISTS catalog_item_versions_source_check;
54
+ UPDATE catalog_item_versions SET source = 'marketplace' WHERE source = 'catalog';
55
+ ALTER TABLE catalog_item_versions ADD CONSTRAINT catalog_item_versions_source_check
56
+ CHECK (source IN ('file', 'npm', 'marketplace'));
57
+
58
+ -- App bundles staged before this migration (rows live 24 hours) keep their source as JSON: kind
59
+ -- 'catalog' becomes 'marketplace' and the key catalogSourceId becomes marketplaceId, so confirming
60
+ -- one still writes a valid version source. Skipped when the table is gone (renamed by a later
61
+ -- migration), so a second run is harmless.
62
+ -- capybara:allow-destructive rewrites one JSON value of staged rows (24-hour TTL); the DO block only adds the table existence check
63
+ DO $$
64
+ BEGIN
65
+ IF to_regclass('capybara.app_import_staging') IS NOT NULL THEN
66
+ UPDATE capybara.app_import_staging
67
+ SET source = (source - 'catalogSourceId')
68
+ || jsonb_build_object(
69
+ 'kind',
70
+ CASE WHEN source->>'kind' = 'catalog' THEN 'marketplace' ELSE source->>'kind' END
71
+ )
72
+ || CASE
73
+ WHEN source ? 'catalogSourceId'
74
+ THEN jsonb_build_object('marketplaceId', source->'catalogSourceId')
75
+ ELSE '{}'::jsonb
76
+ END
77
+ WHERE source->>'kind' = 'catalog' OR source ? 'catalogSourceId';
78
+ END IF;
79
+ END
80
+ $$;
@@ -0,0 +1,20 @@
1
+ -- Phase 0a terminology: app bundles become plugins. app_installs / app_install_components /
2
+ -- app_import_staging become plugin_installs / plugin_install_components / plugin_import_staging
3
+ -- (plugin_installs is free since 0041 renamed the old one to extension_installs). A component's
4
+ -- kind 'plugin' (an extension the bundle installed) becomes 'extension'. Index, FK and PK names are
5
+ -- not renamed (as in 0033). No compatibility views (nothing is released yet).
6
+
7
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
8
+ ALTER TABLE IF EXISTS app_installs RENAME TO plugin_installs;
9
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
10
+ ALTER TABLE IF EXISTS app_install_components RENAME TO plugin_install_components;
11
+ -- capybara:allow-destructive table rename; code is renamed in the same release (project not released, no compatibility layer)
12
+ ALTER TABLE IF EXISTS app_import_staging RENAME TO plugin_import_staging;
13
+
14
+ -- kind 'plugin' -> 'extension': drop the CHECK (under its 0037 name, or ours on a second run),
15
+ -- rewrite the rows, add it back. The whole file runs in one transaction, so this is repeatable.
16
+ ALTER TABLE plugin_install_components DROP CONSTRAINT IF EXISTS app_install_components_kind_check;
17
+ ALTER TABLE plugin_install_components DROP CONSTRAINT IF EXISTS plugin_install_components_kind_check;
18
+ UPDATE plugin_install_components SET kind = 'extension' WHERE kind = 'plugin';
19
+ ALTER TABLE plugin_install_components ADD CONSTRAINT plugin_install_components_kind_check
20
+ CHECK (kind IN ('extension', 'connector', 'skill'));
@@ -0,0 +1,90 @@
1
+ -- Phase 0b: the catalog holds one kind, the plugin (package ecosystem spec §4). Every catalog row
2
+ -- before this migration is in a pre-0.1.0 format (an extension tgz, a skill / connector-template
3
+ -- package, an app.yaml bundle) that 0b no longer reads, so the catalog content is removed and the
4
+ -- tables lose their kind:
5
+ -- - deleted, in FK order: org plugin installs and their components, requests, grants, extension
6
+ -- catalog sources, import staging, versions, items, cached marketplace entries (refetched at the
7
+ -- next refresh: each marketplace's ETag is cleared and its status reset to 'never'). Org skills / connectors / skill versions and deployment extension installs stay,
8
+ -- with their catalog link set to NULL. Objects under deployment/directory/ are left in object
9
+ -- storage, unreachable.
10
+ -- - catalog_items: no kind; one live item per name.
11
+ -- - catalog_item_versions: manifest (the normalized plugin.json), no section / resolved,
12
+ -- plugin_sha256 becomes extension_sha256.
13
+ -- - marketplace_entries: no kind; one entry is one version, keyed (source_id, name, version) with
14
+ -- '' for an entry without a version (marketplace.json §5.2); npm is NULL for non-npm sources.
15
+ -- - plugin_import_staging: manifest instead of bundle.
16
+ -- The deletes run only while catalog_items still has its kind column, so a second run is a no-op.
17
+
18
+ -- capybara:allow-destructive pre-0.1.0 catalog content is in a format 0b removes; nothing is released
19
+ DO $$
20
+ BEGIN
21
+ IF EXISTS (
22
+ SELECT 1 FROM information_schema.columns
23
+ WHERE table_schema = 'capybara' AND table_name = 'catalog_items' AND column_name = 'kind'
24
+ ) THEN
25
+ DELETE FROM capybara.plugin_install_components;
26
+ DELETE FROM capybara.plugin_installs;
27
+ DELETE FROM capybara.catalog_requests;
28
+ DELETE FROM capybara.catalog_org_grants;
29
+ DELETE FROM capybara.extension_catalog_sources;
30
+ DELETE FROM capybara.plugin_import_staging;
31
+ UPDATE capybara.connectors SET catalog_item_id = NULL, catalog_version = NULL
32
+ WHERE catalog_item_id IS NOT NULL OR catalog_version IS NOT NULL;
33
+ UPDATE capybara.skills SET catalog_item_id = NULL, catalog_version = NULL
34
+ WHERE catalog_item_id IS NOT NULL OR catalog_version IS NOT NULL;
35
+ UPDATE capybara.skill_versions SET catalog_item_id = NULL, catalog_version = NULL
36
+ WHERE catalog_item_id IS NOT NULL OR catalog_version IS NOT NULL;
37
+ UPDATE capybara.extension_installs SET catalog_item_id = NULL
38
+ WHERE catalog_item_id IS NOT NULL;
39
+ DELETE FROM capybara.catalog_item_versions;
40
+ DELETE FROM capybara.catalog_items;
41
+ DELETE FROM capybara.marketplace_entries;
42
+ -- The entries are gone, so the next refresh must not get a 304 for them
43
+ UPDATE capybara.marketplaces SET etag = NULL, last_status = 'never', last_error = NULL
44
+ WHERE etag IS NOT NULL OR last_status <> 'never';
45
+ END IF;
46
+ END
47
+ $$;
48
+
49
+ -- catalog_items: one kind; the live-name index moves from (kind, name) to name.
50
+ DROP INDEX IF EXISTS directory_items_live_name_uq;
51
+ -- capybara:allow-destructive pre-0.1.0 catalog content is in a format 0b removes; nothing is released
52
+ ALTER TABLE catalog_items DROP COLUMN IF EXISTS kind;
53
+ CREATE UNIQUE INDEX IF NOT EXISTS catalog_items_live_name_uq
54
+ ON catalog_items (name)
55
+ WHERE deleted_at IS NULL;
56
+
57
+ -- catalog_item_versions: the normalized plugin manifest; the extension's package.
58
+ ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS manifest jsonb NOT NULL;
59
+ -- capybara:allow-destructive pre-0.1.0 catalog content is in a format 0b removes; nothing is released
60
+ ALTER TABLE catalog_item_versions DROP COLUMN IF EXISTS section;
61
+ -- capybara:allow-destructive pre-0.1.0 catalog content is in a format 0b removes; nothing is released
62
+ ALTER TABLE catalog_item_versions DROP COLUMN IF EXISTS resolved;
63
+ -- RENAME COLUMN has no IF EXISTS: check information_schema first, so a second run does nothing.
64
+ -- capybara:allow-destructive pre-0.1.0 catalog content is in a format 0b removes; nothing is released
65
+ DO $$
66
+ BEGIN
67
+ IF EXISTS (
68
+ SELECT 1 FROM information_schema.columns
69
+ WHERE table_schema = 'capybara' AND table_name = 'catalog_item_versions'
70
+ AND column_name = 'plugin_sha256'
71
+ ) THEN
72
+ ALTER TABLE capybara.catalog_item_versions RENAME COLUMN plugin_sha256 TO extension_sha256;
73
+ END IF;
74
+ END
75
+ $$;
76
+
77
+ -- marketplace_entries: one entry per (source, name, version).
78
+ ALTER TABLE marketplace_entries DROP CONSTRAINT IF EXISTS catalog_entries_pkey;
79
+ ALTER TABLE marketplace_entries DROP CONSTRAINT IF EXISTS marketplace_entries_pkey;
80
+ -- capybara:allow-destructive pre-0.1.0 catalog content is in a format 0b removes; nothing is released
81
+ ALTER TABLE marketplace_entries DROP COLUMN IF EXISTS kind;
82
+ ALTER TABLE marketplace_entries ADD COLUMN IF NOT EXISTS version text NOT NULL DEFAULT '';
83
+ ALTER TABLE marketplace_entries ALTER COLUMN npm DROP NOT NULL;
84
+ ALTER TABLE marketplace_entries
85
+ ADD CONSTRAINT marketplace_entries_pkey PRIMARY KEY (source_id, name, version);
86
+
87
+ -- plugin_import_staging: the plugin manifest instead of the app bundle.
88
+ -- capybara:allow-destructive pre-0.1.0 catalog content is in a format 0b removes; nothing is released
89
+ ALTER TABLE plugin_import_staging DROP COLUMN IF EXISTS bundle;
90
+ ALTER TABLE plugin_import_staging ADD COLUMN IF NOT EXISTS manifest jsonb NOT NULL;
@@ -0,0 +1,9 @@
1
+ -- Phase 0b: a plugin's dependencies are installed in the org before it, each as its own
2
+ -- plugin_installs row, and recorded as a component of the parent install with kind 'plugin'
3
+ -- (ref = the dependency's install id). The CHECK is dropped and added back under the same name,
4
+ -- so a second run is a no-op.
5
+
6
+ -- capybara:allow-destructive the CHECK is re-added with one more allowed value in the same transaction
7
+ ALTER TABLE plugin_install_components DROP CONSTRAINT IF EXISTS plugin_install_components_kind_check;
8
+ ALTER TABLE plugin_install_components ADD CONSTRAINT plugin_install_components_kind_check
9
+ CHECK (kind IN ('extension', 'connector', 'skill', 'plugin'));
@@ -0,0 +1,25 @@
1
+ -- Phase A1: git marketplaces and git plugin sources (package ecosystem spec §5.1, §5.3).
2
+ -- - marketplaces: the form (http = a marketplace.json URL, git = a repository), the git ref it
3
+ -- follows (NULL = the remote HEAD), the commit of the last refresh (an unchanged commit skips the
4
+ -- refresh) and the manifest's owner name (the publisher of skills-only plugins).
5
+ -- - catalog_item_versions: source 'git'; where the plugin came from (source_detail: host, repo,
6
+ -- path, ref, commit and followsBranch for git; the archive URL; the npm registry) and the content
7
+ -- digest of the imported files (filled from phase A1 task 4).
8
+ -- - catalog_items: package_name may be NULL (a git plugin without package.json).
9
+ -- Every statement is repeatable: columns are added with IF NOT EXISTS, the CHECKs are dropped and
10
+ -- added back under the same name in the same transaction.
11
+
12
+ ALTER TABLE marketplaces ADD COLUMN IF NOT EXISTS form text NOT NULL DEFAULT 'http';
13
+ ALTER TABLE marketplaces DROP CONSTRAINT IF EXISTS marketplaces_form_check;
14
+ ALTER TABLE marketplaces ADD CONSTRAINT marketplaces_form_check CHECK (form IN ('http', 'git'));
15
+ ALTER TABLE marketplaces ADD COLUMN IF NOT EXISTS ref text NULL;
16
+ ALTER TABLE marketplaces ADD COLUMN IF NOT EXISTS last_commit text NULL;
17
+ ALTER TABLE marketplaces ADD COLUMN IF NOT EXISTS owner_name text NULL;
18
+
19
+ ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS source_detail jsonb NULL;
20
+ ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS content_digest text NULL;
21
+ ALTER TABLE catalog_item_versions DROP CONSTRAINT IF EXISTS catalog_item_versions_source_check;
22
+ ALTER TABLE catalog_item_versions ADD CONSTRAINT catalog_item_versions_source_check
23
+ CHECK (source IN ('file', 'npm', 'marketplace', 'git'));
24
+
25
+ ALTER TABLE catalog_items ALTER COLUMN package_name DROP NOT NULL;
@@ -0,0 +1,7 @@
1
+ -- Phase A1: the branch head of a marketplace entry that follows a git branch (spec §5.3 "content
2
+ -- changed at the same version"). A refresh resolves it for entries already imported, so an
3
+ -- imported version whose recorded commit differs from the head shows the content changed; NULL
4
+ -- when not resolved (not imported, pinned to a commit, not git, or the lookup failed).
5
+ -- Repeatable: the column is added with IF NOT EXISTS.
6
+
7
+ ALTER TABLE marketplace_entries ADD COLUMN IF NOT EXISTS head_commit text NULL;
@@ -0,0 +1,8 @@
1
+ -- Phase A1: the git tree oid of a marketplace entry's plugin directory (spec §5.3 "content
2
+ -- changed at the same version"). A path entry gets it at each refresh of its git marketplace; an
3
+ -- imported git entry with a path gets it with its branch head. Compared with the tree recorded on
4
+ -- the imported version, so a monorepo commit that leaves a plugin's directory alone does not mark
5
+ -- that plugin changed. NULL when unknown (then commits are compared).
6
+ -- Repeatable: the column is added with IF NOT EXISTS.
7
+
8
+ ALTER TABLE marketplace_entries ADD COLUMN IF NOT EXISTS tree_oid text NULL;
@@ -0,0 +1,37 @@
1
+ -- Phase A1: org in-place upgrades of installed plugins (package ecosystem spec §10).
2
+ -- - plugin_installs.status gains 'upgrading' (set under the org lock while an upgrade runs; one
3
+ -- upgrade or uninstall per install at a time).
4
+ -- - plugin_installs.upgrade: the journal of the running upgrade ({ id, from, to, startedAt, done }),
5
+ -- NULL otherwise. A replica that crashed midway leaves it behind; once older than
6
+ -- catalog.staleInstallMinutes it is undone (the install back at its old version).
7
+ -- - plugin_install_components.template_id: the connector template a connector component was
8
+ -- created from (NULL for other kinds and for installs before this migration), so an upgrade maps
9
+ -- a template to its connector.
10
+ -- - plugin_install_components.dropped: a component an upgrade removed from the plugin but kept
11
+ -- because an agent uses it ("no longer in the plugin").
12
+ -- The status CHECK was created inline in 0037 under the table's name at the time (0043 renamed the
13
+ -- table, not the constraint), so it is found by its definition, dropped and added back under a
14
+ -- fixed name in the same transaction; a second run is a no-op.
15
+
16
+ -- capybara:allow-destructive the status CHECK is re-added with one more allowed value in the same transaction
17
+ DO $$
18
+ DECLARE
19
+ c record;
20
+ BEGIN
21
+ FOR c IN
22
+ SELECT conname FROM pg_constraint
23
+ WHERE conrelid = 'plugin_installs'::regclass
24
+ AND contype = 'c'
25
+ AND pg_get_constraintdef(oid) LIKE '%status%'
26
+ LOOP
27
+ EXECUTE format('ALTER TABLE plugin_installs DROP CONSTRAINT %I', c.conname);
28
+ END LOOP;
29
+ END $$;
30
+ ALTER TABLE plugin_installs ADD CONSTRAINT plugin_installs_status_check
31
+ CHECK (status IN ('installing', 'installed', 'failed', 'uninstalling', 'upgrading'));
32
+ ALTER TABLE plugin_installs ADD COLUMN IF NOT EXISTS upgrade jsonb NULL;
33
+
34
+ ALTER TABLE plugin_install_components ADD COLUMN IF NOT EXISTS template_id text NULL;
35
+ -- An upgrade that removes a skill or connector an agent still uses keeps it, marked "no longer in
36
+ -- the plugin"; the install still owns it (uninstall removes it once nothing uses it).
37
+ ALTER TABLE plugin_install_components ADD COLUMN IF NOT EXISTS dropped boolean NOT NULL DEFAULT false;
@@ -0,0 +1,53 @@
1
+ -- Phase A2: bootstrap plugins replace built-in extensions (package ecosystem spec §7).
2
+ -- - Source 'bootstrap' for packages, install records, permission snapshots and catalog versions
3
+ -- written by the bootstrap step (packages baked into the image, pinned by packages/kernel/
4
+ -- bootstrap.json).
5
+ -- - extension_installs.required: a required bootstrap plugin is enabled in every org without an
6
+ -- org config row and cannot be disabled or uninstalled (the bootstrap step sets and clears it).
7
+ -- - extension_replica_status: the kernel no longer loads 'builtin' extensions; a bootstrap plugin
8
+ -- is an install record and is reported as 'install'. The status table is rebuilt by each
9
+ -- replica's reconcile, so the 'builtin' rows are dropped.
10
+ -- - bootstrap_runs: one row per manifest (sha256 of bootstrap.json) the bootstrap step completed;
11
+ -- "bootstrap done" = a row for the current manifest.
12
+ -- Every CHECK is dropped under each name it may have (its creation name, or ours on a second run)
13
+ -- and added back in the same transaction, so a second run is a no-op.
14
+
15
+ -- capybara:allow-destructive the source CHECK is re-added with one more allowed value in the same transaction
16
+ ALTER TABLE extension_packages DROP CONSTRAINT IF EXISTS extension_packages_source_check;
17
+ ALTER TABLE extension_packages ADD CONSTRAINT extension_packages_source_check
18
+ CHECK (source IN ('npm', 'file', 'catalog', 'bootstrap'));
19
+
20
+ -- capybara:allow-destructive the source CHECK is re-added with one more allowed value in the same transaction
21
+ ALTER TABLE extension_installs DROP CONSTRAINT IF EXISTS extension_installs_source_check;
22
+ ALTER TABLE extension_installs ADD CONSTRAINT extension_installs_source_check
23
+ CHECK (source IN ('npm', 'file', 'catalog', 'bootstrap'));
24
+
25
+ -- capybara:allow-destructive the source CHECK is re-added with one more allowed value in the same transaction
26
+ ALTER TABLE extension_permission_snapshots
27
+ DROP CONSTRAINT IF EXISTS plugin_permission_snapshots_source_check;
28
+ ALTER TABLE extension_permission_snapshots
29
+ DROP CONSTRAINT IF EXISTS extension_permission_snapshots_source_check;
30
+ ALTER TABLE extension_permission_snapshots ADD CONSTRAINT extension_permission_snapshots_source_check
31
+ CHECK (source IN ('cli', 'auto', 'web', 'bootstrap'));
32
+
33
+ -- capybara:allow-destructive the source CHECK is re-added with one more allowed value in the same transaction
34
+ ALTER TABLE catalog_item_versions DROP CONSTRAINT IF EXISTS catalog_item_versions_source_check;
35
+ ALTER TABLE catalog_item_versions ADD CONSTRAINT catalog_item_versions_source_check
36
+ CHECK (source IN ('file', 'npm', 'marketplace', 'git', 'bootstrap'));
37
+
38
+ -- capybara:allow-destructive replica status rows are rebuilt by every replica's reconcile; 'builtin' is no longer a load source
39
+ DELETE FROM extension_replica_status WHERE source = 'builtin';
40
+ -- capybara:allow-destructive the source CHECK is re-added without 'builtin' in the same transaction
41
+ ALTER TABLE extension_replica_status DROP CONSTRAINT IF EXISTS plugin_replica_status_source_check;
42
+ ALTER TABLE extension_replica_status
43
+ DROP CONSTRAINT IF EXISTS extension_replica_status_source_check;
44
+ ALTER TABLE extension_replica_status ADD CONSTRAINT extension_replica_status_source_check
45
+ CHECK (source IN ('config', 'install'));
46
+
47
+ ALTER TABLE extension_installs ADD COLUMN IF NOT EXISTS required boolean NOT NULL DEFAULT false;
48
+
49
+ CREATE TABLE IF NOT EXISTS bootstrap_runs (
50
+ manifest_sha256 text PRIMARY KEY CHECK (manifest_sha256 ~ '^[0-9a-f]{64}$'),
51
+ completed_at timestamptz NOT NULL,
52
+ results jsonb NOT NULL
53
+ );
@@ -0,0 +1,26 @@
1
+ -- Phase B: Claude Code plugin compatibility (package ecosystem spec §8, §9).
2
+ -- - catalog_item_versions.source_format: the format the version was read from ('capybara', or
3
+ -- 'claude-code' for a translated Claude Code plugin); translation: its translation report (null
4
+ -- for a native plugin); license_text: the root LICENSE text (at most 64 KiB; any plugin);
5
+ -- license_truncated: the root LICENSE was longer (or not UTF-8), so license_text is null.
6
+ -- - skill_versions.source_format: the format of the plugin the version came from (org skills and
7
+ -- agent skills stay 'capybara'); suggest_pinned: the plugin suggests pinning it (spec §9.1).
8
+ -- - marketplace_entries.claude: the Claude marketplace entry's overlay (strict, component fields,
9
+ -- publisher; null for a Capybara entry).
10
+ -- - marketplaces.skipped: the entries the last successful refresh could not store
11
+ -- ({ name, reason }[]), replaced on every refresh.
12
+ -- Additive only: every column is nullable or has a default, so a running older version keeps
13
+ -- working during a rolling upgrade.
14
+
15
+ ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS source_format text NOT NULL DEFAULT 'capybara'
16
+ CONSTRAINT catalog_item_versions_source_format_check CHECK (source_format IN ('capybara', 'claude-code'));
17
+ ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS translation jsonb;
18
+ ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS license_text text;
19
+ ALTER TABLE catalog_item_versions ADD COLUMN IF NOT EXISTS license_truncated boolean NOT NULL DEFAULT false;
20
+
21
+ ALTER TABLE skill_versions ADD COLUMN IF NOT EXISTS source_format text NOT NULL DEFAULT 'capybara'
22
+ CONSTRAINT skill_versions_source_format_check CHECK (source_format IN ('capybara', 'claude-code'));
23
+ ALTER TABLE skill_versions ADD COLUMN IF NOT EXISTS suggest_pinned boolean NOT NULL DEFAULT false;
24
+
25
+ ALTER TABLE marketplace_entries ADD COLUMN IF NOT EXISTS claude jsonb;
26
+ ALTER TABLE marketplaces ADD COLUMN IF NOT EXISTS skipped jsonb NOT NULL DEFAULT '[]'::jsonb;
@@ -0,0 +1,5 @@
1
+ -- The sidebar's grouped conversation list (GET /conversations/groups, GET /conversations?agentId=):
2
+ -- my chat conversations per agent, newest first.
3
+ CREATE INDEX IF NOT EXISTS conversations_account_agent_idx
4
+ ON capybara.conversations (org_id, account_id, agent_id, updated_at DESC, id DESC)
5
+ WHERE kind = 'chat';
@@ -0,0 +1,73 @@
1
+ -- Phase C: sub-agents (spec docs/superpowers/specs/2026-10-26-subagents-design.md §6, §16.3, §18).
2
+ -- - conversations: kind gains 'subagent' (a child conversation, read-only for people), with the
3
+ -- parent conversation (deleting it deletes its children) and the dispatched type name.
4
+ -- - runs.subagent_tokens_used: the parent run's sub-agent token counter (§8.3).
5
+ -- - subagent_dispatches: one row per dispatch (an `agent` call of a parent run).
6
+ -- - agent_templates / agent_template_versions: agent templates installed from plugins.
7
+ -- - plugin_install_components.kind gains 'agent_template'.
8
+ -- Additive only: new columns are nullable or have a default and the CHECKs only widen, so a
9
+ -- running older version keeps working during a rolling upgrade. 0052 is taken by another branch.
10
+ -- The widened CHECKs are re-added NOT VALID: the old CHECK implies the new one, so existing rows
11
+ -- need no scan under the ACCESS EXCLUSIVE lock; new writes are checked as usual.
12
+
13
+ -- capybara:allow-destructive the CHECK is re-added with one more allowed value in the same transaction
14
+ ALTER TABLE conversations DROP CONSTRAINT IF EXISTS conversations_kind_check;
15
+ ALTER TABLE conversations ADD CONSTRAINT conversations_kind_check
16
+ CHECK (kind IN ('chat', 'eval', 'subagent')) NOT VALID;
17
+ ALTER TABLE conversations ADD COLUMN IF NOT EXISTS parent_conversation_id text
18
+ REFERENCES conversations(id) ON DELETE CASCADE;
19
+ ALTER TABLE conversations ADD COLUMN IF NOT EXISTS subagent_type text;
20
+ CREATE INDEX IF NOT EXISTS conversations_parent_idx ON conversations (parent_conversation_id)
21
+ WHERE kind = 'subagent';
22
+
23
+ ALTER TABLE runs ADD COLUMN IF NOT EXISTS subagent_tokens_used bigint NOT NULL DEFAULT 0;
24
+
25
+ CREATE TABLE IF NOT EXISTS subagent_dispatches (
26
+ parent_run_id text NOT NULL,
27
+ parent_call_id text NOT NULL,
28
+ parent_conversation_id text NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
29
+ step integer NOT NULL,
30
+ child_conversation_id text NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
31
+ child_run_id text NOT NULL,
32
+ resumed boolean NOT NULL DEFAULT false,
33
+ created_at timestamptz NOT NULL DEFAULT now(),
34
+ PRIMARY KEY (parent_run_id, parent_call_id)
35
+ );
36
+ CREATE INDEX IF NOT EXISTS subagent_dispatches_child_run_idx ON subagent_dispatches (child_run_id);
37
+ CREATE INDEX IF NOT EXISTS subagent_dispatches_child_conv_idx
38
+ ON subagent_dispatches (child_conversation_id);
39
+
40
+ -- catalog_item_id / plugin_name: the plugin the template came from (provenance); every template
41
+ -- is installed from a plugin, so plugin_name is required (NULLs would escape the unique index)
42
+ CREATE TABLE IF NOT EXISTS agent_templates (
43
+ id text PRIMARY KEY,
44
+ org_id text NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
45
+ name text NOT NULL,
46
+ catalog_item_id text,
47
+ plugin_name text NOT NULL,
48
+ current_version integer NOT NULL CHECK (current_version >= 1),
49
+ deleted_at timestamptz,
50
+ created_at timestamptz NOT NULL DEFAULT now(),
51
+ updated_at timestamptz NOT NULL DEFAULT now()
52
+ );
53
+ CREATE UNIQUE INDEX IF NOT EXISTS agent_templates_live_name_uq
54
+ ON agent_templates (org_id, plugin_name, name)
55
+ WHERE deleted_at IS NULL;
56
+
57
+ -- definition: the parsed template (frontmatter and body); catalog_version: the plugin version
58
+ CREATE TABLE IF NOT EXISTS agent_template_versions (
59
+ template_id text NOT NULL REFERENCES agent_templates(id) ON DELETE CASCADE,
60
+ version integer NOT NULL CHECK (version >= 1),
61
+ definition jsonb NOT NULL,
62
+ source_format text NOT NULL DEFAULT 'capybara'
63
+ CONSTRAINT agent_template_versions_source_format_check
64
+ CHECK (source_format IN ('capybara', 'claude-code')),
65
+ catalog_version text,
66
+ created_at timestamptz NOT NULL DEFAULT now(),
67
+ PRIMARY KEY (template_id, version)
68
+ );
69
+
70
+ -- capybara:allow-destructive the CHECK is re-added with one more allowed value in the same transaction
71
+ ALTER TABLE plugin_install_components DROP CONSTRAINT IF EXISTS plugin_install_components_kind_check;
72
+ ALTER TABLE plugin_install_components ADD CONSTRAINT plugin_install_components_kind_check
73
+ CHECK (kind IN ('extension', 'connector', 'skill', 'plugin', 'agent_template')) NOT VALID;
@@ -0,0 +1,7 @@
1
+ -- Phase C: the expiry of a run's sub-agents wait (spec §7.2), so the wait sweep can expire it when
2
+ -- its timeout job was lost (approvals and questions keep theirs in their own rows). Set when a run
3
+ -- suspends on a `subagents` wait, cleared when it resumes. Additive and nullable: older versions
4
+ -- ignore it.
5
+ ALTER TABLE runs ADD COLUMN IF NOT EXISTS wait_expires_at timestamptz;
6
+ CREATE INDEX IF NOT EXISTS runs_wait_expires_idx ON runs (wait_expires_at)
7
+ WHERE status = 'waiting' AND wait_expires_at IS NOT NULL;
@@ -0,0 +1,10 @@
1
+ -- Final review I2: the ON DELETE CASCADE of conversations.parent_conversation_id and of
2
+ -- subagent_dispatches.parent_conversation_id runs `... WHERE $1 = parent_conversation_id` with no
3
+ -- `kind` predicate, so the partial index conversations_parent_idx (WHERE kind = 'subagent') cannot
4
+ -- serve it and every conversation delete scanned both tables. These indexes carry no kind
5
+ -- predicate; the app's `parent = $x AND kind = 'subagent'` queries can use the first one too, so
6
+ -- conversations_parent_idx can be dropped in a later release. Additive: older versions ignore them.
7
+ CREATE INDEX IF NOT EXISTS conversations_parent_conv_idx ON conversations (parent_conversation_id)
8
+ WHERE parent_conversation_id IS NOT NULL;
9
+ CREATE INDEX IF NOT EXISTS subagent_dispatches_parent_conv_idx
10
+ ON subagent_dispatches (parent_conversation_id);
@@ -0,0 +1,3 @@
1
+ -- UI refresh B (Task 6): the optional reason a person gives when denying a tool call. Shown on the
2
+ -- handled approval and appended to the denied call's tool result.
3
+ ALTER TABLE capybara.approvals ADD COLUMN IF NOT EXISTS deny_reason text;
@@ -0,0 +1,11 @@
1
+ -- UI refresh B (Task 7): model-generated titles and create-on-first-send.
2
+ -- title_source: who wrote `title` (null = nobody yet; a manual rename is never regenerated).
3
+ -- title_attempts: title-generation attempts made (bounded retry, claimed per attempt).
4
+ -- create_request_id: the first message's clientMessageId, so a retried first send is idempotent.
5
+ ALTER TABLE capybara.conversations ADD COLUMN IF NOT EXISTS title_source text
6
+ CHECK (title_source IN ('generated', 'manual'));
7
+ ALTER TABLE capybara.conversations ADD COLUMN IF NOT EXISTS title_attempts int NOT NULL DEFAULT 0;
8
+ ALTER TABLE capybara.conversations ADD COLUMN IF NOT EXISTS create_request_id text;
9
+ CREATE UNIQUE INDEX IF NOT EXISTS conversations_create_request_idx
10
+ ON capybara.conversations (org_id, account_id, create_request_id)
11
+ WHERE create_request_id IS NOT NULL;
@@ -0,0 +1,4 @@
1
+ -- UI refresh B (Task 8): the model / effort a person switched the conversation to, as of the latest
2
+ -- `model_switched` event (the log is the source of truth; this column serves the conversation view).
3
+ -- { "model": { "provider", "model" } | null, "effort": string | null }; NULL = never switched.
4
+ ALTER TABLE capybara.conversations ADD COLUMN IF NOT EXISTS selection jsonb;
@@ -0,0 +1,22 @@
1
+ -- UI refresh B (Task 9): queued messages. A queued message is not in the event log until it is sent
2
+ -- (the model has not seen it); it is conversation state another replica may dispatch, so it lives
3
+ -- here. `content` holds the blocks after the text (`@` resources read at queue time, uploaded file
4
+ -- refs); `attachments` the `@` resource metadata for user_message.payload.attachments; `files` the
5
+ -- uploaded files' display metadata. queue_paused: a run failed or was stopped with items queued.
6
+ CREATE TABLE IF NOT EXISTS capybara.conversation_queue (
7
+ id text PRIMARY KEY,
8
+ conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
9
+ account_id text NOT NULL,
10
+ position bigint NOT NULL,
11
+ text text NOT NULL,
12
+ content jsonb NOT NULL,
13
+ attachments jsonb NOT NULL DEFAULT '[]',
14
+ files jsonb NOT NULL DEFAULT '[]',
15
+ client_message_id text NOT NULL,
16
+ created_at timestamptz NOT NULL DEFAULT now(),
17
+ updated_at timestamptz NOT NULL DEFAULT now(),
18
+ UNIQUE (conversation_id, client_message_id)
19
+ );
20
+ CREATE INDEX IF NOT EXISTS conversation_queue_position_idx
21
+ ON capybara.conversation_queue (conversation_id, position);
22
+ ALTER TABLE capybara.conversations ADD COLUMN IF NOT EXISTS queue_paused boolean NOT NULL DEFAULT false;
@@ -0,0 +1,10 @@
1
+ -- UI refresh B (Task 11): an org's order of file-preview@1 previewers. A previewer without a row comes
2
+ -- after every ordered one, in provider order; `disabled` hides it from the org's file previews.
3
+ CREATE TABLE IF NOT EXISTS capybara.file_previewers (
4
+ org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
5
+ plugin text NOT NULL,
6
+ previewer_id text NOT NULL,
7
+ position int NOT NULL,
8
+ disabled boolean NOT NULL DEFAULT false,
9
+ PRIMARY KEY (org_id, plugin, previewer_id)
10
+ );
@@ -0,0 +1,5 @@
1
+ -- UI refresh B (final review I1): a queued message carries the model / effort pick it was queued
2
+ -- with. At dispatch the kernel writes the `model_switched` before the message, as a direct send
3
+ -- does. { "provider", "model" } / the effort value; NULL = the message picks nothing.
4
+ ALTER TABLE capybara.conversation_queue ADD COLUMN IF NOT EXISTS model jsonb;
5
+ ALTER TABLE capybara.conversation_queue ADD COLUMN IF NOT EXISTS effort text;
@@ -0,0 +1,8 @@
1
+ -- Phase D (Task 9): a queued message can invoke a skill. It is rendered when queued (like queued
2
+ -- `@` resources), so `content` starts with the rendered text and `skill` holds the
3
+ -- user_message.skill record `{ id, version, source, name, plugin?, arguments, mode, agentType? }`;
4
+ -- NULL = a plain message. queue_pause_reason says why the queue paused: `run_ended` (a run failed
5
+ -- or was stopped), `author_cannot_send`, `skill_not_invocable` (re-checked at dispatch); NULL when
6
+ -- not paused or paused by an older replica. Additive: older replicas never write either column.
7
+ ALTER TABLE capybara.conversation_queue ADD COLUMN IF NOT EXISTS skill jsonb;
8
+ ALTER TABLE capybara.conversations ADD COLUMN IF NOT EXISTS queue_pause_reason text;