@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
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import {
|
|
4
|
-
DEFAULT_KB_LAYOUT,
|
|
5
|
-
LEGACY_AGENTS_FILE,
|
|
6
|
-
PREAMBLE_CAP,
|
|
7
|
-
renderKbLayoutPlaceholders,
|
|
8
|
-
} from '@bevel-software/platform-shared';
|
|
1
|
+
import { DEFAULT_KB_LAYOUT, PREAMBLE_CAP } from '@bevel-software/platform-shared';
|
|
9
2
|
import { describe, expect, it } from 'vitest';
|
|
10
|
-
import {
|
|
11
|
-
import { renderTemplateText, SHARED_FILE_RULES_PLACEHOLDER } from '../../workspace/startup/steps/template-source.js';
|
|
3
|
+
import { composeAgentGuide } from '../../agent-guide/agent-guide.js';
|
|
12
4
|
import {
|
|
13
5
|
INSTRUCTIONS_CAP,
|
|
14
6
|
PLATFORM_HEADER,
|
|
@@ -17,37 +9,29 @@ import {
|
|
|
17
9
|
platformInstructions,
|
|
18
10
|
} from '../compose.js';
|
|
19
11
|
import {
|
|
20
|
-
POINTER_GUIDE_NAME_BUDGET,
|
|
21
12
|
SHARED_FILE_RULES_CAP,
|
|
22
|
-
SHARED_RULES_POINTER_MAX,
|
|
23
13
|
SHARED_RULES_SECTION,
|
|
24
14
|
sharedFileRules,
|
|
25
15
|
sharedFileRulesSection,
|
|
26
|
-
sharedRulesPointer,
|
|
27
16
|
} from '../shared-file-rules.js';
|
|
28
17
|
|
|
29
18
|
/**
|
|
30
19
|
* The rules every file tool shares are stated in TWO places — the handshake
|
|
31
|
-
* `instructions` and the platform
|
|
20
|
+
* `instructions` and the platform's agent guide — and in neither tool
|
|
32
21
|
* description. These tests are what makes "stated once" true: the two places
|
|
33
22
|
* carry the SAME string, built from one text, so a rule cannot be changed in one
|
|
34
23
|
* and left stale in the other.
|
|
35
24
|
*/
|
|
36
25
|
|
|
37
|
-
/** The packaged template's agent guide, as it ships (placeholders unrendered). */
|
|
38
|
-
async function guideTemplate(): Promise<string> {
|
|
39
|
-
return readFile(path.join(defaultKbTemplateDir(), LEGACY_AGENTS_FILE), 'utf8');
|
|
40
|
-
}
|
|
41
|
-
|
|
42
26
|
describe('the shared file rules are one text, in two places', () => {
|
|
43
|
-
it('puts the identical section in the handshake instructions and in the
|
|
27
|
+
it('puts the identical section in the handshake instructions and in the agent guide', async () => {
|
|
44
28
|
const section = sharedFileRulesSection(DEFAULT_KB_LAYOUT);
|
|
45
29
|
expect(section.startsWith(`## ${SHARED_RULES_SECTION}\n\n`)).toBe(true);
|
|
46
30
|
|
|
47
31
|
const instructions = composeAgentInstructions(null).instructions;
|
|
48
32
|
expect(instructions).toContain(section);
|
|
49
33
|
|
|
50
|
-
const guide =
|
|
34
|
+
const guide = await composeAgentGuide(DEFAULT_KB_LAYOUT);
|
|
51
35
|
expect(guide).toContain(section);
|
|
52
36
|
|
|
53
37
|
// Byte-for-byte the same text in both, which is the whole point: neither is
|
|
@@ -62,7 +46,7 @@ describe('the shared file rules are one text, in two places', () => {
|
|
|
62
46
|
|
|
63
47
|
it('states every rule in both places, and the content rule exactly once in each', async () => {
|
|
64
48
|
const instructions = composeAgentInstructions(null).instructions;
|
|
65
|
-
const guide =
|
|
49
|
+
const guide = await composeAgentGuide(DEFAULT_KB_LAYOUT);
|
|
66
50
|
const rules = sharedFileRules(DEFAULT_KB_LAYOUT);
|
|
67
51
|
expect(rules.map((r) => r.id)).toEqual([
|
|
68
52
|
'agent-guide',
|
|
@@ -87,7 +71,7 @@ describe('the shared file rules are one text, in two places', () => {
|
|
|
87
71
|
});
|
|
88
72
|
|
|
89
73
|
it('carries the whole content rule — the refused families, the byte tools and the upload path', async () => {
|
|
90
|
-
for (const text of [composeAgentInstructions(null).instructions,
|
|
74
|
+
for (const text of [composeAgentInstructions(null).instructions, await composeAgentGuide(DEFAULT_KB_LAYOUT)]) {
|
|
91
75
|
expect(text).toContain('`binary_not_writable`');
|
|
92
76
|
expect(text).toContain('copy_file, move_file and delete_file act on bytes of any kind');
|
|
93
77
|
expect(text).toContain('unzip extracts the entries of a `.zip`');
|
|
@@ -102,108 +86,45 @@ describe('the shared file rules are one text, in two places', () => {
|
|
|
102
86
|
}
|
|
103
87
|
});
|
|
104
88
|
|
|
105
|
-
|
|
89
|
+
/**
|
|
90
|
+
* The guide is no file: it is reached by one name at the KB root and by one
|
|
91
|
+
* tool, on every deployment. The first rule says so, and names the
|
|
92
|
+
* organisation's own conventions file beside it — which is what a
|
|
93
|
+
* `read_file` of that name serves first.
|
|
94
|
+
*/
|
|
95
|
+
it('tells an agent to call get_agent_guide first, and that AGENTS.md answers with the same guide after the organisation\'s own', () => {
|
|
96
|
+
const rule = sharedFileRules(DEFAULT_KB_LAYOUT).find((r) => r.id === 'agent-guide')!.body;
|
|
97
|
+
expect(rule).toContain("call `get_agent_guide` and read the platform's guide");
|
|
98
|
+
expect(rule).toContain('read_file on `AGENTS.md` at the KB root answers with the same guide');
|
|
99
|
+
expect(rule).toContain("after the organisation's own conventions file of that name");
|
|
100
|
+
// The pre-rename name is still offered, for a knowledge base that kept one.
|
|
101
|
+
expect(rule).toContain('`CLAUDE.md`');
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('names one guide on every deployment, whatever name a deployment once saved for the written one', () => {
|
|
106
105
|
const layout = { ...DEFAULT_KB_LAYOUT, agentsFile: 'HEXIS.md' };
|
|
107
106
|
const section = sharedFileRulesSection(layout);
|
|
108
|
-
|
|
109
|
-
expect(section).toContain('
|
|
110
|
-
expect(section).toContain('`CLAUDE.md` on a knowledge base seeded before it was renamed');
|
|
111
|
-
// The platform files a move refuses list the guide under its own name too.
|
|
112
|
-
expect(section).toContain('`HEXIS.md`');
|
|
107
|
+
expect(section).toBe(sharedFileRulesSection(DEFAULT_KB_LAYOUT));
|
|
108
|
+
expect(section).not.toContain('HEXIS.md');
|
|
113
109
|
expect(composeAgentInstructions(null, layout).instructions).toContain(section);
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
// The guide is not a platform file under any name: the list a move
|
|
111
|
+
// refuses does not carry it.
|
|
112
|
+
expect(section).toContain('`access.md` or `.bevelignore` in any folder, `roles.yaml` at the repository root');
|
|
116
113
|
});
|
|
117
114
|
|
|
118
|
-
it('keeps the pointer bounded whatever the guide is called', () => {
|
|
119
|
-
// The pointer rides on every file tool, so its length is not the guide's
|
|
120
|
-
// business: `validateFilename` allows a 255-byte name, and an unbounded
|
|
121
|
-
// pointer would reach 318 characters and push `file_stat` past the
|
|
122
|
-
// description cap — on a renamed deployment only, which no measurement
|
|
123
|
-
// taken under the default layout would ever show.
|
|
124
|
-
const nameOfLength = (n: number): string => `${'x'.repeat(n - 3)}.md`;
|
|
125
|
-
for (const length of [9, POINTER_GUIDE_NAME_BUDGET, POINTER_GUIDE_NAME_BUDGET + 1, 120, 255]) {
|
|
126
|
-
const pointer = sharedRulesPointer({ ...DEFAULT_KB_LAYOUT, agentsFile: nameOfLength(length) });
|
|
127
|
-
expect(pointer.length, `a ${length}-character name`).toBeLessThanOrEqual(SHARED_RULES_POINTER_MAX);
|
|
128
|
-
}
|
|
129
|
-
// Up to the budget the file is NAMED, which is the better sentence.
|
|
130
|
-
const named = nameOfLength(POINTER_GUIDE_NAME_BUDGET);
|
|
131
|
-
expect(sharedRulesPointer({ ...DEFAULT_KB_LAYOUT, agentsFile: named })).toContain(named);
|
|
132
|
-
// Past it the guide is named by its role instead — a sentence that still
|
|
133
|
-
// says where to look, rather than a catalog entry the client cuts.
|
|
134
|
-
const tooLong = nameOfLength(POINTER_GUIDE_NAME_BUDGET + 1);
|
|
135
|
-
const fallback = sharedRulesPointer({ ...DEFAULT_KB_LAYOUT, agentsFile: tooLong });
|
|
136
|
-
expect(fallback).not.toContain(tooLong);
|
|
137
|
-
expect(fallback).toBe(` Shared rules for all file tools: see "${SHARED_RULES_SECTION}" in the agent guide at the KB root.`);
|
|
138
|
-
// Either way the section's first rule still names the file, so the name is
|
|
139
|
-
// never actually lost.
|
|
140
|
-
expect(sharedFileRulesSection({ ...DEFAULT_KB_LAYOUT, agentsFile: tooLong })).toContain(tooLong);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
it('points at the section with one short sentence under the default name', () => {
|
|
144
|
-
expect(sharedRulesPointer(DEFAULT_KB_LAYOUT)).toBe(
|
|
145
|
-
' Shared rules for all file tools: see "Working with files" in AGENTS.md.',
|
|
146
|
-
);
|
|
147
|
-
// An unset guide name means the default, as it does everywhere else.
|
|
148
|
-
expect(sharedRulesPointer({ ...DEFAULT_KB_LAYOUT, agentsFile: undefined })).toBe(
|
|
149
|
-
sharedRulesPointer(DEFAULT_KB_LAYOUT),
|
|
150
|
-
);
|
|
151
|
-
});
|
|
152
115
|
});
|
|
153
116
|
|
|
154
|
-
describe('the
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
it('renders the placeholder nowhere else, so other managed files are untouched', async () => {
|
|
166
|
-
const access = await readFile(path.join(defaultKbTemplateDir(), 'access.md'), 'utf8');
|
|
167
|
-
expect(access).not.toContain(SHARED_FILE_RULES_PLACEHOLDER);
|
|
168
|
-
// So rendering it gains no rule text: whatever the layout renderer does to
|
|
169
|
-
// its own tokens, the section is nowhere in the result.
|
|
170
|
-
const rendered = renderTemplateText(access, DEFAULT_KB_LAYOUT);
|
|
171
|
-
expect(rendered).not.toContain(sharedFileRulesSection(DEFAULT_KB_LAYOUT));
|
|
172
|
-
expect(rendered).not.toContain(`## ${SHARED_RULES_SECTION}`);
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
it('leaves no placeholder behind once rendered', async () => {
|
|
176
|
-
const guide = renderTemplateText(await guideTemplate(), DEFAULT_KB_LAYOUT);
|
|
177
|
-
expect(guide).not.toContain('{{');
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it('renders the layout tokens first, then injects the rules — so the rules are never re-rendered', async () => {
|
|
181
|
-
// A layout the two orders DISAGREE on, which an ordinary one does not: the
|
|
182
|
-
// section states the knowledge-base folder's name, so a deployment whose
|
|
183
|
-
// folder is literally called `{{skillsDir}}` puts a layout token inside the
|
|
184
|
-
// rendered section. Injecting first would then rewrite it on the second
|
|
185
|
-
// pass and the guide would name the skills folder where the rule means the
|
|
186
|
-
// knowledge-base one. Pathological on purpose: it is the only kind of input
|
|
187
|
-
// on which the order is observable at all, which is why a test that pins
|
|
188
|
-
// the order has to use one.
|
|
189
|
-
const layout = { ...DEFAULT_KB_LAYOUT, knowledgeBaseDir: '{{skillsDir}}', skillsDir: 'Playbooks' };
|
|
190
|
-
const section = sharedFileRulesSection(layout);
|
|
191
|
-
expect(section).toContain('{{skillsDir}}/');
|
|
192
|
-
|
|
193
|
-
const template = `Skills live in {{skillsDir}}/.\n\n${SHARED_FILE_RULES_PLACEHOLDER}\n`;
|
|
194
|
-
const rendered = renderTemplateText(template, layout);
|
|
195
|
-
// The author's token is rendered, and the section survives byte for byte.
|
|
196
|
-
expect(rendered).toBe(`Skills live in Playbooks/.\n\n${section}\n`);
|
|
197
|
-
|
|
198
|
-
// And the other order really does differ on this input, so the assertion
|
|
199
|
-
// above is load-bearing rather than true of both.
|
|
200
|
-
const injectedFirst = renderKbLayoutPlaceholders(
|
|
201
|
-
template.replaceAll(SHARED_FILE_RULES_PLACEHOLDER, () => section),
|
|
202
|
-
layout,
|
|
203
|
-
);
|
|
204
|
-
expect(injectedFirst).not.toBe(rendered);
|
|
205
|
-
expect(injectedFirst).not.toContain(section);
|
|
206
|
-
expect(injectedFirst).toContain('`Playbooks/`) and git metadata are refused');
|
|
117
|
+
describe('the delete rule for platform files', () => {
|
|
118
|
+
const managedItems = (): string => sharedFileRules(DEFAULT_KB_LAYOUT).find((r) => r.id === 'managed-items')!.body;
|
|
119
|
+
|
|
120
|
+
it('says a nested access.md is deleted by whoever may write it, and the root\'s platform files by nobody', async () => {
|
|
121
|
+
const body = managedItems();
|
|
122
|
+
expect(body).toContain('delete_file deletes a nested `access.md` for whoever may write it');
|
|
123
|
+
expect(body).toContain("its folder then follows its parent's rules");
|
|
124
|
+
expect(body).toContain("the repository root's `access.md` and `roles.yaml` are deleted by nobody");
|
|
125
|
+
// The sentence the refusal actually carries, as the tools and the app say it.
|
|
126
|
+
expect(body).toContain("\"<name> is the repository's own file and cannot be deleted.\"");
|
|
127
|
+
expect(await composeAgentGuide(DEFAULT_KB_LAYOUT)).toContain(body);
|
|
207
128
|
});
|
|
208
129
|
});
|
|
209
130
|
|
|
@@ -28,8 +28,9 @@ export function createAgentInstructionsRoutes(
|
|
|
28
28
|
readPreamble: AgentPreambleReader,
|
|
29
29
|
/**
|
|
30
30
|
* The layout in effect, read per request — the shared file rules name the
|
|
31
|
-
*
|
|
32
|
-
* Optional so a construction with no layout in
|
|
31
|
+
* guide by the name a deployment saved for it, which the setup save may
|
|
32
|
+
* change without a restart. Optional so a construction with no layout in
|
|
33
|
+
* hand gets `AGENTS.md`.
|
|
33
34
|
*/
|
|
34
35
|
kbLayout?: () => KbLayout,
|
|
35
36
|
): express.Router {
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
stripHtmlComments,
|
|
31
31
|
type KbLayout,
|
|
32
32
|
} from '@bevel-software/platform-shared';
|
|
33
|
+
import { splitCallLine } from '@bevel-software/platform-mcp-core';
|
|
33
34
|
import { sharedFileRulesSection } from './shared-file-rules.js';
|
|
34
35
|
|
|
35
36
|
export { PREAMBLE_CAP, PREAMBLE_FILE, TOOL_PREFIX_CAP };
|
|
@@ -48,7 +49,13 @@ export const PLATFORM_HEADER =
|
|
|
48
49
|
'Before answering a question about the organisation, its people, customers, products, processes, projects or internal terms, ' +
|
|
49
50
|
'search the knowledge base: call `start_session` once, then `grep` for the key terms, `list_files` to orient, and `read_file` what matches. ' +
|
|
50
51
|
'Prefer what you find there over memory or the web, and say so when the knowledge base is silent on something the organisation should have documented. ' +
|
|
51
|
-
'Skills are available as prompts and through `list_skills` and `get_skill`.'
|
|
52
|
+
'Skills are available as prompts and through `list_skills` and `get_skill`. ' +
|
|
53
|
+
// There is no one calling shape to state: the knowledge-base tools take
|
|
54
|
+
// their arguments under `body`, a tool that calls another service takes them
|
|
55
|
+
// flat, and an agent told one rule for all of them sends a GET with a body.
|
|
56
|
+
// The per-tool `Call:` line is generated from each tool's own input schema,
|
|
57
|
+
// so pointing at it is both shorter and always right.
|
|
58
|
+
'Tools do not share one calling shape: call each tool exactly as the `Call:` line at the top of its description shows.';
|
|
52
59
|
|
|
53
60
|
/**
|
|
54
61
|
* The fixed first line of the tool prefix. It always leads, so an admin's
|
|
@@ -64,8 +71,10 @@ export const TOOL_PREFIX_LINE = "This organisation's knowledge base. Search it b
|
|
|
64
71
|
* `header` field carries and what the card shows as fixed and not editable;
|
|
65
72
|
* the admin's preamble follows it.
|
|
66
73
|
*
|
|
67
|
-
* A FUNCTION of the layout, because the shared rules name the
|
|
68
|
-
*
|
|
74
|
+
* A FUNCTION of the layout, because the shared rules name the platform files
|
|
75
|
+
* by the root names a deployment chose (`Skills/`, `Plugins/`), which are
|
|
76
|
+
* deployment settings. The guide's name is not one of them: it is `AGENTS.md`
|
|
77
|
+
* everywhere.
|
|
69
78
|
*/
|
|
70
79
|
export function platformInstructions(layout: KbLayout): string {
|
|
71
80
|
return `${PLATFORM_HEADER}\n\n${sharedFileRulesSection(layout)}`;
|
|
@@ -119,10 +128,11 @@ export interface ComposedAgentInstructions {
|
|
|
119
128
|
* unterminated `<!--` strips everything after it, so the most likely editing
|
|
120
129
|
* slip withholds text rather than leaking it.
|
|
121
130
|
*
|
|
122
|
-
* `layout` decides
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
131
|
+
* `layout` decides the root names the shared rules spell (`Skills/`,
|
|
132
|
+
* `Plugins/`, the knowledge folder) and defaults to the standard ones — a
|
|
133
|
+
* caller with no layout in hand (a test, a surface that predates the setting)
|
|
134
|
+
* gets the defaults. The guide's name is not among them: it is `AGENTS.md` on
|
|
135
|
+
* every deployment.
|
|
126
136
|
*/
|
|
127
137
|
export function composeAgentInstructions(
|
|
128
138
|
preamble: string | null,
|
|
@@ -164,9 +174,17 @@ export function composeAgentInstructions(
|
|
|
164
174
|
* A tool description with the prefix ahead of it: the prefix, a blank line,
|
|
165
175
|
* then the original. Purpose line first, because claude.ai cuts descriptions
|
|
166
176
|
* near 500 characters.
|
|
177
|
+
*
|
|
178
|
+
* Except for the `Call:` line, which stays the very first line whatever else
|
|
179
|
+
* is prepended: it is how an agent learns the shape this tool's arguments take,
|
|
180
|
+
* and a description that opens with the purpose prefix instead would bury the
|
|
181
|
+
* one line the refusal for a wrong call points back to.
|
|
167
182
|
*/
|
|
168
183
|
export function prefixToolDescription(toolPrefix: string, description: string | undefined): string {
|
|
169
|
-
|
|
184
|
+
if (!description) return toolPrefix;
|
|
185
|
+
const { call, rest } = splitCallLine(description);
|
|
186
|
+
if (call === null) return `${toolPrefix}\n\n${description}`;
|
|
187
|
+
return rest === '' ? `${call}\n\n${toolPrefix}` : `${call}\n\n${toolPrefix}\n\n${rest}`;
|
|
170
188
|
}
|
|
171
189
|
|
|
172
190
|
/** An ATX heading line: `#` to `######`, then a space or the end. */
|
|
@@ -13,13 +13,10 @@ export {
|
|
|
13
13
|
type ComposedAgentInstructions,
|
|
14
14
|
} from './compose.js';
|
|
15
15
|
export {
|
|
16
|
-
POINTER_GUIDE_NAME_BUDGET,
|
|
17
16
|
SHARED_FILE_RULES_CAP,
|
|
18
|
-
SHARED_RULES_POINTER_MAX,
|
|
19
17
|
SHARED_RULES_SECTION,
|
|
20
18
|
sharedFileRules,
|
|
21
19
|
sharedFileRulesSection,
|
|
22
|
-
sharedRulesPointer,
|
|
23
20
|
type SharedFileRule,
|
|
24
21
|
} from './shared-file-rules.js';
|
|
25
22
|
export { readAgentPreamble, type AgentPreambleReader, type PreambleWorkspace } from './read-preamble.js';
|
|
@@ -14,24 +14,24 @@
|
|
|
14
14
|
*
|
|
15
15
|
* - the MCP `instructions` of the initialize handshake (see `compose.ts`),
|
|
16
16
|
* which Claude Code, Claude Desktop and Cursor put in the system prompt;
|
|
17
|
-
* - the platform
|
|
18
|
-
*
|
|
19
|
-
* on the web, the Agent SDK and Cline drop `instructions`, and a
|
|
20
|
-
* agent is told to read before its first action is always
|
|
17
|
+
* - the platform's agent guide, which `get_agent_guide` returns and a
|
|
18
|
+
* `read_file` of the guide's name serves (see `modules/agent-guide`) —
|
|
19
|
+
* claude.ai on the web, the Agent SDK and Cline drop `instructions`, and a
|
|
20
|
+
* guide the agent is told to read before its first action is always
|
|
21
|
+
* available.
|
|
21
22
|
*
|
|
22
23
|
* Both places get the SAME string, from {@link sharedFileRulesSection} — not
|
|
23
24
|
* two hand-mirrored copies. A rule written twice is a rule that drifts, and a
|
|
24
25
|
* drifted rule is worse than a repeated one, because the agent cannot tell
|
|
25
|
-
* which copy is current. Each description
|
|
26
|
-
*
|
|
26
|
+
* which copy is current. Each description opens instead with the one
|
|
27
|
+
* sentence sending the agent to the guide (`tool-registry/guide-first.ts`).
|
|
27
28
|
*
|
|
28
|
-
* Pure text, a function of the layout only: the guide's
|
|
29
|
-
* deployment
|
|
29
|
+
* Pure text, a function of the layout only: the guide's name is a deployment
|
|
30
|
+
* setting (an alias a deployment chose before the guide left the disk), so
|
|
31
|
+
* nothing here may snapshot `AGENTS.md`.
|
|
30
32
|
*/
|
|
31
33
|
|
|
32
34
|
import {
|
|
33
|
-
DEFAULT_KB_LAYOUT,
|
|
34
|
-
agentsFileOf,
|
|
35
35
|
LEGACY_AGENTS_FILE,
|
|
36
36
|
platformFilesByDepth,
|
|
37
37
|
type KbLayout,
|
|
@@ -43,9 +43,9 @@ export const SHARED_RULES_SECTION = 'Working with files';
|
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* The guide's name on a knowledge base seeded before it was renamed to
|
|
46
|
-
* {@link LEGACY_AGENTS_FILE}
|
|
47
|
-
*
|
|
48
|
-
*
|
|
46
|
+
* {@link LEGACY_AGENTS_FILE}, back when the guide was a file. The platform's
|
|
47
|
+
* own copy is taken out at startup now (see template-files.step.ts); one that
|
|
48
|
+
* stays is a file the organisation edited, so it is theirs and still named.
|
|
49
49
|
*/
|
|
50
50
|
const PRE_RENAME_AGENTS_FILE = 'CLAUDE.md';
|
|
51
51
|
|
|
@@ -84,12 +84,11 @@ export interface SharedFileRule {
|
|
|
84
84
|
* ones that said "this tool" or "this call" name the tools instead.
|
|
85
85
|
*/
|
|
86
86
|
export function sharedFileRules(layout: KbLayout): readonly SharedFileRule[] {
|
|
87
|
-
const agentsFile = agentsFileOf(layout);
|
|
88
87
|
return [
|
|
89
88
|
{
|
|
90
89
|
id: 'agent-guide',
|
|
91
90
|
heading: "This knowledge base's own conventions",
|
|
92
|
-
body: conventionsRule(
|
|
91
|
+
body: conventionsRule(),
|
|
93
92
|
},
|
|
94
93
|
{
|
|
95
94
|
id: 'content-kinds',
|
|
@@ -146,15 +145,15 @@ export function sharedFileRules(layout: KbLayout): readonly SharedFileRule[] {
|
|
|
146
145
|
// that take content as a JSON string names the route in one sentence of
|
|
147
146
|
// its own; WHY a file should go that way, and how, is here.
|
|
148
147
|
id: 'upload-route',
|
|
149
|
-
heading: 'Large, escape-heavy and binary content
|
|
148
|
+
heading: 'Large, escape-heavy and binary content: upload in, download out',
|
|
150
149
|
body:
|
|
151
|
-
'write_file, write_files and edit_file take content as a JSON string you
|
|
152
|
-
'
|
|
153
|
-
'
|
|
154
|
-
'
|
|
155
|
-
'
|
|
156
|
-
'
|
|
157
|
-
'
|
|
150
|
+
'write_file, write_files and edit_file take content as a JSON string you type out in full, so a long file ' +
|
|
151
|
+
'is cut off mid-answer, a file full of backslashes or `\\u` escapes fails to parse as a parameter, and an ' +
|
|
152
|
+
'image, a PDF or a zip cannot be sent at all. For those, call `request_file_upload`, POST the file (or one ' +
|
|
153
|
+
'zip of many) with any HTTP client (`curl -X POST --data-binary @<file> ' +
|
|
154
|
+
'"<uploadUrl>?filename=<name>"`), then `apply_file_upload` lands it in one commit. To take copies OUT, ' +
|
|
155
|
+
'`request_file_download` answers a one-time link per file and a zip per folder (`curl -o <name> ' +
|
|
156
|
+
'"<downloadUrl>"`). Either way no bytes pass through the conversation.',
|
|
158
157
|
},
|
|
159
158
|
{
|
|
160
159
|
id: 'dry-run-confirm',
|
|
@@ -164,22 +163,22 @@ export function sharedFileRules(layout: KbLayout): readonly SharedFileRule[] {
|
|
|
164
163
|
'what the call would touch, `allowed`, and `reason` when it may not run. A non-empty folder is deleted, and a ' +
|
|
165
164
|
'move that changes your access runs, only with `confirm: true`; without it the call changes nothing and ' +
|
|
166
165
|
'returns the same impact with `confirmationRequired: true`. Do NOT set `confirm: true` on your first call — ' +
|
|
167
|
-
'dry-run, check the impact, then confirm. delete_file takes neither: it
|
|
168
|
-
'
|
|
166
|
+
'dry-run, check the impact, then confirm. delete_file takes neither: check it first with file_stat ' +
|
|
167
|
+
'(`deletable`) if you are unsure. delete_branch has its own `dryRun`.',
|
|
169
168
|
},
|
|
170
169
|
{
|
|
171
170
|
id: 'managed-items',
|
|
172
171
|
heading: 'What these tools never move or delete',
|
|
173
172
|
body:
|
|
174
|
-
`A platform file (${platformFileList(layout)}) is
|
|
175
|
-
'
|
|
176
|
-
|
|
177
|
-
'
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
'
|
|
181
|
-
'able to write
|
|
182
|
-
'file_stat reports `managed`, `movable` and `deletable`
|
|
173
|
+
`A platform file (${platformFileList(layout)}) is never moved: "<name> is a platform file and stays in its folder." ` +
|
|
174
|
+
'A folder moved or deleted takes its own along, in one change. delete_file deletes a nested `access.md` for ' +
|
|
175
|
+
"whoever may write it (its folder then follows its parent's rules) and refuses `.bevelignore`; the repository " +
|
|
176
|
+
"root's `access.md` and `roles.yaml` are deleted by nobody: \"<name> is the repository's own file and cannot be " +
|
|
177
|
+
'deleted." A platform folder (the root, or a reserved one like ' +
|
|
178
|
+
`\`${layout.knowledgeBaseDir}/\`), git metadata, and making a platform file or folder at a destination are ` +
|
|
179
|
+
'refused; so is a path that is or crosses a symlink: links are never followed or removed. On a protected ' +
|
|
180
|
+
'branch you must be able to write all a call touches — for a folder, every file under it, at its old and new ' +
|
|
181
|
+
'path. file_stat reports `managed`, `movable` and `deletable` up front.',
|
|
183
182
|
},
|
|
184
183
|
{
|
|
185
184
|
id: 'refused-for-permissions',
|
|
@@ -204,15 +203,14 @@ export function sharedFileRules(layout: KbLayout): readonly SharedFileRule[] {
|
|
|
204
203
|
|
|
205
204
|
/**
|
|
206
205
|
* The platform files as the rules list them — from the one function that knows
|
|
207
|
-
* which they are, so the list cannot drift from what actually refuses a move
|
|
208
|
-
* and the guide appears under this deployment's name for it.
|
|
206
|
+
* which they are, so the list cannot drift from what actually refuses a move.
|
|
209
207
|
*
|
|
210
208
|
* WITH THE DEPTH each name counts at, because the name alone is half the rule:
|
|
211
209
|
* `access.md` governs the folder it sits in and `.bevelignore` layers, so both
|
|
212
|
-
* are platform files wherever they are; `roles.yaml`
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
210
|
+
* are platform files wherever they are; `roles.yaml` is read from the
|
|
211
|
+
* repository root only, so a nested copy is ordinary content that moves and
|
|
212
|
+
* deletes like any page. An agent told only the names refuses a rename it may
|
|
213
|
+
* make, and trusts a nested `access.md` it may not.
|
|
216
214
|
*/
|
|
217
215
|
function platformFileList(layout: KbLayout): string {
|
|
218
216
|
const { anyDepth, rootOnly } = platformFilesByDepth(layout);
|
|
@@ -221,30 +219,21 @@ function platformFileList(layout: KbLayout): string {
|
|
|
221
219
|
}
|
|
222
220
|
|
|
223
221
|
/**
|
|
224
|
-
* The conventions reminder —
|
|
225
|
-
*
|
|
222
|
+
* The conventions reminder — where the platform's guide is, that the
|
|
223
|
+
* organisation's own conventions file comes with it, and to read both first.
|
|
226
224
|
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
* checkout. Under the default name the wording collapses to the one file it
|
|
233
|
-
* has always named.
|
|
225
|
+
* The guide is read by name at the repository root, where coding agents look
|
|
226
|
+
* for an `AGENTS.md` by convention, and `get_agent_guide` returns it alone.
|
|
227
|
+
* One name on every deployment, so the rule takes no layout. `CLAUDE.md` is
|
|
228
|
+
* named as a fallback because a knowledge base seeded before the rename may
|
|
229
|
+
* still carry one its people edited.
|
|
234
230
|
*/
|
|
235
|
-
function conventionsRule(
|
|
236
|
-
if (agentsFile === LEGACY_AGENTS_FILE) {
|
|
237
|
-
return (
|
|
238
|
-
`Before your first read or change in a workspace, read \`${LEGACY_AGENTS_FILE}\` at the KB root — or ` +
|
|
239
|
-
`\`${PRE_RENAME_AGENTS_FILE}\` on a knowledge base seeded before it was renamed — if either exists: it holds ` +
|
|
240
|
-
"the author's conventions for this knowledge base, and you should follow them."
|
|
241
|
-
);
|
|
242
|
-
}
|
|
231
|
+
function conventionsRule(): string {
|
|
243
232
|
return (
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
233
|
+
"Before your first read or change in a workspace, call `get_agent_guide` and read the platform's guide " +
|
|
234
|
+
`(whole, or one section). read_file on \`${LEGACY_AGENTS_FILE}\` at the KB root answers with the same ` +
|
|
235
|
+
"guide, after the organisation's own conventions file of that name when it has one: follow both. A " +
|
|
236
|
+
`\`${PRE_RENAME_AGENTS_FILE}\` at the KB root is the organisation's own too; read it if it exists.`
|
|
248
237
|
);
|
|
249
238
|
}
|
|
250
239
|
|
|
@@ -260,55 +249,4 @@ export function sharedFileRulesSection(layout: KbLayout): string {
|
|
|
260
249
|
return `## ${SHARED_RULES_SECTION}\n\n${body}`;
|
|
261
250
|
}
|
|
262
251
|
|
|
263
|
-
/**
|
|
264
|
-
* The longest guide file name the pointer sentence spells out. Beyond this it
|
|
265
|
-
* names the guide by its ROLE instead (see {@link sharedRulesPointer}).
|
|
266
|
-
*
|
|
267
|
-
* There has to be a bound somewhere, because the pointer rides on every file
|
|
268
|
-
* tool and a file name is not a fixed cost: `validateFilename` allows a name
|
|
269
|
-
* of up to 255 bytes, so an unbounded pointer could reach 318 characters and
|
|
270
|
-
* push `file_stat` to 1,428 — over the description cap, recreating on a
|
|
271
|
-
* renamed deployment exactly the truncation this module exists to prevent, and
|
|
272
|
-
* invisibly, because every measurement is taken under the default layout.
|
|
273
|
-
*
|
|
274
|
-
* 40 is well past any name a deployment plausibly picks
|
|
275
|
-
* (`ENGINEERING-AGENT-CONVENTIONS.md` is 32) and the fallback below is only
|
|
276
|
-
* reachable past it.
|
|
277
|
-
*/
|
|
278
|
-
export const POINTER_GUIDE_NAME_BUDGET = 40;
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* The one sentence a tool description ends with, in place of the paragraphs it
|
|
282
|
-
* used to carry. Short on purpose: it costs every description the same ~100
|
|
283
|
-
* characters at worst, and its whole job is to name the section and the file
|
|
284
|
-
* to read.
|
|
285
|
-
*
|
|
286
|
-
* BOUNDED BY CONSTRUCTION, which is what lets the description cap mean
|
|
287
|
-
* something on a deployment that renamed its guide: a name within
|
|
288
|
-
* {@link POINTER_GUIDE_NAME_BUDGET} is spelled out, and a longer one gets the
|
|
289
|
-
* generic wording. Naming the file is the better sentence and wins whenever it
|
|
290
|
-
* fits; a name past the budget is pathological, and there the choice is between
|
|
291
|
-
* a sentence that says where to look and a catalog entry the client cuts. The
|
|
292
|
-
* guide's own name is still in the section's first rule either way.
|
|
293
|
-
*
|
|
294
|
-
* An absent layout means the default one, as it does in
|
|
295
|
-
* `composeAgentInstructions`: a caller reading the layout from configuration
|
|
296
|
-
* gets `undefined` when none is set, and the pointer must still name a file.
|
|
297
|
-
*/
|
|
298
|
-
export function sharedRulesPointer(layout: KbLayout = DEFAULT_KB_LAYOUT): string {
|
|
299
|
-
const agentsFile = agentsFileOf(layout);
|
|
300
|
-
const where =
|
|
301
|
-
agentsFile.length <= POINTER_GUIDE_NAME_BUDGET ? agentsFile : 'the agent guide at the KB root';
|
|
302
|
-
return ` Shared rules for all file tools: see "${SHARED_RULES_SECTION}" in ${where}.`;
|
|
303
|
-
}
|
|
304
252
|
|
|
305
|
-
/**
|
|
306
|
-
* The most the pointer can ever cost a description, over every layout. What the
|
|
307
|
-
* description cap is measured against, the way the tool prefix is measured at
|
|
308
|
-
* ITS cap rather than at whatever the current admin wrote: a description that
|
|
309
|
-
* only fits beside the short default guide name does not really fit.
|
|
310
|
-
*/
|
|
311
|
-
export const SHARED_RULES_POINTER_MAX = Math.max(
|
|
312
|
-
sharedRulesPointer({ ...DEFAULT_KB_LAYOUT, agentsFile: `${'x'.repeat(POINTER_GUIDE_NAME_BUDGET - 3)}.md` }).length,
|
|
313
|
-
sharedRulesPointer({ ...DEFAULT_KB_LAYOUT, agentsFile: `${'x'.repeat(POINTER_GUIDE_NAME_BUDGET + 10)}.md` }).length,
|
|
314
|
-
);
|