@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
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
## Access control
|
|
2
|
+
|
|
3
|
+
Access to any path — reading it as much as writing it — is governed by
|
|
4
|
+
`roles.yaml` (who has which role), `groups.yaml` (who is in which group) and
|
|
5
|
+
`access.md` files (who may do what, where).
|
|
6
|
+
|
|
7
|
+
- **Roles** in `roles.yaml` map a role name to a list of members: emails, and
|
|
8
|
+
`group:<Name>` entries that give the role to a whole group (see *Giving a
|
|
9
|
+
role to a group* below). Role names are
|
|
10
|
+
case- and whitespace-insensitive (`Admin` = `admin` = `ADMIN`; `Product Team`
|
|
11
|
+
= `product team`). The reserved names `deny` and `everyone` cannot be used, and neither can
|
|
12
|
+
names starting with `role/` or `plugin/` — those spellings are tokens in
|
|
13
|
+
access entries (below). One exception to the file's authority: the
|
|
14
|
+
**deployment admin** — the address the server configuration sets as
|
|
15
|
+
`ADMIN_EMAIL` — is **always an Admin**, whether or not `roles.yaml` lists
|
|
16
|
+
it, and taking it out of the file does not change that. It is the rescue
|
|
17
|
+
path for a `roles.yaml` that has lost its last Admin. The App roles page
|
|
18
|
+
shows that account under Admin as a fixed member that cannot be added or
|
|
19
|
+
removed there; every other Admin membership is exactly what the file says,
|
|
20
|
+
and removing one takes effect on that person's next request.
|
|
21
|
+
- **Plugins are grantable principals.** `plugin/<name>/read`,
|
|
22
|
+
`plugin/<name>/write` and `plugin/<name>/owner` in any access file mean
|
|
23
|
+
everyone who currently holds that verb on the plugin whose manifest `name`
|
|
24
|
+
is `<name>`, derived live from the plugin's own `access.md`. Any spelling
|
|
25
|
+
folds to the identifier (`plugin/GTM/read` and `plugin/gtm/read` are one
|
|
26
|
+
principal). This is how a shared skill is made visible to a plugin's
|
|
27
|
+
members: `read: plugin/gtm/read` on the skill's folder.
|
|
28
|
+
Adding or removing someone on the plugin changes what they can read
|
|
29
|
+
everywhere the token is granted, with no copying.
|
|
30
|
+
- **Access rules** live in `access.md` files, which carry **two blocks with two
|
|
31
|
+
scopes**: the BODY (below the closing `---`) declares the rules for the
|
|
32
|
+
folder the file sits in, and the FRONTMATTER declares who may read and
|
|
33
|
+
write that `access.md` itself. Each block names verbs (`read`, `write`,
|
|
34
|
+
`download`, `owner`) whose entries are either grants (a bare principal) or
|
|
35
|
+
denials (the lowercase word `deny`, a space, then the principal).
|
|
36
|
+
Capitalised forms like `Deny` are *not* triggers; they are treated as part
|
|
37
|
+
of a name.
|
|
38
|
+
- **Principals** are a role name from `roles.yaml`, a group name from
|
|
39
|
+
`groups.yaml`, a person as `Name <email>`, a plugin token (above), or
|
|
40
|
+
**`everyone`** — the built-in org-wide principal: every signed-in person and
|
|
41
|
+
their agents. `read: everyone` in a folder's BODY opens that folder to the
|
|
42
|
+
whole organisation; it is how an organisation-wide skill or plugin is
|
|
43
|
+
shared. The same line in a file's FRONTMATTER only makes that one file
|
|
44
|
+
visible — a plugin's `access.md` ships with `read: everyone` in its
|
|
45
|
+
frontmatter so the plugin can be found and joined, and that admits nobody
|
|
46
|
+
to the plugin itself. A person's personal plugin
|
|
47
|
+
(`{{pluginsDir}}/personal-<id>/`) grants its owner access and denies
|
|
48
|
+
`everyone` outright, so opening a parent folder never opens it.
|
|
49
|
+
When a group and a role share a name, the bare name means the GROUP;
|
|
50
|
+
`role/<Name>` (for example `deny role/Reviewer`) always means the role.
|
|
51
|
+
- **Keep an `access.md` body pure YAML**, with any explanation in `#` comments.
|
|
52
|
+
A body that does not parse as YAML naming at least one verb is read in the
|
|
53
|
+
older format instead, where the FRONTMATTER carried the folder's rules — so a
|
|
54
|
+
stray line of prose silently changes which block governs the folder.
|
|
55
|
+
- **The verbs nest.** `owner` sits over `write` and `download`; `write` and
|
|
56
|
+
`download` each sit over `read` — anyone who may edit a node, or save a copy
|
|
57
|
+
of it, may also view it. `write` and `download` say nothing about each other.
|
|
58
|
+
The nesting is GRANT-ONLY: a grant of a higher verb confers the lower ones,
|
|
59
|
+
but `deny write` or `deny download` says nothing about `read` and never
|
|
60
|
+
strips a separate read grant. So `download: Ana <ana@x.io>` alone lets Ana
|
|
61
|
+
open the node as well as download it, and a `deny download` beside an
|
|
62
|
+
inherited read leaves her able to open it but not save it.
|
|
63
|
+
- **You can only change what you can read.** Nothing is created, changed,
|
|
64
|
+
moved into or removed from a place the caller cannot read — on every
|
|
65
|
+
branch, drafts included, whatever `write:` rules say. A write tool refused
|
|
66
|
+
for this says so (`write-denied`, naming the unreadable folder), and
|
|
67
|
+
proposing is not offered either: a proposal into a folder its author cannot
|
|
68
|
+
see would vanish from them the moment it landed. Two exceptions. A NEW
|
|
69
|
+
FOLDER directly under `{{knowledgeBaseDir}}/`, `{{skillsDir}}/` or
|
|
70
|
+
`{{pluginsDir}}/`: anyone may start one, whatever the root's rules grant
|
|
71
|
+
them, and the new folder's `access.md` is seeded with the creator's own
|
|
72
|
+
`read:` grant so what they put there is visible to them (a loose FILE
|
|
73
|
+
directly at a root has no folder to carry that grant and is not excepted).
|
|
74
|
+
And an Admin — or the deployment owner — may change the files directly in
|
|
75
|
+
the repository root (`roles.yaml`, `access.md`, `groups.yaml`, …) even when
|
|
76
|
+
the root grants read to nobody: the same rescue the write
|
|
77
|
+
floor gives them, so a tree whose root rules lock everyone out stays
|
|
78
|
+
repairable from inside the app. That rescue stops at the root; a subfolder
|
|
79
|
+
an admin cannot read is closed to them like to anyone else.
|
|
80
|
+
- **Resolution** walks repo root → file directory, accumulating per-principal
|
|
81
|
+
state. User-level entries trump role-level entries. A role denial removes
|
|
82
|
+
only that role's contribution; it does not undo grants from other roles.
|
|
83
|
+
- **`roles.yaml` is editable only by Admin** — hard-coded in the resolver,
|
|
84
|
+
never overridable by an `access.md`.
|
|
85
|
+
- **`access.md` files are picked up at any depth**, so a folder can tighten or
|
|
86
|
+
widen what it inherited from its parent.
|
|
87
|
+
- **Per-file rules exist for Markdown notes and `.tool` definitions.** A note
|
|
88
|
+
(`.md`, lowercase) may name verbs in its own frontmatter, and those rules
|
|
89
|
+
apply to that one note; a `.tool` definition keeps the access verbs in its
|
|
90
|
+
own YAML the same way; a distribution may register further file kinds
|
|
91
|
+
that carry their own rules. Any other file (a PDF, a presentation, a
|
|
92
|
+
spreadsheet, an image, any binary, a `.markdown` or `.MD` file, or binary
|
|
93
|
+
content saved as `.md`) takes its folder's rules: sharing it on its own is refused with
|
|
94
|
+
`folder-governs-access`, naming the folder. To change who
|
|
95
|
+
can open such a file, change its folder's `access.md`, or move the file to a
|
|
96
|
+
folder whose rules fit.
|
|
97
|
+
|
|
98
|
+
Rules are enforced at runtime; a malformed `roles.yaml` or `access.md` surfaces
|
|
99
|
+
when access is resolved.
|
|
100
|
+
|
|
101
|
+
### Roles are pre-set — a "new role" is usually a group
|
|
102
|
+
|
|
103
|
+
**What a role is.** A role in `roles.yaml` is an app role: a capability the
|
|
104
|
+
platform defines and acts on (`Admin` is one), listed with the people who hold
|
|
105
|
+
it. The set of roles is pre-set by the platform. A role is not a way to name a
|
|
106
|
+
team.
|
|
107
|
+
|
|
108
|
+
**Agents never create roles.** Add people to a role that already exists, or
|
|
109
|
+
remove them, and nothing more: never add a role name to `roles.yaml`, and never
|
|
110
|
+
rename one — a rename is a delete plus a create. Such a write is refused with a
|
|
111
|
+
422 that names the role and says: app roles are pre-set — add people to
|
|
112
|
+
existing roles, and use a GROUP for a task- or team-scoped set of people.
|
|
113
|
+
Relay that refusal to your user as it stands; do not look for another way to
|
|
114
|
+
write the file.
|
|
115
|
+
|
|
116
|
+
**Is it really a group?** When someone asks for a "new role", it almost always
|
|
117
|
+
is. It is a group when any of these hold:
|
|
118
|
+
|
|
119
|
+
- the name says who the people are — a team, a project, a customer, a
|
|
120
|
+
committee — rather than a capability the platform already has;
|
|
121
|
+
- it would change or disappear when the project ends or the team reshuffles;
|
|
122
|
+
- its purpose is to give those people access to some folders or files.
|
|
123
|
+
|
|
124
|
+
A request that matches a role that already exists is membership, not a new
|
|
125
|
+
role.
|
|
126
|
+
|
|
127
|
+
**What to do instead.**
|
|
128
|
+
|
|
129
|
+
1. If an existing role already carries the capability, add the people to it.
|
|
130
|
+
2. Otherwise make it a group: add or extend the group in `groups.yaml` (or
|
|
131
|
+
point your user at the app's Groups page), then grant the group in the
|
|
132
|
+
`access.md` of the folders it should reach.
|
|
133
|
+
3. If your user still needs a role the platform does not have, that is not an
|
|
134
|
+
edit you can make — say so, and leave the decision to an admin.
|
|
135
|
+
|
|
136
|
+
### Giving a role to a group
|
|
137
|
+
|
|
138
|
+
A role's member list takes a group as well as individual emails. Write the
|
|
139
|
+
entry as `- group:<Name>`, where `<Name>` is a group in the active group
|
|
140
|
+
source — `synced-groups.yaml` when the deployment syncs groups from an
|
|
141
|
+
identity provider, `groups.yaml` otherwise. Here a `Reviewer` role the
|
|
142
|
+
deployment already has goes to a whole group:
|
|
143
|
+
|
|
144
|
+
```yaml
|
|
145
|
+
roles:
|
|
146
|
+
Admin:
|
|
147
|
+
- dana@example.com
|
|
148
|
+
Reviewer:
|
|
149
|
+
- lee@example.com
|
|
150
|
+
- group:Platform Team
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
- **Matching.** The name is matched case- and whitespace-insensitively against
|
|
154
|
+
the active group source, like role names: `group:platform team` and
|
|
155
|
+
`group:Platform Team` are the same entry as `group:Platform Team`.
|
|
156
|
+
- **Unknown groups are refused.** An entry naming a group the active source
|
|
157
|
+
does not declare is a validation error: the write is refused with a 422
|
|
158
|
+
that names the entry and its role (`'- group:Platfrom Team' under role
|
|
159
|
+
'Reviewer'`), and nothing is saved. Create the group first, or fix the name.
|
|
160
|
+
- **A group under `Admin` makes every member a full admin** — including anyone
|
|
161
|
+
added to the group later, and including the right to edit `roles.yaml`
|
|
162
|
+
itself. Only make that edit when your user is an Admin and explicitly asks
|
|
163
|
+
for exactly that, and say so in the commit summary; for anyone else, tell
|
|
164
|
+
them what it would mean and who can do it (below). `Admin` must also always keep at least one
|
|
165
|
+
direct email member; a group entry alone is not enough, so a broken
|
|
166
|
+
directory can never leave the deployment without an admin.
|
|
167
|
+
- **With direct emails.** Group entries and emails add up: the role's members
|
|
168
|
+
are everyone listed by email plus everyone currently in each listed group.
|
|
169
|
+
A person in both is simply a member; adding or removing someone from the
|
|
170
|
+
group changes the role with no edit to `roles.yaml`.
|
|
171
|
+
- **With denials.** Group members hold the role's grants exactly as if they
|
|
172
|
+
were listed by email. A denial of the role in an `access.md`
|
|
173
|
+
(`deny role/Reviewer`) therefore removes the role's contribution for
|
|
174
|
+
everyone in the group, as it does for the emails. Write the `role/` form:
|
|
175
|
+
a bare `deny Reviewer` would deny a group named `Reviewer` instead, if one
|
|
176
|
+
exists. The nearest `access.md` that says
|
|
177
|
+
anything about the person decides: a person granted by name
|
|
178
|
+
(`Name <email>`) in the SAME `access.md` as the denial keeps that access,
|
|
179
|
+
because within one file a person's own entry beats a role entry. A grant by
|
|
180
|
+
name in a folder further up does not survive a role denial closer to the
|
|
181
|
+
file.
|
|
182
|
+
|
|
183
|
+
**Only an Admin changes `roles.yaml`, and only on the default branch.** A
|
|
184
|
+
change request cannot carry the edit: when a request is merged, `roles.yaml`
|
|
185
|
+
is restored to what the default branch has, so a role edit drafted on a
|
|
186
|
+
branch is dropped at the merge without a word. Do not propose one. If your
|
|
187
|
+
user is an Admin, `edit_file` the file on the default branch directly — for
|
|
188
|
+
example, to give the Reviewer role to a group, add the entry under the
|
|
189
|
+
existing role:
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
roles:
|
|
193
|
+
Admin:
|
|
194
|
+
- dana@example.com
|
|
195
|
+
Reviewer:
|
|
196
|
+
- lee@example.com
|
|
197
|
+
- group:Platform Team # added
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
If your user is not an Admin, tell them who is (the `Admin` entries in
|
|
201
|
+
`roles.yaml`) and that the change is made in the app's Roles page or by an
|
|
202
|
+
admin editing the file; do not open a change request for it.
|
|
203
|
+
|
|
204
|
+
### Direct writes vs change requests
|
|
205
|
+
|
|
206
|
+
File-level write access decides how a change lands on the default branch:
|
|
207
|
+
|
|
208
|
+
- A user — or an agent acting as that user — whose access resolution grants
|
|
209
|
+
**write or owner on every file the change touches** may commit **directly**
|
|
210
|
+
to the default branch.
|
|
211
|
+
- Without that access, the change goes through a **branch + change request**,
|
|
212
|
+
approved by an owner / write-access holder of the affected files — every
|
|
213
|
+
affected file with an eligible approver needs that approval, whatever its
|
|
214
|
+
type (notes, binary files, files without an extension).
|
|
215
|
+
- Agents carry exactly their user's access, never more. Before writing to the
|
|
216
|
+
default branch, **ask the user** whether to write directly or go through the
|
|
217
|
+
review flow — and prefer a change request when in doubt, when the change is
|
|
218
|
+
large, or when it touches content the user does not own.
|
|
219
|
+
|
|
220
|
+
### An agent proposes and syncs; a person merges
|
|
221
|
+
|
|
222
|
+
- **Propose** with `open_change_request`, then give the user the request's
|
|
223
|
+
`url`. Reviewing, approving and merging a change request happen in the app,
|
|
224
|
+
by a person — no agent tool approves a file, bypasses approval, or merges a
|
|
225
|
+
request. `merge_change_request` no longer exists.
|
|
226
|
+
- **Sync** a draft with `merge_branch`, `source` = the branch the request
|
|
227
|
+
targets, `target` = the draft. This is allowed while the draft's request is
|
|
228
|
+
open, and is how you bring it up to date or surface conflicts to resolve on
|
|
229
|
+
the draft.
|
|
230
|
+
- `merge_branch` refuses to merge a draft into the branch its open change
|
|
231
|
+
request targets — it names the request; ask the user to review it in the
|
|
232
|
+
app. Into a protected branch it merges only what you could commit there
|
|
233
|
+
directly, under the rule above — and never a change to `roles.yaml`, whoever
|
|
234
|
+
you are: roles are changed in the app, not merged in from a draft.
|
|
235
|
+
- **Delete** a draft with `delete_branch`, which removes it for everyone. Only
|
|
236
|
+
its author (`<email-localpart>/…`, or your own `suggestions/…` bundle) or an
|
|
237
|
+
Admin may. Preview with `dryRun: true` first: it changes nothing and says
|
|
238
|
+
whether the delete would go through, how many commits are not on the default
|
|
239
|
+
branch, and the last commit. A branch holding such commits is refused unless
|
|
240
|
+
you pass `discardUnmerged: true` — only when the user wants that work gone. An
|
|
241
|
+
open change request from or into the branch that proposes nothing is closed
|
|
242
|
+
by the delete. One that still proposes something refuses it, with a link:
|
|
243
|
+
its author can withdraw it, or an Admin can decline it, in the app — hand the
|
|
244
|
+
user that link. A request you cannot see is not named, and a preview leaves
|
|
245
|
+
it out, so a delete can still be refused after a clean preview. Hand the user the
|
|
246
|
+
`lastCommit` it answers, so the branch can be restored. The server removes a
|
|
247
|
+
draft on its own once its change request was merged, but only while nothing
|
|
248
|
+
has happened to it since: no commit that is not on the default branch, no
|
|
249
|
+
request open from or into it, no save still landing, no file held for
|
|
250
|
+
editing, and its last commit
|
|
251
|
+
the one that was merged. Any other draft stays until someone deletes it.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
## Conventions
|
|
2
|
+
|
|
3
|
+
These are conventions, not validations — nothing rejects a file for breaking
|
|
4
|
+
them. They exist because a knowledge base people can navigate beats one that is
|
|
5
|
+
merely correct.
|
|
6
|
+
|
|
7
|
+
1. **Descriptive file names.** `Weekly-Sync-2026-03-14.md` beats `notes3.md`.
|
|
8
|
+
Avoid spaces; they survive git fine but make links noisier to read.
|
|
9
|
+
|
|
10
|
+
2. **Markdown links between documents.** Use
|
|
11
|
+
`[Page Name](relative/path/to/Page.md)`, relative to the LINKING file's
|
|
12
|
+
directory rather than the repo root, so links resolve both in the app and on
|
|
13
|
+
the git host.
|
|
14
|
+
`move_file` keeps most of them working: it rewrites the links inside the
|
|
15
|
+
moved files and those in the other markdown pages it searches, and names
|
|
16
|
+
what it left — HTML pages, raw HTML inside a markdown page, and pages you
|
|
17
|
+
may not change. It does not search
|
|
18
|
+
`transcripts/` or `probes/` folders, and pages you cannot read are neither
|
|
19
|
+
searched nor named (the answer only says such pages may exist); links there
|
|
20
|
+
can still point at the old path. Paths written in prose or code are not
|
|
21
|
+
links, and a move leaves them as they are.
|
|
22
|
+
|
|
23
|
+
3. **Absolute dates.** `YYYY-MM-DD`, never "last Tuesday" — a saved file
|
|
24
|
+
outlives the moment it was written.
|
|
25
|
+
|
|
26
|
+
4. **Search before creating.** If a document on the subject exists, extend it
|
|
27
|
+
rather than starting a rival.
|
|
28
|
+
|
|
29
|
+
5. **Preserve what is there.** Append or edit sections; do not overwrite a file
|
|
30
|
+
wholesale unless asked to.
|
|
31
|
+
|
|
32
|
+
6. **Say where it came from.** When a claim rests on a specific source — a
|
|
33
|
+
person, a ticket, a document, a URL — name it inline near the claim, with
|
|
34
|
+
the date it was true. The next reader's first question is "says who, and is
|
|
35
|
+
it still true?".
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
## Directory Structure
|
|
2
|
+
|
|
3
|
+
```text
|
|
4
|
+
{{kbDirName}}/
|
|
5
|
+
├── {{knowledgeBaseDir}}/ ← the knowledge itself; organise it however suits you
|
|
6
|
+
├── {{skillsDir}}/ ← shared skills, organised by who owns them
|
|
7
|
+
├── {{pluginsDir}}/ ← one folder per plugin: its tools, and links to skills
|
|
8
|
+
├── roles.yaml ← identity → role mapping (Admin-only edits)
|
|
9
|
+
└── access.md ← repo-root access-control rules
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
(The three root names above are this deployment's own — a deployment may
|
|
13
|
+
rename them in its setup screen, and this guide is rendered with the names in
|
|
14
|
+
effect each time it is composed.)
|
|
15
|
+
|
|
16
|
+
Tool paths are workspace-relative, and the workspace root holds this
|
|
17
|
+
repository as the `{{kbDirName}}/` folder (this deployment's own name for its
|
|
18
|
+
checkout): a file in it is `{{kbDirName}}/{{knowledgeBaseDir}}/Foo.md`. Write
|
|
19
|
+
the prefix where you can — it is the path every tool reports back — but a
|
|
20
|
+
path without it is PLACED under `{{kbDirName}}/` rather than refused, so
|
|
21
|
+
`{{knowledgeBaseDir}}/Foo.md` names that same file, and so does the
|
|
22
|
+
root-anchored `/{{kbDirName}}/{{knowledgeBaseDir}}/Foo.md` the app's Copy
|
|
23
|
+
path gives you. Nothing you send can land beside the repository,
|
|
24
|
+
where git would never see it. `.` or `..` segments, backslashes and every other
|
|
25
|
+
absolute path are refused.
|
|
26
|
+
|
|
27
|
+
Only those three folders are structural. `{{skillsDir}}/` holds shared skills at any
|
|
28
|
+
depth — the folder that holds a `SKILL.md` is the skill, and everything above
|
|
29
|
+
it is ownership (`{{skillsDir}}/<scope>/…/<skill>/SKILL.md`, with an `access.md` in
|
|
30
|
+
any scope folder that needs its own rules). `{{pluginsDir}}/` has a layout the
|
|
31
|
+
platform reads:
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
{{pluginsDir}}/<Plugin>/plugin.json the manifest (Agent Plugins) — what makes the folder a plugin; its `name` is the plugin's identity
|
|
35
|
+
{{pluginsDir}}/<Plugin>/skills/<skill>/SKILL.md a skill that lives inside the plugin
|
|
36
|
+
{{pluginsDir}}/<Plugin>/mcp.json MCP servers (authoritative)
|
|
37
|
+
{{pluginsDir}}/<Plugin>/software.bevel.hexis/tools/ `.tool` manuals
|
|
38
|
+
{{pluginsDir}}/<Plugin>/access.md who can read/write the plugin
|
|
39
|
+
{{pluginsDir}}/personal-<user-id>/… one per person: private
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**The manifest's `name` is the plugin.** It is a kebab-case identifier
|
|
43
|
+
(`sales-team`), and it is what every grant spells (`plugin/sales-team/read`),
|
|
44
|
+
what the URLs and the catalog key on, and what the compiled marketplace
|
|
45
|
+
publishes the plugin as. `displayName` is what people see it called ("Sales
|
|
46
|
+
Team"); absent, the folder name is shown. Rename a plugin from its page in the
|
|
47
|
+
app: an identifier change rewrites every grant that names it, in one commit —
|
|
48
|
+
editing `name` by hand leaves those grants pointing at a plugin that no longer
|
|
49
|
+
exists.
|
|
50
|
+
|
|
51
|
+
**A plugin LINKS shared skills rather than containing them.** Its manifest
|
|
52
|
+
lists skill paths under `extensions["software.bevel.hexis"].skills` — each
|
|
53
|
+
entry is one skill folder or a folder of skills under `{{skillsDir}}/`:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{ "extensions": { "software.bevel.hexis": { "skills": ["{{skillsDir}}/Engineering/deploy", "{{skillsDir}}/Sales"] } } }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
One skill, stored once, can be listed by many plugins. A plugin's effective
|
|
60
|
+
skills are the ones inside its folder plus everything its links resolve to.
|
|
61
|
+
Do not edit that list by hand: linking is done from the plugin's page in the
|
|
62
|
+
app, because it is two edits at once — the manifest entry AND a grant on the
|
|
63
|
+
skill (see *Access control* below). A manifest entry without the grant lists
|
|
64
|
+
a skill the plugin's members cannot read; the app shows such a link as
|
|
65
|
+
needing setup and offers Repair.
|
|
66
|
+
|
|
67
|
+
**Ownership decides who may read a skill, never the plugin.** A shared
|
|
68
|
+
skill's readability comes from the `access.md` rules on its own folder and
|
|
69
|
+
the scopes above it. A plugin that links a skill someone cannot read simply
|
|
70
|
+
does not show it to them.
|
|
71
|
+
|
|
72
|
+
**Symlinks are not supported anywhere under `{{pluginsDir}}/`.** Access control
|
|
73
|
+
resolves rules by path, and a symlink is a second path to the same content —
|
|
74
|
+
the two can disagree about who may read what. The platform never creates
|
|
75
|
+
them and ignores any it finds (they can only arrive via a direct git push).
|
|
76
|
+
|
|
77
|
+
**A plugin follows the [Agent Plugins](https://agent-plugins.org) specification**
|
|
78
|
+
(v1.0.0), so another conformant client can load one: it reads `plugin.json`, the
|
|
79
|
+
skills under `skills/`, and the servers in `mcp.json`, and ignores everything
|
|
80
|
+
else. Two things here are ours and sit outside that portable core. `access.md`
|
|
81
|
+
stays at the plugin root because access resolution walks root → file, so the
|
|
82
|
+
same rules one level down would govern only that subtree. And `http`/`inline` `.tool`
|
|
83
|
+
manuals live under the reverse-DNS `software.bevel.hexis/` namespace, because
|
|
84
|
+
the specification describes MCP servers only and has no way to express them.
|
|
85
|
+
|
|
86
|
+
**MCP servers belong in `mcp.json` — do not write `.tool` files for them.**
|
|
87
|
+
Each `mcpServers` key is the server's identity: it is the namespace its vault
|
|
88
|
+
secrets bind to (`<name>_<VAR>`), so renaming a key unbinds every configured
|
|
89
|
+
secret and sign-in. The portable entry carries only where the server is
|
|
90
|
+
(`type`, `url`, literal headers). Anything this platform needs beyond that —
|
|
91
|
+
auth headers carrying `${VAR}` vault references, `variables` declarations,
|
|
92
|
+
a `description`, or `local: true` for a server only reachable from a user's
|
|
93
|
+
machine — goes in `plugin.json` under
|
|
94
|
+
`extensions["software.bevel.hexis"].mcpServers[<name>]`, which other clients
|
|
95
|
+
ignore by design. A `type: "stdio"` entry (a command run on the user's own
|
|
96
|
+
machine) is always local: the hosted endpoint never spawns it; the local
|
|
97
|
+
`hexis-mcp` server fetches the plugin's files to a local directory and runs it
|
|
98
|
+
per the Agent Plugins runtime contract (`PLUGIN_ROOT`/`PLUGIN_DATA`, `./`
|
|
99
|
+
commands contained to the plugin). A stdio server SHOULD exit when its stdin
|
|
100
|
+
reaches EOF — the client also terminates it on shutdown, but a server that
|
|
101
|
+
ignores EOF outlives crashes as an orphan whose working directory blocks the
|
|
102
|
+
plugin folder from ever refreshing.
|
|
103
|
+
|
|
104
|
+
**Secrets are never written into a plugin's portable files.** The specification
|
|
105
|
+
defines no portable credential mechanism on purpose: authorization and
|
|
106
|
+
credential storage are the client's business, header and `env` values are
|
|
107
|
+
"visible package data", and a client must not expand anything except
|
|
108
|
+
`${PLUGIN_ROOT}` and `${PLUGIN_DATA}`. So the Secrets Vault IS this platform's
|
|
109
|
+
answer to that — and `mcp.json` carries only where a server is, never a
|
|
110
|
+
`${VAR}` reference to how to authenticate with it. Those live in `plugin.json`
|
|
111
|
+
under `extensions["software.bevel.hexis"].mcpServers[<name>]`, which is ours
|
|
112
|
+
to interpret and which other clients ignore by design.
|
|
113
|
+
|
|
114
|
+
**Plugin folders are made through the platform, not by writing files.** A
|
|
115
|
+
folder is a plugin exactly when it carries a `plugin.json` (the platform
|
|
116
|
+
writes one into every legacy plugin folder at startup), and it is LISTED only
|
|
117
|
+
when it also carries an `access.md` — a bare directory under `{{pluginsDir}}/` is
|
|
118
|
+
neither. Plugins may sit at any depth under `{{pluginsDir}}/`; a folder that holds
|
|
119
|
+
plugins deeper down is a grouping folder, not a plugin. A new plugin needs an
|
|
120
|
+
`access.md` naming who runs it, and the write gate refuses a plain write
|
|
121
|
+
into an unused name there — so do not try to create a plugin by writing a
|
|
122
|
+
skill into `{{pluginsDir}}/<new-name>/…`; it will be denied. Use the two tools
|
|
123
|
+
instead:
|
|
124
|
+
|
|
125
|
+
- `my_plugin` — your user's personal plugin, holding their own skills and
|
|
126
|
+
tools, created on first use: `{{pluginsDir}}/personal-<id>/`. Readable only
|
|
127
|
+
by its owner — not even admins — and never listed as a plugin. Their personal
|
|
128
|
+
skills go under its `skills/`, each in its own folder with a `SKILL.md`;
|
|
129
|
+
write there with the file tools. A note or any other document goes under
|
|
130
|
+
`{{knowledgeBaseDir}}/` instead — see **Where a new file goes**.
|
|
131
|
+
- `create_plugin` — a shared plugin, named, optionally inside a grouping
|
|
132
|
+
folder under `{{pluginsDir}}/` (`parent`). The caller runs it; others join
|
|
133
|
+
through the app or are granted in its `access.md`.
|
|
134
|
+
|
|
135
|
+
The app's **New plugin** button and `POST /api/plugins` do the same. A skill
|
|
136
|
+
moves from a personal plugin into a shared plugin by moving its folder.
|
|
137
|
+
|
|
138
|
+
Everything under `{{knowledgeBaseDir}}/` is yours to arrange. Subfolders, naming,
|
|
139
|
+
whether a topic is one file or twenty — all of it is a judgement call about
|
|
140
|
+
what the next reader needs, not a rule the platform enforces.
|
|
141
|
+
|
|
142
|
+
A deployment may reserve further root folders of its own — `Data/`, `Agents/`
|
|
143
|
+
and `Pipelines/` scaffold an agentic execution layer in some installations.
|
|
144
|
+
They are not part of this template and are not created here; where they exist,
|
|
145
|
+
each carries its own `README.md` describing what belongs in it.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## Finding things
|
|
2
|
+
|
|
3
|
+
- `grep` for keywords across `{{knowledgeBaseDir}}/`.
|
|
4
|
+
- Follow markdown links: when you read `[Some Page](relative/path/Some Page.md)`,
|
|
5
|
+
that path is relative to the file you are reading.
|
|
6
|
+
- `list_files` to see the shape of a folder before assuming where something
|
|
7
|
+
lives.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
## HTML views
|
|
2
|
+
|
|
3
|
+
An `.html` (or `.htm`) file in the knowledge base is a live page: the app shows
|
|
4
|
+
it in a sandboxed frame, scripts and all. Write one when a reader is better
|
|
5
|
+
served by something interactive — a dashboard, a filterable table, a chart —
|
|
6
|
+
than by a markdown document.
|
|
7
|
+
|
|
8
|
+
### The frame
|
|
9
|
+
|
|
10
|
+
- **No network.** The page cannot fetch, load or send anything: no `fetch`, no
|
|
11
|
+
XHR, no WebSocket, no external script, stylesheet, font or image. Put the
|
|
12
|
+
data the page shows into the page itself.
|
|
13
|
+
- **Inline scripts and styles only.** `<script src>`, `<link>`, `<iframe>`,
|
|
14
|
+
`<object>`, `<embed>`, `<base>` and `<meta>` are removed. Write CSS in a
|
|
15
|
+
`<style>` element and code in an inline `<script>`. An image is a `data:`
|
|
16
|
+
URL.
|
|
17
|
+
- **Scripts run as ES modules**, in source order, after the document is
|
|
18
|
+
parsed: `document.getElementById` works without waiting for
|
|
19
|
+
`DOMContentLoaded`, top-level `await` works, and a top-level declaration is
|
|
20
|
+
local to its script, not a global.
|
|
21
|
+
- **No browser storage.** `localStorage`, `sessionStorage`, IndexedDB and
|
|
22
|
+
cookies are unavailable; a page keeps no state between views.
|
|
23
|
+
- **No host navigation.** The page cannot navigate the app, open a window or
|
|
24
|
+
submit a form. Links reach the app through the bridge below.
|
|
25
|
+
- **`window.bevel` exists only in the app.** Opened anywhere else, the page has
|
|
26
|
+
no bridge; guard a call with `window.bevel?.openNode`.
|
|
27
|
+
|
|
28
|
+
### `window.bevel`
|
|
29
|
+
|
|
30
|
+
Core puts two members on it:
|
|
31
|
+
|
|
32
|
+
- `window.bevel.openNode(href)` — follow `href` as if the reader had clicked a
|
|
33
|
+
link to it.
|
|
34
|
+
- `window.bevel.navigate(href)` — the same function under a second name.
|
|
35
|
+
|
|
36
|
+
A distribution may add data members of its own to `window.bevel`; its own
|
|
37
|
+
section of this guide names them. Do not call a member this guide does not
|
|
38
|
+
name.
|
|
39
|
+
|
|
40
|
+
### Links written in the markup
|
|
41
|
+
|
|
42
|
+
An `<a href>` in the page keeps its address only when it is one of these:
|
|
43
|
+
|
|
44
|
+
- a document of the knowledge base, `.md`, `.html` or `.htm`, with or without a heading — `../Knowledge/Alice.md#goal`, `Q3-Report.html`, `Notes.htm`
|
|
45
|
+
- an absolute workspace URL — `/workspace/main/{{knowledgeBaseDir}}/Alice.md`
|
|
46
|
+
- an external address — `https://example.com/docs`, `http://example.com`, `mailto:team@example.com`
|
|
47
|
+
- a bare fragment, a place in this page — `#totals`, `#`
|
|
48
|
+
|
|
49
|
+
Every other address is removed from the link when the page is shown, and the
|
|
50
|
+
link goes nowhere:
|
|
51
|
+
|
|
52
|
+
- any other scheme — `javascript:alert(1)`, `data:text/html,hi`, `file:///etc/hosts`, `tel:+15550100`
|
|
53
|
+
- a protocol-relative address — `//cdn.example.com/lib.js`
|
|
54
|
+
- a relative path to anything else — `data.csv`, `../Images/chart.png`
|
|
55
|
+
|
|
56
|
+
### How a link resolves
|
|
57
|
+
|
|
58
|
+
The same rules apply to a click on a link and to `window.bevel.openNode(href)`
|
|
59
|
+
or `window.bevel.navigate(href)`:
|
|
60
|
+
|
|
61
|
+
- **A bare fragment scrolls the page.** `#totals` scrolls the element with
|
|
62
|
+
`id="totals"` into view inside the frame; the page stays loaded and the app
|
|
63
|
+
does not move. A fragment that names no element by `id`, and no `<a name>`,
|
|
64
|
+
does nothing. `#` and `#top` scroll to the top of the page only when no
|
|
65
|
+
target matches: an element with `id="top"`, or an `<a name="top">`, wins
|
|
66
|
+
over the top of the page. Use this for a table of contents or a "back to
|
|
67
|
+
top" link. The page's own address does not change, so `hashchange` never
|
|
68
|
+
fires: a page that routes by hash handles its own clicks.
|
|
69
|
+
- **A relative path** resolves against the folder of the page's own file and
|
|
70
|
+
opens that file in the app: from `{{knowledgeBaseDir}}/Reports/Q3.html`,
|
|
71
|
+
`../Knowledge/Alice.md#goal` opens `{{knowledgeBaseDir}}/Knowledge/Alice.md`
|
|
72
|
+
at its `goal` heading.
|
|
73
|
+
- **`/workspace/<branch>/<path>`** opens that file on that branch.
|
|
74
|
+
- **An external address** (`http:`, `https:`, `mailto:`) opens in a new tab.
|
|
75
|
+
A call from a script may also open `tel:`, `sms:`, `geo:` and a
|
|
76
|
+
protocol-relative `//host/path` address in a new tab, though a link
|
|
77
|
+
written in the markup cannot keep one.
|
|
78
|
+
- **Anything else** (`javascript:`, `data:`, `file:`, an empty string) does
|
|
79
|
+
nothing.
|
|
80
|
+
|
|
81
|
+
A click that a handler of the page has already cancelled with
|
|
82
|
+
`event.preventDefault()` is left to that handler: the bridge neither scrolls
|
|
83
|
+
nor opens anything for it.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Knowledge base
|
|
2
|
+
|
|
3
|
+
This is a git-backed knowledge base. You are the primary agent responsible for
|
|
4
|
+
maintaining it.
|
|
5
|
+
|
|
6
|
+
> **This guide is served by the platform.** It is not a file in the
|
|
7
|
+
> repository: `get_agent_guide` returns it, whole or one section at a time,
|
|
8
|
+
> and so does `read_file` on `AGENTS.md` at the repository root — after the
|
|
9
|
+
> knowledge base's own `AGENTS.md`, when it has one; `grep` searches it there
|
|
10
|
+
> too. An `AGENTS.md` you find on disk is the organisation's own conventions
|
|
11
|
+
> file, written by its people; follow it, and never write this text into it.
|
|
12
|
+
> Deployment- or team-specific conventions belong there, or in files of your
|
|
13
|
+
> own anywhere under `{{knowledgeBaseDir}}/`, linked from wherever they are
|
|
14
|
+
> needed.
|
|
15
|
+
|
|
16
|
+
**Read `mcp-description.md` at the repository root first.** It says what this
|
|
17
|
+
knowledge base contains and when to consult it. Agents connected over MCP
|
|
18
|
+
receive the default branch's copy inline at the start of every session; a
|
|
19
|
+
clone reads the copy on its own branch.
|
|
20
|
+
|
|
21
|
+
**There is no required format for knowledge.** Write markdown the way the
|
|
22
|
+
subject wants to be written: prose, tables, checklists, diagrams, whatever
|
|
23
|
+
serves the reader. Nothing here parses your files into a schema or rejects a
|
|
24
|
+
document for having the wrong shape. If a deployment layers a structured
|
|
25
|
+
knowledge graph on top, it brings its own conventions, in sections of this
|
|
26
|
+
guide of its own; what follows describes the platform underneath, which stores
|
|
27
|
+
files and controls who may change them.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
## A new knowledge base
|
|
2
|
+
|
|
3
|
+
When `start_session` answers with a `firstRun` note, this knowledge base is
|
|
4
|
+
new: `{{kbDirName}}/{{knowledgeBaseDir}}/` has no pages yet, the starter guide
|
|
5
|
+
aside. The person has most likely just connected you, and you are the quickest way to
|
|
6
|
+
fill it. The note stops coming once real pages exist.
|
|
7
|
+
|
|
8
|
+
- **Offer once per conversation, in a sentence or two.** For example: "Your
|
|
9
|
+
Hexis knowledge base is connected and almost empty. Want me to draft a few
|
|
10
|
+
pages about your company — what you do, your customers, your products, your
|
|
11
|
+
glossary? Give me your website or tell me a bit, and I'll write them for you
|
|
12
|
+
to review."
|
|
13
|
+
- **Never in the way.** If they asked for something else, do that first and
|
|
14
|
+
make the offer in one line at the end. If they decline, drop it.
|
|
15
|
+
- **Draft from what they give you.** Read the website they name, or work from
|
|
16
|
+
what they tell you, and ask when something essential is missing rather than
|
|
17
|
+
inventing it. Good first pages: About the company, Customers, Products,
|
|
18
|
+
Glossary, How we work. Say where each fact came from (see Conventions).
|
|
19
|
+
- **Write them with the normal tools** (`write_file`, `write_files`) as
|
|
20
|
+
markdown under `{{kbDirName}}/{{knowledgeBaseDir}}/`, one page per subject.
|
|
21
|
+
Leave the starter guide as it is. A write you are refused says whether you
|
|
22
|
+
may propose it as a change instead; propose it only when it says you may.
|
|
23
|
+
- **Tell them where the pages are:** in the knowledge base in the app, where
|
|
24
|
+
they can read, edit or delete them, and every version stays in the history.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
## Skills (`{{skillsDir}}/<scope>/…/<skill>/SKILL.md`, or `{{pluginsDir}}/<Plugin>/skills/<skill>/SKILL.md`)
|
|
2
|
+
|
|
3
|
+
A skill is a folder holding a `SKILL.md` and whatever files it needs. Shared
|
|
4
|
+
skills live under `{{skillsDir}}/`, organised by ownership; a skill that belongs to
|
|
5
|
+
exactly one plugin may live inside that plugin's `skills/` folder instead.
|
|
6
|
+
Skill names are unique across the whole catalog, whichever home they have.
|
|
7
|
+
The frontmatter names it, declares which tools it may use, and may carry a
|
|
8
|
+
version:
|
|
9
|
+
|
|
10
|
+
```yaml
|
|
11
|
+
---
|
|
12
|
+
name: weekly-newsletter
|
|
13
|
+
description: Drafts the Friday newsletter for review.
|
|
14
|
+
allowed-tools: [slack_post_message]
|
|
15
|
+
metadata:
|
|
16
|
+
version: "1.4.0"
|
|
17
|
+
---
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The body is the instructions, in plain markdown. `allowed-tools` entries are
|
|
21
|
+
tool names from the `.tool` manuals and MCP servers of the plugins that hold
|
|
22
|
+
the skill, and the agent client's own tools beside them (`Bash`, `Read`,
|
|
23
|
+
`Bash(git:*)` and the like, which the platform leaves to the client).
|
|
24
|
+
`metadata.version` is semver; `list_skills` reports it, and
|
|
25
|
+
`get_skill` with a `version` loads the skill as it was when it last declared
|
|
26
|
+
that version (omit `version` for the latest). Any other `metadata` keys are
|
|
27
|
+
the author's own notes — the catalog carries the file as it is and acts on
|
|
28
|
+
none of them.
|
|
29
|
+
|
|
30
|
+
A `SKILL.md` committed on the default branch is listed and loadable from the
|
|
31
|
+
very next `list_skills` or `get_skill`, on the connection you already have:
|
|
32
|
+
the released catalog is cached briefly and dropped the moment the default
|
|
33
|
+
branch changes, so the next request reads the workspace again.
|
|
34
|
+
See *A released tool or skill is live within ten seconds* under **Tool
|
|
35
|
+
Manuals** for the one caveat (an MCP client that caches the prompt list it
|
|
36
|
+
was given at connect time must re-list — the prompt-list-changed notification
|
|
37
|
+
that tells it to arrives with the connection's next catalog check, which is
|
|
38
|
+
within ten seconds on a connection in use and at its next use on an idle
|
|
39
|
+
one).
|
|
40
|
+
|
|
41
|
+
**How skills reach agents.** Through the MCP server (`list_skills`,
|
|
42
|
+
`get_skill`), or as native plugins: every user can clone a git remote from
|
|
43
|
+
the app's external-agent page that holds a plugin marketplace compiled from
|
|
44
|
+
exactly the skills they may read — one plugin per plugin here, a
|
|
45
|
+
`skills-and-knowledge` plugin for the rest plus this knowledge base's MCP
|
|
46
|
+
server, and `hexis-all`, one plugin holding every skill they may read and
|
|
47
|
+
the MCP server, for a single install.
|