@bevel-software/platform-core-backend 0.14.0 → 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 +8 -8
- package/dist/core/catalog-cache-invalidation.d.ts +45 -0
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -0
- package/dist/core/catalog-cache-invalidation.js +76 -0
- package/dist/core/catalog-cache-invalidation.js.map +1 -0
- 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 +279 -64
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +66 -2
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +290 -111
- 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 +231 -15
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +83 -12
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +815 -212
- 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 +312 -84
- 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 +100 -25
- package/dist/modules/access-model/access-grammar.d.ts.map +1 -1
- package/dist/modules/access-model/access-grammar.js +162 -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/group-files.d.ts.map +1 -1
- package/dist/modules/access-model/group-files.js +4 -1
- package/dist/modules/access-model/group-files.js.map +1 -1
- package/dist/modules/access-model/plugin-principals.d.ts +51 -0
- package/dist/modules/access-model/plugin-principals.d.ts.map +1 -0
- package/dist/modules/access-model/plugin-principals.js +119 -0
- package/dist/modules/access-model/plugin-principals.js.map +1 -0
- 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 +672 -0
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +171 -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/index.d.ts +6 -0
- package/dist/modules/kb-sync/index.d.ts.map +1 -0
- package/dist/modules/kb-sync/index.js +5 -0
- package/dist/modules/kb-sync/index.js.map +1 -0
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +77 -0
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -0
- package/dist/modules/kb-sync/kb-sync.interface.js +2 -0
- package/dist/modules/kb-sync/kb-sync.interface.js.map +1 -0
- package/dist/modules/kb-sync/kb-sync.routes.d.ts +70 -0
- package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -0
- package/dist/modules/kb-sync/kb-sync.routes.js +137 -0
- package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -0
- package/dist/modules/kb-sync/kb-sync.service.d.ts +45 -0
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -0
- package/dist/modules/kb-sync/kb-sync.service.js +185 -0
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -0
- package/dist/modules/kb-sync/sync-auth.d.ts +59 -0
- package/dist/modules/kb-sync/sync-auth.d.ts.map +1 -0
- package/dist/modules/kb-sync/sync-auth.js +62 -0
- package/dist/modules/kb-sync/sync-auth.js.map +1 -0
- package/dist/modules/kb-sync/sync-payload.d.ts +32 -0
- package/dist/modules/kb-sync/sync-payload.d.ts.map +1 -0
- package/dist/modules/kb-sync/sync-payload.js +105 -0
- package/dist/modules/kb-sync/sync-payload.js.map +1 -0
- package/dist/modules/marketplace/git-http.routes.d.ts +42 -0
- package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -0
- package/dist/modules/marketplace/git-http.routes.js +192 -0
- package/dist/modules/marketplace/git-http.routes.js.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +33 -0
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +88 -0
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts +59 -0
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.d.ts.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.js +96 -0
- package/dist/modules/marketplace/github-facade/github-facade-codes.store.js.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +126 -0
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +192 -0
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts +47 -0
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade.routes.js +252 -0
- package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +121 -0
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -0
- package/dist/modules/marketplace/github-facade/github-facade.service.js +213 -0
- package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -0
- package/dist/modules/marketplace/github-facade/index.d.ts +6 -0
- package/dist/modules/marketplace/github-facade/index.d.ts.map +1 -0
- package/dist/modules/marketplace/github-facade/index.js +6 -0
- package/dist/modules/marketplace/github-facade/index.js.map +1 -0
- package/dist/modules/marketplace/index.d.ts +4 -0
- package/dist/modules/marketplace/index.d.ts.map +1 -0
- package/dist/modules/marketplace/index.js +4 -0
- package/dist/modules/marketplace/index.js.map +1 -0
- package/dist/modules/marketplace/marketplace-repo.service.d.ts +135 -0
- package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -0
- package/dist/modules/marketplace/marketplace-repo.service.js +318 -0
- package/dist/modules/marketplace/marketplace-repo.service.js.map +1 -0
- 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 +8 -2
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts +14 -8
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js +16 -2
- package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
- package/dist/modules/mcp/oauth/oauth-state.d.ts +13 -2
- package/dist/modules/mcp/oauth/oauth-state.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/oauth-state.js +3 -1
- package/dist/modules/mcp/oauth/oauth-state.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 +104 -0
- package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -0
- package/dist/modules/plugins/compile/compile-marketplace.js +323 -0
- package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -0
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +73 -0
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -0
- package/dist/modules/plugins/compile/marketplace-compiler.service.js +135 -0
- package/dist/modules/plugins/compile/marketplace-compiler.service.js.map +1 -0
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts +37 -0
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts.map +1 -0
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js +158 -0
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js.map +1 -0
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +65 -0
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -0
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js +204 -0
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -0
- package/dist/modules/plugins/discovery/kb-plugin-source.d.ts +39 -0
- package/dist/modules/plugins/discovery/kb-plugin-source.d.ts.map +1 -0
- package/dist/modules/plugins/discovery/kb-plugin-source.js +110 -0
- package/dist/modules/plugins/discovery/kb-plugin-source.js.map +1 -0
- package/dist/modules/plugins/discovery/native.source.d.ts +16 -0
- package/dist/modules/plugins/discovery/native.source.d.ts.map +1 -0
- package/dist/modules/plugins/discovery/native.source.js +120 -0
- package/dist/modules/plugins/discovery/native.source.js.map +1 -0
- package/dist/modules/plugins/discovery/plugin-source.d.ts +110 -0
- package/dist/modules/plugins/discovery/plugin-source.d.ts.map +1 -0
- package/dist/modules/plugins/discovery/plugin-source.js +2 -0
- package/dist/modules/plugins/discovery/plugin-source.js.map +1 -0
- package/dist/modules/plugins/index.d.ts +15 -3
- package/dist/modules/plugins/index.d.ts.map +1 -1
- package/dist/modules/plugins/index.js +13 -2
- 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 +69 -0
- package/dist/modules/plugins/plugin-links.d.ts.map +1 -0
- package/dist/modules/plugins/plugin-links.js +163 -0
- package/dist/modules/plugins/plugin-links.js.map +1 -0
- package/dist/modules/plugins/plugin-links.service.d.ts +111 -0
- package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -0
- package/dist/modules/plugins/plugin-links.service.js +295 -0
- package/dist/modules/plugins/plugin-links.service.js.map +1 -0
- package/dist/modules/plugins/plugin-provision.service.d.ts +129 -21
- package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.js +320 -75
- package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts +71 -0
- package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -0
- package/dist/modules/plugins/plugin-rename.service.js +254 -0
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -0
- package/dist/modules/plugins/plugins.contract.d.ts +78 -4
- package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +44 -5
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +297 -115
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/plugins/plugins.service.d.ts +82 -3
- package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.service.js +178 -48
- 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 +157 -2
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +412 -35
- 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 +57 -1
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +408 -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 +4 -1
- package/dist/modules/skills/index.d.ts.map +1 -1
- package/dist/modules/skills/index.js +2 -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 +24 -71
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +38 -0
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -0
- package/dist/modules/skills/skill-access-requests.routes.js +171 -0
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -0
- package/dist/modules/skills/skills.contract.d.ts +67 -2
- package/dist/modules/skills/skills.contract.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.d.ts +35 -3
- package/dist/modules/skills/skills.routes.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.js +57 -4
- package/dist/modules/skills/skills.routes.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +31 -3
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.service.js +236 -65
- 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 +66 -1
- package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.js +2 -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 +23 -4
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +79 -19
- 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 +36 -0
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +136 -96
- 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 +121 -2
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +415 -92
- 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 +303 -6
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +753 -170
- 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 +57 -2
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +165 -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 +217 -14
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +1142 -109
- 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 +41 -0
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.js +85 -0
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.js.map +1 -0
- 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 +174 -54
- 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 +521 -126
- 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 +657 -246
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +323 -12
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +1006 -257
- 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 +128 -0
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +166 -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-errors.d.ts +8 -0
- package/dist/shared/fs-errors.d.ts.map +1 -0
- package/dist/shared/fs-errors.js +11 -0
- package/dist/shared/fs-errors.js.map +1 -0
- package/dist/shared/fs-walk.d.ts +20 -6
- package/dist/shared/fs-walk.d.ts.map +1 -1
- package/dist/shared/fs-walk.js +35 -27
- package/dist/shared/fs-walk.js.map +1 -1
- 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/kb-walk.d.ts +52 -0
- package/dist/shared/kb-walk.d.ts.map +1 -0
- package/dist/shared/kb-walk.js +76 -0
- package/dist/shared/kb-walk.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/path-order.d.ts +18 -0
- package/dist/shared/path-order.d.ts.map +1 -0
- package/dist/shared/path-order.js +35 -0
- package/dist/shared/path-order.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/shared/ttl-cache.d.ts +28 -1
- package/dist/shared/ttl-cache.d.ts.map +1 -1
- package/dist/shared/ttl-cache.js +33 -1
- package/dist/shared/ttl-cache.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 +364 -54
- package/kb-template/KnowledgeBase/How to get started.md +1 -1
- package/kb-template/Skills/.gitkeep +0 -0
- package/kb-template/access.md +5 -3
- package/kb-template/mcp-description.md +27 -0
- package/migrations/0005_github_facade.sql +25 -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/0005_snapshot.json +1717 -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 +49 -0
- package/package.json +8 -7
- package/src/__tests__/core-config.domain.test.ts +67 -2
- package/src/__tests__/kb-layout-config.test.ts +295 -0
- package/src/__tests__/open-change-gate.ts +15 -0
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +226 -0
- 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 +111 -0
- package/src/core/catalog-revision.ts +110 -0
- package/src/core/create-core-server.ts +358 -63
- package/src/core/create-core-services.ts +449 -107
- 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 +88 -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 +142 -81
- 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 +385 -0
- 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 +14 -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 +269 -18
- package/src/modules/access/access-control.service.ts +943 -226
- 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 +385 -105
- 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-grammar.test.ts +18 -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__/plugin-token-canonical.test.ts +40 -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 +198 -49
- 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/group-files.ts +4 -0
- package/src/modules/access-model/plugin-principals.ts +130 -0
- 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 +177 -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/__tests__/kb-sync.routes.test.ts +297 -0
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +295 -0
- package/src/modules/kb-sync/__tests__/sync-auth.test.ts +118 -0
- package/src/modules/kb-sync/__tests__/sync-payload.test.ts +148 -0
- package/src/modules/kb-sync/index.ts +19 -0
- package/src/modules/kb-sync/kb-sync.interface.ts +79 -0
- package/src/modules/kb-sync/kb-sync.routes.ts +200 -0
- package/src/modules/kb-sync/kb-sync.service.ts +204 -0
- package/src/modules/kb-sync/sync-auth.ts +118 -0
- package/src/modules/kb-sync/sync-payload.ts +143 -0
- package/src/modules/marketplace/__tests__/github-facade.test.ts +575 -0
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +180 -0
- package/src/modules/marketplace/__tests__/marketplace-repo.head.test.ts +47 -0
- package/src/modules/marketplace/git-http.routes.ts +196 -0
- package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +110 -0
- package/src/modules/marketplace/github-facade/github-facade-codes.store.ts +145 -0
- package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +263 -0
- package/src/modules/marketplace/github-facade/github-facade.routes.ts +294 -0
- package/src/modules/marketplace/github-facade/github-facade.service.ts +282 -0
- package/src/modules/marketplace/github-facade/index.ts +26 -0
- package/src/modules/marketplace/index.ts +3 -0
- package/src/modules/marketplace/marketplace-repo.service.ts +352 -0
- 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 +8 -2
- package/src/modules/mcp/oauth/oauth-consent.routes.ts +28 -6
- package/src/modules/mcp/oauth/oauth-state.ts +15 -3
- package/src/modules/mcp/surface-log-throttle.ts +120 -0
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +166 -0
- package/src/modules/plugins/__tests__/bundle-dialect.test.ts +165 -0
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +423 -0
- 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 +201 -16
- package/src/modules/plugins/__tests__/plugin-links.service.test.ts +284 -0
- package/src/modules/plugins/__tests__/plugin-names.test.ts +77 -0
- package/src/modules/plugins/__tests__/plugin-provision.service.test.ts +330 -20
- package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +456 -0
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +441 -43
- 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 +500 -0
- package/src/modules/plugins/compile/marketplace-compiler.service.ts +151 -0
- package/src/modules/plugins/discovery/__tests__/kb-plugin-source.test.ts +365 -0
- package/src/modules/plugins/discovery/bundle-dialect/bundle.source.ts +161 -0
- package/src/modules/plugins/discovery/bundle-dialect/registry.ts +250 -0
- package/src/modules/plugins/discovery/kb-plugin-source.ts +117 -0
- package/src/modules/plugins/discovery/native.source.ts +140 -0
- package/src/modules/plugins/discovery/plugin-source.ts +113 -0
- package/src/modules/plugins/index.ts +25 -2
- 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 +350 -0
- package/src/modules/plugins/plugin-links.ts +187 -0
- package/src/modules/plugins/plugin-provision.service.ts +356 -78
- package/src/modules/plugins/plugin-rename.service.ts +310 -0
- package/src/modules/plugins/plugins.contract.ts +79 -4
- package/src/modules/plugins/plugins.routes.ts +320 -123
- package/src/modules/plugins/plugins.service.ts +184 -57
- 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 +240 -1
- 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.sync-status.test.ts +77 -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 +478 -39
- 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 +480 -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__/skill-access-requests.routes.test.ts +128 -0
- package/src/modules/skills/__tests__/skills.routes.warnings.test.ts +91 -0
- package/src/modules/skills/__tests__/skills.service.test.ts +308 -2
- package/src/modules/skills/allowed-tools-check.ts +352 -0
- package/src/modules/skills/index.ts +5 -0
- package/src/modules/skills/pending-skills.service.ts +26 -85
- package/src/modules/skills/skill-access-requests.routes.ts +203 -0
- package/src/modules/skills/skills.contract.ts +67 -3
- package/src/modules/skills/skills.routes.ts +75 -4
- package/src/modules/skills/skills.service.ts +258 -66
- 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 +73 -1
- package/src/modules/tool-auth/external-api-key.service.ts +95 -29
- 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-json-discovery.test.ts +24 -1
- 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 +11 -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 +164 -95
- 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 +440 -104
- 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 +3 -1
- 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 +3 -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 +296 -27
- 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 +133 -2
- package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +442 -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.postMergePull.test.ts +3 -3
- package/src/modules/workflow/git/__tests__/git.service.pull.test.ts +47 -4
- package/src/modules/workflow/git/__tests__/git.service.revertPathsAndPush.test.ts +177 -0
- package/src/modules/workflow/git/__tests__/git.service.syncFromRemote.test.ts +253 -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 +922 -199
- package/src/modules/workflow/git/node-git-runner.ts +315 -0
- package/src/modules/workflow/git/pull-request.service.ts +188 -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 +1341 -174
- 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 +31 -13
- 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 +94 -0
- package/src/modules/workspace/__tests__/workspace.service.missing-branch.test.ts +28 -0
- 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 +98 -13
- 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 +1405 -48
- 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 +90 -0
- package/src/modules/workspace/startup/steps/roles-yaml.step.ts +6 -12
- package/src/modules/workspace/startup/steps/seed-tree.ts +177 -54
- package/src/modules/workspace/startup/steps/template-files.step.ts +581 -126
- package/src/modules/workspace/startup/steps/template-source.ts +168 -0
- package/src/modules/workspace/workspace.routes.ts +691 -269
- package/src/modules/workspace/workspace.service.ts +1071 -292
- 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__/path-order.test.ts +24 -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/__tests__/ttl-cache.test.ts +55 -0
- package/src/shared/canonical-file-identity.ts +92 -0
- package/src/shared/domain-errors.ts +178 -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/path-order.ts +33 -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/shared/ttl-cache.ts +33 -1
- 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 -42
- package/src/shared/fs-walk.ts +0 -30
- package/src/shared/hash-email.ts +0 -14
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
AGENTS_FILE,
|
|
5
|
+
KNOWLEDGE_BASE_DIR,
|
|
6
|
+
LEGACY_AGENTS_FILE,
|
|
7
|
+
PLUGINS_DIR,
|
|
8
|
+
SKILLS_DIR,
|
|
9
|
+
agentsFilePointerSentence,
|
|
10
|
+
gitignoreLiteral,
|
|
11
|
+
mentionsAgentsFile,
|
|
12
|
+
retargetAgentsFilePointer,
|
|
13
|
+
validateKbRootName,
|
|
14
|
+
} from '@bevel-software/platform-shared';
|
|
15
|
+
import { IGNORE_FILENAME, isAbsence, type IFsProbe } from '../../../../shared/fs.contract.js';
|
|
16
|
+
import { PREAMBLE_FILE } from '../../../agent-instructions/compose.js';
|
|
17
|
+
import { TemplateSource } from './template-source.js';
|
|
5
18
|
import type { KbBranch, OnServerStart, ServerStartContext, StepResult } from '../on-server-start.js';
|
|
19
|
+
import { hasGitInternalsSegment } from '../../../../shared/git-internals.js';
|
|
20
|
+
|
|
21
|
+
/** Root-anchored so a knowledge folder may still contain an ordinary namesake. */
|
|
22
|
+
const PREAMBLE_IGNORE_PATTERN = `/${PREAMBLE_FILE}`;
|
|
6
23
|
|
|
7
24
|
/**
|
|
8
25
|
* The **required scaffolding** — the minimum an operational KB needs. Any of
|
|
@@ -10,7 +27,7 @@ import type { KbBranch, OnServerStart, ServerStartContext, StepResult } from '..
|
|
|
10
27
|
* sample ontology is NOT (it only seeds a fully-empty repo, see seed-tree.ts).
|
|
11
28
|
*
|
|
12
29
|
* Two kinds:
|
|
13
|
-
* - {@link
|
|
30
|
+
* - {@link requiredFiles}: repo-root files added when the file is missing.
|
|
14
31
|
* - Reserved root dirs (core's two plus a distribution's `extraRootDirs`):
|
|
15
32
|
* when a dir is entirely absent it's created by adding its `<dir>/.gitkeep`.
|
|
16
33
|
* Keyed on the *directory's* existence, not the `.gitkeep` file — so a
|
|
@@ -21,30 +38,63 @@ import type { KbBranch, OnServerStart, ServerStartContext, StepResult } from '..
|
|
|
21
38
|
* generated from `ADMIN_EMAIL` (see roles-yaml.step.ts), so a repo can't be
|
|
22
39
|
* seeded with a stale hard-coded Admin list.
|
|
23
40
|
*/
|
|
24
|
-
export
|
|
41
|
+
export function requiredFiles(): readonly string[] {
|
|
42
|
+
return [
|
|
43
|
+
'access.md',
|
|
44
|
+
// The managed agent guide, under whatever this deployment calls it. The
|
|
45
|
+
// PACKAGED template still carries it as `AGENTS.md` — one file, one
|
|
46
|
+
// spelling in the tarball — so the write target and the template source
|
|
47
|
+
// part company here and nowhere else (see {@link templateNameOf}).
|
|
48
|
+
AGENTS_FILE,
|
|
49
|
+
'.bevelignore',
|
|
50
|
+
'.gitignore',
|
|
51
|
+
// The deployment preamble every connected agent is told at session start
|
|
52
|
+
// (see modules/agent-instructions). Seeded ONCE and never refreshed: the
|
|
53
|
+
// content is the admin's, and the shipped template is one HTML comment, so
|
|
54
|
+
// a never-edited file sends nothing of its own.
|
|
55
|
+
PREAMBLE_FILE,
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The template's own name for a required file. The guide is the one file whose
|
|
61
|
+
* name on disk is a deployment's choice while its name in the template is
|
|
62
|
+
* fixed; everything else is spelled the same on both sides.
|
|
63
|
+
*/
|
|
64
|
+
function templateNameOf(repoRel: string): string {
|
|
65
|
+
return repoRel === AGENTS_FILE ? LEGACY_AGENTS_FILE : repoRel;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The sentence the managed guide carries about itself, and the ONLY thing that
|
|
70
|
+
* makes a root `AGENTS.md` provably the platform's rather than the customer's.
|
|
71
|
+
*
|
|
72
|
+
* Matched on this one phrase rather than on the whole header: the lines around
|
|
73
|
+
* it have changed between releases (they name the configured file now), and a
|
|
74
|
+
* knowledge base seeded by any of those releases is still ours to remove. A
|
|
75
|
+
* customer file would have to quote the platform's own claim about itself
|
|
76
|
+
* verbatim to be mistaken for one, and the consequence of the mistake is a
|
|
77
|
+
* deletion — which is why nothing looser will do.
|
|
78
|
+
*/
|
|
79
|
+
const MANAGED_GUIDE_MARKER = '**This file is managed by the platform.**';
|
|
80
|
+
|
|
81
|
+
/** Whether `text` is a copy of the platform's managed guide, of any vintage. */
|
|
82
|
+
export function isManagedGuide(text: string): boolean {
|
|
83
|
+
return text.includes(MANAGED_GUIDE_MARKER);
|
|
84
|
+
}
|
|
25
85
|
|
|
26
86
|
/**
|
|
27
87
|
* Repo-root files the startup phase GENERATES rather than copies — today just
|
|
28
88
|
* `roles.yaml`, rendered from `ADMIN_EMAIL` (see roles-yaml.step.ts and
|
|
29
89
|
* seed-tree.ts). Reserved-root validation must treat these exactly like
|
|
30
|
-
* {@link
|
|
90
|
+
* {@link requiredFiles}: a root claiming a generated name is the same silent
|
|
31
91
|
* typo with the same silent outcome.
|
|
32
92
|
*/
|
|
33
93
|
export const GENERATED_FILES: readonly string[] = ['roles.yaml'];
|
|
34
94
|
|
|
35
95
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* packaged template cannot ship one under its real name (see
|
|
39
|
-
* {@link templateSource}).
|
|
40
|
-
*/
|
|
41
|
-
export const TEMPLATE_SOURCE_FALLBACKS: Readonly<Record<string, string>> = {
|
|
42
|
-
'.gitignore': 'gitignore.template',
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* The two roots CORE gives a knowledge base: the ontologies, and the plugins
|
|
47
|
-
* that hold skills and tools.
|
|
96
|
+
* The three roots CORE gives a knowledge base: the ontologies, the shared
|
|
97
|
+
* skills, and the plugins that hold tools and link the skills.
|
|
48
98
|
*
|
|
49
99
|
* `Data/`, `Agents/` and `Pipelines/` are deliberately absent. They scaffold
|
|
50
100
|
* the agentic execution layer, which is not part of this platform — a core
|
|
@@ -54,8 +104,13 @@ export const TEMPLATE_SOURCE_FALLBACKS: Readonly<Record<string, string>> = {
|
|
|
54
104
|
* READMEs); the names stay reserved in `kb-layout.ts` either way, so a KB
|
|
55
105
|
* that has them still renders them as roots rather than folding them into
|
|
56
106
|
* Knowledge.
|
|
107
|
+
*
|
|
108
|
+
* A function: the three names are deployment-configurable live bindings, and
|
|
109
|
+
* a module-scope array would snapshot the defaults before configuration.
|
|
57
110
|
*/
|
|
58
|
-
|
|
111
|
+
function coreRequiredDirs(): readonly string[] {
|
|
112
|
+
return [KNOWLEDGE_BASE_DIR, SKILLS_DIR, PLUGINS_DIR];
|
|
113
|
+
}
|
|
59
114
|
|
|
60
115
|
/**
|
|
61
116
|
* A reserved root must be ONE path segment — `Data`, not `Data/x`, `../x` or
|
|
@@ -72,11 +127,12 @@ function assertRootSegment(dir: string): void {
|
|
|
72
127
|
if (!dir || dir === '.' || dir === '..' || dir.includes('/') || dir.includes('\\') || path.isAbsolute(dir)) {
|
|
73
128
|
throw new Error(`Reserved KB root must be a single path segment (no separators, no ".."); got "${dir}"`);
|
|
74
129
|
}
|
|
75
|
-
//
|
|
76
|
-
// corrupt the clone's own metadata.
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
130
|
+
// The git folder can never be a KB root: writing `<dir>/.gitkeep` under it
|
|
131
|
+
// would corrupt the clone's own metadata. In ANY spelling that names it —
|
|
132
|
+
// any case, a trailing dot or space Windows collapses, a percent-encoded
|
|
133
|
+
// form — the one rule every path check uses (`shared/git-internals.ts`).
|
|
134
|
+
if (hasGitInternalsSegment(dir)) {
|
|
135
|
+
throw new Error(`Reserved KB root must not name the git folder (".git" in any spelling); got "${dir}"`);
|
|
80
136
|
}
|
|
81
137
|
}
|
|
82
138
|
|
|
@@ -96,57 +152,20 @@ export function reservedRootDirs(extraRootDirs: readonly string[]): readonly str
|
|
|
96
152
|
// outcome: the file is laid down first, so the dir check finds the path
|
|
97
153
|
// taken and skips it, and the directory the caller asked for never appears
|
|
98
154
|
// with nothing said about why.
|
|
99
|
-
if (
|
|
155
|
+
if (requiredFiles().includes(dir) || GENERATED_FILES.includes(dir)) {
|
|
100
156
|
throw new Error(
|
|
101
157
|
`Reserved KB root "${dir}" collides with a required or generated file of the same name`,
|
|
102
158
|
);
|
|
103
159
|
}
|
|
104
160
|
}
|
|
105
|
-
return [...
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Where `relPath`'s template content actually lives. npm refuses to pack
|
|
110
|
-
* files named `.gitignore` — every such file is silently stripped from the
|
|
111
|
-
* published tarball — so the packaged template ships the KB's gitignore
|
|
112
|
-
* under a packable name and the seeder writes it to its real one. A
|
|
113
|
-
* template carrying the literal file (a distribution's own
|
|
114
|
-
* KB_TEMPLATE_DIR, or this repo's tree in a Docker build) wins outright:
|
|
115
|
-
* the mapping is a fallback, never a rename.
|
|
116
|
-
*/
|
|
117
|
-
export async function templateSource(templateDir: string, relPath: string): Promise<string> {
|
|
118
|
-
const direct = path.join(templateDir, relPath);
|
|
119
|
-
if (await exists(direct)) return direct;
|
|
120
|
-
const packable = TEMPLATE_SOURCE_FALLBACKS[relPath];
|
|
121
|
-
if (packable !== undefined) {
|
|
122
|
-
const fallback = path.join(templateDir, packable);
|
|
123
|
-
if (await exists(fallback)) return fallback;
|
|
124
|
-
}
|
|
125
|
-
return direct; // let the ENOENT surface under the name the caller asked for
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
async function exists(p: string): Promise<boolean> {
|
|
129
|
-
try {
|
|
130
|
-
await fs.access(p);
|
|
131
|
-
return true;
|
|
132
|
-
} catch {
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/** `lstat` without the throw — null when nothing is at `p`. */
|
|
138
|
-
async function lstatOrNull(p: string): Promise<import('node:fs').Stats | null> {
|
|
139
|
-
try {
|
|
140
|
-
return await fs.lstat(p);
|
|
141
|
-
} catch {
|
|
142
|
-
return null;
|
|
143
|
-
}
|
|
161
|
+
return [...coreRequiredDirs(), ...extraRootDirs];
|
|
144
162
|
}
|
|
145
163
|
|
|
146
164
|
/**
|
|
147
165
|
* The template top-up as an {@link OnServerStart} step: add any missing base
|
|
148
|
-
* scaffolding to every PROTECTED branch, and keep the managed
|
|
149
|
-
* current
|
|
166
|
+
* scaffolding to every PROTECTED branch, and keep the managed agent guide
|
|
167
|
+
* current — under whatever this deployment calls it, and taking its own
|
|
168
|
+
* stale `AGENTS.md` with it when that name was handed back to the customer. Drafts are deliberately out of scope — whatever the protected
|
|
150
169
|
* branches gain, drafts fork from; a scaffolding addition on a draft would
|
|
151
170
|
* surface as noise in its change request's diff. (Unlike the Groups→Plugins
|
|
152
171
|
* rename, a missing file diffs as one file, not the whole tree — so the
|
|
@@ -161,8 +180,6 @@ async function lstatOrNull(p: string): Promise<import('node:fs').Stats | null> {
|
|
|
161
180
|
export class TemplateFilesStep implements OnServerStart {
|
|
162
181
|
readonly name = 'template-files';
|
|
163
182
|
|
|
164
|
-
private readonly requiredDirs: readonly string[];
|
|
165
|
-
|
|
166
183
|
/**
|
|
167
184
|
* @param extraRootDirs Additional root folders this distribution reserves,
|
|
168
185
|
* on top of core's two. Their `.gitkeep` is written
|
|
@@ -170,8 +187,23 @@ export class TemplateFilesStep implements OnServerStart {
|
|
|
170
187
|
* claim a root without also shipping a template entry
|
|
171
188
|
* for it.
|
|
172
189
|
*/
|
|
173
|
-
|
|
174
|
-
|
|
190
|
+
/**
|
|
191
|
+
* @param agentsFileLink Whether to keep the platform's pointer sentence in a
|
|
192
|
+
* customer-owned root `AGENTS.md` — a GETTER, because
|
|
193
|
+
* the setting behind it may be saved by the very
|
|
194
|
+
* first-run save that then runs this phase.
|
|
195
|
+
*/
|
|
196
|
+
constructor(
|
|
197
|
+
private readonly disk: IFsProbe,
|
|
198
|
+
private readonly extraRootDirs: readonly string[] = [],
|
|
199
|
+
private readonly agentsFileLink: () => boolean = () => true,
|
|
200
|
+
) {
|
|
201
|
+
// Validated NOW, so a bad extra fails at boot beside the rest of the
|
|
202
|
+
// wiring — but the list itself is NOT kept: the core roots are live
|
|
203
|
+
// bindings, and the save that completes first-run setup applies the
|
|
204
|
+
// admin's names after this step was built. A snapshot taken here
|
|
205
|
+
// scaffolded `Skills/` beside the `skills/` they had just chosen.
|
|
206
|
+
reservedRootDirs(extraRootDirs);
|
|
175
207
|
}
|
|
176
208
|
|
|
177
209
|
async run(ctx: ServerStartContext): Promise<StepResult> {
|
|
@@ -182,16 +214,24 @@ export class TemplateFilesStep implements OnServerStart {
|
|
|
182
214
|
}
|
|
183
215
|
|
|
184
216
|
private async topUp(templateDir: string, branch: KbBranch): Promise<void> {
|
|
217
|
+
// The template directory is runtime data (the start context's), the disk
|
|
218
|
+
// port is the injected dependency — bound together once here so nothing
|
|
219
|
+
// below has to carry either as an argument.
|
|
220
|
+
const templates = new TemplateSource(this.disk, templateDir);
|
|
185
221
|
const repoDir = await branch.repoDir();
|
|
186
222
|
const added: string[] = [];
|
|
223
|
+
// Read ONCE per branch: the name is a live binding, and a value re-read
|
|
224
|
+
// between the write and the ignore rule could disagree with itself.
|
|
225
|
+
const agentsFile = AGENTS_FILE;
|
|
226
|
+
const renamed = agentsFile !== LEGACY_AGENTS_FILE;
|
|
187
227
|
|
|
188
|
-
for (const rel of
|
|
228
|
+
for (const rel of requiredFiles()) {
|
|
189
229
|
// `lstat`, not `exists`: a DIRECTORY or SYMLINK squatting a required
|
|
190
230
|
// file's name would read as "present", and a skip-if-present check
|
|
191
231
|
// would then report success over a knowledge base whose root access
|
|
192
232
|
// policy (say) cannot be read. Fail-closed, same as the reserved-root
|
|
193
233
|
// squatting check below: this is a state a human must fix.
|
|
194
|
-
const found = await lstatOrNull(path.join(repoDir, rel));
|
|
234
|
+
const found = await this.disk.lstatOrNull(path.join(repoDir, rel));
|
|
195
235
|
if (found) {
|
|
196
236
|
if (found.isFile()) continue;
|
|
197
237
|
throw new Error(
|
|
@@ -200,43 +240,122 @@ export class TemplateFilesStep implements OnServerStart {
|
|
|
200
240
|
'Remove or rename it — the platform requires this name to be a readable file.',
|
|
201
241
|
);
|
|
202
242
|
}
|
|
203
|
-
let content
|
|
243
|
+
let content = await templates.read(templateNameOf(rel));
|
|
204
244
|
// The on-disk merge below only runs against an EXISTING ignore file; a
|
|
205
|
-
// freshly-declared one was merely assumed to carry the
|
|
245
|
+
// freshly-declared one was merely assumed to carry the guide's rule —
|
|
206
246
|
// true of the packaged template, not necessarily of a distribution's
|
|
207
247
|
// custom one. Make it true here, so the managed conventions doc is
|
|
208
|
-
// hidden from the file tree from the first boot either way.
|
|
248
|
+
// hidden from the file tree from the first boot either way. The same is
|
|
249
|
+
// true of the deployment preamble: it is edited through External agent
|
|
250
|
+
// access, not as an ordinary knowledge-base document.
|
|
251
|
+
// …and a template still shipping the skills rule an earlier release
|
|
252
|
+
// had (a distribution's copy, a stale packaged one) must not declare
|
|
253
|
+
// it: the on-disk reconciliation below never sees a file that was
|
|
254
|
+
// absent, so the declared content is reconciled here instead.
|
|
209
255
|
if (rel === IGNORE_FILENAME) {
|
|
210
|
-
|
|
256
|
+
// A template still shipping the unanchored preamble rule an earlier
|
|
257
|
+
// release had is respelled first, so the guarantee below adds nothing
|
|
258
|
+
// beside it.
|
|
259
|
+
content = withPlatformIgnorePatternRespelled(content, PREAMBLE_FILE, PREAMBLE_IGNORE_PATTERN);
|
|
260
|
+
content = withoutIgnoreLine(
|
|
261
|
+
withoutPlatformIgnorePattern(
|
|
262
|
+
withIgnorePattern(withIgnorePattern(content, gitignoreLiteral(agentsFile)), PREAMBLE_IGNORE_PATTERN),
|
|
263
|
+
`${SKILLS_DIR}/`,
|
|
264
|
+
),
|
|
265
|
+
`${PLUGINS_DIR}/`,
|
|
266
|
+
);
|
|
267
|
+
// …and a template (a distribution's, a stale packaged one) still
|
|
268
|
+
// hiding `AGENTS.md` while this deployment's guide is called something
|
|
269
|
+
// else would hide the CUSTOMER'S file from the first boot — the exact
|
|
270
|
+
// thing the rename exists to prevent.
|
|
271
|
+
if (renamed) content = withoutPlatformAgentsRule(content);
|
|
211
272
|
}
|
|
212
273
|
branch.write(rel, content);
|
|
213
274
|
added.push(rel);
|
|
214
275
|
}
|
|
215
276
|
|
|
216
|
-
//
|
|
277
|
+
// The guide or mcp-description.md left VISIBLE by a stale `.bevelignore`
|
|
278
|
+
// is closed here — and
|
|
217
279
|
// UNCONDITIONALLY, not only when the file was just added: a KB whose
|
|
218
|
-
//
|
|
280
|
+
// guide predates the CLAUDE.md→AGENTS.md rename has an ignore file
|
|
219
281
|
// that lists the old name and knows nothing of the new one, so the
|
|
220
|
-
// conventions doc shows up in the file tree and the agent view.
|
|
282
|
+
// conventions doc shows up in the file tree and the agent view. A KB
|
|
283
|
+
// whose deployment has just RENAMED the guide is the same story one
|
|
284
|
+
// rename later: the rule names a file that is now the customer's.
|
|
221
285
|
// Idempotent: an ignore file already carrying the rule — or absent, in
|
|
222
286
|
// which case the template's copy declared above arrives with the rule in
|
|
223
287
|
// it — changes nothing and produces no note. Deliberately checked by
|
|
224
|
-
// LINE PRESENCE, not effective outcome: a later
|
|
288
|
+
// LINE PRESENCE, not effective outcome: a later `!<guide>` negation is
|
|
225
289
|
// the operator explicitly choosing to SHOW the file, and hiding it is a
|
|
226
290
|
// default this step provides, not a mandate it re-imposes every boot.
|
|
227
|
-
|
|
291
|
+
//
|
|
292
|
+
// The shared-skills root goes the OTHER way. An earlier release hid it
|
|
293
|
+
// like `Plugins/`; the Skills & Tools sidebar now renders it as a file
|
|
294
|
+
// tree read from the workspace tree, which the ignore file filters — so a
|
|
295
|
+
// KB still carrying that rule would show an empty Skills section. The
|
|
296
|
+
// line that release wrote comes out, recognised by the PLATFORM'S OWN
|
|
297
|
+
// COMMENT above it — an operator who wrote the same rule by hand keeps
|
|
298
|
+
// it, for the same reason the negation above is kept: the file is
|
|
299
|
+
// theirs. The Knowledge explorer never rendered the root and still does
|
|
300
|
+
// not. Spelled with the CONFIGURED root name, since a deployment may
|
|
301
|
+
// have renamed it.
|
|
302
|
+
//
|
|
303
|
+
// The plugins root follows the skills root: the same sidebar now draws
|
|
304
|
+
// it as a file tree too, so the rule that hid it since the first seed
|
|
305
|
+
// comes out. That one has no comment to know it by — it was in the
|
|
306
|
+
// template body from the start — so every line spelling it goes,
|
|
307
|
+
// whoever wrote it (see `withoutIgnoreLine`). ONE read-modify-write for
|
|
308
|
+
// all the rules: separate passes would each read the on-disk file and
|
|
309
|
+
// a later declared write would lose an earlier one's.
|
|
310
|
+
added.push(
|
|
311
|
+
...(await this.reconcileIgnoreRules(repoDir, branch, {
|
|
312
|
+
// The preamble rule is respelled before it is added: a knowledge base
|
|
313
|
+
// that booted the release shipping the unanchored spelling carries the
|
|
314
|
+
// platform's own line, and that line hides a nested namesake too.
|
|
315
|
+
respell: [[PREAMBLE_FILE, PREAMBLE_IGNORE_PATTERN]],
|
|
316
|
+
// As a gitignore PATTERN: a guide name that reads as syntax there is
|
|
317
|
+
// escaped, or the rule would hide nothing.
|
|
318
|
+
add: [gitignoreLiteral(agentsFile), PREAMBLE_IGNORE_PATTERN],
|
|
319
|
+
drop: [`${SKILLS_DIR}/`],
|
|
320
|
+
dropEvery: [`${PLUGINS_DIR}/`],
|
|
321
|
+
// The guide's rule FOLLOWS its name. Once the guide is `HEXIS.md`, the
|
|
322
|
+
// root's `AGENTS.md` is the customer's own conventions file and they
|
|
323
|
+
// must be able to see and edit it in the app — so the platform's own
|
|
324
|
+
// line comes out, recognised the way the skills-root line was
|
|
325
|
+
// (see {@link withoutPlatformAgentsRule}); a rule an operator wrote by
|
|
326
|
+
// hand is theirs and stays.
|
|
327
|
+
dropAgentsRule: renamed,
|
|
328
|
+
})),
|
|
329
|
+
);
|
|
228
330
|
|
|
229
|
-
//
|
|
331
|
+
// The guide is MANAGED, not merely seeded: the platform owns its content,
|
|
230
332
|
// and a stale copy is replaced with the packaged template's every startup
|
|
231
333
|
// phase. The file's own header says so, which is what makes overwriting
|
|
232
334
|
// edits a stated contract instead of a surprise.
|
|
233
335
|
let agentsRefreshed = false;
|
|
234
|
-
if (
|
|
235
|
-
|
|
236
|
-
|
|
336
|
+
if (
|
|
337
|
+
!added.includes(agentsFile) &&
|
|
338
|
+
(await templates.differsFrom(repoDir, agentsFile, LEGACY_AGENTS_FILE))
|
|
339
|
+
) {
|
|
340
|
+
branch.write(agentsFile, await templates.read(LEGACY_AGENTS_FILE));
|
|
341
|
+
added.push(agentsFile);
|
|
237
342
|
agentsRefreshed = true;
|
|
238
343
|
}
|
|
239
344
|
|
|
345
|
+
// What becomes of the `AGENTS.md` the platform used to own, now that the
|
|
346
|
+
// guide lives somewhere else. Nothing at all while the name is the default.
|
|
347
|
+
if (renamed) {
|
|
348
|
+
added.push(
|
|
349
|
+
...(await this.reconcileLegacyGuide(repoDir, branch, {
|
|
350
|
+
agentsFile,
|
|
351
|
+
// Only on the boot the rename lands — the boot that first writes the
|
|
352
|
+
// guide under its new name. Said every boot after, the "kept" note
|
|
353
|
+
// would caption commits about other things forever.
|
|
354
|
+
announceKept: added.includes(agentsFile),
|
|
355
|
+
})),
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
|
|
240
359
|
added.push(...this.ensureRequiredDirs(repoDir, branch, await this.missingDirs(repoDir)));
|
|
241
360
|
|
|
242
361
|
if (added.length === 0) return;
|
|
@@ -244,11 +363,102 @@ export class TemplateFilesStep implements OnServerStart {
|
|
|
244
363
|
// first to dirty the branch.
|
|
245
364
|
branch.note(
|
|
246
365
|
agentsRefreshed && added.length === 1
|
|
247
|
-
?
|
|
366
|
+
? `Update ${agentsFile} to the current platform template`
|
|
248
367
|
: `Add missing KB scaffolding: ${added.join(', ')}`,
|
|
249
368
|
);
|
|
250
369
|
}
|
|
251
370
|
|
|
371
|
+
/**
|
|
372
|
+
* The root `AGENTS.md` on a deployment whose guide is called something else:
|
|
373
|
+
* removed when the platform can PROVE it wrote it, otherwise left alone —
|
|
374
|
+
* and, while the admin keeps the link setting on, given the one sentence
|
|
375
|
+
* that points at the guide beside it.
|
|
376
|
+
*
|
|
377
|
+
* Removal is gated on the managed header and nothing else. An admin who
|
|
378
|
+
* renames the guide on a knowledge base the platform seeded would otherwise
|
|
379
|
+
* be left with stale platform content sitting under the very name they
|
|
380
|
+
* wanted for their own file; an admin who renames it on a repository whose
|
|
381
|
+
* `AGENTS.md` is their own must find that file byte-for-byte untouched. The
|
|
382
|
+
* header is the one fact that tells the two apart, so it is the one thing
|
|
383
|
+
* asked.
|
|
384
|
+
*
|
|
385
|
+
* The pointer is bounded by three conditions, all of them the customer's to
|
|
386
|
+
* control: the admin keeps the setting on, the file exists (one is NEVER
|
|
387
|
+
* created for this), and the guide's name appears nowhere in the text. That
|
|
388
|
+
* last one is a plain content search on purpose — a mention in the
|
|
389
|
+
* customer's own words, a link, a heading, all count, and the platform stays
|
|
390
|
+
* out of a file it does not own.
|
|
391
|
+
*
|
|
392
|
+
* Returns the paths changed, for the note.
|
|
393
|
+
*/
|
|
394
|
+
private async reconcileLegacyGuide(
|
|
395
|
+
repoDir: string,
|
|
396
|
+
branch: KbBranch,
|
|
397
|
+
opts: { agentsFile: string; announceKept: boolean },
|
|
398
|
+
): Promise<string[]> {
|
|
399
|
+
const legacyPath = path.join(repoDir, LEGACY_AGENTS_FILE);
|
|
400
|
+
// `lstat` first, and a REGULAR FILE or nothing at all.
|
|
401
|
+
//
|
|
402
|
+
// Nothing there is the ordinary case: no customer file means nothing to
|
|
403
|
+
// remove and nothing to point at the guide — the platform never creates an
|
|
404
|
+
// `AGENTS.md` for this.
|
|
405
|
+
//
|
|
406
|
+
// Anything that is not a plain file is left exactly as it is. A SYMLINK is
|
|
407
|
+
// the case that matters: reading one follows it, so a link pointing at a
|
|
408
|
+
// knowledge base's managed guide — or at any other file carrying the
|
|
409
|
+
// header — would read as "ours" and the removal would take the customer's
|
|
410
|
+
// entry; writing one follows it too, and the pointer sentence would land
|
|
411
|
+
// in a file at the other end that nobody asked us to edit. Links are never
|
|
412
|
+
// followed anywhere else in the platform, and they are not followed here.
|
|
413
|
+
// A directory under the name is the same answer for the same reason.
|
|
414
|
+
const found = await this.disk.lstatOrNull(legacyPath);
|
|
415
|
+
if (found === null || !found.isFile()) return [];
|
|
416
|
+
|
|
417
|
+
let current: string;
|
|
418
|
+
try {
|
|
419
|
+
current = await this.disk.readTextFile(legacyPath);
|
|
420
|
+
} catch (err) {
|
|
421
|
+
// Gone between the probe and the read — a concurrent delete reads as the
|
|
422
|
+
// absence it is, on the same terms as the probe above.
|
|
423
|
+
if (isAbsence(err)) return [];
|
|
424
|
+
throw err;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
if (isManagedGuide(current)) {
|
|
428
|
+
branch.remove(LEGACY_AGENTS_FILE);
|
|
429
|
+
branch.note(`Remove the platform-written AGENTS.md — the agent guide is now ${opts.agentsFile}`);
|
|
430
|
+
return [LEGACY_AGENTS_FILE];
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
if (opts.announceKept) {
|
|
434
|
+
branch.note('Keep AGENTS.md — it is not a platform template, so it is the knowledge base\'s own');
|
|
435
|
+
}
|
|
436
|
+
// The admin's consent gates every write below, this file being theirs.
|
|
437
|
+
if (!this.agentsFileLink()) return [];
|
|
438
|
+
|
|
439
|
+
// A sentence of OURS already in the file is updated rather than joined by
|
|
440
|
+
// a second one. The guide's name can be changed again, and after a second
|
|
441
|
+
// rename the sentence this step wrote last time points at a file that is
|
|
442
|
+
// no longer there — which asking "is the new name mentioned?" cannot see,
|
|
443
|
+
// because the old sentence does not mention it.
|
|
444
|
+
const retargeted = retargetAgentsFilePointer(current, opts.agentsFile);
|
|
445
|
+
if (retargeted !== null) {
|
|
446
|
+
if (retargeted === current) return [];
|
|
447
|
+
branch.write(LEGACY_AGENTS_FILE, retargeted);
|
|
448
|
+
branch.note(`Point the sentence in AGENTS.md at ${opts.agentsFile}`);
|
|
449
|
+
return [LEGACY_AGENTS_FILE];
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Nothing of ours in there, so the question is the customer's own text.
|
|
453
|
+
// Asked through the shared reading, not a raw `includes`: the sentence
|
|
454
|
+
// spells the name escaped and percent-encoded, so on a punctuated name the
|
|
455
|
+
// copy written last boot need not carry the raw name at all.
|
|
456
|
+
if (mentionsAgentsFile(current, opts.agentsFile)) return [];
|
|
457
|
+
branch.write(LEGACY_AGENTS_FILE, withPointerSentence(current, opts.agentsFile));
|
|
458
|
+
branch.note(`Add a pointer to ${opts.agentsFile} at the end of AGENTS.md`);
|
|
459
|
+
return [LEGACY_AGENTS_FILE];
|
|
460
|
+
}
|
|
461
|
+
|
|
252
462
|
/**
|
|
253
463
|
* Which reserved roots are absent — and which are SQUATTED. `lstat`, not
|
|
254
464
|
* `exists`: `fs.access` answers "is there something here?", which is true of
|
|
@@ -262,8 +472,8 @@ export class TemplateFilesStep implements OnServerStart {
|
|
|
262
472
|
*/
|
|
263
473
|
private async missingDirs(repoDir: string): Promise<string[]> {
|
|
264
474
|
const missing: string[] = [];
|
|
265
|
-
for (const rootDir of this.
|
|
266
|
-
const found = await lstatOrNull(path.join(repoDir, rootDir));
|
|
475
|
+
for (const rootDir of reservedRootDirs(this.extraRootDirs)) {
|
|
476
|
+
const found = await this.disk.lstatOrNull(path.join(repoDir, rootDir));
|
|
267
477
|
if (found) {
|
|
268
478
|
if (found.isDirectory()) continue;
|
|
269
479
|
throw new Error(
|
|
@@ -291,70 +501,315 @@ export class TemplateFilesStep implements OnServerStart {
|
|
|
291
501
|
}
|
|
292
502
|
return added;
|
|
293
503
|
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Reconcile the platform's OWN rules in `.bevelignore`: every `respell` pair
|
|
507
|
+
* rewritten in place, every `add` pattern guaranteed present as a line, every
|
|
508
|
+
* `drop` pattern taken out. Returns the paths changed, for the note.
|
|
509
|
+
*
|
|
510
|
+
* Never rewrites the rest. The file is the operator's, and every rule already
|
|
511
|
+
* in it is theirs to keep: adding puts one line under a comment saying where
|
|
512
|
+
* it came from, and dropping removes exactly the line (and the comment) an
|
|
513
|
+
* earlier release put there — never a line the operator wrote. Absent file is
|
|
514
|
+
* a no-op — it means the template's copy (declared in the same step, and
|
|
515
|
+
* reconciled the same way at declaration) arrives with the right rules in it.
|
|
516
|
+
*
|
|
517
|
+
* Matched line-wise rather than by substring: a rule for `Plugins/AGENTS.md`
|
|
518
|
+
* is not a rule for the root `AGENTS.md`, and treating it as one would leave
|
|
519
|
+
* the mismatch this exists to close.
|
|
520
|
+
*/
|
|
521
|
+
private async reconcileIgnoreRules(
|
|
522
|
+
repoDir: string,
|
|
523
|
+
branch: KbBranch,
|
|
524
|
+
rules: {
|
|
525
|
+
add: string[];
|
|
526
|
+
drop: string[];
|
|
527
|
+
dropEvery?: string[];
|
|
528
|
+
/** `[from, to]` pairs: a rule an earlier release wrote, and its spelling now. */
|
|
529
|
+
respell?: ReadonlyArray<readonly [string, string]>;
|
|
530
|
+
/** Take out the platform's own `AGENTS.md` line — the guide is called something else now. */
|
|
531
|
+
dropAgentsRule?: boolean;
|
|
532
|
+
},
|
|
533
|
+
): Promise<string[]> {
|
|
534
|
+
let current: string;
|
|
535
|
+
try {
|
|
536
|
+
current = await fs.readFile(path.join(repoDir, IGNORE_FILENAME), 'utf8');
|
|
537
|
+
} catch (err) {
|
|
538
|
+
// No ignore file — the copy declared from the template arrives with the
|
|
539
|
+
// right rules in it (guaranteed at declaration time, see the
|
|
540
|
+
// required-files loop above). A file that is there but cannot be read is
|
|
541
|
+
// NOT "no file": its rules may still be hiding the tree, so the hole is
|
|
542
|
+
// the step's failure, as it is for the migration's retirement.
|
|
543
|
+
if (!isAbsence(err)) throw err;
|
|
544
|
+
return [];
|
|
545
|
+
}
|
|
546
|
+
const respelled = (rules.respell ?? []).reduce(
|
|
547
|
+
(text, [from, to]) => withPlatformIgnorePatternRespelled(text, from, to),
|
|
548
|
+
current,
|
|
549
|
+
);
|
|
550
|
+
const added = rules.add.reduce((text, pattern) => withIgnorePattern(text, pattern), respelled);
|
|
551
|
+
const dropped = (rules.dropEvery ?? []).reduce(
|
|
552
|
+
(text, pattern) => withoutIgnoreLine(text, pattern),
|
|
553
|
+
rules.drop.reduce((text, pattern) => withoutPlatformIgnorePattern(text, pattern), added),
|
|
554
|
+
);
|
|
555
|
+
const merged = rules.dropAgentsRule ? withoutPlatformAgentsRule(dropped) : dropped;
|
|
556
|
+
if (merged === current) return [];
|
|
557
|
+
branch.write(IGNORE_FILENAME, merged);
|
|
558
|
+
return [IGNORE_FILENAME];
|
|
559
|
+
}
|
|
294
560
|
}
|
|
295
561
|
|
|
296
|
-
/**
|
|
297
|
-
|
|
298
|
-
|
|
562
|
+
/**
|
|
563
|
+
* `text` without EVERY line that is exactly `pattern`, whoever wrote it, and
|
|
564
|
+
* without a platform comment sitting directly above one. The other drop keeps
|
|
565
|
+
* an operator's identical line; this one does not, and the difference is
|
|
566
|
+
* deliberate: the plugins-root rule was in the template from the first seed
|
|
567
|
+
* with no comment to know it by, so provenance cannot decide it — and the
|
|
568
|
+
* Skills & Tools sidebar now renders that root as a file tree read from the
|
|
569
|
+
* workspace tree, which the rule would empty. A `!pattern` negation is not
|
|
570
|
+
* the pattern and stays. A platform comment directly above a dropped line
|
|
571
|
+
* goes with it, and so does the blank line that opened an appended block —
|
|
572
|
+
* the same tidy-up `withoutPlatformIgnorePattern` does, so a file either
|
|
573
|
+
* step cleans reads the same afterwards.
|
|
574
|
+
*
|
|
575
|
+
* Exported for the Groups→Plugins step, which retires the same rules on the
|
|
576
|
+
* branches this step never visits (drafts).
|
|
577
|
+
*/
|
|
578
|
+
export function withoutIgnoreLine(text: string, pattern: string): string {
|
|
579
|
+
const lines = text.split('\n');
|
|
580
|
+
const kept: string[] = [];
|
|
581
|
+
for (const line of lines) {
|
|
582
|
+
if (line.trim() !== pattern) {
|
|
583
|
+
kept.push(line);
|
|
584
|
+
continue;
|
|
585
|
+
}
|
|
586
|
+
const above = kept[kept.length - 1];
|
|
587
|
+
if (above === undefined || !isPlatformRuleComment(above)) continue;
|
|
588
|
+
kept.pop();
|
|
589
|
+
if (above.trim() === PLATFORM_RULE_COMMENT && kept.length > 1 && kept[kept.length - 1]?.trim() === '') kept.pop();
|
|
590
|
+
}
|
|
591
|
+
return kept.join('\n');
|
|
299
592
|
}
|
|
300
593
|
|
|
594
|
+
/** The legacy comment `withIgnorePattern` wrote above the guide's rule. */
|
|
595
|
+
const PLATFORM_RULE_COMMENT = '# Added by the platform: the conventions doc is not node content.';
|
|
596
|
+
|
|
597
|
+
/** The comment the packaged template carries above the guide's rule. */
|
|
598
|
+
const AGENTS_RULE_COMMENT = "# The platform's agent guide.";
|
|
599
|
+
|
|
301
600
|
/**
|
|
302
|
-
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
601
|
+
* The repo-hygiene BLOCK of the packaged `.bevelignore`, exactly as every
|
|
602
|
+
* release that shipped a bare guide rule wrote it, in order, ending at the
|
|
603
|
+
* line that has always sat directly above that rule.
|
|
604
|
+
*
|
|
605
|
+
* It stands in for a comment on knowledge bases seeded before there was one.
|
|
606
|
+
* The guide's rule shipped in the template body from the first seed, bare,
|
|
607
|
+
* like the plugins-root rule did — but unlike that one it must not be dropped
|
|
608
|
+
* wholesale, because an operator who writes `AGENTS.md` into their own ignore
|
|
609
|
+
* file is saying something the platform has no business overruling.
|
|
610
|
+
*
|
|
611
|
+
* So provenance is the block the template put it in, and the WHOLE block is
|
|
612
|
+
* asked for. The single line above it is not enough: `.gitattributes` is an
|
|
613
|
+
* entry anyone might list, and a hand-written file that happens to name
|
|
614
|
+
* `AGENTS.md` under it would have had its rule read as the platform's and
|
|
615
|
+
* deleted. Three lines in the template's own order and wording are not
|
|
616
|
+
* something an operator arrives at by coincidence — and a file that does
|
|
617
|
+
* carry them carries the platform's block, however it got there.
|
|
305
618
|
*/
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
619
|
+
const TEMPLATE_HYGIENE_BLOCK_ABOVE_AGENTS_RULE: readonly string[] = [
|
|
620
|
+
'# Repo hygiene files that clutter the tree without being node content.',
|
|
621
|
+
'.gitignore',
|
|
622
|
+
'.gitattributes',
|
|
623
|
+
];
|
|
624
|
+
|
|
625
|
+
/** Whether the lines kept so far END with that block — i.e. the next line is the slot. */
|
|
626
|
+
function followsTemplateHygieneBlock(kept: readonly string[]): boolean {
|
|
627
|
+
const block = TEMPLATE_HYGIENE_BLOCK_ABOVE_AGENTS_RULE;
|
|
628
|
+
if (kept.length < block.length) return false;
|
|
629
|
+
return kept.slice(-block.length).every((line, i) => line.trim() === block[i]);
|
|
313
630
|
}
|
|
314
631
|
|
|
315
632
|
/**
|
|
316
|
-
*
|
|
317
|
-
*
|
|
633
|
+
* `text` without the `AGENTS.md` line THE PLATFORM WROTE — under its own
|
|
634
|
+
* comment (either spelling), or in the slot at the end of the template's own
|
|
635
|
+
* repo-hygiene block ({@link TEMPLATE_HYGIENE_BLOCK_ABOVE_AGENTS_RULE}) — and
|
|
636
|
+
* without that comment.
|
|
318
637
|
*
|
|
319
|
-
*
|
|
320
|
-
*
|
|
321
|
-
*
|
|
322
|
-
|
|
323
|
-
|
|
638
|
+
* Called only when the guide has been renamed, which is what makes the line
|
|
639
|
+
* wrong: it hides a file the platform no longer owns. A `!AGENTS.md` negation
|
|
640
|
+
* is not the rule and stays, as everywhere else here.
|
|
641
|
+
*/
|
|
642
|
+
export function withoutPlatformAgentsRule(text: string): string {
|
|
643
|
+
const lines = text.split('\n');
|
|
644
|
+
const kept: string[] = [];
|
|
645
|
+
for (const line of lines) {
|
|
646
|
+
const above = kept[kept.length - 1];
|
|
647
|
+
const ours =
|
|
648
|
+
line.trim() === LEGACY_AGENTS_FILE &&
|
|
649
|
+
above !== undefined &&
|
|
650
|
+
(isPlatformRuleComment(above) || followsTemplateHygieneBlock(kept));
|
|
651
|
+
if (!ours) {
|
|
652
|
+
kept.push(line);
|
|
653
|
+
continue;
|
|
654
|
+
}
|
|
655
|
+
// The hygiene block above the rule is content, not a marker: those lines
|
|
656
|
+
// hide `.gitignore` and `.gitattributes` and stay. Only a comment the
|
|
657
|
+
// platform wrote goes with the rule it introduced.
|
|
658
|
+
if (!isPlatformRuleComment(above)) continue;
|
|
659
|
+
kept.pop();
|
|
660
|
+
// The blank line that opened an appended block goes with it; the template's
|
|
661
|
+
// own comment sits inline, with content above it, and nothing to tidy.
|
|
662
|
+
const appended = above.trim() === PLATFORM_RULE_COMMENT || above.trim() === AGENTS_RULE_COMMENT;
|
|
663
|
+
if (appended && kept.length > 1 && kept[kept.length - 1]?.trim() === '') kept.pop();
|
|
664
|
+
}
|
|
665
|
+
return kept.join('\n');
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
/**
|
|
669
|
+
* `text` with the platform's pointer sentence appended as its own paragraph.
|
|
324
670
|
*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
*
|
|
671
|
+
* One blank line between the customer's last line and ours, whether or not
|
|
672
|
+
* their file ended in a newline: a sentence glued onto the end of their last
|
|
673
|
+
* paragraph would read as a continuation of something they wrote.
|
|
674
|
+
*/
|
|
675
|
+
export function withPointerSentence(text: string, agentsFile: string): string {
|
|
676
|
+
const body = text.replace(/\n+$/, '');
|
|
677
|
+
return `${body}\n\n${agentsFilePointerSentence(agentsFile)}\n`;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/** The comment written above the preamble rule on an existing knowledge base. */
|
|
681
|
+
const PREAMBLE_RULE_COMMENT =
|
|
682
|
+
'# Added by the platform: agent instructions are edited from External agent access.';
|
|
683
|
+
|
|
684
|
+
/**
|
|
685
|
+
* The line an earlier release shipped in the template above the UNANCHORED
|
|
686
|
+
* preamble rule. Recognised as the platform's own, on the same reasoning as
|
|
687
|
+
* the legacy skills line below: a rule under a comment the platform wrote is
|
|
688
|
+
* the platform's to respell, wherever the file came from.
|
|
689
|
+
*/
|
|
690
|
+
const LEGACY_PREAMBLE_TEMPLATE_COMMENT =
|
|
691
|
+
'# The deployment preamble is edited from External agent access, not as a KB page.';
|
|
692
|
+
|
|
693
|
+
/**
|
|
694
|
+
* The template line an earlier release shipped above the shared-skills rule,
|
|
695
|
+
* split around its one variable: the plugins root's name, which a deployment
|
|
696
|
+
* may have renamed since. Everything else is fixed.
|
|
328
697
|
*/
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
698
|
+
const LEGACY_SKILLS_RULE_COMMENT_OPENING = '# The shared-skills root is rendered by the Skills & Tools app, like ';
|
|
699
|
+
const LEGACY_SKILLS_RULE_COMMENT_CLOSING = '/.';
|
|
700
|
+
|
|
701
|
+
/**
|
|
702
|
+
* Whether a line is EXACTLY a comment the platform wrote above a rule it
|
|
703
|
+
* added. For the legacy template line that means the fixed opening, the
|
|
704
|
+
* fixed closing, and between them a name the platform could have rendered
|
|
705
|
+
* there — judged by the ONE rule that decides what a root may be called
|
|
706
|
+
* (`validateKbRootName`), not by a second grammar written here: a hand-made
|
|
707
|
+
* character class either admits names the validator refuses, or refuses
|
|
708
|
+
* names it admits (a space, say), and either way a line the platform did
|
|
709
|
+
* write would be left standing. A looser match (an opening, a substring)
|
|
710
|
+
* errs the other way and takes a line the operator wrote.
|
|
711
|
+
*/
|
|
712
|
+
function isPlatformRuleComment(line: string): boolean {
|
|
713
|
+
const trimmed = line.trim();
|
|
714
|
+
if (
|
|
715
|
+
trimmed === PLATFORM_RULE_COMMENT ||
|
|
716
|
+
trimmed === AGENTS_RULE_COMMENT ||
|
|
717
|
+
trimmed === PREAMBLE_RULE_COMMENT ||
|
|
718
|
+
trimmed === LEGACY_PREAMBLE_TEMPLATE_COMMENT
|
|
719
|
+
) {
|
|
720
|
+
return true;
|
|
721
|
+
}
|
|
722
|
+
if (
|
|
723
|
+
!trimmed.startsWith(LEGACY_SKILLS_RULE_COMMENT_OPENING) ||
|
|
724
|
+
!trimmed.endsWith(LEGACY_SKILLS_RULE_COMMENT_CLOSING)
|
|
725
|
+
) {
|
|
726
|
+
return false;
|
|
338
727
|
}
|
|
339
|
-
const
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
728
|
+
const name = trimmed.slice(
|
|
729
|
+
LEGACY_SKILLS_RULE_COMMENT_OPENING.length,
|
|
730
|
+
trimmed.length - LEGACY_SKILLS_RULE_COMMENT_CLOSING.length,
|
|
731
|
+
);
|
|
732
|
+
return name === name.trim() && validateKbRootName(name) === null;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* `text` without the `pattern` lines THE PLATFORM WROTE — the ones sitting
|
|
737
|
+
* directly under its own comment (the one `withIgnorePattern` writes, or the
|
|
738
|
+
* template line an earlier release shipped) — and without that comment, plus
|
|
739
|
+
* the blank line that opened an appended block. Provenance is the comment:
|
|
740
|
+
* an identical line with no platform comment above it is the operator's and
|
|
741
|
+
* stays, as does a `!pattern` negation. Nothing else moves.
|
|
742
|
+
*/
|
|
743
|
+
function withoutPlatformIgnorePattern(text: string, pattern: string): string {
|
|
744
|
+
const lines = text.split('\n');
|
|
745
|
+
const kept: string[] = [];
|
|
746
|
+
for (const line of lines) {
|
|
747
|
+
const above = kept[kept.length - 1];
|
|
748
|
+
if (line.trim() !== pattern || above === undefined || !isPlatformRuleComment(above)) {
|
|
749
|
+
kept.push(line);
|
|
750
|
+
continue;
|
|
751
|
+
}
|
|
752
|
+
kept.pop();
|
|
753
|
+
if (above.trim() === PLATFORM_RULE_COMMENT && kept.length > 1 && kept[kept.length - 1]?.trim() === '') kept.pop();
|
|
754
|
+
}
|
|
755
|
+
return kept.join('\n');
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
/**
|
|
759
|
+
* `text` with every `from` line THE PLATFORM WROTE respelled as `to`, its
|
|
760
|
+
* comment left where it is. Provenance is that comment, as everywhere else
|
|
761
|
+
* here: a bare rule the OPERATOR wrote is theirs and is not touched.
|
|
762
|
+
*
|
|
763
|
+
* This exists for one migration. An earlier release hid the preamble with the
|
|
764
|
+
* unanchored `mcp-description.md`, which also hides an ordinary knowledge
|
|
765
|
+
* page of that name anywhere in the tree; the rule the platform means is the
|
|
766
|
+
* root-anchored one. Respelling its own line is not the same as overruling an
|
|
767
|
+
* operator who chose the broad spelling, which is why the two are told apart.
|
|
768
|
+
*/
|
|
769
|
+
function withPlatformIgnorePatternRespelled(text: string, from: string, to: string): string {
|
|
770
|
+
const lines = text.split('\n');
|
|
771
|
+
return lines
|
|
772
|
+
.map((line, i) => {
|
|
773
|
+
if (line.trim() !== from) return line;
|
|
774
|
+
const above = lines[i - 1];
|
|
775
|
+
if (above === undefined || !isPlatformRuleComment(above)) return line;
|
|
776
|
+
// Function replacement: `to` is a pattern to `String.replace`, and a
|
|
777
|
+
// rule spelled with a `$` would otherwise be read as one.
|
|
778
|
+
return line.replace(from, () => to);
|
|
779
|
+
})
|
|
780
|
+
.join('\n');
|
|
343
781
|
}
|
|
344
782
|
|
|
345
783
|
/**
|
|
346
784
|
* `text` with `pattern` guaranteed present as a LINE — appended under a
|
|
347
785
|
* comment naming its origin when absent, returned unchanged when present.
|
|
348
|
-
* Line-wise match, same rationale as {@link
|
|
786
|
+
* Line-wise match, same rationale as {@link mergeIgnorePatterns}.
|
|
349
787
|
*
|
|
350
788
|
* An explicit `!pattern` line also returns the text unchanged: that is the
|
|
351
789
|
* operator choosing to SHOW the file, and ordered matching means a positive
|
|
352
790
|
* line appended after it would win and silently defeat the choice. Hiding
|
|
353
791
|
* the conventions doc is a default this provides, never a mandate.
|
|
792
|
+
*
|
|
793
|
+
* The preamble rule reads its unanchored spelling the same way. By the time
|
|
794
|
+
* this runs, the platform's OWN legacy line has been respelled (see
|
|
795
|
+
* {@link withPlatformIgnorePatternRespelled}), so a bare `mcp-description.md`
|
|
796
|
+
* still standing here is the operator's: it already hides the file, and
|
|
797
|
+
* appending the anchored rule beside it would say nothing they have not.
|
|
354
798
|
*/
|
|
355
799
|
function withIgnorePattern(text: string, pattern: string): string {
|
|
356
800
|
const lines = text.split('\n').map((l) => l.trim());
|
|
357
|
-
|
|
801
|
+
const operatorPreambleRule =
|
|
802
|
+
pattern === PREAMBLE_IGNORE_PATTERN &&
|
|
803
|
+
(lines.includes(PREAMBLE_FILE) || lines.includes(`!${PREAMBLE_FILE}`));
|
|
804
|
+
if (lines.includes(pattern) || lines.includes(`!${pattern}`) || operatorPreambleRule) return text;
|
|
358
805
|
const separator = text.endsWith('\n') ? '' : '\n';
|
|
359
|
-
|
|
806
|
+
// The guide's rule arrives as a gitignore literal (escaped where the name
|
|
807
|
+
// needs it), so it is recognised in that spelling.
|
|
808
|
+
const comment =
|
|
809
|
+
pattern === PREAMBLE_IGNORE_PATTERN
|
|
810
|
+
? PREAMBLE_RULE_COMMENT
|
|
811
|
+
: pattern === gitignoreLiteral(AGENTS_FILE)
|
|
812
|
+
? AGENTS_RULE_COMMENT
|
|
813
|
+
: PLATFORM_RULE_COMMENT;
|
|
814
|
+
return `${text}${separator}\n${comment}\n${pattern}\n`;
|
|
360
815
|
}
|