@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
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bevel-software/platform-core-backend",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Open-source core backend of the Bevel platform: git-backed knowledge workspace, workflow (branches/change requests/locks/SSE), skills, tools, secrets vault, access control and the remote MCP surface.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./schema": {
|
|
14
|
+
"types": "./dist/modules/database/core-schema.d.ts",
|
|
15
|
+
"default": "./dist/modules/database/core-schema.js"
|
|
16
|
+
},
|
|
17
|
+
"./modules/*": "./dist/modules/*",
|
|
18
|
+
"./shared/*": "./dist/shared/*",
|
|
19
|
+
"./package.json": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"src",
|
|
24
|
+
"migrations",
|
|
25
|
+
"kb-template"
|
|
26
|
+
],
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=22 <23"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@mastra/core": "1.35.0",
|
|
32
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
33
|
+
"@utcp/code-mode": "^1.2.12",
|
|
34
|
+
"@utcp/direct-call": "^1.1.1",
|
|
35
|
+
"@utcp/http": "^1.1.7",
|
|
36
|
+
"@utcp/mcp": "^1.1.3",
|
|
37
|
+
"@utcp/sdk": "^1.1.1",
|
|
38
|
+
"adm-zip": "^0.5.17",
|
|
39
|
+
"cors": "^2.8.5",
|
|
40
|
+
"dotenv": "^16.4.0",
|
|
41
|
+
"drizzle-orm": "^0.45.2",
|
|
42
|
+
"express": "^5.1.0",
|
|
43
|
+
"ignore": "^7.0.5",
|
|
44
|
+
"jsonwebtoken": "^9.0.3",
|
|
45
|
+
"pg": "^8.20.0",
|
|
46
|
+
"yaml": "^2.9.0",
|
|
47
|
+
"zod": "^3.24.0",
|
|
48
|
+
"@bevel-software/platform-shared": "0.1.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/adm-zip": "^0.5.8",
|
|
52
|
+
"@types/cors": "^2.8.17",
|
|
53
|
+
"@types/express": "^5.0.0",
|
|
54
|
+
"@types/express-serve-static-core": "^5.1.1",
|
|
55
|
+
"@types/jsonwebtoken": "^9.0.10",
|
|
56
|
+
"@types/node": "^22.0.0",
|
|
57
|
+
"@types/pg": "^8.20.0",
|
|
58
|
+
"@types/qs": "^6.15.1",
|
|
59
|
+
"drizzle-kit": "^0.31.10",
|
|
60
|
+
"tsx": "^4.19.0",
|
|
61
|
+
"typescript": "^5.8.0",
|
|
62
|
+
"vitest": "^2.1.9"
|
|
63
|
+
},
|
|
64
|
+
"license": "Apache-2.0",
|
|
65
|
+
"repository": {
|
|
66
|
+
"type": "git",
|
|
67
|
+
"url": "git+https://github.com/Bevel-Software/skill-and-tool-management.git",
|
|
68
|
+
"directory": "packages/core-backend"
|
|
69
|
+
},
|
|
70
|
+
"publishConfig": {
|
|
71
|
+
"access": "public"
|
|
72
|
+
},
|
|
73
|
+
"scripts": {
|
|
74
|
+
"build": "tsc -p tsconfig.json",
|
|
75
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
76
|
+
"test": "vitest run",
|
|
77
|
+
"test:live": "vitest run .live.test",
|
|
78
|
+
"db:generate": "drizzle-kit generate"
|
|
79
|
+
}
|
|
80
|
+
}
|
package/src/assets.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Locations of the assets shipped INSIDE this package (`files` in
|
|
6
|
+
* package.json): the squashed core migration history (`migrations/`) and the
|
|
7
|
+
* KB seed template (`kb-template/`). Both live at the PACKAGE ROOT, and this
|
|
8
|
+
* module is a direct child of either `src/` (in-repo / tsx) or `dist/`
|
|
9
|
+
* (compiled) — so one `..` hop from the module URL reaches the package root
|
|
10
|
+
* in BOTH layouts. Resolved lazily so bundlers that rewrite `import.meta.url`
|
|
11
|
+
* still get a sensible answer at call time.
|
|
12
|
+
*/
|
|
13
|
+
function packageRoot(): string {
|
|
14
|
+
return fileURLToPath(new URL('..', import.meta.url));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Absolute path of the packaged core Drizzle migrations folder. */
|
|
18
|
+
export function coreMigrationsDir(): string {
|
|
19
|
+
return path.join(packageRoot(), 'migrations');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Absolute path of the packaged KB seed template (`kb-template/`). */
|
|
23
|
+
export function defaultKbTemplateDir(): string {
|
|
24
|
+
return path.join(packageRoot(), 'kb-template');
|
|
25
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { ISessionSink } from '../modules/workspace/session-sink.js';
|
|
2
|
+
import type {
|
|
3
|
+
ISystemNoticeSink,
|
|
4
|
+
RecoveryAgentRunner,
|
|
5
|
+
} from '../modules/workflow/pending-commits.worker.js';
|
|
6
|
+
import type { ILlmUsageMeter } from '../modules/tool-auth/llm-usage-meter.js';
|
|
7
|
+
import type { AuthProviderPlugin } from '../modules/auth/auth.routes.js';
|
|
8
|
+
import type { IErasureParticipant } from '../modules/auth/account-erasure.service.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Every seam the enterprise overlay can fill in the CORE composition
|
|
12
|
+
* (`createCoreServices`). All fields are optional; each has a safe core-only
|
|
13
|
+
* default, so `createCoreServices(config)` with no ports yields a fully
|
|
14
|
+
* working core deployment.
|
|
15
|
+
*
|
|
16
|
+
* Two consumption patterns exist, and they matter for wiring order:
|
|
17
|
+
*
|
|
18
|
+
* - CONSTRUCTION-TIME ports (`recoveryAgent`, `systemNotice`,
|
|
19
|
+
* `erasureParticipants`): dereferenced while core services are being
|
|
20
|
+
* constructed. Enterprise implementations of these need core services that
|
|
21
|
+
* don't exist yet at that point (the background-agent factory, the thread
|
|
22
|
+
* service, …), so the enterprise root passes FORWARDING DELEGATORS / a
|
|
23
|
+
* mutable array here and assigns the real targets right after
|
|
24
|
+
* `createCoreServices` returns. That is safe because core only *calls* these
|
|
25
|
+
* ports at request/commit/erasure time, long after boot — the same
|
|
26
|
+
* late-binding pattern the composition root already uses for e.g. the MCP
|
|
27
|
+
* OAuth revoke closure.
|
|
28
|
+
*
|
|
29
|
+
* - SERVER-TIME seams (`sessionSink`, `usageMeter`, `authProviders`): only
|
|
30
|
+
* read when `createCoreServer` mounts routes / registers tools. Core seeds
|
|
31
|
+
* them onto `CoreServices` from these ports (with the defaults below); the
|
|
32
|
+
* enterprise root overwrites the `CoreServices` fields (or pushes into the
|
|
33
|
+
* `authProviders` array) after construction, before the server is built.
|
|
34
|
+
*
|
|
35
|
+
* (Commit-time KB validation and the ontology write block are NOT ports:
|
|
36
|
+
* they are workflow lifecycle HOOKS the enterprise root registers on
|
|
37
|
+
* `workflowService.hooks` after construction — see
|
|
38
|
+
* `modules/workflow/workflow-hooks.ts`.)
|
|
39
|
+
*/
|
|
40
|
+
export interface CorePorts {
|
|
41
|
+
/**
|
|
42
|
+
* Backs the `start_session` tool. Core default: {@link UuidSessionSink}
|
|
43
|
+
* (a bare random id). Enterprise substitutes a sink that mints a real chat
|
|
44
|
+
* thread so the same id works end to end with `ask`.
|
|
45
|
+
*/
|
|
46
|
+
sessionSink?: ISessionSink;
|
|
47
|
+
/**
|
|
48
|
+
* Recovery-agent dispatcher for the pending-commits worker. The worker
|
|
49
|
+
* requires one, so the core default is {@link noopRecoveryAgent} — a run
|
|
50
|
+
* that just returns, meaning the row stays pending until the recovery
|
|
51
|
+
* budget is exhausted and the worker escalates via `systemNotice`.
|
|
52
|
+
*/
|
|
53
|
+
recoveryAgent?: RecoveryAgentRunner;
|
|
54
|
+
/**
|
|
55
|
+
* Where the pending-commits worker escalates terminal failures. Core
|
|
56
|
+
* default: {@link consoleSystemNoticeSink} (stderr, no dashboard).
|
|
57
|
+
* Enterprise passes its feedback service.
|
|
58
|
+
*/
|
|
59
|
+
systemNotice?: ISystemNoticeSink;
|
|
60
|
+
/**
|
|
61
|
+
* Per-connection-key LLM usage metering shown on the connection-key
|
|
62
|
+
* management routes. Core default: {@link unmeteredLlmUsage} (no proxy,
|
|
63
|
+
* nothing to meter). Enterprise passes the LLM proxy's usage service.
|
|
64
|
+
*/
|
|
65
|
+
usageMeter?: ILlmUsageMeter;
|
|
66
|
+
/**
|
|
67
|
+
* SSO login plugins the auth router mounts. Core default: `[]` (password
|
|
68
|
+
* login only). The array instance is kept on `CoreServices.authProviders`,
|
|
69
|
+
* so an enterprise root may pass an array it fills after construction.
|
|
70
|
+
*/
|
|
71
|
+
authProviders?: AuthProviderPlugin[];
|
|
72
|
+
/**
|
|
73
|
+
* Module-owned GDPR-erasure slices run by `AccountErasureService`. Core
|
|
74
|
+
* default: `[]` (core erases only the rows it owns). The array reference is
|
|
75
|
+
* held — not copied — so an enterprise root may pass an array it fills after
|
|
76
|
+
* construction (participants are only iterated at erasure time).
|
|
77
|
+
*/
|
|
78
|
+
erasureParticipants?: IErasureParticipant[];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Core default recovery agent: does nothing. The worker's retry ladder still
|
|
83
|
+
* works — a stuck row burns its recovery budget on these no-op runs and then
|
|
84
|
+
* escalates to the `systemNotice` sink, which is exactly the "no recovery
|
|
85
|
+
* agent available" behavior a core-only deployment wants.
|
|
86
|
+
*/
|
|
87
|
+
export const noopRecoveryAgent: RecoveryAgentRunner = {
|
|
88
|
+
async run(): Promise<void> {
|
|
89
|
+
// Intentionally empty — see doc comment.
|
|
90
|
+
},
|
|
91
|
+
};
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import cors from 'cors';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import type { Router, RequestHandler } from 'express';
|
|
5
|
+
import { createAuthRoutes } from '../modules/auth/auth.routes.js';
|
|
6
|
+
import { createWorkspaceRoutes } from '../modules/workspace/workspace.routes.js';
|
|
7
|
+
import { createDiffRoutes } from '../modules/diff/diff.routes.js';
|
|
8
|
+
import { createWorkflowRoutes } from '../modules/workflow/workflow.routes.js';
|
|
9
|
+
import { createEventsRoutes } from '../modules/workflow/events.routes.js';
|
|
10
|
+
import { createAccessRoutes } from '../modules/access/access.routes.js';
|
|
11
|
+
import { createMcpRoutes } from '../modules/mcp/mcp.routes.js';
|
|
12
|
+
import { createOAuthConsentRoutes } from '../modules/mcp/oauth/oauth-consent.routes.js';
|
|
13
|
+
import { mcpAuthRouter } from '@modelcontextprotocol/sdk/server/auth/router.js';
|
|
14
|
+
import { createManualRoutes } from '../modules/tool-registry/manual.routes.js';
|
|
15
|
+
import {
|
|
16
|
+
createToolManualsAgentRoutes,
|
|
17
|
+
createToolManualsBrowserRoutes,
|
|
18
|
+
registerToolManualsTools,
|
|
19
|
+
} from '../modules/tool-manuals/index.js';
|
|
20
|
+
import { registerWorkflowTools } from '../modules/workflow/agent-tools/workflow.tools.js';
|
|
21
|
+
import { registerWorkspaceTools } from '../modules/workspace/workspace.tools.js';
|
|
22
|
+
import { RECOVERY_BOT_EMAIL } from '../modules/workflow/recovery-bot.js';
|
|
23
|
+
import { registerSkillsTools, createSkillsRoutes } from '../modules/skills/index.js';
|
|
24
|
+
import type { SessionOntologyGate } from '../modules/workspace/session-ontology.gate.js';
|
|
25
|
+
import {
|
|
26
|
+
createSecretsVaultRoutes,
|
|
27
|
+
createSecretsVaultPublicRoutes,
|
|
28
|
+
} from '../modules/secrets-vault/index.js';
|
|
29
|
+
import { createAdminAccessRoutes } from '../modules/admin/admin-access.routes.js';
|
|
30
|
+
import { GIT_SHA } from '../version.js';
|
|
31
|
+
import type { CoreServices } from './create-core-services.js';
|
|
32
|
+
|
|
33
|
+
type ExpressApp = ReturnType<typeof express>;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The context handed to {@link ServerExtensions.tools}: everything an overlay
|
|
37
|
+
* needs to register its own tool defs + endpoint routes on the unified tool
|
|
38
|
+
* surface, exactly like the core modules do.
|
|
39
|
+
*/
|
|
40
|
+
export interface ToolSurfaceCtx {
|
|
41
|
+
registry: CoreServices['toolRegistry'];
|
|
42
|
+
router: Router;
|
|
43
|
+
toolAuth: RequestHandler;
|
|
44
|
+
toolHandler: CoreServices['toolHandlerFactory'];
|
|
45
|
+
/** Shared ontology-session boundary gate config (file tools + graph tools). */
|
|
46
|
+
sessionOntologyGate: SessionOntologyGate;
|
|
47
|
+
core: CoreServices;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The hook points an overlay (the enterprise app) uses to add its surfaces to
|
|
52
|
+
* the core server. Each hook maps to a fixed slot in the LOAD-BEARING mount
|
|
53
|
+
* order encoded in {@link createCoreServer} — the order comments there explain
|
|
54
|
+
* why each slot sits where it does (Express 5 fires outer middleware before
|
|
55
|
+
* route matching, so pre-JWT surfaces MUST mount before the JWT `/api` mounts).
|
|
56
|
+
*/
|
|
57
|
+
export interface ServerExtensions {
|
|
58
|
+
/**
|
|
59
|
+
* Request paths the global 10 MB JSON body parser must skip because the
|
|
60
|
+
* overlay's own router installs a larger parser for them (body-parser
|
|
61
|
+
* ignores a second parse once the first has run — see the comment at the
|
|
62
|
+
* parser below).
|
|
63
|
+
*/
|
|
64
|
+
jsonParserExemptPaths?: string[];
|
|
65
|
+
/**
|
|
66
|
+
* Boot-time side effects that belong to the server lifecycle (startup
|
|
67
|
+
* reconciles, periodic sweeps). Runs after health/cors/json are installed,
|
|
68
|
+
* before any routes mount.
|
|
69
|
+
*/
|
|
70
|
+
onBoot?(core: CoreServices): Promise<void> | void;
|
|
71
|
+
/** Un-authed overlay surfaces (e.g. OAuth callbacks hit by provider redirects). */
|
|
72
|
+
preAuth?(app: ExpressApp, core: CoreServices): void;
|
|
73
|
+
/**
|
|
74
|
+
* Overlay tool registrations on the unified tool surface. Runs after the
|
|
75
|
+
* core registrations and BEFORE the manual routes mount, preserving the
|
|
76
|
+
* "manual snapshot stays complete" invariant.
|
|
77
|
+
*/
|
|
78
|
+
tools?(ctx: ToolSurfaceCtx): void;
|
|
79
|
+
/**
|
|
80
|
+
* Non-JWT overlay surfaces that historically mount AFTER the tools router
|
|
81
|
+
* but before the JWT-protected `/api` routes (LLM proxy, embed, upload).
|
|
82
|
+
* A separate phase from `preAuth` purely to preserve today's exact order.
|
|
83
|
+
*/
|
|
84
|
+
postTools?(app: ExpressApp, core: CoreServices): void;
|
|
85
|
+
/** JWT-protected overlay routes; mounted after every core authed route. */
|
|
86
|
+
authed?(app: ExpressApp, core: CoreServices): void;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export async function createCoreServer(
|
|
90
|
+
core: CoreServices,
|
|
91
|
+
ext: ServerExtensions = {},
|
|
92
|
+
opts: { staticDir?: string } = {},
|
|
93
|
+
): Promise<ExpressApp> {
|
|
94
|
+
const app = express();
|
|
95
|
+
|
|
96
|
+
// `credentials: true` so EventSource (`withCredentials: true`) can carry
|
|
97
|
+
// the `bevel_token` cookie set at login — the only auth path the
|
|
98
|
+
// EventSource API supports. `origin: true` reflects the request origin
|
|
99
|
+
// back in `Access-Control-Allow-Origin`, which the spec requires when
|
|
100
|
+
// credentials are in play (the wildcard `*` is refused alongside
|
|
101
|
+
// credentials). Cookie itself is `SameSite=Lax`, so a hostile cross-site
|
|
102
|
+
// page still can't read events on the user's behalf.
|
|
103
|
+
//
|
|
104
|
+
// `exposedHeaders` lets a BROWSER-based MCP client (e.g. MCP Inspector) read
|
|
105
|
+
// the Streamable-HTTP session header off the `initialize` response — custom
|
|
106
|
+
// response headers are hidden from browser JS unless exposed, so without this
|
|
107
|
+
// the client can't send `Mcp-Session-Id` back and every follow-up 400s with
|
|
108
|
+
// "session id does not match any active session". `WWW-Authenticate` is
|
|
109
|
+
// exposed so a browser client can read the 401 challenge and start the OAuth
|
|
110
|
+
// discovery flow. (Native clients like Claude Code aren't subject to CORS.)
|
|
111
|
+
app.use(
|
|
112
|
+
cors({
|
|
113
|
+
origin: true,
|
|
114
|
+
credentials: true,
|
|
115
|
+
exposedHeaders: ['Mcp-Session-Id', 'Mcp-Protocol-Version', 'WWW-Authenticate'],
|
|
116
|
+
}),
|
|
117
|
+
);
|
|
118
|
+
// Global JSON body parser. Some overlay routes carry a whole document dump
|
|
119
|
+
// (e.g. the onboarding import), so their routers install their own larger
|
|
120
|
+
// parser — skip the global one for those paths (body-parser ignores a second
|
|
121
|
+
// parse once the first has run, so without this the 10 MB global limit would
|
|
122
|
+
// shadow the route's larger limit and 413 a large-but-valid upload before it
|
|
123
|
+
// ever reaches the route).
|
|
124
|
+
const jsonExemptPaths = new Set(ext.jsonParserExemptPaths ?? []);
|
|
125
|
+
const globalJson = express.json({ limit: '10mb' });
|
|
126
|
+
app.use((req, res, next) => {
|
|
127
|
+
if (jsonExemptPaths.has(req.path)) return next();
|
|
128
|
+
return globalJson(req, res, next);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// Health check. `sha` is the git commit this build was produced from
|
|
132
|
+
// (see version.ts) so the deploy pipeline can confirm a staging/production
|
|
133
|
+
// rollout matches the merged commit before smoke-testing it.
|
|
134
|
+
app.get('/api/health', (_req, res) => {
|
|
135
|
+
res.json({ status: 'ok', sha: GIT_SHA, timestamp: Date.now() });
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// Overlay boot-time side effects (startup reconciles, periodic sweeps).
|
|
139
|
+
await ext.onBoot?.(core);
|
|
140
|
+
|
|
141
|
+
// Auth routes (unprotected — login endpoint must be accessible)
|
|
142
|
+
app.use(
|
|
143
|
+
'/api',
|
|
144
|
+
createAuthRoutes(
|
|
145
|
+
core.authService,
|
|
146
|
+
core.authMiddleware,
|
|
147
|
+
core.authProviders,
|
|
148
|
+
core.config.loginPasswordEnabled,
|
|
149
|
+
),
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
// MCP routes must mount BEFORE every `app.use('/api', authMiddleware, …)`
|
|
153
|
+
// below: Express 5 fires the outer JWT middleware before deciding whether
|
|
154
|
+
// its router has a matching route, so a request to `POST /api/mcp` carrying
|
|
155
|
+
// a connection-key (non-JWT) bearer would otherwise be 401'd by the first
|
|
156
|
+
// protected mount before this router ever saw it.
|
|
157
|
+
app.use('/api', createMcpRoutes(
|
|
158
|
+
core.mcpService,
|
|
159
|
+
core.externalApiKeyService,
|
|
160
|
+
core.mcpAuthMiddleware,
|
|
161
|
+
core.authMiddleware,
|
|
162
|
+
core.usageMeter,
|
|
163
|
+
));
|
|
164
|
+
|
|
165
|
+
// MCP OAuth 2.1 authorization server: /authorize, /token, /register,
|
|
166
|
+
// /revoke + the /.well-known metadata documents (the SDK requires an
|
|
167
|
+
// app-root mount for those paths). Un-authed by design — these endpoints
|
|
168
|
+
// are hit by MCP clients with no credentials yet and by bare browser
|
|
169
|
+
// navigations; the user attaches to the flow at the JWT/cookie-authed
|
|
170
|
+
// consent routes below. Must sit before the prod SPA catch-all or the
|
|
171
|
+
// .well-known documents would be swallowed by index.html.
|
|
172
|
+
app.use(mcpAuthRouter({
|
|
173
|
+
provider: core.mcpOAuthProvider,
|
|
174
|
+
issuerUrl: new URL(core.config.publicBackendUrl),
|
|
175
|
+
resourceServerUrl: new URL('/api/mcp', core.config.publicBackendUrl),
|
|
176
|
+
scopesSupported: ['mcp'],
|
|
177
|
+
resourceName: 'Bevel MCP',
|
|
178
|
+
}));
|
|
179
|
+
|
|
180
|
+
// Un-authed overlay surfaces (e.g. connector OAuth callbacks hit by a
|
|
181
|
+
// provider's browser redirect with no Authorization header).
|
|
182
|
+
ext.preAuth?.(app, core);
|
|
183
|
+
|
|
184
|
+
// Secrets Vault OAuth callback — also hit by a provider browser redirect with
|
|
185
|
+
// no Authorization header, so it mounts UN-AUTHED here, recovering the caller
|
|
186
|
+
// from the signed `state`. The authed CRUD/start routes mount later.
|
|
187
|
+
const secretsVaultRoutesDeps = {
|
|
188
|
+
secretsVault: core.secretsVaultService,
|
|
189
|
+
toolManualService: core.toolManualService,
|
|
190
|
+
accessControl: core.accessControl,
|
|
191
|
+
stateSecret: core.config.jwtSecret,
|
|
192
|
+
publicBackendUrl: core.config.publicBackendUrl,
|
|
193
|
+
publicFrontendUrl: core.config.publicFrontendUrl,
|
|
194
|
+
};
|
|
195
|
+
app.use('/api', createSecretsVaultPublicRoutes(secretsVaultRoutesDeps));
|
|
196
|
+
|
|
197
|
+
// Unified tool surface — the ONE catalog, served as two UTCP manuals + each
|
|
198
|
+
// tool's module-hosted endpoint, all behind the shared `toolAuth` (connection
|
|
199
|
+
// key OR internal token). Each module registers its tool defs + hosts its
|
|
200
|
+
// routes on this one router. Mount BEFORE the JWT `/api` mounts — connection-
|
|
201
|
+
// key / internal-token bearers would be 401'd by the outer JWT middleware
|
|
202
|
+
// otherwise. Manuals are added LAST so they snapshot the full catalog:
|
|
203
|
+
// core registrations first, then the overlay's (`ext.tools`), then the
|
|
204
|
+
// manual routes.
|
|
205
|
+
const toolsRouter = express.Router();
|
|
206
|
+
const ta = core.toolAuthMiddleware;
|
|
207
|
+
const th = core.toolHandlerFactory;
|
|
208
|
+
// Shared ontology-session boundary gate config, consumed by every tool
|
|
209
|
+
// surface that touches the KB (file tools + graph tools). The gate's
|
|
210
|
+
// blocking decision runs through the workflow hooks: core registers none
|
|
211
|
+
// (tracking only); the enterprise root registers the ontology block on
|
|
212
|
+
// `workflowService.hooks` before this server is built.
|
|
213
|
+
const sessionOntologyGate = {
|
|
214
|
+
service: core.sessionOntologyService,
|
|
215
|
+
enabled: core.config.ontologySessionBlock,
|
|
216
|
+
kbDirName: core.config.kbDirName,
|
|
217
|
+
recoveryBotEmail: RECOVERY_BOT_EMAIL,
|
|
218
|
+
hooks: core.workflowService.hooks,
|
|
219
|
+
};
|
|
220
|
+
registerWorkflowTools(core.toolRegistry, toolsRouter, ta, th);
|
|
221
|
+
registerWorkspaceTools(core.toolRegistry, toolsRouter, ta, th, core.spillStore, core.accessControl, core.config.kbDirName, sessionOntologyGate, core.routineWritePolicy, core.sessionSink);
|
|
222
|
+
registerSkillsTools(core.toolRegistry, toolsRouter, ta, th, core.skillService);
|
|
223
|
+
registerToolManualsTools(core.toolRegistry, toolsRouter, ta, th, core.toolManualService, {
|
|
224
|
+
accessControl: core.accessControl,
|
|
225
|
+
// The vault satisfies the module's local VariableStatusPort — `list_tool_setup`
|
|
226
|
+
// reports configuration booleans only; secret values never ride through tools.
|
|
227
|
+
variableStatus: core.secretsVaultService,
|
|
228
|
+
});
|
|
229
|
+
// Overlay tool registrations (defs + module-hosted endpoints).
|
|
230
|
+
ext.tools?.({
|
|
231
|
+
registry: core.toolRegistry,
|
|
232
|
+
router: toolsRouter,
|
|
233
|
+
toolAuth: ta,
|
|
234
|
+
toolHandler: th,
|
|
235
|
+
sessionOntologyGate,
|
|
236
|
+
core,
|
|
237
|
+
});
|
|
238
|
+
toolsRouter.use(createManualRoutes(
|
|
239
|
+
core.toolRegistry,
|
|
240
|
+
core.manualAuthMiddleware,
|
|
241
|
+
async (userId) => (await core.authService.getUserById(userId))?.email,
|
|
242
|
+
));
|
|
243
|
+
// The aggregated manual list (KB + the caller's accessible `.tool`s) + inline
|
|
244
|
+
// `.tool` sub-manuals. Mounted on the tools router so they share `manualAuth`
|
|
245
|
+
// and sit before the JWT `/api` mounts.
|
|
246
|
+
toolsRouter.use(createToolManualsAgentRoutes(
|
|
247
|
+
core.toolManualService,
|
|
248
|
+
core.manualAuthMiddleware,
|
|
249
|
+
async (userId) => (await core.authService.getUserById(userId))?.email,
|
|
250
|
+
));
|
|
251
|
+
app.use('/api', toolsRouter);
|
|
252
|
+
|
|
253
|
+
// Non-JWT overlay surfaces that sit between the tools router and the
|
|
254
|
+
// JWT-protected `/api` routes (LLM proxy, embed, upload — see the phase
|
|
255
|
+
// doc on ServerExtensions.postTools).
|
|
256
|
+
ext.postTools?.(app, core);
|
|
257
|
+
|
|
258
|
+
// Protected routes
|
|
259
|
+
app.use('/api', core.authMiddleware, createWorkspaceRoutes(
|
|
260
|
+
core.workspaceService,
|
|
261
|
+
core.authService,
|
|
262
|
+
core.workflowService,
|
|
263
|
+
core.eventBus,
|
|
264
|
+
core.accessControl,
|
|
265
|
+
core.config.kbDirName,
|
|
266
|
+
core.creatorAccess,
|
|
267
|
+
));
|
|
268
|
+
// Workflow is the only branches / changes / change-request surface. The
|
|
269
|
+
// former /git/*, /pr/*, /pr/:n/* routes are gone — every consumer goes
|
|
270
|
+
// through /workflow/* now.
|
|
271
|
+
app.use('/api', core.authMiddleware, createWorkflowRoutes(
|
|
272
|
+
core.workflowService,
|
|
273
|
+
core.workspaceService,
|
|
274
|
+
core.authService,
|
|
275
|
+
core.eventBus,
|
|
276
|
+
));
|
|
277
|
+
// SSE event-bus surface. The route owns its own auth gating via the
|
|
278
|
+
// injected middleware (which accepts both Bearer and the `bevel_token`
|
|
279
|
+
// cookie — the cookie path is what makes EventSource work, since the
|
|
280
|
+
// browser API can't set headers). Mounted as its own app.use so it
|
|
281
|
+
// doesn't share an outer middleware chain with the JSON routes above.
|
|
282
|
+
app.use('/api', createEventsRoutes(core.eventBus, core.authMiddleware));
|
|
283
|
+
app.use('/api', core.authMiddleware, createDiffRoutes(
|
|
284
|
+
core.diffService,
|
|
285
|
+
core.authService,
|
|
286
|
+
core.workflowService,
|
|
287
|
+
core.accessControl,
|
|
288
|
+
core.config.kbDirName,
|
|
289
|
+
));
|
|
290
|
+
app.use('/api', core.authMiddleware, createAccessRoutes(
|
|
291
|
+
core.accessControl,
|
|
292
|
+
core.workspaceService,
|
|
293
|
+
core.authService,
|
|
294
|
+
core.workflowService,
|
|
295
|
+
core.eventBus,
|
|
296
|
+
core.db,
|
|
297
|
+
core.config.kbDirName,
|
|
298
|
+
));
|
|
299
|
+
app.use('/api', core.authMiddleware, createSkillsRoutes(core.skillService));
|
|
300
|
+
// Admin-status resolver (CORE — see the note in admin-access.routes.ts;
|
|
301
|
+
// the full admin router is an enterprise `ext.authed` extension).
|
|
302
|
+
app.use('/api', core.authMiddleware, createAdminAccessRoutes(core.adminAccess));
|
|
303
|
+
app.use('/api', core.authMiddleware, createToolManualsBrowserRoutes(core.toolManualService));
|
|
304
|
+
app.use('/api', core.authMiddleware, createSecretsVaultRoutes(secretsVaultRoutesDeps));
|
|
305
|
+
// The authed tail of the MCP OAuth flow: /connect calls these to describe
|
|
306
|
+
// the pending authorization and, on Finish, to mint the one-time code. The
|
|
307
|
+
// browser arrives via redirect with no Authorization header, so the JWT
|
|
308
|
+
// middleware's bevel_token-cookie fallback is what identifies the user.
|
|
309
|
+
app.use('/api', core.authMiddleware, createOAuthConsentRoutes({
|
|
310
|
+
provider: core.mcpOAuthProvider,
|
|
311
|
+
stateSecret: core.config.jwtSecret,
|
|
312
|
+
}));
|
|
313
|
+
|
|
314
|
+
// JWT-protected overlay routes.
|
|
315
|
+
ext.authed?.(app, core);
|
|
316
|
+
|
|
317
|
+
// In production, serve the frontend static build
|
|
318
|
+
if (opts.staticDir) {
|
|
319
|
+
const frontendDist = opts.staticDir;
|
|
320
|
+
app.use(express.static(frontendDist));
|
|
321
|
+
app.get('{*path}', (req, res) => {
|
|
322
|
+
// Non-SPA namespaces must NOT resolve to index.html. In particular, an
|
|
323
|
+
// OAuth well-known metadata URL the mcpAuthRouter doesn't serve (a variant
|
|
324
|
+
// the client probes, e.g. the root protected-resource or a path-suffixed
|
|
325
|
+
// authorization-server doc) would otherwise return `200 + HTML`, which an
|
|
326
|
+
// MCP client parses as JSON → "expected object, received undefined" and
|
|
327
|
+
// the whole connection fails. A clean 404 lets discovery fall through to
|
|
328
|
+
// the variant we do serve. Same reasoning for stray `/api/*` gets.
|
|
329
|
+
if (req.path.startsWith('/.well-known/') || req.path.startsWith('/api/')) {
|
|
330
|
+
res.status(404).json({ error: 'Not found' });
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
res.sendFile(path.join(frontendDist, 'index.html'));
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
return app;
|
|
338
|
+
}
|