@bevel-software/platform-core-backend 0.15.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD-PARTY-NOTICES.md +4 -4
- package/dist/core/catalog-cache-invalidation.d.ts +16 -0
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/catalog-cache-invalidation.js +6 -1
- package/dist/core/catalog-cache-invalidation.js.map +1 -1
- package/dist/core/catalog-revision.d.ts +39 -0
- package/dist/core/catalog-revision.d.ts.map +1 -0
- package/dist/core/catalog-revision.js +94 -0
- package/dist/core/catalog-revision.js.map +1 -0
- package/dist/core/create-core-server.d.ts +7 -0
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +199 -75
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +49 -2
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +212 -86
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +138 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +218 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/public-config.d.ts +82 -0
- package/dist/core/public-config.d.ts.map +1 -0
- package/dist/core/public-config.js +78 -0
- package/dist/core/public-config.js.map +1 -0
- package/dist/core/readiness.d.ts +86 -0
- package/dist/core/readiness.d.ts.map +1 -0
- package/dist/core/readiness.js +56 -0
- package/dist/core/readiness.js.map +1 -0
- package/dist/core-config.d.ts +30 -0
- package/dist/core-config.d.ts.map +1 -1
- package/dist/core-config.js +64 -2
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +215 -11
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +57 -11
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +616 -155
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +71 -5
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +161 -13
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-view.d.ts +147 -0
- package/dist/modules/access/access-view.d.ts.map +1 -0
- package/dist/modules/access/access-view.js +211 -0
- package/dist/modules/access/access-view.js.map +1 -0
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +255 -79
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +2 -3
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +9 -8
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts.map +1 -1
- package/dist/modules/access/admin-route-helpers.js +4 -4
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +53 -0
- package/dist/modules/access/change-read-gate.d.ts.map +1 -0
- package/dist/modules/access/change-read-gate.js +134 -0
- package/dist/modules/access/change-read-gate.js.map +1 -0
- package/dist/modules/access/creator-access.d.ts +33 -39
- package/dist/modules/access/creator-access.d.ts.map +1 -1
- package/dist/modules/access/creator-access.js +92 -119
- package/dist/modules/access/creator-access.js.map +1 -1
- package/dist/modules/access/directory-sync-bot.d.ts.map +1 -1
- package/dist/modules/access/directory-sync-bot.js +3 -1
- package/dist/modules/access/directory-sync-bot.js.map +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +3 -3
- package/dist/modules/access/groups-admin.service.js +2 -2
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/reference-scan.d.ts.map +1 -1
- package/dist/modules/access/reference-scan.js +5 -4
- package/dist/modules/access/reference-scan.js.map +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +72 -13
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +71 -13
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +8 -6
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/synced-groups-writer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-writer.js +3 -8
- package/dist/modules/access/synced-groups-writer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +209 -0
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -0
- package/dist/modules/access/user-access-removal.service.js +662 -0
- package/dist/modules/access/user-access-removal.service.js.map +1 -0
- package/dist/modules/access-model/access-errors.d.ts +32 -1
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +38 -11
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +49 -24
- package/dist/modules/access-model/access-grammar.d.ts.map +1 -1
- package/dist/modules/access-model/access-grammar.js +68 -48
- package/dist/modules/access-model/access-grammar.js.map +1 -1
- package/dist/modules/access-model/access-splice.d.ts.map +1 -1
- package/dist/modules/access-model/access-splice.js +18 -18
- package/dist/modules/access-model/access-splice.js.map +1 -1
- package/dist/modules/access-model/access-template.d.ts +22 -0
- package/dist/modules/access-model/access-template.d.ts.map +1 -0
- package/dist/modules/access-model/access-template.js +42 -0
- package/dist/modules/access-model/access-template.js.map +1 -0
- package/dist/modules/access-model/change-gate.d.ts +65 -0
- package/dist/modules/access-model/change-gate.d.ts.map +1 -0
- package/dist/modules/access-model/change-gate.js +25 -0
- package/dist/modules/access-model/change-gate.js.map +1 -0
- package/dist/modules/access-model/creator.d.ts +13 -16
- package/dist/modules/access-model/creator.d.ts.map +1 -1
- package/dist/modules/access-model/creator.js.map +1 -1
- package/dist/modules/access-model/frontmatter-lines.d.ts +27 -0
- package/dist/modules/access-model/frontmatter-lines.d.ts.map +1 -0
- package/dist/modules/access-model/frontmatter-lines.js +74 -0
- package/dist/modules/access-model/frontmatter-lines.js.map +1 -0
- package/dist/modules/access-model/plugin-principals.d.ts +5 -3
- package/dist/modules/access-model/plugin-principals.d.ts.map +1 -1
- package/dist/modules/access-model/plugin-principals.js +11 -17
- package/dist/modules/access-model/plugin-principals.js.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +73 -2
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +153 -3
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/admin/admin-access.service.d.ts.map +1 -1
- package/dist/modules/admin/admin-access.service.js +5 -2
- package/dist/modules/admin/admin-access.service.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +21 -0
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -0
- package/dist/modules/agent-instructions/agent-instructions.routes.js +38 -0
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -0
- package/dist/modules/agent-instructions/compose.d.ts +71 -0
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -0
- package/dist/modules/agent-instructions/compose.js +234 -0
- package/dist/modules/agent-instructions/compose.js.map +1 -0
- package/dist/modules/agent-instructions/index.d.ts +4 -0
- package/dist/modules/agent-instructions/index.d.ts.map +1 -0
- package/dist/modules/agent-instructions/index.js +4 -0
- package/dist/modules/agent-instructions/index.js.map +1 -0
- package/dist/modules/agent-instructions/read-preamble.d.ts +37 -0
- package/dist/modules/agent-instructions/read-preamble.d.ts.map +1 -0
- package/dist/modules/agent-instructions/read-preamble.js +81 -0
- package/dist/modules/agent-instructions/read-preamble.js.map +1 -0
- package/dist/modules/auth/account-erasure.service.d.ts +30 -4
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +96 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +6 -3
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +109 -10
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.routes.d.ts +10 -3
- package/dist/modules/auth/auth.routes.d.ts.map +1 -1
- package/dist/modules/auth/auth.routes.js +9 -4
- package/dist/modules/auth/auth.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +89 -5
- package/dist/modules/auth/auth.service.d.ts.map +1 -1
- package/dist/modules/auth/auth.service.js +160 -25
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.d.ts +46 -3
- package/dist/modules/auth/oidc-auth-provider.d.ts.map +1 -1
- package/dist/modules/auth/oidc-auth-provider.js +99 -21
- package/dist/modules/auth/oidc-auth-provider.js.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.d.ts.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.js +14 -2
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +56 -7
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/advisory-lock.d.ts +103 -0
- package/dist/modules/database/advisory-lock.d.ts.map +1 -0
- package/dist/modules/database/advisory-lock.js +320 -0
- package/dist/modules/database/advisory-lock.js.map +1 -0
- package/dist/modules/database/connection.d.ts.map +1 -1
- package/dist/modules/database/connection.js +9 -1
- package/dist/modules/database/connection.js.map +1 -1
- package/dist/modules/database/core-schema.d.ts +346 -0
- package/dist/modules/database/core-schema.d.ts.map +1 -1
- package/dist/modules/database/core-schema.js +119 -0
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/database/migrate.d.ts.map +1 -1
- package/dist/modules/database/migrate.js +26 -6
- package/dist/modules/database/migrate.js.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.d.ts.map +1 -1
- package/dist/modules/declared-variables/declared-variables.routes.js +4 -2
- package/dist/modules/declared-variables/declared-variables.routes.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +2 -4
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/diff/diff.service.d.ts +4 -1
- package/dist/modules/diff/diff.service.d.ts.map +1 -1
- package/dist/modules/diff/diff.service.js +79 -81
- package/dist/modules/diff/diff.service.js.map +1 -1
- package/dist/modules/kb-fs/bevel-ignore.d.ts +35 -0
- package/dist/modules/kb-fs/bevel-ignore.d.ts.map +1 -0
- package/dist/modules/kb-fs/bevel-ignore.js +71 -0
- package/dist/modules/kb-fs/bevel-ignore.js.map +1 -0
- package/dist/modules/kb-fs/file-change-notifier.d.ts.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.js +3 -1
- package/dist/modules/kb-fs/file-change-notifier.js.map +1 -1
- package/dist/modules/kb-fs/git-guarded-filesystem.d.ts +37 -0
- package/dist/modules/kb-fs/git-guarded-filesystem.d.ts.map +1 -0
- package/dist/modules/kb-fs/git-guarded-filesystem.js +104 -0
- package/dist/modules/kb-fs/git-guarded-filesystem.js.map +1 -0
- package/dist/modules/kb-fs/locking-filesystem.d.ts +113 -18
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +353 -76
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/node-fs.d.ts +23 -0
- package/dist/modules/kb-fs/node-fs.d.ts.map +1 -0
- package/dist/modules/kb-fs/node-fs.js +158 -0
- package/dist/modules/kb-fs/node-fs.js.map +1 -0
- package/dist/modules/kb-fs/read-only-filesystem.d.ts +10 -9
- package/dist/modules/kb-fs/read-only-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/read-only-filesystem.js +18 -9
- package/dist/modules/kb-fs/read-only-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.d.ts +100 -3
- package/dist/modules/kb-fs/repo-path.d.ts.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +195 -3
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.routes.js +4 -2
- package/dist/modules/kb-sync/kb-sync.routes.js.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +7 -5
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/marketplace/git-http.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/git-http.routes.js +6 -4
- package/dist/modules/marketplace/git-http.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts +12 -2
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js +32 -3
- package/dist/modules/marketplace/github-facade/github-facade-admin.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts +27 -0
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js +45 -0
- package/dist/modules/marketplace/github-facade/github-facade-credentials.service.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.routes.js +30 -6
- package/dist/modules/marketplace/github-facade/github-facade.routes.js.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts +21 -9
- package/dist/modules/marketplace/github-facade/github-facade.service.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/github-facade.service.js +60 -19
- package/dist/modules/marketplace/github-facade/github-facade.service.js.map +1 -1
- package/dist/modules/marketplace/github-facade/index.d.ts +1 -1
- package/dist/modules/marketplace/github-facade/index.d.ts.map +1 -1
- package/dist/modules/marketplace/github-facade/index.js +1 -1
- package/dist/modules/marketplace/github-facade/index.js.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts +14 -1
- package/dist/modules/marketplace/marketplace-repo.service.d.ts.map +1 -1
- package/dist/modules/marketplace/marketplace-repo.service.js +26 -8
- package/dist/modules/marketplace/marketplace-repo.service.js.map +1 -1
- package/dist/modules/mcp/downstream-pool.d.ts +107 -0
- package/dist/modules/mcp/downstream-pool.d.ts.map +1 -0
- package/dist/modules/mcp/downstream-pool.js +221 -0
- package/dist/modules/mcp/downstream-pool.js.map +1 -0
- package/dist/modules/mcp/downstream-token-refresh.d.ts +77 -0
- package/dist/modules/mcp/downstream-token-refresh.d.ts.map +1 -0
- package/dist/modules/mcp/downstream-token-refresh.js +166 -0
- package/dist/modules/mcp/downstream-token-refresh.js.map +1 -0
- package/dist/modules/mcp/first-call-probe.cli-args.d.ts +78 -0
- package/dist/modules/mcp/first-call-probe.cli-args.d.ts.map +1 -0
- package/dist/modules/mcp/first-call-probe.cli-args.js +151 -0
- package/dist/modules/mcp/first-call-probe.cli-args.js.map +1 -0
- package/dist/modules/mcp/first-call-probe.cli.d.ts +2 -0
- package/dist/modules/mcp/first-call-probe.cli.d.ts.map +1 -0
- package/dist/modules/mcp/first-call-probe.cli.js +62 -0
- package/dist/modules/mcp/first-call-probe.cli.js.map +1 -0
- package/dist/modules/mcp/first-call-probe.d.ts +165 -0
- package/dist/modules/mcp/first-call-probe.d.ts.map +1 -0
- package/dist/modules/mcp/first-call-probe.js +298 -0
- package/dist/modules/mcp/first-call-probe.js.map +1 -0
- package/dist/modules/mcp/manual-failure-memo.d.ts +42 -17
- package/dist/modules/mcp/manual-failure-memo.d.ts.map +1 -1
- package/dist/modules/mcp/manual-failure-memo.js +79 -23
- package/dist/modules/mcp/manual-failure-memo.js.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.d.ts +9 -5
- package/dist/modules/mcp/mcp-auth.middleware.d.ts.map +1 -1
- package/dist/modules/mcp/mcp-auth.middleware.js +24 -16
- package/dist/modules/mcp/mcp-auth.middleware.js.map +1 -1
- package/dist/modules/mcp/mcp.routes.d.ts +4 -4
- package/dist/modules/mcp/mcp.routes.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.routes.js +83 -179
- package/dist/modules/mcp/mcp.routes.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +218 -61
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +713 -159
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js +4 -2
- package/dist/modules/mcp/oauth/bevel-oauth-provider.js.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.d.ts.map +1 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js +3 -1
- package/dist/modules/mcp/oauth/oauth-consent.routes.js.map +1 -1
- package/dist/modules/mcp/surface-log-throttle.d.ts +59 -0
- package/dist/modules/mcp/surface-log-throttle.d.ts.map +1 -0
- package/dist/modules/mcp/surface-log-throttle.js +94 -0
- package/dist/modules/mcp/surface-log-throttle.js.map +1 -0
- package/dist/modules/plugins/compile/compile-marketplace.d.ts +13 -6
- package/dist/modules/plugins/compile/compile-marketplace.d.ts.map +1 -1
- package/dist/modules/plugins/compile/compile-marketplace.js +119 -36
- package/dist/modules/plugins/compile/compile-marketplace.js.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts +8 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.d.ts.map +1 -1
- package/dist/modules/plugins/compile/marketplace-compiler.service.js +9 -6
- package/dist/modules/plugins/compile/marketplace-compiler.service.js.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js +32 -9
- package/dist/modules/plugins/discovery/bundle-dialect/bundle.source.js.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts +26 -6
- package/dist/modules/plugins/discovery/bundle-dialect/registry.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js +71 -14
- package/dist/modules/plugins/discovery/bundle-dialect/registry.js.map +1 -1
- package/dist/modules/plugins/discovery/kb-plugin-source.d.ts +4 -2
- package/dist/modules/plugins/discovery/kb-plugin-source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/kb-plugin-source.js +9 -6
- package/dist/modules/plugins/discovery/kb-plugin-source.js.map +1 -1
- package/dist/modules/plugins/discovery/native.source.d.ts +2 -1
- package/dist/modules/plugins/discovery/native.source.d.ts.map +1 -1
- package/dist/modules/plugins/discovery/native.source.js +22 -4
- package/dist/modules/plugins/discovery/native.source.js.map +1 -1
- package/dist/modules/plugins/discovery/plugin-source.d.ts +17 -3
- package/dist/modules/plugins/discovery/plugin-source.d.ts.map +1 -1
- package/dist/modules/plugins/index.d.ts +6 -3
- package/dist/modules/plugins/index.d.ts.map +1 -1
- package/dist/modules/plugins/index.js +6 -3
- package/dist/modules/plugins/index.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +250 -0
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -0
- package/dist/modules/plugins/join-request-jobs.service.js +602 -0
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -0
- package/dist/modules/plugins/join-request-records.store.d.ts +161 -0
- package/dist/modules/plugins/join-request-records.store.d.ts.map +1 -0
- package/dist/modules/plugins/join-request-records.store.js +179 -0
- package/dist/modules/plugins/join-request-records.store.js.map +1 -0
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +4 -2
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-links.d.ts +4 -1
- package/dist/modules/plugins/plugin-links.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.js +6 -3
- package/dist/modules/plugins/plugin-links.js.map +1 -1
- package/dist/modules/plugins/plugin-links.service.d.ts +2 -5
- package/dist/modules/plugins/plugin-links.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-links.service.js +4 -13
- package/dist/modules/plugins/plugin-links.service.js.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.d.ts +91 -19
- package/dist/modules/plugins/plugin-provision.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-provision.service.js +183 -38
- package/dist/modules/plugins/plugin-provision.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts +3 -1
- package/dist/modules/plugins/plugin-rename.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +20 -11
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.contract.d.ts +52 -4
- package/dist/modules/plugins/plugins.contract.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +38 -5
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +190 -116
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/plugins/plugins.service.d.ts +38 -6
- package/dist/modules/plugins/plugins.service.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.service.js +86 -17
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/plugins/plugins.tools.d.ts +25 -0
- package/dist/modules/plugins/plugins.tools.d.ts.map +1 -0
- package/dist/modules/plugins/plugins.tools.js +82 -0
- package/dist/modules/plugins/plugins.tools.js.map +1 -0
- package/dist/modules/plugins/teams.routes.d.ts +42 -0
- package/dist/modules/plugins/teams.routes.d.ts.map +1 -0
- package/dist/modules/plugins/teams.routes.js +79 -0
- package/dist/modules/plugins/teams.routes.js.map +1 -0
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +40 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +202 -37
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +1 -1
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js +5 -3
- package/dist/modules/secrets-vault/mcp-oauth-discovery.service.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-variable-loader.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-variable-loader.js +3 -1
- package/dist/modules/secrets-vault/secrets-variable-loader.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +78 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js +40 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +106 -52
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.d.ts +118 -0
- package/dist/modules/settings/connection-check.d.ts.map +1 -0
- package/dist/modules/settings/connection-check.js +287 -0
- package/dist/modules/settings/connection-check.js.map +1 -0
- package/dist/modules/settings/deployment-settings.service.d.ts +153 -7
- package/dist/modules/settings/deployment-settings.service.d.ts.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +348 -51
- package/dist/modules/settings/deployment-settings.service.js.map +1 -1
- package/dist/modules/settings/git-root-folders.d.ts +54 -0
- package/dist/modules/settings/git-root-folders.d.ts.map +1 -0
- package/dist/modules/settings/git-root-folders.js +130 -0
- package/dist/modules/settings/git-root-folders.js.map +1 -0
- package/dist/modules/settings/oidc-check.d.ts +85 -0
- package/dist/modules/settings/oidc-check.d.ts.map +1 -0
- package/dist/modules/settings/oidc-check.js +172 -0
- package/dist/modules/settings/oidc-check.js.map +1 -0
- package/dist/modules/settings/setup.routes.d.ts +31 -1
- package/dist/modules/settings/setup.routes.d.ts.map +1 -1
- package/dist/modules/settings/setup.routes.js +400 -108
- package/dist/modules/settings/setup.routes.js.map +1 -1
- package/dist/modules/skills/allowed-tools-check.d.ts +132 -0
- package/dist/modules/skills/allowed-tools-check.d.ts.map +1 -0
- package/dist/modules/skills/allowed-tools-check.js +260 -0
- package/dist/modules/skills/allowed-tools-check.js.map +1 -0
- package/dist/modules/skills/index.d.ts +3 -1
- package/dist/modules/skills/index.d.ts.map +1 -1
- package/dist/modules/skills/index.js +1 -0
- package/dist/modules/skills/index.js.map +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +6 -11
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +18 -70
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +9 -6
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.contract.d.ts +44 -10
- package/dist/modules/skills/skills.contract.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.d.ts +8 -1
- package/dist/modules/skills/skills.routes.d.ts.map +1 -1
- package/dist/modules/skills/skills.routes.js +16 -2
- package/dist/modules/skills/skills.routes.js.map +1 -1
- package/dist/modules/skills/skills.service.d.ts +31 -7
- package/dist/modules/skills/skills.service.d.ts.map +1 -1
- package/dist/modules/skills/skills.service.js +191 -81
- package/dist/modules/skills/skills.service.js.map +1 -1
- package/dist/modules/skills/skills.tools.d.ts +4 -1
- package/dist/modules/skills/skills.tools.d.ts.map +1 -1
- package/dist/modules/skills/skills.tools.js +41 -6
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-auth/connection-key-rejection.d.ts +18 -0
- package/dist/modules/tool-auth/connection-key-rejection.d.ts.map +1 -0
- package/dist/modules/tool-auth/connection-key-rejection.js +20 -0
- package/dist/modules/tool-auth/connection-key-rejection.js.map +1 -0
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts +14 -0
- package/dist/modules/tool-auth/connection-keys-admin.routes.d.ts.map +1 -0
- package/dist/modules/tool-auth/connection-keys-admin.routes.js +67 -0
- package/dist/modules/tool-auth/connection-keys-admin.routes.js.map +1 -0
- package/dist/modules/tool-auth/external-api-key.interface.d.ts +51 -3
- package/dist/modules/tool-auth/external-api-key.interface.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.interface.js.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.d.ts +16 -6
- package/dist/modules/tool-auth/external-api-key.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/external-api-key.service.js +61 -18
- package/dist/modules/tool-auth/external-api-key.service.js.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.d.ts +5 -2
- package/dist/modules/tool-auth/internal-token.service.d.ts.map +1 -1
- package/dist/modules/tool-auth/internal-token.service.js +5 -2
- package/dist/modules/tool-auth/internal-token.service.js.map +1 -1
- package/dist/modules/tool-auth/key-or-session.middleware.d.ts +23 -0
- package/dist/modules/tool-auth/key-or-session.middleware.d.ts.map +1 -0
- package/dist/modules/tool-auth/key-or-session.middleware.js +39 -0
- package/dist/modules/tool-auth/key-or-session.middleware.js.map +1 -0
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts +7 -1
- package/dist/modules/tool-auth/tool-auth.middleware.d.ts.map +1 -1
- package/dist/modules/tool-auth/tool-auth.middleware.js +8 -5
- package/dist/modules/tool-auth/tool-auth.middleware.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +14 -0
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +28 -6
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +22 -5
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +6 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.js +7 -1
- package/dist/modules/tool-helpers/tool.contract.js.map +1 -1
- package/dist/modules/tool-manuals/index.d.ts +2 -1
- package/dist/modules/tool-manuals/index.d.ts.map +1 -1
- package/dist/modules/tool-manuals/index.js +1 -0
- package/dist/modules/tool-manuals/index.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +8 -6
- package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts +10 -2
- package/dist/modules/tool-manuals/mcp-server-edit.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +12 -15
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +50 -0
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -0
- package/dist/modules/tool-manuals/pending-tools.service.js +149 -0
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -0
- package/dist/modules/tool-manuals/tool-delete.service.d.ts +135 -0
- package/dist/modules/tool-manuals/tool-delete.service.d.ts.map +1 -0
- package/dist/modules/tool-manuals/tool-delete.service.js +303 -0
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +161 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.js +9 -0
- package/dist/modules/tool-manuals/tool-manuals.contract.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts +19 -2
- package/dist/modules/tool-manuals/tool-manuals.routes.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.routes.js +127 -57
- package/dist/modules/tool-manuals/tool-manuals.routes.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +119 -5
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +404 -74
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +78 -6
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +1 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js +88 -54
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +1 -1
- package/dist/modules/workflow/event-bus.d.ts +10 -4
- package/dist/modules/workflow/event-bus.d.ts.map +1 -1
- package/dist/modules/workflow/event-bus.js +14 -11
- package/dist/modules/workflow/event-bus.js.map +1 -1
- package/dist/modules/workflow/events.routes.d.ts +17 -2
- package/dist/modules/workflow/events.routes.d.ts.map +1 -1
- package/dist/modules/workflow/events.routes.js +31 -12
- package/dist/modules/workflow/events.routes.js.map +1 -1
- package/dist/modules/workflow/file-lock.service.d.ts +22 -4
- package/dist/modules/workflow/file-lock.service.d.ts.map +1 -1
- package/dist/modules/workflow/file-lock.service.js +27 -4
- package/dist/modules/workflow/file-lock.service.js.map +1 -1
- package/dist/modules/workflow/git/change-request-link.d.ts +20 -0
- package/dist/modules/workflow/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/workflow/git/change-request-link.js +34 -0
- package/dist/modules/workflow/git/change-request-link.js.map +1 -0
- package/dist/modules/workflow/git/git-version.d.ts.map +1 -1
- package/dist/modules/workflow/git/git-version.js +3 -1
- package/dist/modules/workflow/git/git-version.js.map +1 -1
- package/dist/modules/workflow/git/git.service.d.ts +263 -4
- package/dist/modules/workflow/git/git.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/git.service.js +528 -118
- package/dist/modules/workflow/git/git.service.js.map +1 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts +36 -0
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/workflow/git/node-git-runner.js +273 -0
- package/dist/modules/workflow/git/node-git-runner.js.map +1 -0
- package/dist/modules/workflow/git/pull-request.service.d.ts +51 -2
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +1 -1
- package/dist/modules/workflow/git/pull-request.service.js +157 -25
- package/dist/modules/workflow/git/pull-request.service.js.map +1 -1
- package/dist/modules/workflow/pending-commits.service.d.ts +11 -0
- package/dist/modules/workflow/pending-commits.service.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.service.js +24 -4
- package/dist/modules/workflow/pending-commits.service.js.map +1 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts +15 -8
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +1 -1
- package/dist/modules/workflow/pending-commits.worker.js +107 -58
- package/dist/modules/workflow/pending-commits.worker.js.map +1 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +1 -1
- package/dist/modules/workflow/recovery-bot.js +3 -1
- package/dist/modules/workflow/recovery-bot.js.map +1 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts +60 -0
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +1 -0
- package/dist/modules/workflow/review-workflow/approval-lock.js +116 -0
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +1 -0
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts +54 -7
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts +64 -0
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js +269 -90
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +1 -1
- package/dist/modules/workflow/sanitize-error.d.ts +5 -2
- package/dist/modules/workflow/sanitize-error.d.ts.map +1 -1
- package/dist/modules/workflow/sanitize-error.js +8 -4
- package/dist/modules/workflow/sanitize-error.js.map +1 -1
- package/dist/modules/workflow/workflow.routes.d.ts +2 -0
- package/dist/modules/workflow/workflow.routes.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.routes.js +259 -29
- package/dist/modules/workflow/workflow.routes.js.map +1 -1
- package/dist/modules/workflow/workflow.service.d.ts +166 -14
- package/dist/modules/workflow/workflow.service.d.ts.map +1 -1
- package/dist/modules/workflow/workflow.service.js +906 -106
- package/dist/modules/workflow/workflow.service.js.map +1 -1
- package/dist/modules/workspace/empty-dirs.d.ts +15 -0
- package/dist/modules/workspace/empty-dirs.d.ts.map +1 -0
- package/dist/modules/workspace/empty-dirs.js +90 -0
- package/dist/modules/workspace/empty-dirs.js.map +1 -0
- package/dist/modules/workspace/file-readers/content-mode.d.ts +50 -0
- package/dist/modules/workspace/file-readers/content-mode.d.ts.map +1 -0
- package/dist/modules/workspace/file-readers/content-mode.js +55 -0
- package/dist/modules/workspace/file-readers/content-mode.js.map +1 -0
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts +4 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.js +4 -1
- package/dist/modules/workspace/file-readers/doc-extract.service.js.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts +5 -2
- package/dist/modules/workspace/file-readers/doc-extract.types.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/doc-extract.types.js +7 -4
- package/dist/modules/workspace/file-readers/doc-extract.types.js.map +1 -1
- package/dist/modules/workspace/file-readers/document-reader.d.ts +2 -0
- package/dist/modules/workspace/file-readers/document-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/document-reader.js +5 -0
- package/dist/modules/workspace/file-readers/document-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/extract-docx.d.ts +6 -0
- package/dist/modules/workspace/file-readers/extract-docx.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/extract-docx.js +6 -0
- package/dist/modules/workspace/file-readers/extract-docx.js.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.d.ts +24 -5
- package/dist/modules/workspace/file-readers/file-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.js +11 -6
- package/dist/modules/workspace/file-readers/file-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.js +6 -1
- package/dist/modules/workspace/file-readers/file-reader.registry.js.map +1 -1
- package/dist/modules/workspace/file-readers/image-reader.d.ts +7 -5
- package/dist/modules/workspace/file-readers/image-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/image-reader.js +9 -5
- package/dist/modules/workspace/file-readers/image-reader.js.map +1 -1
- package/dist/modules/workspace/file-readers/ooxml-text.d.ts +3 -0
- package/dist/modules/workspace/file-readers/ooxml-text.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/ooxml-text.js +39 -2
- package/dist/modules/workspace/file-readers/ooxml-text.js.map +1 -1
- package/dist/modules/workspace/file-readers/text-reader.d.ts +29 -1
- package/dist/modules/workspace/file-readers/text-reader.d.ts.map +1 -1
- package/dist/modules/workspace/file-readers/text-reader.js +57 -3
- package/dist/modules/workspace/file-readers/text-reader.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +28 -0
- package/dist/modules/workspace/git-internals.middleware.d.ts.map +1 -0
- package/dist/modules/workspace/git-internals.middleware.js +93 -0
- package/dist/modules/workspace/git-internals.middleware.js.map +1 -0
- package/dist/modules/workspace/not-found.d.ts +80 -0
- package/dist/modules/workspace/not-found.d.ts.map +1 -0
- package/dist/modules/workspace/not-found.js +112 -0
- package/dist/modules/workspace/not-found.js.map +1 -0
- package/dist/modules/workspace/session-ontology.gate.d.ts +1 -1
- package/dist/modules/workspace/session-ontology.gate.d.ts.map +1 -1
- package/dist/modules/workspace/session-ontology.gate.js +1 -1
- package/dist/modules/workspace/session-ontology.gate.js.map +1 -1
- package/dist/modules/workspace/startup/beside-checkout.d.ts +42 -0
- package/dist/modules/workspace/startup/beside-checkout.d.ts.map +1 -0
- package/dist/modules/workspace/startup/beside-checkout.js +110 -0
- package/dist/modules/workspace/startup/beside-checkout.js.map +1 -0
- package/dist/modules/workspace/startup/kb-git.d.ts +7 -12
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +34 -35
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts +95 -0
- package/dist/modules/workspace/startup/kb-startup-runner.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-startup-runner.js +257 -55
- package/dist/modules/workspace/startup/kb-startup-runner.js.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts +45 -0
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js +417 -385
- package/dist/modules/workspace/startup/steps/groups-to-plugins.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts +48 -0
- package/dist/modules/workspace/startup/steps/personal-spaces.step.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js +183 -0
- package/dist/modules/workspace/startup/steps/personal-spaces.step.js.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts +51 -0
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.js +158 -0
- package/dist/modules/workspace/startup/steps/plugin-display-names.step.js.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-layout.d.ts +64 -0
- package/dist/modules/workspace/startup/steps/plugin-layout.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-layout.js +97 -0
- package/dist/modules/workspace/startup/steps/plugin-layout.js.map +1 -0
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts +7 -1
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.js +45 -81
- package/dist/modules/workspace/startup/steps/plugin-manifests.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.d.ts +3 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js +4 -12
- package/dist/modules/workspace/startup/steps/roles-yaml.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +6 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +154 -78
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +96 -24
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +446 -138
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +94 -0
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -0
- package/dist/modules/workspace/startup/steps/template-source.js +160 -0
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -0
- package/dist/modules/workspace/workspace.routes.d.ts +14 -2
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +649 -238
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +290 -12
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +924 -269
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +42 -1
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +1590 -146
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/modules/workspace/write-denial.d.ts +76 -0
- package/dist/modules/workspace/write-denial.d.ts.map +1 -0
- package/dist/modules/workspace/write-denial.js +138 -0
- package/dist/modules/workspace/write-denial.js.map +1 -0
- package/dist/shared/canonical-file-identity.d.ts +64 -0
- package/dist/shared/canonical-file-identity.d.ts.map +1 -0
- package/dist/shared/canonical-file-identity.js +92 -0
- package/dist/shared/canonical-file-identity.js.map +1 -0
- package/dist/shared/domain-errors.d.ts +108 -0
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +137 -0
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/email-identity.d.ts +32 -0
- package/dist/shared/email-identity.d.ts.map +1 -0
- package/dist/shared/email-identity.js +37 -0
- package/dist/shared/email-identity.js.map +1 -0
- package/dist/shared/fs.contract.d.ts +206 -0
- package/dist/shared/fs.contract.d.ts.map +1 -0
- package/dist/shared/fs.contract.js +79 -0
- package/dist/shared/fs.contract.js.map +1 -0
- package/dist/shared/git-failure.d.ts +80 -0
- package/dist/shared/git-failure.d.ts.map +1 -0
- package/dist/shared/git-failure.js +139 -0
- package/dist/shared/git-failure.js.map +1 -0
- package/dist/shared/git-internals.d.ts +17 -0
- package/dist/shared/git-internals.d.ts.map +1 -0
- package/dist/shared/git-internals.js +123 -0
- package/dist/shared/git-internals.js.map +1 -0
- package/dist/shared/git.contract.d.ts +157 -0
- package/dist/shared/git.contract.d.ts.map +1 -0
- package/dist/shared/git.contract.js +103 -0
- package/dist/shared/git.contract.js.map +1 -0
- package/dist/shared/http-errors.d.ts +33 -0
- package/dist/shared/http-errors.d.ts.map +1 -0
- package/dist/shared/http-errors.js +35 -0
- package/dist/shared/http-errors.js.map +1 -0
- package/dist/shared/logger.contract.d.ts +63 -0
- package/dist/shared/logger.contract.d.ts.map +1 -0
- package/dist/shared/logger.contract.js +126 -0
- package/dist/shared/logger.contract.js.map +1 -0
- package/dist/shared/logging.d.ts +31 -0
- package/dist/shared/logging.d.ts.map +1 -0
- package/dist/shared/logging.js +92 -0
- package/dist/shared/logging.js.map +1 -0
- package/dist/shared/path-containment.d.ts +21 -0
- package/dist/shared/path-containment.d.ts.map +1 -0
- package/dist/shared/path-containment.js +34 -0
- package/dist/shared/path-containment.js.map +1 -0
- package/dist/shared/pending-proposals.d.ts +71 -0
- package/dist/shared/pending-proposals.d.ts.map +1 -0
- package/dist/shared/pending-proposals.js +98 -0
- package/dist/shared/pending-proposals.js.map +1 -0
- package/dist/shared/printable.d.ts +22 -0
- package/dist/shared/printable.d.ts.map +1 -0
- package/dist/shared/printable.js +65 -0
- package/dist/shared/printable.js.map +1 -0
- package/dist/shared/redact-secret.d.ts +30 -0
- package/dist/shared/redact-secret.d.ts.map +1 -0
- package/dist/shared/redact-secret.js +114 -0
- package/dist/shared/redact-secret.js.map +1 -0
- package/dist/shared/rename-no-replace.d.ts +119 -0
- package/dist/shared/rename-no-replace.d.ts.map +1 -0
- package/dist/shared/rename-no-replace.js +323 -0
- package/dist/shared/rename-no-replace.js.map +1 -0
- package/dist/shared/ssrf.d.ts.map +1 -1
- package/dist/shared/ssrf.js +49 -18
- package/dist/shared/ssrf.js.map +1 -1
- package/dist/version.d.ts +10 -6
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +10 -6
- package/dist/version.js.map +1 -1
- package/kb-template/.bevelignore +4 -3
- package/kb-template/AGENTS.md +281 -36
- package/kb-template/KnowledgeBase/How to get started.md +1 -1
- package/kb-template/access.md +5 -3
- package/kb-template/mcp-description.md +27 -0
- package/migrations/0006_api_tokens_revoked_by.sql +1 -0
- package/migrations/0007_github_facade_registered.sql +1 -0
- package/migrations/0008_change_request_apply_failure.sql +4 -0
- package/migrations/0009_change_request_apply_failure_kind.sql +13 -0
- package/migrations/0010_plugin_join_requests.sql +15 -0
- package/migrations/0011_plugin_join_request_claim.sql +11 -0
- package/migrations/meta/0006_snapshot.json +1723 -0
- package/migrations/meta/0007_snapshot.json +1729 -0
- package/migrations/meta/0008_snapshot.json +1753 -0
- package/migrations/meta/0009_snapshot.json +1759 -0
- package/migrations/meta/0010_snapshot.json +1872 -0
- package/migrations/meta/0011_snapshot.json +1884 -0
- package/migrations/meta/_journal.json +42 -0
- package/package.json +6 -5
- package/src/__tests__/core-config.domain.test.ts +67 -2
- package/src/__tests__/kb-layout-config.test.ts +186 -1
- package/src/__tests__/open-change-gate.ts +15 -0
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +83 -3
- package/src/core/__tests__/catalog-revision.test.ts +190 -0
- package/src/core/__tests__/lifecycle.test.ts +369 -0
- package/src/core/__tests__/public-config.test.ts +30 -0
- package/src/core/__tests__/readiness.test.ts +109 -0
- package/src/core/catalog-cache-invalidation.ts +20 -1
- package/src/core/catalog-revision.ts +110 -0
- package/src/core/create-core-server.ts +258 -79
- package/src/core/create-core-services.ts +302 -81
- package/src/core/lifecycle.ts +312 -0
- package/src/core/public-config.ts +86 -0
- package/src/core/readiness.ts +123 -0
- package/src/core-config.ts +70 -4
- package/src/index.ts +15 -0
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +362 -0
- package/src/modules/access/__tests__/access-control.atref-batch.test.ts +2 -1
- package/src/modules/access/__tests__/access-control.atref-cache.test.ts +46 -22
- package/src/modules/access/__tests__/access-control.deny-dependents.test.ts +215 -0
- package/src/modules/access/__tests__/access-control.download-read.test.ts +268 -0
- package/src/modules/access/__tests__/access-control.everyone-read.test.ts +145 -0
- package/src/modules/access/__tests__/access-control.group-read.test.ts +163 -0
- package/src/modules/access/__tests__/access-control.invalidate-race.test.ts +2 -0
- package/src/modules/access/__tests__/access-control.platform-restore.test.ts +152 -0
- package/src/modules/access/__tests__/access-control.prospective.test.ts +189 -0
- package/src/modules/access/__tests__/access-control.read-batch.test.ts +2 -1
- package/src/modules/access/__tests__/access-control.service.test.ts +123 -78
- package/src/modules/access/__tests__/access-groups.test.ts +47 -14
- package/src/modules/access/__tests__/access-md-format.test.ts +2 -1
- package/src/modules/access/__tests__/access-mutation.service.test.ts +52 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +2 -0
- package/src/modules/access/__tests__/access-personal-plugin.test.ts +153 -0
- package/src/modules/access/__tests__/access-plugin-principals.test.ts +18 -1
- package/src/modules/access/__tests__/access-restrict-here.test.ts +450 -0
- package/src/modules/access/__tests__/access.routes.batch.test.ts +139 -0
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +394 -0
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -2
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +3 -2
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +234 -0
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +216 -0
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +7 -2
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +360 -0
- package/src/modules/access/__tests__/change-read-gate.test.ts +272 -0
- package/src/modules/access/__tests__/creator-access.test.ts +81 -83
- package/src/modules/access/__tests__/grant-sources.test.ts +3 -2
- package/src/modules/access/__tests__/groups-admin.service.test.ts +6 -5
- package/src/modules/access/__tests__/roles-admin.security.test.ts +196 -0
- package/src/modules/access/__tests__/roles-admin.service.test.ts +127 -2
- package/src/modules/access/__tests__/roles-capabilities.test.ts +5 -4
- package/src/modules/access/__tests__/roles.routes.test.ts +5 -2
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +402 -0
- package/src/modules/access/__tests__/users-db-double.ts +63 -0
- package/src/modules/access/access-control.interface.ts +251 -11
- package/src/modules/access/access-control.service.ts +719 -164
- package/src/modules/access/access-mutation.service.ts +182 -13
- package/src/modules/access/access-view.ts +316 -0
- package/src/modules/access/access.routes.ts +293 -95
- package/src/modules/access/admin-locked-commit.ts +12 -14
- package/src/modules/access/admin-route-helpers.ts +4 -4
- package/src/modules/access/change-read-gate.ts +148 -0
- package/src/modules/access/creator-access.ts +89 -124
- package/src/modules/access/directory-sync-bot.ts +4 -1
- package/src/modules/access/groups-admin.service.ts +3 -3
- package/src/modules/access/reference-scan.ts +5 -5
- package/src/modules/access/roles-admin.service.ts +94 -15
- package/src/modules/access/synced-groups-committer.ts +10 -15
- package/src/modules/access/synced-groups-writer.ts +3 -12
- package/src/modules/access/user-access-removal.service.ts +711 -0
- package/src/modules/access-model/__tests__/access-splice.test.ts +63 -1
- package/src/modules/access-model/__tests__/frontmatter-fences.test.ts +71 -0
- package/src/modules/access-model/__tests__/roles-yaml-guard.test.ts +131 -0
- package/src/modules/access-model/access-errors.ts +56 -15
- package/src/modules/access-model/access-grammar.ts +85 -48
- package/src/modules/access-model/access-splice.ts +18 -18
- package/src/modules/access-model/access-template.ts +44 -0
- package/src/modules/access-model/change-gate.ts +80 -0
- package/src/modules/access-model/creator.ts +18 -21
- package/src/modules/access-model/frontmatter-lines.ts +98 -0
- package/src/modules/access-model/plugin-principals.ts +12 -19
- package/src/modules/access-model/roles-yaml-guard.ts +182 -4
- package/src/modules/admin/admin-access.service.ts +6 -2
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +100 -0
- package/src/modules/agent-instructions/__tests__/compose.test.ts +256 -0
- package/src/modules/agent-instructions/__tests__/read-preamble.test.ts +135 -0
- package/src/modules/agent-instructions/agent-instructions.routes.ts +41 -0
- package/src/modules/agent-instructions/compose.ts +271 -0
- package/src/modules/agent-instructions/index.ts +14 -0
- package/src/modules/agent-instructions/read-preamble.ts +88 -0
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +209 -0
- package/src/modules/auth/__tests__/account.routes.test.ts +178 -2
- package/src/modules/auth/__tests__/auth.middleware.test.ts +78 -0
- package/src/modules/auth/__tests__/auth.service.test.ts +338 -5
- package/src/modules/auth/__tests__/oidc-auth-provider.test.ts +352 -12
- package/src/modules/auth/__tests__/onboarding-done.route.test.ts +3 -1
- package/src/modules/auth/account-erasure.service.ts +117 -10
- package/src/modules/auth/account.routes.ts +115 -14
- package/src/modules/auth/auth.routes.ts +20 -7
- package/src/modules/auth/auth.service.ts +187 -28
- package/src/modules/auth/oidc-auth-provider.ts +120 -22
- package/src/modules/code-mode/__tests__/code-mode.tool.test.ts +109 -1
- package/src/modules/code-mode/code-mode.tool.ts +13 -2
- package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +78 -0
- package/src/modules/connection-probe/connection-probe.service.ts +59 -7
- package/src/modules/database/__tests__/advisory-lease.test.ts +152 -0
- package/src/modules/database/__tests__/advisory-lock.test.ts +147 -0
- package/src/modules/database/advisory-lock.ts +346 -0
- package/src/modules/database/connection.ts +9 -1
- package/src/modules/database/core-schema.ts +123 -0
- package/src/modules/database/migrate.ts +27 -6
- package/src/modules/declared-variables/declared-variables.routes.ts +6 -3
- package/src/modules/diff/__tests__/diff.service.seed-atomicity.test.ts +3 -0
- package/src/modules/diff/__tests__/diff.service.test.ts +3 -0
- package/src/modules/diff/diff.routes.ts +2 -4
- package/src/modules/diff/diff.service.ts +75 -79
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +472 -9
- package/src/modules/kb-fs/__tests__/node-fs.test.ts +409 -0
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +210 -1
- package/src/modules/{workspace → kb-fs}/bevel-ignore.ts +22 -15
- package/src/modules/kb-fs/file-change-notifier.ts +4 -1
- package/src/modules/kb-fs/git-guarded-filesystem.ts +123 -0
- package/src/modules/kb-fs/locking-filesystem.ts +399 -109
- package/src/modules/kb-fs/node-fs.ts +165 -0
- package/src/modules/kb-fs/read-only-filesystem.ts +18 -9
- package/src/modules/kb-fs/repo-path.ts +213 -3
- package/src/modules/kb-sync/kb-sync.routes.ts +5 -2
- package/src/modules/kb-sync/kb-sync.service.ts +8 -5
- package/src/modules/marketplace/__tests__/github-facade.test.ts +134 -2
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +2 -1
- package/src/modules/marketplace/__tests__/marketplace-repo.head.test.ts +47 -0
- package/src/modules/marketplace/git-http.routes.ts +7 -4
- package/src/modules/marketplace/github-facade/github-facade-admin.routes.ts +35 -3
- package/src/modules/marketplace/github-facade/github-facade-credentials.service.ts +55 -0
- package/src/modules/marketplace/github-facade/github-facade.routes.ts +32 -6
- package/src/modules/marketplace/github-facade/github-facade.service.ts +80 -19
- package/src/modules/marketplace/github-facade/index.ts +1 -0
- package/src/modules/marketplace/marketplace-repo.service.ts +23 -8
- package/src/modules/mcp/__tests__/downstream-pool.test.ts +278 -0
- package/src/modules/mcp/__tests__/downstream-token-refresh.test.ts +178 -0
- package/src/modules/mcp/__tests__/fake-downstream-mcp-server.ts +156 -0
- package/src/modules/mcp/__tests__/first-call-probe.cli-args.test.ts +178 -0
- package/src/modules/mcp/__tests__/first-call-probe.test.ts +414 -0
- package/src/modules/mcp/__tests__/manual-failure-memo.test.ts +98 -6
- package/src/modules/mcp/__tests__/mcp-auth.middleware.test.ts +8 -5
- package/src/modules/mcp/__tests__/mcp-routes-harness.ts +1 -3
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +1055 -59
- package/src/modules/mcp/__tests__/mcp.routes.stateless.test.ts +182 -0
- package/src/modules/mcp/__tests__/mcp.service.test.ts +274 -6
- package/src/modules/mcp/__tests__/surface-log-throttle.test.ts +169 -0
- package/src/modules/mcp/downstream-pool.ts +256 -0
- package/src/modules/mcp/downstream-token-refresh.ts +170 -0
- package/src/modules/mcp/first-call-probe.cli-args.ts +159 -0
- package/src/modules/mcp/first-call-probe.cli.ts +60 -0
- package/src/modules/mcp/first-call-probe.ts +418 -0
- package/src/modules/mcp/manual-failure-memo.ts +81 -23
- package/src/modules/mcp/mcp-auth.middleware.ts +25 -16
- package/src/modules/mcp/mcp.routes.ts +376 -482
- package/src/modules/mcp/mcp.service.ts +846 -176
- package/src/modules/mcp/oauth/bevel-oauth-provider.ts +5 -2
- package/src/modules/mcp/oauth/oauth-consent.routes.ts +4 -4
- package/src/modules/mcp/surface-log-throttle.ts +120 -0
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +10 -7
- package/src/modules/plugins/__tests__/bundle-dialect.test.ts +165 -0
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +139 -10
- package/src/modules/plugins/__tests__/fake-join-request-store.ts +189 -0
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +608 -0
- package/src/modules/plugins/__tests__/plugin-creation-display-name.test.ts +241 -0
- package/src/modules/plugins/__tests__/plugin-index.service.test.ts +148 -7
- package/src/modules/plugins/__tests__/plugin-links.service.test.ts +10 -13
- package/src/modules/plugins/__tests__/plugin-names.test.ts +77 -0
- package/src/modules/plugins/__tests__/plugin-provision.service.test.ts +129 -19
- package/src/modules/plugins/__tests__/plugin-rename.service.test.ts +91 -29
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +370 -19
- package/src/modules/plugins/__tests__/plugins.tools.test.ts +131 -0
- package/src/modules/plugins/__tests__/teams.routes.test.ts +248 -0
- package/src/modules/plugins/compile/compile-marketplace.ts +143 -46
- package/src/modules/plugins/compile/marketplace-compiler.service.ts +8 -7
- package/src/modules/plugins/discovery/__tests__/kb-plugin-source.test.ts +56 -20
- package/src/modules/plugins/discovery/bundle-dialect/bundle.source.ts +30 -9
- package/src/modules/plugins/discovery/bundle-dialect/registry.ts +93 -18
- package/src/modules/plugins/discovery/kb-plugin-source.ts +10 -7
- package/src/modules/plugins/discovery/native.source.ts +21 -3
- package/src/modules/plugins/discovery/plugin-source.ts +17 -3
- package/src/modules/plugins/index.ts +16 -3
- package/src/modules/plugins/join-request-jobs.service.ts +675 -0
- package/src/modules/plugins/join-request-records.store.ts +353 -0
- package/src/modules/plugins/join-requests.service.ts +7 -4
- package/src/modules/plugins/plugin-links.service.ts +4 -17
- package/src/modules/plugins/plugin-links.ts +6 -3
- package/src/modules/plugins/plugin-provision.service.ts +209 -37
- package/src/modules/plugins/plugin-rename.service.ts +21 -9
- package/src/modules/plugins/plugins.contract.ts +52 -4
- package/src/modules/plugins/plugins.routes.ts +204 -124
- package/src/modules/plugins/plugins.service.ts +92 -18
- package/src/modules/plugins/plugins.tools.ts +88 -0
- package/src/modules/plugins/teams.routes.ts +129 -0
- package/src/modules/secrets-vault/__tests__/connect-pending.route.test.ts +359 -15
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +248 -0
- package/src/modules/secrets-vault/__tests__/namespace-secrets.test.ts +202 -0
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +217 -35
- package/src/modules/secrets-vault/index.ts +1 -0
- package/src/modules/secrets-vault/mcp-oauth-discovery.service.ts +6 -3
- package/src/modules/secrets-vault/secrets-variable-loader.ts +4 -4
- package/src/modules/secrets-vault/secrets-vault.contract.ts +93 -0
- package/src/modules/secrets-vault/secrets-vault.routes.ts +99 -38
- package/src/modules/settings/__tests__/connection-check.test.ts +233 -0
- package/src/modules/settings/__tests__/deployment-settings.service.test.ts +188 -6
- package/src/modules/settings/__tests__/git-root-folders.test.ts +247 -0
- package/src/modules/settings/__tests__/oidc-check.test.ts +185 -0
- package/src/modules/settings/__tests__/setup.routes.boot-failure.test.ts +119 -0
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +170 -0
- package/src/modules/settings/__tests__/setup.routes.oidc.test.ts +555 -0
- package/src/modules/settings/__tests__/setup.routes.test.ts +667 -16
- package/src/modules/settings/connection-check.ts +351 -0
- package/src/modules/settings/deployment-settings.service.ts +403 -57
- package/src/modules/settings/git-root-folders.ts +171 -0
- package/src/modules/settings/oidc-check.ts +229 -0
- package/src/modules/settings/setup.routes.ts +456 -110
- package/src/modules/skills/__tests__/allowed-tools-check.test.ts +224 -0
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +210 -0
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +3 -3
- package/src/modules/skills/__tests__/skills.routes.warnings.test.ts +91 -0
- package/src/modules/skills/__tests__/skills.service.test.ts +223 -2
- package/src/modules/skills/allowed-tools-check.ts +352 -0
- package/src/modules/skills/index.ts +4 -0
- package/src/modules/skills/pending-skills.service.ts +21 -82
- package/src/modules/skills/skill-access-requests.routes.ts +10 -6
- package/src/modules/skills/skills.contract.ts +43 -11
- package/src/modules/skills/skills.routes.ts +16 -1
- package/src/modules/skills/skills.service.ts +214 -84
- package/src/modules/skills/skills.tools.ts +43 -5
- package/src/modules/tool-auth/__tests__/connection-key-rejection.test.ts +192 -0
- package/src/modules/tool-auth/__tests__/connection-keys-admin.routes.test.ts +116 -0
- package/src/modules/tool-auth/__tests__/external-api-key.service.test.ts +124 -0
- package/src/modules/tool-auth/connection-key-rejection.ts +25 -0
- package/src/modules/tool-auth/connection-keys-admin.routes.ts +76 -0
- package/src/modules/tool-auth/external-api-key.interface.ts +56 -3
- package/src/modules/tool-auth/external-api-key.service.ts +73 -25
- package/src/modules/tool-auth/internal-token.service.ts +5 -2
- package/src/modules/tool-auth/key-or-session.middleware.ts +45 -0
- package/src/modules/tool-auth/tool-auth.middleware.ts +16 -7
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +228 -0
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +33 -4
- package/src/modules/tool-helpers/tool-context.ts +46 -7
- package/src/modules/tool-helpers/tool-handler.ts +23 -5
- package/src/modules/tool-helpers/tool.contract.ts +5 -0
- package/src/modules/tool-manuals/__tests__/mcp-server-edit.service.test.ts +2 -1
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +411 -0
- package/src/modules/tool-manuals/__tests__/tool-delete.route.test.ts +133 -0
- package/src/modules/tool-manuals/__tests__/tool-delete.service.test.ts +469 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.archive.route.test.ts +21 -2
- package/src/modules/tool-manuals/__tests__/tool-manuals.cli.test.ts +9 -4
- package/src/modules/tool-manuals/__tests__/tool-manuals.detail.route.test.ts +6 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.routes.test.ts +254 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.invalid.test.ts +577 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +6 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.pending.route.test.ts +102 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +285 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.service.test.ts +178 -2
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +114 -2
- package/src/modules/tool-manuals/index.ts +3 -0
- package/src/modules/tool-manuals/mcp-json-discovery.ts +13 -10
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +11 -14
- package/src/modules/tool-manuals/pending-tools.service.ts +179 -0
- package/src/modules/tool-manuals/tool-delete.service.ts +401 -0
- package/src/modules/tool-manuals/tool-manuals.contract.ts +165 -0
- package/src/modules/tool-manuals/tool-manuals.routes.ts +138 -54
- package/src/modules/tool-manuals/tool-manuals.service.ts +432 -87
- package/src/modules/tool-manuals/tool-manuals.tools.ts +81 -6
- package/src/modules/workflow/__tests__/apply-failure.test.ts +1038 -0
- package/src/modules/workflow/__tests__/event-bus.test.ts +61 -9
- package/src/modules/workflow/__tests__/fake-file-lock-db.ts +199 -0
- package/src/modules/workflow/__tests__/file-lock.service.path-identity.test.ts +237 -0
- package/src/modules/workflow/__tests__/format-affected-owners.test.ts +18 -0
- package/src/modules/workflow/__tests__/merge-announces-tree.test.ts +220 -0
- package/src/modules/workflow/__tests__/pending-commits.worker.concurrency.test.ts +187 -0
- package/src/modules/workflow/__tests__/preserve-roles-yaml.test.ts +2 -0
- package/src/modules/workflow/__tests__/sanitize-error.test.ts +10 -0
- package/src/modules/workflow/__tests__/workflow.routes.folder-proposals.test.ts +128 -0
- package/src/modules/workflow/__tests__/workflow.routes.fork-point-file.test.ts +149 -0
- package/src/modules/workflow/__tests__/workflow.routes.lock-path.test.ts +305 -0
- package/src/modules/workflow/__tests__/workflow.service.branch-in-use.test.ts +2 -0
- package/src/modules/workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts +2 -0
- package/src/modules/workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts +2 -0
- package/src/modules/workflow/__tests__/workflow.service.facade.test.ts +294 -25
- package/src/modules/workflow/__tests__/workflow.service.folder-proposals.test.ts +564 -0
- package/src/modules/workflow/__tests__/workflow.service.platform-restore.test.ts +135 -0
- package/src/modules/workflow/__tests__/workflow.service.read-gate.test.ts +172 -0
- package/src/modules/workflow/__tests__/workflow.service.releaseLock.test.ts +14 -0
- package/src/modules/workflow/__tests__/workflow.service.sync.test.ts +5 -0
- package/src/modules/workflow/__tests__/workflow.service.update-from-target.test.ts +281 -0
- package/src/modules/workflow/agent-tools/__tests__/workflow.tools.test.ts +158 -7
- package/src/modules/workflow/agent-tools/workflow.tools.ts +93 -64
- package/src/modules/workflow/event-bus.ts +26 -28
- package/src/modules/workflow/events.routes.ts +56 -21
- package/src/modules/workflow/file-lock.service.ts +27 -4
- package/src/modules/workflow/git/__tests__/change-request-link.test.ts +43 -0
- package/src/modules/workflow/git/__tests__/git.service.accessGating.test.ts +1 -0
- package/src/modules/workflow/git/__tests__/git.service.changedFilesForPr.test.ts +238 -1
- package/src/modules/workflow/git/__tests__/git.service.forkPoint.test.ts +245 -0
- package/src/modules/workflow/git/__tests__/git.service.list-branches.test.ts +35 -0
- package/src/modules/workflow/git/__tests__/git.service.mergeChangeRequest.test.ts +149 -0
- package/src/modules/workflow/git/__tests__/git.service.revertPathsAndPush.test.ts +177 -0
- package/src/modules/workflow/git/__tests__/node-git-runner.test.ts +114 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.getPrDetail.test.ts +69 -2
- package/src/modules/workflow/git/__tests__/pull-request.service.list-fetch.test.ts +121 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.placeholder.test.ts +79 -0
- package/src/modules/workflow/git/__tests__/pull-request.service.test.ts +1 -1
- package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +1 -1
- package/src/modules/workflow/git/__tests__/pull-request.service.viewer-can-update.test.ts +111 -0
- package/src/modules/workflow/git/change-request-link.ts +35 -0
- package/src/modules/workflow/git/git-version.ts +5 -2
- package/src/modules/workflow/git/git.service.ts +684 -144
- package/src/modules/workflow/git/node-git-runner.ts +315 -0
- package/src/modules/workflow/git/pull-request.service.ts +179 -27
- package/src/modules/workflow/pending-commits.service.ts +26 -7
- package/src/modules/workflow/pending-commits.worker.ts +114 -69
- package/src/modules/workflow/recovery-bot.ts +4 -1
- package/src/modules/workflow/review-workflow/__tests__/approval-states.test.ts +180 -1
- package/src/modules/workflow/review-workflow/__tests__/cancel-pr.test.ts +1 -1
- package/src/modules/workflow/review-workflow/__tests__/carry-approvals-forward.test.ts +520 -0
- package/src/modules/workflow/review-workflow/__tests__/erase-approver.test.ts +84 -0
- package/src/modules/workflow/review-workflow/__tests__/merge-gate.test.ts +89 -77
- package/src/modules/workflow/review-workflow/approval-lock.ts +122 -0
- package/src/modules/workflow/review-workflow/review-workflow.interface.ts +59 -7
- package/src/modules/workflow/review-workflow/review-workflow.service.ts +309 -105
- package/src/modules/workflow/sanitize-error.ts +9 -4
- package/src/modules/workflow/workflow.routes.ts +273 -29
- package/src/modules/workflow/workflow.service.ts +1087 -171
- package/src/modules/workspace/__tests__/empty-dirs.test.ts +44 -0
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +301 -0
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +792 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +464 -0
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +139 -0
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +189 -37
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +51 -11
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +161 -0
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +109 -10
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +624 -0
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +409 -0
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +327 -0
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +25 -6
- package/src/modules/workspace/__tests__/workspace.service.ensure-remotes-fetched.test.ts +109 -0
- package/src/modules/workspace/__tests__/workspace.service.list-cloned.test.ts +6 -5
- package/src/modules/workspace/__tests__/workspace.service.move-never-overwrites.test.ts +218 -0
- package/src/modules/workspace/__tests__/workspace.service.read-filter.test.ts +56 -1
- package/src/modules/workspace/__tests__/workspace.service.test.ts +811 -42
- package/src/modules/workspace/__tests__/workspace.service.unknown-branch.test.ts +197 -0
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +128 -0
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +212 -0
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +2632 -110
- package/src/modules/workspace/__tests__/write-denial.test.ts +75 -0
- package/src/modules/workspace/empty-dirs.ts +79 -0
- package/src/modules/workspace/file-readers/README.md +32 -0
- package/src/modules/workspace/file-readers/__tests__/doc-extract.test.ts +59 -2
- package/src/modules/workspace/file-readers/__tests__/file-reader.registry.test.ts +133 -4
- package/src/modules/workspace/file-readers/__tests__/fixtures/soft-break.docx +0 -0
- package/src/modules/workspace/file-readers/__tests__/fixtures/tab.docx +0 -0
- package/src/modules/workspace/file-readers/content-mode.ts +87 -0
- package/src/modules/workspace/file-readers/doc-extract.service.ts +4 -1
- package/src/modules/workspace/file-readers/doc-extract.types.ts +8 -4
- package/src/modules/workspace/file-readers/document-reader.ts +6 -0
- package/src/modules/workspace/file-readers/extract-docx.ts +6 -0
- package/src/modules/workspace/file-readers/file-reader.registry.ts +9 -1
- package/src/modules/workspace/file-readers/file-reader.ts +27 -6
- package/src/modules/workspace/file-readers/image-reader.ts +10 -5
- package/src/modules/workspace/file-readers/ooxml-text.ts +38 -2
- package/src/modules/workspace/file-readers/text-reader.ts +61 -4
- package/src/modules/workspace/git-internals.middleware.ts +86 -0
- package/src/modules/workspace/not-found.ts +119 -0
- package/src/modules/workspace/session-ontology.gate.ts +1 -1
- package/src/modules/workspace/startup/__tests__/beside-checkout.test.ts +181 -0
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +361 -0
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +53 -16
- package/src/modules/workspace/startup/beside-checkout.ts +112 -0
- package/src/modules/workspace/startup/kb-git.ts +43 -36
- package/src/modules/workspace/startup/kb-startup-runner.ts +303 -63
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +1215 -73
- package/src/modules/workspace/startup/steps/groups-to-plugins.step.ts +460 -417
- package/src/modules/workspace/startup/steps/personal-spaces.step.ts +191 -0
- package/src/modules/workspace/startup/steps/plugin-display-names.step.ts +169 -0
- package/src/modules/workspace/startup/steps/plugin-layout.ts +110 -0
- package/src/modules/workspace/startup/steps/plugin-manifests.step.ts +46 -85
- package/src/modules/workspace/startup/steps/roles-yaml.step.ts +6 -12
- package/src/modules/workspace/startup/steps/seed-tree.ts +159 -78
- package/src/modules/workspace/startup/steps/template-files.step.ts +492 -141
- package/src/modules/workspace/startup/steps/template-source.ts +168 -0
- package/src/modules/workspace/workspace.routes.ts +687 -257
- package/src/modules/workspace/workspace.service.ts +991 -303
- package/src/modules/workspace/workspace.tools.ts +1787 -180
- package/src/modules/workspace/write-denial.ts +189 -0
- package/src/shared/__tests__/canonical-file-identity.test.ts +154 -0
- package/src/shared/__tests__/email-identity.test.ts +35 -0
- package/src/shared/__tests__/filename.test.ts +0 -0
- package/src/shared/__tests__/frontmatter-id.test.ts +5 -0
- package/src/shared/__tests__/git-failure.test.ts +198 -0
- package/src/shared/__tests__/git-internals.test.ts +115 -0
- package/src/shared/__tests__/http-errors.test.ts +42 -0
- package/src/shared/__tests__/logging.test.ts +185 -0
- package/src/shared/__tests__/path-containment.test.ts +60 -0
- package/src/shared/__tests__/pending-proposals.readAt.test.ts +102 -0
- package/src/shared/__tests__/printable.test.ts +64 -0
- package/src/shared/__tests__/redact-secret.test.ts +122 -0
- package/src/shared/__tests__/rename-no-replace.test.ts +466 -0
- package/src/shared/__tests__/ssrf.test.ts +20 -0
- package/src/shared/canonical-file-identity.ts +92 -0
- package/src/shared/domain-errors.ts +149 -0
- package/src/shared/email-identity.ts +38 -0
- package/src/shared/fs.contract.ts +225 -0
- package/src/shared/git-failure.ts +196 -0
- package/src/shared/git-internals.ts +124 -0
- package/src/shared/git.contract.ts +170 -0
- package/src/shared/http-errors.ts +36 -0
- package/src/shared/logger.contract.ts +141 -0
- package/src/shared/logging.ts +96 -0
- package/src/shared/path-containment.ts +34 -0
- package/src/shared/pending-proposals.ts +161 -0
- package/src/shared/printable.ts +68 -0
- package/src/shared/redact-secret.ts +118 -0
- package/src/shared/rename-no-replace.ts +386 -0
- package/src/shared/ssrf.ts +44 -16
- package/src/version.ts +10 -6
- package/src/modules/diff/diff-paths.ts +0 -9
- package/src/modules/mcp/__tests__/mcp-session-store.test.ts +0 -151
- package/src/modules/mcp/__tests__/mcp.routes.session.test.ts +0 -226
- package/src/modules/mcp/mcp-session-store.ts +0 -162
- package/src/shared/__tests__/fs-walk.test.ts +0 -63
- package/src/shared/__tests__/kb-walk.test.ts +0 -107
- package/src/shared/fs-errors.ts +0 -10
- package/src/shared/fs-walk.ts +0 -45
- package/src/shared/hash-email.ts +0 -14
- package/src/shared/kb-walk.ts +0 -95
|
@@ -1,81 +1,19 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { logger } from '../../../../shared/logging.js';
|
|
3
4
|
import { HEXIS_EXTENSION_NS, HEXIS_TOOLS_DIR, LEGACY_GROUPS_DIR, PLUGINS_DIR, PLUGIN_MANIFEST_FILE, PLUGIN_MCP_FILE, PLUGIN_MCP_SCHEMA, PLUGIN_SKILLS_DIR, renderPluginManifest, } from '@bevel-software/platform-shared';
|
|
4
5
|
import { normalizeToolManual } from '../../../tool-manuals/tool-manuals.service.js';
|
|
5
6
|
import { parseOwnAccessEntries } from '../../../access-model/access-grammar.js';
|
|
6
7
|
import { containsVariableReference } from '../../../../shared/variable-refs.js';
|
|
7
|
-
import { IGNORE_FILENAME } from '
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
* Idempotent: a KB already on the new layout is untouched, and a half-finished
|
|
18
|
-
* run is completed by the next one.
|
|
19
|
-
*
|
|
20
|
-
* What moves — and what CONVERTS:
|
|
21
|
-
*
|
|
22
|
-
* Groups/GTM/access.md → Plugins/GTM/access.md (stays put)
|
|
23
|
-
* Groups/GTM/deploy/SKILL.md → Plugins/GTM/skills/deploy/SKILL.md
|
|
24
|
-
* Groups/GTM/web-search.tool → Plugins/GTM/software.bevel.hexis/tools/web-search.tool
|
|
25
|
-
* Groups/GTM/notion.tool (mcp) → an entry in Plugins/GTM/mcp.json, and the
|
|
26
|
-
* `.tool` file is DELETED — mcp.json is
|
|
27
|
-
* authoritative for MCP servers now.
|
|
28
|
-
* Plugins/GTM/plugin.json (written)
|
|
29
|
-
*
|
|
30
|
-
* The mcp.json entry is keyed by the `.tool`'s manual id: that id is the
|
|
31
|
-
* namespace vault secrets bind to (`<id>_<VAR>`), so keeping it is what keeps
|
|
32
|
-
* every configured secret and completed OAuth grant bound. What mcp.json
|
|
33
|
-
* cannot carry — auth headers with `${VAR}` references, variable declarations,
|
|
34
|
-
* the local-only flag — moves into `plugin.json`'s
|
|
35
|
-
* `extensions["software.bevel.hexis"].mcpServers[<id>]` block, the reverse-DNS
|
|
36
|
-
* namespace the spec reserves for client-specific data. `http`/`inline`
|
|
37
|
-
* manuals still MOVE as `.tool` files: nothing but this platform can run them.
|
|
38
|
-
*
|
|
39
|
-
* Scope: EVERY branch, drafts included and writable (`ctx.allBranches()`) —
|
|
40
|
-
* maintenance applied uniformly at the quiet moment is what keeps a draft's
|
|
41
|
-
* change-request diff down to the user's own changes; a stale draft against a
|
|
42
|
-
* migrated target would diff by the whole rename.
|
|
43
|
-
*
|
|
44
|
-
* Outcomes: a per-manual NOT-converted refusal makes the step `partial` with
|
|
45
|
-
* the reasons (the declared ops for everything else still apply); a branch
|
|
46
|
-
* carrying BOTH roots contributes nothing but a note; everything else is `ok`.
|
|
47
|
-
*/
|
|
48
|
-
export class GroupsToPluginsStep {
|
|
49
|
-
name = 'groups-to-plugins';
|
|
50
|
-
async run(ctx) {
|
|
51
|
-
const refusals = [];
|
|
52
|
-
for (const branch of await ctx.allBranches()) {
|
|
53
|
-
await migrateBranch(branch, refusals);
|
|
54
|
-
}
|
|
55
|
-
return refusals.length > 0 ? { outcome: 'partial', reason: refusals.join('; ') } : { outcome: 'ok' };
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// lstat, both helpers: SYMLINKS ARE NOT SUPPORTED IN PLUGINS, anywhere, so a
|
|
59
|
-
// link never counts as the thing it points at — following one here would let
|
|
60
|
-
// a symlinked directory pull files from outside the plugin into the sweep
|
|
61
|
-
// (and delete them from wherever they really live).
|
|
62
|
-
async function exists(p) {
|
|
63
|
-
try {
|
|
64
|
-
await fs.lstat(p);
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
async function isDir(p) {
|
|
72
|
-
try {
|
|
73
|
-
return (await fs.lstat(p)).isDirectory();
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
8
|
+
import { IGNORE_FILENAME, isAbsence, isSkippedEntry } from '../../../../shared/fs.contract.js';
|
|
9
|
+
import { withoutIgnoreLine } from './template-files.step.js';
|
|
10
|
+
import { PluginLayout, hasManifestEntry } from './plugin-layout.js';
|
|
11
|
+
const log = logger('groups-to-plugins');
|
|
12
|
+
// The probes here are `lstat`-based (`exists`, `isDirectory`): SYMLINKS ARE
|
|
13
|
+
// NOT SUPPORTED IN PLUGINS, anywhere, so a link never counts as the thing it
|
|
14
|
+
// points at — following one here would let a symlinked directory pull files
|
|
15
|
+
// from outside the plugin into the sweep (and delete them from wherever they
|
|
16
|
+
// really live).
|
|
79
17
|
/**
|
|
80
18
|
* A header value referencing a vault variable rather than carrying a literal.
|
|
81
19
|
* The substitutor's own grammar decides (shared/variable-refs.ts): both
|
|
@@ -95,18 +33,6 @@ function splitHeaders(headers) {
|
|
|
95
33
|
}
|
|
96
34
|
return { literal, credential };
|
|
97
35
|
}
|
|
98
|
-
/** Read+parse a JSON file, or `null` when absent or unparsable. */
|
|
99
|
-
async function readJson(p) {
|
|
100
|
-
try {
|
|
101
|
-
const parsed = JSON.parse(await fs.readFile(p, 'utf-8'));
|
|
102
|
-
return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)
|
|
103
|
-
? parsed
|
|
104
|
-
: null;
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
36
|
/**
|
|
111
37
|
* Parse a `.tool`; a convertible MCP manual (has a url) parses to a
|
|
112
38
|
* descriptor. A non-candidate (other types, a file that will not parse)
|
|
@@ -114,6 +40,10 @@ async function readJson(p) {
|
|
|
114
40
|
* comes back as the reason string, so the migration log distinguishes a
|
|
115
41
|
* deliberately-retained integration from one that silently failed — the
|
|
116
42
|
* same courtesy the manifest-missing refusal already extends.
|
|
43
|
+
*
|
|
44
|
+
* A free function, not a method: it reads ONE file it is handed the path of
|
|
45
|
+
* and decides from the bytes. Nothing about it varies with the step's
|
|
46
|
+
* collaborators.
|
|
117
47
|
*/
|
|
118
48
|
async function asMcpManual(abs, repoRel) {
|
|
119
49
|
try {
|
|
@@ -163,330 +93,432 @@ async function asMcpManual(abs, repoRel) {
|
|
|
163
93
|
}
|
|
164
94
|
}
|
|
165
95
|
/**
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const hasPlugins = await isDir(pluginsDir);
|
|
177
|
-
// `hasPlugins` is false for a FILE or SYMLINK squatting the `Plugins` name.
|
|
178
|
-
// Checked BEFORE the nothing-to-do early return below: a branch with a
|
|
179
|
-
// squatter and NO Groups/ would otherwise be silently skipped (and on a
|
|
180
|
-
// draft nothing later ever reports it), while a branch mid-migration would
|
|
181
|
-
// die in the applier with a bare ENOTDIR. Throw the actionable version
|
|
182
|
-
// either way: under the phase's fail-closed contract this stops the boot,
|
|
183
|
-
// which a squatted reserved root deserves (same stance as
|
|
184
|
-
// template-files.step.ts's reserved-dir check).
|
|
185
|
-
if (!hasPlugins && (await exists(pluginsDir))) {
|
|
186
|
-
throw new Error(`Branch "${branch.name}": "${PLUGINS_DIR}" exists but is not a directory` +
|
|
187
|
-
(hasLegacy ? `, so ${LEGACY_GROUPS_DIR}/ cannot be renamed to ${PLUGINS_DIR}/` : '') +
|
|
188
|
-
`. Remove or rename the "${PLUGINS_DIR}" entry — the platform requires this name to be a folder.`);
|
|
189
|
-
}
|
|
190
|
-
if (hasLegacy && hasPlugins) {
|
|
191
|
-
// Both present: somebody is mid-migration by hand, or two branches merged
|
|
192
|
-
// badly. Merging them here would guess at which copy of a same-named
|
|
193
|
-
// plugin wins, so we refuse and say so — loudly, because the KB is in a
|
|
194
|
-
// state a human needs to look at. The branch contributes no ops, only a
|
|
195
|
-
// note (which surfaces in a commit only if a later step dirties it).
|
|
196
|
-
console.warn(`[groups-to-plugins] ${branch.name}: both ${LEGACY_GROUPS_DIR}/ and ${PLUGINS_DIR}/ exist — leaving both alone. ` +
|
|
197
|
-
`Merge ${LEGACY_GROUPS_DIR}/ into ${PLUGINS_DIR}/ by hand; nothing is being migrated automatically.`);
|
|
198
|
-
branch.note(`${LEGACY_GROUPS_DIR}/ and ${PLUGINS_DIR}/ both exist — merge by hand; nothing was migrated automatically`);
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
if (!hasLegacy && !hasPlugins)
|
|
202
|
-
return;
|
|
203
|
-
// Every read below goes against the PRE-STEP tree: when the root rename is
|
|
204
|
-
// declared this run it is NOT yet on disk, so the plugin folders are still
|
|
205
|
-
// read under their legacy root while every declared op speaks post-rename
|
|
206
|
-
// `Plugins/…` paths — the root move is declared FIRST, so by the time the
|
|
207
|
-
// per-folder ops apply, the tree is already under `Plugins/`.
|
|
208
|
-
const rootOnDisk = hasLegacy ? legacyDir : pluginsDir;
|
|
209
|
-
// Detail notes are held back until we know ops were declared: the subject
|
|
210
|
-
// line must describe a commit that will actually exist.
|
|
211
|
-
const details = [];
|
|
212
|
-
let changed = false;
|
|
213
|
-
if (hasLegacy) {
|
|
214
|
-
// The Groups→Plugins root rename is ONE declared op, directory and all.
|
|
215
|
-
branch.move(LEGACY_GROUPS_DIR, PLUGINS_DIR);
|
|
216
|
-
details.push(`${LEGACY_GROUPS_DIR}/ → ${PLUGINS_DIR}/`);
|
|
217
|
-
changed = true;
|
|
218
|
-
// Rides WITH the rename, not on every run: the rename is what turned the
|
|
219
|
-
// ignore rule stale, so the run that renames is the run that heals it.
|
|
220
|
-
changed = (await rewriteIgnoreRootRule(repoDir, branch, details)) || changed;
|
|
221
|
-
}
|
|
222
|
-
// Runs whether or not the rename just happened, so a KB already on
|
|
223
|
-
// `Plugins/` still gets missing manifests and any half-done reorganisation
|
|
224
|
-
// finished. That is what makes this idempotent rather than once-only.
|
|
225
|
-
for (const entry of await fs.readdir(rootOnDisk, { withFileTypes: true })) {
|
|
226
|
-
if (!entry.isDirectory() || entry.name.startsWith('.'))
|
|
227
|
-
continue;
|
|
228
|
-
const folderChanged = await migratePluginFolder(branch, path.join(rootOnDisk, entry.name), entry.name, details, refusals);
|
|
229
|
-
changed = changed || folderChanged;
|
|
230
|
-
}
|
|
231
|
-
if (!changed)
|
|
232
|
-
return;
|
|
233
|
-
// First note becomes the commit subject — the same messages the lazy
|
|
234
|
-
// top-up committed under; the detail notes become its body.
|
|
235
|
-
branch.note(hasLegacy
|
|
236
|
-
? `Move ${LEGACY_GROUPS_DIR}/ to ${PLUGINS_DIR}/ (Agent Plugins layout)`
|
|
237
|
-
: `Reorganise ${PLUGINS_DIR}/ to the Agent Plugins layout`);
|
|
238
|
-
for (const line of details)
|
|
239
|
-
branch.note(line);
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Rewrite the KB's `.bevelignore` rule for the renamed root: the exact line
|
|
243
|
-
* `Groups/` becomes `Plugins/`. Without this a migrated KB is left with a
|
|
244
|
-
* stale rule for a folder that no longer exists and NO rule for the new one,
|
|
245
|
-
* so plugin internals start showing up in the file tree and agent view.
|
|
96
|
+
* One-way migration of a knowledge base from `Groups/` to the Agent Plugins
|
|
97
|
+
* layout under `Plugins/` (https://agent-plugins.org, v1.0.0), as an
|
|
98
|
+
* {@link OnServerStart} step. (It began life as an in-place module run from
|
|
99
|
+
* the lazy top-up; that path is gone, and this is the only form.) Steps
|
|
100
|
+
* never write: every change is DECLARED on the branch handle
|
|
101
|
+
* (`move`/`write`/`remove`) and the runner applies it, while every read goes
|
|
102
|
+
* against the real, pre-step tree via `repoDir()`.
|
|
103
|
+
*
|
|
104
|
+
* Idempotent: a KB already on the new layout is untouched, and a half-finished
|
|
105
|
+
* run is completed by the next one.
|
|
246
106
|
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
* (
|
|
107
|
+
* What moves — and what CONVERTS:
|
|
108
|
+
*
|
|
109
|
+
* Groups/GTM/access.md → Plugins/GTM/access.md (stays put)
|
|
110
|
+
* Groups/GTM/deploy/SKILL.md → Plugins/GTM/skills/deploy/SKILL.md
|
|
111
|
+
* Groups/GTM/web-search.tool → Plugins/GTM/software.bevel.hexis/tools/web-search.tool
|
|
112
|
+
* Groups/GTM/notion.tool (mcp) → an entry in Plugins/GTM/mcp.json, and the
|
|
113
|
+
* `.tool` file is DELETED — mcp.json is
|
|
114
|
+
* authoritative for MCP servers now.
|
|
115
|
+
* Plugins/GTM/plugin.json (written)
|
|
116
|
+
*
|
|
117
|
+
* The mcp.json entry is keyed by the `.tool`'s manual id: that id is the
|
|
118
|
+
* namespace vault secrets bind to (`<id>_<VAR>`), so keeping it is what keeps
|
|
119
|
+
* every configured secret and completed OAuth grant bound. What mcp.json
|
|
120
|
+
* cannot carry — auth headers with `${VAR}` references, variable declarations,
|
|
121
|
+
* the local-only flag — moves into `plugin.json`'s
|
|
122
|
+
* `extensions["software.bevel.hexis"].mcpServers[<id>]` block, the reverse-DNS
|
|
123
|
+
* namespace the spec reserves for client-specific data. `http`/`inline`
|
|
124
|
+
* manuals still MOVE as `.tool` files: nothing but this platform can run them.
|
|
125
|
+
*
|
|
126
|
+
* Scope: EVERY branch, drafts included and writable (`ctx.allBranches()`) —
|
|
127
|
+
* maintenance applied uniformly at the quiet moment is what keeps a draft's
|
|
128
|
+
* change-request diff down to the user's own changes; a stale draft against a
|
|
129
|
+
* migrated target would diff by the whole rename.
|
|
130
|
+
*
|
|
131
|
+
* Outcomes: a per-manual NOT-converted refusal makes the step `partial` with
|
|
132
|
+
* the reasons (the declared ops for everything else still apply); a branch
|
|
133
|
+
* carrying BOTH roots contributes nothing but a note; everything else is `ok`.
|
|
250
134
|
*/
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
135
|
+
export class GroupsToPluginsStep {
|
|
136
|
+
disk;
|
|
137
|
+
name = 'groups-to-plugins';
|
|
138
|
+
/** The plugin-shaped questions, answered the same way the manifests step answers them. */
|
|
139
|
+
layout;
|
|
140
|
+
constructor(disk) {
|
|
141
|
+
this.disk = disk;
|
|
142
|
+
this.layout = new PluginLayout(disk);
|
|
258
143
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
if (idx === -1)
|
|
266
|
-
return false;
|
|
267
|
-
// EVERY exact-match line follows the rename: the first becomes the new
|
|
268
|
-
// rule, any further duplicates are dropped — rewriting only the first would
|
|
269
|
-
// leave stale `Groups/` lines behind, and the already-has-Plugins guard
|
|
270
|
-
// above means a second pass would never touch them.
|
|
271
|
-
lines[idx] = newRule;
|
|
272
|
-
const rewritten = lines.filter((l, i) => i <= idx || l.trim() !== legacyRule);
|
|
273
|
-
branch.write(IGNORE_FILENAME, rewritten.join('\n'));
|
|
274
|
-
details.push(`${IGNORE_FILENAME}: ${legacyRule} → ${newRule}`);
|
|
275
|
-
return true;
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Reorganise ONE plugin folder. `folderDir` is where the folder sits ON DISK
|
|
279
|
-
* (under the legacy root when the rename is buffered this run); declared op
|
|
280
|
-
* paths always speak `Plugins/<folder>/…`. Returns whether ops were declared.
|
|
281
|
-
*/
|
|
282
|
-
async function migratePluginFolder(branch, folderDir, folderName, details, refusals) {
|
|
283
|
-
const relPlugin = `${PLUGINS_DIR}/${folderName}`;
|
|
284
|
-
let changed = false;
|
|
285
|
-
// When the manifest is written this run its content is remembered: the
|
|
286
|
-
// buffered write is not on disk yet, and the fold below must see it.
|
|
287
|
-
let renderedManifest = null;
|
|
288
|
-
if (!(await exists(path.join(folderDir, PLUGIN_MANIFEST_FILE)))) {
|
|
289
|
-
renderedManifest = renderPluginManifest(folderName);
|
|
290
|
-
branch.write(`${relPlugin}/${PLUGIN_MANIFEST_FILE}`, renderedManifest);
|
|
291
|
-
details.push(`${folderName}: wrote ${PLUGIN_MANIFEST_FILE}`);
|
|
292
|
-
changed = true;
|
|
144
|
+
async run(ctx) {
|
|
145
|
+
const refusals = [];
|
|
146
|
+
for (const branch of await ctx.allBranches()) {
|
|
147
|
+
await this.migrateBranch(branch, refusals);
|
|
148
|
+
}
|
|
149
|
+
return refusals.length > 0 ? { outcome: 'partial', reason: refusals.join('; ') } : { outcome: 'ok' };
|
|
293
150
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
151
|
+
/**
|
|
152
|
+
* Migrate one branch. Declares ops only; a branch whose migration declares
|
|
153
|
+
* nothing stays clean, so a notes-only pass (advisory refusals) commits
|
|
154
|
+
* nothing — the same contract the in-place migration's `migrated` flag
|
|
155
|
+
* carried.
|
|
156
|
+
*/
|
|
157
|
+
async migrateBranch(branch, refusals) {
|
|
158
|
+
const repoDir = await branch.repoDir();
|
|
159
|
+
const legacyDir = path.join(repoDir, LEGACY_GROUPS_DIR);
|
|
160
|
+
const pluginsDir = path.join(repoDir, PLUGINS_DIR);
|
|
161
|
+
const hasLegacy = await this.disk.isDirectory(legacyDir);
|
|
162
|
+
const hasPlugins = await this.disk.isDirectory(pluginsDir);
|
|
163
|
+
// `hasPlugins` is false for a FILE or SYMLINK squatting the `Plugins` name.
|
|
164
|
+
// Checked BEFORE the nothing-to-do early return below: a branch with a
|
|
165
|
+
// squatter and NO Groups/ would otherwise be silently skipped (and on a
|
|
166
|
+
// draft nothing later ever reports it), while a branch mid-migration would
|
|
167
|
+
// die in the applier with a bare ENOTDIR. Throw the actionable version
|
|
168
|
+
// either way: under the phase's fail-closed contract this stops the boot,
|
|
169
|
+
// which a squatted reserved root deserves (same stance as
|
|
170
|
+
// template-files.step.ts's reserved-dir check).
|
|
171
|
+
if (!hasPlugins && (await this.disk.exists(pluginsDir))) {
|
|
172
|
+
throw new Error(`Branch "${branch.name}": "${PLUGINS_DIR}" exists but is not a directory` +
|
|
173
|
+
(hasLegacy ? `, so ${LEGACY_GROUPS_DIR}/ cannot be renamed to ${PLUGINS_DIR}/` : '') +
|
|
174
|
+
`. Remove or rename the "${PLUGINS_DIR}" entry — the platform requires this name to be a folder.`);
|
|
175
|
+
}
|
|
176
|
+
// Detail notes are held back until we know ops were declared: the subject
|
|
177
|
+
// line must describe a commit that will actually exist.
|
|
178
|
+
const details = [];
|
|
179
|
+
// On EVERY run and every branch, whatever roots it has: the two root
|
|
180
|
+
// rules are stale for one reason (the plugins root is drawn by the sidebar
|
|
181
|
+
// now), and a draft migrated by an earlier release carries the `Plugins/`
|
|
182
|
+
// line that release wrote — the template step, which retires it on the
|
|
183
|
+
// protected branches, never visits a draft. BEFORE the early returns: a
|
|
184
|
+
// branch with both roots (refused below) or neither (nothing to migrate)
|
|
185
|
+
// is no less stale. Idempotent: nothing to drop, nothing declared.
|
|
186
|
+
const changed = await this.retireIgnoreRootRules(repoDir, branch, details);
|
|
187
|
+
const retiredSubject = `Retire the stale ${LEGACY_GROUPS_DIR}/ and ${PLUGINS_DIR}/ ignore rules`;
|
|
188
|
+
if (hasLegacy && hasPlugins) {
|
|
189
|
+
// Both present: somebody is mid-migration by hand, or two branches merged
|
|
190
|
+
// badly. Merging them here would guess at which copy of a same-named
|
|
191
|
+
// plugin wins, so we refuse and say so — loudly, because the KB is in a
|
|
192
|
+
// state a human needs to look at. The branch contributes no migration
|
|
193
|
+
// ops, only a note (which surfaces in a commit only if the ignore
|
|
194
|
+
// retirement above, or a later step, dirties it).
|
|
195
|
+
log.warn(`${branch.name}: both ${LEGACY_GROUPS_DIR}/ and ${PLUGINS_DIR}/ exist — leaving both alone. ` +
|
|
196
|
+
`Merge ${LEGACY_GROUPS_DIR}/ into ${PLUGINS_DIR}/ by hand; nothing is being migrated automatically.`);
|
|
197
|
+
if (changed)
|
|
198
|
+
branch.note(retiredSubject);
|
|
199
|
+
branch.note(`${LEGACY_GROUPS_DIR}/ and ${PLUGINS_DIR}/ both exist — merge by hand; nothing was migrated automatically`);
|
|
200
|
+
for (const line of details)
|
|
201
|
+
branch.note(line);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (!hasLegacy && !hasPlugins) {
|
|
205
|
+
if (!changed)
|
|
206
|
+
return;
|
|
207
|
+
branch.note(retiredSubject);
|
|
208
|
+
for (const line of details)
|
|
209
|
+
branch.note(line);
|
|
305
210
|
return;
|
|
306
211
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
212
|
+
// Every read below goes against the PRE-STEP tree: when the root rename is
|
|
213
|
+
// declared this run it is NOT yet on disk, so the plugin folders are still
|
|
214
|
+
// read under their legacy root while every declared op speaks post-rename
|
|
215
|
+
// `Plugins/…` paths — the root move is declared FIRST, so by the time the
|
|
216
|
+
// per-folder ops apply, the tree is already under `Plugins/`.
|
|
217
|
+
const rootOnDisk = hasLegacy ? legacyDir : pluginsDir;
|
|
218
|
+
// Whether any MIGRATION op was declared — apart from the ignore retirement
|
|
219
|
+
// above, which is its own subject when it is all that happened.
|
|
220
|
+
let migrated = false;
|
|
221
|
+
if (hasLegacy) {
|
|
222
|
+
// The Groups→Plugins root rename is ONE declared op, directory and all.
|
|
223
|
+
branch.move(LEGACY_GROUPS_DIR, PLUGINS_DIR);
|
|
224
|
+
details.push(`${LEGACY_GROUPS_DIR}/ → ${PLUGINS_DIR}/`);
|
|
225
|
+
migrated = true;
|
|
313
226
|
}
|
|
314
|
-
|
|
315
|
-
//
|
|
316
|
-
//
|
|
317
|
-
//
|
|
318
|
-
//
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
227
|
+
// Runs whether or not the rename just happened, so a KB already on
|
|
228
|
+
// `Plugins/` still gets missing manifests and any half-done reorganisation
|
|
229
|
+
// finished. That is what makes this idempotent rather than once-only.
|
|
230
|
+
// The catalog walk's own skip list: a vendored `node_modules` under the
|
|
231
|
+
// root is nobody's plugin, and this step must not reorganise it.
|
|
232
|
+
for (const entry of (await this.disk.listDir(rootOnDisk)) ?? []) {
|
|
233
|
+
if (!entry.isDirectory() || isSkippedEntry(entry.name))
|
|
234
|
+
continue;
|
|
235
|
+
const folderChanged = await this.migratePluginFolder(branch, path.join(rootOnDisk, entry.name), entry.name, details, refusals);
|
|
236
|
+
migrated = migrated || folderChanged;
|
|
323
237
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
238
|
+
if (!changed && !migrated)
|
|
239
|
+
return;
|
|
240
|
+
// First note becomes the commit subject — the same messages the lazy
|
|
241
|
+
// top-up committed under; the detail notes become its body. The subject
|
|
242
|
+
// names what happened: a branch that only lost its stale ignore rules
|
|
243
|
+
// was not reorganised.
|
|
244
|
+
branch.note(hasLegacy
|
|
245
|
+
? `Move ${LEGACY_GROUPS_DIR}/ to ${PLUGINS_DIR}/ (Agent Plugins layout)`
|
|
246
|
+
: migrated
|
|
247
|
+
? `Reorganise ${PLUGINS_DIR}/ to the Agent Plugins layout`
|
|
248
|
+
: retiredSubject);
|
|
249
|
+
for (const line of details)
|
|
250
|
+
branch.note(line);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Retire the KB's `.bevelignore` rules for the plugins root, old name and
|
|
254
|
+
* new: every exact `Groups/` and `Plugins/` line goes. `Groups/` used to
|
|
255
|
+
* become `Plugins/` — the rename's companion edit, so plugin internals
|
|
256
|
+
* stayed out of the file tree and the agent view. The plugins root is no
|
|
257
|
+
* longer hidden at all (the Skills & Tools sidebar draws it as a file tree
|
|
258
|
+
* read from the workspace tree), so the old rule has nothing to become and
|
|
259
|
+
* the new one is as stale as it: a KB this step migrated under an earlier
|
|
260
|
+
* release carries the `Plugins/` line that release wrote, on every branch
|
|
261
|
+
* it visited — drafts included, which the template step never reaches.
|
|
262
|
+
*
|
|
263
|
+
* The file is the operator's — this touches only the lines the platform's
|
|
264
|
+
* own root rules put there. Every exact match goes, not just the first: a
|
|
265
|
+
* duplicate left behind would be found again on every boot and never
|
|
266
|
+
* touched, since the first pass is what makes the run a no-op. A `!…`
|
|
267
|
+
* negation is not the rule and stays.
|
|
268
|
+
*/
|
|
269
|
+
async retireIgnoreRootRules(repoDir, branch, details) {
|
|
270
|
+
let current;
|
|
271
|
+
try {
|
|
272
|
+
current = await fs.readFile(path.join(repoDir, IGNORE_FILENAME), 'utf-8');
|
|
343
273
|
}
|
|
344
|
-
|
|
345
|
-
|
|
274
|
+
catch (err) {
|
|
275
|
+
// No ignore file — nothing went stale. Anything else (a directory in
|
|
276
|
+
// its place, a permission hole) is NOT "no file": a rule that may still
|
|
277
|
+
// be there would hide the tree while the run reports success, so the
|
|
278
|
+
// hole surfaces as the step's failure instead.
|
|
279
|
+
if (isAbsence(err))
|
|
280
|
+
return false;
|
|
281
|
+
throw err;
|
|
346
282
|
}
|
|
283
|
+
const stale = [`${LEGACY_GROUPS_DIR}/`, `${PLUGINS_DIR}/`];
|
|
284
|
+
const present = stale.filter((rule) => current.split('\n').some((l) => l.trim() === rule));
|
|
285
|
+
if (present.length === 0)
|
|
286
|
+
return false;
|
|
287
|
+
// The same drop the template step makes, so a platform comment above a
|
|
288
|
+
// rule, and the blank line that opened an appended block, go with it.
|
|
289
|
+
const merged = present.reduce((text, rule) => withoutIgnoreLine(text, rule), current);
|
|
290
|
+
branch.write(IGNORE_FILENAME, merged);
|
|
291
|
+
details.push(`${IGNORE_FILENAME}: ${present.join(', ')} dropped`);
|
|
292
|
+
return true;
|
|
347
293
|
}
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
294
|
+
/**
|
|
295
|
+
* Reorganise ONE plugin folder. `folderDir` is where the folder sits ON DISK
|
|
296
|
+
* (under the legacy root when the rename is buffered this run); declared op
|
|
297
|
+
* paths always speak `Plugins/<folder>/…`. Returns whether ops were declared.
|
|
298
|
+
*/
|
|
299
|
+
async migratePluginFolder(branch, folderDir, folderName, details, refusals) {
|
|
300
|
+
const relPlugin = `${PLUGINS_DIR}/${folderName}`;
|
|
301
|
+
let changed = false;
|
|
302
|
+
const entries = await this.disk.listDir(folderDir);
|
|
303
|
+
if (entries === null)
|
|
304
|
+
return false; // vanished since the root was listed: nothing to reorganise
|
|
305
|
+
// When the manifest is written this run its content is remembered: the
|
|
306
|
+
// buffered write is not on disk yet, and the fold below must see it.
|
|
307
|
+
// "Has a manifest" is the manifests step's own judgement — a REGULAR file
|
|
308
|
+
// entry, bundle dialect included — so a folder squatted by a link or a
|
|
309
|
+
// directory named `plugin.json` is not mistaken for a plugin that has one.
|
|
310
|
+
let renderedManifest = null;
|
|
311
|
+
if (!hasManifestEntry(entries)) {
|
|
312
|
+
// A folder is made a plugin only when it IS one — by the same rule the
|
|
313
|
+
// manifests step applies: legacy plugin content inside it, and no
|
|
314
|
+
// plugin beneath it. A plain folder somebody made under the root (a
|
|
315
|
+
// `.gitkeep`), or a grouping folder holding plugins, is neither, and a
|
|
316
|
+
// manifest written there would turn a grouping folder into a plugin
|
|
317
|
+
// that hides everything beneath it.
|
|
318
|
+
if (!(await this.layout.looksLikeLegacyPlugin(folderDir, entries)) ||
|
|
319
|
+
(await this.layout.hasPluginBeneath(folderDir))) {
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
renderedManifest = renderPluginManifest(folderName);
|
|
323
|
+
branch.write(`${relPlugin}/${PLUGIN_MANIFEST_FILE}`, renderedManifest);
|
|
324
|
+
details.push(`${folderName}: wrote ${PLUGIN_MANIFEST_FILE}`);
|
|
325
|
+
changed = true;
|
|
326
|
+
}
|
|
327
|
+
const converted = [];
|
|
328
|
+
const convertOrMove = async (abs, rel, note) => {
|
|
369
329
|
const manual = await asMcpManual(abs, rel);
|
|
370
|
-
// A refusal reason here is a SETTLED resident of the tools dir — it
|
|
371
|
-
// was named the run it moved in, and this sweep repeats every boot,
|
|
372
|
-
// so re-raising it would be log spam. Only a convertible manual queues.
|
|
373
330
|
if (manual !== null && typeof manual !== 'string') {
|
|
374
|
-
|
|
331
|
+
// QUEUED for conversion — the `.tool`'s removal is declared only AFTER
|
|
332
|
+
// its entry's writes (see foldIntoPluginFiles). Buffering makes the
|
|
333
|
+
// apply all-or-nothing anyway, but the declaration order keeps the old
|
|
334
|
+
// recovery reasoning legible: the file IS the recovery path until the
|
|
335
|
+
// fold has landed.
|
|
336
|
+
converted.push({ manual, rel, note });
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
if (typeof manual === 'string') {
|
|
340
|
+
// The operator's answer to "why is this integration not in mcp.json":
|
|
341
|
+
// a refused conversion must read as the deliberate retention it is —
|
|
342
|
+
// surfaced through the step's `partial` reason rather than a note, so
|
|
343
|
+
// it names what did NOT change instead of decorating a commit.
|
|
344
|
+
refusals.push(`${branch.name}: ${folderName}: ${note} NOT converted — ${manual}; kept as a .tool`);
|
|
345
|
+
}
|
|
346
|
+
const destDisk = path.join(folderDir, ...HEXIS_TOOLS_DIR.split('/'), path.basename(abs));
|
|
347
|
+
// Never overwrite: a destination that already exists means a previous run
|
|
348
|
+
// got there first (or a human did), and clobbering it would destroy the
|
|
349
|
+
// newer copy. The check is against the pre-step tree — the only tree that
|
|
350
|
+
// exists while this step runs.
|
|
351
|
+
if (abs !== destDisk && !(await this.disk.exists(destDisk))) {
|
|
352
|
+
branch.move(rel, `${relPlugin}/${HEXIS_TOOLS_DIR}/${path.basename(abs)}`);
|
|
353
|
+
details.push(`${folderName}: ${note} → ${HEXIS_TOOLS_DIR}/${path.basename(abs)}`);
|
|
354
|
+
changed = true;
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
for (const entry of entries) {
|
|
358
|
+
if (entry.name.startsWith('.'))
|
|
359
|
+
continue;
|
|
360
|
+
if (entry.name === PLUGIN_SKILLS_DIR || entry.name === PLUGIN_MANIFEST_FILE)
|
|
361
|
+
continue;
|
|
362
|
+
if (entry.name === PLUGIN_MCP_FILE || entry.name === 'access.md')
|
|
363
|
+
continue;
|
|
364
|
+
if (entry.name === HEXIS_TOOLS_DIR.split('/')[0])
|
|
365
|
+
continue;
|
|
366
|
+
const abs = path.join(folderDir, entry.name);
|
|
367
|
+
// A skill is a folder carrying SKILL.md — the same rule the catalog uses.
|
|
368
|
+
if (entry.isDirectory() && (await this.disk.exists(path.join(abs, 'SKILL.md')))) {
|
|
369
|
+
if (!(await this.disk.exists(path.join(folderDir, PLUGIN_SKILLS_DIR, entry.name)))) {
|
|
370
|
+
branch.move(`${relPlugin}/${entry.name}`, `${relPlugin}/${PLUGIN_SKILLS_DIR}/${entry.name}`);
|
|
371
|
+
details.push(`${folderName}: ${entry.name}/ → ${PLUGIN_SKILLS_DIR}/${entry.name}/`);
|
|
372
|
+
changed = true;
|
|
373
|
+
}
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
if (entry.isFile() && entry.name.toLowerCase().endsWith('.tool')) {
|
|
377
|
+
await convertOrMove(abs, `${relPlugin}/${entry.name}`, entry.name);
|
|
375
378
|
}
|
|
376
379
|
}
|
|
380
|
+
// Second sweep: mcp `.tool`s an EARLIER run moved into the extension dir
|
|
381
|
+
// (when mcp.json was a projection, not the authority). Converting them here
|
|
382
|
+
// is what makes the migration complete itself rather than strand a twin.
|
|
383
|
+
// `isDirectory` is lstat-based, so a SYMLINK planted at this path is not swept:
|
|
384
|
+
// this sweep DELETES what it converts, and following a link would delete
|
|
385
|
+
// `.tool` files from wherever the link really points.
|
|
386
|
+
//
|
|
387
|
+
// Under buffered ops this sweep reads the PRE-STEP tree, so a `.tool` the
|
|
388
|
+
// first sweep just declared moved here is not visible — and does not need
|
|
389
|
+
// to be: same-run movables were already converted or refused by the same
|
|
390
|
+
// `asMcpManual` logic above. The sweep exists for files parked by EARLIER
|
|
391
|
+
// runs, which are on disk. (The old in-place code happened to re-see
|
|
392
|
+
// same-run moves and no-op on them; the buffered read makes that a
|
|
393
|
+
// non-event by construction.)
|
|
394
|
+
const extToolsDir = path.join(folderDir, ...HEXIS_TOOLS_DIR.split('/'));
|
|
395
|
+
if (await this.disk.isDirectory(extToolsDir)) {
|
|
396
|
+
for (const entry of (await this.disk.listDir(extToolsDir)) ?? []) {
|
|
397
|
+
if (!entry.isFile() || !entry.name.toLowerCase().endsWith('.tool'))
|
|
398
|
+
continue;
|
|
399
|
+
const abs = path.join(extToolsDir, entry.name);
|
|
400
|
+
const rel = `${relPlugin}/${HEXIS_TOOLS_DIR}/${entry.name}`;
|
|
401
|
+
const manual = await asMcpManual(abs, rel);
|
|
402
|
+
// A refusal reason here is a SETTLED resident of the tools dir — it
|
|
403
|
+
// was named the run it moved in, and this sweep repeats every boot,
|
|
404
|
+
// so re-raising it would be log spam. Only a convertible manual queues.
|
|
405
|
+
if (manual !== null && typeof manual !== 'string') {
|
|
406
|
+
converted.push({ manual, rel, note: `${HEXIS_TOOLS_DIR}/${entry.name}` });
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
changed =
|
|
411
|
+
(await this.foldIntoPluginFiles(branch, folderDir, relPlugin, folderName, renderedManifest, converted, details, refusals)) || changed;
|
|
412
|
+
return changed;
|
|
377
413
|
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
if (manuals.length === 0)
|
|
393
|
-
return false;
|
|
394
|
-
const mcp = (await readJson(path.join(folderDir, PLUGIN_MCP_FILE))) ?? {
|
|
395
|
-
$schema: PLUGIN_MCP_SCHEMA,
|
|
396
|
-
mcpServers: {},
|
|
397
|
-
};
|
|
398
|
-
// An array (or any non-object) here would take property assignments and then
|
|
399
|
-
// drop them at stringify — normalize to an object before merging into it.
|
|
400
|
-
if (typeof mcp.mcpServers !== 'object' || mcp.mcpServers === null || Array.isArray(mcp.mcpServers)) {
|
|
401
|
-
mcp.mcpServers = {};
|
|
402
|
-
}
|
|
403
|
-
const servers = mcp.mcpServers;
|
|
404
|
-
// The manifest may have been DECLARED this very run — a buffered write not
|
|
405
|
-
// yet on disk. Reading the disk then would see "missing" and refuse
|
|
406
|
-
// conversions the write-then-read in-place code performed, so the step's
|
|
407
|
-
// own rendered content stands in for the tree it is about to produce.
|
|
408
|
-
const manifest = renderedManifest !== null
|
|
409
|
-
? JSON.parse(renderedManifest)
|
|
410
|
-
: await readJson(path.join(folderDir, PLUGIN_MANIFEST_FILE));
|
|
411
|
-
if (manifest === null) {
|
|
412
|
-
console.warn(`[groups-to-plugins] ${branch.name}: ${folderName}/${PLUGIN_MANIFEST_FILE} is missing or unparsable — ` +
|
|
413
|
-
'mcp manuals convert only when they carry NOTHING for the extensions block; any ' +
|
|
414
|
-
'non-portable half (auth headers, variables, a description, or the local-only flag) ' +
|
|
415
|
-
'keeps the manual a `.tool` until the manifest is fixed.');
|
|
416
|
-
}
|
|
417
|
-
let wroteMcp = false;
|
|
418
|
-
let wroteManifest = false;
|
|
419
|
-
const folded = [];
|
|
420
|
-
for (const item of manuals.sort((a, b) => a.manual.name.localeCompare(b.manual.name))) {
|
|
421
|
-
const m = item.manual;
|
|
422
|
-
const { literal, credential } = splitHeaders(m.headers);
|
|
423
|
-
// A manual whose non-portable half (auth headers, variables, local flag)
|
|
424
|
-
// has nowhere to go — the manifest is missing or unparsable — is NOT
|
|
425
|
-
// converted at all: writing only its portable half and deleting the
|
|
426
|
-
// source would silently discard the credential wiring. It stays a
|
|
427
|
-
// `.tool` until the manifest is fixed.
|
|
428
|
-
const extEntry = {
|
|
429
|
-
...(Object.keys(credential).length > 0 ? { headers: credential } : {}),
|
|
430
|
-
...(m.variables && m.variables.length > 0 ? { variables: m.variables } : {}),
|
|
431
|
-
...(typeof m.description === 'string' ? { description: m.description } : {}),
|
|
432
|
-
...(m.remote === false ? { local: true } : {}),
|
|
414
|
+
/**
|
|
415
|
+
* Fold converted mcp manuals into the plugin's mcp.json and plugin.json.
|
|
416
|
+
*
|
|
417
|
+
* MERGE, never clobber: an entry already present under a manual's key — hand
|
|
418
|
+
* written or from a previous run — wins, because overwriting it would discard
|
|
419
|
+
* the newer intent. The extension block merges the same way. A plugin.json
|
|
420
|
+
* that does not parse costs the extension write (logged), not the migration.
|
|
421
|
+
*/
|
|
422
|
+
async foldIntoPluginFiles(branch, folderDir, relPlugin, folderName, renderedManifest, manuals, details, refusals) {
|
|
423
|
+
if (manuals.length === 0)
|
|
424
|
+
return false;
|
|
425
|
+
const mcp = (await this.disk.readJsonObject(path.join(folderDir, PLUGIN_MCP_FILE))) ?? {
|
|
426
|
+
$schema: PLUGIN_MCP_SCHEMA,
|
|
427
|
+
mcpServers: {},
|
|
433
428
|
};
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
continue;
|
|
429
|
+
// An array (or any non-object) here would take property assignments and then
|
|
430
|
+
// drop them at stringify — normalize to an object before merging into it.
|
|
431
|
+
if (typeof mcp.mcpServers !== 'object' || mcp.mcpServers === null || Array.isArray(mcp.mcpServers)) {
|
|
432
|
+
mcp.mcpServers = {};
|
|
439
433
|
}
|
|
440
|
-
|
|
441
|
-
//
|
|
442
|
-
//
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
434
|
+
const servers = mcp.mcpServers;
|
|
435
|
+
// The manifest may have been DECLARED this very run — a buffered write not
|
|
436
|
+
// yet on disk. Reading the disk then would see "missing" and refuse
|
|
437
|
+
// conversions the write-then-read in-place code performed, so the step's
|
|
438
|
+
// own rendered content stands in for the tree it is about to produce.
|
|
439
|
+
const manifest = renderedManifest !== null
|
|
440
|
+
? JSON.parse(renderedManifest)
|
|
441
|
+
: await this.disk.readJsonObject(path.join(folderDir, PLUGIN_MANIFEST_FILE));
|
|
442
|
+
if (manifest === null) {
|
|
443
|
+
log.warn(`${branch.name}: ${folderName}/${PLUGIN_MANIFEST_FILE} is missing or unparsable — ` +
|
|
444
|
+
'mcp manuals convert only when they carry NOTHING for the extensions block; any ' +
|
|
445
|
+
'non-portable half (auth headers, variables, a description, or the local-only flag) ' +
|
|
446
|
+
'keeps the manual a `.tool` until the manifest is fixed.');
|
|
451
447
|
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
448
|
+
let wroteMcp = false;
|
|
449
|
+
let wroteManifest = false;
|
|
450
|
+
const folded = [];
|
|
451
|
+
for (const item of manuals.sort((a, b) => a.manual.name.localeCompare(b.manual.name))) {
|
|
452
|
+
const m = item.manual;
|
|
453
|
+
const { literal, credential } = splitHeaders(m.headers);
|
|
454
|
+
// A manual whose non-portable half (auth headers, variables, local flag)
|
|
455
|
+
// has nowhere to go — the manifest is missing or unparsable — is NOT
|
|
456
|
+
// converted at all: writing only its portable half and deleting the
|
|
457
|
+
// source would silently discard the credential wiring. It stays a
|
|
458
|
+
// `.tool` until the manifest is fixed.
|
|
459
|
+
const extEntry = {
|
|
460
|
+
...(Object.keys(credential).length > 0 ? { headers: credential } : {}),
|
|
461
|
+
...(m.variables && m.variables.length > 0 ? { variables: m.variables } : {}),
|
|
462
|
+
...(typeof m.description === 'string' ? { description: m.description } : {}),
|
|
463
|
+
...(m.remote === false ? { local: true } : {}),
|
|
464
|
+
};
|
|
465
|
+
if (manifest === null && Object.keys(extEntry).length > 0) {
|
|
466
|
+
refusals.push(`${branch.name}: ${folderName}: ${item.note} NOT converted — ${PLUGIN_MANIFEST_FILE} is missing/unparsable ` +
|
|
467
|
+
'and the manual carries declarations (auth headers, variables, a description, or the ' +
|
|
468
|
+
'local-only flag) that would be lost; fix the manifest first');
|
|
469
|
+
continue;
|
|
462
470
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
471
|
+
folded.push(item);
|
|
472
|
+
// Own-property check: `in` sees `constructor` and friends on the prototype,
|
|
473
|
+
// which would silently skip a legitimately named server.
|
|
474
|
+
if (!Object.prototype.hasOwnProperty.call(servers, m.name)) {
|
|
475
|
+
servers[m.name] = {
|
|
476
|
+
type: 'streamable-http',
|
|
477
|
+
url: m.url,
|
|
478
|
+
...(Object.keys(literal).length > 0 ? { headers: literal } : {}),
|
|
479
|
+
};
|
|
480
|
+
wroteMcp = true;
|
|
481
|
+
details.push(`${folderName}: ${m.name} → ${PLUGIN_MCP_FILE}`);
|
|
466
482
|
}
|
|
467
|
-
|
|
468
|
-
if (
|
|
469
|
-
|
|
470
|
-
|
|
483
|
+
// The non-portable half: auth headers, variable declarations, local-only.
|
|
484
|
+
if (manifest !== null && Object.keys(extEntry).length > 0) {
|
|
485
|
+
// Normalize each level: a parseable manifest can still carry a string or
|
|
486
|
+
// array where an object belongs, and mutating that would throw mid-run.
|
|
487
|
+
if (typeof manifest.extensions !== 'object' || manifest.extensions === null || Array.isArray(manifest.extensions)) {
|
|
488
|
+
manifest.extensions = {};
|
|
489
|
+
}
|
|
490
|
+
const ext = manifest.extensions;
|
|
491
|
+
if (typeof ext[HEXIS_EXTENSION_NS] !== 'object' || ext[HEXIS_EXTENSION_NS] === null || Array.isArray(ext[HEXIS_EXTENSION_NS])) {
|
|
492
|
+
ext[HEXIS_EXTENSION_NS] = {};
|
|
493
|
+
}
|
|
494
|
+
const ns = ext[HEXIS_EXTENSION_NS];
|
|
495
|
+
if (typeof ns.mcpServers !== 'object' || ns.mcpServers === null || Array.isArray(ns.mcpServers)) {
|
|
496
|
+
ns.mcpServers = {};
|
|
497
|
+
}
|
|
498
|
+
const extServers = ns.mcpServers;
|
|
499
|
+
if (!Object.prototype.hasOwnProperty.call(extServers, m.name)) {
|
|
500
|
+
extServers[m.name] = extEntry;
|
|
501
|
+
wroteManifest = true;
|
|
502
|
+
}
|
|
471
503
|
}
|
|
472
504
|
}
|
|
505
|
+
if (wroteMcp) {
|
|
506
|
+
branch.write(`${relPlugin}/${PLUGIN_MCP_FILE}`, `${JSON.stringify(mcp, null, 2)}\n`);
|
|
507
|
+
}
|
|
508
|
+
if (wroteManifest) {
|
|
509
|
+
// May supersede the bare manifest declared above — ops apply in order, so
|
|
510
|
+
// the extended content is what lands.
|
|
511
|
+
branch.write(`${relPlugin}/${PLUGIN_MANIFEST_FILE}`, `${JSON.stringify(manifest, null, 2)}\n`);
|
|
512
|
+
details.push(`${folderName}: wrote mcp-server declarations into ${PLUGIN_MANIFEST_FILE}`);
|
|
513
|
+
}
|
|
514
|
+
// Sources go LAST in declaration order, once everything they carried has
|
|
515
|
+
// been declared elsewhere — the same shape the in-place code used so a
|
|
516
|
+
// failure never stranded the non-portable half with no source to retry from.
|
|
517
|
+
for (const item of folded) {
|
|
518
|
+
branch.remove(item.rel);
|
|
519
|
+
details.push(`${folderName}: ${item.note} converted to an ${PLUGIN_MCP_FILE} entry`);
|
|
520
|
+
}
|
|
521
|
+
return wroteMcp || wroteManifest || folded.length > 0;
|
|
473
522
|
}
|
|
474
|
-
if (wroteMcp) {
|
|
475
|
-
branch.write(`${relPlugin}/${PLUGIN_MCP_FILE}`, `${JSON.stringify(mcp, null, 2)}\n`);
|
|
476
|
-
}
|
|
477
|
-
if (wroteManifest) {
|
|
478
|
-
// May supersede the bare manifest declared above — ops apply in order, so
|
|
479
|
-
// the extended content is what lands.
|
|
480
|
-
branch.write(`${relPlugin}/${PLUGIN_MANIFEST_FILE}`, `${JSON.stringify(manifest, null, 2)}\n`);
|
|
481
|
-
details.push(`${folderName}: wrote mcp-server declarations into ${PLUGIN_MANIFEST_FILE}`);
|
|
482
|
-
}
|
|
483
|
-
// Sources go LAST in declaration order, once everything they carried has
|
|
484
|
-
// been declared elsewhere — the same shape the in-place code used so a
|
|
485
|
-
// failure never stranded the non-portable half with no source to retry from.
|
|
486
|
-
for (const item of folded) {
|
|
487
|
-
branch.remove(item.rel);
|
|
488
|
-
details.push(`${folderName}: ${item.note} converted to an ${PLUGIN_MCP_FILE} entry`);
|
|
489
|
-
}
|
|
490
|
-
return wroteMcp || wroteManifest || folded.length > 0;
|
|
491
523
|
}
|
|
492
524
|
//# sourceMappingURL=groups-to-plugins.step.js.map
|