@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.5
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/bootstrap.json +61 -5
- package/dist/admin/admin.controller.d.ts +39 -13
- package/dist/admin/admin.controller.js +33 -17
- package/dist/admin/extensions.controller.d.ts +16 -2
- package/dist/admin/extensions.controller.js +26 -6
- package/dist/admin/setup-lock.d.ts +1 -1
- package/dist/admin/setup-lock.js +1 -1
- package/dist/admin/setup.controller.d.ts +1 -1
- package/dist/admin/setup.controller.js +1 -1
- package/dist/admin/setup.service.d.ts +4 -4
- package/dist/admin/setup.service.js +8 -8
- package/dist/agents/agent-lookup.d.ts +16 -0
- package/dist/agents/agent-lookup.js +11 -0
- package/dist/agents/agents.controller.d.ts +76 -1
- package/dist/agents/agents.controller.js +90 -11
- package/dist/agents/agents.module.d.ts +4 -1
- package/dist/agents/agents.module.js +32 -6
- package/dist/agents/agents.service.d.ts +51 -22
- package/dist/agents/agents.service.js +172 -70
- package/dist/agents/definition.d.ts +49 -0
- package/dist/agents/definition.js +45 -0
- package/dist/agents/from-template.d.ts +106 -0
- package/dist/agents/from-template.js +649 -0
- package/dist/agents/from-template.service.d.ts +60 -0
- package/dist/agents/from-template.service.js +161 -0
- package/dist/agents/org-templates.d.ts +176 -0
- package/dist/agents/org-templates.js +827 -0
- package/dist/agents/pending-connector-requests.d.ts +77 -0
- package/dist/agents/pending-connector-requests.js +215 -0
- package/dist/agents/pending-connectors.controller.d.ts +39 -0
- package/dist/agents/pending-connectors.controller.js +91 -0
- package/dist/agents/pending-connectors.service.d.ts +62 -0
- package/dist/agents/pending-connectors.service.js +282 -0
- package/dist/agents/templates.controller.d.ts +86 -5
- package/dist/agents/templates.controller.js +171 -7
- package/dist/agents/templates.d.ts +127 -23
- package/dist/agents/templates.js +475 -52
- package/dist/background/background.module.js +8 -1
- package/dist/background/finish.d.ts +3 -2
- package/dist/background/launch-lock.d.ts +4 -3
- package/dist/background/launch-lock.js +4 -3
- package/dist/background/poll.job.d.ts +9 -6
- package/dist/background/poll.job.js +30 -22
- package/dist/background/session.d.ts +13 -2
- package/dist/background/session.js +13 -0
- package/dist/background/stop.d.ts +12 -6
- package/dist/background/stop.js +57 -39
- package/dist/background/store.d.ts +18 -6
- package/dist/background/store.js +12 -6
- package/dist/background/tasks.service.d.ts +15 -5
- package/dist/background/tasks.service.js +42 -17
- package/dist/background/wake-rules.d.ts +27 -18
- package/dist/background/wake-rules.js +52 -22
- package/dist/background/wake.d.ts +13 -11
- package/dist/background/wake.js +20 -14
- package/dist/catalog/admin-catalog.controller.d.ts +129 -30
- package/dist/catalog/admin-catalog.controller.js +213 -42
- package/dist/catalog/catalog-content.d.ts +58 -32
- package/dist/catalog/catalog-content.js +34 -8
- package/dist/catalog/catalog-import.module.d.ts +7 -0
- package/dist/catalog/catalog-import.module.js +60 -0
- package/dist/catalog/catalog-items.d.ts +111 -7
- package/dist/catalog/catalog-items.js +279 -13
- package/dist/catalog/catalog-scope.service.d.ts +260 -0
- package/dist/catalog/catalog-scope.service.js +1116 -0
- package/dist/catalog/catalog.module.d.ts +7 -9
- package/dist/catalog/catalog.module.js +41 -31
- package/dist/catalog/catalog.service.d.ts +101 -29
- package/dist/catalog/catalog.service.js +104 -106
- package/dist/catalog/cli.d.ts +11 -1
- package/dist/catalog/cli.js +26 -1
- package/dist/catalog/component-promotion.d.ts +96 -0
- package/dist/catalog/component-promotion.js +395 -0
- package/dist/catalog/component-scope.controller.d.ts +152 -0
- package/dist/catalog/component-scope.controller.js +287 -0
- package/dist/catalog/component-scope.service.d.ts +303 -0
- package/dist/catalog/component-scope.service.js +936 -0
- package/dist/catalog/component-state.d.ts +174 -0
- package/dist/catalog/component-state.js +437 -0
- package/dist/catalog/job-ids.d.ts +30 -0
- package/dist/catalog/job-ids.js +25 -0
- package/dist/catalog/marketplace-fetch.d.ts +1 -1
- package/dist/catalog/marketplaces.controller.d.ts +22 -5
- package/dist/catalog/marketplaces.controller.js +56 -7
- package/dist/catalog/marketplaces.service.d.ts +54 -14
- package/dist/catalog/marketplaces.service.js +71 -22
- package/dist/catalog/org-catalog.controller.d.ts +125 -34
- package/dist/catalog/org-catalog.controller.js +181 -65
- package/dist/catalog/org-catalog.service.d.ts +65 -33
- package/dist/catalog/org-catalog.service.js +324 -157
- package/dist/catalog/org-extension-switch.d.ts +41 -0
- package/dist/catalog/org-extension-switch.js +115 -0
- package/dist/catalog/org-extension.controller.d.ts +119 -0
- package/dist/catalog/org-extension.controller.js +266 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
- package/dist/catalog/org-plugin-uploads.controller.js +213 -0
- package/dist/catalog/org-plugin-uploads.d.ts +63 -0
- package/dist/catalog/org-plugin-uploads.js +116 -0
- package/dist/catalog/owned-items.d.ts +184 -0
- package/dist/catalog/owned-items.js +789 -0
- package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
- package/dist/catalog/owned-plugin-cleanup.js +194 -0
- package/dist/catalog/ownership.d.ts +172 -0
- package/dist/catalog/ownership.js +326 -0
- package/dist/catalog/platform-components.d.ts +221 -0
- package/dist/catalog/platform-components.js +761 -0
- package/dist/catalog/platform-migration.d.ts +115 -0
- package/dist/catalog/platform-migration.js +582 -0
- package/dist/catalog/plugin-import.d.ts +178 -34
- package/dist/catalog/plugin-import.js +622 -82
- package/dist/catalog/plugin-install.d.ts +185 -41
- package/dist/catalog/plugin-install.js +758 -126
- package/dist/catalog/plugin-upgrade.d.ts +260 -225
- package/dist/catalog/plugin-upgrade.js +1147 -1136
- package/dist/catalog/request-rules.d.ts +65 -0
- package/dist/catalog/request-rules.js +217 -0
- package/dist/catalog/requests.service.d.ts +193 -118
- package/dist/catalog/requests.service.js +526 -343
- package/dist/catalog/reserved-names.d.ts +8 -0
- package/dist/catalog/reserved-names.js +42 -0
- package/dist/catalog/scope-orgs.d.ts +21 -0
- package/dist/catalog/scope-orgs.js +67 -0
- package/dist/catalog/scope-state.d.ts +35 -0
- package/dist/catalog/scope-state.js +87 -0
- package/dist/catalog/scope-sync-workers.d.ts +7 -0
- package/dist/catalog/scope-sync-workers.js +29 -0
- package/dist/catalog/scope-sync.d.ts +176 -0
- package/dist/catalog/scope-sync.js +576 -0
- package/dist/catalog/scope.d.ts +42 -0
- package/dist/catalog/scope.js +42 -0
- package/dist/catalog/unshare.d.ts +22 -0
- package/dist/catalog/unshare.js +118 -0
- package/dist/channels/actions.js +1 -0
- package/dist/channels/cards.js +20 -2
- package/dist/channels/channels.module.js +2 -0
- package/dist/channels/inbound.d.ts +9 -1
- package/dist/channels/inbound.js +67 -5
- package/dist/channels/phrases.d.ts +35 -0
- package/dist/channels/phrases.js +29 -0
- package/dist/config/docs.js +3 -1
- package/dist/config/schema.d.ts +6 -2
- package/dist/config/schema.js +46 -22
- package/dist/conversations/access.d.ts +6 -4
- package/dist/conversations/access.js +27 -5
- package/dist/conversations/agent-tree.d.ts +46 -0
- package/dist/conversations/agent-tree.js +92 -0
- package/dist/conversations/conversations.controller.d.ts +43 -18
- package/dist/conversations/conversations.controller.js +79 -38
- package/dist/conversations/conversations.module.d.ts +1 -1
- package/dist/conversations/conversations.module.js +7 -7
- package/dist/conversations/conversations.service.d.ts +69 -12
- package/dist/conversations/conversations.service.js +106 -27
- package/dist/conversations/environment-status.d.ts +24 -0
- package/dist/conversations/environment-status.js +71 -0
- package/dist/conversations/event-log.d.ts +20 -5
- package/dist/conversations/event-log.js +60 -0
- package/dist/conversations/events.d.ts +84 -2
- package/dist/conversations/events.js +91 -17
- package/dist/conversations/queue.service.d.ts +1 -1
- package/dist/conversations/queue.service.js +5 -0
- package/dist/conversations/titles.d.ts +5 -3
- package/dist/conversations/titles.js +21 -8
- package/dist/conversations/tree.d.ts +17 -0
- package/dist/conversations/tree.js +42 -0
- package/dist/ctx/create-ctx.d.ts +5 -0
- package/dist/ctx/create-ctx.js +15 -5
- package/dist/db/kernel-schema.d.ts +362 -18
- package/dist/environments/access.d.ts +41 -0
- package/dist/environments/access.js +77 -0
- package/dist/environments/conversation-environments.d.ts +61 -0
- package/dist/environments/conversation-environments.js +170 -0
- package/dist/environments/dto.d.ts +25 -0
- package/dist/environments/dto.js +12 -0
- package/dist/environments/environments.controller.d.ts +33 -0
- package/dist/environments/environments.controller.js +110 -0
- package/dist/environments/environments.module.d.ts +8 -0
- package/dist/environments/environments.module.js +27 -0
- package/dist/environments/environments.service.d.ts +153 -0
- package/dist/environments/environments.service.js +541 -0
- package/dist/environments/legacy-cleanup.job.d.ts +34 -0
- package/dist/environments/legacy-cleanup.job.js +141 -0
- package/dist/errors.d.ts +82 -2
- package/dist/errors.js +82 -2
- package/dist/evals/reconstruct.d.ts +18 -9
- package/dist/evals/reconstruct.js +26 -7
- package/dist/evals/run-replay.d.ts +4 -2
- package/dist/evals/run-replay.js +16 -4
- package/dist/evals/step-replay.d.ts +2 -5
- package/dist/evals/step-replay.js +1 -1
- package/dist/evals/trajectory.service.d.ts +8 -3
- package/dist/evals/trajectory.service.js +26 -14
- package/dist/evals/worker.d.ts +5 -5
- package/dist/evals/worker.js +9 -3
- package/dist/extensions/admin-ops.d.ts +36 -10
- package/dist/extensions/admin-ops.js +65 -42
- package/dist/extensions/admin-view.d.ts +37 -10
- package/dist/extensions/admin-view.js +103 -20
- package/dist/extensions/bootstrap.d.ts +17 -4
- package/dist/extensions/bootstrap.js +70 -9
- package/dist/extensions/cli.d.ts +12 -0
- package/dist/extensions/cli.js +11 -2
- package/dist/extensions/deployment-config.d.ts +28 -5
- package/dist/extensions/deployment-config.js +48 -7
- package/dist/extensions/effective-config.d.ts +127 -0
- package/dist/extensions/effective-config.js +368 -0
- package/dist/extensions/extensions.module.js +8 -2
- package/dist/extensions/hooks.d.ts +37 -4
- package/dist/extensions/hooks.js +82 -16
- package/dist/extensions/host.d.ts +19 -1
- package/dist/extensions/host.js +30 -7
- package/dist/extensions/installs.d.ts +20 -8
- package/dist/extensions/installs.js +37 -15
- package/dist/extensions/org-config.d.ts +75 -6
- package/dist/extensions/org-config.js +184 -32
- package/dist/extensions/org-levels.d.ts +37 -0
- package/dist/extensions/org-levels.js +71 -0
- package/dist/extensions/org-overrides.d.ts +151 -0
- package/dist/extensions/org-overrides.js +524 -0
- package/dist/extensions/permission-view.d.ts +16 -4
- package/dist/extensions/permission-view.js +4 -4
- package/dist/extensions/plugin-items.d.ts +21 -0
- package/dist/extensions/plugin-items.js +42 -0
- package/dist/extensions/point-defaults.d.ts +12 -5
- package/dist/extensions/point-defaults.js +37 -9
- package/dist/extensions/resolve.d.ts +5 -1
- package/dist/extensions/resolve.js +15 -2
- package/dist/files/previewers.d.ts +8 -1
- package/dist/files/previewers.js +35 -6
- package/dist/http/api.module.js +23 -3
- package/dist/http/app.d.ts +11 -2
- package/dist/http/app.js +31 -5
- package/dist/identity/accounts.d.ts +29 -29
- package/dist/identity/accounts.js +47 -47
- package/dist/identity/audit.d.ts +2 -1
- package/dist/identity/auth.guard.d.ts +13 -5
- package/dist/identity/auth.guard.js +26 -9
- package/dist/identity/identity.module.d.ts +1 -1
- package/dist/identity/identity.module.js +4 -4
- package/dist/identity/me.controller.js +1 -1
- package/dist/identity/principal.d.ts +3 -3
- package/dist/identity/principal.js +3 -3
- package/dist/identity/settings.d.ts +22 -11
- package/dist/identity/settings.js +53 -18
- package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
- package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
- package/dist/inbox/inbox.module.d.ts +4 -1
- package/dist/inbox/inbox.module.js +7 -3
- package/dist/inbox/inbox.service.d.ts +62 -3
- package/dist/inbox/inbox.service.js +74 -4
- package/dist/inbox/org-notices.d.ts +63 -0
- package/dist/inbox/org-notices.js +91 -0
- package/dist/inbox/platform-inbox.controller.d.ts +23 -0
- package/dist/inbox/platform-inbox.controller.js +58 -0
- package/dist/inbox/platform-inbox.service.d.ts +151 -0
- package/dist/inbox/platform-inbox.service.js +263 -0
- package/dist/inbox/platform-notices.d.ts +19 -0
- package/dist/inbox/platform-notices.js +9 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/infra/cli/kernel-cli.module.js +9 -1
- package/dist/infra/config/kernel-config.service.js +21 -1
- package/dist/infra/database/xact-lock.d.ts +1 -1
- package/dist/infra/database/xact-lock.js +1 -1
- package/dist/infra/events/kernel-events.d.ts +11 -2
- package/dist/infra/queue/add-job-once.d.ts +14 -0
- package/dist/infra/queue/add-job-once.js +16 -0
- package/dist/kernel.module.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
- package/dist/lifecycle/kernel-lifecycle.js +4 -4
- package/dist/models/prices.d.ts +5 -5
- package/dist/models/prices.js +4 -4
- package/dist/models/purposes.controller.d.ts +6 -4
- package/dist/models/purposes.controller.js +13 -7
- package/dist/models/purposes.d.ts +20 -9
- package/dist/models/purposes.js +17 -8
- package/dist/orgs/directory-sync.d.ts +14 -5
- package/dist/orgs/directory-sync.js +41 -17
- package/dist/orgs/offboarding.d.ts +9 -7
- package/dist/orgs/offboarding.js +28 -17
- package/dist/orgs/org-lock.d.ts +5 -0
- package/dist/orgs/org-lock.js +13 -0
- package/dist/orgs/org.guard.d.ts +10 -0
- package/dist/orgs/org.guard.js +43 -32
- package/dist/orgs/orgs.module.js +3 -0
- package/dist/orgs/orgs.service.d.ts +20 -7
- package/dist/orgs/orgs.service.js +32 -12
- package/dist/orgs/roles.d.ts +1 -1
- package/dist/orgs/roles.js +5 -1
- package/dist/orgs/settings.controller.d.ts +1 -1
- package/dist/orgs/settings.service.d.ts +15 -3
- package/dist/orgs/settings.service.js +6 -2
- package/dist/overrides.d.ts +3 -0
- package/dist/overrides.js +2 -0
- package/dist/platform/actor.d.ts +48 -0
- package/dist/platform/actor.js +100 -0
- package/dist/platform/agent-docs.d.ts +18 -0
- package/dist/platform/agent-docs.js +59 -0
- package/dist/platform/availability.d.ts +14 -0
- package/dist/platform/availability.js +43 -0
- package/dist/platform/errors.d.ts +11 -0
- package/dist/platform/errors.js +26 -0
- package/dist/platform/exclusions.d.ts +12 -0
- package/dist/platform/exclusions.js +1387 -0
- package/dist/platform/method.d.ts +6 -0
- package/dist/platform/method.js +15 -0
- package/dist/platform/operation.d.ts +92 -0
- package/dist/platform/operation.js +35 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
- package/dist/platform/ops/agent-templates.ops.js +92 -0
- package/dist/platform/ops/agents.ops.d.ts +19 -0
- package/dist/platform/ops/agents.ops.js +294 -0
- package/dist/platform/ops/connectors.ops.d.ts +15 -0
- package/dist/platform/ops/connectors.ops.js +126 -0
- package/dist/platform/ops/errors.d.ts +11 -0
- package/dist/platform/ops/errors.js +22 -0
- package/dist/platform/ops/extensions.ops.d.ts +19 -0
- package/dist/platform/ops/extensions.ops.js +116 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
- package/dist/platform/ops/marketplaces.ops.js +157 -0
- package/dist/platform/ops/paging.d.ts +14 -0
- package/dist/platform/ops/paging.js +20 -0
- package/dist/platform/ops/platform.ops.d.ts +23 -0
- package/dist/platform/ops/platform.ops.js +158 -0
- package/dist/platform/ops/plugins.ops.d.ts +33 -0
- package/dist/platform/ops/plugins.ops.js +377 -0
- package/dist/platform/ops/requests.ops.d.ts +14 -0
- package/dist/platform/ops/requests.ops.js +153 -0
- package/dist/platform/ops/role.d.ts +4 -0
- package/dist/platform/ops/role.js +10 -0
- package/dist/platform/ops/skills.ops.d.ts +13 -0
- package/dist/platform/ops/skills.ops.js +98 -0
- package/dist/platform/ops/summary.d.ts +10 -0
- package/dist/platform/ops/summary.js +18 -0
- package/dist/platform/platform-ops.module.d.ts +7 -0
- package/dist/platform/platform-ops.module.js +55 -0
- package/dist/platform/platform.module.d.ts +8 -0
- package/dist/platform/platform.module.js +25 -0
- package/dist/platform/redact-orgs.d.ts +7 -0
- package/dist/platform/redact-orgs.js +52 -0
- package/dist/platform/registry.d.ts +30 -0
- package/dist/platform/registry.js +111 -0
- package/dist/roles/worker-role.d.ts +6 -4
- package/dist/roles/worker-role.js +14 -7
- package/dist/roles/worker.module.d.ts +1 -1
- package/dist/roles/worker.module.js +9 -1
- package/dist/runtime/context/build.d.ts +6 -4
- package/dist/runtime/context/build.js +26 -7
- package/dist/runtime/context/claude-tools.d.ts +2 -1
- package/dist/runtime/context/claude-tools.js +5 -4
- package/dist/runtime/context/compaction.js +9 -0
- package/dist/runtime/context/reminders.d.ts +2 -0
- package/dist/runtime/context/reminders.js +2 -0
- package/dist/runtime/context/skills.js +9 -2
- package/dist/runtime/context/tool-changes.d.ts +27 -0
- package/dist/runtime/context/tool-changes.js +60 -0
- package/dist/runtime/hook-calls.js +2 -0
- package/dist/runtime/langgraph-loop.d.ts +3 -1
- package/dist/runtime/langgraph-loop.js +35 -17
- package/dist/runtime/loop.d.ts +32 -4
- package/dist/runtime/maintenance.d.ts +7 -4
- package/dist/runtime/maintenance.js +23 -8
- package/dist/runtime/model-call.d.ts +30 -8
- package/dist/runtime/model-call.js +69 -19
- package/dist/runtime/run-control.d.ts +11 -1
- package/dist/runtime/run-control.js +12 -0
- package/dist/runtime/run-drafts.d.ts +85 -0
- package/dist/runtime/run-drafts.js +230 -0
- package/dist/runtime/run-jobs.d.ts +3 -5
- package/dist/runtime/run-jobs.js +3 -7
- package/dist/runtime/run-queue.d.ts +37 -3
- package/dist/runtime/run-queue.js +188 -11
- package/dist/runtime/run-worker.d.ts +11 -5
- package/dist/runtime/run-worker.js +54 -31
- package/dist/runtime/runtime.module.js +3 -0
- package/dist/runtime/step-log.d.ts +9 -4
- package/dist/runtime/step-log.js +8 -5
- package/dist/runtime/stream.controller.d.ts +23 -1
- package/dist/runtime/stream.controller.js +60 -3
- package/dist/runtime/stream.d.ts +4 -1
- package/dist/runtime/stream.js +27 -3
- package/dist/runtime/subagents/child.d.ts +55 -7
- package/dist/runtime/subagents/child.js +105 -7
- package/dist/runtime/subagents/definition.d.ts +12 -3
- package/dist/runtime/subagents/definition.js +43 -29
- package/dist/runtime/subagents/deliveries.d.ts +71 -0
- package/dist/runtime/subagents/deliveries.js +228 -0
- package/dist/runtime/subagents/dispatch.d.ts +115 -26
- package/dist/runtime/subagents/dispatch.js +212 -141
- package/dist/runtime/subagents/limits.d.ts +24 -5
- package/dist/runtime/subagents/limits.js +40 -6
- package/dist/runtime/subagents/messages.d.ts +95 -0
- package/dist/runtime/subagents/messages.js +328 -0
- package/dist/runtime/subagents/preamble.d.ts +4 -4
- package/dist/runtime/subagents/preamble.js +9 -7
- package/dist/runtime/subagents/progress.d.ts +8 -6
- package/dist/runtime/subagents/progress.js +11 -6
- package/dist/runtime/subagents/render.d.ts +30 -0
- package/dist/runtime/subagents/render.js +53 -0
- package/dist/runtime/subagents/roster.d.ts +24 -7
- package/dist/runtime/subagents/roster.js +47 -11
- package/dist/runtime/subagents/skill-fork.d.ts +3 -2
- package/dist/runtime/subagents/skill-fork.js +8 -4
- package/dist/runtime/subagents/status.d.ts +14 -0
- package/dist/runtime/subagents/status.js +23 -0
- package/dist/runtime/subagents/subagents.service.d.ts +7 -4
- package/dist/runtime/subagents/subagents.service.js +11 -6
- package/dist/runtime/usage-report.js +17 -12
- package/dist/runtime/waits.d.ts +140 -37
- package/dist/runtime/waits.js +394 -106
- package/dist/sandbox/jobs.d.ts +40 -13
- package/dist/sandbox/jobs.js +57 -20
- package/dist/sandbox/leases.d.ts +37 -54
- package/dist/sandbox/leases.js +71 -115
- package/dist/sandbox/providers.d.ts +2 -2
- package/dist/sandbox/providers.js +1 -1
- package/dist/sandbox/sandbox.module.d.ts +3 -2
- package/dist/sandbox/sandbox.module.js +4 -3
- package/dist/sandbox/sandbox.service.d.ts +229 -134
- package/dist/sandbox/sandbox.service.js +630 -409
- package/dist/skills/catalog.d.ts +3 -2
- package/dist/skills/catalog.js +21 -43
- package/dist/skills/changes.controller.d.ts +7 -0
- package/dist/skills/changes.controller.js +19 -1
- package/dist/skills/invoke.js +8 -3
- package/dist/skills/package.d.ts +20 -1
- package/dist/skills/package.js +28 -1
- package/dist/skills/skills.controller.d.ts +39 -4
- package/dist/skills/skills.controller.js +88 -10
- package/dist/skills/skills.module.js +10 -1
- package/dist/skills/skills.service.d.ts +106 -26
- package/dist/skills/skills.service.js +421 -75
- package/dist/skills/usable.d.ts +81 -0
- package/dist/skills/usable.js +379 -0
- package/dist/tools/approvals.service.d.ts +20 -2
- package/dist/tools/approvals.service.js +23 -4
- package/dist/tools/builtin-names.d.ts +21 -5
- package/dist/tools/builtin-names.js +30 -5
- package/dist/tools/builtins/agent.d.ts +23 -21
- package/dist/tools/builtins/agent.js +62 -55
- package/dist/tools/builtins/builtin-tools.d.ts +6 -2
- package/dist/tools/builtins/builtin-tools.js +37 -12
- package/dist/tools/builtins/handback.d.ts +28 -0
- package/dist/tools/builtins/handback.js +53 -0
- package/dist/tools/builtins/platform.d.ts +34 -0
- package/dist/tools/builtins/platform.js +362 -0
- package/dist/tools/builtins/sandbox/bash.js +13 -3
- package/dist/tools/builtins/sandbox/common.d.ts +43 -24
- package/dist/tools/builtins/sandbox/common.js +80 -45
- package/dist/tools/builtins/sandbox/edit.js +2 -2
- package/dist/tools/builtins/sandbox/glob.js +2 -2
- package/dist/tools/builtins/sandbox/grep.js +2 -4
- package/dist/tools/builtins/sandbox/index.d.ts +1 -1
- package/dist/tools/builtins/sandbox/index.js +1 -1
- package/dist/tools/builtins/sandbox/read.js +1 -1
- package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
- package/dist/tools/builtins/sandbox/task-output.js +30 -5
- package/dist/tools/builtins/sandbox/task-stop.js +2 -1
- package/dist/tools/builtins/sandbox/write.js +2 -2
- package/dist/tools/builtins/send-message.d.ts +56 -0
- package/dist/tools/builtins/send-message.js +100 -0
- package/dist/tools/builtins/skill-load.d.ts +22 -14
- package/dist/tools/builtins/skill-load.js +86 -57
- package/dist/tools/builtins/skill-write.js +1 -1
- package/dist/tools/builtins/web/extract.js +5 -1
- package/dist/tools/builtins/web/fetch.js +1 -0
- package/dist/tools/builtins/web/search.js +1 -0
- package/dist/tools/connectors.controller.d.ts +10 -0
- package/dist/tools/connectors.controller.js +12 -0
- package/dist/tools/connectors.service.d.ts +46 -5
- package/dist/tools/connectors.service.js +94 -15
- package/dist/tools/extension-tools.controller.d.ts +14 -0
- package/dist/tools/extension-tools.controller.js +37 -0
- package/dist/tools/info.d.ts +42 -1
- package/dist/tools/info.js +64 -1
- package/dist/tools/org-tool-switches.d.ts +74 -0
- package/dist/tools/org-tool-switches.js +184 -0
- package/dist/tools/pipeline.d.ts +46 -40
- package/dist/tools/pipeline.js +187 -364
- package/dist/tools/policy.d.ts +1 -1
- package/dist/tools/policy.js +36 -16
- package/dist/tools/registry.d.ts +98 -5
- package/dist/tools/registry.js +87 -9
- package/dist/tools/tools.module.js +12 -2
- package/dist/ui/views.d.ts +2 -1
- package/dist/ui/views.js +17 -3
- package/package.json +3 -3
- package/src/migrations/0074_subagent_tree.sql +50 -0
- package/src/migrations/0075_plugin_scope.sql +61 -0
- package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
- package/src/migrations/0077_scope_requests.sql +52 -0
- package/src/migrations/0078_scope_grant_switches.sql +18 -0
- package/src/migrations/0079_scope_live_install_switches.sql +19 -0
- package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
- package/src/migrations/0081_platform_components.sql +129 -0
- package/src/migrations/0082_platform_migration.sql +33 -0
- package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
- package/src/migrations/0084_org_owned_items.sql +85 -0
- package/src/migrations/0085_agent_templates_phase4.sql +45 -0
- package/src/migrations/0086_org_layering.sql +30 -0
- package/src/migrations/0087_approval_summary.sql +6 -0
- package/src/migrations/0088_environments.sql +80 -0
- package/dist/catalog/upgrade-targets.d.ts +0 -56
- package/dist/catalog/upgrade-targets.js +0 -90
- package/dist/conversations/sandbox-status.d.ts +0 -24
- package/dist/conversations/sandbox-status.js +0 -52
- package/dist/extensions/org-config.controller.d.ts +0 -32
- package/dist/extensions/org-config.controller.js +0 -70
|
@@ -8,26 +8,36 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
8
8
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
9
|
};
|
|
10
10
|
import { Inject, Injectable } from "@nestjs/common";
|
|
11
|
+
import { sql } from "kysely";
|
|
11
12
|
import { CATALOG_REQUESTS_LIST_MAX, CatalogRequestsService, } from "../catalog/requests.service.js";
|
|
13
|
+
import { ApiError } from "../errors.js";
|
|
14
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
15
|
+
import { roleAtLeast } from "../orgs/roles.js";
|
|
12
16
|
import { SKILL_CHANGES_LIST_MAX, SkillChangesService, } from "../skills/changes.service.js";
|
|
13
17
|
import { APPROVALS_LIST_MAX, ApprovalsService, } from "../tools/approvals.service.js";
|
|
18
|
+
/** The most open org notices one inbox read returns. */
|
|
19
|
+
export const ORG_NOTICES_LIST_MAX = 100;
|
|
14
20
|
/** 收件箱一次最多返回的事项数。 */
|
|
15
21
|
export const INBOX_MAX_ITEMS = 100;
|
|
16
22
|
/** 收件箱(计划取舍 C6):按类型汇总各来源的待处理事项。无状态,每次实时读 PG。 */
|
|
17
23
|
let InboxService = class InboxService {
|
|
18
24
|
approvals;
|
|
19
25
|
skillChanges;
|
|
26
|
+
kdb;
|
|
20
27
|
catalogRequests;
|
|
21
|
-
constructor(approvals, skillChanges, catalogRequests) {
|
|
28
|
+
constructor(approvals, skillChanges, kdb, catalogRequests) {
|
|
22
29
|
this.approvals = approvals;
|
|
23
30
|
this.skillChanges = skillChanges;
|
|
31
|
+
this.kdb = kdb;
|
|
24
32
|
this.catalogRequests = catalogRequests;
|
|
25
33
|
}
|
|
26
34
|
async list(orgId, accountId) {
|
|
27
|
-
const [approvals, changes, requests] = await Promise.all([
|
|
35
|
+
const [approvals, changes, requests, decided, notices] = await Promise.all([
|
|
28
36
|
this.approvals.list(orgId, accountId, "pending"),
|
|
29
37
|
this.skillChanges.listPending(orgId, accountId),
|
|
30
38
|
this.catalogRequests.listForOrgAdmin(orgId, accountId),
|
|
39
|
+
this.catalogRequests.listDecidedForRequester(orgId, accountId),
|
|
40
|
+
this.notices(orgId, accountId),
|
|
31
41
|
]);
|
|
32
42
|
const all = [
|
|
33
43
|
...approvals.map((a) => ({
|
|
@@ -48,6 +58,13 @@ let InboxService = class InboxService {
|
|
|
48
58
|
createdAt: r.createdAt,
|
|
49
59
|
request: r,
|
|
50
60
|
})),
|
|
61
|
+
...decided.map((r) => ({
|
|
62
|
+
type: "catalog_request_decided",
|
|
63
|
+
id: r.id,
|
|
64
|
+
createdAt: r.decidedAt ?? r.createdAt,
|
|
65
|
+
request: r,
|
|
66
|
+
})),
|
|
67
|
+
...notices.map((n) => ({ type: n.kind, id: n.id, createdAt: n.createdAt, notice: n })),
|
|
51
68
|
];
|
|
52
69
|
// 新的在前;同一时刻按 id 定序(结果稳定)
|
|
53
70
|
all.sort((a, b) => a.createdAt !== b.createdAt
|
|
@@ -62,17 +79,70 @@ let InboxService = class InboxService {
|
|
|
62
79
|
// 各来源自己也有上限:某个来源取满了也算还有更多
|
|
63
80
|
const full = approvals.length >= APPROVALS_LIST_MAX ||
|
|
64
81
|
changes.length >= SKILL_CHANGES_LIST_MAX ||
|
|
65
|
-
requests.length >= CATALOG_REQUESTS_LIST_MAX
|
|
82
|
+
requests.length >= CATALOG_REQUESTS_LIST_MAX ||
|
|
83
|
+
decided.length >= CATALOG_REQUESTS_LIST_MAX ||
|
|
84
|
+
notices.length >= ORG_NOTICES_LIST_MAX;
|
|
66
85
|
return {
|
|
67
86
|
items: all.slice(0, INBOX_MAX_ITEMS),
|
|
68
87
|
truncated: full || all.length > INBOX_MAX_ITEMS,
|
|
69
88
|
};
|
|
70
89
|
}
|
|
90
|
+
/** The org's open notices when the account is an org admin (else none), newest first. */
|
|
91
|
+
async notices(orgId, accountId) {
|
|
92
|
+
if (!(await this.isAdmin(orgId, accountId)))
|
|
93
|
+
return [];
|
|
94
|
+
const rows = await this.kdb.db
|
|
95
|
+
.selectFrom("org_notices")
|
|
96
|
+
.select(["id", "kind", "detail", "created_at"])
|
|
97
|
+
.where("org_id", "=", orgId)
|
|
98
|
+
.where("dismissed_at", "is", null)
|
|
99
|
+
.orderBy("created_at", "desc")
|
|
100
|
+
.orderBy("id")
|
|
101
|
+
.limit(ORG_NOTICES_LIST_MAX)
|
|
102
|
+
.execute();
|
|
103
|
+
return rows.map((r) => {
|
|
104
|
+
const base = { id: r.id, createdAt: r.created_at.toISOString() };
|
|
105
|
+
if (r.kind === "skill_renamed") {
|
|
106
|
+
return { ...base, kind: r.kind, skillRenamed: r.detail };
|
|
107
|
+
}
|
|
108
|
+
return { ...base, kind: r.kind, detail: r.detail };
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* An org admin dismisses an open notice (`POST /orgs/:orgId/inbox/notices/:id/dismiss`); for
|
|
113
|
+
* every admin of the org. Not an admin, or no open notice of the org with that id ->
|
|
114
|
+
* `inbox.notice_not_found`.
|
|
115
|
+
*/
|
|
116
|
+
async dismissNotice(orgId, accountId, id) {
|
|
117
|
+
const notFound = new ApiError("inbox.notice_not_found", "Notice not found");
|
|
118
|
+
if (!UUID_RE.test(id) || !(await this.isAdmin(orgId, accountId)))
|
|
119
|
+
throw notFound;
|
|
120
|
+
const r = await this.kdb.db
|
|
121
|
+
.updateTable("org_notices")
|
|
122
|
+
.set({ dismissed_at: sql `now()`, dismissed_by: accountId })
|
|
123
|
+
.where("id", "=", id)
|
|
124
|
+
.where("org_id", "=", orgId)
|
|
125
|
+
.where("dismissed_at", "is", null)
|
|
126
|
+
.executeTakeFirst();
|
|
127
|
+
if (r.numUpdatedRows === 0n)
|
|
128
|
+
throw notFound;
|
|
129
|
+
}
|
|
130
|
+
async isAdmin(orgId, accountId) {
|
|
131
|
+
const m = await this.kdb.db
|
|
132
|
+
.selectFrom("memberships")
|
|
133
|
+
.select("role")
|
|
134
|
+
.where("org_id", "=", orgId)
|
|
135
|
+
.where("account_id", "=", accountId)
|
|
136
|
+
.executeTakeFirst();
|
|
137
|
+
return m !== undefined && roleAtLeast(m.role, "admin");
|
|
138
|
+
}
|
|
71
139
|
};
|
|
72
140
|
InboxService = __decorate([
|
|
73
141
|
Injectable(),
|
|
74
142
|
__param(0, Inject(ApprovalsService)),
|
|
75
143
|
__param(1, Inject(SkillChangesService)),
|
|
76
|
-
__param(2, Inject(
|
|
144
|
+
__param(2, Inject(KernelDb)),
|
|
145
|
+
__param(3, Inject(CatalogRequestsService))
|
|
77
146
|
], InboxService);
|
|
78
147
|
export { InboxService };
|
|
148
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type OwnedRef, type Owner } from "../catalog/ownership.js";
|
|
2
|
+
import type { KernelSchemaDb, OrgNoticeKind } from "../db/kernel-schema.js";
|
|
3
|
+
export type { OrgNoticeKind };
|
|
4
|
+
/** The `detail` of each notice kind except `skill_renamed` (written by the platform migration). */
|
|
5
|
+
export interface OrgNoticeDetails {
|
|
6
|
+
/** An org was added to the item's list, or its scope widened (`all_orgs`). */
|
|
7
|
+
/** `displayName`: a plugin's display name, which the inbox names it by (null otherwise). */
|
|
8
|
+
item_shared: {
|
|
9
|
+
ref: OwnedRef;
|
|
10
|
+
name: string;
|
|
11
|
+
displayName: LocalizedName;
|
|
12
|
+
org: {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
} | "all_orgs";
|
|
16
|
+
};
|
|
17
|
+
/** A shared org-owned item changed version, for the orgs it is on in. */
|
|
18
|
+
shared_item_updated: {
|
|
19
|
+
ref: OwnedRef;
|
|
20
|
+
name: string;
|
|
21
|
+
displayName: LocalizedName;
|
|
22
|
+
from: string;
|
|
23
|
+
to: string;
|
|
24
|
+
owner: Owner;
|
|
25
|
+
};
|
|
26
|
+
/** `displayName`: the plugin's display name, which the inbox names it by (null without one). */
|
|
27
|
+
upload_confirmed: {
|
|
28
|
+
itemId: string;
|
|
29
|
+
name: string;
|
|
30
|
+
displayName: LocalizedName;
|
|
31
|
+
version: string;
|
|
32
|
+
};
|
|
33
|
+
upload_rejected: {
|
|
34
|
+
itemId: string;
|
|
35
|
+
name: string;
|
|
36
|
+
displayName: LocalizedName;
|
|
37
|
+
version: string;
|
|
38
|
+
reason: string | null;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
type LocalizedName = {
|
|
42
|
+
zh: string;
|
|
43
|
+
en: string;
|
|
44
|
+
} | null;
|
|
45
|
+
/** A catalog item's display name for an upload notice (null without one, or for an unknown id). */
|
|
46
|
+
export declare function itemDisplayName(db: KernelSchemaDb, itemId: string): Promise<LocalizedName>;
|
|
47
|
+
/** Writes an org notice in the caller's transaction. */
|
|
48
|
+
export declare function addOrgNotice<K extends keyof OrgNoticeDetails>(db: KernelSchemaDb, orgId: string, kind: K, detail: OrgNoticeDetails[K]): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Tells the owner org that its item was shared (`item_shared`): with each org of `orgs` (the owner
|
|
51
|
+
* itself is skipped), or with `all_orgs`. A platform-owned item writes nothing.
|
|
52
|
+
*/
|
|
53
|
+
export declare function notifyItemShared(db: KernelSchemaDb, ownerOrgId: string | null, ref: OwnedRef, name: string, orgs: readonly string[] | "all_orgs"): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Tells every live org the org-owned item is on in, except its owner (P3-18, {@link orgsUsing}),
|
|
56
|
+
* that it changed version (`shared_item_updated`); returns how many orgs were told. A platform-owned
|
|
57
|
+
* or missing item tells nobody.
|
|
58
|
+
*/
|
|
59
|
+
export declare function notifySharedUpdate(db: KernelSchemaDb, ref: OwnedRef, change: {
|
|
60
|
+
name: string;
|
|
61
|
+
from: string;
|
|
62
|
+
to: string;
|
|
63
|
+
}): Promise<number>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Org notices (`org_notices`, plugin scope phase 3, spec §14, ruling P3-22): what an org's admins
|
|
2
|
+
// are told about shared items and uploads, until one of them dismisses it. The writers run in the
|
|
3
|
+
// caller's transaction, so a notice exists exactly when its change does.
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
5
|
+
import { orgsUsing, ownerOf, ownersOf } from "../catalog/ownership.js";
|
|
6
|
+
/** An owned ref's display name: a plugin's (skills and agent templates have none). */
|
|
7
|
+
const refDisplayName = (db, ref) => ref.kind === "plugin" ? itemDisplayName(db, ref.id) : Promise.resolve(null);
|
|
8
|
+
/** A catalog item's display name for an upload notice (null without one, or for an unknown id). */
|
|
9
|
+
export async function itemDisplayName(db, itemId) {
|
|
10
|
+
const row = await db
|
|
11
|
+
.selectFrom("catalog_items")
|
|
12
|
+
.select("display_name")
|
|
13
|
+
.where("id", "=", itemId)
|
|
14
|
+
.executeTakeFirst();
|
|
15
|
+
return row?.display_name ?? null;
|
|
16
|
+
}
|
|
17
|
+
/** Writes an org notice in the caller's transaction. */
|
|
18
|
+
export async function addOrgNotice(db, orgId, kind, detail) {
|
|
19
|
+
await db
|
|
20
|
+
.insertInto("org_notices")
|
|
21
|
+
.values({ id: randomUUID(), org_id: orgId, kind, detail: JSON.stringify(detail) })
|
|
22
|
+
.execute();
|
|
23
|
+
}
|
|
24
|
+
const OWNER_TABLE = {
|
|
25
|
+
plugin: "catalog_items",
|
|
26
|
+
skill: "platform_skills",
|
|
27
|
+
agent_template: "platform_agent_templates",
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Tells the owner org that its item was shared (`item_shared`): with each org of `orgs` (the owner
|
|
31
|
+
* itself is skipped), or with `all_orgs`. A platform-owned item writes nothing.
|
|
32
|
+
*/
|
|
33
|
+
export async function notifyItemShared(db, ownerOrgId, ref, name, orgs) {
|
|
34
|
+
if (ownerOrgId === null)
|
|
35
|
+
return;
|
|
36
|
+
const displayName = await refDisplayName(db, ref);
|
|
37
|
+
if (orgs === "all_orgs") {
|
|
38
|
+
await addOrgNotice(db, ownerOrgId, "item_shared", {
|
|
39
|
+
ref,
|
|
40
|
+
name,
|
|
41
|
+
displayName,
|
|
42
|
+
org: "all_orgs",
|
|
43
|
+
});
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const targets = [...new Set(orgs)].filter((o) => o !== ownerOrgId);
|
|
47
|
+
if (targets.length === 0)
|
|
48
|
+
return;
|
|
49
|
+
const rows = await db
|
|
50
|
+
.selectFrom("orgs")
|
|
51
|
+
.select(["id", "name"])
|
|
52
|
+
.where("id", "in", targets)
|
|
53
|
+
.execute();
|
|
54
|
+
const names = new Map(rows.map((r) => [r.id, r.name]));
|
|
55
|
+
for (const id of targets) {
|
|
56
|
+
await addOrgNotice(db, ownerOrgId, "item_shared", {
|
|
57
|
+
ref,
|
|
58
|
+
name,
|
|
59
|
+
displayName,
|
|
60
|
+
org: { id, name: names.get(id) ?? id },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Tells every live org the org-owned item is on in, except its owner (P3-18, {@link orgsUsing}),
|
|
66
|
+
* that it changed version (`shared_item_updated`); returns how many orgs were told. A platform-owned
|
|
67
|
+
* or missing item tells nobody.
|
|
68
|
+
*/
|
|
69
|
+
export async function notifySharedUpdate(db, ref, change) {
|
|
70
|
+
const row = await db
|
|
71
|
+
.selectFrom(OWNER_TABLE[ref.kind])
|
|
72
|
+
.select("owner_org_id")
|
|
73
|
+
.where("id", "=", ref.id)
|
|
74
|
+
.executeTakeFirst();
|
|
75
|
+
if (!row || row.owner_org_id === null)
|
|
76
|
+
return 0;
|
|
77
|
+
const owner = ownerOf(row.owner_org_id, await ownersOf(db, [row.owner_org_id]));
|
|
78
|
+
const using = await orgsUsing(db, ref, { except: row.owner_org_id });
|
|
79
|
+
const displayName = await refDisplayName(db, ref);
|
|
80
|
+
for (const o of using) {
|
|
81
|
+
await addOrgNotice(db, o.id, "shared_item_updated", {
|
|
82
|
+
ref,
|
|
83
|
+
name: change.name,
|
|
84
|
+
displayName,
|
|
85
|
+
from: change.from,
|
|
86
|
+
to: change.to,
|
|
87
|
+
owner,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return using.length;
|
|
91
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type Principal } from "../identity/principal.js";
|
|
3
|
+
import { PlatformInboxService, type PlatformInboxView } from "./platform-inbox.service.js";
|
|
4
|
+
declare const NoticeParamsSchema: z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
}, z.core.$strip>;
|
|
7
|
+
/**
|
|
8
|
+
* The super admin's inbox (`GET /api/v1/admin/inbox`): the platform's requests, permission
|
|
9
|
+
* confirmations, scope sync failures and the migration run that needs a look, newest first, at
|
|
10
|
+
* most 100 (`truncated`: more, `total`: how many in all), and `GET /api/v1/admin/inbox/count`
|
|
11
|
+
* (`{ total }`, the sidebar's count). Super admins only (web session or personal token).
|
|
12
|
+
*/
|
|
13
|
+
export declare class PlatformInboxController {
|
|
14
|
+
private readonly inbox;
|
|
15
|
+
constructor(inbox: PlatformInboxService);
|
|
16
|
+
list(): Promise<PlatformInboxView>;
|
|
17
|
+
count(): Promise<{
|
|
18
|
+
total: number;
|
|
19
|
+
}>;
|
|
20
|
+
/** A super admin dismisses a platform notice (`ownership_transferred`) for every super admin. */
|
|
21
|
+
dismissNotice(principal: Principal, params: z.infer<typeof NoticeParamsSchema>): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { Controller, Get, HttpCode, Inject, Post } from "@nestjs/common";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { CurrentPrincipal, requireUser, SuperAdmin, } from "../identity/principal.js";
|
|
13
|
+
import { createZodDto } from "../infra/validation/create-zod-dto.js";
|
|
14
|
+
import { ZParam } from "../infra/validation/zod-params.js";
|
|
15
|
+
import { PlatformInboxService } from "./platform-inbox.service.js";
|
|
16
|
+
const NoticeParamsSchema = z.object({ id: z.string().min(1).max(100) });
|
|
17
|
+
class NoticeParams extends createZodDto(NoticeParamsSchema, "PlatformInboxNoticeParams") {
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The super admin's inbox (`GET /api/v1/admin/inbox`): the platform's requests, permission
|
|
21
|
+
* confirmations, scope sync failures and the migration run that needs a look, newest first, at
|
|
22
|
+
* most 100 (`truncated`: more, `total`: how many in all), and `GET /api/v1/admin/inbox/count`
|
|
23
|
+
* (`{ total }`, the sidebar's count). Super admins only (web session or personal token).
|
|
24
|
+
*/
|
|
25
|
+
let PlatformInboxController = class PlatformInboxController {
|
|
26
|
+
inbox;
|
|
27
|
+
constructor(inbox) {
|
|
28
|
+
this.inbox = inbox;
|
|
29
|
+
}
|
|
30
|
+
list() {
|
|
31
|
+
return this.inbox.list();
|
|
32
|
+
}
|
|
33
|
+
async count() {
|
|
34
|
+
return { total: await this.inbox.count() };
|
|
35
|
+
}
|
|
36
|
+
/** A super admin dismisses a platform notice (`ownership_transferred`) for every super admin. */
|
|
37
|
+
async dismissNotice(principal, params) {
|
|
38
|
+
await this.inbox.dismissNotice(requireUser(principal).account.id, params.id);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
__decorate([
|
|
42
|
+
Get()
|
|
43
|
+
], PlatformInboxController.prototype, "list", null);
|
|
44
|
+
__decorate([
|
|
45
|
+
Get("count")
|
|
46
|
+
], PlatformInboxController.prototype, "count", null);
|
|
47
|
+
__decorate([
|
|
48
|
+
Post("notices/:id/dismiss"),
|
|
49
|
+
HttpCode(204),
|
|
50
|
+
__param(0, CurrentPrincipal()),
|
|
51
|
+
__param(1, ZParam(NoticeParams))
|
|
52
|
+
], PlatformInboxController.prototype, "dismissNotice", null);
|
|
53
|
+
PlatformInboxController = __decorate([
|
|
54
|
+
Controller("api/v1/admin/inbox"),
|
|
55
|
+
SuperAdmin(),
|
|
56
|
+
__param(0, Inject(PlatformInboxService))
|
|
57
|
+
], PlatformInboxController);
|
|
58
|
+
export { PlatformInboxController };
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import type { LocalizedName } from "@capybara-hq/plugin-sdk";
|
|
2
|
+
import { type CatalogItemView, CatalogService } from "../catalog/catalog.service.js";
|
|
3
|
+
import { CatalogRequestsService, type CatalogRequestView } from "../catalog/requests.service.js";
|
|
4
|
+
import type { ScopeSyncOp } from "../db/kernel-schema.js";
|
|
5
|
+
import { KernelDb } from "../infra/database/kernel-db.js";
|
|
6
|
+
import type { PlatformNoticeDetails } from "./platform-notices.js";
|
|
7
|
+
/** The most items one platform inbox read returns. */
|
|
8
|
+
export declare const PLATFORM_INBOX_MAX_ITEMS = 100;
|
|
9
|
+
/** The most open scope sync failures one read takes. */
|
|
10
|
+
export declare const SCOPE_SYNC_FAILURES_LIST_MAX = 200;
|
|
11
|
+
/**
|
|
12
|
+
* A platform components migration run unfinished this long after its start is stuck (its worker
|
|
13
|
+
* stopped mid-run; a run takes seconds, and the next one starts at the next worker start or day).
|
|
14
|
+
*/
|
|
15
|
+
export declare const MIGRATION_RUN_STUCK_MS: number;
|
|
16
|
+
/**
|
|
17
|
+
* An open failure of the plugin scope sync: its last attempt to install the plugin in the org, to
|
|
18
|
+
* uninstall it, or to install the dependencies a platform update added (`dependencies`) failed,
|
|
19
|
+
* and the org still differs from the scope in that direction.
|
|
20
|
+
*/
|
|
21
|
+
export interface ScopeSyncFailureView {
|
|
22
|
+
item: {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
displayName: LocalizedName | null;
|
|
26
|
+
};
|
|
27
|
+
org: {
|
|
28
|
+
id: string;
|
|
29
|
+
name: string;
|
|
30
|
+
};
|
|
31
|
+
op: ScopeSyncOp;
|
|
32
|
+
/** The error code (`internal` for an unexpected error) and its message. */
|
|
33
|
+
code: string;
|
|
34
|
+
message: string;
|
|
35
|
+
failedAt: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The latest platform components migration run (`platform_migration_runs`) when it needs a look:
|
|
39
|
+
* finished with catalog items whose components could not be written (`itemsFailed`,
|
|
40
|
+
* `<name>@<version>`), or `stuck` (unfinished {@link MIGRATION_RUN_STUCK_MS} after its start).
|
|
41
|
+
*/
|
|
42
|
+
export interface MigrationRunView {
|
|
43
|
+
id: string;
|
|
44
|
+
startedAt: string;
|
|
45
|
+
finishedAt: string | null;
|
|
46
|
+
stuck: boolean;
|
|
47
|
+
itemsFailed: string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* One item of the super admin's inbox (by `type`). Nothing is decided in the inbox: each item is
|
|
51
|
+
* acted on where it lives (the web links to it).
|
|
52
|
+
* - `catalog_request`: an org's pending request to the platform (`access`: use a plugin shown to
|
|
53
|
+
* it; `import`: bring in a marketplace entry), as `GET /admin/catalog/requests` lists them;
|
|
54
|
+
* - `permission_confirmation`: a platform plugin whose extension permissions wait for a super
|
|
55
|
+
* admin's confirmation (`GET /admin/catalog/items?pending=true`), `id` = the item's;
|
|
56
|
+
* - `org_upload_pending`: an org-owned plugin whose uploaded version (with an extension) waits for
|
|
57
|
+
* the super admin in 待确认 (ruling P3-22; confirmed or rejected there), `id` = the item's;
|
|
58
|
+
* - `scope_sync_failed`: an open scope sync failure, `id` = `<itemId>/<orgId>`;
|
|
59
|
+
* - `platform_migration`: the latest migration run, failed items or stuck, `id` = the run's;
|
|
60
|
+
* - `ownership_transferred`: a deleted org's shared item now belongs to the platform, until a
|
|
61
|
+
* super admin dismisses it (`POST admin/inbox/notices/:id/dismiss`).
|
|
62
|
+
*/
|
|
63
|
+
export type PlatformInboxItem = {
|
|
64
|
+
type: "catalog_request";
|
|
65
|
+
id: string;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
request: CatalogRequestView;
|
|
68
|
+
} | {
|
|
69
|
+
type: "permission_confirmation";
|
|
70
|
+
id: string;
|
|
71
|
+
createdAt: string;
|
|
72
|
+
item: CatalogItemView;
|
|
73
|
+
} | {
|
|
74
|
+
type: "org_upload_pending";
|
|
75
|
+
id: string;
|
|
76
|
+
createdAt: string;
|
|
77
|
+
item: CatalogItemView;
|
|
78
|
+
} | {
|
|
79
|
+
type: "scope_sync_failed";
|
|
80
|
+
id: string;
|
|
81
|
+
createdAt: string;
|
|
82
|
+
failure: ScopeSyncFailureView;
|
|
83
|
+
} | {
|
|
84
|
+
type: "platform_migration";
|
|
85
|
+
id: string;
|
|
86
|
+
createdAt: string;
|
|
87
|
+
run: MigrationRunView;
|
|
88
|
+
} | {
|
|
89
|
+
type: "ownership_transferred";
|
|
90
|
+
id: string;
|
|
91
|
+
createdAt: string;
|
|
92
|
+
notice: PlatformNoticeView;
|
|
93
|
+
};
|
|
94
|
+
/** An open platform notice (`platform_notices`, kind `ownership_transferred`). */
|
|
95
|
+
export interface PlatformNoticeView {
|
|
96
|
+
id: string;
|
|
97
|
+
kind: "ownership_transferred";
|
|
98
|
+
createdAt: string;
|
|
99
|
+
detail: PlatformNoticeDetails["ownership_transferred"];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* `GET /admin/inbox`: newest first, at most {@link PLATFORM_INBOX_MAX_ITEMS}; `truncated`: more;
|
|
103
|
+
* `total`: how many items wait in all (also `GET /admin/inbox/count`).
|
|
104
|
+
*/
|
|
105
|
+
export interface PlatformInboxView {
|
|
106
|
+
items: PlatformInboxItem[];
|
|
107
|
+
truncated: boolean;
|
|
108
|
+
total: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The super admin's inbox (plugin scope spec §5.1 rule 5, §13.5): what waits on the platform,
|
|
112
|
+
* gathered from the sources the admin pages read (the 待确认 tab's requests and permission
|
|
113
|
+
* confirmations), plus the scope sync's open failures and the platform components migration's
|
|
114
|
+
* latest run. Stateless, read live from PG.
|
|
115
|
+
*/
|
|
116
|
+
export declare class PlatformInboxService {
|
|
117
|
+
private readonly requests;
|
|
118
|
+
private readonly catalog;
|
|
119
|
+
private readonly kdb;
|
|
120
|
+
constructor(requests: Pick<CatalogRequestsService, "listDeployment" | "countPendingDeployment">, catalog: Pick<CatalogService, "list">, kdb: KernelDb);
|
|
121
|
+
list(): Promise<PlatformInboxView>;
|
|
122
|
+
/**
|
|
123
|
+
* How many items wait (the sidebar's count): the same sources, counted where they can be (the
|
|
124
|
+
* requests and the failures; the permission confirmations are the catalog's pending list).
|
|
125
|
+
*/
|
|
126
|
+
count(): Promise<number>;
|
|
127
|
+
private countNotices;
|
|
128
|
+
/** The open platform notices, newest first, at most {@link PLATFORM_INBOX_MAX_ITEMS}. */
|
|
129
|
+
private notices;
|
|
130
|
+
/**
|
|
131
|
+
* A super admin dismisses a platform notice (for every super admin). Dismissing one already
|
|
132
|
+
* dismissed is fine; no notice with that id -> `inbox.notice_not_found`.
|
|
133
|
+
*/
|
|
134
|
+
dismissNotice(accountId: string, id: string): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* The open failures still worth a look, joined to their item and org: of a live item and org,
|
|
137
|
+
* and the pair still differs in the failed direction (a person may have converged it meanwhile):
|
|
138
|
+
* an install failure while the org has no live install of the item; an uninstall or dependencies
|
|
139
|
+
* failure while it has one.
|
|
140
|
+
*/
|
|
141
|
+
private failureRows;
|
|
142
|
+
private countScopeSyncFailures;
|
|
143
|
+
/** The open scope sync failures ({@link failureRows}), newest first. */
|
|
144
|
+
private scopeSyncFailures;
|
|
145
|
+
/**
|
|
146
|
+
* The latest migration run when it needs a look (see {@link MigrationRunView}); null when it
|
|
147
|
+
* finished without failed items, is still running, or there was none. An earlier run's failure
|
|
148
|
+
* is not shown: each run tries every unwritten item again.
|
|
149
|
+
*/
|
|
150
|
+
private migrationRun;
|
|
151
|
+
}
|