@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.
- package/LICENSE +202 -0
- package/NOTICE +2 -0
- package/README.md +20 -2
- package/bootstrap.json +26 -0
- package/dist/admin/admin.controller.d.ts +139 -0
- package/dist/admin/admin.controller.js +238 -0
- package/dist/admin/extensions.controller.d.ts +100 -0
- package/dist/admin/extensions.controller.js +226 -0
- package/dist/admin/setup.controller.d.ts +36 -0
- package/dist/admin/setup.controller.js +106 -0
- package/dist/admin/setup.service.d.ts +47 -0
- package/dist/admin/setup.service.js +90 -0
- package/dist/agents/agents.controller.d.ts +205 -0
- package/dist/agents/agents.controller.js +144 -0
- package/dist/agents/agents.service.d.ts +177 -0
- package/dist/agents/agents.service.js +677 -0
- package/dist/agents/definition.d.ts +198 -0
- package/dist/agents/definition.js +152 -0
- package/dist/agents/models.controller.d.ts +13 -0
- package/dist/agents/models.controller.js +31 -0
- package/dist/agents/templates.controller.d.ts +15 -0
- package/dist/agents/templates.controller.js +37 -0
- package/dist/agents/templates.d.ts +83 -0
- package/dist/agents/templates.js +173 -0
- package/dist/catalog/admin-catalog.controller.d.ts +143 -0
- package/dist/catalog/admin-catalog.controller.js +245 -0
- package/dist/catalog/catalog.service.d.ts +430 -0
- package/dist/catalog/catalog.service.js +882 -0
- package/dist/catalog/claude/agents.d.ts +27 -0
- package/dist/catalog/claude/agents.js +270 -0
- package/dist/catalog/claude/commands.d.ts +50 -0
- package/dist/catalog/claude/commands.js +179 -0
- package/dist/catalog/claude/manifest.d.ts +69 -0
- package/dist/catalog/claude/manifest.js +134 -0
- package/dist/catalog/claude/marketplace.d.ts +35 -0
- package/dist/catalog/claude/marketplace.js +194 -0
- package/dist/catalog/claude/mcp.d.ts +33 -0
- package/dist/catalog/claude/mcp.js +226 -0
- package/dist/catalog/claude/report.d.ts +86 -0
- package/dist/catalog/claude/report.js +121 -0
- package/dist/catalog/claude/translate.d.ts +56 -0
- package/dist/catalog/claude/translate.js +857 -0
- package/dist/catalog/cli.d.ts +46 -0
- package/dist/catalog/cli.js +211 -0
- package/dist/catalog/git-source.d.ts +127 -0
- package/dist/catalog/git-source.js +520 -0
- package/dist/catalog/marketplace-fetch.d.ts +99 -0
- package/dist/catalog/marketplace-fetch.js +203 -0
- package/dist/catalog/marketplaces.controller.d.ts +97 -0
- package/dist/catalog/marketplaces.controller.js +197 -0
- package/dist/catalog/marketplaces.service.d.ts +340 -0
- package/dist/catalog/marketplaces.service.js +1217 -0
- package/dist/catalog/org-catalog.controller.d.ts +128 -0
- package/dist/catalog/org-catalog.controller.js +277 -0
- package/dist/catalog/org-catalog.service.d.ts +246 -0
- package/dist/catalog/org-catalog.service.js +625 -0
- package/dist/catalog/plugin-import.d.ts +436 -0
- package/dist/catalog/plugin-import.js +1069 -0
- package/dist/catalog/plugin-install.d.ts +447 -0
- package/dist/catalog/plugin-install.js +1333 -0
- package/dist/catalog/plugin-package.d.ts +143 -0
- package/dist/catalog/plugin-package.js +382 -0
- package/dist/catalog/plugin-upgrade.d.ts +222 -0
- package/dist/catalog/plugin-upgrade.js +1219 -0
- package/dist/catalog/requests.service.d.ts +162 -0
- package/dist/catalog/requests.service.js +504 -0
- package/dist/catalog/schema-path.d.ts +7 -0
- package/dist/catalog/schema-path.js +63 -0
- package/dist/catalog/upgrade-targets.d.ts +59 -0
- package/dist/catalog/upgrade-targets.js +90 -0
- package/dist/catalog/versions.d.ts +31 -0
- package/dist/catalog/versions.js +44 -0
- package/dist/channels/actions.d.ts +37 -0
- package/dist/channels/actions.js +121 -0
- package/dist/channels/cards.d.ts +44 -0
- package/dist/channels/cards.js +156 -0
- package/dist/channels/connections.controller.d.ts +59 -0
- package/dist/channels/connections.controller.js +115 -0
- package/dist/channels/connections.service.d.ts +187 -0
- package/dist/channels/connections.service.js +534 -0
- package/dist/channels/features.d.ts +12 -0
- package/dist/channels/features.js +22 -0
- package/dist/channels/inbound.d.ts +120 -0
- package/dist/channels/inbound.js +332 -0
- package/dist/channels/outbound.d.ts +140 -0
- package/dist/channels/outbound.js +1126 -0
- package/dist/channels/phrases.d.ts +100 -0
- package/dist/channels/phrases.js +81 -0
- package/dist/channels/supervisor.d.ts +182 -0
- package/dist/channels/supervisor.js +625 -0
- package/dist/channels/threads.d.ts +29 -0
- package/dist/channels/threads.js +104 -0
- package/dist/channels/webhook-url.d.ts +16 -0
- package/dist/channels/webhook-url.js +34 -0
- package/dist/channels/webhook.controller.d.ts +19 -0
- package/dist/channels/webhook.controller.js +72 -0
- package/dist/channels/webhook.d.ts +73 -0
- package/dist/channels/webhook.js +274 -0
- package/dist/config/docs.d.ts +9 -0
- package/dist/config/docs.js +85 -0
- package/dist/config/env.d.ts +6 -0
- package/dist/config/env.js +73 -0
- package/dist/config/fields.d.ts +42 -0
- package/dist/config/fields.js +214 -0
- package/dist/config/file-source.d.ts +3 -0
- package/dist/config/file-source.js +31 -0
- package/dist/config/load.d.ts +20 -0
- package/dist/config/load.js +98 -0
- package/dist/config/nacos-source.d.ts +31 -0
- package/dist/config/nacos-source.js +229 -0
- package/dist/config/schema.d.ts +237 -0
- package/dist/config/schema.js +1192 -0
- package/dist/config/sources.d.ts +18 -0
- package/dist/config/sources.js +59 -0
- package/dist/config/types.d.ts +9 -0
- package/dist/config/types.js +7 -0
- package/dist/conversations/artifacts.d.ts +52 -0
- package/dist/conversations/artifacts.js +137 -0
- package/dist/conversations/attachments.controller.d.ts +28 -0
- package/dist/conversations/attachments.controller.js +96 -0
- package/dist/conversations/attachments.service.d.ts +180 -0
- package/dist/conversations/attachments.service.js +578 -0
- package/dist/conversations/conversations.controller.d.ts +288 -0
- package/dist/conversations/conversations.controller.js +607 -0
- package/dist/conversations/conversations.service.d.ts +321 -0
- package/dist/conversations/conversations.service.js +754 -0
- package/dist/conversations/event-log.d.ts +122 -0
- package/dist/conversations/event-log.js +259 -0
- package/dist/conversations/events.d.ts +856 -0
- package/dist/conversations/events.js +639 -0
- package/dist/conversations/files.d.ts +92 -0
- package/dist/conversations/files.js +213 -0
- package/dist/conversations/outputs-read.d.ts +34 -0
- package/dist/conversations/outputs-read.js +37 -0
- package/dist/conversations/queue.d.ts +169 -0
- package/dist/conversations/queue.js +527 -0
- package/dist/conversations/sandbox-status.d.ts +21 -0
- package/dist/conversations/sandbox-status.js +24 -0
- package/dist/conversations/selection.d.ts +46 -0
- package/dist/conversations/selection.js +75 -0
- package/dist/conversations/titles.d.ts +93 -0
- package/dist/conversations/titles.js +423 -0
- package/dist/ctx/bus.d.ts +16 -0
- package/dist/ctx/bus.js +101 -0
- package/dist/ctx/create-ctx.d.ts +109 -0
- package/dist/ctx/create-ctx.js +592 -0
- package/dist/ctx/kv.d.ts +4 -0
- package/dist/ctx/kv.js +31 -0
- package/dist/ctx/lock.d.ts +4 -0
- package/dist/ctx/lock.js +39 -0
- package/dist/ctx/namespace.d.ts +6 -0
- package/dist/ctx/namespace.js +12 -0
- package/dist/ctx/queue.d.ts +25 -0
- package/dist/ctx/queue.js +151 -0
- package/dist/ctx/secrets.d.ts +45 -0
- package/dist/ctx/secrets.js +175 -0
- package/dist/db/kernel-schema.d.ts +1122 -0
- package/dist/db/kernel-schema.js +5 -0
- package/dist/db/migrator.d.ts +28 -0
- package/dist/db/migrator.js +140 -0
- package/dist/db/pool.d.ts +21 -0
- package/dist/db/pool.js +28 -0
- package/dist/db/sql-statements.d.ts +34 -0
- package/dist/db/sql-statements.js +168 -0
- package/dist/errors.d.ts +211 -0
- package/dist/errors.js +213 -0
- package/dist/evals/budget.d.ts +61 -0
- package/dist/evals/budget.js +181 -0
- package/dist/evals/diff.d.ts +55 -0
- package/dist/evals/diff.js +133 -0
- package/dist/evals/judge.d.ts +53 -0
- package/dist/evals/judge.js +149 -0
- package/dist/evals/plan.d.ts +47 -0
- package/dist/evals/plan.js +77 -0
- package/dist/evals/reconstruct.d.ts +137 -0
- package/dist/evals/reconstruct.js +322 -0
- package/dist/evals/recorded-tools.d.ts +54 -0
- package/dist/evals/recorded-tools.js +167 -0
- package/dist/evals/run-replay.d.ts +86 -0
- package/dist/evals/run-replay.js +502 -0
- package/dist/evals/runs.controller.d.ts +100 -0
- package/dist/evals/runs.controller.js +199 -0
- package/dist/evals/runs.service.d.ts +275 -0
- package/dist/evals/runs.service.js +836 -0
- package/dist/evals/sets.controller.d.ts +61 -0
- package/dist/evals/sets.controller.js +183 -0
- package/dist/evals/sets.service.d.ts +128 -0
- package/dist/evals/sets.service.js +558 -0
- package/dist/evals/snapshot.d.ts +76 -0
- package/dist/evals/snapshot.js +207 -0
- package/dist/evals/step-replay.d.ts +113 -0
- package/dist/evals/step-replay.js +181 -0
- package/dist/evals/trajectory.controller.d.ts +41 -0
- package/dist/evals/trajectory.controller.js +88 -0
- package/dist/evals/trajectory.d.ts +144 -0
- package/dist/evals/trajectory.js +338 -0
- package/dist/evals/trajectory.service.d.ts +108 -0
- package/dist/evals/trajectory.service.js +323 -0
- package/dist/evals/worker.d.ts +101 -0
- package/dist/evals/worker.js +790 -0
- package/dist/extensions/admin-ops.d.ts +105 -0
- package/dist/extensions/admin-ops.js +353 -0
- package/dist/extensions/admin-view.d.ts +79 -0
- package/dist/extensions/admin-view.js +327 -0
- package/dist/extensions/approvals.d.ts +119 -0
- package/dist/extensions/approvals.js +205 -0
- package/dist/extensions/blobs.d.ts +45 -0
- package/dist/extensions/blobs.js +160 -0
- package/dist/extensions/bootstrap.d.ts +176 -0
- package/dist/extensions/bootstrap.js +535 -0
- package/dist/extensions/cli.d.ts +61 -0
- package/dist/extensions/cli.js +165 -0
- package/dist/extensions/config-json-schema.d.ts +9 -0
- package/dist/extensions/config-json-schema.js +73 -0
- package/dist/extensions/deployment-config.d.ts +138 -0
- package/dist/extensions/deployment-config.js +394 -0
- package/dist/extensions/enabled.d.ts +31 -0
- package/dist/extensions/enabled.js +55 -0
- package/dist/extensions/hooks.d.ts +161 -0
- package/dist/extensions/hooks.js +425 -0
- package/dist/extensions/host.d.ts +577 -0
- package/dist/extensions/host.js +2071 -0
- package/dist/extensions/inflight.d.ts +69 -0
- package/dist/extensions/inflight.js +277 -0
- package/dist/extensions/installs.d.ts +166 -0
- package/dist/extensions/installs.js +253 -0
- package/dist/extensions/instance.d.ts +167 -0
- package/dist/extensions/instance.js +329 -0
- package/dist/extensions/ledger.d.ts +30 -0
- package/dist/extensions/ledger.js +50 -0
- package/dist/extensions/lifecycle.d.ts +80 -0
- package/dist/extensions/lifecycle.js +152 -0
- package/dist/extensions/migrate-lock.d.ts +51 -0
- package/dist/extensions/migrate-lock.js +100 -0
- package/dist/extensions/org-config.controller.d.ts +24 -0
- package/dist/extensions/org-config.controller.js +59 -0
- package/dist/extensions/org-config.d.ts +169 -0
- package/dist/extensions/org-config.js +520 -0
- package/dist/extensions/package.d.ts +115 -0
- package/dist/extensions/package.js +246 -0
- package/dist/extensions/permission-set.d.ts +117 -0
- package/dist/extensions/permission-set.js +184 -0
- package/dist/extensions/permission-view.d.ts +194 -0
- package/dist/extensions/permission-view.js +284 -0
- package/dist/extensions/registry.d.ts +24 -0
- package/dist/extensions/registry.js +56 -0
- package/dist/extensions/resolve.d.ts +12 -0
- package/dist/extensions/resolve.js +71 -0
- package/dist/extensions/sources.d.ts +69 -0
- package/dist/extensions/sources.js +120 -0
- package/dist/extensions/sync.d.ts +40 -0
- package/dist/extensions/sync.js +242 -0
- package/dist/files/previewers.controller.d.ts +46 -0
- package/dist/files/previewers.controller.js +105 -0
- package/dist/files/previewers.d.ts +100 -0
- package/dist/files/previewers.js +250 -0
- package/dist/http/api.module.d.ts +114 -0
- package/dist/http/api.module.js +448 -0
- package/dist/http/app.d.ts +77 -0
- package/dist/http/app.js +220 -0
- package/dist/http/error.filter.d.ts +21 -0
- package/dist/http/error.filter.js +85 -0
- package/dist/http/gateway.module.d.ts +15 -0
- package/dist/http/gateway.module.js +13 -0
- package/dist/http/health.controller.d.ts +26 -0
- package/dist/http/health.controller.js +79 -0
- package/dist/http/nest-logger.d.ts +20 -0
- package/dist/http/nest-logger.js +28 -0
- package/dist/http/plugin-dispatch.d.ts +68 -0
- package/dist/http/plugin-dispatch.js +200 -0
- package/dist/http/tokens.d.ts +131 -0
- package/dist/http/tokens.js +131 -0
- package/dist/http/zod.pipe.d.ts +8 -0
- package/dist/http/zod.pipe.js +14 -0
- package/dist/identity/accounts.d.ts +93 -0
- package/dist/identity/accounts.js +367 -0
- package/dist/identity/api-tokens.d.ts +73 -0
- package/dist/identity/api-tokens.js +197 -0
- package/dist/identity/audit.d.ts +23 -0
- package/dist/identity/audit.js +41 -0
- package/dist/identity/auth.controller.d.ts +40 -0
- package/dist/identity/auth.controller.js +130 -0
- package/dist/identity/auth.guard.d.ts +41 -0
- package/dist/identity/auth.guard.js +162 -0
- package/dist/identity/binding.d.ts +47 -0
- package/dist/identity/binding.js +84 -0
- package/dist/identity/cookies.d.ts +16 -0
- package/dist/identity/cookies.js +32 -0
- package/dist/identity/credential-check.d.ts +17 -0
- package/dist/identity/credential-check.js +24 -0
- package/dist/identity/enterprise-admin.d.ts +14 -0
- package/dist/identity/enterprise-admin.js +27 -0
- package/dist/identity/external.d.ts +106 -0
- package/dist/identity/external.js +337 -0
- package/dist/identity/hash.d.ts +2 -0
- package/dist/identity/hash.js +3 -0
- package/dist/identity/login.d.ts +6 -0
- package/dist/identity/login.js +20 -0
- package/dist/identity/me.controller.d.ts +61 -0
- package/dist/identity/me.controller.js +159 -0
- package/dist/identity/passwords.d.ts +6 -0
- package/dist/identity/passwords.js +37 -0
- package/dist/identity/principal.d.ts +56 -0
- package/dist/identity/principal.js +38 -0
- package/dist/identity/rate-limit.d.ts +55 -0
- package/dist/identity/rate-limit.js +121 -0
- package/dist/identity/sessions.d.ts +84 -0
- package/dist/identity/sessions.js +306 -0
- package/dist/identity/settings.d.ts +121 -0
- package/dist/identity/settings.js +248 -0
- package/dist/identity/sso.controller.d.ts +59 -0
- package/dist/identity/sso.controller.js +192 -0
- package/dist/identity/sso.d.ts +83 -0
- package/dist/identity/sso.js +202 -0
- package/dist/inbox/inbox.service.d.ts +43 -0
- package/dist/inbox/inbox.service.js +57 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.js +67 -0
- package/dist/kernel.d.ts +259 -0
- package/dist/kernel.js +1326 -0
- package/dist/log-config.d.ts +9 -0
- package/dist/log-config.js +27 -0
- package/dist/log-context.d.ts +32 -0
- package/dist/log-context.js +40 -0
- package/dist/log-loki.d.ts +34 -0
- package/dist/log-loki.js +145 -0
- package/dist/log.d.ts +79 -0
- package/dist/log.js +303 -0
- package/dist/models/prices.d.ts +53 -0
- package/dist/models/prices.js +121 -0
- package/dist/models/purposes.controller.d.ts +19 -0
- package/dist/models/purposes.controller.js +56 -0
- package/dist/models/purposes.d.ts +140 -0
- package/dist/models/purposes.js +267 -0
- package/dist/net/proxy.d.ts +44 -0
- package/dist/net/proxy.js +162 -0
- package/dist/net/public-address.d.ts +60 -0
- package/dist/net/public-address.js +272 -0
- package/dist/net/safe-fetch.d.ts +38 -0
- package/dist/net/safe-fetch.js +140 -0
- package/dist/orgs/directory-sync.controller.d.ts +14 -0
- package/dist/orgs/directory-sync.controller.js +40 -0
- package/dist/orgs/directory-sync.d.ts +166 -0
- package/dist/orgs/directory-sync.js +558 -0
- package/dist/orgs/invitations.controller.d.ts +58 -0
- package/dist/orgs/invitations.controller.js +137 -0
- package/dist/orgs/invitations.service.d.ts +80 -0
- package/dist/orgs/invitations.service.js +217 -0
- package/dist/orgs/members.service.d.ts +63 -0
- package/dist/orgs/members.service.js +234 -0
- package/dist/orgs/offboarding.d.ts +141 -0
- package/dist/orgs/offboarding.js +398 -0
- package/dist/orgs/org-lock.d.ts +32 -0
- package/dist/orgs/org-lock.js +46 -0
- package/dist/orgs/org.guard.d.ts +35 -0
- package/dist/orgs/org.guard.js +95 -0
- package/dist/orgs/orgs.controller.d.ts +78 -0
- package/dist/orgs/orgs.controller.js +192 -0
- package/dist/orgs/orgs.service.d.ts +61 -0
- package/dist/orgs/orgs.service.js +209 -0
- package/dist/orgs/roles.d.ts +13 -0
- package/dist/orgs/roles.js +58 -0
- package/dist/orgs/settings.controller.d.ts +20 -0
- package/dist/orgs/settings.controller.js +53 -0
- package/dist/orgs/settings.service.d.ts +120 -0
- package/dist/orgs/settings.service.js +178 -0
- package/dist/packages/npm.d.ts +50 -0
- package/dist/packages/npm.js +218 -0
- package/dist/packages/provenance.d.ts +47 -0
- package/dist/packages/provenance.js +147 -0
- package/dist/packages/tgz.d.ts +76 -0
- package/dist/packages/tgz.js +225 -0
- package/dist/runtime/abort.d.ts +32 -0
- package/dist/runtime/abort.js +71 -0
- package/dist/runtime/checkpointer.d.ts +32 -0
- package/dist/runtime/checkpointer.js +243 -0
- package/dist/runtime/context/build.d.ts +254 -0
- package/dist/runtime/context/build.js +693 -0
- package/dist/runtime/context/claude-tools.d.ts +11 -0
- package/dist/runtime/context/claude-tools.js +24 -0
- package/dist/runtime/context/compaction.d.ts +26 -0
- package/dist/runtime/context/compaction.js +195 -0
- package/dist/runtime/context/pairing.d.ts +11 -0
- package/dist/runtime/context/pairing.js +82 -0
- package/dist/runtime/context/reminders.d.ts +5 -0
- package/dist/runtime/context/reminders.js +11 -0
- package/dist/runtime/context/skills.d.ts +105 -0
- package/dist/runtime/context/skills.js +283 -0
- package/dist/runtime/context/tokens.d.ts +19 -0
- package/dist/runtime/context/tokens.js +104 -0
- package/dist/runtime/conversation-lock.d.ts +40 -0
- package/dist/runtime/conversation-lock.js +97 -0
- package/dist/runtime/hook-calls.d.ts +84 -0
- package/dist/runtime/hook-calls.js +136 -0
- package/dist/runtime/langgraph-loop.d.ts +52 -0
- package/dist/runtime/langgraph-loop.js +247 -0
- package/dist/runtime/loop.d.ts +93 -0
- package/dist/runtime/loop.js +7 -0
- package/dist/runtime/maintenance.d.ts +80 -0
- package/dist/runtime/maintenance.js +148 -0
- package/dist/runtime/media-cache.d.ts +21 -0
- package/dist/runtime/media-cache.js +51 -0
- package/dist/runtime/model-call.d.ts +176 -0
- package/dist/runtime/model-call.js +1049 -0
- package/dist/runtime/providers.d.ts +86 -0
- package/dist/runtime/providers.js +224 -0
- package/dist/runtime/quota.d.ts +29 -0
- package/dist/runtime/quota.js +70 -0
- package/dist/runtime/run-finish.d.ts +45 -0
- package/dist/runtime/run-finish.js +69 -0
- package/dist/runtime/run-queue.d.ts +121 -0
- package/dist/runtime/run-queue.js +493 -0
- package/dist/runtime/run-worker.d.ts +138 -0
- package/dist/runtime/run-worker.js +806 -0
- package/dist/runtime/stream.controller.d.ts +34 -0
- package/dist/runtime/stream.controller.js +122 -0
- package/dist/runtime/stream.d.ts +63 -0
- package/dist/runtime/stream.js +262 -0
- package/dist/runtime/subagents/child.d.ts +80 -0
- package/dist/runtime/subagents/child.js +225 -0
- package/dist/runtime/subagents/definition.d.ts +103 -0
- package/dist/runtime/subagents/definition.js +392 -0
- package/dist/runtime/subagents/dispatch.d.ts +69 -0
- package/dist/runtime/subagents/dispatch.js +502 -0
- package/dist/runtime/subagents/limits.d.ts +23 -0
- package/dist/runtime/subagents/limits.js +34 -0
- package/dist/runtime/subagents/org-agents.d.ts +50 -0
- package/dist/runtime/subagents/org-agents.js +70 -0
- package/dist/runtime/subagents/preamble.d.ts +7 -0
- package/dist/runtime/subagents/preamble.js +11 -0
- package/dist/runtime/subagents/progress.d.ts +26 -0
- package/dist/runtime/subagents/progress.js +36 -0
- package/dist/runtime/subagents/roster.d.ts +55 -0
- package/dist/runtime/subagents/roster.js +111 -0
- package/dist/runtime/subagents/skill-fork.d.ts +123 -0
- package/dist/runtime/subagents/skill-fork.js +259 -0
- package/dist/runtime/usage-report.d.ts +163 -0
- package/dist/runtime/usage-report.js +551 -0
- package/dist/runtime/waits.d.ts +233 -0
- package/dist/runtime/waits.js +883 -0
- package/dist/sandbox/leases.d.ts +169 -0
- package/dist/sandbox/leases.js +515 -0
- package/dist/sandbox/lifecycle.d.ts +21 -0
- package/dist/sandbox/lifecycle.js +68 -0
- package/dist/sandbox/sandbox.service.d.ts +249 -0
- package/dist/sandbox/sandbox.service.js +908 -0
- package/dist/skills/catalog.d.ts +149 -0
- package/dist/skills/catalog.js +405 -0
- package/dist/skills/changes.controller.d.ts +56 -0
- package/dist/skills/changes.controller.js +136 -0
- package/dist/skills/changes.service.d.ts +175 -0
- package/dist/skills/changes.service.js +805 -0
- package/dist/skills/invocable.controller.d.ts +23 -0
- package/dist/skills/invocable.controller.js +50 -0
- package/dist/skills/invocation-keys.d.ts +23 -0
- package/dist/skills/invocation-keys.js +44 -0
- package/dist/skills/invoke.d.ts +135 -0
- package/dist/skills/invoke.js +286 -0
- package/dist/skills/package.d.ts +87 -0
- package/dist/skills/package.js +227 -0
- package/dist/skills/skills.controller.d.ts +40 -0
- package/dist/skills/skills.controller.js +110 -0
- package/dist/skills/skills.service.d.ts +192 -0
- package/dist/skills/skills.service.js +567 -0
- package/dist/storage/prefix.d.ts +36 -0
- package/dist/storage/prefix.js +104 -0
- package/dist/storage/purge.d.ts +27 -0
- package/dist/storage/purge.js +75 -0
- package/dist/storage/storage.service.d.ts +44 -0
- package/dist/storage/storage.service.js +145 -0
- package/dist/text.d.ts +13 -0
- package/dist/text.js +13 -0
- package/dist/tools/approvals.controller.d.ts +53 -0
- package/dist/tools/approvals.controller.js +128 -0
- package/dist/tools/approvals.service.d.ts +172 -0
- package/dist/tools/approvals.service.js +568 -0
- package/dist/tools/breaker.d.ts +28 -0
- package/dist/tools/breaker.js +72 -0
- package/dist/tools/builtins/agent.d.ts +81 -0
- package/dist/tools/builtins/agent.js +223 -0
- package/dist/tools/builtins/ask-user.d.ts +28 -0
- package/dist/tools/builtins/ask-user.js +139 -0
- package/dist/tools/builtins/read-tool-output.d.ts +18 -0
- package/dist/tools/builtins/read-tool-output.js +108 -0
- package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
- package/dist/tools/builtins/sandbox/bash.js +137 -0
- package/dist/tools/builtins/sandbox/common.d.ts +116 -0
- package/dist/tools/builtins/sandbox/common.js +306 -0
- package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
- package/dist/tools/builtins/sandbox/deliver.js +180 -0
- package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
- package/dist/tools/builtins/sandbox/edit.js +98 -0
- package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
- package/dist/tools/builtins/sandbox/glob-match.js +240 -0
- package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
- package/dist/tools/builtins/sandbox/glob.js +104 -0
- package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
- package/dist/tools/builtins/sandbox/grep.js +133 -0
- package/dist/tools/builtins/sandbox/index.d.ts +12 -0
- package/dist/tools/builtins/sandbox/index.js +27 -0
- package/dist/tools/builtins/sandbox/names.d.ts +7 -0
- package/dist/tools/builtins/sandbox/names.js +20 -0
- package/dist/tools/builtins/sandbox/read.d.ts +8 -0
- package/dist/tools/builtins/sandbox/read.js +121 -0
- package/dist/tools/builtins/sandbox/write.d.ts +4 -0
- package/dist/tools/builtins/sandbox/write.js +88 -0
- package/dist/tools/builtins/skill-load.d.ts +53 -0
- package/dist/tools/builtins/skill-load.js +446 -0
- package/dist/tools/builtins/skill-write.d.ts +59 -0
- package/dist/tools/builtins/skill-write.js +244 -0
- package/dist/tools/builtins/tool-search.d.ts +31 -0
- package/dist/tools/builtins/tool-search.js +171 -0
- package/dist/tools/connector-content.controller.d.ts +34 -0
- package/dist/tools/connector-content.controller.js +78 -0
- package/dist/tools/connector-content.d.ts +104 -0
- package/dist/tools/connector-content.js +267 -0
- package/dist/tools/connectors.controller.d.ts +210 -0
- package/dist/tools/connectors.controller.js +234 -0
- package/dist/tools/connectors.service.d.ts +303 -0
- package/dist/tools/connectors.service.js +1102 -0
- package/dist/tools/credentials.d.ts +139 -0
- package/dist/tools/credentials.js +351 -0
- package/dist/tools/drift.d.ts +141 -0
- package/dist/tools/drift.js +539 -0
- package/dist/tools/elicitation.d.ts +81 -0
- package/dist/tools/elicitation.js +266 -0
- package/dist/tools/endpoint.d.ts +18 -0
- package/dist/tools/endpoint.js +115 -0
- package/dist/tools/info.d.ts +67 -0
- package/dist/tools/info.js +113 -0
- package/dist/tools/naming.d.ts +27 -0
- package/dist/tools/naming.js +47 -0
- package/dist/tools/oauth/discovery.d.ts +65 -0
- package/dist/tools/oauth/discovery.js +307 -0
- package/dist/tools/oauth/flow.d.ts +63 -0
- package/dist/tools/oauth/flow.js +237 -0
- package/dist/tools/oauth/oauth.controller.d.ts +31 -0
- package/dist/tools/oauth/oauth.controller.js +95 -0
- package/dist/tools/oauth/tokens.d.ts +111 -0
- package/dist/tools/oauth/tokens.js +258 -0
- package/dist/tools/outputs.d.ts +61 -0
- package/dist/tools/outputs.js +156 -0
- package/dist/tools/pipeline.d.ts +322 -0
- package/dist/tools/pipeline.js +1236 -0
- package/dist/tools/policy.d.ts +60 -0
- package/dist/tools/policy.js +236 -0
- package/dist/tools/questions.controller.d.ts +24 -0
- package/dist/tools/questions.controller.js +58 -0
- package/dist/tools/questions.service.d.ts +103 -0
- package/dist/tools/questions.service.js +295 -0
- package/dist/tools/redact.d.ts +20 -0
- package/dist/tools/redact.js +60 -0
- package/dist/tools/registry.d.ts +246 -0
- package/dist/tools/registry.js +481 -0
- package/dist/tools/resources.d.ts +16 -0
- package/dist/tools/resources.js +76 -0
- package/dist/tools/specs.d.ts +14 -0
- package/dist/tools/specs.js +31 -0
- package/dist/tools/validate.d.ts +20 -0
- package/dist/tools/validate.js +183 -0
- package/dist/tools/view.d.ts +43 -0
- package/dist/tools/view.js +225 -0
- package/dist/ui/embed-token.d.ts +31 -0
- package/dist/ui/embed-token.js +132 -0
- package/dist/ui/registry.d.ts +58 -0
- package/dist/ui/registry.js +90 -0
- package/dist/ui/ui-stream.d.ts +37 -0
- package/dist/ui/ui-stream.js +162 -0
- package/dist/ui/views.controller.d.ts +81 -0
- package/dist/ui/views.controller.js +261 -0
- package/dist/ui/views.d.ts +155 -0
- package/dist/ui/views.js +306 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.js +6 -0
- package/package.json +69 -3
- package/src/migrations/0001_init.sql +8 -0
- package/src/migrations/0002_secrets.sql +8 -0
- package/src/migrations/0003_identity.sql +117 -0
- package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
- package/src/migrations/0005_agents.sql +27 -0
- package/src/migrations/0006_conversations.sql +37 -0
- package/src/migrations/0007_checkpoints.sql +26 -0
- package/src/migrations/0008_runs_trigger_seq.sql +3 -0
- package/src/migrations/0009_runs_active_unique.sql +4 -0
- package/src/migrations/0010_tools.sql +125 -0
- package/src/migrations/0011_approvals_spec.sql +10 -0
- package/src/migrations/0012_run_waits.sql +24 -0
- package/src/migrations/0013_app_tools_source.sql +4 -0
- package/src/migrations/0014_tool_specs.sql +8 -0
- package/src/migrations/0015_tool_drift.sql +20 -0
- package/src/migrations/0016_plugin_permissions.sql +11 -0
- package/src/migrations/0017_identity_sources.sql +6 -0
- package/src/migrations/0018_channels.sql +74 -0
- package/src/migrations/0019_identity_trust.sql +17 -0
- package/src/migrations/0020_channel_card_lookup.sql +10 -0
- package/src/migrations/0021_org_storage_purge.sql +9 -0
- package/src/migrations/0022_attachments.sql +29 -0
- package/src/migrations/0023_sandboxes.sql +37 -0
- package/src/migrations/0024_skills.sql +46 -0
- package/src/migrations/0025_skills_catalog_idx.sql +6 -0
- package/src/migrations/0026_skill_changes.sql +34 -0
- package/src/migrations/0027_model_prices.sql +18 -0
- package/src/migrations/0028_evals.sql +105 -0
- package/src/migrations/0029_model_purposes.sql +18 -0
- package/src/migrations/0030_plugin_installs.sql +73 -0
- package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
- package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
- package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
- package/src/migrations/0034_directory.sql +49 -0
- package/src/migrations/0035_catalogs.sql +40 -0
- package/src/migrations/0036_app_import_staging.sql +17 -0
- package/src/migrations/0037_directory_installs.sql +92 -0
- package/src/migrations/0038_channel_inbound_mode.sql +6 -0
- package/src/migrations/0039_channel_card_pending.sql +8 -0
- package/src/migrations/0040_usage_report_sweep.sql +10 -0
- package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
- package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
- package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
- package/src/migrations/0044_catalog_one_kind.sql +90 -0
- package/src/migrations/0045_plugin_dependencies.sql +9 -0
- package/src/migrations/0046_git_sources.sql +25 -0
- package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
- package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
- package/src/migrations/0049_plugin_upgrades.sql +37 -0
- package/src/migrations/0050_bootstrap.sql +53 -0
- package/src/migrations/0051_claude_compat.sql +26 -0
- package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
- package/src/migrations/0053_subagents.sql +73 -0
- package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
- package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
- package/src/migrations/0056_approval_reason.sql +3 -0
- package/src/migrations/0057_conversation_titles.sql +11 -0
- package/src/migrations/0058_conversation_selection.sql +4 -0
- package/src/migrations/0059_conversation_queue.sql +22 -0
- package/src/migrations/0060_file_previewers.sql +10 -0
- package/src/migrations/0061_queue_selection.sql +5 -0
- package/src/migrations/0062_queued_skill.sql +8 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS capybara.accounts (
|
|
2
|
+
id text PRIMARY KEY,
|
|
3
|
+
display_name text NOT NULL,
|
|
4
|
+
email text,
|
|
5
|
+
email_verified boolean NOT NULL DEFAULT false,
|
|
6
|
+
status text NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'disabled')),
|
|
7
|
+
is_enterprise_admin boolean NOT NULL DEFAULT false,
|
|
8
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
9
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
10
|
+
);
|
|
11
|
+
CREATE TABLE IF NOT EXISTS capybara.identities (
|
|
12
|
+
source text NOT NULL,
|
|
13
|
+
external_id text NOT NULL,
|
|
14
|
+
account_id text NOT NULL REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
15
|
+
email text,
|
|
16
|
+
email_verified boolean NOT NULL DEFAULT false,
|
|
17
|
+
profile jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
18
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
19
|
+
PRIMARY KEY (source, external_id)
|
|
20
|
+
);
|
|
21
|
+
CREATE INDEX IF NOT EXISTS identities_account_idx ON capybara.identities (account_id);
|
|
22
|
+
CREATE TABLE IF NOT EXISTS capybara.local_passwords (
|
|
23
|
+
account_id text PRIMARY KEY REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
24
|
+
password_hash text NOT NULL,
|
|
25
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
26
|
+
);
|
|
27
|
+
CREATE TABLE IF NOT EXISTS capybara.orgs (
|
|
28
|
+
id text PRIMARY KEY,
|
|
29
|
+
slug text NOT NULL,
|
|
30
|
+
name text NOT NULL,
|
|
31
|
+
created_by text REFERENCES capybara.accounts(id),
|
|
32
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
33
|
+
deleted_at timestamptz
|
|
34
|
+
);
|
|
35
|
+
CREATE UNIQUE INDEX IF NOT EXISTS orgs_slug_live_uq ON capybara.orgs (slug) WHERE deleted_at IS NULL;
|
|
36
|
+
CREATE TABLE IF NOT EXISTS capybara.memberships (
|
|
37
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
38
|
+
account_id text NOT NULL REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
39
|
+
role text NOT NULL CHECK (role IN ('owner', 'admin', 'member', 'guest')),
|
|
40
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
41
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
42
|
+
PRIMARY KEY (org_id, account_id)
|
|
43
|
+
);
|
|
44
|
+
CREATE INDEX IF NOT EXISTS memberships_account_idx ON capybara.memberships (account_id);
|
|
45
|
+
CREATE TABLE IF NOT EXISTS capybara.invitations (
|
|
46
|
+
id text PRIMARY KEY,
|
|
47
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
48
|
+
role text NOT NULL CHECK (role IN ('admin', 'member', 'guest')),
|
|
49
|
+
token_hash text NOT NULL UNIQUE,
|
|
50
|
+
created_by text NOT NULL REFERENCES capybara.accounts(id),
|
|
51
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
52
|
+
expires_at timestamptz NOT NULL,
|
|
53
|
+
accepted_at timestamptz,
|
|
54
|
+
accepted_by text REFERENCES capybara.accounts(id),
|
|
55
|
+
revoked_at timestamptz
|
|
56
|
+
);
|
|
57
|
+
CREATE INDEX IF NOT EXISTS invitations_org_idx ON capybara.invitations (org_id);
|
|
58
|
+
CREATE TABLE IF NOT EXISTS capybara.sessions (
|
|
59
|
+
id text PRIMARY KEY,
|
|
60
|
+
account_id text NOT NULL REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
61
|
+
current_org_id text REFERENCES capybara.orgs(id) ON DELETE SET NULL,
|
|
62
|
+
refresh_hash text NOT NULL UNIQUE,
|
|
63
|
+
prev_refresh_hash text,
|
|
64
|
+
rotated_at timestamptz,
|
|
65
|
+
user_agent text,
|
|
66
|
+
ip text,
|
|
67
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
68
|
+
last_used_at timestamptz NOT NULL DEFAULT now(),
|
|
69
|
+
expires_at timestamptz NOT NULL,
|
|
70
|
+
revoked_at timestamptz
|
|
71
|
+
);
|
|
72
|
+
CREATE INDEX IF NOT EXISTS sessions_account_idx ON capybara.sessions (account_id);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS sessions_prev_refresh_idx ON capybara.sessions (prev_refresh_hash);
|
|
74
|
+
CREATE TABLE IF NOT EXISTS capybara.api_tokens (
|
|
75
|
+
id text PRIMARY KEY,
|
|
76
|
+
kind text NOT NULL CHECK (kind IN ('personal', 'service')),
|
|
77
|
+
account_id text REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
78
|
+
org_id text REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
79
|
+
role text CHECK (role IN ('admin', 'member', 'guest')),
|
|
80
|
+
name text NOT NULL,
|
|
81
|
+
token_hash text NOT NULL UNIQUE,
|
|
82
|
+
created_by text NOT NULL REFERENCES capybara.accounts(id),
|
|
83
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
84
|
+
last_used_at timestamptz,
|
|
85
|
+
expires_at timestamptz,
|
|
86
|
+
revoked_at timestamptz,
|
|
87
|
+
CHECK (
|
|
88
|
+
(kind = 'personal' AND account_id IS NOT NULL AND org_id IS NULL AND role IS NULL)
|
|
89
|
+
OR (kind = 'service' AND account_id IS NULL AND org_id IS NOT NULL AND role IS NOT NULL)
|
|
90
|
+
)
|
|
91
|
+
);
|
|
92
|
+
CREATE TABLE IF NOT EXISTS capybara.deployment_settings (
|
|
93
|
+
key text PRIMARY KEY,
|
|
94
|
+
value jsonb NOT NULL,
|
|
95
|
+
updated_by text REFERENCES capybara.accounts(id),
|
|
96
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
97
|
+
);
|
|
98
|
+
CREATE TABLE IF NOT EXISTS capybara.plugin_org_configs (
|
|
99
|
+
plugin text NOT NULL,
|
|
100
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
101
|
+
enabled boolean NOT NULL DEFAULT false,
|
|
102
|
+
config jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
103
|
+
updated_by text REFERENCES capybara.accounts(id),
|
|
104
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
105
|
+
PRIMARY KEY (plugin, org_id)
|
|
106
|
+
);
|
|
107
|
+
CREATE TABLE IF NOT EXISTS capybara.audit_events (
|
|
108
|
+
id bigserial PRIMARY KEY,
|
|
109
|
+
at timestamptz NOT NULL DEFAULT now(),
|
|
110
|
+
actor_account_id text,
|
|
111
|
+
actor_token_id text,
|
|
112
|
+
org_id text,
|
|
113
|
+
action text NOT NULL,
|
|
114
|
+
target text,
|
|
115
|
+
detail jsonb NOT NULL DEFAULT '{}'::jsonb
|
|
116
|
+
);
|
|
117
|
+
CREATE INDEX IF NOT EXISTS audit_events_org_at_idx ON capybara.audit_events (org_id, at DESC);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-- Agent 定义与版本:agents 为当前元数据,agent_versions 只追加(定义每变化一次一个版本),agent_members 为 visibility='members' 的名单。
|
|
2
|
+
CREATE TABLE IF NOT EXISTS capybara.agents (
|
|
3
|
+
id text PRIMARY KEY,
|
|
4
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
5
|
+
owner_account_id text NOT NULL REFERENCES capybara.accounts(id),
|
|
6
|
+
visibility text NOT NULL CHECK (visibility IN ('private', 'org', 'members')),
|
|
7
|
+
org_role text NOT NULL DEFAULT 'member' CHECK (org_role IN ('admin', 'member', 'guest')),
|
|
8
|
+
current_version integer NOT NULL,
|
|
9
|
+
needs_reassignment boolean NOT NULL DEFAULT false,
|
|
10
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
11
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
12
|
+
deleted_at timestamptz
|
|
13
|
+
);
|
|
14
|
+
CREATE INDEX IF NOT EXISTS agents_org_idx ON capybara.agents (org_id) WHERE deleted_at IS NULL;
|
|
15
|
+
CREATE TABLE IF NOT EXISTS capybara.agent_versions (
|
|
16
|
+
agent_id text NOT NULL REFERENCES capybara.agents(id) ON DELETE CASCADE,
|
|
17
|
+
version integer NOT NULL,
|
|
18
|
+
definition jsonb NOT NULL,
|
|
19
|
+
created_by text NOT NULL REFERENCES capybara.accounts(id),
|
|
20
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
21
|
+
PRIMARY KEY (agent_id, version)
|
|
22
|
+
);
|
|
23
|
+
CREATE TABLE IF NOT EXISTS capybara.agent_members (
|
|
24
|
+
agent_id text NOT NULL REFERENCES capybara.agents(id) ON DELETE CASCADE,
|
|
25
|
+
account_id text NOT NULL REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
26
|
+
PRIMARY KEY (agent_id, account_id)
|
|
27
|
+
);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- 会话与事件日志:conversation_events 只追加,是 agent 运行的唯一事实来源;seq 由 conversations.last_seq 在行锁内连续分配。
|
|
2
|
+
-- runs 记录每次运行的状态(运行流水线在后续任务接入)。
|
|
3
|
+
CREATE TABLE IF NOT EXISTS capybara.conversations (
|
|
4
|
+
id text PRIMARY KEY,
|
|
5
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
6
|
+
agent_id text NOT NULL REFERENCES capybara.agents(id),
|
|
7
|
+
account_id text NOT NULL REFERENCES capybara.accounts(id),
|
|
8
|
+
title text,
|
|
9
|
+
last_seq bigint NOT NULL DEFAULT 0,
|
|
10
|
+
consumed_seq bigint NOT NULL DEFAULT 0,
|
|
11
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
12
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
13
|
+
);
|
|
14
|
+
CREATE INDEX IF NOT EXISTS conversations_account_idx ON capybara.conversations (org_id, account_id, updated_at DESC);
|
|
15
|
+
CREATE TABLE IF NOT EXISTS capybara.conversation_events (
|
|
16
|
+
conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
17
|
+
seq bigint NOT NULL,
|
|
18
|
+
type text NOT NULL,
|
|
19
|
+
run_id text,
|
|
20
|
+
idem_key text,
|
|
21
|
+
payload jsonb NOT NULL,
|
|
22
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
23
|
+
PRIMARY KEY (conversation_id, seq)
|
|
24
|
+
);
|
|
25
|
+
CREATE UNIQUE INDEX IF NOT EXISTS conversation_events_idem_uq
|
|
26
|
+
ON capybara.conversation_events (conversation_id, idem_key) WHERE idem_key IS NOT NULL;
|
|
27
|
+
CREATE TABLE IF NOT EXISTS capybara.runs (
|
|
28
|
+
id text PRIMARY KEY,
|
|
29
|
+
conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
30
|
+
status text NOT NULL CHECK (status IN ('queued', 'running', 'completed', 'failed', 'aborted')),
|
|
31
|
+
agent_version integer NOT NULL,
|
|
32
|
+
trigger_account_id text NOT NULL REFERENCES capybara.accounts(id),
|
|
33
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
34
|
+
started_at timestamptz,
|
|
35
|
+
finished_at timestamptz
|
|
36
|
+
);
|
|
37
|
+
CREATE INDEX IF NOT EXISTS runs_conversation_idx ON capybara.runs (conversation_id, created_at DESC);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
-- LangGraph checkpoint 存储(KyselyCheckpointSaver):thread_id 约定为 runId;checkpoint / metadata / value
|
|
2
|
+
-- 为 serde.dumpsTyped 的字节,*_type 为其类型标记。运行结束后 pruneToLatest 只保留根命名空间最新一份。
|
|
3
|
+
CREATE TABLE IF NOT EXISTS capybara.lg_checkpoints (
|
|
4
|
+
thread_id text NOT NULL,
|
|
5
|
+
checkpoint_ns text NOT NULL DEFAULT '',
|
|
6
|
+
checkpoint_id text NOT NULL,
|
|
7
|
+
parent_checkpoint_id text,
|
|
8
|
+
checkpoint_type text NOT NULL,
|
|
9
|
+
checkpoint bytea NOT NULL,
|
|
10
|
+
metadata_type text NOT NULL,
|
|
11
|
+
metadata bytea NOT NULL,
|
|
12
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
13
|
+
PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id)
|
|
14
|
+
);
|
|
15
|
+
CREATE TABLE IF NOT EXISTS capybara.lg_checkpoint_writes (
|
|
16
|
+
thread_id text NOT NULL,
|
|
17
|
+
checkpoint_ns text NOT NULL DEFAULT '',
|
|
18
|
+
checkpoint_id text NOT NULL,
|
|
19
|
+
task_id text NOT NULL,
|
|
20
|
+
idx integer NOT NULL,
|
|
21
|
+
channel text NOT NULL,
|
|
22
|
+
value_type text NOT NULL,
|
|
23
|
+
value bytea NOT NULL,
|
|
24
|
+
task_path text NOT NULL DEFAULT '',
|
|
25
|
+
PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id, task_id, idx)
|
|
26
|
+
);
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
-- 工具与连接器(M3):应用、应用工具、授权、审批、提问、工具输出存档;runs 增加 waiting 状态;orgs.settings。
|
|
2
|
+
|
|
3
|
+
-- 已安装的应用(一个连接器实例)。auth 只存 {type, ownership, ...非密钥字段},凭据在 capybara.secrets。
|
|
4
|
+
CREATE TABLE IF NOT EXISTS capybara.apps (
|
|
5
|
+
id text PRIMARY KEY,
|
|
6
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
7
|
+
slug text NOT NULL,
|
|
8
|
+
name text NOT NULL,
|
|
9
|
+
connector text NOT NULL,
|
|
10
|
+
endpoint jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
11
|
+
auth jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
12
|
+
status text NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'disabled')),
|
|
13
|
+
created_by text NOT NULL REFERENCES capybara.accounts(id),
|
|
14
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
15
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
16
|
+
deleted_at timestamptz
|
|
17
|
+
);
|
|
18
|
+
CREATE UNIQUE INDEX IF NOT EXISTS apps_org_slug_uniq
|
|
19
|
+
ON capybara.apps (org_id, slug) WHERE deleted_at IS NULL;
|
|
20
|
+
|
|
21
|
+
-- 应用暴露的工具;spec_hash 变化后回到 pending_review,由管理员重新审阅。
|
|
22
|
+
CREATE TABLE IF NOT EXISTS capybara.app_tools (
|
|
23
|
+
app_id text NOT NULL REFERENCES capybara.apps(id) ON DELETE CASCADE,
|
|
24
|
+
name text NOT NULL,
|
|
25
|
+
spec jsonb NOT NULL,
|
|
26
|
+
spec_hash text NOT NULL,
|
|
27
|
+
status text NOT NULL CHECK (status IN ('enabled', 'disabled', 'pending_review')),
|
|
28
|
+
default_policy text NOT NULL CHECK (default_policy IN ('allow', 'ask', 'deny')),
|
|
29
|
+
reviewed_at timestamptz,
|
|
30
|
+
PRIMARY KEY (app_id, name)
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
-- 「以后都允许」:按 (账号, agent, 工具) 记住,spec_hash 变化后失效。
|
|
34
|
+
-- app_id:应用工具的来源应用(插件 / 内置工具为空);授权只对同一个应用有效——删除后用同一 slug
|
|
35
|
+
-- 重新安装的应用 id 不同,不继承旧授权。应用是软删除,不用外键级联(删除应用时由代码清掉其授权)。
|
|
36
|
+
CREATE TABLE IF NOT EXISTS capybara.tool_grants (
|
|
37
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
38
|
+
account_id text NOT NULL REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
39
|
+
agent_id text NOT NULL REFERENCES capybara.agents(id) ON DELETE CASCADE,
|
|
40
|
+
tool_key text NOT NULL,
|
|
41
|
+
spec_hash text NOT NULL,
|
|
42
|
+
app_id text,
|
|
43
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
44
|
+
PRIMARY KEY (org_id, account_id, agent_id, tool_key)
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
-- 「本会话都允许」;app_id 同上。
|
|
48
|
+
CREATE TABLE IF NOT EXISTS capybara.conversation_tool_grants (
|
|
49
|
+
conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
50
|
+
tool_key text NOT NULL,
|
|
51
|
+
spec_hash text NOT NULL,
|
|
52
|
+
app_id text,
|
|
53
|
+
PRIMARY KEY (conversation_id, tool_key)
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
-- 工具调用审批。requested_for(指定账号)与 approver_role(指定角色)至少一个非空。
|
|
57
|
+
CREATE TABLE IF NOT EXISTS capybara.approvals (
|
|
58
|
+
id text PRIMARY KEY,
|
|
59
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
60
|
+
conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
61
|
+
run_id text NOT NULL REFERENCES capybara.runs(id) ON DELETE CASCADE,
|
|
62
|
+
call_id text NOT NULL,
|
|
63
|
+
tool_key text NOT NULL,
|
|
64
|
+
input jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
65
|
+
-- 指定处理人的账号被删除时审批一并删除:SET NULL 会让只指定了处理人的行违反 approvals_target_chk,
|
|
66
|
+
-- 删除账号失败;这类审批只有那个人能处理,人不在了审批也没有意义(等待中的运行由超时收尾)。
|
|
67
|
+
requested_for text REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
68
|
+
approver_role text,
|
|
69
|
+
status text NOT NULL DEFAULT 'pending'
|
|
70
|
+
CHECK (status IN ('pending', 'approved', 'denied', 'expired', 'cancelled')),
|
|
71
|
+
scope text CHECK (scope IS NULL OR scope IN ('once', 'session', 'always')),
|
|
72
|
+
decided_by text REFERENCES capybara.accounts(id) ON DELETE SET NULL,
|
|
73
|
+
decided_at timestamptz,
|
|
74
|
+
expires_at timestamptz NOT NULL,
|
|
75
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
76
|
+
CONSTRAINT approvals_run_call_uniq UNIQUE (run_id, call_id),
|
|
77
|
+
CONSTRAINT approvals_target_chk CHECK (requested_for IS NOT NULL OR approver_role IS NOT NULL)
|
|
78
|
+
);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS approvals_pending_for_idx
|
|
80
|
+
ON capybara.approvals (requested_for) WHERE status = 'pending';
|
|
81
|
+
|
|
82
|
+
-- ask_user 提问。
|
|
83
|
+
CREATE TABLE IF NOT EXISTS capybara.questions (
|
|
84
|
+
id text PRIMARY KEY,
|
|
85
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
86
|
+
conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
87
|
+
run_id text NOT NULL REFERENCES capybara.runs(id) ON DELETE CASCADE,
|
|
88
|
+
call_id text NOT NULL,
|
|
89
|
+
spec jsonb NOT NULL,
|
|
90
|
+
status text NOT NULL DEFAULT 'pending'
|
|
91
|
+
CHECK (status IN ('pending', 'answered', 'expired', 'cancelled')),
|
|
92
|
+
answer jsonb,
|
|
93
|
+
answered_by text REFERENCES capybara.accounts(id) ON DELETE SET NULL,
|
|
94
|
+
answered_at timestamptz,
|
|
95
|
+
expires_at timestamptz NOT NULL,
|
|
96
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
97
|
+
CONSTRAINT questions_run_call_uniq UNIQUE (run_id, call_id)
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
-- 超大工具输出的存档(read_tool_output 读取),到期清理。
|
|
101
|
+
CREATE TABLE IF NOT EXISTS capybara.tool_outputs (
|
|
102
|
+
id text PRIMARY KEY,
|
|
103
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
104
|
+
conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
105
|
+
call_id text NOT NULL,
|
|
106
|
+
size_chars integer NOT NULL,
|
|
107
|
+
line_count integer NOT NULL,
|
|
108
|
+
content text NOT NULL,
|
|
109
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
110
|
+
expires_at timestamptz NOT NULL
|
|
111
|
+
);
|
|
112
|
+
CREATE INDEX IF NOT EXISTS tool_outputs_expires_idx ON capybara.tool_outputs (expires_at);
|
|
113
|
+
|
|
114
|
+
-- runs 增加 waiting(等待审批 / 回答);约束名为 PG 对 0006 内联 CHECK 的默认命名。
|
|
115
|
+
ALTER TABLE capybara.runs DROP CONSTRAINT IF EXISTS runs_status_check;
|
|
116
|
+
ALTER TABLE capybara.runs ADD CONSTRAINT runs_status_check
|
|
117
|
+
CHECK (status IN ('queued', 'running', 'waiting', 'completed', 'failed', 'aborted'));
|
|
118
|
+
|
|
119
|
+
-- 每会话至多一个活动运行:waiting 也算活动。
|
|
120
|
+
DROP INDEX IF EXISTS capybara.runs_one_active_per_conversation;
|
|
121
|
+
CREATE UNIQUE INDEX IF NOT EXISTS runs_one_active_per_conversation
|
|
122
|
+
ON capybara.runs (conversation_id) WHERE status IN ('queued', 'running', 'waiting');
|
|
123
|
+
|
|
124
|
+
-- 组织级设置(如工具策略)。
|
|
125
|
+
ALTER TABLE capybara.orgs ADD COLUMN IF NOT EXISTS settings jsonb NOT NULL DEFAULT '{}'::jsonb;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- 审批记录所批准的工具定义:spec_hash 用于写「本会话 / 以后都允许」授权(定义变化后授权失效);
|
|
2
|
+
-- app_id 为应用工具的来源应用(详情展示用,插件 / 内置工具为空)。
|
|
3
|
+
-- 必填:approvals 是本版本(0010)新建的表,尚无数据,可直接加 NOT NULL 列。
|
|
4
|
+
ALTER TABLE capybara.approvals ADD COLUMN IF NOT EXISTS spec_hash text NOT NULL;
|
|
5
|
+
ALTER TABLE capybara.approvals ADD COLUMN IF NOT EXISTS app_id text
|
|
6
|
+
REFERENCES capybara.apps(id) ON DELETE SET NULL;
|
|
7
|
+
|
|
8
|
+
-- 按角色升级的待处理审批(列表查询用)。
|
|
9
|
+
CREATE INDEX IF NOT EXISTS approvals_pending_role_idx
|
|
10
|
+
ON capybara.approvals (org_id, approver_role) WHERE status = 'pending' AND approver_role IS NOT NULL;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-- 运行等待人处理(审批 / 输入请求)时暂停、处理后续跑。
|
|
2
|
+
|
|
3
|
+
-- 进入 waiting 的时刻;续跑时把等待时长累加进 waited_ms 并清空。
|
|
4
|
+
ALTER TABLE runs ADD COLUMN IF NOT EXISTS waiting_since timestamptz;
|
|
5
|
+
-- 累计等待时长(毫秒):运行截止时间 = started_at + waited_ms + maxRunSeconds,等人不计入运行时长。
|
|
6
|
+
ALTER TABLE runs ADD COLUMN IF NOT EXISTS waited_ms bigint NOT NULL DEFAULT 0;
|
|
7
|
+
-- 续跑任务的 jobId(`run-<conversationId>-resume-<waitId>`);为空表示按触发消息生成的 jobId。孤儿判定用它查任务。
|
|
8
|
+
ALTER TABLE runs ADD COLUMN IF NOT EXISTS job_id text;
|
|
9
|
+
-- 最近一次回到 queued 的时刻(续跑);孤儿判定的宽限期从它起算(为空时用 created_at)。
|
|
10
|
+
ALTER TABLE runs ADD COLUMN IF NOT EXISTS queued_at timestamptz;
|
|
11
|
+
|
|
12
|
+
-- 同一工具调用可以连续请求输入(最多 3 轮):每轮一行,按 attempt 区分。
|
|
13
|
+
ALTER TABLE questions ADD COLUMN IF NOT EXISTS attempt integer NOT NULL DEFAULT 1;
|
|
14
|
+
CREATE UNIQUE INDEX IF NOT EXISTS questions_run_call_attempt_uniq
|
|
15
|
+
ON questions (run_id, call_id, attempt);
|
|
16
|
+
-- 0010 的 (run_id, call_id) 唯一约束改由上面的唯一索引取代(questions 表在本版本新建,尚无代码依赖旧约束)。
|
|
17
|
+
ALTER TABLE questions DROP CONSTRAINT IF EXISTS questions_run_call_uniq;
|
|
18
|
+
|
|
19
|
+
-- 同一工具调用可能需要再次审批(等待期间工具定义变了,原批准不再适用):每次审批一行,按 attempt 区分。
|
|
20
|
+
ALTER TABLE approvals ADD COLUMN IF NOT EXISTS attempt integer NOT NULL DEFAULT 1;
|
|
21
|
+
CREATE UNIQUE INDEX IF NOT EXISTS approvals_run_call_attempt_uniq
|
|
22
|
+
ON approvals (run_id, call_id, attempt);
|
|
23
|
+
-- 0010 的 (run_id, call_id) 唯一约束改由上面的唯一索引取代(approvals 表在本版本新建,尚无代码依赖旧约束)。
|
|
24
|
+
ALTER TABLE approvals DROP CONSTRAINT IF EXISTS approvals_run_call_uniq;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
-- 应用工具的来源:connector = 连接器 listTools 返回的工具;resources = 应用支持 resources 时内核补上的
|
|
2
|
+
-- list_resources / read_resource 两个工具(执行时路由到会话的 listResources / readResource)。
|
|
3
|
+
ALTER TABLE capybara.app_tools ADD COLUMN IF NOT EXISTS source text NOT NULL DEFAULT 'connector'
|
|
4
|
+
CHECK (source IN ('connector', 'resources'));
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
-- 工具定义快照(内容寻址):model_call 只记 {key, specHash},定义本身按指纹存这里,只增不改。
|
|
2
|
+
-- 应用刷新、插件升级改了定义之后,早先 model_call 用过的定义仍可按指纹取回,模型请求可由日志还原。
|
|
3
|
+
-- spec 为 ToolSpec(name 为来源内的原名;模型可见名是 model_call 里的 key)。
|
|
4
|
+
CREATE TABLE IF NOT EXISTS tool_specs (
|
|
5
|
+
spec_hash text PRIMARY KEY,
|
|
6
|
+
spec jsonb NOT NULL,
|
|
7
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
8
|
+
);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-- 工具定义漂移检测与复核(spec 7.3):新增 / 变化的工具在管理员复核前不可用。
|
|
2
|
+
|
|
3
|
+
-- 变化后待复核的新定义(复核前 spec / spec_hash / source 仍是上次复核通过的定义,供对比;通过后采用这里的)。
|
|
4
|
+
ALTER TABLE capybara.app_tools ADD COLUMN IF NOT EXISTS pending_spec jsonb;
|
|
5
|
+
ALTER TABLE capybara.app_tools ADD COLUMN IF NOT EXISTS pending_spec_hash text;
|
|
6
|
+
ALTER TABLE capybara.app_tools ADD COLUMN IF NOT EXISTS pending_source text
|
|
7
|
+
CHECK (pending_source IS NULL OR pending_source IN ('connector', 'resources'));
|
|
8
|
+
-- 默认策略的来历:derived = 按注解推导(定义变化复核通过后重新推导);admin = 管理员设定(保留)。
|
|
9
|
+
ALTER TABLE capybara.app_tools ADD COLUMN IF NOT EXISTS policy_source text NOT NULL DEFAULT 'derived'
|
|
10
|
+
CHECK (policy_source IN ('derived', 'admin'));
|
|
11
|
+
-- 远端不再提供该工具的时间(工具随之停用,行保留);又出现时清空并按新增处理(待复核)。
|
|
12
|
+
ALTER TABLE capybara.app_tools ADD COLUMN IF NOT EXISTS missing_since timestamptz;
|
|
13
|
+
|
|
14
|
+
-- 最近一次成功拿到工具清单(安装 / 刷新 / 漂移检查)的时间。为空 = 从未拍过快照(OAuth 授权码应用安装时
|
|
15
|
+
-- 不 listTools,A16):首个快照按安装处理(直接启用)。定时扫描据此跳过本周期内已检查过的应用。
|
|
16
|
+
ALTER TABLE capybara.apps ADD COLUMN IF NOT EXISTS tools_synced_at timestamptz;
|
|
17
|
+
UPDATE capybara.apps SET tools_synced_at = updated_at
|
|
18
|
+
WHERE tools_synced_at IS NULL
|
|
19
|
+
AND (auth->>'type' IS DISTINCT FROM 'oauth_code'
|
|
20
|
+
OR EXISTS (SELECT 1 FROM capybara.app_tools t WHERE t.app_id = apps.id));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- 插件已批准的权限快照(扩展模型 7.3):插件首次出现或升级后清单比快照多出任何一项时不加载,待批准。
|
|
2
|
+
-- permissions = 规范化的权限集合(computePermissionSet);source:cli = 管理员经 CLI 批准,auto = autoApprove 自动写入。
|
|
3
|
+
-- approved_by 为批准人账号 id(CLI 与自动批准没有账号,为空)。
|
|
4
|
+
CREATE TABLE IF NOT EXISTS capybara.plugin_permission_snapshots (
|
|
5
|
+
plugin text PRIMARY KEY,
|
|
6
|
+
version text NOT NULL,
|
|
7
|
+
permissions jsonb NOT NULL,
|
|
8
|
+
approved_by text,
|
|
9
|
+
approved_at timestamptz NOT NULL DEFAULT now(),
|
|
10
|
+
source text NOT NULL CHECK (source IN ('cli', 'auto'))
|
|
11
|
+
);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- 外部身份(M4):成员关系的来源。NULL = 手动加入 / 凭邀请;"directory:<插件名>" = 通讯录同步加入
|
|
2
|
+
-- (通讯录同步只撤销由它自己加入的成员关系)。
|
|
3
|
+
ALTER TABLE capybara.memberships ADD COLUMN IF NOT EXISTS source text;
|
|
4
|
+
-- 第三方登录按已验证邮箱合并时按 lower(email) 查找账号。
|
|
5
|
+
CREATE INDEX IF NOT EXISTS accounts_verified_email_idx
|
|
6
|
+
ON capybara.accounts (lower(email)) WHERE email_verified;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
-- 渠道(M4):组织拥有的渠道连接(bot 凭据 + 绑定的 agent)、IM 话题 ↔ 会话映射、出站投递进度(Task 11),
|
|
2
|
+
-- 以及每个组织一个的匿名访客账号。连接配置里的密钥字段不在这里,存 capybara.secrets(kernel / channels:<id>:config)。
|
|
3
|
+
CREATE TABLE IF NOT EXISTS capybara.channel_connections (
|
|
4
|
+
id text PRIMARY KEY,
|
|
5
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
6
|
+
plugin text NOT NULL,
|
|
7
|
+
name text NOT NULL,
|
|
8
|
+
agent_id text NOT NULL REFERENCES capybara.agents(id),
|
|
9
|
+
config jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
10
|
+
unbound_policy text NOT NULL DEFAULT 'bind' CHECK (unbound_policy IN ('bind', 'anonymous')),
|
|
11
|
+
status text NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'disabled', 'error')),
|
|
12
|
+
last_error text,
|
|
13
|
+
bot_user_id text,
|
|
14
|
+
tenant_id text,
|
|
15
|
+
created_by text NOT NULL REFERENCES capybara.accounts(id),
|
|
16
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
17
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
18
|
+
deleted_at timestamptz
|
|
19
|
+
);
|
|
20
|
+
CREATE INDEX IF NOT EXISTS channel_connections_org_idx
|
|
21
|
+
ON capybara.channel_connections (org_id) WHERE deleted_at IS NULL;
|
|
22
|
+
CREATE INDEX IF NOT EXISTS channel_connections_active_idx
|
|
23
|
+
ON capybara.channel_connections (id) WHERE status = 'active' AND deleted_at IS NULL;
|
|
24
|
+
-- 私聊 thread_key = 'dm:<externalId>',群聊 = 平台话题 id(新话题用起始消息 id);匿名访客 account_id 为 NULL。
|
|
25
|
+
-- 私聊 /new 把当前行标记 archived_at 后新建,所以唯一性只约束未归档的行(部分唯一索引)。
|
|
26
|
+
CREATE TABLE IF NOT EXISTS capybara.channel_threads (
|
|
27
|
+
id text PRIMARY KEY,
|
|
28
|
+
connection_id text NOT NULL REFERENCES capybara.channel_connections(id) ON DELETE CASCADE,
|
|
29
|
+
chat_id text NOT NULL,
|
|
30
|
+
thread_key text NOT NULL,
|
|
31
|
+
account_id text REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
32
|
+
conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
33
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
34
|
+
archived_at timestamptz
|
|
35
|
+
);
|
|
36
|
+
CREATE UNIQUE INDEX IF NOT EXISTS channel_threads_live_uq
|
|
37
|
+
ON capybara.channel_threads (connection_id, chat_id, thread_key, coalesce(account_id::text, ''))
|
|
38
|
+
WHERE archived_at IS NULL;
|
|
39
|
+
CREATE INDEX IF NOT EXISTS channel_threads_conversation_idx
|
|
40
|
+
ON capybara.channel_threads (conversation_id);
|
|
41
|
+
-- 会话的 IM 投递目标与已投递到的事件序号(Task 11 的出站投递按 last_seq 续投)。
|
|
42
|
+
CREATE TABLE IF NOT EXISTS capybara.channel_deliveries (
|
|
43
|
+
conversation_id text PRIMARY KEY REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
44
|
+
connection_id text NOT NULL REFERENCES capybara.channel_connections(id) ON DELETE CASCADE,
|
|
45
|
+
target jsonb NOT NULL,
|
|
46
|
+
last_seq bigint NOT NULL DEFAULT 0,
|
|
47
|
+
draft_message_id text,
|
|
48
|
+
-- 不可重试的发送失败落在哪个事件、连续失败几次(同一事件失败 3 次即跳过,见 channels/outbound.ts)
|
|
49
|
+
fail_seq bigint,
|
|
50
|
+
fail_count integer NOT NULL DEFAULT 0,
|
|
51
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
52
|
+
);
|
|
53
|
+
CREATE INDEX IF NOT EXISTS channel_deliveries_connection_idx
|
|
54
|
+
ON capybara.channel_deliveries (connection_id);
|
|
55
|
+
-- 每个组织一个匿名访客账号(无登录方式,组织角色 guest),渠道连接开启匿名策略时首次使用才创建。
|
|
56
|
+
CREATE TABLE IF NOT EXISTS capybara.org_anonymous_accounts (
|
|
57
|
+
org_id text PRIMARY KEY REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
58
|
+
account_id text NOT NULL UNIQUE REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
59
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
60
|
+
);
|
|
61
|
+
-- 出站投递发出的审批 / 提问卡片对应的 IM 消息(Task 11):approval_decided / question_answered 到达时据此更新卡片,
|
|
62
|
+
-- 崩溃后由其他副本续投时同样能找到。每个 (会话, 连接, 卡片) 只记一条。
|
|
63
|
+
CREATE TABLE IF NOT EXISTS capybara.channel_card_messages (
|
|
64
|
+
conversation_id text NOT NULL REFERENCES capybara.conversations(id) ON DELETE CASCADE,
|
|
65
|
+
connection_id text NOT NULL REFERENCES capybara.channel_connections(id) ON DELETE CASCADE,
|
|
66
|
+
card_kind text NOT NULL CHECK (card_kind IN ('approval', 'question')),
|
|
67
|
+
card_id text NOT NULL,
|
|
68
|
+
message_id text NOT NULL,
|
|
69
|
+
target jsonb NOT NULL,
|
|
70
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
71
|
+
PRIMARY KEY (conversation_id, connection_id, card_kind, card_id)
|
|
72
|
+
);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS channel_card_messages_connection_idx
|
|
74
|
+
ON capybara.channel_card_messages (connection_id);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
-- 第一段修复波 W1(Ruling A18 / A20)。
|
|
2
|
+
-- 身份行是怎么建立的:bind = IM 里点绑定链接确认(只证明网页登录者点了链接,不证明他控制该 IM 身份),
|
|
3
|
+
-- sso = 第三方登录,directory = 通讯录同步,local = 本地登录名。NULL 为此前的旧行,按 sso 处理。
|
|
4
|
+
-- 第三方登录拒绝 bind(以及不受信任租户的 directory)身份,除非本人已登录同一账号(此时升级为 sso)。
|
|
5
|
+
ALTER TABLE capybara.identities ADD COLUMN IF NOT EXISTS linked_via text
|
|
6
|
+
CHECK (linked_via IN ('bind', 'sso', 'directory', 'local'));
|
|
7
|
+
UPDATE capybara.identities SET linked_via = 'local' WHERE source = 'local' AND linked_via IS NULL;
|
|
8
|
+
-- 通讯录排除:管理员手动移出(或本人离开)由通讯录同步加入的成员后,同步不再把此人加回该组织,
|
|
9
|
+
-- 直到有人手动重新加入(接受邀请等),届时删除这一行。
|
|
10
|
+
CREATE TABLE IF NOT EXISTS capybara.directory_exclusions (
|
|
11
|
+
org_id text NOT NULL REFERENCES capybara.orgs(id) ON DELETE CASCADE,
|
|
12
|
+
account_id text NOT NULL REFERENCES capybara.accounts(id) ON DELETE CASCADE,
|
|
13
|
+
plugin text NOT NULL,
|
|
14
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
15
|
+
created_by text REFERENCES capybara.accounts(id) ON DELETE SET NULL,
|
|
16
|
+
PRIMARY KEY (org_id, account_id, plugin)
|
|
17
|
+
);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- 第一段修复波 W2。
|
|
2
|
+
-- 卡片操作按 (连接, 卡片类型, 卡片 id) 找发出的卡片消息(channels/actions.ts,Ruling A13);主键以会话打头用不上。
|
|
3
|
+
-- 卡片 id 是审批 / 提问 id(全局唯一,只属于一个会话),所以这三列本身唯一。
|
|
4
|
+
CREATE UNIQUE INDEX IF NOT EXISTS channel_card_messages_lookup_uq
|
|
5
|
+
ON capybara.channel_card_messages (connection_id, card_kind, card_id);
|
|
6
|
+
-- 通讯录排除(0019)的外键列:删除账号时的级联 / 置空按它们查找。
|
|
7
|
+
CREATE INDEX IF NOT EXISTS directory_exclusions_account_idx
|
|
8
|
+
ON capybara.directory_exclusions (account_id);
|
|
9
|
+
CREATE INDEX IF NOT EXISTS directory_exclusions_created_by_idx
|
|
10
|
+
ON capybara.directory_exclusions (created_by);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- M5 T2:组织软删除后,维护任务按 storage.purgeDeletedOrgsAfterDays 清理其对象存储(storage/purge.ts)。
|
|
2
|
+
-- storage_purged_at 记录已清理的时间,之后不再处理该组织。
|
|
3
|
+
-- storage_purge_claimed_at 是某次运行的认领时间:认领在短事务里完成,删除对象在事务外进行;
|
|
4
|
+
-- 认领超时(运行中途退出)后可被重新认领。
|
|
5
|
+
ALTER TABLE orgs ADD COLUMN IF NOT EXISTS storage_purged_at timestamptz;
|
|
6
|
+
ALTER TABLE orgs ADD COLUMN IF NOT EXISTS storage_purge_claimed_at timestamptz;
|
|
7
|
+
CREATE INDEX IF NOT EXISTS orgs_storage_purge_pending_idx
|
|
8
|
+
ON orgs (deleted_at)
|
|
9
|
+
WHERE deleted_at IS NOT NULL AND storage_purged_at IS NULL;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- M5 T3:对话附件(图片 / 文档)。字节在对象存储 kernel/<org_id>/attachments/<id>,这里只存元数据;
|
|
2
|
+
-- 用户的文件名只在 name 列,不进对象键。
|
|
3
|
+
-- status:pending(已登记、等浏览器直传并 finalize)→ ready(大小与类型已核对);
|
|
4
|
+
-- deleting 是清理任务的认领状态(删对象失败时下次重试)。
|
|
5
|
+
-- conversation_id 在第一次被消息引用时绑定,之后不再变;未绑定的附件 expires_at 到期后由维护任务删除
|
|
6
|
+
-- (对象一并删除),绑定后 expires_at 置空。
|
|
7
|
+
CREATE TABLE IF NOT EXISTS attachments (
|
|
8
|
+
id text PRIMARY KEY,
|
|
9
|
+
org_id text NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
|
|
10
|
+
conversation_id text REFERENCES conversations(id) ON DELETE CASCADE,
|
|
11
|
+
account_id text NOT NULL REFERENCES accounts(id),
|
|
12
|
+
name text NOT NULL,
|
|
13
|
+
content_type text NOT NULL,
|
|
14
|
+
size bigint NOT NULL CHECK (size >= 0),
|
|
15
|
+
object_key text NOT NULL,
|
|
16
|
+
status text NOT NULL CHECK (status IN ('pending', 'ready', 'deleting')),
|
|
17
|
+
-- finalize 时记下的对象 etag:之后经同一预签名表单重传会改变 etag,取字节与下载时不符即视为不再可用
|
|
18
|
+
etag text,
|
|
19
|
+
-- PDF 的页数(finalize 时数出,用于 token 估算);不是 PDF 或数不到为 NULL
|
|
20
|
+
pages integer,
|
|
21
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
22
|
+
expires_at timestamptz
|
|
23
|
+
);
|
|
24
|
+
CREATE INDEX IF NOT EXISTS attachments_unbound_expiry_idx
|
|
25
|
+
ON attachments (expires_at)
|
|
26
|
+
WHERE conversation_id IS NULL;
|
|
27
|
+
CREATE INDEX IF NOT EXISTS attachments_conversation_idx
|
|
28
|
+
ON attachments (conversation_id)
|
|
29
|
+
WHERE conversation_id IS NOT NULL;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- M5 T7:按对话的沙箱(sandbox@1 提供方的实例,见 sandbox/sandbox.service.ts)。每个对话至多一行。
|
|
2
|
+
-- 创建、恢复、休眠、销毁都在 Redis 锁 capk:sandbox:<conversation_id> 下进行;空闲休眠与不活跃销毁由维护队列扫描。
|
|
3
|
+
-- 不对 conversations / orgs 建外键:对话或组织删除后这一行要留着,直到维护任务销毁提供方那边的实例
|
|
4
|
+
-- (否则实例会泄漏);对话已不存在的行在销毁后删除。
|
|
5
|
+
-- status:creating(正在创建,handle 为 NULL;创建失败或中途退出时停在这里,下次使用重新创建)
|
|
6
|
+
-- → running ⇄ suspended → destroyed(销毁后保留 handle 备查,下次使用重建)。
|
|
7
|
+
-- provider:创建它的插件名;与当前提供方不同时当作已不在,下次使用重建。
|
|
8
|
+
-- running_since:本次连续运行的开始时间(创建或恢复时写,休眠时清空),用于超时强制休眠。
|
|
9
|
+
-- generation:防护号。持锁方在锁内读到它,此后每次改 status / handle 都带 WHERE generation = 读到的值
|
|
10
|
+
-- 并加一;没有匹配行说明锁已丢失、别人改过,放弃。
|
|
11
|
+
-- had_instance:曾经成功创建过实例(只会置 true,重置时不清):之后的创建都算重建(recreated)。
|
|
12
|
+
-- prev_provider / prev_handle:换了提供方时旧提供方的实例(新提供方销毁不了),旧提供方还加载时用它销毁后清空。
|
|
13
|
+
-- sweep_failed_at:上次维护扫描处理它失败的时间(成功后清空);扫描时排在后面,免得总卡在同一批。
|
|
14
|
+
CREATE TABLE IF NOT EXISTS sandboxes (
|
|
15
|
+
conversation_id text PRIMARY KEY,
|
|
16
|
+
org_id text NOT NULL,
|
|
17
|
+
provider text NOT NULL,
|
|
18
|
+
handle jsonb,
|
|
19
|
+
status text NOT NULL CHECK (status IN ('creating', 'running', 'suspended', 'destroyed')),
|
|
20
|
+
last_used_at timestamptz NOT NULL DEFAULT now(),
|
|
21
|
+
running_since timestamptz,
|
|
22
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
23
|
+
suspended_at timestamptz,
|
|
24
|
+
destroyed_at timestamptz,
|
|
25
|
+
generation integer NOT NULL DEFAULT 0,
|
|
26
|
+
had_instance boolean NOT NULL DEFAULT false,
|
|
27
|
+
prev_provider text,
|
|
28
|
+
prev_handle jsonb,
|
|
29
|
+
sweep_failed_at timestamptz
|
|
30
|
+
);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS sandboxes_running_idx
|
|
32
|
+
ON sandboxes (last_used_at)
|
|
33
|
+
WHERE status = 'running';
|
|
34
|
+
CREATE INDEX IF NOT EXISTS sandboxes_live_idx
|
|
35
|
+
ON sandboxes (last_used_at)
|
|
36
|
+
WHERE status <> 'destroyed';
|
|
37
|
+
CREATE INDEX IF NOT EXISTS sandboxes_org_idx ON sandboxes (org_id);
|