@bevel-software/platform-core-backend 0.26.0 → 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 +17 -0
- package/agent-guide/conventions.md +8 -0
- package/agent-guide/html-views.md +83 -0
- package/agent-guide/new-knowledge-base.md +24 -0
- package/agent-guide/tool-manuals.md +10 -0
- package/dist/assets.d.ts +19 -0
- package/dist/assets.d.ts.map +1 -1
- package/dist/assets.js +26 -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/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 +54 -3
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +26 -0
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +100 -8
- 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 +8 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +1 -0
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +11 -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 +6 -0
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +8 -0
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/index.d.ts +1 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +1 -1
- package/dist/modules/agent-guide/index.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +5 -0
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +19 -2
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +19 -19
- 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 +28 -1
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +64 -8
- 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/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/settings/deployment-settings.service.d.ts +34 -0
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +134 -1
- 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/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +50 -32
- 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.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +14 -5
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/tool-registry/description-length.d.ts +6 -2
- package/dist/modules/tool-registry/description-length.d.ts.map +1 -1
- package/dist/modules/tool-registry/description-length.js +27 -5
- package/dist/modules/tool-registry/description-length.js.map +1 -1
- package/dist/modules/tool-registry/guide-first.d.ts +4 -0
- package/dist/modules/tool-registry/guide-first.d.ts.map +1 -1
- package/dist/modules/tool-registry/guide-first.js +9 -1
- package/dist/modules/tool-registry/guide-first.js.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts +53 -0
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js +97 -68
- package/dist/modules/workflow/agent-tools/change-request-read.tools.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 +124 -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 +72 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +172 -36
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- 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/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.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +2 -1
- 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.service.d.ts +183 -15
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +805 -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 +3 -13
- package/dist/modules/workspace/startup/steps/seed-tree.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 +59 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +443 -65
- 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 +73 -1
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +86 -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/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/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 +5 -3
- package/src/__tests__/packaged-assets-ship.test.ts +16 -4
- package/src/assets.ts +28 -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/create-core-server.ts +67 -3
- package/src/core/create-core-services.ts +140 -6
- 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.service.test.ts +19 -0
- package/src/modules/access/access-control.interface.ts +13 -0
- package/src/modules/access/access-control.service.ts +16 -0
- package/src/modules/access/directory-sync-bot.ts +1 -1
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +58 -0
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +19 -1
- package/src/modules/agent-guide/agent-guide.ts +9 -0
- package/src/modules/agent-guide/index.ts +1 -0
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +14 -0
- package/src/modules/agent-instructions/compose.ts +17 -2
- package/src/modules/agent-instructions/shared-file-rules.ts +19 -19
- 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__/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 +3 -1
- package/src/modules/mcp/__tests__/mcp.service.test.ts +23 -13
- package/src/modules/mcp/__tests__/tool-call-interface.e2e.test.ts +499 -0
- package/src/modules/mcp/mcp-auth.middleware.ts +2 -1
- package/src/modules/mcp/mcp.service.ts +81 -12
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +42 -4
- 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 +25 -2
- 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/settings/__tests__/deployment-settings.service.test.ts +150 -1
- package/src/modules/settings/__tests__/repository-source.test.ts +9 -0
- package/src/modules/settings/deployment-settings.service.ts +131 -1
- package/src/modules/settings/repository-source.ts +4 -4
- package/src/modules/skills/__tests__/skills.tools.description.test.ts +5 -1
- package/src/modules/skills/skills.tools.ts +55 -35
- 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/tool-manuals.tools.ts +15 -5
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +14 -1
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +23 -10
- package/src/modules/tool-registry/description-length.ts +34 -7
- package/src/modules/tool-registry/guide-first.ts +8 -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.tools.test.ts +41 -5
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +127 -2
- package/src/modules/workflow/agent-tools/change-request-read.tools.ts +157 -122
- package/src/modules/workflow/agent-tools/workflow.tools.ts +129 -35
- package/src/modules/workflow/file-lock.service.ts +67 -5
- package/src/modules/workflow/git/__tests__/git.service.deleteBranch.test.ts +164 -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/git.service.ts +176 -38
- package/src/modules/workflow/git/node-git-runner.ts +82 -7
- 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/review-workflow.service.ts +2 -1
- package/src/modules/workflow/sanitize-error.ts +50 -0
- package/src/modules/workflow/workflow.service.ts +879 -112
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +823 -0
- 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.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.branch-errors.test.ts +44 -1
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +409 -12
- 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/seed-tree.ts +3 -12
- 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 +492 -63
- 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 +108 -11
- package/src/shared/git.contract.ts +8 -1
- 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
|
@@ -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",
|
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
"migrations",
|
|
25
25
|
"kb-template",
|
|
26
26
|
"agent-guide",
|
|
27
|
+
"mcp-app",
|
|
28
|
+
"starter-packs",
|
|
27
29
|
"THIRD-PARTY-NOTICES.md"
|
|
28
30
|
],
|
|
29
31
|
"engines": {
|
|
@@ -53,8 +55,8 @@
|
|
|
53
55
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
|
|
54
56
|
"yaml": "^2.9.0",
|
|
55
57
|
"zod": "^3.24.0",
|
|
56
|
-
"@bevel-software/platform-
|
|
57
|
-
"@bevel-software/platform-
|
|
58
|
+
"@bevel-software/platform-shared": "0.27.0",
|
|
59
|
+
"@bevel-software/platform-mcp-core": "0.27.0"
|
|
58
60
|
},
|
|
59
61
|
"devDependencies": {
|
|
60
62
|
"@types/adm-zip": "^0.5.8",
|
|
@@ -2,7 +2,7 @@ import { describe, it, expect } from 'vitest';
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import { agentGuideDir, coreMigrationsDir, defaultKbTemplateDir } from '../assets.js';
|
|
5
|
+
import { agentGuideDir, coreMigrationsDir, defaultKbTemplateDir, defaultStarterPacksDir, mcpAppDir } from '../assets.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Every asset folder this package reads at run time has to reach the places
|
|
@@ -17,18 +17,30 @@ import { agentGuideDir, coreMigrationsDir, defaultKbTemplateDir } from '../asset
|
|
|
17
17
|
* any tool on the deployment failed, and every agent surface with it
|
|
18
18
|
* (2026-10-06). A folder named here and missing from either list fails this
|
|
19
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.
|
|
20
26
|
*/
|
|
21
27
|
const packageRoot = fileURLToPath(new URL('../..', import.meta.url));
|
|
22
28
|
const repoRoot = path.resolve(packageRoot, '..', '..');
|
|
23
29
|
|
|
24
30
|
/** The folders assets.ts locates, as names under the package root. */
|
|
25
|
-
const ASSET_DIRS = [
|
|
31
|
+
const ASSET_DIRS = [
|
|
32
|
+
coreMigrationsDir(),
|
|
33
|
+
defaultKbTemplateDir(),
|
|
34
|
+
agentGuideDir(),
|
|
35
|
+
mcpAppDir(),
|
|
36
|
+
defaultStarterPacksDir(),
|
|
37
|
+
].map((dir) =>
|
|
26
38
|
path.basename(dir),
|
|
27
39
|
);
|
|
28
40
|
|
|
29
41
|
describe('the asset folders this package reads at run time', () => {
|
|
30
|
-
it('are the
|
|
31
|
-
expect(ASSET_DIRS.sort()).toEqual(['agent-guide', 'kb-template', 'migrations']);
|
|
42
|
+
it('are the four assets.ts names', () => {
|
|
43
|
+
expect(ASSET_DIRS.sort()).toEqual(['agent-guide', 'kb-template', 'mcp-app', 'migrations', 'starter-packs']);
|
|
32
44
|
});
|
|
33
45
|
|
|
34
46
|
it('exist in the source tree', () => {
|
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`
|
|
@@ -33,3 +34,28 @@ export function defaultKbTemplateDir(): string {
|
|
|
33
34
|
export function agentGuideDir(): string {
|
|
34
35
|
return path.join(packageRoot(), 'agent-guide');
|
|
35
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
|
});
|
|
@@ -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,8 @@ import {
|
|
|
26
27
|
registerToolManualsTools,
|
|
27
28
|
} from '../modules/tool-manuals/index.js';
|
|
28
29
|
import { registerWorkflowTools } from '../modules/workflow/agent-tools/workflow.tools.js';
|
|
29
|
-
import { registerChangeRequestReadTools } from '../modules/workflow/agent-tools/change-request-read.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';
|
|
30
32
|
import { registerWorkspaceTools } from '../modules/workspace/workspace.tools.js';
|
|
31
33
|
import { registerAgentGuideTool } from '../modules/agent-guide/index.js';
|
|
32
34
|
import { RECOVERY_BOT_EMAIL } from '../modules/workflow/recovery-bot.js';
|
|
@@ -55,6 +57,7 @@ import { createUpdateCheckRoutes } from '../modules/update-check/update-check.ro
|
|
|
55
57
|
import { createAccountRoutes } from '../modules/auth/account.routes.js';
|
|
56
58
|
import { createConnectionKeysAdminRoutes } from '../modules/tool-auth/connection-keys-admin.routes.js';
|
|
57
59
|
import { createAuditRoutes } from '../modules/audit/audit.routes.js';
|
|
60
|
+
import { createAgentConnectionRoutes } from '../modules/audit/agent-connection.routes.js';
|
|
58
61
|
import { createAgentRestAuditMiddleware } from '../modules/audit/agent-rest-audit.middleware.js';
|
|
59
62
|
import { EXTERNAL_KB_MANUAL_NAME } from '../modules/tool-manuals/tool-manuals.contract.js';
|
|
60
63
|
import { createSetupRoutes, isComplete } from '../modules/settings/setup.routes.js';
|
|
@@ -79,6 +82,10 @@ import { createReadiness } from './readiness.js';
|
|
|
79
82
|
import { createAgentInstructionsRoutes } from '../modules/agent-instructions/index.js';
|
|
80
83
|
import type { CoreServices } from './create-core-services.js';
|
|
81
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';
|
|
82
89
|
|
|
83
90
|
type ExpressApp = ReturnType<typeof express>;
|
|
84
91
|
|
|
@@ -86,6 +93,11 @@ type ExpressApp = ReturnType<typeof express>;
|
|
|
86
93
|
* The context handed to {@link ServerExtensions.tools}: everything an overlay
|
|
87
94
|
* needs to register its own tool defs + endpoint routes on the unified tool
|
|
88
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`.
|
|
89
101
|
*/
|
|
90
102
|
export interface ToolSurfaceCtx {
|
|
91
103
|
registry: CoreServices['toolRegistry'];
|
|
@@ -457,12 +469,33 @@ export async function createCoreServer(
|
|
|
457
469
|
// every save surface (agent write tools, the app's PUT /file) and on
|
|
458
470
|
// `get_skill`. Warnings only; it never refuses a save.
|
|
459
471
|
const allowedToolsChecker = new AllowedToolsChecker(core.toolRegistry, core.toolManualService, core.kb);
|
|
460
|
-
|
|
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);
|
|
461
474
|
// The five read tools over change requests. Separate from the workflow tools
|
|
462
475
|
// because they are the only ones that gate their whole payload on the
|
|
463
476
|
// caller's read access, so they take the access service and nothing else.
|
|
464
477
|
registerChangeRequestReadTools(core.toolRegistry, toolsRouter, ta, th, core.accessControl, core.kb);
|
|
465
|
-
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);
|
|
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));
|
|
466
499
|
// The guide on its own, beside the file tools that serve it by name.
|
|
467
500
|
registerAgentGuideTool(core.toolRegistry, toolsRouter, ta, th, core.agentGuideSections);
|
|
468
501
|
// The agent upload route, on the same router as the tool endpoints so it
|
|
@@ -472,6 +505,10 @@ export async function createCoreServer(
|
|
|
472
505
|
// no workspace and writes into none; every access, platform-file and branch
|
|
473
506
|
// rule is applied later by `apply_file_upload`.
|
|
474
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 }));
|
|
475
512
|
registerSkillsTools(core.toolRegistry, toolsRouter, ta, th, core.skillService, allowedToolsChecker);
|
|
476
513
|
// Definitions only: the endpoints they describe are the app's own plugin
|
|
477
514
|
// creation routes, mounted below behind the key-or-session gate.
|
|
@@ -528,6 +565,9 @@ export async function createCoreServer(
|
|
|
528
565
|
skills: core.skillService,
|
|
529
566
|
manualAuth: core.manualAuthMiddleware,
|
|
530
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,
|
|
531
571
|
}));
|
|
532
572
|
// The only core route that returns secret VALUES: a local `.tool`'s declared
|
|
533
573
|
// variables, for the local MCP server that will execute it. It re-reads the
|
|
@@ -554,6 +594,12 @@ export async function createCoreServer(
|
|
|
554
594
|
// Non-JWT overlay surfaces that sit between the tools router and the
|
|
555
595
|
// JWT-protected `/api` routes (LLM proxy, embed, upload — see the phase
|
|
556
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
|
+
|
|
557
603
|
ext.postTools?.(app, core);
|
|
558
604
|
|
|
559
605
|
// The plugin creation doors — `POST /api/plugins`, `POST /api/plugins/personal`
|
|
@@ -729,6 +775,18 @@ export async function createCoreServer(
|
|
|
729
775
|
core.authMiddleware,
|
|
730
776
|
createAuditRoutes(core.agentAuditService, core.externalApiKeyService, core.adminAccess),
|
|
731
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
|
+
);
|
|
732
790
|
// First-run setup. Mounted with the other authed routes but touching NO
|
|
733
791
|
// workspace — it has to work on a deployment that has no knowledge base yet,
|
|
734
792
|
// which is the whole reason it exists. The startup runner rides along for
|
|
@@ -821,6 +879,12 @@ export async function createCoreServer(
|
|
|
821
879
|
}));
|
|
822
880
|
|
|
823
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
|
+
|
|
824
888
|
ext.authed?.(app, core);
|
|
825
889
|
|
|
826
890
|
// In production, serve the frontend static build
|