@bevel-software/platform-core-backend 0.15.1 → 0.19.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/THIRD-PARTY-NOTICES.md +4 -4
- package/dist/core/catalog-cache-invalidation.d.ts +16 -0
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/catalog-cache-invalidation.js +6 -1
- package/dist/core/catalog-cache-invalidation.js.map +1 -1
- package/dist/core/catalog-revision.d.ts +39 -0
- package/dist/core/catalog-revision.d.ts.map +1 -0
- package/dist/core/catalog-revision.js +94 -0
- package/dist/core/catalog-revision.js.map +1 -0
- package/dist/core/create-core-server.d.ts +7 -0
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +199 -75
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +49 -2
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +212 -86
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +138 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +218 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/public-config.d.ts +82 -0
- package/dist/core/public-config.d.ts.map +1 -0
- package/dist/core/public-config.js +78 -0
- package/dist/core/public-config.js.map +1 -0
- package/dist/core/readiness.d.ts +86 -0
- package/dist/core/readiness.d.ts.map +1 -0
- package/dist/core/readiness.js +56 -0
- package/dist/core/readiness.js.map +1 -0
- package/dist/core-config.d.ts +30 -0
- package/dist/core-config.d.ts.map +1 -1
- package/dist/core-config.js +64 -2
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +215 -11
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +57 -11
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +616 -155
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +71 -5
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +161 -13
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-view.d.ts +147 -0
- package/dist/modules/access/access-view.d.ts.map +1 -0
- package/dist/modules/access/access-view.js +211 -0
- package/dist/modules/access/access-view.js.map +1 -0
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +255 -79
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +2 -3
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +9 -8
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts.map +1 -1
- package/dist/modules/access/admin-route-helpers.js +4 -4
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +53 -0
- package/dist/modules/access/change-read-gate.d.ts.map +1 -0
- package/dist/modules/access/change-read-gate.js +134 -0
- package/dist/modules/access/change-read-gate.js.map +1 -0
- package/dist/modules/access/creator-access.d.ts +33 -39
- package/dist/modules/access/creator-access.d.ts.map +1 -1
- package/dist/modules/access/creator-access.js +92 -119
- package/dist/modules/access/creator-access.js.map +1 -1
- package/dist/modules/access/directory-sync-bot.d.ts.map +1 -1
- package/dist/modules/access/directory-sync-bot.js +3 -1
- package/dist/modules/access/directory-sync-bot.js.map +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +3 -3
- package/dist/modules/access/groups-admin.service.js +2 -2
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/reference-scan.d.ts.map +1 -1
- package/dist/modules/access/reference-scan.js +5 -4
- package/dist/modules/access/reference-scan.js.map +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +72 -13
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +71 -13
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +8 -6
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/synced-groups-writer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-writer.js +3 -8
- package/dist/modules/access/synced-groups-writer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +209 -0
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -0
- package/dist/modules/access/user-access-removal.service.js +662 -0
- package/dist/modules/access/user-access-removal.service.js.map +1 -0
- package/dist/modules/access-model/access-errors.d.ts +32 -1
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +38 -11
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +49 -24
- package/dist/modules/access-model/access-grammar.d.ts.map +1 -1
- package/dist/modules/access-model/access-grammar.js +68 -48
- package/dist/modules/access-model/access-grammar.js.map +1 -1
- package/dist/modules/access-model/access-splice.d.ts.map +1 -1
- package/dist/modules/access-model/access-splice.js +18 -18
- package/dist/modules/access-model/access-splice.js.map +1 -1
- package/dist/modules/access-model/access-template.d.ts +22 -0
- package/dist/modules/access-model/access-template.d.ts.map +1 -0
- package/dist/modules/access-model/access-template.js +42 -0
- package/dist/modules/access-model/access-template.js.map +1 -0
- package/dist/modules/access-model/change-gate.d.ts +65 -0
- package/dist/modules/access-model/change-gate.d.ts.map +1 -0
- package/dist/modules/access-model/change-gate.js +25 -0
- package/dist/modules/access-model/change-gate.js.map +1 -0
- package/dist/modules/access-model/creator.d.ts +13 -16
- package/dist/modules/access-model/creator.d.ts.map +1 -1
- package/dist/modules/access-model/creator.js.map +1 -1
- package/dist/modules/access-model/frontmatter-lines.d.ts +27 -0
- package/dist/modules/access-model/frontmatter-lines.d.ts.map +1 -0
- package/dist/modules/access-model/frontmatter-lines.js +74 -0
- package/dist/modules/access-model/frontmatter-lines.js.map +1 -0
- package/dist/modules/access-model/plugin-principals.d.ts +5 -3
- package/dist/modules/access-model/plugin-principals.d.ts.map +1 -1
- package/dist/modules/access-model/plugin-principals.js +11 -17
- package/dist/modules/access-model/plugin-principals.js.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +73 -2
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +153 -3
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.service.js +5 -2
- package/dist/modules/admin/admin-access.service.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +21 -0
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -0
- package/dist/modules/agent-instructions/agent-instructions.routes.js +38 -0
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -0
- package/dist/modules/agent-instructions/compose.d.ts +71 -0
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -0
- package/dist/modules/agent-instructions/compose.js +234 -0
- package/dist/modules/agent-instructions/compose.js.map +1 -0
- package/dist/modules/agent-instructions/index.d.ts +4 -0
- package/dist/modules/agent-instructions/index.d.ts.map +1 -0
- package/dist/modules/agent-instructions/index.js +4 -0
- package/dist/modules/agent-instructions/index.js.map +1 -0
- package/dist/modules/agent-instructions/read-preamble.d.ts +37 -0
- package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -0
- package/dist/modules/agent-instructions/read-preamble.js +81 -0
- package/dist/modules/agent-instructions/read-preamble.js.map +1 -0
- package/dist/modules/auth/account-erasure.service.d.ts +30 -4
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +96 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +6 -3
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +109 -10
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.routes.d.ts +10 -3
- package/dist/modules/auth/auth.routes.d.ts.map +1 -1
- package/dist/modules/auth/auth.routes.js +9 -4
- package/dist/modules/auth/auth.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +89 -5
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +160 -25
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.d.ts +46 -3
- package/dist/modules/auth/oidc-auth-provider.d.ts.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.js +99 -21
- package/dist/modules/auth/oidc-auth-provider.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 +14 -2
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +56 -7
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/advisory-lock.d.ts +103 -0
- package/dist/modules/database/advisory-lock.d.ts.map +1 -0
- package/dist/modules/database/advisory-lock.js +320 -0
- package/dist/modules/database/advisory-lock.js.map +1 -0
- package/dist/modules/database/connection.d.ts.map +1 -1
- package/dist/modules/database/connection.js +9 -1
- package/dist/modules/database/connection.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +346 -0
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +119 -0
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/database/migrate.d.ts.map +1 -1
- package/dist/modules/database/migrate.js +26 -6
- package/dist/modules/database/migrate.js.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.d.ts.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.js +4 -2
- package/dist/modules/declared-variables/declared-variables.routes.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +2 -4
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/diff/diff.service.d.ts +4 -1
- package/dist/modules/diff/diff.service.d.ts.map +1 -1
- package/dist/modules/diff/diff.service.js +79 -81
- package/dist/modules/diff/diff.service.js.map +1 -1
- package/dist/modules/kb-fs/bevel-ignore.d.ts +35 -0
- package/dist/modules/kb-fs/bevel-ignore.d.ts.map +1 -0
- package/dist/modules/kb-fs/bevel-ignore.js +71 -0
- package/dist/modules/kb-fs/bevel-ignore.js.map +1 -0
- package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.js +3 -1
- package/dist/modules/kb-fs/file-change-notifier.js.map +1 -1
- package/dist/modules/kb-fs/git-guarded-filesystem.d.ts +37 -0
- package/dist/modules/kb-fs/git-guarded-filesystem.d.ts.map +1 -0
- package/dist/modules/kb-fs/git-guarded-filesystem.js +104 -0
- package/dist/modules/kb-fs/git-guarded-filesystem.js.map +1 -0
- package/dist/modules/kb-fs/locking-filesystem.d.ts +113 -18
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +353 -76
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/node-fs.d.ts +23 -0
- package/dist/modules/kb-fs/node-fs.d.ts.map +1 -0
- package/dist/modules/kb-fs/node-fs.js +158 -0
- package/dist/modules/kb-fs/node-fs.js.map +1 -0
- package/dist/modules/kb-fs/read-only-filesystem.d.ts +10 -9
- package/dist/modules/kb-fs/read-only-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/read-only-filesystem.js +18 -9
- package/dist/modules/kb-fs/read-only-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.d.ts +100 -3
- package/dist/modules/kb-fs/repo-path.d.ts.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +195 -3
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.js +4 -2
- package/dist/modules/kb-sync/kb-sync.routes.js.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 +7 -5
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/git-http.routes.js +6 -4
- package/dist/modules/marketplace/git-http.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +12 -2
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +32 -3
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +27 -0
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +45 -0
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.js +30 -6
- package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +21 -9
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.js +60 -19
- package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -1
- package/dist/modules/marketplace/github-facade/index.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/index.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/index.js +1 -1
- package/dist/modules/marketplace/github-facade/index.js.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts +14 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.js +26 -8
- package/dist/modules/marketplace/marketplace-repo.service.js.map +1 -1
- package/dist/modules/mcp/downstream-pool.d.ts +107 -0
- package/dist/modules/mcp/downstream-pool.d.ts.map +1 -0
- package/dist/modules/mcp/downstream-pool.js +221 -0
- package/dist/modules/mcp/downstream-pool.js.map +1 -0
- package/dist/modules/mcp/downstream-token-refresh.d.ts +77 -0
- package/dist/modules/mcp/downstream-token-refresh.d.ts.map +1 -0
- package/dist/modules/mcp/downstream-token-refresh.js +166 -0
- package/dist/modules/mcp/downstream-token-refresh.js.map +1 -0
- package/dist/modules/mcp/first-call-probe.cli-args.d.ts +78 -0
- package/dist/modules/mcp/first-call-probe.cli-args.d.ts.map +1 -0
- package/dist/modules/mcp/first-call-probe.cli-args.js +151 -0
- package/dist/modules/mcp/first-call-probe.cli-args.js.map +1 -0
- package/dist/modules/mcp/first-call-probe.cli.d.ts +2 -0
- package/dist/modules/mcp/first-call-probe.cli.d.ts.map +1 -0
- package/dist/modules/mcp/first-call-probe.cli.js +62 -0
- package/dist/modules/mcp/first-call-probe.cli.js.map +1 -0
- package/dist/modules/mcp/first-call-probe.d.ts +165 -0
- package/dist/modules/mcp/first-call-probe.d.ts.map +1 -0
- package/dist/modules/mcp/first-call-probe.js +298 -0
- package/dist/modules/mcp/first-call-probe.js.map +1 -0
- package/dist/modules/mcp/manual-failure-memo.d.ts +42 -17
- package/dist/modules/mcp/manual-failure-memo.d.ts.map +1 -1
- package/dist/modules/mcp/manual-failure-memo.js +79 -23
- package/dist/modules/mcp/manual-failure-memo.js.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.d.ts +9 -5
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +24 -16
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/mcp.routes.d.ts +4 -4
- package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.routes.js +83 -179
- package/dist/modules/mcp/mcp.routes.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +218 -61
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +713 -159
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +4 -2
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js +3 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
- package/dist/modules/mcp/surface-log-throttle.d.ts +59 -0
- package/dist/modules/mcp/surface-log-throttle.d.ts.map +1 -0
- package/dist/modules/mcp/surface-log-throttle.js +94 -0
- package/dist/modules/mcp/surface-log-throttle.js.map +1 -0
- package/dist/modules/plugins/compile/compile-marketplace.d.ts +13 -6
- package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.js +119 -36
- package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +8 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.js +9 -6
- package/dist/modules/plugins/compile/marketplace-compiler.service.js.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js +32 -9
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +26 -6
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js +71 -14
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -1
- package/dist/modules/plugins/discovery/kb-plugin-source.d.ts +4 -2
- package/dist/modules/plugins/discovery/kb-plugin-source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/kb-plugin-source.js +9 -6
- package/dist/modules/plugins/discovery/kb-plugin-source.js.map +1 -1
- package/dist/modules/plugins/discovery/native.source.d.ts +2 -1
- package/dist/modules/plugins/discovery/native.source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/native.source.js +22 -4
- package/dist/modules/plugins/discovery/native.source.js.map +1 -1
- package/dist/modules/plugins/discovery/plugin-source.d.ts +17 -3
- package/dist/modules/plugins/discovery/plugin-source.d.ts.map +1 -1
- package/dist/modules/plugins/index.d.ts +6 -3
- package/dist/modules/plugins/index.d.ts.map +1 -1
- package/dist/modules/plugins/index.js +6 -3
- package/dist/modules/plugins/index.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +250 -0
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -0
- package/dist/modules/plugins/join-request-jobs.service.js +602 -0
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -0
- package/dist/modules/plugins/join-request-records.store.d.ts +161 -0
- package/dist/modules/plugins/join-request-records.store.d.ts.map +1 -0
- package/dist/modules/plugins/join-request-records.store.js +179 -0
- package/dist/modules/plugins/join-request-records.store.js.map +1 -0
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +4 -2
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-links.d.ts +4 -1
- package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.js +6 -3
- package/dist/modules/plugins/plugin-links.js.map +1 -1
- package/dist/modules/plugins/plugin-links.service.d.ts +2 -5
- package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.service.js +4 -13
- package/dist/modules/plugins/plugin-links.service.js.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.d.ts +91 -19
- package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.js +183 -38
- package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts +3 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +20 -11
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.contract.d.ts +52 -4
- package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +38 -5
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +190 -116
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/plugins/plugins.service.d.ts +38 -6
- package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.service.js +86 -17
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts +25 -0
- package/dist/modules/plugins/plugins.tools.d.ts.map +1 -0
- package/dist/modules/plugins/plugins.tools.js +82 -0
- package/dist/modules/plugins/plugins.tools.js.map +1 -0
- package/dist/modules/plugins/teams.routes.d.ts +42 -0
- package/dist/modules/plugins/teams.routes.d.ts.map +1 -0
- package/dist/modules/plugins/teams.routes.js +79 -0
- package/dist/modules/plugins/teams.routes.js.map +1 -0
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +40 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +202 -37
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +1 -1
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js +5 -3
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-variable-loader.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-variable-loader.js +3 -1
- package/dist/modules/secrets-vault/secrets-variable-loader.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +78 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js +40 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +106 -52
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.d.ts +118 -0
- package/dist/modules/settings/connection-check.d.ts.map +1 -0
- package/dist/modules/settings/connection-check.js +287 -0
- package/dist/modules/settings/connection-check.js.map +1 -0
- package/dist/modules/settings/deployment-settings.service.d.ts +153 -7
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +348 -51
- package/dist/modules/settings/deployment-settings.service.js.map +1 -1
- package/dist/modules/settings/git-root-folders.d.ts +54 -0
- package/dist/modules/settings/git-root-folders.d.ts.map +1 -0
- package/dist/modules/settings/git-root-folders.js +130 -0
- package/dist/modules/settings/git-root-folders.js.map +1 -0
- package/dist/modules/settings/oidc-check.d.ts +85 -0
- package/dist/modules/settings/oidc-check.d.ts.map +1 -0
- package/dist/modules/settings/oidc-check.js +172 -0
- package/dist/modules/settings/oidc-check.js.map +1 -0
- package/dist/modules/settings/setup.routes.d.ts +31 -1
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +400 -108
- package/dist/modules/settings/setup.routes.js.map +1 -1
- package/dist/modules/skills/allowed-tools-check.d.ts +132 -0
- package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -0
- package/dist/modules/skills/allowed-tools-check.js +260 -0
- package/dist/modules/skills/allowed-tools-check.js.map +1 -0
- package/dist/modules/skills/index.d.ts +3 -1
- package/dist/modules/skills/index.d.ts.map +1 -1
- package/dist/modules/skills/index.js +1 -0
- package/dist/modules/skills/index.js.map +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +6 -11
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +18 -70
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +9 -6
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.contract.d.ts +44 -10
- package/dist/modules/skills/skills.contract.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.d.ts +8 -1
- package/dist/modules/skills/skills.routes.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.js +16 -2
- package/dist/modules/skills/skills.routes.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +31 -7
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.service.js +191 -81
- package/dist/modules/skills/skills.service.js.map +1 -1
- package/dist/modules/skills/skills.tools.d.ts +4 -1
- package/dist/modules/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +41 -6
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.d.ts +18 -0
- package/dist/modules/tool-auth/connection-key-rejection.d.ts.map +1 -0
- package/dist/modules/tool-auth/connection-key-rejection.js +20 -0
- package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -0
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts +14 -0
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts.map +1 -0
- package/dist/modules/tool-auth/connection-keys-admin.routes.js +67 -0
- package/dist/modules/tool-auth/connection-keys-admin.routes.js.map +1 -0
- package/dist/modules/tool-auth/external-api-key.interface.d.ts +51 -3
- package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts +16 -6
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +61 -18
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.d.ts +5 -2
- package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.js +5 -2
- package/dist/modules/tool-auth/internal-token.service.js.map +1 -1
- package/dist/modules/tool-auth/key-or-session.middleware.d.ts +23 -0
- package/dist/modules/tool-auth/key-or-session.middleware.d.ts.map +1 -0
- package/dist/modules/tool-auth/key-or-session.middleware.js +39 -0
- package/dist/modules/tool-auth/key-or-session.middleware.js.map +1 -0
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts +7 -1
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +8 -5
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +14 -0
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +28 -6
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +22 -5
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +6 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.js +7 -1
- package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
- package/dist/modules/tool-manuals/index.d.ts +2 -1
- package/dist/modules/tool-manuals/index.d.ts.map +1 -1
- package/dist/modules/tool-manuals/index.js +1 -0
- package/dist/modules/tool-manuals/index.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +8 -6
- package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +10 -2
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +12 -15
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +50 -0
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -0
- package/dist/modules/tool-manuals/pending-tools.service.js +149 -0
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -0
- package/dist/modules/tool-manuals/tool-delete.service.d.ts +135 -0
- package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -0
- package/dist/modules/tool-manuals/tool-delete.service.js +303 -0
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +161 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.js +9 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +19 -2
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.js +127 -57
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +119 -5
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +404 -74
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +78 -6
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +88 -54
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/event-bus.d.ts +10 -4
- package/dist/modules/workflow/event-bus.d.ts.map +1 -1
- package/dist/modules/workflow/event-bus.js +14 -11
- package/dist/modules/workflow/event-bus.js.map +1 -1
- package/dist/modules/workflow/events.routes.d.ts +17 -2
- package/dist/modules/workflow/events.routes.d.ts.map +1 -1
- package/dist/modules/workflow/events.routes.js +31 -12
- package/dist/modules/workflow/events.routes.js.map +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts +22 -4
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
- package/dist/modules/workflow/file-lock.service.js +27 -4
- package/dist/modules/workflow/file-lock.service.js.map +1 -1
- package/dist/modules/workflow/git/change-request-link.d.ts +20 -0
- package/dist/modules/workflow/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/workflow/git/change-request-link.js +34 -0
- package/dist/modules/workflow/git/change-request-link.js.map +1 -0
- package/dist/modules/workflow/git/git-version.d.ts.map +1 -1
- package/dist/modules/workflow/git/git-version.js +3 -1
- package/dist/modules/workflow/git/git-version.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +263 -4
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +528 -118
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts +36 -0
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/workflow/git/node-git-runner.js +273 -0
- package/dist/modules/workflow/git/node-git-runner.js.map +1 -0
- package/dist/modules/workflow/git/pull-request.service.d.ts +51 -2
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +157 -25
- package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts +11 -0
- package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.service.js +24 -4
- package/dist/modules/workflow/pending-commits.service.js.map +1 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts +15 -8
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.worker.js +107 -58
- package/dist/modules/workflow/pending-commits.worker.js.map +1 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +1 -1
- package/dist/modules/workflow/recovery-bot.js +3 -1
- package/dist/modules/workflow/recovery-bot.js.map +1 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts +60 -0
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +1 -0
- package/dist/modules/workflow/review-workflow/approval-lock.js +116 -0
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +1 -0
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +54 -7
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +64 -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 +269 -90
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
- package/dist/modules/workflow/sanitize-error.d.ts +5 -2
- package/dist/modules/workflow/sanitize-error.d.ts.map +1 -1
- package/dist/modules/workflow/sanitize-error.js +8 -4
- package/dist/modules/workflow/sanitize-error.js.map +1 -1
- package/dist/modules/workflow/workflow.routes.d.ts +2 -0
- package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.routes.js +259 -29
- package/dist/modules/workflow/workflow.routes.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +166 -14
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +906 -106
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/empty-dirs.d.ts +15 -0
- package/dist/modules/workspace/empty-dirs.d.ts.map +1 -0
- package/dist/modules/workspace/empty-dirs.js +90 -0
- package/dist/modules/workspace/empty-dirs.js.map +1 -0
- package/dist/modules/workspace/file-readers/content-mode.d.ts +50 -0
- package/dist/modules/workspace/file-readers/content-mode.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/content-mode.js +55 -0
- package/dist/modules/workspace/file-readers/content-mode.js.map +1 -0
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +4 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.js +4 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +5 -2
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.js +7 -4
- package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -1
- package/dist/modules/workspace/file-readers/document-reader.d.ts +2 -0
- package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/document-reader.js +5 -0
- package/dist/modules/workspace/file-readers/document-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/extract-docx.d.ts +6 -0
- package/dist/modules/workspace/file-readers/extract-docx.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/extract-docx.js +6 -0
- package/dist/modules/workspace/file-readers/extract-docx.js.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.d.ts +24 -5
- package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.js +11 -6
- package/dist/modules/workspace/file-readers/file-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.js +6 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -1
- package/dist/modules/workspace/file-readers/image-reader.d.ts +7 -5
- package/dist/modules/workspace/file-readers/image-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/image-reader.js +9 -5
- package/dist/modules/workspace/file-readers/image-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/ooxml-text.d.ts +3 -0
- package/dist/modules/workspace/file-readers/ooxml-text.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/ooxml-text.js +39 -2
- package/dist/modules/workspace/file-readers/ooxml-text.js.map +1 -1
- package/dist/modules/workspace/file-readers/text-reader.d.ts +29 -1
- package/dist/modules/workspace/file-readers/text-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/text-reader.js +57 -3
- package/dist/modules/workspace/file-readers/text-reader.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +28 -0
- package/dist/modules/workspace/git-internals.middleware.d.ts.map +1 -0
- package/dist/modules/workspace/git-internals.middleware.js +93 -0
- package/dist/modules/workspace/git-internals.middleware.js.map +1 -0
- package/dist/modules/workspace/not-found.d.ts +80 -0
- package/dist/modules/workspace/not-found.d.ts.map +1 -0
- package/dist/modules/workspace/not-found.js +112 -0
- package/dist/modules/workspace/not-found.js.map +1 -0
- package/dist/modules/workspace/session-ontology.gate.d.ts +1 -1
- package/dist/modules/workspace/session-ontology.gate.d.ts.map +1 -1
- package/dist/modules/workspace/session-ontology.gate.js +1 -1
- package/dist/modules/workspace/session-ontology.gate.js.map +1 -1
- package/dist/modules/workspace/startup/beside-checkout.d.ts +42 -0
- package/dist/modules/workspace/startup/beside-checkout.d.ts.map +1 -0
- package/dist/modules/workspace/startup/beside-checkout.js +110 -0
- package/dist/modules/workspace/startup/beside-checkout.js.map +1 -0
- package/dist/modules/workspace/startup/kb-git.d.ts +7 -12
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +34 -35
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts +95 -0
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.js +257 -55
- package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts +45 -0
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +417 -385
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts +48 -0
- package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js +183 -0
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts +51 -0
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.js +158 -0
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.js.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-layout.d.ts +64 -0
- package/dist/modules/workspace/startup/steps/plugin-layout.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-layout.js +97 -0
- package/dist/modules/workspace/startup/steps/plugin-layout.js.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts +7 -1
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.js +45 -81
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.d.ts +3 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js +4 -12
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +6 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +154 -78
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +96 -24
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +446 -138
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +94 -0
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/template-source.js +160 -0
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -0
- package/dist/modules/workspace/workspace.routes.d.ts +14 -2
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +649 -238
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +290 -12
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +924 -269
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +42 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +1590 -146
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/modules/workspace/write-denial.d.ts +76 -0
- package/dist/modules/workspace/write-denial.d.ts.map +1 -0
- package/dist/modules/workspace/write-denial.js +138 -0
- package/dist/modules/workspace/write-denial.js.map +1 -0
- package/dist/shared/canonical-file-identity.d.ts +64 -0
- package/dist/shared/canonical-file-identity.d.ts.map +1 -0
- package/dist/shared/canonical-file-identity.js +92 -0
- package/dist/shared/canonical-file-identity.js.map +1 -0
- package/dist/shared/domain-errors.d.ts +108 -0
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +137 -0
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/email-identity.d.ts +32 -0
- package/dist/shared/email-identity.d.ts.map +1 -0
- package/dist/shared/email-identity.js +37 -0
- package/dist/shared/email-identity.js.map +1 -0
- package/dist/shared/fs.contract.d.ts +206 -0
- package/dist/shared/fs.contract.d.ts.map +1 -0
- package/dist/shared/fs.contract.js +79 -0
- package/dist/shared/fs.contract.js.map +1 -0
- package/dist/shared/git-failure.d.ts +80 -0
- package/dist/shared/git-failure.d.ts.map +1 -0
- package/dist/shared/git-failure.js +139 -0
- package/dist/shared/git-failure.js.map +1 -0
- package/dist/shared/git-internals.d.ts +17 -0
- package/dist/shared/git-internals.d.ts.map +1 -0
- package/dist/shared/git-internals.js +123 -0
- package/dist/shared/git-internals.js.map +1 -0
- package/dist/shared/git.contract.d.ts +157 -0
- package/dist/shared/git.contract.d.ts.map +1 -0
- package/dist/shared/git.contract.js +103 -0
- package/dist/shared/git.contract.js.map +1 -0
- package/dist/shared/http-errors.d.ts +33 -0
- package/dist/shared/http-errors.d.ts.map +1 -0
- package/dist/shared/http-errors.js +35 -0
- package/dist/shared/http-errors.js.map +1 -0
- package/dist/shared/logger.contract.d.ts +63 -0
- package/dist/shared/logger.contract.d.ts.map +1 -0
- package/dist/shared/logger.contract.js +126 -0
- package/dist/shared/logger.contract.js.map +1 -0
- package/dist/shared/logging.d.ts +31 -0
- package/dist/shared/logging.d.ts.map +1 -0
- package/dist/shared/logging.js +92 -0
- package/dist/shared/logging.js.map +1 -0
- package/dist/shared/path-containment.d.ts +21 -0
- package/dist/shared/path-containment.d.ts.map +1 -0
- package/dist/shared/path-containment.js +34 -0
- package/dist/shared/path-containment.js.map +1 -0
- package/dist/shared/pending-proposals.d.ts +71 -0
- package/dist/shared/pending-proposals.d.ts.map +1 -0
- package/dist/shared/pending-proposals.js +98 -0
- package/dist/shared/pending-proposals.js.map +1 -0
- package/dist/shared/printable.d.ts +22 -0
- package/dist/shared/printable.d.ts.map +1 -0
- package/dist/shared/printable.js +65 -0
- package/dist/shared/printable.js.map +1 -0
- package/dist/shared/redact-secret.d.ts +30 -0
- package/dist/shared/redact-secret.d.ts.map +1 -0
- package/dist/shared/redact-secret.js +114 -0
- package/dist/shared/redact-secret.js.map +1 -0
- package/dist/shared/rename-no-replace.d.ts +119 -0
- package/dist/shared/rename-no-replace.d.ts.map +1 -0
- package/dist/shared/rename-no-replace.js +323 -0
- package/dist/shared/rename-no-replace.js.map +1 -0
- package/dist/shared/ssrf.d.ts.map +1 -1
- package/dist/shared/ssrf.js +49 -18
- package/dist/shared/ssrf.js.map +1 -1
- package/dist/version.d.ts +10 -6
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +10 -6
- package/dist/version.js.map +1 -1
- package/kb-template/.bevelignore +4 -3
- package/kb-template/AGENTS.md +281 -36
- package/kb-template/KnowledgeBase/How to get started.md +1 -1
- package/kb-template/access.md +5 -3
- package/kb-template/mcp-description.md +27 -0
- package/migrations/0006_api_tokens_revoked_by.sql +1 -0
- package/migrations/0007_github_facade_registered.sql +1 -0
- package/migrations/0008_change_request_apply_failure.sql +4 -0
- package/migrations/0009_change_request_apply_failure_kind.sql +13 -0
- package/migrations/0010_plugin_join_requests.sql +15 -0
- package/migrations/0011_plugin_join_request_claim.sql +11 -0
- package/migrations/meta/0006_snapshot.json +1723 -0
- package/migrations/meta/0007_snapshot.json +1729 -0
- package/migrations/meta/0008_snapshot.json +1753 -0
- package/migrations/meta/0009_snapshot.json +1759 -0
- package/migrations/meta/0010_snapshot.json +1872 -0
- package/migrations/meta/0011_snapshot.json +1884 -0
- package/migrations/meta/_journal.json +42 -0
- package/package.json +6 -5
- package/src/__tests__/core-config.domain.test.ts +67 -2
- package/src/__tests__/kb-layout-config.test.ts +186 -1
- package/src/__tests__/open-change-gate.ts +15 -0
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +83 -3
- package/src/core/__tests__/catalog-revision.test.ts +190 -0
- package/src/core/__tests__/lifecycle.test.ts +369 -0
- package/src/core/__tests__/public-config.test.ts +30 -0
- package/src/core/__tests__/readiness.test.ts +109 -0
- package/src/core/catalog-cache-invalidation.ts +20 -1
- package/src/core/catalog-revision.ts +110 -0
- package/src/core/create-core-server.ts +258 -79
- package/src/core/create-core-services.ts +302 -81
- package/src/core/lifecycle.ts +312 -0
- package/src/core/public-config.ts +86 -0
- package/src/core/readiness.ts +123 -0
- package/src/core-config.ts +70 -4
- package/src/index.ts +15 -0
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +362 -0
- package/src/modules/access/__tests__/access-control.atref-batch.test.ts +2 -1
- package/src/modules/access/__tests__/access-control.atref-cache.test.ts +46 -22
- package/src/modules/access/__tests__/access-control.deny-dependents.test.ts +215 -0
- package/src/modules/access/__tests__/access-control.download-read.test.ts +268 -0
- package/src/modules/access/__tests__/access-control.everyone-read.test.ts +145 -0
- package/src/modules/access/__tests__/access-control.group-read.test.ts +163 -0
- package/src/modules/access/__tests__/access-control.invalidate-race.test.ts +2 -0
- package/src/modules/access/__tests__/access-control.platform-restore.test.ts +152 -0
- package/src/modules/access/__tests__/access-control.prospective.test.ts +189 -0
- package/src/modules/access/__tests__/access-control.read-batch.test.ts +2 -1
- package/src/modules/access/__tests__/access-control.service.test.ts +123 -78
- package/src/modules/access/__tests__/access-groups.test.ts +47 -14
- package/src/modules/access/__tests__/access-md-format.test.ts +2 -1
- package/src/modules/access/__tests__/access-mutation.service.test.ts +52 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +2 -0
- package/src/modules/access/__tests__/access-personal-plugin.test.ts +153 -0
- package/src/modules/access/__tests__/access-plugin-principals.test.ts +18 -1
- package/src/modules/access/__tests__/access-restrict-here.test.ts +450 -0
- package/src/modules/access/__tests__/access.routes.batch.test.ts +139 -0
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +394 -0
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -2
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +3 -2
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +234 -0
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +216 -0
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +7 -2
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +360 -0
- package/src/modules/access/__tests__/change-read-gate.test.ts +272 -0
- package/src/modules/access/__tests__/creator-access.test.ts +81 -83
- package/src/modules/access/__tests__/grant-sources.test.ts +3 -2
- package/src/modules/access/__tests__/groups-admin.service.test.ts +6 -5
- package/src/modules/access/__tests__/roles-admin.security.test.ts +196 -0
- package/src/modules/access/__tests__/roles-admin.service.test.ts +127 -2
- package/src/modules/access/__tests__/roles-capabilities.test.ts +5 -4
- package/src/modules/access/__tests__/roles.routes.test.ts +5 -2
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +402 -0
- package/src/modules/access/__tests__/users-db-double.ts +63 -0
- package/src/modules/access/access-control.interface.ts +251 -11
- package/src/modules/access/access-control.service.ts +719 -164
- package/src/modules/access/access-mutation.service.ts +182 -13
- package/src/modules/access/access-view.ts +316 -0
- package/src/modules/access/access.routes.ts +293 -95
- package/src/modules/access/admin-locked-commit.ts +12 -14
- package/src/modules/access/admin-route-helpers.ts +4 -4
- package/src/modules/access/change-read-gate.ts +148 -0
- package/src/modules/access/creator-access.ts +89 -124
- package/src/modules/access/directory-sync-bot.ts +4 -1
- package/src/modules/access/groups-admin.service.ts +3 -3
- package/src/modules/access/reference-scan.ts +5 -5
- package/src/modules/access/roles-admin.service.ts +94 -15
- package/src/modules/access/synced-groups-committer.ts +10 -15
- package/src/modules/access/synced-groups-writer.ts +3 -12
- package/src/modules/access/user-access-removal.service.ts +711 -0
- package/src/modules/access-model/__tests__/access-splice.test.ts +63 -1
- package/src/modules/access-model/__tests__/frontmatter-fences.test.ts +71 -0
- package/src/modules/access-model/__tests__/roles-yaml-guard.test.ts +131 -0
- package/src/modules/access-model/access-errors.ts +56 -15
- package/src/modules/access-model/access-grammar.ts +85 -48
- package/src/modules/access-model/access-splice.ts +18 -18
- package/src/modules/access-model/access-template.ts +44 -0
- package/src/modules/access-model/change-gate.ts +80 -0
- package/src/modules/access-model/creator.ts +18 -21
- package/src/modules/access-model/frontmatter-lines.ts +98 -0
- package/src/modules/access-model/plugin-principals.ts +12 -19
- package/src/modules/access-model/roles-yaml-guard.ts +182 -4
- package/src/modules/admin/admin-access.service.ts +6 -2
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +100 -0
- package/src/modules/agent-instructions/__tests__/compose.test.ts +256 -0
- package/src/modules/agent-instructions/__tests__/read-preamble.test.ts +135 -0
- package/src/modules/agent-instructions/agent-instructions.routes.ts +41 -0
- package/src/modules/agent-instructions/compose.ts +271 -0
- package/src/modules/agent-instructions/index.ts +14 -0
- package/src/modules/agent-instructions/read-preamble.ts +88 -0
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +209 -0
- package/src/modules/auth/__tests__/account.routes.test.ts +178 -2
- package/src/modules/auth/__tests__/auth.middleware.test.ts +78 -0
- package/src/modules/auth/__tests__/auth.service.test.ts +338 -5
- package/src/modules/auth/__tests__/oidc-auth-provider.test.ts +352 -12
- package/src/modules/auth/__tests__/onboarding-done.route.test.ts +3 -1
- package/src/modules/auth/account-erasure.service.ts +117 -10
- package/src/modules/auth/account.routes.ts +115 -14
- package/src/modules/auth/auth.routes.ts +20 -7
- package/src/modules/auth/auth.service.ts +187 -28
- package/src/modules/auth/oidc-auth-provider.ts +120 -22
- package/src/modules/code-mode/__tests__/code-mode.tool.test.ts +109 -1
- package/src/modules/code-mode/code-mode.tool.ts +13 -2
- package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +78 -0
- package/src/modules/connection-probe/connection-probe.service.ts +59 -7
- package/src/modules/database/__tests__/advisory-lease.test.ts +152 -0
- package/src/modules/database/__tests__/advisory-lock.test.ts +147 -0
- package/src/modules/database/advisory-lock.ts +346 -0
- package/src/modules/database/connection.ts +9 -1
- package/src/modules/database/core-schema.ts +123 -0
- package/src/modules/database/migrate.ts +27 -6
- package/src/modules/declared-variables/declared-variables.routes.ts +6 -3
- package/src/modules/diff/__tests__/diff.service.seed-atomicity.test.ts +3 -0
- package/src/modules/diff/__tests__/diff.service.test.ts +3 -0
- package/src/modules/diff/diff.routes.ts +2 -4
- package/src/modules/diff/diff.service.ts +75 -79
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +472 -9
- package/src/modules/kb-fs/__tests__/node-fs.test.ts +409 -0
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +210 -1
- package/src/modules/{workspace → kb-fs}/bevel-ignore.ts +22 -15
- package/src/modules/kb-fs/file-change-notifier.ts +4 -1
- package/src/modules/kb-fs/git-guarded-filesystem.ts +123 -0
- package/src/modules/kb-fs/locking-filesystem.ts +399 -109
- package/src/modules/kb-fs/node-fs.ts +165 -0
- package/src/modules/kb-fs/read-only-filesystem.ts +18 -9
- package/src/modules/kb-fs/repo-path.ts +213 -3
- package/src/modules/kb-sync/kb-sync.routes.ts +5 -2
- package/src/modules/kb-sync/kb-sync.service.ts +8 -5
- package/src/modules/marketplace/__tests__/github-facade.test.ts +134 -2
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +2 -1
- package/src/modules/marketplace/__tests__/marketplace-repo.head.test.ts +47 -0
- package/src/modules/marketplace/git-http.routes.ts +7 -4
- package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +35 -3
- package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +55 -0
- package/src/modules/marketplace/github-facade/github-facade.routes.ts +32 -6
- package/src/modules/marketplace/github-facade/github-facade.service.ts +80 -19
- package/src/modules/marketplace/github-facade/index.ts +1 -0
- package/src/modules/marketplace/marketplace-repo.service.ts +23 -8
- package/src/modules/mcp/__tests__/downstream-pool.test.ts +278 -0
- package/src/modules/mcp/__tests__/downstream-token-refresh.test.ts +178 -0
- package/src/modules/mcp/__tests__/fake-downstream-mcp-server.ts +156 -0
- package/src/modules/mcp/__tests__/first-call-probe.cli-args.test.ts +178 -0
- package/src/modules/mcp/__tests__/first-call-probe.test.ts +414 -0
- package/src/modules/mcp/__tests__/manual-failure-memo.test.ts +98 -6
- package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +8 -5
- package/src/modules/mcp/__tests__/mcp-routes-harness.ts +1 -3
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +1055 -59
- package/src/modules/mcp/__tests__/mcp.routes.stateless.test.ts +182 -0
- package/src/modules/mcp/__tests__/mcp.service.test.ts +274 -6
- package/src/modules/mcp/__tests__/surface-log-throttle.test.ts +169 -0
- package/src/modules/mcp/downstream-pool.ts +256 -0
- package/src/modules/mcp/downstream-token-refresh.ts +170 -0
- package/src/modules/mcp/first-call-probe.cli-args.ts +159 -0
- package/src/modules/mcp/first-call-probe.cli.ts +60 -0
- package/src/modules/mcp/first-call-probe.ts +418 -0
- package/src/modules/mcp/manual-failure-memo.ts +81 -23
- package/src/modules/mcp/mcp-auth.middleware.ts +25 -16
- package/src/modules/mcp/mcp.routes.ts +376 -482
- package/src/modules/mcp/mcp.service.ts +846 -176
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +5 -2
- package/src/modules/mcp/oauth/oauth-consent.routes.ts +4 -4
- package/src/modules/mcp/surface-log-throttle.ts +120 -0
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +10 -7
- package/src/modules/plugins/__tests__/bundle-dialect.test.ts +165 -0
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +139 -10
- package/src/modules/plugins/__tests__/fake-join-request-store.ts +189 -0
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +608 -0
- package/src/modules/plugins/__tests__/plugin-creation-display-name.test.ts +241 -0
- package/src/modules/plugins/__tests__/plugin-index.service.test.ts +148 -7
- package/src/modules/plugins/__tests__/plugin-links.service.test.ts +10 -13
- package/src/modules/plugins/__tests__/plugin-names.test.ts +77 -0
- package/src/modules/plugins/__tests__/plugin-provision.service.test.ts +129 -19
- package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +91 -29
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +370 -19
- package/src/modules/plugins/__tests__/plugins.tools.test.ts +131 -0
- package/src/modules/plugins/__tests__/teams.routes.test.ts +248 -0
- package/src/modules/plugins/compile/compile-marketplace.ts +143 -46
- package/src/modules/plugins/compile/marketplace-compiler.service.ts +8 -7
- package/src/modules/plugins/discovery/__tests__/kb-plugin-source.test.ts +56 -20
- package/src/modules/plugins/discovery/bundle-dialect/bundle.source.ts +30 -9
- package/src/modules/plugins/discovery/bundle-dialect/registry.ts +93 -18
- package/src/modules/plugins/discovery/kb-plugin-source.ts +10 -7
- package/src/modules/plugins/discovery/native.source.ts +21 -3
- package/src/modules/plugins/discovery/plugin-source.ts +17 -3
- package/src/modules/plugins/index.ts +16 -3
- package/src/modules/plugins/join-request-jobs.service.ts +675 -0
- package/src/modules/plugins/join-request-records.store.ts +353 -0
- package/src/modules/plugins/join-requests.service.ts +7 -4
- package/src/modules/plugins/plugin-links.service.ts +4 -17
- package/src/modules/plugins/plugin-links.ts +6 -3
- package/src/modules/plugins/plugin-provision.service.ts +209 -37
- package/src/modules/plugins/plugin-rename.service.ts +21 -9
- package/src/modules/plugins/plugins.contract.ts +52 -4
- package/src/modules/plugins/plugins.routes.ts +204 -124
- package/src/modules/plugins/plugins.service.ts +92 -18
- package/src/modules/plugins/plugins.tools.ts +88 -0
- package/src/modules/plugins/teams.routes.ts +129 -0
- package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +359 -15
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +248 -0
- package/src/modules/secrets-vault/__tests__/namespace-secrets.test.ts +202 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +217 -35
- package/src/modules/secrets-vault/index.ts +1 -0
- package/src/modules/secrets-vault/mcp-oauth-discovery.service.ts +6 -3
- package/src/modules/secrets-vault/secrets-variable-loader.ts +4 -4
- package/src/modules/secrets-vault/secrets-vault.contract.ts +93 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +99 -38
- package/src/modules/settings/__tests__/connection-check.test.ts +233 -0
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +188 -6
- package/src/modules/settings/__tests__/git-root-folders.test.ts +247 -0
- package/src/modules/settings/__tests__/oidc-check.test.ts +185 -0
- package/src/modules/settings/__tests__/setup.routes.boot-failure.test.ts +119 -0
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +170 -0
- package/src/modules/settings/__tests__/setup.routes.oidc.test.ts +555 -0
- package/src/modules/settings/__tests__/setup.routes.test.ts +667 -16
- package/src/modules/settings/connection-check.ts +351 -0
- package/src/modules/settings/deployment-settings.service.ts +403 -57
- package/src/modules/settings/git-root-folders.ts +171 -0
- package/src/modules/settings/oidc-check.ts +229 -0
- package/src/modules/settings/setup.routes.ts +456 -110
- package/src/modules/skills/__tests__/allowed-tools-check.test.ts +224 -0
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +210 -0
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +3 -3
- package/src/modules/skills/__tests__/skills.routes.warnings.test.ts +91 -0
- package/src/modules/skills/__tests__/skills.service.test.ts +223 -2
- package/src/modules/skills/allowed-tools-check.ts +352 -0
- package/src/modules/skills/index.ts +4 -0
- package/src/modules/skills/pending-skills.service.ts +21 -82
- package/src/modules/skills/skill-access-requests.routes.ts +10 -6
- package/src/modules/skills/skills.contract.ts +43 -11
- package/src/modules/skills/skills.routes.ts +16 -1
- package/src/modules/skills/skills.service.ts +214 -84
- package/src/modules/skills/skills.tools.ts +43 -5
- package/src/modules/tool-auth/__tests__/connection-key-rejection.test.ts +192 -0
- package/src/modules/tool-auth/__tests__/connection-keys-admin.routes.test.ts +116 -0
- package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +124 -0
- package/src/modules/tool-auth/connection-key-rejection.ts +25 -0
- package/src/modules/tool-auth/connection-keys-admin.routes.ts +76 -0
- package/src/modules/tool-auth/external-api-key.interface.ts +56 -3
- package/src/modules/tool-auth/external-api-key.service.ts +73 -25
- package/src/modules/tool-auth/internal-token.service.ts +5 -2
- package/src/modules/tool-auth/key-or-session.middleware.ts +45 -0
- package/src/modules/tool-auth/tool-auth.middleware.ts +16 -7
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +228 -0
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +33 -4
- package/src/modules/tool-helpers/tool-context.ts +46 -7
- package/src/modules/tool-helpers/tool-handler.ts +23 -5
- package/src/modules/tool-helpers/tool.contract.ts +5 -0
- package/src/modules/tool-manuals/__tests__/mcp-server-edit.service.test.ts +2 -1
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +411 -0
- package/src/modules/tool-manuals/__tests__/tool-delete.route.test.ts +133 -0
- package/src/modules/tool-manuals/__tests__/tool-delete.service.test.ts +469 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.archive.route.test.ts +21 -2
- package/src/modules/tool-manuals/__tests__/tool-manuals.cli.test.ts +9 -4
- package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +6 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.routes.test.ts +254 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.test.ts +577 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +6 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.pending.route.test.ts +102 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +285 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +178 -2
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +114 -2
- package/src/modules/tool-manuals/index.ts +3 -0
- package/src/modules/tool-manuals/mcp-json-discovery.ts +13 -10
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +11 -14
- package/src/modules/tool-manuals/pending-tools.service.ts +179 -0
- package/src/modules/tool-manuals/tool-delete.service.ts +401 -0
- package/src/modules/tool-manuals/tool-manuals.contract.ts +165 -0
- package/src/modules/tool-manuals/tool-manuals.routes.ts +138 -54
- package/src/modules/tool-manuals/tool-manuals.service.ts +432 -87
- package/src/modules/tool-manuals/tool-manuals.tools.ts +81 -6
- package/src/modules/workflow/__tests__/apply-failure.test.ts +1038 -0
- package/src/modules/workflow/__tests__/event-bus.test.ts +61 -9
- package/src/modules/workflow/__tests__/fake-file-lock-db.ts +199 -0
- package/src/modules/workflow/__tests__/file-lock.service.path-identity.test.ts +237 -0
- package/src/modules/workflow/__tests__/format-affected-owners.test.ts +18 -0
- package/src/modules/workflow/__tests__/merge-announces-tree.test.ts +220 -0
- package/src/modules/workflow/__tests__/pending-commits.worker.concurrency.test.ts +187 -0
- package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +2 -0
- package/src/modules/workflow/__tests__/sanitize-error.test.ts +10 -0
- package/src/modules/workflow/__tests__/workflow.routes.folder-proposals.test.ts +128 -0
- package/src/modules/workflow/__tests__/workflow.routes.fork-point-file.test.ts +149 -0
- package/src/modules/workflow/__tests__/workflow.routes.lock-path.test.ts +305 -0
- package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +2 -0
- package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +2 -0
- package/src/modules/workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts +2 -0
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +294 -25
- package/src/modules/workflow/__tests__/workflow.service.folder-proposals.test.ts +564 -0
- package/src/modules/workflow/__tests__/workflow.service.platform-restore.test.ts +135 -0
- package/src/modules/workflow/__tests__/workflow.service.read-gate.test.ts +172 -0
- package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +14 -0
- package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +5 -0
- package/src/modules/workflow/__tests__/workflow.service.update-from-target.test.ts +281 -0
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +158 -7
- package/src/modules/workflow/agent-tools/workflow.tools.ts +93 -64
- package/src/modules/workflow/event-bus.ts +26 -28
- package/src/modules/workflow/events.routes.ts +56 -21
- package/src/modules/workflow/file-lock.service.ts +27 -4
- package/src/modules/workflow/git/__tests__/change-request-link.test.ts +43 -0
- package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +1 -0
- package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +238 -1
- package/src/modules/workflow/git/__tests__/git.service.forkPoint.test.ts +245 -0
- package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +35 -0
- package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +149 -0
- package/src/modules/workflow/git/__tests__/git.service.revertPathsAndPush.test.ts +177 -0
- package/src/modules/workflow/git/__tests__/node-git-runner.test.ts +114 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.getPrDetail.test.ts +69 -2
- package/src/modules/workflow/git/__tests__/pull-request.service.list-fetch.test.ts +121 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.placeholder.test.ts +79 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.test.ts +1 -1
- package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +1 -1
- package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-update.test.ts +111 -0
- package/src/modules/workflow/git/change-request-link.ts +35 -0
- package/src/modules/workflow/git/git-version.ts +5 -2
- package/src/modules/workflow/git/git.service.ts +684 -144
- package/src/modules/workflow/git/node-git-runner.ts +315 -0
- package/src/modules/workflow/git/pull-request.service.ts +179 -27
- package/src/modules/workflow/pending-commits.service.ts +26 -7
- package/src/modules/workflow/pending-commits.worker.ts +114 -69
- package/src/modules/workflow/recovery-bot.ts +4 -1
- package/src/modules/workflow/review-workflow/__tests__/approval-states.test.ts +180 -1
- package/src/modules/workflow/review-workflow/__tests__/cancel-pr.test.ts +1 -1
- package/src/modules/workflow/review-workflow/__tests__/carry-approvals-forward.test.ts +520 -0
- package/src/modules/workflow/review-workflow/__tests__/erase-approver.test.ts +84 -0
- package/src/modules/workflow/review-workflow/__tests__/merge-gate.test.ts +89 -77
- package/src/modules/workflow/review-workflow/approval-lock.ts +122 -0
- package/src/modules/workflow/review-workflow/review-workflow.interface.ts +59 -7
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +309 -105
- package/src/modules/workflow/sanitize-error.ts +9 -4
- package/src/modules/workflow/workflow.routes.ts +273 -29
- package/src/modules/workflow/workflow.service.ts +1087 -171
- package/src/modules/workspace/__tests__/empty-dirs.test.ts +44 -0
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +301 -0
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +792 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +464 -0
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +139 -0
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +189 -37
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +51 -11
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +161 -0
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +109 -10
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +624 -0
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +409 -0
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +327 -0
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +25 -6
- package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +109 -0
- package/src/modules/workspace/__tests__/workspace.service.list-cloned.test.ts +6 -5
- package/src/modules/workspace/__tests__/workspace.service.move-never-overwrites.test.ts +218 -0
- package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +56 -1
- package/src/modules/workspace/__tests__/workspace.service.test.ts +811 -42
- package/src/modules/workspace/__tests__/workspace.service.unknown-branch.test.ts +197 -0
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +128 -0
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +212 -0
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +2632 -110
- package/src/modules/workspace/__tests__/write-denial.test.ts +75 -0
- package/src/modules/workspace/empty-dirs.ts +79 -0
- package/src/modules/workspace/file-readers/README.md +32 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +59 -2
- package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +133 -4
- package/src/modules/workspace/file-readers/__tests__/fixtures/soft-break.docx +0 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/tab.docx +0 -0
- package/src/modules/workspace/file-readers/content-mode.ts +87 -0
- package/src/modules/workspace/file-readers/doc-extract.service.ts +4 -1
- package/src/modules/workspace/file-readers/doc-extract.types.ts +8 -4
- package/src/modules/workspace/file-readers/document-reader.ts +6 -0
- package/src/modules/workspace/file-readers/extract-docx.ts +6 -0
- package/src/modules/workspace/file-readers/file-reader.registry.ts +9 -1
- package/src/modules/workspace/file-readers/file-reader.ts +27 -6
- package/src/modules/workspace/file-readers/image-reader.ts +10 -5
- package/src/modules/workspace/file-readers/ooxml-text.ts +38 -2
- package/src/modules/workspace/file-readers/text-reader.ts +61 -4
- package/src/modules/workspace/git-internals.middleware.ts +86 -0
- package/src/modules/workspace/not-found.ts +119 -0
- package/src/modules/workspace/session-ontology.gate.ts +1 -1
- package/src/modules/workspace/startup/__tests__/beside-checkout.test.ts +181 -0
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +361 -0
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +53 -16
- package/src/modules/workspace/startup/beside-checkout.ts +112 -0
- package/src/modules/workspace/startup/kb-git.ts +43 -36
- package/src/modules/workspace/startup/kb-startup-runner.ts +303 -63
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +1215 -73
- package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +460 -417
- package/src/modules/workspace/startup/steps/personal-spaces.step.ts +191 -0
- package/src/modules/workspace/startup/steps/plugin-display-names.step.ts +169 -0
- package/src/modules/workspace/startup/steps/plugin-layout.ts +110 -0
- package/src/modules/workspace/startup/steps/plugin-manifests.step.ts +46 -85
- package/src/modules/workspace/startup/steps/roles-yaml.step.ts +6 -12
- package/src/modules/workspace/startup/steps/seed-tree.ts +159 -78
- package/src/modules/workspace/startup/steps/template-files.step.ts +492 -141
- package/src/modules/workspace/startup/steps/template-source.ts +168 -0
- package/src/modules/workspace/workspace.routes.ts +687 -257
- package/src/modules/workspace/workspace.service.ts +991 -303
- package/src/modules/workspace/workspace.tools.ts +1787 -180
- package/src/modules/workspace/write-denial.ts +189 -0
- package/src/shared/__tests__/canonical-file-identity.test.ts +154 -0
- package/src/shared/__tests__/email-identity.test.ts +35 -0
- package/src/shared/__tests__/filename.test.ts +0 -0
- package/src/shared/__tests__/frontmatter-id.test.ts +5 -0
- package/src/shared/__tests__/git-failure.test.ts +198 -0
- package/src/shared/__tests__/git-internals.test.ts +115 -0
- package/src/shared/__tests__/http-errors.test.ts +42 -0
- package/src/shared/__tests__/logging.test.ts +185 -0
- package/src/shared/__tests__/path-containment.test.ts +60 -0
- package/src/shared/__tests__/pending-proposals.readAt.test.ts +102 -0
- package/src/shared/__tests__/printable.test.ts +64 -0
- package/src/shared/__tests__/redact-secret.test.ts +122 -0
- package/src/shared/__tests__/rename-no-replace.test.ts +466 -0
- package/src/shared/__tests__/ssrf.test.ts +20 -0
- package/src/shared/canonical-file-identity.ts +92 -0
- package/src/shared/domain-errors.ts +149 -0
- package/src/shared/email-identity.ts +38 -0
- package/src/shared/fs.contract.ts +225 -0
- package/src/shared/git-failure.ts +196 -0
- package/src/shared/git-internals.ts +124 -0
- package/src/shared/git.contract.ts +170 -0
- package/src/shared/http-errors.ts +36 -0
- package/src/shared/logger.contract.ts +141 -0
- package/src/shared/logging.ts +96 -0
- package/src/shared/path-containment.ts +34 -0
- package/src/shared/pending-proposals.ts +161 -0
- package/src/shared/printable.ts +68 -0
- package/src/shared/redact-secret.ts +118 -0
- package/src/shared/rename-no-replace.ts +386 -0
- package/src/shared/ssrf.ts +44 -16
- package/src/version.ts +10 -6
- package/src/modules/diff/diff-paths.ts +0 -9
- package/src/modules/mcp/__tests__/mcp-session-store.test.ts +0 -151
- package/src/modules/mcp/__tests__/mcp.routes.session.test.ts +0 -226
- package/src/modules/mcp/mcp-session-store.ts +0 -162
- package/src/shared/__tests__/fs-walk.test.ts +0 -63
- package/src/shared/__tests__/kb-walk.test.ts +0 -107
- package/src/shared/fs-errors.ts +0 -10
- package/src/shared/fs-walk.ts +0 -45
- package/src/shared/hash-email.ts +0 -14
- package/src/shared/kb-walk.ts +0 -95
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { KNOWLEDGE_BASE_DIR, PLUGINS_DIR, SKILLS_DIR,
|
|
4
|
-
import { IGNORE_FILENAME } from '
|
|
3
|
+
import { AGENTS_FILE, KNOWLEDGE_BASE_DIR, LEGACY_AGENTS_FILE, PLUGINS_DIR, SKILLS_DIR, agentsFilePointerSentence, gitignoreLiteral, mentionsAgentsFile, retargetAgentsFilePointer, validateKbRootName, } from '@bevel-software/platform-shared';
|
|
4
|
+
import { IGNORE_FILENAME, isAbsence } from '../../../../shared/fs.contract.js';
|
|
5
|
+
import { PREAMBLE_FILE } from '../../../agent-instructions/compose.js';
|
|
6
|
+
import { TemplateSource } from './template-source.js';
|
|
7
|
+
import { hasGitInternalsSegment } from '../../../../shared/git-internals.js';
|
|
8
|
+
/** Root-anchored so a knowledge folder may still contain an ordinary namesake. */
|
|
9
|
+
const PREAMBLE_IGNORE_PATTERN = `/${PREAMBLE_FILE}`;
|
|
5
10
|
/**
|
|
6
11
|
* The **required scaffolding** — the minimum an operational KB needs. Any of
|
|
7
12
|
* these missing from a protected branch are added at the startup phase; the
|
|
8
13
|
* sample ontology is NOT (it only seeds a fully-empty repo, see seed-tree.ts).
|
|
9
14
|
*
|
|
10
15
|
* Two kinds:
|
|
11
|
-
* - {@link
|
|
16
|
+
* - {@link requiredFiles}: repo-root files added when the file is missing.
|
|
12
17
|
* - Reserved root dirs (core's two plus a distribution's `extraRootDirs`):
|
|
13
18
|
* when a dir is entirely absent it's created by adding its `<dir>/.gitkeep`.
|
|
14
19
|
* Keyed on the *directory's* existence, not the `.gitkeep` file — so a
|
|
@@ -19,24 +24,55 @@ import { IGNORE_FILENAME } from '../../bevel-ignore.js';
|
|
|
19
24
|
* generated from `ADMIN_EMAIL` (see roles-yaml.step.ts), so a repo can't be
|
|
20
25
|
* seeded with a stale hard-coded Admin list.
|
|
21
26
|
*/
|
|
22
|
-
export
|
|
27
|
+
export function requiredFiles() {
|
|
28
|
+
return [
|
|
29
|
+
'access.md',
|
|
30
|
+
// The managed agent guide, under whatever this deployment calls it. The
|
|
31
|
+
// PACKAGED template still carries it as `AGENTS.md` — one file, one
|
|
32
|
+
// spelling in the tarball — so the write target and the template source
|
|
33
|
+
// part company here and nowhere else (see {@link templateNameOf}).
|
|
34
|
+
AGENTS_FILE,
|
|
35
|
+
'.bevelignore',
|
|
36
|
+
'.gitignore',
|
|
37
|
+
// The deployment preamble every connected agent is told at session start
|
|
38
|
+
// (see modules/agent-instructions). Seeded ONCE and never refreshed: the
|
|
39
|
+
// content is the admin's, and the shipped template is one HTML comment, so
|
|
40
|
+
// a never-edited file sends nothing of its own.
|
|
41
|
+
PREAMBLE_FILE,
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The template's own name for a required file. The guide is the one file whose
|
|
46
|
+
* name on disk is a deployment's choice while its name in the template is
|
|
47
|
+
* fixed; everything else is spelled the same on both sides.
|
|
48
|
+
*/
|
|
49
|
+
function templateNameOf(repoRel) {
|
|
50
|
+
return repoRel === AGENTS_FILE ? LEGACY_AGENTS_FILE : repoRel;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The sentence the managed guide carries about itself, and the ONLY thing that
|
|
54
|
+
* makes a root `AGENTS.md` provably the platform's rather than the customer's.
|
|
55
|
+
*
|
|
56
|
+
* Matched on this one phrase rather than on the whole header: the lines around
|
|
57
|
+
* it have changed between releases (they name the configured file now), and a
|
|
58
|
+
* knowledge base seeded by any of those releases is still ours to remove. A
|
|
59
|
+
* customer file would have to quote the platform's own claim about itself
|
|
60
|
+
* verbatim to be mistaken for one, and the consequence of the mistake is a
|
|
61
|
+
* deletion — which is why nothing looser will do.
|
|
62
|
+
*/
|
|
63
|
+
const MANAGED_GUIDE_MARKER = '**This file is managed by the platform.**';
|
|
64
|
+
/** Whether `text` is a copy of the platform's managed guide, of any vintage. */
|
|
65
|
+
export function isManagedGuide(text) {
|
|
66
|
+
return text.includes(MANAGED_GUIDE_MARKER);
|
|
67
|
+
}
|
|
23
68
|
/**
|
|
24
69
|
* Repo-root files the startup phase GENERATES rather than copies — today just
|
|
25
70
|
* `roles.yaml`, rendered from `ADMIN_EMAIL` (see roles-yaml.step.ts and
|
|
26
71
|
* seed-tree.ts). Reserved-root validation must treat these exactly like
|
|
27
|
-
* {@link
|
|
72
|
+
* {@link requiredFiles}: a root claiming a generated name is the same silent
|
|
28
73
|
* typo with the same silent outcome.
|
|
29
74
|
*/
|
|
30
75
|
export const GENERATED_FILES = ['roles.yaml'];
|
|
31
|
-
/**
|
|
32
|
-
* Destination name → the packable spelling the template may carry instead.
|
|
33
|
-
* npm strips every file named `.gitignore` from a published tarball, so the
|
|
34
|
-
* packaged template cannot ship one under its real name (see
|
|
35
|
-
* {@link templateSource}).
|
|
36
|
-
*/
|
|
37
|
-
export const TEMPLATE_SOURCE_FALLBACKS = {
|
|
38
|
-
'.gitignore': 'gitignore.template',
|
|
39
|
-
};
|
|
40
76
|
/**
|
|
41
77
|
* The three roots CORE gives a knowledge base: the ontologies, the shared
|
|
42
78
|
* skills, and the plugins that hold tools and link the skills.
|
|
@@ -71,11 +107,12 @@ function assertRootSegment(dir) {
|
|
|
71
107
|
if (!dir || dir === '.' || dir === '..' || dir.includes('/') || dir.includes('\\') || path.isAbsolute(dir)) {
|
|
72
108
|
throw new Error(`Reserved KB root must be a single path segment (no separators, no ".."); got "${dir}"`);
|
|
73
109
|
}
|
|
74
|
-
//
|
|
75
|
-
// corrupt the clone's own metadata.
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
110
|
+
// The git folder can never be a KB root: writing `<dir>/.gitkeep` under it
|
|
111
|
+
// would corrupt the clone's own metadata. In ANY spelling that names it —
|
|
112
|
+
// any case, a trailing dot or space Windows collapses, a percent-encoded
|
|
113
|
+
// form — the one rule every path check uses (`shared/git-internals.ts`).
|
|
114
|
+
if (hasGitInternalsSegment(dir)) {
|
|
115
|
+
throw new Error(`Reserved KB root must not name the git folder (".git" in any spelling); got "${dir}"`);
|
|
79
116
|
}
|
|
80
117
|
}
|
|
81
118
|
/**
|
|
@@ -94,55 +131,17 @@ export function reservedRootDirs(extraRootDirs) {
|
|
|
94
131
|
// outcome: the file is laid down first, so the dir check finds the path
|
|
95
132
|
// taken and skips it, and the directory the caller asked for never appears
|
|
96
133
|
// with nothing said about why.
|
|
97
|
-
if (
|
|
134
|
+
if (requiredFiles().includes(dir) || GENERATED_FILES.includes(dir)) {
|
|
98
135
|
throw new Error(`Reserved KB root "${dir}" collides with a required or generated file of the same name`);
|
|
99
136
|
}
|
|
100
137
|
}
|
|
101
138
|
return [...coreRequiredDirs(), ...extraRootDirs];
|
|
102
139
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Where `relPath`'s template content actually lives. npm refuses to pack
|
|
105
|
-
* files named `.gitignore` — every such file is silently stripped from the
|
|
106
|
-
* published tarball — so the packaged template ships the KB's gitignore
|
|
107
|
-
* under a packable name and the seeder writes it to its real one. A
|
|
108
|
-
* template carrying the literal file (a distribution's own
|
|
109
|
-
* KB_TEMPLATE_DIR, or this repo's tree in a Docker build) wins outright:
|
|
110
|
-
* the mapping is a fallback, never a rename.
|
|
111
|
-
*/
|
|
112
|
-
export async function templateSource(templateDir, relPath) {
|
|
113
|
-
const direct = path.join(templateDir, relPath);
|
|
114
|
-
if (await exists(direct))
|
|
115
|
-
return direct;
|
|
116
|
-
const packable = TEMPLATE_SOURCE_FALLBACKS[relPath];
|
|
117
|
-
if (packable !== undefined) {
|
|
118
|
-
const fallback = path.join(templateDir, packable);
|
|
119
|
-
if (await exists(fallback))
|
|
120
|
-
return fallback;
|
|
121
|
-
}
|
|
122
|
-
return direct; // let the ENOENT surface under the name the caller asked for
|
|
123
|
-
}
|
|
124
|
-
async function exists(p) {
|
|
125
|
-
try {
|
|
126
|
-
await fs.access(p);
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/** `lstat` without the throw — null when nothing is at `p`. */
|
|
134
|
-
async function lstatOrNull(p) {
|
|
135
|
-
try {
|
|
136
|
-
return await fs.lstat(p);
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
140
|
/**
|
|
143
141
|
* The template top-up as an {@link OnServerStart} step: add any missing base
|
|
144
|
-
* scaffolding to every PROTECTED branch, and keep the managed
|
|
145
|
-
* current
|
|
142
|
+
* scaffolding to every PROTECTED branch, and keep the managed agent guide
|
|
143
|
+
* current — under whatever this deployment calls it, and taking its own
|
|
144
|
+
* stale `AGENTS.md` with it when that name was handed back to the customer. Drafts are deliberately out of scope — whatever the protected
|
|
146
145
|
* branches gain, drafts fork from; a scaffolding addition on a draft would
|
|
147
146
|
* surface as noise in its change request's diff. (Unlike the Groups→Plugins
|
|
148
147
|
* rename, a missing file diffs as one file, not the whole tree — so the
|
|
@@ -155,8 +154,10 @@ async function lstatOrNull(p) {
|
|
|
155
154
|
* contract for states a human must look at.
|
|
156
155
|
*/
|
|
157
156
|
export class TemplateFilesStep {
|
|
157
|
+
disk;
|
|
158
|
+
extraRootDirs;
|
|
159
|
+
agentsFileLink;
|
|
158
160
|
name = 'template-files';
|
|
159
|
-
requiredDirs;
|
|
160
161
|
/**
|
|
161
162
|
* @param extraRootDirs Additional root folders this distribution reserves,
|
|
162
163
|
* on top of core's two. Their `.gitkeep` is written
|
|
@@ -164,8 +165,22 @@ export class TemplateFilesStep {
|
|
|
164
165
|
* claim a root without also shipping a template entry
|
|
165
166
|
* for it.
|
|
166
167
|
*/
|
|
167
|
-
|
|
168
|
-
|
|
168
|
+
/**
|
|
169
|
+
* @param agentsFileLink Whether to keep the platform's pointer sentence in a
|
|
170
|
+
* customer-owned root `AGENTS.md` — a GETTER, because
|
|
171
|
+
* the setting behind it may be saved by the very
|
|
172
|
+
* first-run save that then runs this phase.
|
|
173
|
+
*/
|
|
174
|
+
constructor(disk, extraRootDirs = [], agentsFileLink = () => true) {
|
|
175
|
+
this.disk = disk;
|
|
176
|
+
this.extraRootDirs = extraRootDirs;
|
|
177
|
+
this.agentsFileLink = agentsFileLink;
|
|
178
|
+
// Validated NOW, so a bad extra fails at boot beside the rest of the
|
|
179
|
+
// wiring — but the list itself is NOT kept: the core roots are live
|
|
180
|
+
// bindings, and the save that completes first-run setup applies the
|
|
181
|
+
// admin's names after this step was built. A snapshot taken here
|
|
182
|
+
// scaffolded `Skills/` beside the `skills/` they had just chosen.
|
|
183
|
+
reservedRootDirs(extraRootDirs);
|
|
169
184
|
}
|
|
170
185
|
async run(ctx) {
|
|
171
186
|
for (const branch of await ctx.protectedBranches()) {
|
|
@@ -174,15 +189,23 @@ export class TemplateFilesStep {
|
|
|
174
189
|
return { outcome: 'ok' };
|
|
175
190
|
}
|
|
176
191
|
async topUp(templateDir, branch) {
|
|
192
|
+
// The template directory is runtime data (the start context's), the disk
|
|
193
|
+
// port is the injected dependency — bound together once here so nothing
|
|
194
|
+
// below has to carry either as an argument.
|
|
195
|
+
const templates = new TemplateSource(this.disk, templateDir);
|
|
177
196
|
const repoDir = await branch.repoDir();
|
|
178
197
|
const added = [];
|
|
179
|
-
|
|
198
|
+
// Read ONCE per branch: the name is a live binding, and a value re-read
|
|
199
|
+
// between the write and the ignore rule could disagree with itself.
|
|
200
|
+
const agentsFile = AGENTS_FILE;
|
|
201
|
+
const renamed = agentsFile !== LEGACY_AGENTS_FILE;
|
|
202
|
+
for (const rel of requiredFiles()) {
|
|
180
203
|
// `lstat`, not `exists`: a DIRECTORY or SYMLINK squatting a required
|
|
181
204
|
// file's name would read as "present", and a skip-if-present check
|
|
182
205
|
// would then report success over a knowledge base whose root access
|
|
183
206
|
// policy (say) cannot be read. Fail-closed, same as the reserved-root
|
|
184
207
|
// squatting check below: this is a state a human must fix.
|
|
185
|
-
const found = await lstatOrNull(path.join(repoDir, rel));
|
|
208
|
+
const found = await this.disk.lstatOrNull(path.join(repoDir, rel));
|
|
186
209
|
if (found) {
|
|
187
210
|
if (found.isFile())
|
|
188
211
|
continue;
|
|
@@ -190,31 +213,46 @@ export class TemplateFilesStep {
|
|
|
190
213
|
`(${found.isSymbolicLink() ? 'symlink' : found.isDirectory() ? 'directory' : 'special file'}). ` +
|
|
191
214
|
'Remove or rename it — the platform requires this name to be a readable file.');
|
|
192
215
|
}
|
|
193
|
-
let content = await
|
|
216
|
+
let content = await templates.read(templateNameOf(rel));
|
|
194
217
|
// The on-disk merge below only runs against an EXISTING ignore file; a
|
|
195
|
-
// freshly-declared one was merely assumed to carry the
|
|
218
|
+
// freshly-declared one was merely assumed to carry the guide's rule —
|
|
196
219
|
// true of the packaged template, not necessarily of a distribution's
|
|
197
220
|
// custom one. Make it true here, so the managed conventions doc is
|
|
198
|
-
// hidden from the file tree from the first boot either way.
|
|
221
|
+
// hidden from the file tree from the first boot either way. The same is
|
|
222
|
+
// true of the deployment preamble: it is edited through External agent
|
|
223
|
+
// access, not as an ordinary knowledge-base document.
|
|
199
224
|
// …and a template still shipping the skills rule an earlier release
|
|
200
225
|
// had (a distribution's copy, a stale packaged one) must not declare
|
|
201
226
|
// it: the on-disk reconciliation below never sees a file that was
|
|
202
227
|
// absent, so the declared content is reconciled here instead.
|
|
203
228
|
if (rel === IGNORE_FILENAME) {
|
|
204
|
-
|
|
229
|
+
// A template still shipping the unanchored preamble rule an earlier
|
|
230
|
+
// release had is respelled first, so the guarantee below adds nothing
|
|
231
|
+
// beside it.
|
|
232
|
+
content = withPlatformIgnorePatternRespelled(content, PREAMBLE_FILE, PREAMBLE_IGNORE_PATTERN);
|
|
233
|
+
content = withoutIgnoreLine(withoutPlatformIgnorePattern(withIgnorePattern(withIgnorePattern(content, gitignoreLiteral(agentsFile)), PREAMBLE_IGNORE_PATTERN), `${SKILLS_DIR}/`), `${PLUGINS_DIR}/`);
|
|
234
|
+
// …and a template (a distribution's, a stale packaged one) still
|
|
235
|
+
// hiding `AGENTS.md` while this deployment's guide is called something
|
|
236
|
+
// else would hide the CUSTOMER'S file from the first boot — the exact
|
|
237
|
+
// thing the rename exists to prevent.
|
|
238
|
+
if (renamed)
|
|
239
|
+
content = withoutPlatformAgentsRule(content);
|
|
205
240
|
}
|
|
206
241
|
branch.write(rel, content);
|
|
207
242
|
added.push(rel);
|
|
208
243
|
}
|
|
209
|
-
//
|
|
244
|
+
// The guide or mcp-description.md left VISIBLE by a stale `.bevelignore`
|
|
245
|
+
// is closed here — and
|
|
210
246
|
// UNCONDITIONALLY, not only when the file was just added: a KB whose
|
|
211
|
-
//
|
|
247
|
+
// guide predates the CLAUDE.md→AGENTS.md rename has an ignore file
|
|
212
248
|
// that lists the old name and knows nothing of the new one, so the
|
|
213
|
-
// conventions doc shows up in the file tree and the agent view.
|
|
249
|
+
// conventions doc shows up in the file tree and the agent view. A KB
|
|
250
|
+
// whose deployment has just RENAMED the guide is the same story one
|
|
251
|
+
// rename later: the rule names a file that is now the customer's.
|
|
214
252
|
// Idempotent: an ignore file already carrying the rule — or absent, in
|
|
215
253
|
// which case the template's copy declared above arrives with the rule in
|
|
216
254
|
// it — changes nothing and produces no note. Deliberately checked by
|
|
217
|
-
// LINE PRESENCE, not effective outcome: a later
|
|
255
|
+
// LINE PRESENCE, not effective outcome: a later `!<guide>` negation is
|
|
218
256
|
// the operator explicitly choosing to SHOW the file, and hiding it is a
|
|
219
257
|
// default this step provides, not a mandate it re-imposes every boot.
|
|
220
258
|
//
|
|
@@ -227,29 +265,151 @@ export class TemplateFilesStep {
|
|
|
227
265
|
// it, for the same reason the negation above is kept: the file is
|
|
228
266
|
// theirs. The Knowledge explorer never rendered the root and still does
|
|
229
267
|
// not. Spelled with the CONFIGURED root name, since a deployment may
|
|
230
|
-
// have renamed it.
|
|
231
|
-
//
|
|
232
|
-
//
|
|
233
|
-
|
|
234
|
-
//
|
|
268
|
+
// have renamed it.
|
|
269
|
+
//
|
|
270
|
+
// The plugins root follows the skills root: the same sidebar now draws
|
|
271
|
+
// it as a file tree too, so the rule that hid it since the first seed
|
|
272
|
+
// comes out. That one has no comment to know it by — it was in the
|
|
273
|
+
// template body from the start — so every line spelling it goes,
|
|
274
|
+
// whoever wrote it (see `withoutIgnoreLine`). ONE read-modify-write for
|
|
275
|
+
// all the rules: separate passes would each read the on-disk file and
|
|
276
|
+
// a later declared write would lose an earlier one's.
|
|
277
|
+
added.push(...(await this.reconcileIgnoreRules(repoDir, branch, {
|
|
278
|
+
// The preamble rule is respelled before it is added: a knowledge base
|
|
279
|
+
// that booted the release shipping the unanchored spelling carries the
|
|
280
|
+
// platform's own line, and that line hides a nested namesake too.
|
|
281
|
+
respell: [[PREAMBLE_FILE, PREAMBLE_IGNORE_PATTERN]],
|
|
282
|
+
// As a gitignore PATTERN: a guide name that reads as syntax there is
|
|
283
|
+
// escaped, or the rule would hide nothing.
|
|
284
|
+
add: [gitignoreLiteral(agentsFile), PREAMBLE_IGNORE_PATTERN],
|
|
285
|
+
drop: [`${SKILLS_DIR}/`],
|
|
286
|
+
dropEvery: [`${PLUGINS_DIR}/`],
|
|
287
|
+
// The guide's rule FOLLOWS its name. Once the guide is `HEXIS.md`, the
|
|
288
|
+
// root's `AGENTS.md` is the customer's own conventions file and they
|
|
289
|
+
// must be able to see and edit it in the app — so the platform's own
|
|
290
|
+
// line comes out, recognised the way the skills-root line was
|
|
291
|
+
// (see {@link withoutPlatformAgentsRule}); a rule an operator wrote by
|
|
292
|
+
// hand is theirs and stays.
|
|
293
|
+
dropAgentsRule: renamed,
|
|
294
|
+
})));
|
|
295
|
+
// The guide is MANAGED, not merely seeded: the platform owns its content,
|
|
235
296
|
// and a stale copy is replaced with the packaged template's every startup
|
|
236
297
|
// phase. The file's own header says so, which is what makes overwriting
|
|
237
298
|
// edits a stated contract instead of a surprise.
|
|
238
299
|
let agentsRefreshed = false;
|
|
239
|
-
if (!added.includes(
|
|
240
|
-
|
|
241
|
-
|
|
300
|
+
if (!added.includes(agentsFile) &&
|
|
301
|
+
(await templates.differsFrom(repoDir, agentsFile, LEGACY_AGENTS_FILE))) {
|
|
302
|
+
branch.write(agentsFile, await templates.read(LEGACY_AGENTS_FILE));
|
|
303
|
+
added.push(agentsFile);
|
|
242
304
|
agentsRefreshed = true;
|
|
243
305
|
}
|
|
306
|
+
// What becomes of the `AGENTS.md` the platform used to own, now that the
|
|
307
|
+
// guide lives somewhere else. Nothing at all while the name is the default.
|
|
308
|
+
if (renamed) {
|
|
309
|
+
added.push(...(await this.reconcileLegacyGuide(repoDir, branch, {
|
|
310
|
+
agentsFile,
|
|
311
|
+
// Only on the boot the rename lands — the boot that first writes the
|
|
312
|
+
// guide under its new name. Said every boot after, the "kept" note
|
|
313
|
+
// would caption commits about other things forever.
|
|
314
|
+
announceKept: added.includes(agentsFile),
|
|
315
|
+
})));
|
|
316
|
+
}
|
|
244
317
|
added.push(...this.ensureRequiredDirs(repoDir, branch, await this.missingDirs(repoDir)));
|
|
245
318
|
if (added.length === 0)
|
|
246
319
|
return;
|
|
247
320
|
// One honest line; it becomes the commit subject when this step is the
|
|
248
321
|
// first to dirty the branch.
|
|
249
322
|
branch.note(agentsRefreshed && added.length === 1
|
|
250
|
-
?
|
|
323
|
+
? `Update ${agentsFile} to the current platform template`
|
|
251
324
|
: `Add missing KB scaffolding: ${added.join(', ')}`);
|
|
252
325
|
}
|
|
326
|
+
/**
|
|
327
|
+
* The root `AGENTS.md` on a deployment whose guide is called something else:
|
|
328
|
+
* removed when the platform can PROVE it wrote it, otherwise left alone —
|
|
329
|
+
* and, while the admin keeps the link setting on, given the one sentence
|
|
330
|
+
* that points at the guide beside it.
|
|
331
|
+
*
|
|
332
|
+
* Removal is gated on the managed header and nothing else. An admin who
|
|
333
|
+
* renames the guide on a knowledge base the platform seeded would otherwise
|
|
334
|
+
* be left with stale platform content sitting under the very name they
|
|
335
|
+
* wanted for their own file; an admin who renames it on a repository whose
|
|
336
|
+
* `AGENTS.md` is their own must find that file byte-for-byte untouched. The
|
|
337
|
+
* header is the one fact that tells the two apart, so it is the one thing
|
|
338
|
+
* asked.
|
|
339
|
+
*
|
|
340
|
+
* The pointer is bounded by three conditions, all of them the customer's to
|
|
341
|
+
* control: the admin keeps the setting on, the file exists (one is NEVER
|
|
342
|
+
* created for this), and the guide's name appears nowhere in the text. That
|
|
343
|
+
* last one is a plain content search on purpose — a mention in the
|
|
344
|
+
* customer's own words, a link, a heading, all count, and the platform stays
|
|
345
|
+
* out of a file it does not own.
|
|
346
|
+
*
|
|
347
|
+
* Returns the paths changed, for the note.
|
|
348
|
+
*/
|
|
349
|
+
async reconcileLegacyGuide(repoDir, branch, opts) {
|
|
350
|
+
const legacyPath = path.join(repoDir, LEGACY_AGENTS_FILE);
|
|
351
|
+
// `lstat` first, and a REGULAR FILE or nothing at all.
|
|
352
|
+
//
|
|
353
|
+
// Nothing there is the ordinary case: no customer file means nothing to
|
|
354
|
+
// remove and nothing to point at the guide — the platform never creates an
|
|
355
|
+
// `AGENTS.md` for this.
|
|
356
|
+
//
|
|
357
|
+
// Anything that is not a plain file is left exactly as it is. A SYMLINK is
|
|
358
|
+
// the case that matters: reading one follows it, so a link pointing at a
|
|
359
|
+
// knowledge base's managed guide — or at any other file carrying the
|
|
360
|
+
// header — would read as "ours" and the removal would take the customer's
|
|
361
|
+
// entry; writing one follows it too, and the pointer sentence would land
|
|
362
|
+
// in a file at the other end that nobody asked us to edit. Links are never
|
|
363
|
+
// followed anywhere else in the platform, and they are not followed here.
|
|
364
|
+
// A directory under the name is the same answer for the same reason.
|
|
365
|
+
const found = await this.disk.lstatOrNull(legacyPath);
|
|
366
|
+
if (found === null || !found.isFile())
|
|
367
|
+
return [];
|
|
368
|
+
let current;
|
|
369
|
+
try {
|
|
370
|
+
current = await this.disk.readTextFile(legacyPath);
|
|
371
|
+
}
|
|
372
|
+
catch (err) {
|
|
373
|
+
// Gone between the probe and the read — a concurrent delete reads as the
|
|
374
|
+
// absence it is, on the same terms as the probe above.
|
|
375
|
+
if (isAbsence(err))
|
|
376
|
+
return [];
|
|
377
|
+
throw err;
|
|
378
|
+
}
|
|
379
|
+
if (isManagedGuide(current)) {
|
|
380
|
+
branch.remove(LEGACY_AGENTS_FILE);
|
|
381
|
+
branch.note(`Remove the platform-written AGENTS.md — the agent guide is now ${opts.agentsFile}`);
|
|
382
|
+
return [LEGACY_AGENTS_FILE];
|
|
383
|
+
}
|
|
384
|
+
if (opts.announceKept) {
|
|
385
|
+
branch.note('Keep AGENTS.md — it is not a platform template, so it is the knowledge base\'s own');
|
|
386
|
+
}
|
|
387
|
+
// The admin's consent gates every write below, this file being theirs.
|
|
388
|
+
if (!this.agentsFileLink())
|
|
389
|
+
return [];
|
|
390
|
+
// A sentence of OURS already in the file is updated rather than joined by
|
|
391
|
+
// a second one. The guide's name can be changed again, and after a second
|
|
392
|
+
// rename the sentence this step wrote last time points at a file that is
|
|
393
|
+
// no longer there — which asking "is the new name mentioned?" cannot see,
|
|
394
|
+
// because the old sentence does not mention it.
|
|
395
|
+
const retargeted = retargetAgentsFilePointer(current, opts.agentsFile);
|
|
396
|
+
if (retargeted !== null) {
|
|
397
|
+
if (retargeted === current)
|
|
398
|
+
return [];
|
|
399
|
+
branch.write(LEGACY_AGENTS_FILE, retargeted);
|
|
400
|
+
branch.note(`Point the sentence in AGENTS.md at ${opts.agentsFile}`);
|
|
401
|
+
return [LEGACY_AGENTS_FILE];
|
|
402
|
+
}
|
|
403
|
+
// Nothing of ours in there, so the question is the customer's own text.
|
|
404
|
+
// Asked through the shared reading, not a raw `includes`: the sentence
|
|
405
|
+
// spells the name escaped and percent-encoded, so on a punctuated name the
|
|
406
|
+
// copy written last boot need not carry the raw name at all.
|
|
407
|
+
if (mentionsAgentsFile(current, opts.agentsFile))
|
|
408
|
+
return [];
|
|
409
|
+
branch.write(LEGACY_AGENTS_FILE, withPointerSentence(current, opts.agentsFile));
|
|
410
|
+
branch.note(`Add a pointer to ${opts.agentsFile} at the end of AGENTS.md`);
|
|
411
|
+
return [LEGACY_AGENTS_FILE];
|
|
412
|
+
}
|
|
253
413
|
/**
|
|
254
414
|
* Which reserved roots are absent — and which are SQUATTED. `lstat`, not
|
|
255
415
|
* `exists`: `fs.access` answers "is there something here?", which is true of
|
|
@@ -263,8 +423,8 @@ export class TemplateFilesStep {
|
|
|
263
423
|
*/
|
|
264
424
|
async missingDirs(repoDir) {
|
|
265
425
|
const missing = [];
|
|
266
|
-
for (const rootDir of this.
|
|
267
|
-
const found = await lstatOrNull(path.join(repoDir, rootDir));
|
|
426
|
+
for (const rootDir of reservedRootDirs(this.extraRootDirs)) {
|
|
427
|
+
const found = await this.disk.lstatOrNull(path.join(repoDir, rootDir));
|
|
268
428
|
if (found) {
|
|
269
429
|
if (found.isDirectory())
|
|
270
430
|
continue;
|
|
@@ -290,68 +450,171 @@ export class TemplateFilesStep {
|
|
|
290
450
|
}
|
|
291
451
|
return added;
|
|
292
452
|
}
|
|
453
|
+
/**
|
|
454
|
+
* Reconcile the platform's OWN rules in `.bevelignore`: every `respell` pair
|
|
455
|
+
* rewritten in place, every `add` pattern guaranteed present as a line, every
|
|
456
|
+
* `drop` pattern taken out. Returns the paths changed, for the note.
|
|
457
|
+
*
|
|
458
|
+
* Never rewrites the rest. The file is the operator's, and every rule already
|
|
459
|
+
* in it is theirs to keep: adding puts one line under a comment saying where
|
|
460
|
+
* it came from, and dropping removes exactly the line (and the comment) an
|
|
461
|
+
* earlier release put there — never a line the operator wrote. Absent file is
|
|
462
|
+
* a no-op — it means the template's copy (declared in the same step, and
|
|
463
|
+
* reconciled the same way at declaration) arrives with the right rules in it.
|
|
464
|
+
*
|
|
465
|
+
* Matched line-wise rather than by substring: a rule for `Plugins/AGENTS.md`
|
|
466
|
+
* is not a rule for the root `AGENTS.md`, and treating it as one would leave
|
|
467
|
+
* the mismatch this exists to close.
|
|
468
|
+
*/
|
|
469
|
+
async reconcileIgnoreRules(repoDir, branch, rules) {
|
|
470
|
+
let current;
|
|
471
|
+
try {
|
|
472
|
+
current = await fs.readFile(path.join(repoDir, IGNORE_FILENAME), 'utf8');
|
|
473
|
+
}
|
|
474
|
+
catch (err) {
|
|
475
|
+
// No ignore file — the copy declared from the template arrives with the
|
|
476
|
+
// right rules in it (guaranteed at declaration time, see the
|
|
477
|
+
// required-files loop above). A file that is there but cannot be read is
|
|
478
|
+
// NOT "no file": its rules may still be hiding the tree, so the hole is
|
|
479
|
+
// the step's failure, as it is for the migration's retirement.
|
|
480
|
+
if (!isAbsence(err))
|
|
481
|
+
throw err;
|
|
482
|
+
return [];
|
|
483
|
+
}
|
|
484
|
+
const respelled = (rules.respell ?? []).reduce((text, [from, to]) => withPlatformIgnorePatternRespelled(text, from, to), current);
|
|
485
|
+
const added = rules.add.reduce((text, pattern) => withIgnorePattern(text, pattern), respelled);
|
|
486
|
+
const dropped = (rules.dropEvery ?? []).reduce((text, pattern) => withoutIgnoreLine(text, pattern), rules.drop.reduce((text, pattern) => withoutPlatformIgnorePattern(text, pattern), added));
|
|
487
|
+
const merged = rules.dropAgentsRule ? withoutPlatformAgentsRule(dropped) : dropped;
|
|
488
|
+
if (merged === current)
|
|
489
|
+
return [];
|
|
490
|
+
branch.write(IGNORE_FILENAME, merged);
|
|
491
|
+
return [IGNORE_FILENAME];
|
|
492
|
+
}
|
|
293
493
|
}
|
|
294
494
|
/**
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
495
|
+
* `text` without EVERY line that is exactly `pattern`, whoever wrote it, and
|
|
496
|
+
* without a platform comment sitting directly above one. The other drop keeps
|
|
497
|
+
* an operator's identical line; this one does not, and the difference is
|
|
498
|
+
* deliberate: the plugins-root rule was in the template from the first seed
|
|
499
|
+
* with no comment to know it by, so provenance cannot decide it — and the
|
|
500
|
+
* Skills & Tools sidebar now renders that root as a file tree read from the
|
|
501
|
+
* workspace tree, which the rule would empty. A `!pattern` negation is not
|
|
502
|
+
* the pattern and stays. A platform comment directly above a dropped line
|
|
503
|
+
* goes with it, and so does the blank line that opened an appended block —
|
|
504
|
+
* the same tidy-up `withoutPlatformIgnorePattern` does, so a file either
|
|
505
|
+
* step cleans reads the same afterwards.
|
|
506
|
+
*
|
|
507
|
+
* Exported for the Groups→Plugins step, which retires the same rules on the
|
|
508
|
+
* branches this step never visits (drafts).
|
|
300
509
|
*/
|
|
301
|
-
|
|
302
|
-
|
|
510
|
+
export function withoutIgnoreLine(text, pattern) {
|
|
511
|
+
const lines = text.split('\n');
|
|
512
|
+
const kept = [];
|
|
513
|
+
for (const line of lines) {
|
|
514
|
+
if (line.trim() !== pattern) {
|
|
515
|
+
kept.push(line);
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
const above = kept[kept.length - 1];
|
|
519
|
+
if (above === undefined || !isPlatformRuleComment(above))
|
|
520
|
+
continue;
|
|
521
|
+
kept.pop();
|
|
522
|
+
if (above.trim() === PLATFORM_RULE_COMMENT && kept.length > 1 && kept[kept.length - 1]?.trim() === '')
|
|
523
|
+
kept.pop();
|
|
524
|
+
}
|
|
525
|
+
return kept.join('\n');
|
|
303
526
|
}
|
|
527
|
+
/** The legacy comment `withIgnorePattern` wrote above the guide's rule. */
|
|
528
|
+
const PLATFORM_RULE_COMMENT = '# Added by the platform: the conventions doc is not node content.';
|
|
529
|
+
/** The comment the packaged template carries above the guide's rule. */
|
|
530
|
+
const AGENTS_RULE_COMMENT = "# The platform's agent guide.";
|
|
304
531
|
/**
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
309
|
-
*
|
|
532
|
+
* The repo-hygiene BLOCK of the packaged `.bevelignore`, exactly as every
|
|
533
|
+
* release that shipped a bare guide rule wrote it, in order, ending at the
|
|
534
|
+
* line that has always sat directly above that rule.
|
|
535
|
+
*
|
|
536
|
+
* It stands in for a comment on knowledge bases seeded before there was one.
|
|
537
|
+
* The guide's rule shipped in the template body from the first seed, bare,
|
|
538
|
+
* like the plugins-root rule did — but unlike that one it must not be dropped
|
|
539
|
+
* wholesale, because an operator who writes `AGENTS.md` into their own ignore
|
|
540
|
+
* file is saying something the platform has no business overruling.
|
|
541
|
+
*
|
|
542
|
+
* So provenance is the block the template put it in, and the WHOLE block is
|
|
543
|
+
* asked for. The single line above it is not enough: `.gitattributes` is an
|
|
544
|
+
* entry anyone might list, and a hand-written file that happens to name
|
|
545
|
+
* `AGENTS.md` under it would have had its rule read as the platform's and
|
|
546
|
+
* deleted. Three lines in the template's own order and wording are not
|
|
547
|
+
* something an operator arrives at by coincidence — and a file that does
|
|
548
|
+
* carry them carries the platform's block, however it got there.
|
|
310
549
|
*/
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
550
|
+
const TEMPLATE_HYGIENE_BLOCK_ABOVE_AGENTS_RULE = [
|
|
551
|
+
'# Repo hygiene files that clutter the tree without being node content.',
|
|
552
|
+
'.gitignore',
|
|
553
|
+
'.gitattributes',
|
|
554
|
+
];
|
|
555
|
+
/** Whether the lines kept so far END with that block — i.e. the next line is the slot. */
|
|
556
|
+
function followsTemplateHygieneBlock(kept) {
|
|
557
|
+
const block = TEMPLATE_HYGIENE_BLOCK_ABOVE_AGENTS_RULE;
|
|
558
|
+
if (kept.length < block.length)
|
|
559
|
+
return false;
|
|
560
|
+
return kept.slice(-block.length).every((line, i) => line.trim() === block[i]);
|
|
318
561
|
}
|
|
319
562
|
/**
|
|
320
|
-
*
|
|
321
|
-
*
|
|
322
|
-
*
|
|
323
|
-
*
|
|
324
|
-
* Never rewrites the rest. The file is the operator's, and every rule already
|
|
325
|
-
* in it is theirs to keep: adding puts one line under a comment saying where
|
|
326
|
-
* it came from, and dropping removes exactly the line (and the comment) an
|
|
327
|
-
* earlier release put there — never a line the operator wrote. Absent file is
|
|
328
|
-
* a no-op — it means the template's copy (declared in the same step, and
|
|
329
|
-
* reconciled the same way at declaration) arrives with the right rules in it.
|
|
563
|
+
* `text` without the `AGENTS.md` line THE PLATFORM WROTE — under its own
|
|
564
|
+
* comment (either spelling), or in the slot at the end of the template's own
|
|
565
|
+
* repo-hygiene block ({@link TEMPLATE_HYGIENE_BLOCK_ABOVE_AGENTS_RULE}) — and
|
|
566
|
+
* without that comment.
|
|
330
567
|
*
|
|
331
|
-
*
|
|
332
|
-
*
|
|
333
|
-
* the
|
|
568
|
+
* Called only when the guide has been renamed, which is what makes the line
|
|
569
|
+
* wrong: it hides a file the platform no longer owns. A `!AGENTS.md` negation
|
|
570
|
+
* is not the rule and stays, as everywhere else here.
|
|
334
571
|
*/
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
572
|
+
export function withoutPlatformAgentsRule(text) {
|
|
573
|
+
const lines = text.split('\n');
|
|
574
|
+
const kept = [];
|
|
575
|
+
for (const line of lines) {
|
|
576
|
+
const above = kept[kept.length - 1];
|
|
577
|
+
const ours = line.trim() === LEGACY_AGENTS_FILE &&
|
|
578
|
+
above !== undefined &&
|
|
579
|
+
(isPlatformRuleComment(above) || followsTemplateHygieneBlock(kept));
|
|
580
|
+
if (!ours) {
|
|
581
|
+
kept.push(line);
|
|
582
|
+
continue;
|
|
583
|
+
}
|
|
584
|
+
// The hygiene block above the rule is content, not a marker: those lines
|
|
585
|
+
// hide `.gitignore` and `.gitattributes` and stay. Only a comment the
|
|
586
|
+
// platform wrote goes with the rule it introduced.
|
|
587
|
+
if (!isPlatformRuleComment(above))
|
|
588
|
+
continue;
|
|
589
|
+
kept.pop();
|
|
590
|
+
// The blank line that opened an appended block goes with it; the template's
|
|
591
|
+
// own comment sits inline, with content above it, and nothing to tidy.
|
|
592
|
+
const appended = above.trim() === PLATFORM_RULE_COMMENT || above.trim() === AGENTS_RULE_COMMENT;
|
|
593
|
+
if (appended && kept.length > 1 && kept[kept.length - 1]?.trim() === '')
|
|
594
|
+
kept.pop();
|
|
345
595
|
}
|
|
346
|
-
|
|
347
|
-
const merged = rules.drop.reduce((text, pattern) => withoutPlatformIgnorePattern(text, pattern), added);
|
|
348
|
-
if (merged === current)
|
|
349
|
-
return [];
|
|
350
|
-
branch.write(IGNORE_FILENAME, merged);
|
|
351
|
-
return [IGNORE_FILENAME];
|
|
596
|
+
return kept.join('\n');
|
|
352
597
|
}
|
|
353
|
-
/**
|
|
354
|
-
|
|
598
|
+
/**
|
|
599
|
+
* `text` with the platform's pointer sentence appended as its own paragraph.
|
|
600
|
+
*
|
|
601
|
+
* One blank line between the customer's last line and ours, whether or not
|
|
602
|
+
* their file ended in a newline: a sentence glued onto the end of their last
|
|
603
|
+
* paragraph would read as a continuation of something they wrote.
|
|
604
|
+
*/
|
|
605
|
+
export function withPointerSentence(text, agentsFile) {
|
|
606
|
+
const body = text.replace(/\n+$/, '');
|
|
607
|
+
return `${body}\n\n${agentsFilePointerSentence(agentsFile)}\n`;
|
|
608
|
+
}
|
|
609
|
+
/** The comment written above the preamble rule on an existing knowledge base. */
|
|
610
|
+
const PREAMBLE_RULE_COMMENT = '# Added by the platform: agent instructions are edited from External agent access.';
|
|
611
|
+
/**
|
|
612
|
+
* The line an earlier release shipped in the template above the UNANCHORED
|
|
613
|
+
* preamble rule. Recognised as the platform's own, on the same reasoning as
|
|
614
|
+
* the legacy skills line below: a rule under a comment the platform wrote is
|
|
615
|
+
* the platform's to respell, wherever the file came from.
|
|
616
|
+
*/
|
|
617
|
+
const LEGACY_PREAMBLE_TEMPLATE_COMMENT = '# The deployment preamble is edited from External agent access, not as a KB page.';
|
|
355
618
|
/**
|
|
356
619
|
* The template line an earlier release shipped above the shared-skills rule,
|
|
357
620
|
* split around its one variable: the plugins root's name, which a deployment
|
|
@@ -372,8 +635,12 @@ const LEGACY_SKILLS_RULE_COMMENT_CLOSING = '/.';
|
|
|
372
635
|
*/
|
|
373
636
|
function isPlatformRuleComment(line) {
|
|
374
637
|
const trimmed = line.trim();
|
|
375
|
-
if (trimmed === PLATFORM_RULE_COMMENT
|
|
638
|
+
if (trimmed === PLATFORM_RULE_COMMENT ||
|
|
639
|
+
trimmed === AGENTS_RULE_COMMENT ||
|
|
640
|
+
trimmed === PREAMBLE_RULE_COMMENT ||
|
|
641
|
+
trimmed === LEGACY_PREAMBLE_TEMPLATE_COMMENT) {
|
|
376
642
|
return true;
|
|
643
|
+
}
|
|
377
644
|
if (!trimmed.startsWith(LEGACY_SKILLS_RULE_COMMENT_OPENING) ||
|
|
378
645
|
!trimmed.endsWith(LEGACY_SKILLS_RULE_COMMENT_CLOSING)) {
|
|
379
646
|
return false;
|
|
@@ -404,6 +671,32 @@ function withoutPlatformIgnorePattern(text, pattern) {
|
|
|
404
671
|
}
|
|
405
672
|
return kept.join('\n');
|
|
406
673
|
}
|
|
674
|
+
/**
|
|
675
|
+
* `text` with every `from` line THE PLATFORM WROTE respelled as `to`, its
|
|
676
|
+
* comment left where it is. Provenance is that comment, as everywhere else
|
|
677
|
+
* here: a bare rule the OPERATOR wrote is theirs and is not touched.
|
|
678
|
+
*
|
|
679
|
+
* This exists for one migration. An earlier release hid the preamble with the
|
|
680
|
+
* unanchored `mcp-description.md`, which also hides an ordinary knowledge
|
|
681
|
+
* page of that name anywhere in the tree; the rule the platform means is the
|
|
682
|
+
* root-anchored one. Respelling its own line is not the same as overruling an
|
|
683
|
+
* operator who chose the broad spelling, which is why the two are told apart.
|
|
684
|
+
*/
|
|
685
|
+
function withPlatformIgnorePatternRespelled(text, from, to) {
|
|
686
|
+
const lines = text.split('\n');
|
|
687
|
+
return lines
|
|
688
|
+
.map((line, i) => {
|
|
689
|
+
if (line.trim() !== from)
|
|
690
|
+
return line;
|
|
691
|
+
const above = lines[i - 1];
|
|
692
|
+
if (above === undefined || !isPlatformRuleComment(above))
|
|
693
|
+
return line;
|
|
694
|
+
// Function replacement: `to` is a pattern to `String.replace`, and a
|
|
695
|
+
// rule spelled with a `$` would otherwise be read as one.
|
|
696
|
+
return line.replace(from, () => to);
|
|
697
|
+
})
|
|
698
|
+
.join('\n');
|
|
699
|
+
}
|
|
407
700
|
/**
|
|
408
701
|
* `text` with `pattern` guaranteed present as a LINE — appended under a
|
|
409
702
|
* comment naming its origin when absent, returned unchanged when present.
|
|
@@ -413,12 +706,27 @@ function withoutPlatformIgnorePattern(text, pattern) {
|
|
|
413
706
|
* operator choosing to SHOW the file, and ordered matching means a positive
|
|
414
707
|
* line appended after it would win and silently defeat the choice. Hiding
|
|
415
708
|
* the conventions doc is a default this provides, never a mandate.
|
|
709
|
+
*
|
|
710
|
+
* The preamble rule reads its unanchored spelling the same way. By the time
|
|
711
|
+
* this runs, the platform's OWN legacy line has been respelled (see
|
|
712
|
+
* {@link withPlatformIgnorePatternRespelled}), so a bare `mcp-description.md`
|
|
713
|
+
* still standing here is the operator's: it already hides the file, and
|
|
714
|
+
* appending the anchored rule beside it would say nothing they have not.
|
|
416
715
|
*/
|
|
417
716
|
function withIgnorePattern(text, pattern) {
|
|
418
717
|
const lines = text.split('\n').map((l) => l.trim());
|
|
419
|
-
|
|
718
|
+
const operatorPreambleRule = pattern === PREAMBLE_IGNORE_PATTERN &&
|
|
719
|
+
(lines.includes(PREAMBLE_FILE) || lines.includes(`!${PREAMBLE_FILE}`));
|
|
720
|
+
if (lines.includes(pattern) || lines.includes(`!${pattern}`) || operatorPreambleRule)
|
|
420
721
|
return text;
|
|
421
722
|
const separator = text.endsWith('\n') ? '' : '\n';
|
|
422
|
-
|
|
723
|
+
// The guide's rule arrives as a gitignore literal (escaped where the name
|
|
724
|
+
// needs it), so it is recognised in that spelling.
|
|
725
|
+
const comment = pattern === PREAMBLE_IGNORE_PATTERN
|
|
726
|
+
? PREAMBLE_RULE_COMMENT
|
|
727
|
+
: pattern === gitignoreLiteral(AGENTS_FILE)
|
|
728
|
+
? AGENTS_RULE_COMMENT
|
|
729
|
+
: PLATFORM_RULE_COMMENT;
|
|
730
|
+
return `${text}${separator}\n${comment}\n${pattern}\n`;
|
|
423
731
|
}
|
|
424
732
|
//# sourceMappingURL=template-files.step.js.map
|