@capybara-hq/kernel 0.1.0-rc.6 → 0.1.0-rc.7
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 +27 -3
- package/dist/admin/admin.controller.d.ts +8 -72
- package/dist/admin/admin.controller.js +21 -46
- package/dist/admin/admin.schemas.d.ts +57 -0
- package/dist/admin/admin.schemas.js +50 -0
- package/dist/admin/extensions.controller.d.ts +10 -0
- package/dist/admin/extensions.controller.js +18 -0
- package/dist/admin/extensions.schemas.d.ts +7 -0
- package/dist/admin/extensions.schemas.js +10 -0
- package/dist/admin/limit-defaults.d.ts +20 -0
- package/dist/admin/limit-defaults.js +10 -0
- package/dist/agents/agent-profile.service.d.ts +7 -5
- package/dist/agents/agent-profile.service.js +14 -9
- package/dist/agents/agents.controller.d.ts +7 -287
- package/dist/agents/agents.controller.js +7 -67
- package/dist/agents/agents.schemas.d.ts +389 -0
- package/dist/agents/agents.schemas.js +126 -0
- package/dist/agents/agents.service.d.ts +13 -5
- package/dist/agents/agents.service.js +67 -13
- package/dist/agents/definition.d.ts +47 -19
- package/dist/agents/definition.js +119 -38
- package/dist/agents/from-template.d.ts +2 -2
- package/dist/agents/from-template.js +76 -45
- package/dist/agents/from-template.service.d.ts +12 -0
- package/dist/agents/from-template.service.js +20 -3
- package/dist/agents/models.controller.d.ts +1 -2
- package/dist/agents/models.controller.js +1 -1
- package/dist/agents/org-templates.d.ts +13 -3
- package/dist/agents/org-templates.js +69 -28
- package/dist/agents/pending-connector-requests.d.ts +2 -0
- package/dist/agents/pending-connector-requests.js +1 -1
- package/dist/agents/pending-connectors.controller.d.ts +1 -1
- package/dist/agents/pending-connectors.controller.js +2 -2
- package/dist/agents/pending-connectors.service.d.ts +2 -2
- package/dist/agents/pending-connectors.service.js +19 -19
- package/dist/agents/profile.d.ts +18 -0
- package/dist/agents/profile.js +5 -1
- package/dist/agents/templates.controller.d.ts +8 -17
- package/dist/agents/templates.controller.js +13 -31
- package/dist/agents/templates.schemas.d.ts +20 -0
- package/dist/agents/templates.schemas.js +45 -0
- package/dist/background/background.controller.js +3 -2
- package/dist/background/background.schemas.d.ts +10 -0
- package/dist/background/background.schemas.js +16 -0
- package/dist/background/tasks.service.d.ts +1 -1
- package/dist/background/tasks.service.js +7 -2
- package/dist/catalog/admin-catalog.controller.d.ts +4 -57
- package/dist/catalog/admin-catalog.controller.js +8 -45
- package/dist/catalog/admin-catalog.schemas.d.ts +72 -0
- package/dist/catalog/admin-catalog.schemas.js +92 -0
- package/dist/catalog/catalog-content.d.ts +12 -2
- package/dist/catalog/catalog-scope.service.js +8 -2
- package/dist/catalog/catalog.service.d.ts +2 -0
- package/dist/catalog/catalog.service.js +3 -0
- package/dist/catalog/component-scope.controller.d.ts +3 -65
- package/dist/catalog/component-scope.controller.js +3 -56
- package/dist/catalog/component-scope.schemas.d.ts +114 -0
- package/dist/catalog/component-scope.schemas.js +97 -0
- package/dist/catalog/component-scope.service.d.ts +28 -4
- package/dist/catalog/component-scope.service.js +55 -3
- package/dist/catalog/component-state.d.ts +9 -2
- package/dist/catalog/component-state.js +22 -13
- package/dist/catalog/marketplaces.controller.d.ts +5 -35
- package/dist/catalog/marketplaces.controller.js +6 -34
- package/dist/catalog/marketplaces.schemas.d.ts +48 -0
- package/dist/catalog/marketplaces.schemas.js +53 -0
- package/dist/catalog/marketplaces.service.d.ts +15 -1
- package/dist/catalog/marketplaces.service.js +22 -1
- package/dist/catalog/org-catalog.controller.d.ts +6 -62
- package/dist/catalog/org-catalog.controller.js +12 -66
- package/dist/catalog/org-catalog.schemas.d.ts +79 -0
- package/dist/catalog/org-catalog.schemas.js +82 -0
- package/dist/catalog/org-catalog.service.d.ts +9 -2
- package/dist/catalog/org-catalog.service.js +38 -5
- package/dist/catalog/org-extension.controller.d.ts +1 -12
- package/dist/catalog/org-extension.controller.js +1 -10
- package/dist/catalog/org-extension.schemas.d.ts +15 -0
- package/dist/catalog/org-extension.schemas.js +22 -0
- package/dist/catalog/org-plugin-uploads.controller.d.ts +2 -19
- package/dist/catalog/org-plugin-uploads.controller.js +15 -28
- package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
- package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
- package/dist/catalog/owned-items.d.ts +6 -2
- package/dist/catalog/owned-items.js +16 -4
- package/dist/catalog/platform-components.d.ts +2 -0
- package/dist/catalog/platform-components.js +2 -0
- package/dist/catalog/plugin-import.js +1 -0
- package/dist/catalog/plugin-install.js +1 -1
- package/dist/catalog/requests.service.d.ts +2 -1
- package/dist/catalog/requests.service.js +6 -2
- package/dist/channels/channels.schemas.d.ts +33 -0
- package/dist/channels/channels.schemas.js +34 -0
- package/dist/channels/connections.controller.d.ts +2 -29
- package/dist/channels/connections.controller.js +1 -23
- package/dist/channels/connections.service.d.ts +8 -2
- package/dist/channels/connections.service.js +23 -5
- package/dist/channels/inbound.js +4 -0
- package/dist/conversations/conversations.controller.d.ts +16 -37
- package/dist/conversations/conversations.controller.js +16 -56
- package/dist/conversations/conversations.schemas.d.ts +52 -0
- package/dist/conversations/conversations.schemas.js +79 -0
- package/dist/conversations/conversations.service.d.ts +9 -1
- package/dist/conversations/conversations.service.js +23 -18
- package/dist/conversations/events.d.ts +80 -6
- package/dist/conversations/events.js +60 -5
- package/dist/conversations/message-context.d.ts +28 -0
- package/dist/conversations/message-context.js +56 -0
- package/dist/conversations/queue.d.ts +2 -1
- package/dist/conversations/queue.js +11 -2
- package/dist/db/kernel-schema.d.ts +20 -0
- package/dist/environments/environments.schemas.d.ts +3 -0
- package/dist/environments/environments.schemas.js +14 -0
- package/dist/environments/environments.service.d.ts +16 -4
- package/dist/environments/environments.service.js +58 -13
- package/dist/errors.d.ts +3 -0
- package/dist/errors.js +3 -0
- package/dist/evals/evals.schemas.d.ts +110 -0
- package/dist/evals/evals.schemas.js +107 -0
- package/dist/evals/reconstruct.js +18 -11
- package/dist/evals/recorded-tools.d.ts +2 -1
- package/dist/evals/recorded-tools.js +11 -3
- package/dist/evals/run-replay.d.ts +8 -1
- package/dist/evals/run-replay.js +13 -0
- package/dist/evals/runs.controller.d.ts +2 -57
- package/dist/evals/runs.controller.js +1 -42
- package/dist/evals/runs.service.d.ts +6 -6
- package/dist/evals/runs.service.js +32 -18
- package/dist/evals/sets.controller.d.ts +2 -28
- package/dist/evals/sets.controller.js +1 -31
- package/dist/evals/sets.service.d.ts +7 -7
- package/dist/evals/sets.service.js +23 -17
- package/dist/evals/snapshot.d.ts +3 -2
- package/dist/evals/snapshot.js +17 -4
- package/dist/extensions/admin-ops.d.ts +5 -3
- package/dist/extensions/admin-ops.js +17 -12
- package/dist/extensions/deployment-config.d.ts +16 -1
- package/dist/extensions/deployment-config.js +83 -0
- package/dist/extensions/extensions.module.js +3 -0
- package/dist/extensions/host.d.ts +33 -2
- package/dist/extensions/host.js +107 -1
- package/dist/extensions/installs.d.ts +5 -0
- package/dist/extensions/installs.js +12 -0
- package/dist/extensions/org-config.d.ts +17 -2
- package/dist/extensions/org-config.js +23 -4
- package/dist/extensions/point-defaults.controller.d.ts +2 -8
- package/dist/extensions/point-defaults.controller.js +1 -3
- package/dist/extensions/point-defaults.d.ts +3 -1
- package/dist/extensions/point-defaults.js +4 -2
- package/dist/extensions/point-defaults.schemas.d.ts +9 -0
- package/dist/extensions/point-defaults.schemas.js +14 -0
- package/dist/extensions/unavailable.d.ts +49 -0
- package/dist/extensions/unavailable.js +113 -0
- package/dist/files/previewers.controller.js +2 -3
- package/dist/files/previewers.d.ts +1 -1
- package/dist/files/previewers.js +4 -4
- package/dist/files/previewers.schemas.d.ts +10 -0
- package/dist/files/previewers.schemas.js +9 -0
- package/dist/http/api.module.js +2 -0
- package/dist/identity/accounts.d.ts +43 -4
- package/dist/identity/accounts.js +74 -6
- package/dist/identity/auth.guard.js +10 -1
- package/dist/identity/cookies.d.ts +6 -0
- package/dist/identity/cookies.js +14 -0
- package/dist/identity/identity.module.js +3 -0
- package/dist/identity/initial-passwords.controller.d.ts +22 -0
- package/dist/identity/initial-passwords.controller.js +49 -0
- package/dist/identity/initial-passwords.d.ts +61 -0
- package/dist/identity/initial-passwords.job.d.ts +16 -0
- package/dist/identity/initial-passwords.job.js +46 -0
- package/dist/identity/initial-passwords.js +159 -0
- package/dist/identity/me.controller.d.ts +14 -0
- package/dist/identity/me.controller.js +39 -1
- package/dist/identity/principal.d.ts +8 -0
- package/dist/identity/principal.js +8 -0
- package/dist/identity/settings.d.ts +3 -1
- package/dist/identity/settings.js +6 -4
- package/dist/inbox/inbox.schemas.d.ts +8 -0
- package/dist/inbox/inbox.schemas.js +11 -0
- package/dist/inbox/platform-inbox.controller.d.ts +1 -1
- package/dist/inbox/platform-inbox.controller.js +2 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.js +6 -0
- package/dist/lifecycle/kernel-lifecycle.js +4 -0
- package/dist/models/enablement.d.ts +2 -0
- package/dist/models/enablement.js +1 -0
- package/dist/models/org-models.schemas.d.ts +8 -0
- package/dist/models/org-models.schemas.js +22 -0
- package/dist/models/prices.d.ts +3 -1
- package/dist/models/prices.js +7 -5
- package/dist/models/purposes.d.ts +12 -2
- package/dist/models/purposes.js +22 -8
- package/dist/orgs/orgs.controller.d.ts +2 -5
- package/dist/orgs/orgs.controller.js +3 -6
- package/dist/orgs/orgs.schemas.d.ts +8 -0
- package/dist/orgs/orgs.schemas.js +16 -0
- package/dist/orgs/orgs.service.d.ts +3 -1
- package/dist/orgs/orgs.service.js +6 -4
- package/dist/orgs/settings.service.d.ts +9 -1
- package/dist/orgs/settings.service.js +20 -5
- package/dist/overrides.d.ts +4 -0
- package/dist/overrides.js +2 -0
- package/dist/platform/errors.d.ts +21 -4
- package/dist/platform/errors.js +45 -6
- package/dist/platform/exclusions.d.ts +2 -3
- package/dist/platform/exclusions.js +68 -849
- package/dist/platform/method.js +1 -1
- package/dist/platform/operation.d.ts +82 -5
- package/dist/platform/operation.js +62 -7
- package/dist/platform/ops/accounts.ops.d.ts +32 -0
- package/dist/platform/ops/accounts.ops.js +291 -0
- package/dist/platform/ops/admin.ops.d.ts +36 -0
- package/dist/platform/ops/admin.ops.js +389 -0
- package/dist/platform/ops/agent-skills.ops.d.ts +24 -0
- package/dist/platform/ops/agent-skills.ops.js +226 -0
- package/dist/platform/ops/agent-templates.ops.d.ts +4 -1
- package/dist/platform/ops/agent-templates.ops.js +194 -14
- package/dist/platform/ops/agents.ops.d.ts +19 -1
- package/dist/platform/ops/agents.ops.js +481 -58
- package/dist/platform/ops/approvals.ops.d.ts +30 -0
- package/dist/platform/ops/approvals.ops.js +116 -0
- package/dist/platform/ops/background.ops.d.ts +14 -0
- package/dist/platform/ops/background.ops.js +134 -0
- package/dist/platform/ops/catalog-admin.ops.d.ts +74 -0
- package/dist/platform/ops/catalog-admin.ops.js +587 -0
- package/dist/platform/ops/channels.ops.d.ts +16 -0
- package/dist/platform/ops/channels.ops.js +195 -0
- package/dist/platform/ops/components.ops.d.ts +46 -0
- package/dist/platform/ops/components.ops.js +853 -0
- package/dist/platform/ops/connectors.ops.d.ts +4 -2
- package/dist/platform/ops/connectors.ops.js +68 -6
- package/dist/platform/ops/conversations.ops.d.ts +30 -0
- package/dist/platform/ops/conversations.ops.js +470 -0
- package/dist/platform/ops/environments.ops.d.ts +26 -0
- package/dist/platform/ops/environments.ops.js +289 -0
- package/dist/platform/ops/errors.d.ts +10 -5
- package/dist/platform/ops/errors.js +19 -11
- package/dist/platform/ops/evals.ops.d.ts +28 -0
- package/dist/platform/ops/evals.ops.js +783 -0
- package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
- package/dist/platform/ops/extensions-admin.ops.js +344 -0
- package/dist/platform/ops/extensions.ops.d.ts +7 -1
- package/dist/platform/ops/extensions.ops.js +248 -17
- package/dist/platform/ops/inbox.ops.d.ts +25 -0
- package/dist/platform/ops/inbox.ops.js +378 -0
- package/dist/platform/ops/marketplaces.ops.d.ts +7 -1
- package/dist/platform/ops/marketplaces.ops.js +326 -17
- package/dist/platform/ops/models.ops.d.ts +25 -0
- package/dist/platform/ops/models.ops.js +232 -0
- package/dist/platform/ops/org-plugins.ops.d.ts +29 -0
- package/dist/platform/ops/org-plugins.ops.js +329 -0
- package/dist/platform/ops/org-settings.ops.d.ts +16 -0
- package/dist/platform/ops/org-settings.ops.js +102 -0
- package/dist/platform/ops/orgs.ops.d.ts +28 -0
- package/dist/platform/ops/orgs.ops.js +295 -0
- package/dist/platform/ops/other-orgs.d.ts +20 -0
- package/dist/platform/ops/other-orgs.js +72 -0
- package/dist/platform/ops/platform.ops.d.ts +4 -4
- package/dist/platform/ops/platform.ops.js +23 -24
- package/dist/platform/ops/plugins.ops.d.ts +10 -8
- package/dist/platform/ops/plugins.ops.js +176 -77
- package/dist/platform/ops/previewers.ops.d.ts +14 -0
- package/dist/platform/ops/previewers.ops.js +109 -0
- package/dist/platform/ops/requests.ops.js +57 -19
- package/dist/platform/ops/skills.ops.d.ts +5 -1
- package/dist/platform/ops/skills.ops.js +129 -11
- package/dist/platform/ops/unavailable.d.ts +23 -0
- package/dist/platform/ops/unavailable.js +111 -0
- package/dist/platform/parity.d.ts +33 -0
- package/dist/platform/parity.js +272 -0
- package/dist/platform/platform-ops.module.d.ts +32 -0
- package/dist/platform/platform-ops.module.js +78 -11
- package/dist/platform/route-schemas.d.ts +18 -0
- package/dist/platform/route-schemas.js +60 -0
- package/dist/roles/worker.module.js +2 -0
- package/dist/runtime/context/build.d.ts +2 -0
- package/dist/runtime/context/build.js +28 -2
- package/dist/runtime/context/compaction.js +10 -1
- package/dist/runtime/context/run-context.d.ts +65 -0
- package/dist/runtime/context/run-context.js +215 -0
- package/dist/runtime/model-call.js +2 -1
- package/dist/runtime/providers.js +8 -1
- package/dist/runtime/run-context.service.d.ts +65 -0
- package/dist/runtime/run-context.service.js +220 -0
- package/dist/runtime/run-worker.d.ts +5 -0
- package/dist/runtime/run-worker.js +31 -6
- package/dist/runtime/runtime.module.js +2 -0
- package/dist/runtime/subagents/definition.d.ts +15 -15
- package/dist/runtime/subagents/definition.js +46 -115
- package/dist/skills/changes.controller.js +2 -1
- package/dist/skills/changes.service.d.ts +1 -1
- package/dist/skills/changes.service.js +4 -4
- package/dist/skills/invocable.controller.d.ts +1 -1
- package/dist/skills/invocable.controller.js +2 -2
- package/dist/skills/invoke.d.ts +2 -2
- package/dist/skills/invoke.js +8 -1
- package/dist/skills/skills.controller.d.ts +4 -13
- package/dist/skills/skills.controller.js +8 -24
- package/dist/skills/skills.schemas.d.ts +48 -0
- package/dist/skills/skills.schemas.js +61 -0
- package/dist/skills/skills.service.d.ts +11 -1
- package/dist/skills/skills.service.js +37 -14
- package/dist/time-zone.d.ts +5 -0
- package/dist/time-zone.js +19 -0
- package/dist/tools/approvals.controller.js +2 -3
- package/dist/tools/approvals.schemas.d.ts +21 -0
- package/dist/tools/approvals.schemas.js +15 -0
- package/dist/tools/builtin-names.d.ts +10 -8
- package/dist/tools/builtin-names.js +16 -11
- package/dist/tools/builtins/builtin-tools.d.ts +3 -1
- package/dist/tools/builtins/builtin-tools.js +15 -3
- package/dist/tools/builtins/current-time.d.ts +26 -0
- package/dist/tools/builtins/current-time.js +99 -0
- package/dist/tools/builtins/platform.d.ts +19 -2
- package/dist/tools/builtins/platform.js +105 -16
- package/dist/tools/connectors.controller.d.ts +1 -2
- package/dist/tools/connectors.controller.js +1 -4
- package/dist/tools/connectors.schemas.d.ts +12 -0
- package/dist/tools/connectors.schemas.js +19 -0
- package/dist/tools/connectors.service.d.ts +5 -2
- package/dist/tools/connectors.service.js +7 -5
- package/dist/tools/org-tool-switches.d.ts +16 -2
- package/dist/tools/org-tool-switches.js +26 -9
- package/dist/tools/pipeline.js +3 -1
- package/dist/tools/registry.d.ts +48 -51
- package/dist/tools/registry.js +222 -233
- package/package.json +3 -3
- package/src/migrations/0090_initial_passwords.sql +27 -0
- package/src/migrations/0091_account_time_zone.sql +4 -0
- package/src/migrations/0092_tools_default_on.sql +27 -0
- package/dist/platform/redact-orgs.d.ts +0 -7
- package/dist/platform/redact-orgs.js +0 -52
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type OnModuleInit } from "@nestjs/common";
|
|
2
|
+
import { CatalogService } from "../../catalog/catalog.service.js";
|
|
3
|
+
import { ExtensionAdminOps } from "../../extensions/admin-ops.js";
|
|
4
|
+
import { ExtensionAdmin } from "../../extensions/admin-view.js";
|
|
5
|
+
import { KernelConfigService } from "../../infra/config/kernel-config.service.js";
|
|
6
|
+
import { KernelDb } from "../../infra/database/kernel-db.js";
|
|
7
|
+
import { PlatformOperations } from "../registry.js";
|
|
8
|
+
/**
|
|
9
|
+
* The super admin's extension operations of the `Platform` tool (spec §14.2 "admin console",
|
|
10
|
+
* §14.5 item 1): the deployment's extensions (list, read), enable, disable and uninstall. Installing
|
|
11
|
+
* a package (upload, npm) and approving permissions stay on the web: a person reviews the
|
|
12
|
+
* permissions there. Deployment config is never read or written here (secrets).
|
|
13
|
+
*/
|
|
14
|
+
export declare class ExtensionsAdminOperations implements OnModuleInit {
|
|
15
|
+
private readonly registry;
|
|
16
|
+
private readonly admin;
|
|
17
|
+
private readonly ops;
|
|
18
|
+
private readonly config;
|
|
19
|
+
private readonly kdb;
|
|
20
|
+
private readonly catalog;
|
|
21
|
+
constructor(registry: PlatformOperations, admin: ExtensionAdmin, ops: ExtensionAdminOps, config: KernelConfigService, kdb: KernelDb, catalog: CatalogService);
|
|
22
|
+
/** The view of `name` for a precheck, or the refusal (unknown, startup-declared). */
|
|
23
|
+
private viewFor;
|
|
24
|
+
onModuleInit(): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,344 @@
|
|
|
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 { Inject, Injectable } from "@nestjs/common";
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { AdminExtensionNamePathParams } from "../../admin/extensions.schemas.js";
|
|
13
|
+
import { CatalogService } from "../../catalog/catalog.service.js";
|
|
14
|
+
import { ExtensionAdminOps } from "../../extensions/admin-ops.js";
|
|
15
|
+
import { ExtensionAdmin } from "../../extensions/admin-view.js";
|
|
16
|
+
import { unavailableReason } from "../../extensions/unavailable.js";
|
|
17
|
+
import { KernelConfigService } from "../../infra/config/kernel-config.service.js";
|
|
18
|
+
import { KernelDb } from "../../infra/database/kernel-db.js";
|
|
19
|
+
import { defineOperation } from "../operation.js";
|
|
20
|
+
import { PlatformOperations } from "../registry.js";
|
|
21
|
+
import { precheckBy, viaAgent } from "./errors.js";
|
|
22
|
+
import { assertExtensionNotOtherOrgs, OTHER_ORG, otherOrgExtensions } from "./other-orgs.js";
|
|
23
|
+
import { Cursor, pageOf, startOf } from "./paging.js";
|
|
24
|
+
import { localized } from "./summary.js";
|
|
25
|
+
import { unavailableFields } from "./unavailable.js";
|
|
26
|
+
/** An extension's name (`:name` of the admin routes), bounded like the org routes' `:extension`. */
|
|
27
|
+
const Name = AdminExtensionNamePathParams.shape.name.max(64);
|
|
28
|
+
const NameInput = z.object({ name: Name }).strict();
|
|
29
|
+
const EXAMPLE = { name: "model-anthropic" };
|
|
30
|
+
/** The English name of an extension as next steps name it. */
|
|
31
|
+
const enName = (v) => localized(v.displayName, v.name).en;
|
|
32
|
+
/** Why an extension does not run, and the super admin's next step (absent when it runs). */
|
|
33
|
+
const why = (v) => v.status === "enabled"
|
|
34
|
+
? {}
|
|
35
|
+
: unavailableFields(unavailableReason(v.status), enName(v), "superAdmin");
|
|
36
|
+
/** An extension as `extensions.platform-list` shows it: a compact row. */
|
|
37
|
+
const row = (v) => ({
|
|
38
|
+
id: v.name,
|
|
39
|
+
name: enName(v),
|
|
40
|
+
state: v.status,
|
|
41
|
+
...why(v),
|
|
42
|
+
version: v.version,
|
|
43
|
+
enabledOrgs: v.enabledOrgs,
|
|
44
|
+
required: v.required,
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* One extension as `extensions.platform-get` shows it: the admin console's view (status, replicas,
|
|
48
|
+
* permissions and what changed since the approved snapshot, config validity as a flag) with the
|
|
49
|
+
* reason and next step. Never a config value; the approval's `reviewHash` is left out (approving
|
|
50
|
+
* permissions is done by a person on the web).
|
|
51
|
+
*/
|
|
52
|
+
const detail = (v) => {
|
|
53
|
+
const { reviewHash: _reviewHash, ...rest } = v;
|
|
54
|
+
return { ...rest, ...why(v) };
|
|
55
|
+
};
|
|
56
|
+
/** Where a super admin confirms permissions: a person, on the web (spec §6.4). */
|
|
57
|
+
const CONFIRM_ON_WEB = "Review and confirm its permissions in the admin console; agents never confirm permissions.";
|
|
58
|
+
/** An extension waiting for a permission confirmation: a compact row, the keys it adds. */
|
|
59
|
+
const pendingExtension = (v) => ({
|
|
60
|
+
id: v.name,
|
|
61
|
+
name: enName(v),
|
|
62
|
+
state: v.status,
|
|
63
|
+
kind: "extension",
|
|
64
|
+
version: v.version,
|
|
65
|
+
permissions: { added: v.added, removed: v.removed, sensitive: v.sensitive },
|
|
66
|
+
next: `${CONFIRM_ON_WEB} (Extensions → ${enName(v)})`,
|
|
67
|
+
});
|
|
68
|
+
/** A catalog plugin waiting for a permission confirmation (or this org's upload): a compact row. */
|
|
69
|
+
const pendingPlugin = (i) => ({
|
|
70
|
+
id: i.id,
|
|
71
|
+
name: i.name,
|
|
72
|
+
state: "pending",
|
|
73
|
+
kind: "plugin",
|
|
74
|
+
version: i.pendingVersion ?? i.latestVersion,
|
|
75
|
+
owner: i.owner.kind === "org" ? i.owner.name : "platform",
|
|
76
|
+
next: `${CONFIRM_ON_WEB} (plugins, pending tab)`,
|
|
77
|
+
});
|
|
78
|
+
/**
|
|
79
|
+
* The super admin's extension operations of the `Platform` tool (spec §14.2 "admin console",
|
|
80
|
+
* §14.5 item 1): the deployment's extensions (list, read), enable, disable and uninstall. Installing
|
|
81
|
+
* a package (upload, npm) and approving permissions stay on the web: a person reviews the
|
|
82
|
+
* permissions there. Deployment config is never read or written here (secrets).
|
|
83
|
+
*/
|
|
84
|
+
let ExtensionsAdminOperations = class ExtensionsAdminOperations {
|
|
85
|
+
registry;
|
|
86
|
+
admin;
|
|
87
|
+
ops;
|
|
88
|
+
config;
|
|
89
|
+
kdb;
|
|
90
|
+
catalog;
|
|
91
|
+
constructor(registry, admin, ops, config, kdb, catalog) {
|
|
92
|
+
this.registry = registry;
|
|
93
|
+
this.admin = admin;
|
|
94
|
+
this.ops = ops;
|
|
95
|
+
this.config = config;
|
|
96
|
+
this.kdb = kdb;
|
|
97
|
+
this.catalog = catalog;
|
|
98
|
+
}
|
|
99
|
+
/** The view of `name` for a precheck, or the refusal (unknown, startup-declared). */
|
|
100
|
+
async viewFor(name, orgId) {
|
|
101
|
+
if ((await otherOrgExtensions(this.kdb.db, orgId, [name])).has(name)) {
|
|
102
|
+
return { ok: false, code: "extension.not_found", message: OTHER_ORG };
|
|
103
|
+
}
|
|
104
|
+
let view;
|
|
105
|
+
const r = await precheckBy(async () => {
|
|
106
|
+
view = await this.admin.get(name, { allowUnreadable: true });
|
|
107
|
+
});
|
|
108
|
+
if (!r.ok)
|
|
109
|
+
return r;
|
|
110
|
+
const v = view;
|
|
111
|
+
if (v.source === "config") {
|
|
112
|
+
return {
|
|
113
|
+
ok: false,
|
|
114
|
+
code: "extension.config_declared",
|
|
115
|
+
message: `Extension ${name} is declared in the startup config`,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
return { ok: true, view: v };
|
|
119
|
+
}
|
|
120
|
+
onModuleInit() {
|
|
121
|
+
this.registry.register([
|
|
122
|
+
defineOperation({
|
|
123
|
+
id: "extensions.platform-list",
|
|
124
|
+
description: "List the extensions on the platform (super admin), one compact row each: the deployment status (enabled, disabled, pending_approval, pending_config, pending_migration, converging, failed, dependency, legacy_format), why one does not run (reason) and your next step (next), its version, how many orgs have it on and whether it is required. Extensions only other orgs' own plugins bring are counted (otherOrgExtensions), never listed. Details come from extensions.platform-get. Pages by 50: pass the returned next as params.cursor.",
|
|
125
|
+
input: z.object({ cursor: Cursor.optional() }).strict(),
|
|
126
|
+
example: {},
|
|
127
|
+
authz: { superAdmin: true },
|
|
128
|
+
mirrors: ["GET /api/v1/admin/extensions"],
|
|
129
|
+
extras: ["cursor"],
|
|
130
|
+
confirm: "read",
|
|
131
|
+
run: async (input, ctx) => {
|
|
132
|
+
const theirs = await otherOrgExtensions(this.kdb.db, ctx.orgId);
|
|
133
|
+
const all = (await this.admin.list()).filter((v) => !theirs.has(v.name));
|
|
134
|
+
return {
|
|
135
|
+
...pageOf(all.map(row), startOf(input.cursor), 50),
|
|
136
|
+
otherOrgExtensions: theirs.size,
|
|
137
|
+
drainSeconds: this.config.get().extensionHost.drainSeconds,
|
|
138
|
+
};
|
|
139
|
+
},
|
|
140
|
+
}),
|
|
141
|
+
defineOperation({
|
|
142
|
+
id: "extensions.pending-permissions",
|
|
143
|
+
description: "List what waits for a super admin to confirm extension permissions (super admin): extensions whose permissions changed since they were approved (state pending_approval, with the permission keys added and removed and whether they are sensitive) and catalog plugins waiting for a confirmation, including this org's uploads with an extension. State and permission keys only, never config values. Other orgs' own plugins are only counted (otherOrgItems, otherOrgExtensions). Confirming is done by you in the admin console, never by an agent. Pages by 50: pass the returned next as params.cursor.",
|
|
144
|
+
input: z.object({ cursor: Cursor.optional() }).strict(),
|
|
145
|
+
example: {},
|
|
146
|
+
authz: { superAdmin: true },
|
|
147
|
+
mirrors: [],
|
|
148
|
+
confirm: "read",
|
|
149
|
+
run: async (input, ctx) => {
|
|
150
|
+
const [all, items, theirs] = await Promise.all([
|
|
151
|
+
this.admin.list(),
|
|
152
|
+
this.catalog.list({ pending: true }),
|
|
153
|
+
otherOrgExtensions(this.kdb.db, ctx.orgId),
|
|
154
|
+
]);
|
|
155
|
+
const waiting = all.filter((v) => v.status === "pending_approval");
|
|
156
|
+
const exts = waiting.filter((v) => !theirs.has(v.name));
|
|
157
|
+
const ours = items.filter((i) => i.owner.kind === "platform" || i.owner.orgId === ctx.orgId);
|
|
158
|
+
return {
|
|
159
|
+
...pageOf([...exts.map(pendingExtension), ...ours.map(pendingPlugin)], startOf(input.cursor), 50),
|
|
160
|
+
otherOrgItems: items.length - ours.length,
|
|
161
|
+
otherOrgExtensions: waiting.length - exts.length,
|
|
162
|
+
};
|
|
163
|
+
},
|
|
164
|
+
}),
|
|
165
|
+
defineOperation({
|
|
166
|
+
id: "extensions.platform-get",
|
|
167
|
+
description: "Read one extension on the platform (super admin): status with the reason and your next step, each replica's last report, its permissions and what changed since they were approved, whether its deployment config is valid (never the values), scope and how many orgs have it on.",
|
|
168
|
+
input: NameInput,
|
|
169
|
+
example: EXAMPLE,
|
|
170
|
+
authz: { superAdmin: true },
|
|
171
|
+
mirrors: ["GET /api/v1/admin/extensions/:name"],
|
|
172
|
+
confirm: "read",
|
|
173
|
+
errors: [
|
|
174
|
+
{
|
|
175
|
+
code: "extension.not_found",
|
|
176
|
+
next: "Check the extension name with extensions.platform-list.",
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
code: "extension.package_unavailable",
|
|
180
|
+
next: "Its package cannot be read on the platform; the admin console shows why, where it can be reinstalled.",
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
run: async (input, ctx) => {
|
|
184
|
+
await assertExtensionNotOtherOrgs(this.kdb.db, input.name, ctx.orgId);
|
|
185
|
+
return detail(await this.admin.get(input.name));
|
|
186
|
+
},
|
|
187
|
+
}),
|
|
188
|
+
defineOperation({
|
|
189
|
+
id: "extensions.platform-enable",
|
|
190
|
+
description: "Enable an installed extension on the platform (super admin): every replica loads it, without a restart. It runs once its permissions are approved and its deployment config is valid (both on the web); orgs then switch it on themselves.",
|
|
191
|
+
input: NameInput,
|
|
192
|
+
example: EXAMPLE,
|
|
193
|
+
authz: { superAdmin: true },
|
|
194
|
+
mirrors: ["POST /api/v1/admin/extensions/:name/enable"],
|
|
195
|
+
confirm: "platform",
|
|
196
|
+
errors: [
|
|
197
|
+
{
|
|
198
|
+
code: "extension.not_found",
|
|
199
|
+
next: "Check the extension name with extensions.platform-list.",
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
code: "extension.config_declared",
|
|
203
|
+
next: "This extension is declared in the startup config (extensions list): the deployment's config changes it, then a restart.",
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
precheck: async (i, ctx) => {
|
|
207
|
+
const r = await this.viewFor(i.name, ctx.orgId);
|
|
208
|
+
return r.ok ? { ok: true } : r;
|
|
209
|
+
},
|
|
210
|
+
summary: async (i) => {
|
|
211
|
+
const v = await this.admin.get(i.name, { allowUnreadable: true });
|
|
212
|
+
const n = localized(v.displayName, v.name);
|
|
213
|
+
return {
|
|
214
|
+
zh: `在平台上启用扩展「${n.zh}」${v.version}`,
|
|
215
|
+
en: `Enable extension "${n.en}" ${v.version} on the platform`,
|
|
216
|
+
};
|
|
217
|
+
},
|
|
218
|
+
run: async (input, ctx) => {
|
|
219
|
+
await assertExtensionNotOtherOrgs(this.kdb.db, input.name, ctx.orgId);
|
|
220
|
+
const v = await this.ops.enable(input.name, ctx.actorAccountId, undefined, undefined, viaAgent("extensions.platform-enable", ctx));
|
|
221
|
+
return {
|
|
222
|
+
extension: row(v),
|
|
223
|
+
next: "Replicas load it in the background; check its state with extensions.platform-get.",
|
|
224
|
+
};
|
|
225
|
+
},
|
|
226
|
+
}),
|
|
227
|
+
defineOperation({
|
|
228
|
+
id: "extensions.platform-disable",
|
|
229
|
+
description: "Disable an extension on the platform (super admin): every replica unloads it after draining in-flight calls, and extensions that require it unload too. The orgs' switches are kept; it is unavailable in every org until enabled again.",
|
|
230
|
+
input: NameInput,
|
|
231
|
+
example: EXAMPLE,
|
|
232
|
+
authz: { superAdmin: true },
|
|
233
|
+
mirrors: ["POST /api/v1/admin/extensions/:name/disable"],
|
|
234
|
+
confirm: "platform",
|
|
235
|
+
errors: [
|
|
236
|
+
{
|
|
237
|
+
code: "extension.not_found",
|
|
238
|
+
next: "Check the extension name with extensions.platform-list.",
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
code: "extension.config_declared",
|
|
242
|
+
next: "This extension is declared in the startup config (extensions list): the deployment's config changes it, then a restart.",
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
code: "extension.required",
|
|
246
|
+
next: "A required extension shipped with the platform cannot be disabled or uninstalled.",
|
|
247
|
+
},
|
|
248
|
+
],
|
|
249
|
+
precheck: async (i, ctx) => {
|
|
250
|
+
const r = await this.viewFor(i.name, ctx.orgId);
|
|
251
|
+
if (!r.ok)
|
|
252
|
+
return r;
|
|
253
|
+
return r.view.required
|
|
254
|
+
? { ok: false, code: "extension.required", message: `Extension ${i.name} is required` }
|
|
255
|
+
: { ok: true };
|
|
256
|
+
},
|
|
257
|
+
summary: async (i) => {
|
|
258
|
+
const v = await this.admin.get(i.name, { allowUnreadable: true });
|
|
259
|
+
const n = localized(v.displayName, v.name);
|
|
260
|
+
const s = this.config.get().extensionHost.drainSeconds;
|
|
261
|
+
return {
|
|
262
|
+
zh: `在平台上停用扩展「${n.zh}」:${v.enabledOrgs} 个组织中不再可用(在途调用最多等待 ${s} 秒)`,
|
|
263
|
+
en: `Disable extension "${n.en}" on the platform: unavailable in the ${v.enabledOrgs} orgs that have it on (in-flight calls drain up to ${s}s)`,
|
|
264
|
+
};
|
|
265
|
+
},
|
|
266
|
+
run: async (input, ctx) => {
|
|
267
|
+
await assertExtensionNotOtherOrgs(this.kdb.db, input.name, ctx.orgId);
|
|
268
|
+
const v = await this.ops.disable(input.name, ctx.actorAccountId, undefined, undefined, viaAgent("extensions.platform-disable", ctx));
|
|
269
|
+
return { extension: row(v) };
|
|
270
|
+
},
|
|
271
|
+
}),
|
|
272
|
+
defineOperation({
|
|
273
|
+
id: "extensions.uninstall",
|
|
274
|
+
description: "Uninstall a disabled extension from the platform (super admin; disable it first with extensions.platform-disable). Its data, secrets, org configs and approved permissions are kept, so reinstalling picks them up.",
|
|
275
|
+
input: NameInput,
|
|
276
|
+
example: EXAMPLE,
|
|
277
|
+
authz: { superAdmin: true },
|
|
278
|
+
mirrors: ["DELETE /api/v1/admin/extensions/:name"],
|
|
279
|
+
confirm: "platform",
|
|
280
|
+
errors: [
|
|
281
|
+
{
|
|
282
|
+
code: "extension.not_found",
|
|
283
|
+
next: "Check the extension name with extensions.platform-list.",
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
code: "extension.config_declared",
|
|
287
|
+
next: "This extension is declared in the startup config (extensions list): the deployment's config changes it, then a restart.",
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
code: "extension.required",
|
|
291
|
+
next: "A required extension shipped with the platform cannot be disabled or uninstalled.",
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
code: "extension.not_disabled",
|
|
295
|
+
next: "Disable it first with extensions.platform-disable, then uninstall.",
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
precheck: async (i, ctx) => {
|
|
299
|
+
const r = await this.viewFor(i.name, ctx.orgId);
|
|
300
|
+
if (!r.ok)
|
|
301
|
+
return r;
|
|
302
|
+
if (r.view.required) {
|
|
303
|
+
return {
|
|
304
|
+
ok: false,
|
|
305
|
+
code: "extension.required",
|
|
306
|
+
message: `Extension ${i.name} is required`,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
if (r.view.desired?.state !== "disabled") {
|
|
310
|
+
return {
|
|
311
|
+
ok: false,
|
|
312
|
+
code: "extension.not_disabled",
|
|
313
|
+
message: `Extension ${i.name} is enabled; disable it before uninstalling`,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
return { ok: true };
|
|
317
|
+
},
|
|
318
|
+
summary: async (i) => {
|
|
319
|
+
const v = await this.admin.get(i.name, { allowUnreadable: true });
|
|
320
|
+
const n = localized(v.displayName, v.name);
|
|
321
|
+
return {
|
|
322
|
+
zh: `从平台卸载扩展「${n.zh}」${v.version}(数据与配置保留)`,
|
|
323
|
+
en: `Uninstall extension "${n.en}" ${v.version} from the platform (its data and config are kept)`,
|
|
324
|
+
};
|
|
325
|
+
},
|
|
326
|
+
run: async (input, ctx) => {
|
|
327
|
+
await assertExtensionNotOtherOrgs(this.kdb.db, input.name, ctx.orgId);
|
|
328
|
+
await this.ops.uninstall(input.name, ctx.actorAccountId, undefined, undefined, viaAgent("extensions.uninstall", ctx));
|
|
329
|
+
return { uninstalled: input.name };
|
|
330
|
+
},
|
|
331
|
+
}),
|
|
332
|
+
]);
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
ExtensionsAdminOperations = __decorate([
|
|
336
|
+
Injectable(),
|
|
337
|
+
__param(0, Inject(PlatformOperations)),
|
|
338
|
+
__param(1, Inject(ExtensionAdmin)),
|
|
339
|
+
__param(2, Inject(ExtensionAdminOps)),
|
|
340
|
+
__param(3, Inject(KernelConfigService)),
|
|
341
|
+
__param(4, Inject(KernelDb)),
|
|
342
|
+
__param(5, Inject(CatalogService))
|
|
343
|
+
], ExtensionsAdminOperations);
|
|
344
|
+
export { ExtensionsAdminOperations };
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { type OnModuleInit } from "@nestjs/common";
|
|
2
2
|
import { ExtensionDisplayNames } from "../../extensions/display-name.js";
|
|
3
3
|
import { OrgExtensionConfigs } from "../../extensions/org-config.js";
|
|
4
|
+
import { ExtensionPointDefaults } from "../../extensions/point-defaults.js";
|
|
4
5
|
import { KernelDb } from "../../infra/database/kernel-db.js";
|
|
6
|
+
import { OrgToolSwitches } from "../../tools/org-tool-switches.js";
|
|
5
7
|
import { PlatformOperations } from "../registry.js";
|
|
6
8
|
/**
|
|
7
9
|
* Extension operations of the `Platform` tool (spec §7): read only, and state only. The org config,
|
|
@@ -14,6 +16,10 @@ export declare class ExtensionsOperations implements OnModuleInit {
|
|
|
14
16
|
private readonly configs;
|
|
15
17
|
private readonly displayNames;
|
|
16
18
|
private readonly kdb;
|
|
17
|
-
|
|
19
|
+
private readonly switches;
|
|
20
|
+
private readonly pointDefaults;
|
|
21
|
+
constructor(registry: PlatformOperations, configs: OrgExtensionConfigs, displayNames: ExtensionDisplayNames, kdb: KernelDb, switches: OrgToolSwitches, pointDefaults: ExtensionPointDefaults);
|
|
22
|
+
/** An extension's display name for a card (its plugin's), else the name, clipped. */
|
|
23
|
+
private nameOf;
|
|
18
24
|
onModuleInit(): void;
|
|
19
25
|
}
|