@bevel-software/platform-core-backend 0.25.2 → 0.27.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/agent-guide/access-control.md +251 -0
- package/agent-guide/conventions.md +35 -0
- package/agent-guide/directory-structure.md +145 -0
- package/agent-guide/finding-things.md +7 -0
- package/agent-guide/html-views.md +83 -0
- package/agent-guide/introduction.md +27 -0
- package/agent-guide/new-knowledge-base.md +24 -0
- package/agent-guide/skills.md +47 -0
- package/agent-guide/tool-manuals.md +227 -0
- package/agent-guide/where-a-new-file-goes.md +36 -0
- package/dist/assets.d.ts +26 -0
- package/dist/assets.d.ts.map +1 -1
- package/dist/assets.js +35 -2
- package/dist/assets.js.map +1 -1
- package/dist/core/catalog-revision.d.ts +19 -1
- package/dist/core/catalog-revision.d.ts.map +1 -1
- package/dist/core/catalog-revision.js +14 -3
- package/dist/core/catalog-revision.js.map +1 -1
- package/dist/core/core-ports.d.ts +11 -0
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts +5 -0
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +65 -3
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +35 -0
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +114 -12
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +16 -1
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +18 -1
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +21 -0
- package/dist/core-config.d.ts.map +1 -1
- package/dist/core-config.js +22 -1
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +17 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +2 -0
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +27 -0
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/directory-sync-bot.js +1 -1
- package/dist/modules/access/directory-sync-bot.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +145 -0
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -0
- package/dist/modules/agent-guide/agent-guide.js +199 -0
- package/dist/modules/agent-guide/agent-guide.js.map +1 -0
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +24 -0
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -0
- package/dist/modules/agent-guide/agent-guide.tools.js +100 -0
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -0
- package/dist/modules/agent-guide/index.d.ts +4 -0
- package/dist/modules/agent-guide/index.d.ts.map +1 -0
- package/dist/modules/agent-guide/index.js +4 -0
- package/dist/modules/agent-guide/index.js.map +1 -0
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +3 -2
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +3 -2
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +14 -6
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +28 -8
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/index.d.ts +1 -1
- package/dist/modules/agent-instructions/index.d.ts.map +1 -1
- package/dist/modules/agent-instructions/index.js +1 -1
- package/dist/modules/agent-instructions/index.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +10 -50
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +51 -104
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/audit/agent-audit.service.d.ts +21 -2
- package/dist/modules/audit/agent-audit.service.d.ts.map +1 -1
- package/dist/modules/audit/agent-audit.service.js +43 -2
- package/dist/modules/audit/agent-audit.service.js.map +1 -1
- package/dist/modules/audit/agent-connection.routes.d.ts +34 -0
- package/dist/modules/audit/agent-connection.routes.d.ts.map +1 -0
- package/dist/modules/audit/agent-connection.routes.js +38 -0
- package/dist/modules/audit/agent-connection.routes.js.map +1 -0
- package/dist/modules/audit/audit.contract.d.ts +24 -0
- package/dist/modules/audit/audit.contract.d.ts.map +1 -1
- package/dist/modules/audit/audit.contract.js.map +1 -1
- package/dist/modules/audit/index.d.ts +1 -0
- package/dist/modules/audit/index.d.ts.map +1 -1
- package/dist/modules/audit/index.js +1 -0
- package/dist/modules/audit/index.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +10 -3
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.middleware.d.ts +7 -0
- package/dist/modules/auth/auth.middleware.d.ts.map +1 -1
- package/dist/modules/auth/auth.middleware.js +1 -1
- package/dist/modules/auth/auth.middleware.js.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.js +11 -3
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +96 -0
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +32 -3
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/embed/account-link.service.d.ts +42 -0
- package/dist/modules/embed/account-link.service.d.ts.map +1 -0
- package/dist/modules/embed/account-link.service.js +50 -0
- package/dist/modules/embed/account-link.service.js.map +1 -0
- package/dist/modules/embed/embed-link.d.ts +58 -0
- package/dist/modules/embed/embed-link.d.ts.map +1 -0
- package/dist/modules/embed/embed-link.js +160 -0
- package/dist/modules/embed/embed-link.js.map +1 -0
- package/dist/modules/embed/embed.errors.d.ts +30 -0
- package/dist/modules/embed/embed.errors.d.ts.map +1 -0
- package/dist/modules/embed/embed.errors.js +42 -0
- package/dist/modules/embed/embed.errors.js.map +1 -0
- package/dist/modules/embed/embed.interface.d.ts +204 -0
- package/dist/modules/embed/embed.interface.d.ts.map +1 -0
- package/dist/modules/embed/embed.interface.js +2 -0
- package/dist/modules/embed/embed.interface.js.map +1 -0
- package/dist/modules/embed/embed.routes.d.ts +59 -0
- package/dist/modules/embed/embed.routes.d.ts.map +1 -0
- package/dist/modules/embed/embed.routes.js +343 -0
- package/dist/modules/embed/embed.routes.js.map +1 -0
- package/dist/modules/embed/embed.service.d.ts +169 -0
- package/dist/modules/embed/embed.service.d.ts.map +1 -0
- package/dist/modules/embed/embed.service.js +627 -0
- package/dist/modules/embed/embed.service.js.map +1 -0
- package/dist/modules/embed/embed.tools.d.ts +51 -0
- package/dist/modules/embed/embed.tools.d.ts.map +1 -0
- package/dist/modules/embed/embed.tools.js +170 -0
- package/dist/modules/embed/embed.tools.js.map +1 -0
- package/dist/modules/embed/mcp-app.d.ts +64 -0
- package/dist/modules/embed/mcp-app.d.ts.map +1 -0
- package/dist/modules/embed/mcp-app.js +147 -0
- package/dist/modules/embed/mcp-app.js.map +1 -0
- package/dist/modules/embed/mcp-app.routes.d.ts +21 -0
- package/dist/modules/embed/mcp-app.routes.d.ts.map +1 -0
- package/dist/modules/embed/mcp-app.routes.js +36 -0
- package/dist/modules/embed/mcp-app.routes.js.map +1 -0
- package/dist/modules/github-app/github-app.connection.d.ts +15 -0
- package/dist/modules/github-app/github-app.connection.d.ts.map +1 -1
- package/dist/modules/github-app/github-app.connection.js +34 -3
- package/dist/modules/github-app/github-app.connection.js.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.d.ts +65 -0
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +300 -0
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +5 -0
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +6 -0
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +2 -1
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +57 -3
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +177 -24
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts +24 -0
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +32 -4
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/mcp/tool-schema-guard.d.ts +105 -0
- package/dist/modules/mcp/tool-schema-guard.d.ts.map +1 -0
- package/dist/modules/mcp/tool-schema-guard.js +171 -0
- package/dist/modules/mcp/tool-schema-guard.js.map +1 -0
- package/dist/modules/onboarding/onboarding.contract.d.ts +80 -0
- package/dist/modules/onboarding/onboarding.contract.d.ts.map +1 -0
- package/dist/modules/onboarding/onboarding.contract.js +7 -0
- package/dist/modules/onboarding/onboarding.contract.js.map +1 -0
- package/dist/modules/onboarding/onboarding.routes.d.ts +18 -0
- package/dist/modules/onboarding/onboarding.routes.d.ts.map +1 -0
- package/dist/modules/onboarding/onboarding.routes.js +81 -0
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -0
- package/dist/modules/onboarding/starter-pack.service.d.ts +213 -0
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -0
- package/dist/modules/onboarding/starter-pack.service.js +492 -0
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -0
- package/dist/modules/onboarding/starter-packs.d.ts +78 -0
- package/dist/modules/onboarding/starter-packs.d.ts.map +1 -0
- package/dist/modules/onboarding/starter-packs.js +156 -0
- package/dist/modules/onboarding/starter-packs.js.map +1 -0
- package/dist/modules/plugins/index.d.ts +1 -1
- package/dist/modules/plugins/index.d.ts.map +1 -1
- package/dist/modules/plugins/index.js +1 -1
- package/dist/modules/plugins/index.js.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.d.ts +19 -0
- package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.js +18 -1
- package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +0 -36
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +31 -0
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts +36 -2
- package/dist/modules/plugins/plugins.tools.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.tools.js +71 -14
- package/dist/modules/plugins/plugins.tools.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.d.ts +34 -7
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +148 -54
- package/dist/modules/settings/deployment-settings.service.js.map +1 -1
- package/dist/modules/settings/repository-source.d.ts +1 -0
- package/dist/modules/settings/repository-source.d.ts.map +1 -1
- package/dist/modules/settings/repository-source.js +3 -3
- package/dist/modules/settings/repository-source.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +3 -6
- package/dist/modules/settings/setup.routes.js.map +1 -1
- package/dist/modules/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +103 -43
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.d.ts +10 -1
- package/dist/modules/tool-auth/connection-key-rejection.d.ts.map +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.js +11 -3
- package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.d.ts +8 -0
- package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts +24 -2
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +59 -2
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +9 -4
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
- package/dist/modules/tool-helpers/index.d.ts +28 -1
- package/dist/modules/tool-helpers/index.d.ts.map +1 -1
- package/dist/modules/tool-helpers/index.js +28 -1
- package/dist/modules/tool-helpers/index.js.map +1 -1
- package/dist/modules/tool-helpers/route-argument-check.d.ts +10 -0
- package/dist/modules/tool-helpers/route-argument-check.d.ts.map +1 -0
- package/dist/modules/tool-helpers/route-argument-check.js +132 -0
- package/dist/modules/tool-helpers/route-argument-check.js.map +1 -0
- package/dist/modules/tool-helpers/route-tool-schemas.d.ts +89 -0
- package/dist/modules/tool-helpers/route-tool-schemas.d.ts.map +1 -0
- package/dist/modules/tool-helpers/route-tool-schemas.js +113 -0
- package/dist/modules/tool-helpers/route-tool-schemas.js.map +1 -0
- package/dist/modules/tool-helpers/tool-def.d.ts +71 -0
- package/dist/modules/tool-helpers/tool-def.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-def.js +70 -6
- package/dist/modules/tool-helpers/tool-def.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.d.ts +46 -6
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +157 -8
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +9 -0
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +23 -4
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +4 -0
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +14 -0
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +7 -0
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +77 -38
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/tool-registry/description-length.d.ts +20 -16
- package/dist/modules/tool-registry/description-length.d.ts.map +1 -1
- package/dist/modules/tool-registry/description-length.js +50 -30
- package/dist/modules/tool-registry/description-length.js.map +1 -1
- package/dist/modules/tool-registry/guide-first.d.ts +27 -0
- package/dist/modules/tool-registry/guide-first.d.ts.map +1 -0
- package/dist/modules/tool-registry/guide-first.js +40 -0
- package/dist/modules/tool-registry/guide-first.js.map +1 -0
- package/dist/modules/tool-registry/tool-registry.d.ts +6 -0
- package/dist/modules/tool-registry/tool-registry.d.ts.map +1 -1
- package/dist/modules/tool-registry/tool-registry.js +9 -2
- package/dist/modules/tool-registry/tool-registry.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts +449 -0
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js +481 -0
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +126 -0
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js +611 -0
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts +12 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js +5 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts +8 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +133 -37
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts +29 -5
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
- package/dist/modules/workflow/file-lock.service.js +62 -5
- package/dist/modules/workflow/file-lock.service.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +282 -14
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +627 -126
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/git/merge-commit.d.ts +73 -0
- package/dist/modules/workflow/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/workflow/git/merge-commit.js +89 -0
- package/dist/modules/workflow/git/merge-commit.js.map +1 -0
- package/dist/modules/workflow/git/node-git-runner.d.ts +15 -0
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +1 -1
- package/dist/modules/workflow/git/node-git-runner.js +78 -6
- package/dist/modules/workflow/git/node-git-runner.js.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts +94 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +332 -37
- package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts +15 -0
- package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.service.js +25 -1
- package/dist/modules/workflow/pending-commits.service.js.map +1 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts +6 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.worker.js +23 -6
- package/dist/modules/workflow/pending-commits.worker.js.map +1 -1
- package/dist/modules/workflow/recovery-bot.js +1 -1
- package/dist/modules/workflow/recovery-bot.js.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +35 -0
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +180 -13
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
- package/dist/modules/workflow/sanitize-error.d.ts +16 -0
- package/dist/modules/workflow/sanitize-error.d.ts.map +1 -1
- package/dist/modules/workflow/sanitize-error.js +45 -0
- package/dist/modules/workflow/sanitize-error.js.map +1 -1
- package/dist/modules/workflow/workflow.routes.d.ts +6 -2
- package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.routes.js +7 -2
- package/dist/modules/workflow/workflow.routes.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +187 -15
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +808 -106
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/agent-download.builder.d.ts +105 -0
- package/dist/modules/workspace/agent-download.builder.d.ts.map +1 -0
- package/dist/modules/workspace/agent-download.builder.js +238 -0
- package/dist/modules/workspace/agent-download.builder.js.map +1 -0
- package/dist/modules/workspace/agent-download.routes.d.ts +77 -0
- package/dist/modules/workspace/agent-download.routes.d.ts.map +1 -0
- package/dist/modules/workspace/agent-download.routes.js +156 -0
- package/dist/modules/workspace/agent-download.routes.js.map +1 -0
- package/dist/modules/workspace/agent-download.store.d.ts +225 -0
- package/dist/modules/workspace/agent-download.store.d.ts.map +1 -0
- package/dist/modules/workspace/agent-download.store.js +423 -0
- package/dist/modules/workspace/agent-download.store.js.map +1 -0
- package/dist/modules/workspace/agent-upload.store.d.ts +10 -1
- package/dist/modules/workspace/agent-upload.store.d.ts.map +1 -1
- package/dist/modules/workspace/agent-upload.store.js +16 -6
- package/dist/modules/workspace/agent-upload.store.js.map +1 -1
- package/dist/modules/workspace/file-readers/raw-mime.d.ts +6 -0
- package/dist/modules/workspace/file-readers/raw-mime.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/raw-mime.js +38 -0
- package/dist/modules/workspace/file-readers/raw-mime.js.map +1 -0
- package/dist/modules/workspace/file-readers/text-reader.d.ts +5 -5
- package/dist/modules/workspace/file-readers/text-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/text-reader.js +5 -8
- package/dist/modules/workspace/file-readers/text-reader.js.map +1 -1
- package/dist/modules/workspace/first-run.d.ts +111 -0
- package/dist/modules/workspace/first-run.d.ts.map +1 -0
- package/dist/modules/workspace/first-run.js +181 -0
- package/dist/modules/workspace/first-run.js.map +1 -0
- package/dist/modules/workspace/move-links.d.ts +92 -0
- package/dist/modules/workspace/move-links.d.ts.map +1 -0
- package/dist/modules/workspace/move-links.js +173 -0
- package/dist/modules/workspace/move-links.js.map +1 -0
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +24 -39
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +58 -52
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +209 -223
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +5 -3
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +5 -3
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +63 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +75 -2
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +197 -24
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +68 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +642 -71
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/modules/write-access/write-access.d.ts.map +1 -1
- package/dist/modules/write-access/write-access.js +9 -0
- package/dist/modules/write-access/write-access.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +84 -1
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +100 -12
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +10 -1
- package/dist/shared/git.contract.d.ts.map +1 -1
- package/dist/shared/git.contract.js.map +1 -1
- package/dist/shared/hidden-tools.d.ts +44 -0
- package/dist/shared/hidden-tools.d.ts.map +1 -0
- package/dist/shared/hidden-tools.js +13 -0
- package/dist/shared/hidden-tools.js.map +1 -0
- package/dist/shared/utf8-text.d.ts +15 -0
- package/dist/shared/utf8-text.d.ts.map +1 -0
- package/dist/shared/utf8-text.js +20 -0
- package/dist/shared/utf8-text.js.map +1 -0
- package/dist/tenancy/static-tenant-source.d.ts +2 -1
- package/dist/tenancy/static-tenant-source.d.ts.map +1 -1
- package/dist/tenancy/static-tenant-source.js +9 -2
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/kb-template/.bevelignore +0 -5
- package/mcp-app/page.html +349 -0
- package/migrations/0017_atlassian_account_links.sql +37 -0
- package/migrations/meta/0017_snapshot.json +2396 -0
- package/migrations/meta/_journal.json +8 -1
- package/package.json +6 -3
- package/src/__tests__/kb-layout-config.test.ts +10 -100
- package/src/__tests__/packaged-assets-ship.test.ts +66 -0
- package/src/assets.ts +38 -2
- package/src/core/__tests__/catalog-revision.test.ts +40 -0
- package/src/core/__tests__/gated-boot.test.ts +1 -0
- package/src/core/__tests__/lifecycle.test.ts +14 -0
- package/src/core/catalog-revision.ts +15 -2
- package/src/core/core-ports.ts +11 -0
- package/src/core/create-core-server.ts +78 -3
- package/src/core/create-core-services.ts +168 -10
- package/src/core/lifecycle.ts +28 -2
- package/src/core-config.ts +24 -1
- package/src/index.ts +2 -2
- package/src/modules/access/__tests__/access-control.atref-batch.test.ts +58 -0
- package/src/modules/access/__tests__/access-control.platform-restore.test.ts +8 -7
- package/src/modules/access/__tests__/access-control.service.test.ts +19 -0
- package/src/modules/access/__tests__/access-personal-plugin.test.ts +1 -18
- package/src/modules/access/access-control.interface.ts +28 -0
- package/src/modules/access/access-control.service.ts +37 -0
- package/src/modules/access/directory-sync-bot.ts +1 -1
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +386 -0
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +207 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +122 -0
- package/src/modules/agent-guide/agent-guide.ts +300 -0
- package/src/modules/agent-guide/index.ts +22 -0
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +39 -118
- package/src/modules/agent-instructions/agent-instructions.routes.ts +3 -2
- package/src/modules/agent-instructions/compose.ts +26 -8
- package/src/modules/agent-instructions/index.ts +0 -3
- package/src/modules/agent-instructions/shared-file-rules.ts +50 -112
- package/src/modules/audit/__tests__/agent-audit.service.test.ts +64 -4
- package/src/modules/audit/__tests__/agent-connection.routes.test.ts +102 -0
- package/src/modules/audit/agent-audit.service.ts +58 -3
- package/src/modules/audit/agent-connection.routes.ts +56 -0
- package/src/modules/audit/audit.contract.ts +26 -0
- package/src/modules/audit/index.ts +1 -0
- package/src/modules/auth/__tests__/account.routes.test.ts +5 -3
- package/src/modules/auth/account.routes.ts +10 -3
- package/src/modules/auth/auth.middleware.ts +1 -1
- package/src/modules/code-mode/__tests__/code-mode.tool.test.ts +18 -2
- package/src/modules/code-mode/code-mode.tool.ts +13 -2
- package/src/modules/database/core-schema.ts +33 -3
- package/src/modules/embed/__tests__/account-links.migration.test.ts +98 -0
- package/src/modules/embed/__tests__/embed-link.test.ts +122 -0
- package/src/modules/embed/__tests__/embed.routes.test.ts +362 -0
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +193 -0
- package/src/modules/embed/__tests__/embed.service.test.ts +805 -0
- package/src/modules/embed/__tests__/embed.tools.test.ts +304 -0
- package/src/modules/embed/__tests__/mcp-app.test.ts +207 -0
- package/src/modules/embed/account-link.service.ts +76 -0
- package/src/modules/embed/embed-link.ts +180 -0
- package/src/modules/embed/embed.errors.ts +43 -0
- package/src/modules/embed/embed.interface.ts +203 -0
- package/src/modules/embed/embed.routes.ts +363 -0
- package/src/modules/embed/embed.service.ts +705 -0
- package/src/modules/embed/embed.tools.ts +206 -0
- package/src/modules/embed/mcp-app.routes.ts +41 -0
- package/src/modules/embed/mcp-app.ts +173 -0
- package/src/modules/github-app/__tests__/github-app.test.ts +76 -0
- package/src/modules/github-app/github-app.connection.ts +38 -4
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +304 -0
- package/src/modules/kb-fs/locking-filesystem.ts +287 -0
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +35 -0
- package/src/modules/kb-sync/kb-sync.interface.ts +2 -0
- package/src/modules/kb-sync/kb-sync.service.ts +6 -0
- package/src/modules/mcp/__tests__/bevel-oauth-provider.test.ts +68 -11
- package/src/modules/mcp/__tests__/fake-downstream-mcp-server.ts +14 -3
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +37 -2
- package/src/modules/mcp/__tests__/mcp.app.e2e.test.ts +200 -0
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +252 -0
- package/src/modules/mcp/__tests__/mcp.service.test.ts +42 -24
- package/src/modules/mcp/__tests__/tool-call-interface.e2e.test.ts +499 -0
- package/src/modules/mcp/__tests__/tool-schema-guard.test.ts +266 -0
- package/src/modules/mcp/mcp-auth.middleware.ts +2 -1
- package/src/modules/mcp/mcp.service.ts +218 -31
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +42 -4
- package/src/modules/mcp/tool-schema-guard.ts +196 -0
- package/src/modules/onboarding/__tests__/onboarding.routes.test.ts +163 -0
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +635 -0
- package/src/modules/onboarding/__tests__/starter-packs.test.ts +169 -0
- package/src/modules/onboarding/onboarding.contract.ts +85 -0
- package/src/modules/onboarding/onboarding.routes.ts +85 -0
- package/src/modules/onboarding/starter-pack.service.ts +580 -0
- package/src/modules/onboarding/starter-packs.ts +182 -0
- package/src/modules/plugins/__tests__/plugins.tools.test.ts +177 -4
- package/src/modules/plugins/index.ts +1 -0
- package/src/modules/plugins/plugin-provision.service.ts +22 -1
- package/src/modules/plugins/plugins.routes.ts +29 -0
- package/src/modules/plugins/plugins.tools.ts +75 -15
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +176 -56
- package/src/modules/settings/__tests__/repository-source.test.ts +9 -0
- package/src/modules/settings/deployment-settings.service.ts +144 -55
- package/src/modules/settings/repository-source.ts +4 -4
- package/src/modules/settings/setup.routes.ts +3 -6
- package/src/modules/skills/__tests__/skills.tools.description.test.ts +95 -0
- package/src/modules/skills/skills.tools.ts +112 -46
- package/src/modules/tool-auth/__tests__/connection-key-rejection.test.ts +32 -0
- package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +65 -0
- package/src/modules/tool-auth/connection-key-rejection.ts +13 -3
- package/src/modules/tool-auth/external-api-key.interface.ts +9 -0
- package/src/modules/tool-auth/external-api-key.service.ts +61 -4
- package/src/modules/tool-auth/tool-auth.middleware.ts +13 -4
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +502 -0
- package/src/modules/tool-helpers/__tests__/route-argument-check.test.ts +337 -0
- package/src/modules/tool-helpers/index.ts +34 -1
- package/src/modules/tool-helpers/route-argument-check.ts +149 -0
- package/src/modules/tool-helpers/route-tool-schemas.ts +171 -0
- package/src/modules/tool-helpers/tool-def.ts +132 -7
- package/src/modules/tool-helpers/tool-handler.ts +196 -8
- package/src/modules/tool-helpers/tool.contract.ts +9 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +57 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +73 -4
- package/src/modules/tool-manuals/tool-manuals.contract.ts +24 -4
- package/src/modules/tool-manuals/tool-manuals.service.ts +17 -0
- package/src/modules/tool-manuals/tool-manuals.tools.ts +86 -38
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +173 -0
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +81 -66
- package/src/modules/tool-registry/description-length.ts +57 -32
- package/src/modules/tool-registry/guide-first.ts +41 -0
- package/src/modules/tool-registry/tool-registry.ts +9 -2
- package/src/modules/workflow/__tests__/apply-failure.test.ts +6 -1
- package/src/modules/workflow/__tests__/file-lock.service.deletion-gate.test.ts +104 -0
- package/src/modules/workflow/__tests__/pending-commits.repository-replaced.test.ts +66 -0
- package/src/modules/workflow/__tests__/pending-commits.worker.test.ts +31 -2
- package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +110 -6
- package/src/modules/workflow/__tests__/sanitize-error.test.ts +89 -1
- package/src/modules/workflow/__tests__/workflow.routes.push-refused.test.ts +202 -0
- package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +6 -6
- package/src/modules/workflow/__tests__/workflow.service.delete-branch.test.ts +1026 -0
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +468 -10
- package/src/modules/workflow/__tests__/workflow.service.folder-proposals.test.ts +4 -0
- package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +5 -4
- package/src/modules/workflow/__tests__/workflow.service.update-from-target.test.ts +54 -2
- package/src/modules/workflow/agent-tools/__tests__/change-request-read-shape.test.ts +705 -0
- package/src/modules/workflow/agent-tools/__tests__/change-request-read.tools.test.ts +1554 -0
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +150 -4
- package/src/modules/workflow/agent-tools/change-request-read-shape.ts +712 -0
- package/src/modules/workflow/agent-tools/change-request-read.tools.ts +759 -0
- package/src/modules/workflow/agent-tools/change-request-summary.ts +5 -1
- package/src/modules/workflow/agent-tools/workflow.tools.ts +137 -35
- package/src/modules/workflow/file-lock.service.ts +67 -5
- package/src/modules/workflow/git/__tests__/git.service.appliedChange.test.ts +285 -0
- package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +124 -0
- package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +164 -0
- package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +334 -0
- package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +48 -1
- package/src/modules/workflow/git/__tests__/node-git-runner.test.ts +231 -2
- package/src/modules/workflow/git/__tests__/pull-request.service.list-fetch.test.ts +72 -2
- package/src/modules/workflow/git/__tests__/pull-request.service.placeholder.test.ts +24 -2
- package/src/modules/workflow/git/__tests__/pull-request.service.test.ts +620 -1
- package/src/modules/workflow/git/git.service.ts +714 -133
- package/src/modules/workflow/git/merge-commit.ts +88 -0
- package/src/modules/workflow/git/node-git-runner.ts +82 -7
- package/src/modules/workflow/git/pull-request.service.ts +380 -54
- package/src/modules/workflow/pending-commits.service.ts +29 -1
- package/src/modules/workflow/pending-commits.worker.ts +24 -6
- package/src/modules/workflow/recovery-bot.ts +1 -1
- package/src/modules/workflow/review-workflow/__tests__/approval-states.test.ts +7 -1
- package/src/modules/workflow/review-workflow/__tests__/merge-records-own-commit.test.ts +407 -0
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +191 -12
- package/src/modules/workflow/sanitize-error.ts +50 -0
- package/src/modules/workflow/workflow.routes.ts +7 -2
- package/src/modules/workflow/workflow.service.ts +886 -112
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +823 -0
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +4 -3
- package/src/modules/workspace/__tests__/first-run.test.ts +234 -0
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +5 -2
- package/src/modules/workspace/__tests__/md-links.test.ts +353 -0
- package/src/modules/workspace/__tests__/move-links.test.ts +261 -0
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +219 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +3 -0
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +102 -0
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +52 -5
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +190 -0
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +21 -10
- package/src/modules/workspace/__tests__/workspace.service.forget-clone-races.test.ts +8 -4
- package/src/modules/workspace/__tests__/workspace.service.test.ts +50 -8
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +33 -55
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +44 -1
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +664 -34
- package/src/modules/workspace/agent-download.builder.ts +308 -0
- package/src/modules/workspace/agent-download.routes.ts +183 -0
- package/src/modules/workspace/agent-download.store.ts +533 -0
- package/src/modules/workspace/agent-upload.store.ts +23 -7
- package/src/modules/workspace/file-readers/raw-mime.ts +40 -0
- package/src/modules/workspace/file-readers/text-reader.ts +5 -8
- package/src/modules/workspace/first-run.ts +222 -0
- package/src/modules/workspace/move-links.ts +237 -0
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +191 -489
- package/src/modules/workspace/startup/steps/seed-tree.ts +23 -38
- package/src/modules/workspace/startup/steps/template-files.step.ts +217 -249
- package/src/modules/workspace/startup/steps/template-source.ts +5 -3
- package/src/modules/workspace/workspace.routes.ts +64 -22
- package/src/modules/workspace/workspace.service.ts +202 -25
- package/src/modules/workspace/workspace.tools.ts +707 -68
- package/src/modules/write-access/__tests__/write-access.test.ts +13 -0
- package/src/modules/write-access/write-access.ts +9 -0
- package/src/shared/domain-errors.ts +123 -11
- package/src/shared/git.contract.ts +8 -1
- package/src/shared/hidden-tools.ts +45 -0
- package/src/shared/utf8-text.ts +21 -0
- package/src/tenancy/__tests__/static-tenant-source.test.ts +1 -0
- package/src/tenancy/static-tenant-source.ts +10 -2
- package/starter-packs/README.md +103 -0
- package/starter-packs/engineering/KnowledgeBase/About us.md +9 -0
- package/starter-packs/engineering/KnowledgeBase/Architecture.md +9 -0
- package/starter-packs/engineering/KnowledgeBase/Glossary.md +9 -0
- package/starter-packs/engineering/KnowledgeBase/How we ship.md +9 -0
- package/starter-packs/engineering/Plugins/engineering-starter/LICENSE +21 -0
- package/starter-packs/engineering/Plugins/engineering-starter/SOURCE.md +20 -0
- package/starter-packs/engineering/Plugins/engineering-starter/access.md +19 -0
- package/starter-packs/engineering/Plugins/engineering-starter/plugin.json +10 -0
- package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/SKILL.md +171 -0
- package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/sections/phase-2a-startup-diagnostic.md +157 -0
- package/starter-packs/engineering/Plugins/engineering-starter/skills/office-hours/sections/phase-2b-builder-brainstorm.md +39 -0
- package/starter-packs/engineering/Plugins/engineering-starter/skills/plan-ceo-review/SKILL.md +144 -0
- package/starter-packs/engineering/Plugins/engineering-starter/skills/plan-eng-review/SKILL.md +144 -0
- package/starter-packs/engineering/Plugins/engineering-starter/skills/review/SKILL.md +80 -0
- package/starter-packs/engineering/Plugins/engineering-starter/skills/review/checklist.md +184 -0
- package/starter-packs/engineering/pack.yaml +11 -0
- package/starter-packs/general/KnowledgeBase/About us.md +9 -0
- package/starter-packs/general/KnowledgeBase/Glossary.md +9 -0
- package/starter-packs/general/KnowledgeBase/How we work.md +9 -0
- package/starter-packs/general/Plugins/general-starter/LICENSE +202 -0
- package/starter-packs/general/Plugins/general-starter/SOURCE.md +10 -0
- package/starter-packs/general/Plugins/general-starter/access.md +19 -0
- package/starter-packs/general/Plugins/general-starter/plugin.json +10 -0
- package/starter-packs/general/Plugins/general-starter/skills/memory-management/SKILL.md +332 -0
- package/starter-packs/general/Plugins/general-starter/skills/productivity-start/SKILL.md +163 -0
- package/starter-packs/general/Plugins/general-starter/skills/productivity-update/SKILL.md +167 -0
- package/starter-packs/general/Plugins/general-starter/skills/task-management/SKILL.md +83 -0
- package/starter-packs/general/pack.yaml +10 -0
- package/starter-packs/operations/KnowledgeBase/Glossary.md +9 -0
- package/starter-packs/operations/KnowledgeBase/How we work.md +9 -0
- package/starter-packs/operations/KnowledgeBase/Processes.md +9 -0
- package/starter-packs/operations/KnowledgeBase/Tools we use.md +9 -0
- package/starter-packs/operations/KnowledgeBase/Vendors.md +9 -0
- package/starter-packs/operations/Plugins/operations-starter/LICENSE +202 -0
- package/starter-packs/operations/Plugins/operations-starter/SOURCE.md +10 -0
- package/starter-packs/operations/Plugins/operations-starter/access.md +19 -0
- package/starter-packs/operations/Plugins/operations-starter/plugin.json +10 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/capacity-plan/SKILL.md +111 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/change-request/SKILL.md +119 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/compliance-tracking/SKILL.md +44 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/process-doc/SKILL.md +80 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/process-optimization/SKILL.md +39 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/risk-assessment/SKILL.md +40 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/runbook/SKILL.md +85 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/status-report/SKILL.md +75 -0
- package/starter-packs/operations/Plugins/operations-starter/skills/vendor-review/SKILL.md +102 -0
- package/starter-packs/operations/pack.yaml +12 -0
- package/starter-packs/sales/KnowledgeBase/About us.md +9 -0
- package/starter-packs/sales/KnowledgeBase/Customers.md +9 -0
- package/starter-packs/sales/KnowledgeBase/Glossary.md +9 -0
- package/starter-packs/sales/KnowledgeBase/How we sell.md +9 -0
- package/starter-packs/sales/KnowledgeBase/Objections.md +9 -0
- package/starter-packs/sales/KnowledgeBase/Pricing.md +9 -0
- package/starter-packs/sales/Plugins/sales-starter/LICENSE +202 -0
- package/starter-packs/sales/Plugins/sales-starter/SOURCE.md +10 -0
- package/starter-packs/sales/Plugins/sales-starter/access.md +19 -0
- package/starter-packs/sales/Plugins/sales-starter/plugin.json +10 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/account-context/SKILL.md +94 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/account-plan/SKILL.md +95 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/account-research/SKILL.md +99 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/account-tiering/SKILL.md +101 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/call-prep/SKILL.md +111 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/call-summary/SKILL.md +111 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/close-plan/SKILL.md +106 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/competitive-intelligence/SKILL.md +102 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/create-an-asset/SKILL.md +105 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/crm-hygiene-check/SKILL.md +103 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/customer-health/SKILL.md +108 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/customer-voice/SKILL.md +94 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/daily-briefing/SKILL.md +61 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/deal-advance-gap/SKILL.md +102 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/deal-review/SKILL.md +105 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/deal-signals/SKILL.md +96 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/deal-slip-scenario/SKILL.md +104 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/draft-outreach/SKILL.md +116 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/end-of-day/SKILL.md +114 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/expansion-whitespace/SKILL.md +97 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/forecast/SKILL.md +100 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/handle-objection/SKILL.md +93 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/inbox-sweep/SKILL.md +114 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/lead-triage/SKILL.md +106 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/log-activity/SKILL.md +111 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/pipeline-review/SKILL.md +97 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/renewal-radar/SKILL.md +95 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/rep-context/SKILL.md +90 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/route-lead/SKILL.md +111 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/sales-setup/SKILL.md +200 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/schedule-meeting/SKILL.md +99 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/stakeholder-map/SKILL.md +107 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/team-pipeline/SKILL.md +105 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/update-opportunity/SKILL.md +112 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/weekly-wrap/SKILL.md +90 -0
- package/starter-packs/sales/Plugins/sales-starter/skills/win-loss-review/SKILL.md +88 -0
- package/starter-packs/sales/pack.yaml +13 -0
- package/starter-packs/support/KnowledgeBase/Escalations.md +9 -0
- package/starter-packs/support/KnowledgeBase/Glossary.md +9 -0
- package/starter-packs/support/KnowledgeBase/Known issues.md +9 -0
- package/starter-packs/support/KnowledgeBase/Products.md +9 -0
- package/starter-packs/support/KnowledgeBase/Tone of voice.md +9 -0
- package/starter-packs/support/Plugins/support-starter/LICENSE +202 -0
- package/starter-packs/support/Plugins/support-starter/SOURCE.md +10 -0
- package/starter-packs/support/Plugins/support-starter/access.md +19 -0
- package/starter-packs/support/Plugins/support-starter/plugin.json +10 -0
- package/starter-packs/support/Plugins/support-starter/skills/customer-escalation/SKILL.md +246 -0
- package/starter-packs/support/Plugins/support-starter/skills/customer-research/SKILL.md +250 -0
- package/starter-packs/support/Plugins/support-starter/skills/draft-response/SKILL.md +416 -0
- package/starter-packs/support/Plugins/support-starter/skills/kb-article/SKILL.md +350 -0
- package/starter-packs/support/Plugins/support-starter/skills/ticket-triage/SKILL.md +273 -0
- package/starter-packs/support/pack.yaml +12 -0
- package/kb-template/AGENTS.md +0 -730
|
@@ -120,6 +120,13 @@
|
|
|
120
120
|
"when": 1790933605784,
|
|
121
121
|
"tag": "0016_pii_encryption",
|
|
122
122
|
"breakpoints": true
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"idx": 17,
|
|
126
|
+
"version": "7",
|
|
127
|
+
"when": 1791359019161,
|
|
128
|
+
"tag": "0017_atlassian_account_links",
|
|
129
|
+
"breakpoints": true
|
|
123
130
|
}
|
|
124
131
|
]
|
|
125
|
-
}
|
|
132
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bevel-software/platform-core-backend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.0",
|
|
4
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
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
"src",
|
|
24
24
|
"migrations",
|
|
25
25
|
"kb-template",
|
|
26
|
+
"agent-guide",
|
|
27
|
+
"mcp-app",
|
|
28
|
+
"starter-packs",
|
|
26
29
|
"THIRD-PARTY-NOTICES.md"
|
|
27
30
|
],
|
|
28
31
|
"engines": {
|
|
@@ -52,8 +55,8 @@
|
|
|
52
55
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
|
|
53
56
|
"yaml": "^2.9.0",
|
|
54
57
|
"zod": "^3.24.0",
|
|
55
|
-
"@bevel-software/platform-
|
|
56
|
-
"@bevel-software/platform-
|
|
58
|
+
"@bevel-software/platform-shared": "0.27.0",
|
|
59
|
+
"@bevel-software/platform-mcp-core": "0.27.0"
|
|
57
60
|
},
|
|
58
61
|
"devDependencies": {
|
|
59
62
|
"@types/adm-zip": "^0.5.8",
|
|
@@ -5,15 +5,12 @@ import {
|
|
|
5
5
|
KNOWLEDGE_BASE_DIR,
|
|
6
6
|
PLUGINS_DIR,
|
|
7
7
|
SKILLS_DIR,
|
|
8
|
-
agentsFilePointerSentence,
|
|
9
8
|
configureKbLayout,
|
|
10
9
|
currentKbLayout,
|
|
11
10
|
isPlatformFile,
|
|
12
|
-
mentionsAgentsFile,
|
|
13
11
|
platformFileNames,
|
|
14
12
|
pluginOfPath,
|
|
15
13
|
renderKbLayoutPlaceholders,
|
|
16
|
-
retargetAgentsFilePointer,
|
|
17
14
|
reservedRootDirNames,
|
|
18
15
|
validateAgentsFileName,
|
|
19
16
|
validateKbLayout,
|
|
@@ -193,106 +190,19 @@ describe('KB layout — the agent guide\'s file name', () => {
|
|
|
193
190
|
expect(renderKbLayoutPlaceholders('see {{agentsFile}}', DEFAULT_KB_LAYOUT)).toBe('see AGENTS.md');
|
|
194
191
|
});
|
|
195
192
|
|
|
196
|
-
test('the platform
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
'.bevelignore',
|
|
201
|
-
'AGENTS.md',
|
|
202
|
-
]);
|
|
203
|
-
expect(platformFile('AGENTS.md')).toBe(true);
|
|
204
|
-
|
|
205
|
-
configureKbLayout({ ...DEFAULT_KB_LAYOUT, agentsFile: 'HEXIS.md' });
|
|
206
|
-
expect(platformFileNames(currentKbLayout())).toEqual(['access.md', 'roles.yaml', '.bevelignore', 'HEXIS.md']);
|
|
207
|
-
// The guide the platform writes is immovable and undeletable…
|
|
208
|
-
expect(platformFile('HEXIS.md')).toBe(true);
|
|
209
|
-
// …and the customer's own AGENTS.md is a page like any other.
|
|
193
|
+
test('the guide is no platform file under any name: a root AGENTS.md is the organisation\'s own page', () => {
|
|
194
|
+
// The platform's guide is served from code and never written to the
|
|
195
|
+
// repository, so nothing under its name is the platform's to protect.
|
|
196
|
+
expect(platformFileNames(DEFAULT_KB_LAYOUT)).toEqual(['access.md', 'roles.yaml', '.bevelignore']);
|
|
210
197
|
expect(platformFile('AGENTS.md')).toBe(false);
|
|
211
|
-
|
|
212
|
-
expect(platformFile('KnowledgeBase/HEXIS.md')).toBe(false);
|
|
213
|
-
});
|
|
198
|
+
expect(platformFile('roles.yaml')).toBe(true);
|
|
214
199
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
'Read [HEXIS.md](./HEXIS.md) before working in this knowledge base — ' +
|
|
218
|
-
"it is the platform's guide to its layout, files and rules.",
|
|
219
|
-
);
|
|
200
|
+
// A name a deployment saved for the written guide is a read alias now,
|
|
201
|
+
// not a file, and makes no platform file either.
|
|
220
202
|
configureKbLayout({ ...DEFAULT_KB_LAYOUT, agentsFile: 'HEXIS.md' });
|
|
221
|
-
expect(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* A guide name is a FILE NAME: spaces, brackets, parentheses, `#` and `%`
|
|
226
|
-
* all pass `validateFilename`, and every one of them means something in an
|
|
227
|
-
* inline link. The label must not end early and the destination must still
|
|
228
|
-
* point at the file.
|
|
229
|
-
*/
|
|
230
|
-
test('the pointer sentence links correctly for a name full of markdown punctuation', () => {
|
|
231
|
-
const name = 'Our [Agent] Guide (v2).md';
|
|
232
|
-
expect(validateGuideName(name)).toBeNull();
|
|
233
|
-
const sentence = agentsFilePointerSentence(name);
|
|
234
|
-
// The label cannot end early: the brackets in it are escaped…
|
|
235
|
-
expect(sentence).toContain('[Our \\[Agent\\] Guide (v2).md]');
|
|
236
|
-
// …and the destination is percent-encoded, parentheses included — a bare
|
|
237
|
-
// `)` would close the link half way through the name.
|
|
238
|
-
expect(sentence).toContain('(./Our%20%5BAgent%5D%20Guide%20%28v2%29.md)');
|
|
239
|
-
// The ordinary name reads as it always has — no escapes, nothing encoded.
|
|
240
|
-
expect(agentsFilePointerSentence('AGENTS.md')).toContain('[AGENTS.md](./AGENTS.md)');
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
test('the pointer sentence encodes a name that would otherwise open a URL fragment', () => {
|
|
244
|
-
// `#` is legal in a filename and opens a fragment in a URL: `./#2 Guide.md`
|
|
245
|
-
// links to the customer's OWN file with a fragment, not to the guide.
|
|
246
|
-
expect(validateGuideName('#2 Guide.md')).toBeNull();
|
|
247
|
-
expect(agentsFilePointerSentence('#2 Guide.md')).toContain('(./%232%20Guide.md)');
|
|
248
|
-
// `%` is legal too, and an unencoded one is a malformed escape.
|
|
249
|
-
expect(agentsFilePointerSentence('100%.md')).toContain('(./100%25.md)');
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* The startup step asks this before appending, and it has to recognise the
|
|
254
|
-
* sentence the LAST boot wrote — whose spelling of the name is escaped in
|
|
255
|
-
* the label and encoded in the destination. Asking for the raw name alone
|
|
256
|
-
* would append a second copy on every boot after the first.
|
|
257
|
-
*/
|
|
258
|
-
test('a file already carrying the pointer sentence counts as mentioning the guide', () => {
|
|
259
|
-
for (const name of ['AGENTS.md', 'Our [Agent] Guide (v2).md', '#2 Guide.md', '100%.md']) {
|
|
260
|
-
const appended = `# Acme\n\n${agentsFilePointerSentence(name)}\n`;
|
|
261
|
-
expect(mentionsAgentsFile(appended, name), name).toBe(true);
|
|
262
|
-
}
|
|
263
|
-
// A file that says nothing about the guide still reads as silent…
|
|
264
|
-
expect(mentionsAgentsFile('# Acme\n\nWrite tickets in the present tense.\n', 'HEXIS.md')).toBe(false);
|
|
265
|
-
// …and the customer's own plain mention counts, in their own words.
|
|
266
|
-
expect(mentionsAgentsFile('See HEXIS.md for the platform.', 'HEXIS.md')).toBe(true);
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* A second rename. The sentence written for the previous guide points at a
|
|
271
|
-
* file that is no longer there, and the new name appears nowhere in the
|
|
272
|
-
* text — so it has to be recognised by its SHAPE and aimed again.
|
|
273
|
-
*/
|
|
274
|
-
test('a pointer sentence the platform wrote is retargeted, whatever guide it named', () => {
|
|
275
|
-
for (const before of ['HEXIS.md', 'Our [Agent] Guide (v2).md', '#2 Guide.md']) {
|
|
276
|
-
const text = `# Acme\n\n${agentsFilePointerSentence(before)}\n`;
|
|
277
|
-
expect(retargetAgentsFilePointer(text, 'GUIDE.md'), before).toBe(
|
|
278
|
-
`# Acme\n\n${agentsFilePointerSentence('GUIDE.md')}\n`,
|
|
279
|
-
);
|
|
280
|
-
}
|
|
281
|
-
// Already aimed right: ours, and unchanged — which is not the same answer
|
|
282
|
-
// as "none of ours here", and the caller tells them apart.
|
|
283
|
-
const current = `# Acme\n\n${agentsFilePointerSentence('GUIDE.md')}\n`;
|
|
284
|
-
expect(retargetAgentsFilePointer(current, 'GUIDE.md')).toBe(current);
|
|
203
|
+
expect(platformFileNames(currentKbLayout())).toEqual(['access.md', 'roles.yaml', '.bevelignore']);
|
|
204
|
+
expect(platformFile('HEXIS.md')).toBe(false);
|
|
205
|
+
expect(platformFile('AGENTS.md')).toBe(false);
|
|
285
206
|
});
|
|
286
207
|
|
|
287
|
-
test('leaves a file holding nothing of the platform\'s alone', () => {
|
|
288
|
-
// Null, not the text: there is nothing of ours to aim, so the caller goes
|
|
289
|
-
// on to ask whether the customer mentioned the guide themselves.
|
|
290
|
-
expect(retargetAgentsFilePointer('# Acme\n\nWrite tickets in the present tense.\n', 'GUIDE.md')).toBeNull();
|
|
291
|
-
// Their own link to their own file is not our sentence.
|
|
292
|
-
expect(retargetAgentsFilePointer('Read [notes](./notes.md) before working here.', 'GUIDE.md')).toBeNull();
|
|
293
|
-
// Our opening words, their sentence.
|
|
294
|
-
expect(
|
|
295
|
-
retargetAgentsFilePointer('Read [HEXIS.md](./HEXIS.md) when you have a moment.', 'GUIDE.md'),
|
|
296
|
-
).toBeNull();
|
|
297
|
-
});
|
|
298
208
|
});
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { agentGuideDir, coreMigrationsDir, defaultKbTemplateDir, defaultStarterPacksDir, mcpAppDir } from '../assets.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Every asset folder this package reads at run time has to reach the places
|
|
9
|
+
* the package is shipped from: the npm tarball (`files` in package.json) and
|
|
10
|
+
* the Docker image (the runtime stage of the repository's Dockerfile, which
|
|
11
|
+
* copies each folder by name).
|
|
12
|
+
*
|
|
13
|
+
* The second list is the one nothing else checks. `agent-guide/` was added to
|
|
14
|
+
* `assets.ts` and to `files`, but not to the Dockerfile, and no test or CI job
|
|
15
|
+
* builds the image: the folder was simply absent from every image built from
|
|
16
|
+
* dev. It is read while the tool list is composed, so the first request for
|
|
17
|
+
* any tool on the deployment failed, and every agent surface with it
|
|
18
|
+
* (2026-10-06). A folder named here and missing from either list fails this
|
|
19
|
+
* test instead.
|
|
20
|
+
*
|
|
21
|
+
* `mcp-app/` was the same omission one release later — caught here rather
|
|
22
|
+
* than on a deployment. It holds the `ui://` view `resources/read` serves, so
|
|
23
|
+
* an image without it answered `tools/list` with no view on `open_page` and
|
|
24
|
+
* `resources/list` with nothing, and the page-in-chat quietly degraded to
|
|
25
|
+
* text on every real build.
|
|
26
|
+
*/
|
|
27
|
+
const packageRoot = fileURLToPath(new URL('../..', import.meta.url));
|
|
28
|
+
const repoRoot = path.resolve(packageRoot, '..', '..');
|
|
29
|
+
|
|
30
|
+
/** The folders assets.ts locates, as names under the package root. */
|
|
31
|
+
const ASSET_DIRS = [
|
|
32
|
+
coreMigrationsDir(),
|
|
33
|
+
defaultKbTemplateDir(),
|
|
34
|
+
agentGuideDir(),
|
|
35
|
+
mcpAppDir(),
|
|
36
|
+
defaultStarterPacksDir(),
|
|
37
|
+
].map((dir) =>
|
|
38
|
+
path.basename(dir),
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
describe('the asset folders this package reads at run time', () => {
|
|
42
|
+
it('are the four assets.ts names', () => {
|
|
43
|
+
expect(ASSET_DIRS.sort()).toEqual(['agent-guide', 'kb-template', 'mcp-app', 'migrations', 'starter-packs']);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('exist in the source tree', () => {
|
|
47
|
+
for (const dir of ASSET_DIRS) {
|
|
48
|
+
expect(fs.statSync(path.join(packageRoot, dir)).isDirectory(), dir).toBe(true);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('are in the npm tarball', () => {
|
|
53
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(packageRoot, 'package.json'), 'utf8')) as { files: string[] };
|
|
54
|
+
for (const dir of ASSET_DIRS) {
|
|
55
|
+
expect(pkg.files, `${dir} missing from package.json "files"`).toContain(dir);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('are copied into the Docker image by the runtime stage', () => {
|
|
60
|
+
const dockerfile = fs.readFileSync(path.join(repoRoot, 'Dockerfile'), 'utf8');
|
|
61
|
+
for (const dir of ASSET_DIRS) {
|
|
62
|
+
const line = `COPY --from=builder /app/packages/core-backend/${dir} packages/core-backend/${dir}`;
|
|
63
|
+
expect(dockerfile, `Dockerfile does not copy ${dir} into the image`).toContain(line);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
package/src/assets.ts
CHANGED
|
@@ -3,8 +3,9 @@ import { fileURLToPath } from 'node:url';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Locations of the assets shipped INSIDE this package (`files` in
|
|
6
|
-
* package.json): the squashed core migration history (`migrations/`)
|
|
7
|
-
* KB seed template (`kb-template/`)
|
|
6
|
+
* package.json): the squashed core migration history (`migrations/`), the
|
|
7
|
+
* KB seed template (`kb-template/`) and the starter packs (`starter-packs/`).
|
|
8
|
+
* All live at the PACKAGE ROOT, and this
|
|
8
9
|
* module is a direct child of either `src/` (in-repo / tsx) or `dist/`
|
|
9
10
|
* (compiled) — so one `..` hop from the module URL reaches the package root
|
|
10
11
|
* in BOTH layouts. Resolved lazily so bundlers that rewrite `import.meta.url`
|
|
@@ -23,3 +24,38 @@ export function coreMigrationsDir(): string {
|
|
|
23
24
|
export function defaultKbTemplateDir(): string {
|
|
24
25
|
return path.join(packageRoot(), 'kb-template');
|
|
25
26
|
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The sections of the platform's agent guide, one markdown file each — the
|
|
30
|
+
* text `get_agent_guide` and a `read_file` of the guide's name serve, composed
|
|
31
|
+
* by `modules/agent-guide`. Beside `kb-template/` rather than under `src/`,
|
|
32
|
+
* so a build and the published source find it at the same place.
|
|
33
|
+
*/
|
|
34
|
+
export function agentGuideDir(): string {
|
|
35
|
+
return path.join(packageRoot(), 'agent-guide');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The MCP App views this deployment serves over `resources/read` — one static
|
|
40
|
+
* HTML file each, no build step. Beside `agent-guide/` and `kb-template/` for
|
|
41
|
+
* the same reason: a build and the published source find it at the same
|
|
42
|
+
* place, and `tsc` copies nothing that is not TypeScript.
|
|
43
|
+
*
|
|
44
|
+
* The backend serves these as BYTES and never imports frontend code — the
|
|
45
|
+
* view's whole job is to load the deployment's embed bundle into its own
|
|
46
|
+
* document (hosts forbid framing the deployment, see `mcp-app.ts`), where the
|
|
47
|
+
* app's renderers then draw the page.
|
|
48
|
+
*/
|
|
49
|
+
export function mcpAppDir(): string {
|
|
50
|
+
return path.join(packageRoot(), 'mcp-app');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The starter packs a new knowledge base may be filled from — one folder per
|
|
55
|
+
* team (`engineering/`, `sales/`, …), each a `pack.yaml` beside the pages and
|
|
56
|
+
* the plugin it adds (see `modules/onboarding/starter-packs.ts`). Beside
|
|
57
|
+
* `kb-template/` for the same reason: read at run time, shipped as files.
|
|
58
|
+
*/
|
|
59
|
+
export function defaultStarterPacksDir(): string {
|
|
60
|
+
return path.join(packageRoot(), 'starter-packs');
|
|
61
|
+
}
|
|
@@ -47,6 +47,14 @@ describe('catalogRevision', () => {
|
|
|
47
47
|
);
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
+
it('moves when an MCP App view changes by a byte, and not when the same view is read again', () => {
|
|
51
|
+
const view = { uri: 'ui://hexis/page.html', text: '<html>v1</html>' };
|
|
52
|
+
const base = catalogRevision([manualLine('serper')], [skill()], [view]);
|
|
53
|
+
expect(catalogRevision([manualLine('serper')], [skill()], [{ ...view }])).toBe(base);
|
|
54
|
+
expect(catalogRevision([manualLine('serper')], [skill()], [{ ...view, text: '<html>v2</html>' }])).not.toBe(base);
|
|
55
|
+
expect(catalogRevision([manualLine('serper')], [skill()], [])).not.toBe(base);
|
|
56
|
+
});
|
|
57
|
+
|
|
50
58
|
describe('a manual added, changed or removed', () => {
|
|
51
59
|
const base = catalogRevision([manualLine('serper')], []);
|
|
52
60
|
|
|
@@ -115,6 +123,8 @@ describe('GET /agent/catalog-revision', () => {
|
|
|
115
123
|
skills: SkillSummary[];
|
|
116
124
|
userId?: string | undefined;
|
|
117
125
|
resolveUserEmail?: (userId: string) => Promise<string | undefined>;
|
|
126
|
+
/** The served views, or a manifest read that fails. */
|
|
127
|
+
mcpApps?: { manifest(): Promise<{ resources: { uri: string; text: string }[] }> };
|
|
118
128
|
}): Promise<{
|
|
119
129
|
url: string;
|
|
120
130
|
catalogFingerprints: ReturnType<typeof vi.fn>;
|
|
@@ -132,6 +142,7 @@ describe('GET /agent/catalog-revision', () => {
|
|
|
132
142
|
next();
|
|
133
143
|
},
|
|
134
144
|
resolveUserEmail: deps.resolveUserEmail ?? (async () => 'someone@example.com'),
|
|
145
|
+
...(deps.mcpApps ? { mcpApps: deps.mcpApps } : {}),
|
|
135
146
|
}),
|
|
136
147
|
);
|
|
137
148
|
http = app.listen(0);
|
|
@@ -174,6 +185,35 @@ describe('GET /agent/catalog-revision', () => {
|
|
|
174
185
|
expect(catalogFingerprints).not.toHaveBeenCalled();
|
|
175
186
|
});
|
|
176
187
|
|
|
188
|
+
it('folds the served MCP App views into the revision, so a changed view moves it', async () => {
|
|
189
|
+
const view = { uri: 'ui://hexis/page.html', text: '<html>v1</html>' };
|
|
190
|
+
const { url } = await mount({
|
|
191
|
+
manuals: [manualLine('serper')],
|
|
192
|
+
skills: [skill()],
|
|
193
|
+
userId: 'u1',
|
|
194
|
+
mcpApps: { manifest: async () => ({ resources: [view] }) },
|
|
195
|
+
});
|
|
196
|
+
const body = (await (await fetch(`${url}/agent/catalog-revision`)).json()) as { revision: string };
|
|
197
|
+
expect(body.revision).toBe(catalogRevision([manualLine('serper')], [skill()], [view]));
|
|
198
|
+
expect(body.revision).not.toBe(catalogRevision([manualLine('serper')], [skill()]));
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('answers the no-views revision when the manifest cannot be read, rather than failing', async () => {
|
|
202
|
+
const { url } = await mount({
|
|
203
|
+
manuals: [manualLine('serper')],
|
|
204
|
+
skills: [skill()],
|
|
205
|
+
userId: 'u1',
|
|
206
|
+
mcpApps: {
|
|
207
|
+
manifest: async () => {
|
|
208
|
+
throw new Error('the view file is gone');
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
const res = await fetch(`${url}/agent/catalog-revision`);
|
|
213
|
+
expect(res.status).toBe(200);
|
|
214
|
+
expect(((await res.json()) as { revision: string }).revision).toBe(catalogRevision([manualLine('serper')], [skill()]));
|
|
215
|
+
});
|
|
216
|
+
|
|
177
217
|
it('does not fail the request when the email lookup throws', async () => {
|
|
178
218
|
const { url } = await mount({
|
|
179
219
|
manuals: [manualLine('serper')],
|
|
@@ -50,6 +50,7 @@ function bootable(runAll: () => Promise<void>) {
|
|
|
50
50
|
} as BootableCore['kbStartupRunner'],
|
|
51
51
|
workflowService: {
|
|
52
52
|
closeChangeRequestsWithDeletedBranches: async () => 0,
|
|
53
|
+
tidyAfterSweep: async () => ({ closedEmpty: 0, removedLeftovers: 0 }),
|
|
53
54
|
} as BootableCore['workflowService'],
|
|
54
55
|
pluginJoinRequestJobs: { startSweeping() {} } as BootableCore['pluginJoinRequestJobs'],
|
|
55
56
|
startupRetry: null,
|
|
@@ -453,6 +453,14 @@ describe('stopCore', () => {
|
|
|
453
453
|
order.push('startupRetry.stop');
|
|
454
454
|
},
|
|
455
455
|
},
|
|
456
|
+
workflowService: {
|
|
457
|
+
stopTidying() {
|
|
458
|
+
order.push('workflowService.stopTidying');
|
|
459
|
+
},
|
|
460
|
+
async drainTidy() {
|
|
461
|
+
order.push('workflowService.drainTidy');
|
|
462
|
+
},
|
|
463
|
+
},
|
|
456
464
|
db: {
|
|
457
465
|
$client: {
|
|
458
466
|
async end() {
|
|
@@ -473,8 +481,10 @@ describe('stopCore', () => {
|
|
|
473
481
|
'backgroundJobs.stopSweeping',
|
|
474
482
|
'agentUploadStore.stopSweeping',
|
|
475
483
|
'startupRetry.stop',
|
|
484
|
+
'workflowService.stopTidying',
|
|
476
485
|
'backgroundJobs.drain',
|
|
477
486
|
'agentUploadStore.drainSweep',
|
|
487
|
+
'workflowService.drainTidy',
|
|
478
488
|
'commitWorker.stop',
|
|
479
489
|
'db.end',
|
|
480
490
|
]);
|
|
@@ -515,8 +525,10 @@ describe('stopCore', () => {
|
|
|
515
525
|
expect(g.order).toEqual([
|
|
516
526
|
'backgroundJobs.stopSweeping',
|
|
517
527
|
'agentUploadStore.stopSweeping',
|
|
528
|
+
'workflowService.stopTidying',
|
|
518
529
|
'backgroundJobs.drain',
|
|
519
530
|
'agentUploadStore.drainSweep',
|
|
531
|
+
'workflowService.drainTidy',
|
|
520
532
|
'commitWorker.stop',
|
|
521
533
|
'db.end',
|
|
522
534
|
]);
|
|
@@ -530,8 +542,10 @@ describe('stopCore', () => {
|
|
|
530
542
|
'backgroundJobs.stopSweeping',
|
|
531
543
|
'agentUploadStore.stopSweeping',
|
|
532
544
|
'startupRetry.stop',
|
|
545
|
+
'workflowService.stopTidying',
|
|
533
546
|
'backgroundJobs.drain',
|
|
534
547
|
'agentUploadStore.drainSweep',
|
|
548
|
+
'workflowService.drainTidy',
|
|
535
549
|
'db.end',
|
|
536
550
|
]);
|
|
537
551
|
});
|
|
@@ -57,11 +57,19 @@ function skillFingerprint(s: SkillSummary): string {
|
|
|
57
57
|
export function catalogRevision(
|
|
58
58
|
manuals: readonly string[],
|
|
59
59
|
skills: readonly SkillSummary[],
|
|
60
|
+
/**
|
|
61
|
+
* The MCP App views this deployment serves, by their bytes: a release that
|
|
62
|
+
* changes a view and nothing else must still move the revision, or a local
|
|
63
|
+
* server already running keeps serving the view it read at startup.
|
|
64
|
+
*/
|
|
65
|
+
views: readonly { uri: string; text: string }[] = [],
|
|
60
66
|
): string {
|
|
61
67
|
const lines = [
|
|
62
68
|
...[...manuals].sort(),
|
|
63
|
-
'\u0001', // separates the
|
|
69
|
+
'\u0001', // separates the lists, so a line can never migrate between them
|
|
64
70
|
...skills.map(skillFingerprint).sort(),
|
|
71
|
+
'\u0001',
|
|
72
|
+
...views.map((v) => `${v.uri}\u0000${createHash('sha256').update(v.text).digest('hex')}`).sort(),
|
|
65
73
|
];
|
|
66
74
|
return createHash('sha256').update(lines.join('\n')).digest('hex').slice(0, 32);
|
|
67
75
|
}
|
|
@@ -82,6 +90,8 @@ export function createCatalogRevisionRoutes(deps: {
|
|
|
82
90
|
manualAuth: RequestHandler;
|
|
83
91
|
/** Connection-key/internal-token user id → email, for the per-caller ACL. */
|
|
84
92
|
resolveUserEmail: (userId: string) => Promise<string | undefined>;
|
|
93
|
+
/** The MCP App views served; absent on a deployment that serves none. */
|
|
94
|
+
mcpApps?: { manifest(): Promise<{ resources: readonly { uri: string; text: string }[] }> };
|
|
85
95
|
}): express.Router {
|
|
86
96
|
const router = express.Router();
|
|
87
97
|
|
|
@@ -95,8 +105,11 @@ export function createCatalogRevisionRoutes(deps: {
|
|
|
95
105
|
const [manuals, skills] = email
|
|
96
106
|
? await Promise.all([deps.toolManuals.catalogFingerprints(email), deps.skills.listSkills(email)])
|
|
97
107
|
: [[], []];
|
|
108
|
+
// A manifest that cannot be read counts as no views, which is also what
|
|
109
|
+
// the MCP endpoint serves in that state.
|
|
110
|
+
const views = deps.mcpApps ? ((await deps.mcpApps.manifest().catch(() => null))?.resources ?? []) : [];
|
|
98
111
|
res.json({
|
|
99
|
-
revision: catalogRevision(manuals, skills),
|
|
112
|
+
revision: catalogRevision(manuals, skills, views),
|
|
100
113
|
tools: manuals.length,
|
|
101
114
|
skills: skills.length,
|
|
102
115
|
});
|
package/src/core/core-ports.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type { IErasureParticipant } from '../modules/auth/account-erasure.servic
|
|
|
9
9
|
import type { IAccountAdmission } from '../modules/auth/account-admission.js';
|
|
10
10
|
import type { IWriteAccess } from '../modules/write-access/write-access.js';
|
|
11
11
|
import type { OnServerStart } from '../modules/workspace/startup/on-server-start.js';
|
|
12
|
+
import type { AgentGuideHook } from '../modules/agent-guide/agent-guide.js';
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Every seam the enterprise overlay can fill in the CORE composition
|
|
@@ -100,6 +101,16 @@ export interface CorePorts {
|
|
|
100
101
|
* contract each step signs up to). Core default: `[]`.
|
|
101
102
|
*/
|
|
102
103
|
kbStartupSteps?: readonly OnServerStart[];
|
|
104
|
+
/**
|
|
105
|
+
* THIS distribution's say over the agent guide — the text `get_agent_guide`
|
|
106
|
+
* and a `read_file` of the guide's name serve. Called with core's sections
|
|
107
|
+
* and the layout in effect on every composition; returns the sections the
|
|
108
|
+
* guide is made of, so a distribution appends its own, replaces one of
|
|
109
|
+
* core's by id, or drops one, and every change core makes to the rest still
|
|
110
|
+
* reaches it. Core default: core's sections as they are. See
|
|
111
|
+
* `modules/agent-guide`.
|
|
112
|
+
*/
|
|
113
|
+
agentGuide?: AgentGuideHook;
|
|
103
114
|
/**
|
|
104
115
|
* Mirror this composition's branch model and knowledge-base layout onto the
|
|
105
116
|
* shared package's PROCESS-WIDE live bindings (`DEFAULT_BRANCH`,
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
createAgentUploadRoutes,
|
|
9
9
|
isAgentUploadRawBodyPath,
|
|
10
10
|
} from '../modules/workspace/agent-upload.routes.js';
|
|
11
|
+
import { createAgentDownloadRoutes } from '../modules/workspace/agent-download.routes.js';
|
|
11
12
|
import { createGitInternalsRouteGuard } from '../modules/workspace/git-internals.middleware.js';
|
|
12
13
|
import { startCore } from './lifecycle.js';
|
|
13
14
|
import { createDiffRoutes } from '../modules/diff/diff.routes.js';
|
|
@@ -26,7 +27,10 @@ import {
|
|
|
26
27
|
registerToolManualsTools,
|
|
27
28
|
} from '../modules/tool-manuals/index.js';
|
|
28
29
|
import { registerWorkflowTools } from '../modules/workflow/agent-tools/workflow.tools.js';
|
|
30
|
+
import { changeRequestScope, registerChangeRequestReadTools } from '../modules/workflow/agent-tools/change-request-read.tools.js';
|
|
31
|
+
import { createOnboardingRoutes } from '../modules/onboarding/onboarding.routes.js';
|
|
29
32
|
import { registerWorkspaceTools } from '../modules/workspace/workspace.tools.js';
|
|
33
|
+
import { registerAgentGuideTool } from '../modules/agent-guide/index.js';
|
|
30
34
|
import { RECOVERY_BOT_EMAIL } from '../modules/workflow/recovery-bot.js';
|
|
31
35
|
import {
|
|
32
36
|
registerSkillsTools,
|
|
@@ -53,6 +57,7 @@ import { createUpdateCheckRoutes } from '../modules/update-check/update-check.ro
|
|
|
53
57
|
import { createAccountRoutes } from '../modules/auth/account.routes.js';
|
|
54
58
|
import { createConnectionKeysAdminRoutes } from '../modules/tool-auth/connection-keys-admin.routes.js';
|
|
55
59
|
import { createAuditRoutes } from '../modules/audit/audit.routes.js';
|
|
60
|
+
import { createAgentConnectionRoutes } from '../modules/audit/agent-connection.routes.js';
|
|
56
61
|
import { createAgentRestAuditMiddleware } from '../modules/audit/agent-rest-audit.middleware.js';
|
|
57
62
|
import { EXTERNAL_KB_MANUAL_NAME } from '../modules/tool-manuals/tool-manuals.contract.js';
|
|
58
63
|
import { createSetupRoutes, isComplete } from '../modules/settings/setup.routes.js';
|
|
@@ -77,6 +82,10 @@ import { createReadiness } from './readiness.js';
|
|
|
77
82
|
import { createAgentInstructionsRoutes } from '../modules/agent-instructions/index.js';
|
|
78
83
|
import type { CoreServices } from './create-core-services.js';
|
|
79
84
|
import { createWriteAccessRoutes, createWriteGateMiddleware } from '../modules/write-access/write-access.js';
|
|
85
|
+
import { createEmbedRoutes, createEmbedLinkRoutes } from '../modules/embed/embed.routes.js';
|
|
86
|
+
import { registerEmbedTools } from '../modules/embed/embed.tools.js';
|
|
87
|
+
import { createMcpAppRoutes } from '../modules/embed/mcp-app.routes.js';
|
|
88
|
+
import { isSandboxReachableOrigin } from '../modules/embed/mcp-app.js';
|
|
80
89
|
|
|
81
90
|
type ExpressApp = ReturnType<typeof express>;
|
|
82
91
|
|
|
@@ -84,6 +93,11 @@ type ExpressApp = ReturnType<typeof express>;
|
|
|
84
93
|
* The context handed to {@link ServerExtensions.tools}: everything an overlay
|
|
85
94
|
* needs to register its own tool defs + endpoint routes on the unified tool
|
|
86
95
|
* surface, exactly like the core modules do.
|
|
96
|
+
*
|
|
97
|
+
* A tool that works on a branch declares it on its `toolDef` (`branch:
|
|
98
|
+
* 'required'` or, read-only tools only, `'defaults-to-default-branch'`), and
|
|
99
|
+
* `toolHandler` resolves the branch before the tool runs — see "The branch"
|
|
100
|
+
* in `modules/tool-helpers/index.ts`.
|
|
87
101
|
*/
|
|
88
102
|
export interface ToolSurfaceCtx {
|
|
89
103
|
registry: CoreServices['toolRegistry'];
|
|
@@ -455,8 +469,35 @@ export async function createCoreServer(
|
|
|
455
469
|
// every save surface (agent write tools, the app's PUT /file) and on
|
|
456
470
|
// `get_skill`. Warnings only; it never refuses a save.
|
|
457
471
|
const allowedToolsChecker = new AllowedToolsChecker(core.toolRegistry, core.toolManualService, core.kb);
|
|
458
|
-
|
|
459
|
-
|
|
472
|
+
// `delete_branch` sees change requests as `get_change_request` does.
|
|
473
|
+
registerWorkflowTools(core.toolRegistry, toolsRouter, ta, th, core.kb, changeRequestScope(core.accessControl, core.kb).maySee);
|
|
474
|
+
// The five read tools over change requests. Separate from the workflow tools
|
|
475
|
+
// because they are the only ones that gate their whole payload on the
|
|
476
|
+
// caller's read access, so they take the access service and nothing else.
|
|
477
|
+
registerChangeRequestReadTools(core.toolRegistry, toolsRouter, ta, th, core.accessControl, core.kb);
|
|
478
|
+
const workspaceTools = registerWorkspaceTools(core.toolRegistry, toolsRouter, ta, th, core.spillStore, core.docExtractService, core.accessControl, core.kb, agentAccessGate, core.routineWritePolicy, core.sessionSink, allowedToolsChecker, core.changeGate, core.agentUploadStore, core.agentGuide, core.agentDownloadStore, core.starterPackService, core.disk);
|
|
479
|
+
// `open_page` — the knowledge-base page shown inside a chat. Registered
|
|
480
|
+
// here, on the same router as the file tools, because it answers with
|
|
481
|
+
// `read_file`'s own read: the read hook, the access gate and the
|
|
482
|
+
// not-found refusal come from that registration rather than from a copy.
|
|
483
|
+
registerEmbedTools(core.toolRegistry, toolsRouter, ta, th, {
|
|
484
|
+
embedService: core.embedService,
|
|
485
|
+
kb: core.kb,
|
|
486
|
+
readForTool: workspaceTools.readForTool,
|
|
487
|
+
// A host's https sandbox cannot load from a plain-http deployment, so
|
|
488
|
+
// the tool answers the text and the app address and says so.
|
|
489
|
+
canBeReached: () => isSandboxReachableOrigin(core.config.publicFrontendUrl),
|
|
490
|
+
appUrlFor: (repoRelative, slug) => core.embedService.appUrlFor(repoRelative, slug),
|
|
491
|
+
// The read is `read_file`'s, so the notes a deployment registers for the
|
|
492
|
+
// gated tools reach this one as well.
|
|
493
|
+
notes: agentAccessGate.notes,
|
|
494
|
+
});
|
|
495
|
+
// The app manifest and the view bytes, for the LOCAL MCP server: it bridges
|
|
496
|
+
// a host to this deployment over HTTP and has no other way to learn which
|
|
497
|
+
// tools carry a view. Same router, same `manualAuth` as `all-tools`.
|
|
498
|
+
toolsRouter.use(createMcpAppRoutes(core.mcpAppService, core.manualAuthMiddleware));
|
|
499
|
+
// The guide on its own, beside the file tools that serve it by name.
|
|
500
|
+
registerAgentGuideTool(core.toolRegistry, toolsRouter, ta, th, core.agentGuideSections);
|
|
460
501
|
// The agent upload route, on the same router as the tool endpoints so it
|
|
461
502
|
// mounts ahead of the JWT `/api` mounts below — but WITHOUT `toolAuth`: its
|
|
462
503
|
// whole credential is the single-use token in its path, which is the point
|
|
@@ -464,16 +505,23 @@ export async function createCoreServer(
|
|
|
464
505
|
// no workspace and writes into none; every access, platform-file and branch
|
|
465
506
|
// rule is applied later by `apply_file_upload`.
|
|
466
507
|
toolsRouter.use(createAgentUploadRoutes({ uploads: core.agentUploadStore }));
|
|
508
|
+
// Its outgoing twin, mounted the same way and for the same reason: the
|
|
509
|
+
// one-time link is the whole credential an agent's `curl` carries. Every
|
|
510
|
+
// file behind it was judged when `request_file_download` issued it.
|
|
511
|
+
toolsRouter.use(createAgentDownloadRoutes({ downloads: core.agentDownloadStore, identify: core.agentDownloadFetcher }));
|
|
467
512
|
registerSkillsTools(core.toolRegistry, toolsRouter, ta, th, core.skillService, allowedToolsChecker);
|
|
468
513
|
// Definitions only: the endpoints they describe are the app's own plugin
|
|
469
514
|
// creation routes, mounted below behind the key-or-session gate.
|
|
470
|
-
registerPluginsTools(core.toolRegistry);
|
|
515
|
+
registerPluginsTools(core.toolRegistry, core.kb);
|
|
471
516
|
registerToolManualsTools(core.toolRegistry, toolsRouter, ta, th, core.toolManualService, {
|
|
472
517
|
accessControl: core.accessControl,
|
|
473
518
|
// The vault satisfies the module's local VariableStatusPort — `list_tool_setup`
|
|
474
519
|
// reports configuration booleans only; secret values never ride through tools.
|
|
475
520
|
variableStatus: core.secretsVaultService,
|
|
476
521
|
kb: core.kb,
|
|
522
|
+
// What the proxy's schema check found when each server's tools were last
|
|
523
|
+
// loaded — reported to a caller who may write the tool, nobody else.
|
|
524
|
+
hiddenTools: core.mcpService.hiddenTools,
|
|
477
525
|
});
|
|
478
526
|
// Overlay tool registrations (defs + module-hosted endpoints).
|
|
479
527
|
ext.tools?.({
|
|
@@ -517,6 +565,9 @@ export async function createCoreServer(
|
|
|
517
565
|
skills: core.skillService,
|
|
518
566
|
manualAuth: core.manualAuthMiddleware,
|
|
519
567
|
resolveUserEmail: async (userId) => (await core.authService.getUserById(userId))?.email,
|
|
568
|
+
// The views move the revision too: a release that changes a view and no
|
|
569
|
+
// manual would otherwise leave a running local server on the old one.
|
|
570
|
+
mcpApps: core.mcpAppService,
|
|
520
571
|
}));
|
|
521
572
|
// The only core route that returns secret VALUES: a local `.tool`'s declared
|
|
522
573
|
// variables, for the local MCP server that will execute it. It re-reads the
|
|
@@ -543,6 +594,12 @@ export async function createCoreServer(
|
|
|
543
594
|
// Non-JWT overlay surfaces that sit between the tools router and the
|
|
544
595
|
// JWT-protected `/api` routes (LLM proxy, embed, upload — see the phase
|
|
545
596
|
// doc on ServerExtensions.postTools).
|
|
597
|
+
// The embed surface, ahead of every JWT mount and of the static
|
|
598
|
+
// catch-all: its data routes authenticate by the embed token ALONE (a
|
|
599
|
+
// session reaching them must be refused, not honoured), and the two SPA
|
|
600
|
+
// routes need their framing headers stamped before `index.html` is served.
|
|
601
|
+
app.use(createEmbedRoutes(core.embedService));
|
|
602
|
+
|
|
546
603
|
ext.postTools?.(app, core);
|
|
547
604
|
|
|
548
605
|
// The plugin creation doors — `POST /api/plugins`, `POST /api/plugins/personal`
|
|
@@ -718,6 +775,18 @@ export async function createCoreServer(
|
|
|
718
775
|
core.authMiddleware,
|
|
719
776
|
createAuditRoutes(core.agentAuditService, core.externalApiKeyService, core.adminAccess),
|
|
720
777
|
);
|
|
778
|
+
// The onboarding's "is your agent connected yet?" — the caller's own
|
|
779
|
+
// agents only, read off the same connections and keys the Audit log lists.
|
|
780
|
+
app.use('/api', core.authMiddleware, createAgentConnectionRoutes(core.agentAuditService));
|
|
781
|
+
// "What does your team do?" — the starter-pack question a new knowledge
|
|
782
|
+
// base's admin is asked, and the pack it adds (admin-gated inside).
|
|
783
|
+
app.use(
|
|
784
|
+
'/api',
|
|
785
|
+
core.authMiddleware,
|
|
786
|
+
createOnboardingRoutes(core.starterPackService, async (req) =>
|
|
787
|
+
req.userId ? ((await core.authService.getUserById(req.userId)) ?? null) : null,
|
|
788
|
+
),
|
|
789
|
+
);
|
|
721
790
|
// First-run setup. Mounted with the other authed routes but touching NO
|
|
722
791
|
// workspace — it has to work on a deployment that has no knowledge base yet,
|
|
723
792
|
// which is the whole reason it exists. The startup runner rides along for
|
|
@@ -810,6 +879,12 @@ export async function createCoreServer(
|
|
|
810
879
|
}));
|
|
811
880
|
|
|
812
881
|
// JWT-protected overlay routes.
|
|
882
|
+
// Linking an outside account to the signed-in user, and managing those
|
|
883
|
+
// links. Under the JWT middleware, deliberately: the link acts AS the
|
|
884
|
+
// session, which is exactly why the page it is called from refuses every
|
|
885
|
+
// framing ancestor.
|
|
886
|
+
app.use('/api', core.authMiddleware, createEmbedLinkRoutes(core.embedService));
|
|
887
|
+
|
|
813
888
|
ext.authed?.(app, core);
|
|
814
889
|
|
|
815
890
|
// In production, serve the frontend static build
|