@bevel-software/platform-core-backend 0.1.0
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/dist/assets.d.ts +5 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +23 -0
- package/dist/assets.js.map +1 -0
- package/dist/core/core-ports.d.ts +83 -0
- package/dist/core/core-ports.d.ts.map +1 -0
- package/dist/core/core-ports.js +12 -0
- package/dist/core/core-ports.js.map +1 -0
- package/dist/core/create-core-server.d.ts +62 -0
- package/dist/core/create-core-server.d.ts.map +1 -0
- package/dist/core/create-core-server.js +204 -0
- package/dist/core/create-core-server.js.map +1 -0
- package/dist/core/create-core-services.d.ts +95 -0
- package/dist/core/create-core-services.d.ts.map +1 -0
- package/dist/core/create-core-services.js +352 -0
- package/dist/core/create-core-services.js.map +1 -0
- package/dist/core-config.d.ts +119 -0
- package/dist/core-config.d.ts.map +1 -0
- package/dist/core-config.js +240 -0
- package/dist/core-config.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/access/access-control.interface.d.ts +348 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -0
- package/dist/modules/access/access-control.interface.js +2 -0
- package/dist/modules/access/access-control.interface.js.map +1 -0
- package/dist/modules/access/access-control.service.d.ts +323 -0
- package/dist/modules/access/access-control.service.d.ts.map +1 -0
- package/dist/modules/access/access-control.service.js +1431 -0
- package/dist/modules/access/access-control.service.js.map +1 -0
- package/dist/modules/access/access-errors.d.ts +34 -0
- package/dist/modules/access/access-errors.d.ts.map +1 -0
- package/dist/modules/access/access-errors.js +40 -0
- package/dist/modules/access/access-errors.js.map +1 -0
- package/dist/modules/access/access-mutation.service.d.ts +176 -0
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -0
- package/dist/modules/access/access-mutation.service.js +307 -0
- package/dist/modules/access/access-mutation.service.js.map +1 -0
- package/dist/modules/access/access-splice.d.ts +98 -0
- package/dist/modules/access/access-splice.d.ts.map +1 -0
- package/dist/modules/access/access-splice.js +346 -0
- package/dist/modules/access/access-splice.js.map +1 -0
- package/dist/modules/access/access.routes.d.ts +10 -0
- package/dist/modules/access/access.routes.d.ts.map +1 -0
- package/dist/modules/access/access.routes.js +757 -0
- package/dist/modules/access/access.routes.js.map +1 -0
- package/dist/modules/access/creator-access.d.ts +113 -0
- package/dist/modules/access/creator-access.d.ts.map +1 -0
- package/dist/modules/access/creator-access.js +212 -0
- package/dist/modules/access/creator-access.js.map +1 -0
- package/dist/modules/access/kb-read-filter.d.ts +41 -0
- package/dist/modules/access/kb-read-filter.d.ts.map +1 -0
- package/dist/modules/access/kb-read-filter.js +60 -0
- package/dist/modules/access/kb-read-filter.js.map +1 -0
- package/dist/modules/access/roles-admin.service.d.ts +240 -0
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -0
- package/dist/modules/access/roles-admin.service.js +630 -0
- package/dist/modules/access/roles-admin.service.js.map +1 -0
- package/dist/modules/access/roles-edit.d.ts +91 -0
- package/dist/modules/access/roles-edit.d.ts.map +1 -0
- package/dist/modules/access/roles-edit.js +232 -0
- package/dist/modules/access/roles-edit.js.map +1 -0
- package/dist/modules/access/roles-yaml-guard.d.ts +56 -0
- package/dist/modules/access/roles-yaml-guard.d.ts.map +1 -0
- package/dist/modules/access/roles-yaml-guard.js +79 -0
- package/dist/modules/access/roles-yaml-guard.js.map +1 -0
- package/dist/modules/admin/admin-access.routes.d.ts +18 -0
- package/dist/modules/admin/admin-access.routes.d.ts.map +1 -0
- package/dist/modules/admin/admin-access.routes.js +26 -0
- package/dist/modules/admin/admin-access.routes.js.map +1 -0
- package/dist/modules/admin/admin-access.service.d.ts +24 -0
- package/dist/modules/admin/admin-access.service.d.ts.map +1 -0
- package/dist/modules/admin/admin-access.service.js +41 -0
- package/dist/modules/admin/admin-access.service.js.map +1 -0
- package/dist/modules/admin/admin.interface.d.ts +11 -0
- package/dist/modules/admin/admin.interface.d.ts.map +1 -0
- package/dist/modules/admin/admin.interface.js +2 -0
- package/dist/modules/admin/admin.interface.js.map +1 -0
- package/dist/modules/auth/account-erasure.service.d.ts +80 -0
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -0
- package/dist/modules/auth/account-erasure.service.js +91 -0
- package/dist/modules/auth/account-erasure.service.js.map +1 -0
- package/dist/modules/auth/auth.middleware.d.ts +23 -0
- package/dist/modules/auth/auth.middleware.d.ts.map +1 -0
- package/dist/modules/auth/auth.middleware.js +68 -0
- package/dist/modules/auth/auth.middleware.js.map +1 -0
- package/dist/modules/auth/auth.routes.d.ts +25 -0
- package/dist/modules/auth/auth.routes.d.ts.map +1 -0
- package/dist/modules/auth/auth.routes.js +72 -0
- package/dist/modules/auth/auth.routes.js.map +1 -0
- package/dist/modules/auth/auth.service.d.ts +76 -0
- package/dist/modules/auth/auth.service.d.ts.map +1 -0
- package/dist/modules/auth/auth.service.js +168 -0
- package/dist/modules/auth/auth.service.js.map +1 -0
- package/dist/modules/code-mode/code-mode-names.d.ts +16 -0
- package/dist/modules/code-mode/code-mode-names.d.ts.map +1 -0
- package/dist/modules/code-mode/code-mode-names.js +30 -0
- package/dist/modules/code-mode/code-mode-names.js.map +1 -0
- package/dist/modules/code-mode/code-mode.tool.d.ts +13 -0
- package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -0
- package/dist/modules/code-mode/code-mode.tool.js +112 -0
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -0
- package/dist/modules/code-mode/index.d.ts +3 -0
- package/dist/modules/code-mode/index.d.ts.map +1 -0
- package/dist/modules/code-mode/index.js +3 -0
- package/dist/modules/code-mode/index.js.map +1 -0
- package/dist/modules/database/connection.d.ts +6 -0
- package/dist/modules/database/connection.d.ts.map +1 -0
- package/dist/modules/database/connection.js +12 -0
- package/dist/modules/database/connection.js.map +1 -0
- package/dist/modules/database/core-schema.d.ts +2273 -0
- package/dist/modules/database/core-schema.d.ts.map +1 -0
- package/dist/modules/database/core-schema.js +413 -0
- package/dist/modules/database/core-schema.js.map +1 -0
- package/dist/modules/database/migrate.d.ts +10 -0
- package/dist/modules/database/migrate.d.ts.map +1 -0
- package/dist/modules/database/migrate.js +40 -0
- package/dist/modules/database/migrate.js.map +1 -0
- package/dist/modules/database/schema.d.ts +12 -0
- package/dist/modules/database/schema.d.ts.map +1 -0
- package/dist/modules/database/schema.js +12 -0
- package/dist/modules/database/schema.js.map +1 -0
- package/dist/modules/diff/diff-paths.d.ts +2 -0
- package/dist/modules/diff/diff-paths.d.ts.map +1 -0
- package/dist/modules/diff/diff-paths.js +9 -0
- package/dist/modules/diff/diff-paths.js.map +1 -0
- package/dist/modules/diff/diff.config.d.ts +8 -0
- package/dist/modules/diff/diff.config.d.ts.map +1 -0
- package/dist/modules/diff/diff.config.js +13 -0
- package/dist/modules/diff/diff.config.js.map +1 -0
- package/dist/modules/diff/diff.interface.d.ts +73 -0
- package/dist/modules/diff/diff.interface.d.ts.map +1 -0
- package/dist/modules/diff/diff.interface.js +2 -0
- package/dist/modules/diff/diff.interface.js.map +1 -0
- package/dist/modules/diff/diff.routes.d.ts +35 -0
- package/dist/modules/diff/diff.routes.d.ts.map +1 -0
- package/dist/modules/diff/diff.routes.js +228 -0
- package/dist/modules/diff/diff.routes.js.map +1 -0
- package/dist/modules/diff/diff.service.d.ts +51 -0
- package/dist/modules/diff/diff.service.d.ts.map +1 -0
- package/dist/modules/diff/diff.service.js +489 -0
- package/dist/modules/diff/diff.service.js.map +1 -0
- package/dist/modules/diff/line-diff.d.ts +16 -0
- package/dist/modules/diff/line-diff.d.ts.map +1 -0
- package/dist/modules/diff/line-diff.js +67 -0
- package/dist/modules/diff/line-diff.js.map +1 -0
- package/dist/modules/mcp/mcp-auth.middleware.d.ts +27 -0
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -0
- package/dist/modules/mcp/mcp-auth.middleware.js +116 -0
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -0
- package/dist/modules/mcp/mcp-session-store.d.ts +74 -0
- package/dist/modules/mcp/mcp-session-store.d.ts.map +1 -0
- package/dist/modules/mcp/mcp-session-store.js +131 -0
- package/dist/modules/mcp/mcp-session-store.js.map +1 -0
- package/dist/modules/mcp/mcp.routes.d.ts +24 -0
- package/dist/modules/mcp/mcp.routes.d.ts.map +1 -0
- package/dist/modules/mcp/mcp.routes.js +229 -0
- package/dist/modules/mcp/mcp.routes.js.map +1 -0
- package/dist/modules/mcp/mcp.service.d.ts +198 -0
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -0
- package/dist/modules/mcp/mcp.service.js +840 -0
- package/dist/modules/mcp/mcp.service.js.map +1 -0
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +76 -0
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -0
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +291 -0
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -0
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +18 -0
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -0
- package/dist/modules/mcp/oauth/oauth-consent.routes.js +52 -0
- package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -0
- package/dist/modules/mcp/oauth/oauth-state.d.ts +32 -0
- package/dist/modules/mcp/oauth/oauth-state.d.ts.map +1 -0
- package/dist/modules/mcp/oauth/oauth-state.js +34 -0
- package/dist/modules/mcp/oauth/oauth-state.js.map +1 -0
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +92 -0
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -0
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +728 -0
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -0
- package/dist/modules/secrets-vault/index.d.ts +7 -0
- package/dist/modules/secrets-vault/index.d.ts.map +1 -0
- package/dist/modules/secrets-vault/index.js +6 -0
- package/dist/modules/secrets-vault/index.js.map +1 -0
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.d.ts +63 -0
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.d.ts.map +1 -0
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js +269 -0
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-variable-loader.d.ts +46 -0
- package/dist/modules/secrets-vault/secrets-variable-loader.d.ts.map +1 -0
- package/dist/modules/secrets-vault/secrets-variable-loader.js +87 -0
- package/dist/modules/secrets-vault/secrets-variable-loader.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +210 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.js +90 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +30 -0
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.routes.js +490 -0
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -0
- package/dist/modules/skills/index.d.ts +5 -0
- package/dist/modules/skills/index.d.ts.map +1 -0
- package/dist/modules/skills/index.js +4 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/skills/skills.contract.d.ts +58 -0
- package/dist/modules/skills/skills.contract.d.ts.map +1 -0
- package/dist/modules/skills/skills.contract.js +10 -0
- package/dist/modules/skills/skills.contract.js.map +1 -0
- package/dist/modules/skills/skills.routes.d.ts +15 -0
- package/dist/modules/skills/skills.routes.d.ts.map +1 -0
- package/dist/modules/skills/skills.routes.js +34 -0
- package/dist/modules/skills/skills.routes.js.map +1 -0
- package/dist/modules/skills/skills.service.d.ts +21 -0
- package/dist/modules/skills/skills.service.d.ts.map +1 -0
- package/dist/modules/skills/skills.service.js +202 -0
- package/dist/modules/skills/skills.service.js.map +1 -0
- package/dist/modules/skills/skills.tools.d.ts +15 -0
- package/dist/modules/skills/skills.tools.d.ts.map +1 -0
- package/dist/modules/skills/skills.tools.js +96 -0
- package/dist/modules/skills/skills.tools.js.map +1 -0
- package/dist/modules/tool-auth/external-api-key.errors.d.ts +14 -0
- package/dist/modules/tool-auth/external-api-key.errors.d.ts.map +1 -0
- package/dist/modules/tool-auth/external-api-key.errors.js +23 -0
- package/dist/modules/tool-auth/external-api-key.errors.js.map +1 -0
- package/dist/modules/tool-auth/external-api-key.interface.d.ts +90 -0
- package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -0
- package/dist/modules/tool-auth/external-api-key.interface.js +2 -0
- package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -0
- package/dist/modules/tool-auth/external-api-key.service.d.ts +25 -0
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -0
- package/dist/modules/tool-auth/external-api-key.service.js +164 -0
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -0
- package/dist/modules/tool-auth/internal-token.service.d.ts +62 -0
- package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -0
- package/dist/modules/tool-auth/internal-token.service.js +85 -0
- package/dist/modules/tool-auth/internal-token.service.js.map +1 -0
- package/dist/modules/tool-auth/llm-usage-meter.d.ts +16 -0
- package/dist/modules/tool-auth/llm-usage-meter.d.ts.map +1 -0
- package/dist/modules/tool-auth/llm-usage-meter.js +6 -0
- package/dist/modules/tool-auth/llm-usage-meter.js.map +1 -0
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts +101 -0
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -0
- package/dist/modules/tool-auth/tool-auth.middleware.js +166 -0
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -0
- package/dist/modules/tool-helpers/index.d.ts +19 -0
- package/dist/modules/tool-helpers/index.d.ts.map +1 -0
- package/dist/modules/tool-helpers/index.js +18 -0
- package/dist/modules/tool-helpers/index.js.map +1 -0
- package/dist/modules/tool-helpers/tool-context.d.ts +35 -0
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -0
- package/dist/modules/tool-helpers/tool-context.js +66 -0
- package/dist/modules/tool-helpers/tool-context.js.map +1 -0
- package/dist/modules/tool-helpers/tool-def.d.ts +33 -0
- package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -0
- package/dist/modules/tool-helpers/tool-def.js +57 -0
- package/dist/modules/tool-helpers/tool-def.js.map +1 -0
- package/dist/modules/tool-helpers/tool-handler.d.ts +19 -0
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -0
- package/dist/modules/tool-helpers/tool-handler.js +84 -0
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -0
- package/dist/modules/tool-helpers/tool.contract.d.ts +64 -0
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -0
- package/dist/modules/tool-helpers/tool.contract.js +24 -0
- package/dist/modules/tool-helpers/tool.contract.js.map +1 -0
- package/dist/modules/tool-helpers/validate-token.d.ts +31 -0
- package/dist/modules/tool-helpers/validate-token.d.ts.map +1 -0
- package/dist/modules/tool-helpers/validate-token.js +20 -0
- package/dist/modules/tool-helpers/validate-token.js.map +1 -0
- package/dist/modules/tool-manuals/index.d.ts +5 -0
- package/dist/modules/tool-manuals/index.d.ts.map +1 -0
- package/dist/modules/tool-manuals/index.js +5 -0
- package/dist/modules/tool-manuals/index.js.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +182 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.js +19 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.js.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +24 -0
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.routes.js +102 -0
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +108 -0
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.service.js +710 -0
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +35 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.js +157 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -0
- package/dist/modules/tool-registry/manual.routes.d.ts +6 -0
- package/dist/modules/tool-registry/manual.routes.d.ts.map +1 -0
- package/dist/modules/tool-registry/manual.routes.js +76 -0
- package/dist/modules/tool-registry/manual.routes.js.map +1 -0
- package/dist/modules/tool-registry/tool-registry.d.ts +23 -0
- package/dist/modules/tool-registry/tool-registry.d.ts.map +1 -0
- package/dist/modules/tool-registry/tool-registry.js +46 -0
- package/dist/modules/tool-registry/tool-registry.js.map +1 -0
- package/dist/modules/tool-registry/tool.contract.d.ts +48 -0
- package/dist/modules/tool-registry/tool.contract.d.ts.map +1 -0
- package/dist/modules/tool-registry/tool.contract.js +2 -0
- package/dist/modules/tool-registry/tool.contract.js.map +1 -0
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +14 -0
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -0
- package/dist/modules/workflow/agent-tools/workflow.tools.js +437 -0
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -0
- package/dist/modules/workflow/event-bus.d.ts +107 -0
- package/dist/modules/workflow/event-bus.d.ts.map +1 -0
- package/dist/modules/workflow/event-bus.js +224 -0
- package/dist/modules/workflow/event-bus.js.map +1 -0
- package/dist/modules/workflow/events.routes.d.ts +80 -0
- package/dist/modules/workflow/events.routes.d.ts.map +1 -0
- package/dist/modules/workflow/events.routes.js +216 -0
- package/dist/modules/workflow/events.routes.js.map +1 -0
- package/dist/modules/workflow/file-change-notifier.d.ts +38 -0
- package/dist/modules/workflow/file-change-notifier.d.ts.map +1 -0
- package/dist/modules/workflow/file-change-notifier.js +22 -0
- package/dist/modules/workflow/file-change-notifier.js.map +1 -0
- package/dist/modules/workflow/file-lock.service.d.ts +57 -0
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -0
- package/dist/modules/workflow/file-lock.service.js +202 -0
- package/dist/modules/workflow/file-lock.service.js.map +1 -0
- package/dist/modules/workflow/git/branch-name.d.ts +10 -0
- package/dist/modules/workflow/git/branch-name.d.ts.map +1 -0
- package/dist/modules/workflow/git/branch-name.js +76 -0
- package/dist/modules/workflow/git/branch-name.js.map +1 -0
- package/dist/modules/workflow/git/clone-config.d.ts +61 -0
- package/dist/modules/workflow/git/clone-config.d.ts.map +1 -0
- package/dist/modules/workflow/git/clone-config.js +69 -0
- package/dist/modules/workflow/git/clone-config.js.map +1 -0
- package/dist/modules/workflow/git/git-version.d.ts +34 -0
- package/dist/modules/workflow/git/git-version.d.ts.map +1 -0
- package/dist/modules/workflow/git/git-version.js +63 -0
- package/dist/modules/workflow/git/git-version.js.map +1 -0
- package/dist/modules/workflow/git/git.service.d.ts +427 -0
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -0
- package/dist/modules/workflow/git/git.service.js +1987 -0
- package/dist/modules/workflow/git/git.service.js.map +1 -0
- package/dist/modules/workflow/git/mutex.d.ts +11 -0
- package/dist/modules/workflow/git/mutex.d.ts.map +1 -0
- package/dist/modules/workflow/git/mutex.js +23 -0
- package/dist/modules/workflow/git/mutex.js.map +1 -0
- package/dist/modules/workflow/git/pull-request.service.d.ts +124 -0
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/workflow/git/pull-request.service.js +328 -0
- package/dist/modules/workflow/git/pull-request.service.js.map +1 -0
- package/dist/modules/workflow/locking-filesystem.d.ts +133 -0
- package/dist/modules/workflow/locking-filesystem.d.ts.map +1 -0
- package/dist/modules/workflow/locking-filesystem.js +400 -0
- package/dist/modules/workflow/locking-filesystem.js.map +1 -0
- package/dist/modules/workflow/pending-commits.service.d.ts +221 -0
- package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/workflow/pending-commits.service.js +364 -0
- package/dist/modules/workflow/pending-commits.service.js.map +1 -0
- package/dist/modules/workflow/pending-commits.worker.d.ts +148 -0
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/workflow/pending-commits.worker.js +245 -0
- package/dist/modules/workflow/pending-commits.worker.js.map +1 -0
- package/dist/modules/workflow/read-only-filesystem.d.ts +24 -0
- package/dist/modules/workflow/read-only-filesystem.d.ts.map +1 -0
- package/dist/modules/workflow/read-only-filesystem.js +39 -0
- package/dist/modules/workflow/read-only-filesystem.js.map +1 -0
- package/dist/modules/workflow/recovery-bot.d.ts +31 -0
- package/dist/modules/workflow/recovery-bot.d.ts.map +1 -0
- package/dist/modules/workflow/recovery-bot.js +64 -0
- package/dist/modules/workflow/recovery-bot.js.map +1 -0
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +137 -0
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -0
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +2 -0
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +1 -0
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +26 -0
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -0
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +636 -0
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -0
- package/dist/modules/workflow/sanitize-error.d.ts +29 -0
- package/dist/modules/workflow/sanitize-error.d.ts.map +1 -0
- package/dist/modules/workflow/sanitize-error.js +60 -0
- package/dist/modules/workflow/sanitize-error.js.map +1 -0
- package/dist/modules/workflow/session-ontology.policy.d.ts +52 -0
- package/dist/modules/workflow/session-ontology.policy.d.ts.map +1 -0
- package/dist/modules/workflow/session-ontology.policy.js +62 -0
- package/dist/modules/workflow/session-ontology.policy.js.map +1 -0
- package/dist/modules/workflow/session-ontology.service.d.ts +100 -0
- package/dist/modules/workflow/session-ontology.service.d.ts.map +1 -0
- package/dist/modules/workflow/session-ontology.service.js +143 -0
- package/dist/modules/workflow/session-ontology.service.js.map +1 -0
- package/dist/modules/workflow/workflow-hooks.d.ts +87 -0
- package/dist/modules/workflow/workflow-hooks.d.ts.map +1 -0
- package/dist/modules/workflow/workflow-hooks.js +35 -0
- package/dist/modules/workflow/workflow-hooks.js.map +1 -0
- package/dist/modules/workflow/workflow.errors.d.ts +171 -0
- package/dist/modules/workflow/workflow.errors.d.ts.map +1 -0
- package/dist/modules/workflow/workflow.errors.js +260 -0
- package/dist/modules/workflow/workflow.errors.js.map +1 -0
- package/dist/modules/workflow/workflow.routes.d.ts +26 -0
- package/dist/modules/workflow/workflow.routes.d.ts.map +1 -0
- package/dist/modules/workflow/workflow.routes.js +804 -0
- package/dist/modules/workflow/workflow.routes.js.map +1 -0
- package/dist/modules/workflow/workflow.service.d.ts +385 -0
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -0
- package/dist/modules/workflow/workflow.service.js +1155 -0
- package/dist/modules/workflow/workflow.service.js.map +1 -0
- package/dist/modules/workspace/bevel-ignore.d.ts +25 -0
- package/dist/modules/workspace/bevel-ignore.d.ts.map +1 -0
- package/dist/modules/workspace/bevel-ignore.js +57 -0
- package/dist/modules/workspace/bevel-ignore.js.map +1 -0
- package/dist/modules/workspace/kb-seed.interface.d.ts +36 -0
- package/dist/modules/workspace/kb-seed.interface.d.ts.map +1 -0
- package/dist/modules/workspace/kb-seed.interface.js +2 -0
- package/dist/modules/workspace/kb-seed.interface.js.map +1 -0
- package/dist/modules/workspace/kb-seed.service.d.ts +70 -0
- package/dist/modules/workspace/kb-seed.service.d.ts.map +1 -0
- package/dist/modules/workspace/kb-seed.service.js +325 -0
- package/dist/modules/workspace/kb-seed.service.js.map +1 -0
- package/dist/modules/workspace/routine-write-policy.d.ts +49 -0
- package/dist/modules/workspace/routine-write-policy.d.ts.map +1 -0
- package/dist/modules/workspace/routine-write-policy.js +46 -0
- package/dist/modules/workspace/routine-write-policy.js.map +1 -0
- package/dist/modules/workspace/session-ontology.gate.d.ts +112 -0
- package/dist/modules/workspace/session-ontology.gate.d.ts.map +1 -0
- package/dist/modules/workspace/session-ontology.gate.js +161 -0
- package/dist/modules/workspace/session-ontology.gate.js.map +1 -0
- package/dist/modules/workspace/session-sink.d.ts +25 -0
- package/dist/modules/workspace/session-sink.d.ts.map +1 -0
- package/dist/modules/workspace/session-sink.js +8 -0
- package/dist/modules/workspace/session-sink.js.map +1 -0
- package/dist/modules/workspace/spill-store.d.ts +24 -0
- package/dist/modules/workspace/spill-store.d.ts.map +1 -0
- package/dist/modules/workspace/spill-store.js +87 -0
- package/dist/modules/workspace/spill-store.js.map +1 -0
- package/dist/modules/workspace/workspace.routes.d.ts +25 -0
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -0
- package/dist/modules/workspace/workspace.routes.js +1046 -0
- package/dist/modules/workspace/workspace.routes.js.map +1 -0
- package/dist/modules/workspace/workspace.service.d.ts +339 -0
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -0
- package/dist/modules/workspace/workspace.service.js +1221 -0
- package/dist/modules/workspace/workspace.service.js.map +1 -0
- package/dist/modules/workspace/workspace.tools.d.ts +19 -0
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -0
- package/dist/modules/workspace/workspace.tools.js +767 -0
- package/dist/modules/workspace/workspace.tools.js.map +1 -0
- package/dist/shared/frontmatter-id.d.ts +35 -0
- package/dist/shared/frontmatter-id.d.ts.map +1 -0
- package/dist/shared/frontmatter-id.js +68 -0
- package/dist/shared/frontmatter-id.js.map +1 -0
- package/dist/shared/fs-walk.d.ts +9 -0
- package/dist/shared/fs-walk.d.ts.map +1 -0
- package/dist/shared/fs-walk.js +34 -0
- package/dist/shared/fs-walk.js.map +1 -0
- package/dist/shared/hash-email.d.ts +11 -0
- package/dist/shared/hash-email.d.ts.map +1 -0
- package/dist/shared/hash-email.js +14 -0
- package/dist/shared/hash-email.js.map +1 -0
- package/dist/shared/kb-layout.d.ts +38 -0
- package/dist/shared/kb-layout.d.ts.map +1 -0
- package/dist/shared/kb-layout.js +102 -0
- package/dist/shared/kb-layout.js.map +1 -0
- package/dist/shared/kb-layout.test.d.ts +2 -0
- package/dist/shared/kb-layout.test.d.ts.map +1 -0
- package/dist/shared/kb-layout.test.js +67 -0
- package/dist/shared/kb-layout.test.js.map +1 -0
- package/dist/shared/ssrf.d.ts +20 -0
- package/dist/shared/ssrf.d.ts.map +1 -0
- package/dist/shared/ssrf.js +89 -0
- package/dist/shared/ssrf.js.map +1 -0
- package/dist/shared/token-crypto.d.ts +16 -0
- package/dist/shared/token-crypto.d.ts.map +1 -0
- package/dist/shared/token-crypto.js +49 -0
- package/dist/shared/token-crypto.js.map +1 -0
- package/dist/shared/ttl-cache.d.ts +16 -0
- package/dist/shared/ttl-cache.d.ts.map +1 -0
- package/dist/shared/ttl-cache.js +27 -0
- package/dist/shared/ttl-cache.js.map +1 -0
- package/dist/shared/utcp-namespace.d.ts +46 -0
- package/dist/shared/utcp-namespace.d.ts.map +1 -0
- package/dist/shared/utcp-namespace.js +82 -0
- package/dist/shared/utcp-namespace.js.map +1 -0
- package/dist/version.d.ts +17 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +19 -0
- package/dist/version.js.map +1 -0
- package/kb-template/.bevelignore +21 -0
- package/kb-template/Agents/.gitkeep +0 -0
- package/kb-template/Agents/README.md +38 -0
- package/kb-template/CLAUDE.md +419 -0
- package/kb-template/Data/.gitkeep +0 -0
- package/kb-template/Data/README.md +39 -0
- package/kb-template/KnowledgeBase/.gitkeep +0 -0
- package/kb-template/KnowledgeBase/README.md +37 -0
- package/kb-template/Pipelines/.gitkeep +0 -0
- package/kb-template/Pipelines/README.md +38 -0
- package/kb-template/Skills/.gitkeep +0 -0
- package/kb-template/Skills/README.md +32 -0
- package/kb-template/Tools/.gitkeep +0 -0
- package/kb-template/Tools/README.md +42 -0
- package/kb-template/access.md +36 -0
- package/migrations/0000_core_init.sql +243 -0
- package/migrations/meta/0000_snapshot.json +1480 -0
- package/migrations/meta/_journal.json +13 -0
- package/package.json +80 -0
- package/src/assets.ts +25 -0
- package/src/core/core-ports.ts +91 -0
- package/src/core/create-core-server.ts +338 -0
- package/src/core/create-core-services.ts +501 -0
- package/src/core-config.ts +257 -0
- package/src/index.ts +69 -0
- package/src/modules/access/__tests__/access-control.atref-batch.test.ts +98 -0
- package/src/modules/access/__tests__/access-control.read-batch.test.ts +132 -0
- package/src/modules/access/__tests__/access-control.service.test.ts +1011 -0
- package/src/modules/access/__tests__/access-mutation.service.test.ts +439 -0
- package/src/modules/access/__tests__/access-splice.test.ts +247 -0
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +407 -0
- package/src/modules/access/__tests__/creator-access.test.ts +217 -0
- package/src/modules/access/__tests__/grant-sources.test.ts +204 -0
- package/src/modules/access/__tests__/kb-read-filter.test.ts +70 -0
- package/src/modules/access/__tests__/roles-admin.service.test.ts +469 -0
- package/src/modules/access/__tests__/roles-edit.test.ts +138 -0
- package/src/modules/access/__tests__/roles-yaml-guard.test.ts +70 -0
- package/src/modules/access/__tests__/roles.routes.test.ts +234 -0
- package/src/modules/access/access-control.interface.ts +383 -0
- package/src/modules/access/access-control.service.ts +1794 -0
- package/src/modules/access/access-errors.ts +60 -0
- package/src/modules/access/access-mutation.service.ts +369 -0
- package/src/modules/access/access-splice.ts +413 -0
- package/src/modules/access/access.routes.ts +894 -0
- package/src/modules/access/creator-access.ts +270 -0
- package/src/modules/access/kb-read-filter.ts +76 -0
- package/src/modules/access/roles-admin.service.ts +741 -0
- package/src/modules/access/roles-edit.ts +248 -0
- package/src/modules/access/roles-yaml-guard.ts +89 -0
- package/src/modules/admin/admin-access.routes.ts +29 -0
- package/src/modules/admin/admin-access.service.ts +38 -0
- package/src/modules/admin/admin.interface.ts +10 -0
- package/src/modules/auth/account-erasure.service.ts +183 -0
- package/src/modules/auth/auth.middleware.ts +78 -0
- package/src/modules/auth/auth.routes.ts +97 -0
- package/src/modules/auth/auth.service.ts +199 -0
- package/src/modules/code-mode/code-mode-names.ts +38 -0
- package/src/modules/code-mode/code-mode.tool.ts +117 -0
- package/src/modules/code-mode/index.ts +6 -0
- package/src/modules/database/connection.ts +15 -0
- package/src/modules/database/core-schema.ts +431 -0
- package/src/modules/database/migrate.ts +43 -0
- package/src/modules/database/schema.ts +11 -0
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +87 -0
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +150 -0
- package/src/modules/diff/__tests__/diff.service.seed-atomicity.test.ts +184 -0
- package/src/modules/diff/__tests__/diff.service.test.ts +202 -0
- package/src/modules/diff/diff-paths.ts +9 -0
- package/src/modules/diff/diff.config.ts +12 -0
- package/src/modules/diff/diff.interface.ts +78 -0
- package/src/modules/diff/diff.routes.ts +277 -0
- package/src/modules/diff/diff.service.ts +508 -0
- package/src/modules/diff/line-diff.ts +79 -0
- package/src/modules/mcp/__tests__/bevel-oauth-provider.test.ts +287 -0
- package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +249 -0
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +253 -0
- package/src/modules/mcp/__tests__/mcp-session-store.test.ts +151 -0
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +150 -0
- package/src/modules/mcp/__tests__/mcp.routes.delete.test.ts +92 -0
- package/src/modules/mcp/__tests__/mcp.service.test.ts +414 -0
- package/src/modules/mcp/mcp-auth.middleware.ts +126 -0
- package/src/modules/mcp/mcp-session-store.ts +162 -0
- package/src/modules/mcp/mcp.routes.ts +263 -0
- package/src/modules/mcp/mcp.service.ts +973 -0
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +401 -0
- package/src/modules/mcp/oauth/oauth-consent.routes.ts +60 -0
- package/src/modules/mcp/oauth/oauth-state.ts +61 -0
- package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +277 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +206 -0
- package/src/modules/secrets-vault/__tests__/mcp-oauth-discovery.service.test.ts +178 -0
- package/src/modules/secrets-vault/__tests__/scopes-covered.test.ts +101 -0
- package/src/modules/secrets-vault/__tests__/secrets-variable-loader.test.ts +54 -0
- package/src/modules/secrets-vault/__tests__/tool-owner-gate.route.test.ts +143 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +792 -0
- package/src/modules/secrets-vault/index.ts +25 -0
- package/src/modules/secrets-vault/mcp-oauth-discovery.service.ts +289 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +104 -0
- package/src/modules/secrets-vault/secrets-vault.contract.ts +270 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +526 -0
- package/src/modules/skills/__tests__/skills.service.test.ts +176 -0
- package/src/modules/skills/index.ts +10 -0
- package/src/modules/skills/skills.contract.ts +54 -0
- package/src/modules/skills/skills.routes.ts +38 -0
- package/src/modules/skills/skills.service.ts +245 -0
- package/src/modules/skills/skills.tools.ts +121 -0
- package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +358 -0
- package/src/modules/tool-auth/__tests__/internal-token.service.test.ts +79 -0
- package/src/modules/tool-auth/__tests__/manual-auth.middleware.test.ts +88 -0
- package/src/modules/tool-auth/external-api-key.errors.ts +25 -0
- package/src/modules/tool-auth/external-api-key.interface.ts +99 -0
- package/src/modules/tool-auth/external-api-key.service.ts +209 -0
- package/src/modules/tool-auth/internal-token.service.ts +124 -0
- package/src/modules/tool-auth/llm-usage-meter.ts +19 -0
- package/src/modules/tool-auth/tool-auth.middleware.ts +220 -0
- package/src/modules/tool-helpers/__tests__/phase0-loopback-spike.test.ts +129 -0
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +95 -0
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +146 -0
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +75 -0
- package/src/modules/tool-helpers/index.ts +18 -0
- package/src/modules/tool-helpers/tool-context.ts +98 -0
- package/src/modules/tool-helpers/tool-def.ts +73 -0
- package/src/modules/tool-helpers/tool-handler.ts +91 -0
- package/src/modules/tool-helpers/tool.contract.ts +85 -0
- package/src/modules/tool-helpers/validate-token.ts +50 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +200 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +499 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +156 -0
- package/src/modules/tool-manuals/index.ts +12 -0
- package/src/modules/tool-manuals/tool-manuals.contract.ts +183 -0
- package/src/modules/tool-manuals/tool-manuals.routes.ts +110 -0
- package/src/modules/tool-manuals/tool-manuals.service.ts +781 -0
- package/src/modules/tool-manuals/tool-manuals.tools.ts +202 -0
- package/src/modules/tool-registry/__tests__/tool-registry.test.ts +64 -0
- package/src/modules/tool-registry/manual.routes.ts +87 -0
- package/src/modules/tool-registry/tool-registry.ts +55 -0
- package/src/modules/tool-registry/tool.contract.ts +52 -0
- package/src/modules/workflow/__tests__/event-bus.test.ts +322 -0
- package/src/modules/workflow/__tests__/file-change-notifier.test.ts +51 -0
- package/src/modules/workflow/__tests__/format-affected-owners.test.ts +67 -0
- package/src/modules/workflow/__tests__/locking-filesystem.test.ts +445 -0
- package/src/modules/workflow/__tests__/pending-commits.canonical.test.ts +36 -0
- package/src/modules/workflow/__tests__/pending-commits.worker.test.ts +243 -0
- package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +308 -0
- package/src/modules/workflow/__tests__/sanitize-error.test.ts +67 -0
- package/src/modules/workflow/__tests__/session-ontology.policy.test.ts +62 -0
- package/src/modules/workflow/__tests__/session-ontology.service.test.ts +200 -0
- package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +232 -0
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +380 -0
- package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +340 -0
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +192 -0
- package/src/modules/workflow/agent-tools/workflow.tools.ts +502 -0
- package/src/modules/workflow/event-bus.ts +262 -0
- package/src/modules/workflow/events.routes.ts +266 -0
- package/src/modules/workflow/file-change-notifier.ts +54 -0
- package/src/modules/workflow/file-lock.service.ts +269 -0
- package/src/modules/workflow/git/__tests__/branch-name.test.ts +86 -0
- package/src/modules/workflow/git/__tests__/branchAuthor.test.ts +80 -0
- package/src/modules/workflow/git/__tests__/clone-config.test.ts +15 -0
- package/src/modules/workflow/git/__tests__/git-test-helpers.ts +47 -0
- package/src/modules/workflow/git/__tests__/git-version.failure.test.ts +24 -0
- package/src/modules/workflow/git/__tests__/git-version.test.ts +49 -0
- package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +389 -0
- package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +124 -0
- package/src/modules/workflow/git/__tests__/git.service.commitChanges.test.ts +105 -0
- package/src/modules/workflow/git/__tests__/git.service.commitFile.test.ts +211 -0
- package/src/modules/workflow/git/__tests__/git.service.createBranch.test.ts +154 -0
- package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +320 -0
- package/src/modules/workflow/git/__tests__/git.service.diffFileAtCommit.test.ts +202 -0
- package/src/modules/workflow/git/__tests__/git.service.diffFileBetweenBranches.test.ts +453 -0
- package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +198 -0
- package/src/modules/workflow/git/__tests__/git.service.listTrackedFiles.test.ts +125 -0
- package/src/modules/workflow/git/__tests__/git.service.logForFile.test.ts +219 -0
- package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +145 -0
- package/src/modules/workflow/git/__tests__/git.service.pendingChanges.test.ts +240 -0
- package/src/modules/workflow/git/__tests__/git.service.postMergePull.test.ts +272 -0
- package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +232 -0
- package/src/modules/workflow/git/__tests__/git.service.readFileAtRef.test.ts +101 -0
- package/src/modules/workflow/git/__tests__/git.service.status.test.ts +127 -0
- package/src/modules/workflow/git/__tests__/mutex.test.ts +78 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.test.ts +225 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +101 -0
- package/src/modules/workflow/git/branch-name.ts +70 -0
- package/src/modules/workflow/git/clone-config.ts +71 -0
- package/src/modules/workflow/git/git-version.ts +70 -0
- package/src/modules/workflow/git/git.service.ts +2248 -0
- package/src/modules/workflow/git/mutex.ts +22 -0
- package/src/modules/workflow/git/pull-request.service.ts +447 -0
- package/src/modules/workflow/locking-filesystem.ts +489 -0
- package/src/modules/workflow/pending-commits.service.ts +444 -0
- package/src/modules/workflow/pending-commits.worker.ts +361 -0
- package/src/modules/workflow/read-only-filesystem.ts +54 -0
- package/src/modules/workflow/recovery-bot.ts +73 -0
- package/src/modules/workflow/review-workflow/__tests__/approval-states.test.ts +560 -0
- package/src/modules/workflow/review-workflow/__tests__/cancel-pr.test.ts +176 -0
- package/src/modules/workflow/review-workflow/__tests__/merge-gate.test.ts +258 -0
- package/src/modules/workflow/review-workflow/review-workflow.interface.ts +199 -0
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +806 -0
- package/src/modules/workflow/sanitize-error.ts +62 -0
- package/src/modules/workflow/session-ontology.policy.ts +70 -0
- package/src/modules/workflow/session-ontology.service.ts +178 -0
- package/src/modules/workflow/workflow-hooks.ts +101 -0
- package/src/modules/workflow/workflow.errors.ts +285 -0
- package/src/modules/workflow/workflow.routes.ts +858 -0
- package/src/modules/workflow/workflow.service.ts +1555 -0
- package/src/modules/workspace/__tests__/kb-seed.service.test.ts +213 -0
- package/src/modules/workspace/__tests__/routine-write-policy.test.ts +68 -0
- package/src/modules/workspace/__tests__/session-ontology.gate.test.ts +237 -0
- package/src/modules/workspace/__tests__/spill-store.test.ts +43 -0
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +233 -0
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +176 -0
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +303 -0
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +276 -0
- package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +120 -0
- package/src/modules/workspace/__tests__/workspace.service.test.ts +565 -0
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +504 -0
- package/src/modules/workspace/bevel-ignore.ts +62 -0
- package/src/modules/workspace/kb-seed.interface.ts +36 -0
- package/src/modules/workspace/kb-seed.service.ts +361 -0
- package/src/modules/workspace/routine-write-policy.ts +79 -0
- package/src/modules/workspace/session-ontology.gate.ts +189 -0
- package/src/modules/workspace/session-sink.ts +25 -0
- package/src/modules/workspace/spill-store.ts +87 -0
- package/src/modules/workspace/workspace.routes.ts +1114 -0
- package/src/modules/workspace/workspace.service.ts +1343 -0
- package/src/modules/workspace/workspace.tools.ts +885 -0
- package/src/shared/__tests__/frontmatter-id.test.ts +88 -0
- package/src/shared/__tests__/fs-walk.test.ts +42 -0
- package/src/shared/__tests__/ssrf.test.ts +53 -0
- package/src/shared/__tests__/utcp-namespace.test.ts +19 -0
- package/src/shared/frontmatter-id.ts +72 -0
- package/src/shared/fs-walk.ts +30 -0
- package/src/shared/hash-email.ts +14 -0
- package/src/shared/kb-layout.test.ts +88 -0
- package/src/shared/kb-layout.ts +101 -0
- package/src/shared/ssrf.ts +78 -0
- package/src/shared/token-crypto.ts +54 -0
- package/src/shared/ttl-cache.ts +27 -0
- package/src/shared/utcp-namespace.ts +88 -0
- package/src/version.ts +19 -0
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
import type { AuthProviderPlugin } from '../modules/auth/auth.routes.js';
|
|
2
|
+
import type { AuthUser } from '@bevel-software/platform-shared';
|
|
3
|
+
import { DEFAULT_BRANCH, PROTECTED_BRANCHES, SKILLS_DIR, TOOLS_DIR } from '@bevel-software/platform-shared';
|
|
4
|
+
import { CoreConfig } from '../core-config.js';
|
|
5
|
+
import { getDb, type Database } from '../modules/database/connection.js';
|
|
6
|
+
import { runCoreMigrations } from '../modules/database/migrate.js';
|
|
7
|
+
import { coreMigrationsDir } from '../assets.js';
|
|
8
|
+
import { WorkspaceService } from '../modules/workspace/workspace.service.js';
|
|
9
|
+
import { RoutineWritePolicyService } from '../modules/workspace/routine-write-policy.js';
|
|
10
|
+
import { KbSeedService } from '../modules/workspace/kb-seed.service.js';
|
|
11
|
+
import { SpillStore } from '../modules/workspace/spill-store.js';
|
|
12
|
+
import { UuidSessionSink, type ISessionSink } from '../modules/workspace/session-sink.js';
|
|
13
|
+
import { AuthService } from '../modules/auth/auth.service.js';
|
|
14
|
+
import { AccountErasureService } from '../modules/auth/account-erasure.service.js';
|
|
15
|
+
import { createAuthMiddleware } from '../modules/auth/auth.middleware.js';
|
|
16
|
+
import { AccessControlService } from '../modules/access/access-control.service.js';
|
|
17
|
+
import { CreatorAccessService } from '../modules/access/creator-access.js';
|
|
18
|
+
import { SkillService } from '../modules/skills/index.js';
|
|
19
|
+
import { ToolManualService } from '../modules/tool-manuals/index.js';
|
|
20
|
+
import {
|
|
21
|
+
DbSecretsVaultService,
|
|
22
|
+
McpOAuthDiscoveryService,
|
|
23
|
+
registerBevelSecretsVariableLoader,
|
|
24
|
+
} from '../modules/secrets-vault/index.js';
|
|
25
|
+
import { GitService } from '../modules/workflow/git/git.service.js';
|
|
26
|
+
import { PullRequestService } from '../modules/workflow/git/pull-request.service.js';
|
|
27
|
+
import { WorkspaceMutex } from '../modules/workflow/git/mutex.js';
|
|
28
|
+
import { assertGitVersion } from '../modules/workflow/git/git-version.js';
|
|
29
|
+
import { DiffService } from '../modules/diff/diff.service.js';
|
|
30
|
+
import { ReviewWorkflowService } from '../modules/workflow/review-workflow/review-workflow.service.js';
|
|
31
|
+
import { FileLockService } from '../modules/workflow/file-lock.service.js';
|
|
32
|
+
import { WorkflowEventBus } from '../modules/workflow/event-bus.js';
|
|
33
|
+
import { FileChangeNotifier } from '../modules/workflow/file-change-notifier.js';
|
|
34
|
+
import { WorkflowService } from '../modules/workflow/workflow.service.js';
|
|
35
|
+
import { WorkflowHooks } from '../modules/workflow/workflow-hooks.js';
|
|
36
|
+
import { SessionOntologyService } from '../modules/workflow/session-ontology.service.js';
|
|
37
|
+
import { PendingCommitsService } from '../modules/workflow/pending-commits.service.js';
|
|
38
|
+
import {
|
|
39
|
+
PendingCommitsWorker,
|
|
40
|
+
consoleSystemNoticeSink,
|
|
41
|
+
} from '../modules/workflow/pending-commits.worker.js';
|
|
42
|
+
import { ensureRecoveryBotUser } from '../modules/workflow/recovery-bot.js';
|
|
43
|
+
import { AdminAccessService } from '../modules/admin/admin-access.service.js';
|
|
44
|
+
import { ExternalApiKeyService } from '../modules/tool-auth/external-api-key.service.js';
|
|
45
|
+
import { InternalTokenService } from '../modules/tool-auth/internal-token.service.js';
|
|
46
|
+
import {
|
|
47
|
+
createToolAuthMiddleware,
|
|
48
|
+
createManualAuthMiddleware,
|
|
49
|
+
} from '../modules/tool-auth/tool-auth.middleware.js';
|
|
50
|
+
import { unmeteredLlmUsage, type ILlmUsageMeter } from '../modules/tool-auth/llm-usage-meter.js';
|
|
51
|
+
import { McpSessionStore } from '../modules/mcp/mcp-session-store.js';
|
|
52
|
+
import { McpService } from '../modules/mcp/mcp.service.js';
|
|
53
|
+
import { createMcpAuthMiddleware } from '../modules/mcp/mcp-auth.middleware.js';
|
|
54
|
+
import { BevelOAuthProvider } from '../modules/mcp/oauth/bevel-oauth-provider.js';
|
|
55
|
+
import { getOAuthProtectedResourceMetadataUrl } from '@modelcontextprotocol/sdk/server/auth/router.js';
|
|
56
|
+
import { ToolRegistry } from '../modules/tool-registry/tool-registry.js';
|
|
57
|
+
import { createToolContextResolver } from '../modules/tool-helpers/tool-context.js';
|
|
58
|
+
import { createToolHandlerFactory } from '../modules/tool-helpers/tool-handler.js';
|
|
59
|
+
import { TokenCrypto } from '../shared/token-crypto.js';
|
|
60
|
+
import { noopRecoveryAgent, type CorePorts } from './core-ports.js';
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Everything the CORE composition builds: the core services `createCoreServer`
|
|
64
|
+
* mounts, plus the primitives the enterprise overlay's own construction needs
|
|
65
|
+
* (db, event bus, notifier, registries, middlewares, …).
|
|
66
|
+
*
|
|
67
|
+
* The fields under "server-time seams" are deliberately MUTABLE: they are only
|
|
68
|
+
* read when the server is built / at request time, and the enterprise overlay
|
|
69
|
+
* overwrites them after `createCoreServices` returns (its implementations need
|
|
70
|
+
* core services to construct). See {@link CorePorts} for the pattern.
|
|
71
|
+
*/
|
|
72
|
+
export interface CoreServices {
|
|
73
|
+
config: CoreConfig;
|
|
74
|
+
db: Database;
|
|
75
|
+
workspaceService: WorkspaceService;
|
|
76
|
+
kbSeedService: KbSeedService;
|
|
77
|
+
spillStore: SpillStore;
|
|
78
|
+
accessControl: AccessControlService;
|
|
79
|
+
creatorAccess: CreatorAccessService;
|
|
80
|
+
sessionOntologyService: SessionOntologyService;
|
|
81
|
+
routineWritePolicy: RoutineWritePolicyService;
|
|
82
|
+
skillService: SkillService;
|
|
83
|
+
toolManualService: ToolManualService;
|
|
84
|
+
authService: AuthService;
|
|
85
|
+
authMiddleware: ReturnType<typeof createAuthMiddleware>;
|
|
86
|
+
accountErasureService: AccountErasureService;
|
|
87
|
+
gitService: GitService;
|
|
88
|
+
pullRequestService: PullRequestService;
|
|
89
|
+
diffService: DiffService;
|
|
90
|
+
reviewWorkflowService: ReviewWorkflowService;
|
|
91
|
+
fileLockService: FileLockService;
|
|
92
|
+
workflowService: WorkflowService;
|
|
93
|
+
eventBus: WorkflowEventBus;
|
|
94
|
+
fileChangeNotifier: FileChangeNotifier;
|
|
95
|
+
pendingCommitsService: PendingCommitsService;
|
|
96
|
+
pendingCommitsWorker: PendingCommitsWorker;
|
|
97
|
+
recoveryBot: AuthUser;
|
|
98
|
+
adminAccess: AdminAccessService;
|
|
99
|
+
secretsVaultService: DbSecretsVaultService;
|
|
100
|
+
externalApiKeyService: ExternalApiKeyService;
|
|
101
|
+
internalTokenService: InternalTokenService;
|
|
102
|
+
mcpService: McpService;
|
|
103
|
+
mcpAuthMiddleware: ReturnType<typeof createMcpAuthMiddleware>;
|
|
104
|
+
mcpOAuthProvider: BevelOAuthProvider;
|
|
105
|
+
toolRegistry: ToolRegistry;
|
|
106
|
+
toolAuthMiddleware: ReturnType<typeof createToolAuthMiddleware>;
|
|
107
|
+
manualAuthMiddleware: ReturnType<typeof createManualAuthMiddleware>;
|
|
108
|
+
toolHandlerFactory: ReturnType<typeof createToolHandlerFactory>;
|
|
109
|
+
// ── Server-time seams (enterprise overwrites after construction) ────────
|
|
110
|
+
/** `start_session` backing — core default {@link UuidSessionSink}. */
|
|
111
|
+
sessionSink: ISessionSink;
|
|
112
|
+
/** Connection-key LLM metering view — core default unmetered. */
|
|
113
|
+
usageMeter: ILlmUsageMeter;
|
|
114
|
+
/** SSO plugins the auth router mounts — same array instance as the port. */
|
|
115
|
+
authProviders: AuthProviderPlugin[];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export async function createCoreServices(
|
|
119
|
+
config: CoreConfig,
|
|
120
|
+
ports: CorePorts = {},
|
|
121
|
+
): Promise<CoreServices> {
|
|
122
|
+
// Fail fast on a runtime whose git is too old for `--no-write-fetch-head`
|
|
123
|
+
// (see `git-version.ts`): every clone, fetch and refresh below depends on it,
|
|
124
|
+
// so an unsupported binary is better surfaced here than at the first merge.
|
|
125
|
+
await assertGitVersion();
|
|
126
|
+
const db = getDb(config.databaseUrl);
|
|
127
|
+
// Migrations must run BEFORE any service that reads or writes a managed
|
|
128
|
+
// table. `PendingCommitsService.startupReconcile` (called later in this
|
|
129
|
+
// function) hits `pending_commits` — on a fresh DB, deferring migrations to
|
|
130
|
+
// after createServices would 42P01 the boot.
|
|
131
|
+
//
|
|
132
|
+
// DIVERGENCE vs bevel-platform's copy of this file (Phase C reconciliation):
|
|
133
|
+
// upstream still calls the legacy single-folder `runMigrations(db)`; this
|
|
134
|
+
// package runs its own squashed idempotent CORE history from the packaged
|
|
135
|
+
// `migrations/` folder, tracked in `__drizzle_migrations_core`. An
|
|
136
|
+
// enterprise overlay runs its own history AFTER this (see migrate.ts).
|
|
137
|
+
await runCoreMigrations(db, coreMigrationsDir());
|
|
138
|
+
const workspaceService = new WorkspaceService(
|
|
139
|
+
config.workspacesRoot,
|
|
140
|
+
config.kbRepoUrl,
|
|
141
|
+
config.kbDirName,
|
|
142
|
+
config.gitUsername,
|
|
143
|
+
);
|
|
144
|
+
// Seed (or top-up) the KB remote before the first clone so the rest of the app
|
|
145
|
+
// can keep assuming the remote already carries the protected branches + base
|
|
146
|
+
// scaffolding — a fresh or partially-populated remote no longer needs to have
|
|
147
|
+
// been forked from the standalone template.
|
|
148
|
+
const kbSeedService = new KbSeedService(
|
|
149
|
+
config.kbRepoUrl,
|
|
150
|
+
config.kbTemplateDir,
|
|
151
|
+
[...PROTECTED_BRANCHES],
|
|
152
|
+
DEFAULT_BRANCH,
|
|
153
|
+
config.seedAdminEmails,
|
|
154
|
+
config.gitUsername,
|
|
155
|
+
);
|
|
156
|
+
workspaceService.setSeedService(kbSeedService);
|
|
157
|
+
// Shared, workspace-independent store for oversized `call_tool_chain` results,
|
|
158
|
+
// read back via `read_file`. Sibling of `workspacesRoot`, never committed.
|
|
159
|
+
const spillStore = new SpillStore(config.spillRoot);
|
|
160
|
+
const accessControl = new AccessControlService(workspaceService, config.kbDirName);
|
|
161
|
+
// Creator read-grant on creation: read is default-deny, so every surface
|
|
162
|
+
// that creates KB files/folders (human routes, agent tools, upload apply)
|
|
163
|
+
// consults this planner to keep creations visible to their creator.
|
|
164
|
+
const creatorAccess = new CreatorAccessService(workspaceService, accessControl, config.kbDirName);
|
|
165
|
+
|
|
166
|
+
// Ontology-session boundary: records each agent run's touched ontologies and
|
|
167
|
+
// blocks writes once a run has crossed ontologies. Postgres-backed so the
|
|
168
|
+
// boundary survives a restart.
|
|
169
|
+
const sessionOntologyService = new SessionOntologyService(db);
|
|
170
|
+
// Per-run write restriction (by file extension). Shared by the workspace tool
|
|
171
|
+
// surface (which enforces it) and the routine runner (which sets it for
|
|
172
|
+
// dashboard-only `watchlist_check` runs). In-memory: a restriction lives only for
|
|
173
|
+
// one run, unlike the Postgres-backed ontology touched-set above.
|
|
174
|
+
const routineWritePolicy = new RoutineWritePolicyService();
|
|
175
|
+
// Skills: discovered from the default-branch workspace only (global catalog).
|
|
176
|
+
const skillService = new SkillService(workspaceService, accessControl, config.kbDirName);
|
|
177
|
+
// Tool manuals: user-authored `*.tool` files under `Tools/` in the default
|
|
178
|
+
// branch — access-controlled like Skills, served to external agents via
|
|
179
|
+
// `GET /api/agent/all-tools` and registered on the MCP proxy's UTCP client.
|
|
180
|
+
const toolManualService = new ToolManualService(workspaceService, accessControl, config.kbDirName);
|
|
181
|
+
// Auth service — resolves identities for login, PR author attribution, and
|
|
182
|
+
// access lookups. (Change requests now store the author email directly, so
|
|
183
|
+
// PullRequestService no longer depends on it for attribution.)
|
|
184
|
+
const authService = new AuthService(db, config);
|
|
185
|
+
const authMiddleware = createAuthMiddleware(authService);
|
|
186
|
+
|
|
187
|
+
// Shared mutex so git and diff operations on the same workspace serialize
|
|
188
|
+
// against each other — a backup-reseed races a concurrent commit otherwise.
|
|
189
|
+
const workspaceMutex = new WorkspaceMutex();
|
|
190
|
+
// Workflow lifecycle hooks — the ONE registry this composition shares
|
|
191
|
+
// between GitService (advisory commit validation), the session-ontology
|
|
192
|
+
// gate (blocking preWrite), and the enterprise composition root, which
|
|
193
|
+
// registers module-owned handlers on `workflowService.hooks` right after
|
|
194
|
+
// this function returns. Core registers none: no commit-time validation
|
|
195
|
+
// (advisory anyway) and no ontology write block.
|
|
196
|
+
const workflowHooks = new WorkflowHooks();
|
|
197
|
+
const gitService = new GitService(
|
|
198
|
+
workspaceService,
|
|
199
|
+
workflowHooks,
|
|
200
|
+
config.kbDirName,
|
|
201
|
+
workspaceMutex,
|
|
202
|
+
accessControl,
|
|
203
|
+
);
|
|
204
|
+
// A fresh clone has already fetched every ref — let the git layer skip the
|
|
205
|
+
// redundant implicit `git fetch` on the first `listBranches` after bootstrap.
|
|
206
|
+
workspaceService.setWorkspaceClonedListener((id) => gitService.noteWorkspaceFetched(id));
|
|
207
|
+
const pullRequestService = new PullRequestService(
|
|
208
|
+
db,
|
|
209
|
+
workspaceService,
|
|
210
|
+
accessControl,
|
|
211
|
+
gitService,
|
|
212
|
+
);
|
|
213
|
+
const diffService = new DiffService(
|
|
214
|
+
workspaceService,
|
|
215
|
+
workspaceMutex,
|
|
216
|
+
config.workspacesRoot,
|
|
217
|
+
config.backupsRoot,
|
|
218
|
+
config.kbDirName,
|
|
219
|
+
);
|
|
220
|
+
// Late-bind the diff service into WorkspaceService so file writes/moves
|
|
221
|
+
// trigger backup updates. (GitService used to take a diffService too — for
|
|
222
|
+
// the post-switch backup reseed — but switchBranch is gone with the
|
|
223
|
+
// per-branch workspace model, so the injection no longer applies.)
|
|
224
|
+
workspaceService.setDiffService(diffService);
|
|
225
|
+
const reviewWorkflowService = new ReviewWorkflowService(
|
|
226
|
+
db,
|
|
227
|
+
accessControl,
|
|
228
|
+
workspaceService,
|
|
229
|
+
gitService,
|
|
230
|
+
);
|
|
231
|
+
// Late-bind the comment enricher so PullRequestService.getPrDetail includes
|
|
232
|
+
// our DB-backed comments without forcing a circular constructor dependency.
|
|
233
|
+
pullRequestService.setDetailEnricher(reviewWorkflowService);
|
|
234
|
+
|
|
235
|
+
// Workflow facade — the abstraction every app consumer should reach for
|
|
236
|
+
// instead of the individual git / PR / review-workflow services. See
|
|
237
|
+
// PLAN.md for the migration story. Today it delegates straight through;
|
|
238
|
+
// implementations migrate into the workflow module over later steps.
|
|
239
|
+
const fileLockService = new FileLockService(db);
|
|
240
|
+
// Background commit queue. The `WorkflowService.releaseLock` path
|
|
241
|
+
// enqueues a row here instead of running commitFile + push inline; the
|
|
242
|
+
// worker drains the queue out of band so a git hiccup can't block the
|
|
243
|
+
// user-visible save path. See `lock-decoupling-plan.md`.
|
|
244
|
+
const pendingCommitsService = new PendingCommitsService(db);
|
|
245
|
+
// Let the git status path tell an expected dirty tree (queued saves still
|
|
246
|
+
// draining) from a genuinely orphaned one before it warns loudly.
|
|
247
|
+
gitService.setPendingCommitsProbe((workspaceId) =>
|
|
248
|
+
pendingCommitsService.hasAnyForWorkspace(workspaceId),
|
|
249
|
+
);
|
|
250
|
+
// In-process event bus: every WorkflowService mutation method that
|
|
251
|
+
// succeeds emits a typed event; the SSE route fans it to connected
|
|
252
|
+
// browser sessions. Single instance per Node process — survives across
|
|
253
|
+
// requests, doesn't survive restarts (clients reconnect + resync).
|
|
254
|
+
const eventBus = new WorkflowEventBus();
|
|
255
|
+
// In-process post-commit hook (distinct from the SSE bus): fires once per
|
|
256
|
+
// committed change (batched paths) so catalogs refresh instantly and the
|
|
257
|
+
// id-repair keeps the id namespace collision-free. Subscribers are registered
|
|
258
|
+
// below, once the reacting services exist.
|
|
259
|
+
const fileChangeNotifier = new FileChangeNotifier();
|
|
260
|
+
const workflowService = new WorkflowService(
|
|
261
|
+
db,
|
|
262
|
+
gitService,
|
|
263
|
+
pullRequestService,
|
|
264
|
+
reviewWorkflowService,
|
|
265
|
+
workspaceService,
|
|
266
|
+
accessControl,
|
|
267
|
+
fileLockService,
|
|
268
|
+
pendingCommitsService,
|
|
269
|
+
config.kbDirName,
|
|
270
|
+
eventBus,
|
|
271
|
+
fileChangeNotifier,
|
|
272
|
+
// Exposed as `workflowService.hooks` — the SAME instance GitService and
|
|
273
|
+
// the session-ontology gate consult, so enterprise registrations against
|
|
274
|
+
// it reach every hook point.
|
|
275
|
+
workflowHooks,
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
// Subscriber A — catalog freshness: a committed change drops the affected
|
|
279
|
+
// caches immediately instead of waiting out their TTLs. The tool/skill
|
|
280
|
+
// catalogs are global but read the DEFAULT branch only, so only
|
|
281
|
+
// default-branch changes under their folders matter. (The kb-graph id-index
|
|
282
|
+
// invalidation that used to live in this subscriber is registered by the
|
|
283
|
+
// enterprise overlay, next to the kb-graph service it belongs to — the
|
|
284
|
+
// caches are independent, so the split preserves behavior.)
|
|
285
|
+
fileChangeNotifier.onFilesChanged(({ branch, paths }) => {
|
|
286
|
+
if (branch !== DEFAULT_BRANCH) return;
|
|
287
|
+
if (paths.some((p) => p.startsWith(`${config.kbDirName}/${TOOLS_DIR}/`))) toolManualService.invalidate();
|
|
288
|
+
if (paths.some((p) => p.startsWith(`${config.kbDirName}/${SKILLS_DIR}/`))) skillService.invalidate();
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// Admin = `Admin` role in roles.yaml, resolved through the access model on the
|
|
292
|
+
// default branch (no env allow-list).
|
|
293
|
+
const adminAccess = new AdminAccessService(accessControl, workspaceService, DEFAULT_BRANCH);
|
|
294
|
+
|
|
295
|
+
// Secrets Vault: the per-user store of credentials (static API keys + OAuth
|
|
296
|
+
// tokens) that back UTCP tool variables (`${FOO_API_KEY}`). Encrypted at rest
|
|
297
|
+
// with the connector-config key; read only by the `bevel-secrets` variable
|
|
298
|
+
// loader at tool-call time. Swap-seam: `ISecretsVaultService` could later be a
|
|
299
|
+
// client's external secret manager without touching the loader or the tools.
|
|
300
|
+
const secretsVaultService = new DbSecretsVaultService(
|
|
301
|
+
db,
|
|
302
|
+
config.secretsEncKey,
|
|
303
|
+
undefined,
|
|
304
|
+
// Scope-driven resolution: a `.tool`'s declared variable scope decides whether
|
|
305
|
+
// `resolve` reads the shared (admin) row or the caller's own per-user row.
|
|
306
|
+
(key) => toolManualService.scopeOfVariable(key),
|
|
307
|
+
);
|
|
308
|
+
// Register the `bevel-secrets` UTCP variable loader against this vault so any
|
|
309
|
+
// UTCP client can resolve `${VAR}` from the caller's secrets at tool-call time.
|
|
310
|
+
registerBevelSecretsVariableLoader(secretsVaultService);
|
|
311
|
+
|
|
312
|
+
// Zero-config OAuth for bare `type: mcp` `.tool`s: when the remote server
|
|
313
|
+
// demands OAuth (MCP authorization spec), discover its authorization server,
|
|
314
|
+
// dynamically register a public PKCE client, and persist the provider as the
|
|
315
|
+
// shared vault row — the tool catalog then decorates the manual with a
|
|
316
|
+
// synthetic per-user sign-in. Setter-injected: this service needs the vault,
|
|
317
|
+
// which is constructed after the tool-manual service.
|
|
318
|
+
const mcpOAuthDiscovery = new McpOAuthDiscoveryService({
|
|
319
|
+
secretsVault: secretsVaultService,
|
|
320
|
+
redirectUri: `${config.publicBackendUrl}/api/secrets/oauth/callback`,
|
|
321
|
+
});
|
|
322
|
+
toolManualService.setMcpAuthDiscovery(mcpOAuthDiscovery);
|
|
323
|
+
|
|
324
|
+
// Least-privilege internal tokens: minted per (workspace, user, scope) by the
|
|
325
|
+
// agents' code-mode clients and by the MCP proxy, verified by the tool-auth
|
|
326
|
+
// middleware below — the same instance must back both sides.
|
|
327
|
+
const internalTokenService = new InternalTokenService({ prefix: config.internalTokenPrefix });
|
|
328
|
+
|
|
329
|
+
// GDPR erasure path: admin-driven user deletion. The core service erases the
|
|
330
|
+
// rows it owns; each module contributes its slice as a participant.
|
|
331
|
+
const accountErasureService = new AccountErasureService(db, ports.erasureParticipants ?? []);
|
|
332
|
+
|
|
333
|
+
// MCP (remote agent access). ExternalApiKeyService handles connection-key
|
|
334
|
+
// lifecycle; McpSessionStore holds per-session userId in memory
|
|
335
|
+
// (single-replica — see docs/mcp-remote-access.md). McpService is now a
|
|
336
|
+
// GENERIC proxy: per session it discovers the UTCP manual at /api/agent/utcp
|
|
337
|
+
// over loopback and re-exposes every tool, dispatching calls back through the
|
|
338
|
+
// REST tool surface (so agent logic + metering live there, once).
|
|
339
|
+
const externalApiKeyService = new ExternalApiKeyService(db, config.externalApiKeyPrefix);
|
|
340
|
+
const mcpSessionStore = new McpSessionStore();
|
|
341
|
+
const mcpService = new McpService(
|
|
342
|
+
mcpSessionStore,
|
|
343
|
+
{
|
|
344
|
+
// Loopback to our own REST tool surface — 127.0.0.1 (not localhost) to pin
|
|
345
|
+
// IPv4 and dodge resolver ambiguity. The proxy authenticates each call with
|
|
346
|
+
// the caller's own connection key.
|
|
347
|
+
loopbackBaseUrl: `http://127.0.0.1:${config.port}`,
|
|
348
|
+
// Manual namespace + UTCP variable prefix (KNOWLEDGE_BASE_API_URL / …).
|
|
349
|
+
manualName: 'KNOWLEDGE_BASE',
|
|
350
|
+
// Oversized chain results spill here too — an external MCP session has no
|
|
351
|
+
// ambient workspace, so it reads the spill back by ref via `read_file`.
|
|
352
|
+
spillStore,
|
|
353
|
+
// For the needs-authorization setup link surfaced to external agents.
|
|
354
|
+
publicFrontendUrl: config.publicFrontendUrl,
|
|
355
|
+
},
|
|
356
|
+
// Pre-dispatch per-user credential check: the vault answers "has this caller
|
|
357
|
+
// set it?" and the manual catalog answers "which user-scoped vars does this
|
|
358
|
+
// tool need?".
|
|
359
|
+
secretsVaultService,
|
|
360
|
+
toolManualService,
|
|
361
|
+
// Loopback bearer mint for OAuth/JWT sessions — their own bearer would
|
|
362
|
+
// 401 at the connection-key/internal-only /api/agent/* hop.
|
|
363
|
+
internalTokenService,
|
|
364
|
+
// Session-grant reset for broken tool sign-ins. A closure because the
|
|
365
|
+
// provider is constructed just below (it needs nothing from McpService;
|
|
366
|
+
// the binding is only dereferenced at call time, long after boot).
|
|
367
|
+
(bearer) => mcpOAuthProvider.revokeByAccessToken(bearer),
|
|
368
|
+
);
|
|
369
|
+
// MCP OAuth 2.1 authorization server (our own AS): lets MCP clients with no
|
|
370
|
+
// pre-shared connection key connect via the standard 401 → discovery → DCR →
|
|
371
|
+
// authorize (PKCE) flow. The authorize step routes the browser to /connect
|
|
372
|
+
// where the user configures their tools; the resulting access token resolves
|
|
373
|
+
// to that user in the MCP auth middleware, like a connection key.
|
|
374
|
+
const mcpOAuthProvider = new BevelOAuthProvider({
|
|
375
|
+
db,
|
|
376
|
+
crypto: config.secretsEncKey ? new TokenCrypto(config.secretsEncKey) : null,
|
|
377
|
+
stateSecret: config.jwtSecret,
|
|
378
|
+
publicFrontendUrl: config.publicFrontendUrl,
|
|
379
|
+
tokenPrefix: config.mcpOAuthTokenPrefix,
|
|
380
|
+
});
|
|
381
|
+
// RFC 9728 pointer carried on every MCP 401 challenge so OAuth-capable
|
|
382
|
+
// clients discover the AS. Single source of truth for the resource id.
|
|
383
|
+
const mcpResourceUrl = new URL('/api/mcp', config.publicBackendUrl);
|
|
384
|
+
const mcpResourceMetadataUrl = getOAuthProtectedResourceMetadataUrl(mcpResourceUrl);
|
|
385
|
+
const mcpAuthMiddleware = createMcpAuthMiddleware(
|
|
386
|
+
authService,
|
|
387
|
+
externalApiKeyService,
|
|
388
|
+
mcpOAuthProvider,
|
|
389
|
+
mcpResourceMetadataUrl,
|
|
390
|
+
);
|
|
391
|
+
|
|
392
|
+
// ── Unified tool surface ──────────────────────────────────────────────
|
|
393
|
+
// ONE catalog of self-describing UTCP tools, served as two manuals (external
|
|
394
|
+
// for CI/MCP; internal for our agent's loopback code-mode client) and hosted
|
|
395
|
+
// by each owning module behind shared auth + context utilities. The core
|
|
396
|
+
// server assembles the router (registers tool defs + mounts endpoints). The
|
|
397
|
+
// `internalTokenService` minted above (shared with the agent factories) is
|
|
398
|
+
// the same one the tool-auth middleware verifies internal tokens against.
|
|
399
|
+
const toolRegistry = new ToolRegistry();
|
|
400
|
+
const resolveToolContext = createToolContextResolver({
|
|
401
|
+
authService,
|
|
402
|
+
workspaceService,
|
|
403
|
+
workflowService,
|
|
404
|
+
events: eventBus,
|
|
405
|
+
kbDirName: config.kbDirName,
|
|
406
|
+
creatorAccess,
|
|
407
|
+
});
|
|
408
|
+
const toolHandlerFactory = createToolHandlerFactory(resolveToolContext);
|
|
409
|
+
const toolAuthMiddleware = createToolAuthMiddleware(externalApiKeyService, internalTokenService);
|
|
410
|
+
// Read-only manual endpoints accept the above PLUS a browser JWT, so a
|
|
411
|
+
// logged-in user can browse the catalog with their session. Execution routes
|
|
412
|
+
// keep `toolAuthMiddleware` (no JWT), so a session can read but not invoke.
|
|
413
|
+
const manualAuthMiddleware = createManualAuthMiddleware(externalApiKeyService, internalTokenService, authService);
|
|
414
|
+
|
|
415
|
+
// Recovery-bot identity: a synthetic `recovery-bot@bevel.local` user
|
|
416
|
+
// backing (a) the recovery agent's commit authorship and (b) the
|
|
417
|
+
// `'system'` feedback notice's user_id FK. Idempotent ensure so this
|
|
418
|
+
// is safe to call on every boot.
|
|
419
|
+
const recoveryBot = await ensureRecoveryBotUser(db);
|
|
420
|
+
|
|
421
|
+
// Background commit worker. Drains `pending_commits` rows that the
|
|
422
|
+
// refactored `releaseLock` enqueues. On terminal failure (transient
|
|
423
|
+
// retry budget AND recovery-agent budget exhausted) the worker emits
|
|
424
|
+
// a `'system'` feedback notice that admins triage out of band.
|
|
425
|
+
//
|
|
426
|
+
// The orphan-startup sweep runs BEFORE start() so any rows that
|
|
427
|
+
// previous deploys left as `running` (process crashed mid-commit) get
|
|
428
|
+
// reset to `pending` before the worker starts claiming. The sweep
|
|
429
|
+
// also enqueues working-tree dirt that pre-dates the queue (the
|
|
430
|
+
// existing `target-company-state` orphans).
|
|
431
|
+
await pendingCommitsService.startupReconcile(
|
|
432
|
+
workspaceService.knownWorkspaces(),
|
|
433
|
+
{ scan: (ws) => workspaceService.scanOrphanedPaths(ws.id) },
|
|
434
|
+
{ email: recoveryBot.email, name: recoveryBot.name },
|
|
435
|
+
);
|
|
436
|
+
const pendingCommitsWorker = new PendingCommitsWorker({
|
|
437
|
+
service: pendingCommitsService,
|
|
438
|
+
workflow: {
|
|
439
|
+
runPendingCommit: (workspaceId, branch, path, user) =>
|
|
440
|
+
workflowService.runPendingCommit(workspaceId, branch, path, user),
|
|
441
|
+
},
|
|
442
|
+
// Both escalation sinks come through CorePorts: the recovery agent and the
|
|
443
|
+
// notice sink are enterprise-owned (background-agent factory / feedback
|
|
444
|
+
// dashboard); core defaults skip recovery and log to stderr.
|
|
445
|
+
recoveryAgent: ports.recoveryAgent ?? noopRecoveryAgent,
|
|
446
|
+
feedback: ports.systemNotice ?? consoleSystemNoticeSink,
|
|
447
|
+
workspaces: {
|
|
448
|
+
knownWorkspaces: () => workspaceService.knownWorkspaces(),
|
|
449
|
+
},
|
|
450
|
+
recoveryBot: {
|
|
451
|
+
id: recoveryBot.id,
|
|
452
|
+
email: recoveryBot.email,
|
|
453
|
+
name: recoveryBot.name,
|
|
454
|
+
},
|
|
455
|
+
});
|
|
456
|
+
pendingCommitsWorker.start();
|
|
457
|
+
|
|
458
|
+
return {
|
|
459
|
+
config,
|
|
460
|
+
db,
|
|
461
|
+
workspaceService,
|
|
462
|
+
kbSeedService,
|
|
463
|
+
spillStore,
|
|
464
|
+
accessControl,
|
|
465
|
+
creatorAccess,
|
|
466
|
+
sessionOntologyService,
|
|
467
|
+
routineWritePolicy,
|
|
468
|
+
skillService,
|
|
469
|
+
toolManualService,
|
|
470
|
+
authService,
|
|
471
|
+
authMiddleware,
|
|
472
|
+
accountErasureService,
|
|
473
|
+
gitService,
|
|
474
|
+
pullRequestService,
|
|
475
|
+
diffService,
|
|
476
|
+
reviewWorkflowService,
|
|
477
|
+
fileLockService,
|
|
478
|
+
workflowService,
|
|
479
|
+
eventBus,
|
|
480
|
+
fileChangeNotifier,
|
|
481
|
+
pendingCommitsService,
|
|
482
|
+
pendingCommitsWorker,
|
|
483
|
+
recoveryBot,
|
|
484
|
+
adminAccess,
|
|
485
|
+
secretsVaultService,
|
|
486
|
+
externalApiKeyService,
|
|
487
|
+
internalTokenService,
|
|
488
|
+
mcpService,
|
|
489
|
+
mcpAuthMiddleware,
|
|
490
|
+
mcpOAuthProvider,
|
|
491
|
+
toolRegistry,
|
|
492
|
+
toolAuthMiddleware,
|
|
493
|
+
manualAuthMiddleware,
|
|
494
|
+
toolHandlerFactory,
|
|
495
|
+
// Server-time seams — defaults here; the enterprise overlay overwrites
|
|
496
|
+
// (or, for the array, pushes into) these after construction.
|
|
497
|
+
sessionSink: ports.sessionSink ?? new UuidSessionSink(),
|
|
498
|
+
usageMeter: ports.usageMeter ?? unmeteredLlmUsage,
|
|
499
|
+
authProviders: ports.authProviders ?? [],
|
|
500
|
+
};
|
|
501
|
+
}
|