@bevel-software/platform-core-backend 0.34.0 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-guide/access-control.md +146 -300
- package/agent-guide/conventions.md +23 -25
- package/agent-guide/directory-structure.md +72 -120
- package/agent-guide/drafts-and-change-requests.md +92 -0
- package/agent-guide/for-git-users.md +47 -0
- package/agent-guide/glossary.md +36 -0
- package/agent-guide/how-agents-find-things.md +49 -0
- package/agent-guide/html-views.md +16 -11
- package/agent-guide/new-knowledge-base.md +9 -8
- package/agent-guide/onboarding.md +111 -0
- package/agent-guide/skills.md +67 -42
- package/agent-guide/start-here.md +66 -0
- package/agent-guide/tool-manuals.md +133 -154
- package/agent-guide/tools.md +67 -0
- package/agent-guide/where-a-new-file-goes.md +45 -28
- package/dist/core/catalog-cache-invalidation.d.ts +2 -2
- package/dist/core/catalog-cache-invalidation.d.ts.map +1 -1
- package/dist/core/compose-embed.d.ts +2 -2
- package/dist/core/compose-embed.d.ts.map +1 -1
- package/dist/core/compose-embed.js +1 -1
- package/dist/core/compose-embed.js.map +1 -1
- package/dist/core/core-ports.d.ts +19 -4
- package/dist/core/core-ports.d.ts.map +1 -1
- package/dist/core/core-ports.js.map +1 -1
- package/dist/core/create-core-server.d.ts.map +1 -1
- package/dist/core/create-core-server.js +27 -25
- package/dist/core/create-core-server.js.map +1 -1
- package/dist/core/create-core-services.d.ts +25 -13
- package/dist/core/create-core-services.d.ts.map +1 -1
- package/dist/core/create-core-services.js +75 -60
- package/dist/core/create-core-services.js.map +1 -1
- package/dist/core/lifecycle.d.ts +4 -4
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +5 -5
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core-config.d.ts +2 -2
- package/dist/core-config.js +3 -3
- package/dist/core-config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/modules/access/access-control.interface.d.ts +22 -0
- package/dist/modules/access/access-control.interface.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.d.ts +3 -1
- package/dist/modules/access/access-control.service.d.ts.map +1 -1
- package/dist/modules/access/access-control.service.js +76 -1
- package/dist/modules/access/access-control.service.js.map +1 -1
- package/dist/modules/access/access-declarations.d.ts +2 -2
- package/dist/modules/access/access-declarations.d.ts.map +1 -1
- package/dist/modules/access/access-declarations.js +2 -2
- package/dist/modules/access/access-declarations.js.map +1 -1
- package/dist/modules/access/access-mutation.service.d.ts +2 -2
- package/dist/modules/access/access-mutation.service.d.ts.map +1 -1
- package/dist/modules/access/access-mutation.service.js +2 -2
- package/dist/modules/access/access-mutation.service.js.map +1 -1
- package/dist/modules/access/access-requests.routes.d.ts +2 -2
- package/dist/modules/access/access-requests.routes.d.ts.map +1 -1
- package/dist/modules/access/access-requests.routes.js +5 -5
- package/dist/modules/access/access-requests.routes.js.map +1 -1
- package/dist/modules/access/access-requests.service.d.ts +2 -2
- package/dist/modules/access/access-requests.service.d.ts.map +1 -1
- package/dist/modules/access/access-requests.service.js +11 -11
- package/dist/modules/access/access-requests.service.js.map +1 -1
- package/dist/modules/access/access.routes.d.ts +2 -2
- package/dist/modules/access/access.routes.d.ts.map +1 -1
- package/dist/modules/access/access.routes.js +32 -13
- package/dist/modules/access/access.routes.js.map +1 -1
- package/dist/modules/access/admin-locked-commit.d.ts +5 -5
- package/dist/modules/access/admin-locked-commit.d.ts.map +1 -1
- package/dist/modules/access/admin-locked-commit.js +7 -7
- package/dist/modules/access/admin-locked-commit.js.map +1 -1
- package/dist/modules/access/admin-route-helpers.d.ts +1 -1
- package/dist/modules/access/admin-route-helpers.js +5 -5
- package/dist/modules/access/admin-route-helpers.js.map +1 -1
- package/dist/modules/access/change-read-gate.d.ts +1 -1
- package/dist/modules/access/change-read-gate.js +1 -1
- package/dist/modules/access/groups-admin.service.d.ts +7 -7
- package/dist/modules/access/groups-admin.service.d.ts.map +1 -1
- package/dist/modules/access/groups-admin.service.js +6 -6
- package/dist/modules/access/groups-admin.service.js.map +1 -1
- package/dist/modules/access/index.d.ts +1 -1
- package/dist/modules/access/index.d.ts.map +1 -1
- package/dist/modules/access/reference-scan.d.ts +1 -1
- package/dist/modules/access/roles-admin.service.d.ts +7 -7
- package/dist/modules/access/roles-admin.service.d.ts.map +1 -1
- package/dist/modules/access/roles-admin.service.js +8 -8
- package/dist/modules/access/roles-admin.service.js.map +1 -1
- package/dist/modules/access/synced-groups-committer.d.ts +4 -4
- package/dist/modules/access/synced-groups-committer.d.ts.map +1 -1
- package/dist/modules/access/synced-groups-committer.js +7 -7
- package/dist/modules/access/synced-groups-committer.js.map +1 -1
- package/dist/modules/access/user-access-removal.service.d.ts +6 -6
- package/dist/modules/access/user-access-removal.service.d.ts.map +1 -1
- package/dist/modules/access/user-access-removal.service.js +4 -4
- package/dist/modules/access/user-access-removal.service.js.map +1 -1
- package/dist/modules/access-model/access-errors.d.ts +4 -4
- package/dist/modules/access-model/access-errors.d.ts.map +1 -1
- package/dist/modules/access-model/access-errors.js +4 -4
- package/dist/modules/access-model/access-errors.js.map +1 -1
- package/dist/modules/access-model/access-grammar.d.ts +1 -1
- package/dist/modules/access-model/access-grammar.js +4 -4
- package/dist/modules/access-model/change-gate.d.ts +1 -1
- package/dist/modules/access-model/change-gate.js +1 -1
- package/dist/modules/access-model/roles-yaml-guard.d.ts +4 -4
- package/dist/modules/access-model/roles-yaml-guard.d.ts.map +1 -1
- package/dist/modules/access-model/roles-yaml-guard.js +4 -4
- package/dist/modules/access-model/roles-yaml-guard.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.d.ts +63 -18
- package/dist/modules/agent-guide/agent-guide.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.js +144 -30
- package/dist/modules/agent-guide/agent-guide.js.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.d.ts +6 -2
- package/dist/modules/agent-guide/agent-guide.tools.d.ts.map +1 -1
- package/dist/modules/agent-guide/agent-guide.tools.js +45 -31
- package/dist/modules/agent-guide/agent-guide.tools.js.map +1 -1
- package/dist/modules/agent-guide/guide-budget.d.ts +51 -0
- package/dist/modules/agent-guide/guide-budget.d.ts.map +1 -0
- package/dist/modules/agent-guide/guide-budget.js +71 -0
- package/dist/modules/agent-guide/guide-budget.js.map +1 -0
- package/dist/modules/agent-guide/index.d.ts +2 -1
- package/dist/modules/agent-guide/index.d.ts.map +1 -1
- package/dist/modules/agent-guide/index.js +2 -1
- package/dist/modules/agent-guide/index.js.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts +12 -5
- package/dist/modules/agent-instructions/agent-instructions.routes.d.ts.map +1 -1
- package/dist/modules/agent-instructions/agent-instructions.routes.js +13 -6
- package/dist/modules/agent-instructions/agent-instructions.routes.js.map +1 -1
- package/dist/modules/agent-instructions/compose.d.ts +15 -8
- package/dist/modules/agent-instructions/compose.d.ts.map +1 -1
- package/dist/modules/agent-instructions/compose.js +28 -10
- package/dist/modules/agent-instructions/compose.js.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.d.ts +14 -6
- package/dist/modules/agent-instructions/shared-file-rules.d.ts.map +1 -1
- package/dist/modules/agent-instructions/shared-file-rules.js +60 -18
- package/dist/modules/agent-instructions/shared-file-rules.js.map +1 -1
- package/dist/modules/auth/account-erasure.service.d.ts +36 -7
- package/dist/modules/auth/account-erasure.service.d.ts.map +1 -1
- package/dist/modules/auth/account-erasure.service.js +30 -10
- package/dist/modules/auth/account-erasure.service.js.map +1 -1
- package/dist/modules/auth/account-hooks.d.ts +20 -0
- package/dist/modules/auth/account-hooks.d.ts.map +1 -1
- package/dist/modules/auth/account-hooks.js +10 -0
- package/dist/modules/auth/account-hooks.js.map +1 -1
- package/dist/modules/auth/account-switch-lock.js +2 -2
- package/dist/modules/auth/account-switch-lock.js.map +1 -1
- package/dist/modules/auth/account.routes.d.ts +7 -2
- package/dist/modules/auth/account.routes.d.ts.map +1 -1
- package/dist/modules/auth/account.routes.js +23 -4
- package/dist/modules/auth/account.routes.js.map +1 -1
- package/dist/modules/auth/auth.service.d.ts +1 -1
- package/dist/modules/auth/auth.service.js +4 -4
- package/dist/modules/auth/auth.service.js.map +1 -1
- package/dist/modules/auth/index.d.ts +1 -0
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/code-mode/code-mode.tool.js +2 -2
- package/dist/modules/code-mode/code-mode.tool.js.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.d.ts +0 -12
- package/dist/modules/connection-probe/connection-probe.service.d.ts.map +1 -1
- package/dist/modules/connection-probe/connection-probe.service.js +1 -38
- package/dist/modules/connection-probe/connection-probe.service.js.map +1 -1
- package/dist/modules/database/core-schema.js +2 -2
- package/dist/modules/database/core-schema.js.map +1 -1
- package/dist/modules/diff/diff.routes.d.ts +3 -3
- package/dist/modules/diff/diff.routes.d.ts.map +1 -1
- package/dist/modules/diff/diff.routes.js +7 -7
- package/dist/modules/diff/diff.routes.js.map +1 -1
- package/dist/modules/embed/embed.routes.js +1 -1
- package/dist/modules/embed/embed.routes.js.map +1 -1
- package/dist/modules/embed/embed.service.d.ts +4 -4
- package/dist/modules/embed/embed.service.d.ts.map +1 -1
- package/dist/modules/embed/embed.service.js +18 -18
- package/dist/modules/embed/embed.service.js.map +1 -1
- package/dist/modules/kb-fs/branch-name.js +8 -8
- package/dist/modules/kb-fs/branch-name.js.map +1 -1
- package/dist/modules/kb-fs/file-change-notifier.d.ts +2 -2
- package/dist/modules/kb-fs/locking-filesystem.d.ts +9 -9
- package/dist/modules/kb-fs/locking-filesystem.d.ts.map +1 -1
- package/dist/modules/kb-fs/locking-filesystem.js +27 -27
- package/dist/modules/kb-fs/locking-filesystem.js.map +1 -1
- package/dist/modules/kb-fs/repo-path.js +5 -5
- package/dist/modules/kb-fs/repo-path.js.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.d.ts +2 -2
- package/dist/modules/kb-fs/tmp-ref.d.ts.map +1 -1
- package/dist/modules/kb-fs/tmp-ref.js +2 -2
- package/dist/modules/kb-fs/tmp-ref.js.map +1 -1
- package/dist/modules/kb-sync/index.d.ts +1 -1
- package/dist/modules/kb-sync/index.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.interface.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.interface.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.d.ts +3 -3
- package/dist/modules/kb-sync/kb-sync.service.d.ts.map +1 -1
- package/dist/modules/kb-sync/kb-sync.service.js +10 -10
- package/dist/modules/kb-sync/kb-sync.service.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +11 -4
- package/dist/modules/mcp/mcp.service.d.ts.map +1 -1
- package/dist/modules/mcp/mcp.service.js +80 -53
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/onboarding/onboarding.contract.d.ts +1 -1
- package/dist/modules/onboarding/onboarding.routes.js +2 -2
- package/dist/modules/onboarding/onboarding.routes.js.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.d.ts +4 -4
- package/dist/modules/onboarding/starter-pack.service.d.ts.map +1 -1
- package/dist/modules/onboarding/starter-pack.service.js +4 -4
- package/dist/modules/onboarding/starter-pack.service.js.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.d.ts +2 -2
- package/dist/modules/plugins/join-request-jobs.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-request-jobs.service.js +7 -7
- package/dist/modules/plugins/join-request-jobs.service.js.map +1 -1
- package/dist/modules/plugins/join-requests.service.d.ts +3 -3
- package/dist/modules/plugins/join-requests.service.d.ts.map +1 -1
- package/dist/modules/plugins/join-requests.service.js +5 -5
- package/dist/modules/plugins/join-requests.service.js.map +1 -1
- package/dist/modules/plugins/plugin-rename.service.js +1 -1
- package/dist/modules/plugins/plugin-rename.service.js.map +1 -1
- package/dist/modules/plugins/plugins.routes.d.ts +2 -2
- package/dist/modules/plugins/plugins.routes.d.ts.map +1 -1
- package/dist/modules/plugins/plugins.routes.js +8 -8
- package/dist/modules/plugins/plugins.routes.js.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts +87 -2
- package/dist/modules/secrets-vault/db-secrets-vault.service.d.ts.map +1 -1
- package/dist/modules/secrets-vault/db-secrets-vault.service.js +635 -74
- package/dist/modules/secrets-vault/db-secrets-vault.service.js.map +1 -1
- package/dist/modules/secrets-vault/index.d.ts +3 -2
- package/dist/modules/secrets-vault/index.d.ts.map +1 -1
- package/dist/modules/secrets-vault/index.js +2 -1
- package/dist/modules/secrets-vault/index.js.map +1 -1
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts +36 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.d.ts.map +1 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js +37 -0
- package/dist/modules/secrets-vault/managed-sign-in-erasure.js.map +1 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts +205 -11
- package/dist/modules/secrets-vault/secrets-vault.contract.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.contract.js +27 -0
- package/dist/modules/secrets-vault/secrets-vault.contract.js.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts +7 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.d.ts.map +1 -1
- package/dist/modules/secrets-vault/secrets-vault.routes.js +206 -45
- package/dist/modules/secrets-vault/secrets-vault.routes.js.map +1 -1
- package/dist/modules/settings/connection-check.js +1 -1
- package/dist/modules/settings/connection-check.js.map +1 -1
- package/dist/modules/settings/deployment-settings.service.js +1 -1
- package/dist/modules/settings/git-root-folders.js +1 -1
- package/dist/modules/settings/git-root-folders.js.map +1 -1
- package/dist/modules/settings/oidc-check.d.ts.map +1 -1
- package/dist/modules/settings/oidc-check.js +5 -17
- package/dist/modules/settings/oidc-check.js.map +1 -1
- package/dist/modules/settings/setup.routes.d.ts +1 -1
- package/dist/modules/settings/setup.routes.js +1 -1
- package/dist/modules/skills/pending-skills.service.d.ts +3 -3
- package/dist/modules/skills/pending-skills.service.d.ts.map +1 -1
- package/dist/modules/skills/pending-skills.service.js +4 -4
- package/dist/modules/skills/pending-skills.service.js.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.d.ts +2 -2
- package/dist/modules/skills/skill-access-requests.routes.d.ts.map +1 -1
- package/dist/modules/skills/skill-access-requests.routes.js +5 -5
- package/dist/modules/skills/skill-access-requests.routes.js.map +1 -1
- package/dist/modules/skills/skills.tools.js +1 -1
- package/dist/modules/skills/skills.tools.js.map +1 -1
- package/dist/modules/tool-helpers/tool-context.d.ts +4 -4
- package/dist/modules/tool-helpers/tool-context.d.ts.map +1 -1
- package/dist/modules/tool-helpers/tool-context.js +2 -2
- package/dist/modules/tool-helpers/tool-context.js.map +1 -1
- package/dist/modules/tool-helpers/tool-def.js +1 -1
- package/dist/modules/tool-helpers/tool-def.js.map +1 -1
- package/dist/modules/tool-helpers/tool-handler.js +2 -2
- package/dist/modules/tool-helpers/tool-handler.js.map +1 -1
- package/dist/modules/tool-helpers/tool.contract.d.ts +4 -4
- package/dist/modules/tool-helpers/tool.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts +7 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.d.ts.map +1 -1
- package/dist/modules/tool-manuals/mcp-json-discovery.js +69 -38
- package/dist/modules/tool-manuals/mcp-json-discovery.js.map +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js +1 -1
- package/dist/modules/tool-manuals/mcp-server-edit.service.js.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.d.ts +3 -3
- package/dist/modules/tool-manuals/pending-tools.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/pending-tools.service.js +4 -4
- package/dist/modules/tool-manuals/pending-tools.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js +1 -1
- package/dist/modules/tool-manuals/tool-delete.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts +70 -3
- package/dist/modules/tool-manuals/tool-manuals.contract.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts +18 -8
- package/dist/modules/tool-manuals/tool-manuals.service.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.service.js +166 -49
- package/dist/modules/tool-manuals/tool-manuals.service.js.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts +11 -2
- package/dist/modules/tool-manuals/tool-manuals.tools.d.ts.map +1 -1
- package/dist/modules/tool-manuals/tool-manuals.tools.js +66 -24
- package/dist/modules/tool-manuals/tool-manuals.tools.js.map +1 -1
- package/dist/modules/version-control/agent-tools/change-request-read-shape.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read-shape.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-read.tools.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.js +2 -2
- package/dist/modules/version-control/agent-tools/change-request-read.tools.js.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.d.ts.map +1 -0
- package/dist/modules/version-control/agent-tools/change-request-summary.js.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.d.ts → version-control/agent-tools/version-control.tools.d.ts} +4 -4
- package/dist/modules/version-control/agent-tools/version-control.tools.d.ts.map +1 -0
- package/dist/modules/{workflow/agent-tools/workflow.tools.js → version-control/agent-tools/version-control.tools.js} +53 -49
- package/dist/modules/version-control/agent-tools/version-control.tools.js.map +1 -0
- package/dist/modules/{workflow → version-control}/change-request-hooks.d.ts +1 -1
- package/dist/modules/version-control/change-request-hooks.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-hooks.js.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/approval-lock.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.interface.d.ts → version-control/change-request-review/change-request-review.interface.d.ts} +2 -2
- package/dist/modules/version-control/change-request-review/change-request-review.interface.d.ts.map +1 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js +2 -0
- package/dist/modules/version-control/change-request-review/change-request-review.interface.js.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.d.ts → version-control/change-request-review/change-request-review.service.d.ts} +3 -3
- package/dist/modules/version-control/change-request-review/change-request-review.service.d.ts.map +1 -0
- package/dist/modules/{workflow/review-workflow/review-workflow.service.js → version-control/change-request-review/change-request-review.service.js} +26 -26
- package/dist/modules/version-control/change-request-review/change-request-review.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.d.ts +8 -8
- package/dist/modules/version-control/event-bus.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/event-bus.js +4 -4
- package/dist/modules/version-control/event-bus.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events-delivery.d.ts +4 -4
- package/dist/modules/version-control/events-delivery.d.ts.map +1 -0
- package/dist/modules/version-control/events-delivery.js.map +1 -0
- package/dist/modules/{workflow → version-control}/events.routes.d.ts +4 -4
- package/dist/modules/version-control/events.routes.d.ts.map +1 -0
- package/dist/modules/version-control/events.routes.js.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.d.ts +2 -2
- package/dist/modules/version-control/file-lock.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/file-lock.service.js +6 -6
- package/dist/modules/version-control/file-lock.service.js.map +1 -0
- package/dist/modules/version-control/git/change-request-link.d.ts.map +1 -0
- package/dist/modules/version-control/git/change-request-link.js.map +1 -0
- package/dist/modules/version-control/git/git-version.d.ts.map +1 -0
- package/dist/modules/version-control/git/git-version.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.d.ts +8 -8
- package/dist/modules/version-control/git/git.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/git.service.js +53 -53
- package/dist/modules/version-control/git/git.service.js.map +1 -0
- package/dist/modules/version-control/git/merge-commit.d.ts.map +1 -0
- package/dist/modules/version-control/git/merge-commit.js.map +1 -0
- package/dist/modules/version-control/git/node-git-runner.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/node-git-runner.js +1 -1
- package/dist/modules/version-control/git/node-git-runner.js.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.d.ts +5 -5
- package/dist/modules/version-control/git/pull-request.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/git/pull-request.service.js +10 -10
- package/dist/modules/version-control/git/pull-request.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/index.d.ts +6 -5
- package/dist/modules/version-control/index.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/index.js +3 -2
- package/dist/modules/version-control/index.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.d.ts +2 -2
- package/dist/modules/version-control/pending-commits.service.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.service.js +2 -2
- package/dist/modules/version-control/pending-commits.service.js.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.d.ts +5 -5
- package/dist/modules/version-control/pending-commits.worker.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/pending-commits.worker.js +3 -3
- package/dist/modules/version-control/pending-commits.worker.js.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.d.ts +2 -2
- package/dist/modules/version-control/read-on-branch.d.ts.map +1 -0
- package/dist/modules/{workflow → version-control}/read-on-branch.js +2 -2
- package/dist/modules/version-control/read-on-branch.js.map +1 -0
- package/dist/modules/version-control/recovery-bot.d.ts.map +1 -0
- package/dist/modules/version-control/recovery-bot.js.map +1 -0
- package/dist/modules/version-control/sanitize-error.d.ts.map +1 -0
- package/dist/modules/version-control/sanitize-error.js.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.d.ts → version-control/version-control-hooks.d.ts} +4 -4
- package/dist/modules/version-control/version-control-hooks.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow-hooks.js → version-control/version-control-hooks.js} +3 -3
- package/dist/modules/version-control/version-control-hooks.js.map +1 -0
- package/dist/modules/{workflow/workflow.routes.d.ts → version-control/version-control.routes.d.ts} +6 -5
- package/dist/modules/version-control/version-control.routes.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.routes.js → version-control/version-control.routes.js} +61 -60
- package/dist/modules/version-control/version-control.routes.js.map +1 -0
- package/dist/modules/{workflow/workflow.service.d.ts → version-control/version-control.service.d.ts} +26 -31
- package/dist/modules/version-control/version-control.service.d.ts.map +1 -0
- package/dist/modules/{workflow/workflow.service.js → version-control/version-control.service.js} +89 -94
- package/dist/modules/version-control/version-control.service.js.map +1 -0
- package/dist/modules/workspace/agent-access.gate.d.ts +6 -6
- package/dist/modules/workspace/agent-access.gate.d.ts.map +1 -1
- package/dist/modules/workspace/agent-access.gate.js +2 -2
- package/dist/modules/workspace/agent-access.gate.js.map +1 -1
- package/dist/modules/workspace/git-internals.middleware.d.ts +1 -1
- package/dist/modules/workspace/git-internals.middleware.js +2 -2
- package/dist/modules/workspace/kb-repository.js +1 -1
- package/dist/modules/workspace/kb-repository.js.map +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts +1 -1
- package/dist/modules/workspace/startup/kb-git.d.ts.map +1 -1
- package/dist/modules/workspace/startup/kb-git.js +1 -1
- package/dist/modules/workspace/startup/kb-git.js.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/seed-tree.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js +1 -1
- package/dist/modules/workspace/startup/steps/seed-tree.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-files.step.js +2 -2
- package/dist/modules/workspace/startup/steps/template-files.step.js.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.d.ts +17 -4
- package/dist/modules/workspace/startup/steps/template-source.d.ts.map +1 -1
- package/dist/modules/workspace/startup/steps/template-source.js +8 -5
- package/dist/modules/workspace/startup/steps/template-source.js.map +1 -1
- package/dist/modules/workspace/workspace-tmp.js +3 -3
- package/dist/modules/workspace/workspace-tmp.js.map +1 -1
- package/dist/modules/workspace/workspace.routes.d.ts +4 -4
- package/dist/modules/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.routes.js +22 -22
- package/dist/modules/workspace/workspace.routes.js.map +1 -1
- package/dist/modules/workspace/workspace.service.d.ts +6 -6
- package/dist/modules/workspace/workspace.service.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.service.js +11 -11
- package/dist/modules/workspace/workspace.service.js.map +1 -1
- package/dist/modules/workspace/workspace.tools.d.ts +5 -3
- package/dist/modules/workspace/workspace.tools.d.ts.map +1 -1
- package/dist/modules/workspace/workspace.tools.js +85 -30
- package/dist/modules/workspace/workspace.tools.js.map +1 -1
- package/dist/shared/canonical-file-identity.d.ts +2 -2
- package/dist/shared/canonical-file-identity.js +5 -5
- package/dist/shared/canonical-file-identity.js.map +1 -1
- package/dist/shared/domain-errors.d.ts +39 -39
- package/dist/shared/domain-errors.d.ts.map +1 -1
- package/dist/shared/domain-errors.js +44 -44
- package/dist/shared/domain-errors.js.map +1 -1
- package/dist/shared/git.contract.d.ts +1 -1
- package/dist/shared/git.contract.js +1 -1
- package/dist/shared/http-errors.d.ts +3 -3
- package/dist/shared/http-errors.d.ts.map +1 -1
- package/dist/shared/http-errors.js +1 -1
- package/dist/shared/http-errors.js.map +1 -1
- package/dist/shared/oauth-token-error.d.ts +23 -0
- package/dist/shared/oauth-token-error.d.ts.map +1 -0
- package/dist/shared/oauth-token-error.js +47 -0
- package/dist/shared/oauth-token-error.js.map +1 -0
- package/dist/shared/pending-proposals.d.ts +3 -3
- package/dist/shared/pending-proposals.d.ts.map +1 -1
- package/dist/shared/pending-proposals.js +2 -2
- package/dist/shared/pending-proposals.js.map +1 -1
- package/dist/shared/read-capped.d.ts +19 -0
- package/dist/shared/read-capped.d.ts.map +1 -0
- package/dist/shared/read-capped.js +45 -0
- package/dist/shared/read-capped.js.map +1 -0
- package/dist/tenancy/static-tenant-source.js +1 -1
- package/dist/tenancy/static-tenant-source.js.map +1 -1
- package/migrations/0012_agent_audit.sql +40 -40
- package/migrations/0013_agent_identity_and_key_soft_delete.sql +29 -29
- package/migrations/meta/0012_snapshot.json +2246 -2246
- package/migrations/meta/0013_snapshot.json +2258 -2258
- package/package.json +5 -4
- package/src/__tests__/account-admin.ts +27 -0
- package/src/__tests__/hexis-catalog.ts +144 -0
- package/src/__tests__/kb-context.ts +30 -30
- package/src/__tests__/kb-layout-config.test.ts +21 -0
- package/src/__tests__/open-change-gate.ts +1 -1
- package/src/__tests__/real-disk.ts +21 -0
- package/src/__tests__/tokens.ts +19 -0
- package/src/__tests__/tool-handler.ts +15 -0
- package/src/__tests__/tool-manuals.ts +32 -0
- package/src/__tests__/tool-wiring.ts +31 -0
- package/src/__tests__/workspace-service.ts +1 -1
- package/src/core/__tests__/catalog-cache-invalidation.test.ts +3 -3
- package/src/core/__tests__/compose-embed.test.ts +1 -1
- package/src/core/__tests__/damaged-document.tools.test.ts +3 -3
- package/src/core/__tests__/erasure-slices-wired-once.test.ts +46 -0
- package/src/core/__tests__/gated-boot.test.ts +2 -2
- package/src/core/__tests__/lifecycle.test.ts +9 -9
- package/src/core/__tests__/oauth-sign-in-real-file.test.ts +179 -0
- package/src/core/catalog-cache-invalidation.ts +2 -2
- package/src/core/compose-embed.ts +3 -3
- package/src/core/core-ports.ts +19 -4
- package/src/core/create-core-server.ts +40 -26
- package/src/core/create-core-services.ts +92 -66
- package/src/core/lifecycle.ts +9 -9
- package/src/core-config.ts +3 -3
- package/src/index.ts +5 -5
- package/src/modules/access/__tests__/access-control.admin-root-floor.test.ts +4 -4
- package/src/modules/access/__tests__/access-own-read-grant.test.ts +14 -14
- package/src/modules/access/__tests__/access-requests.routes.test.ts +20 -20
- package/src/modules/access/__tests__/access.routes.admins.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.batch.test.ts +4 -4
- package/src/modules/access/__tests__/access.routes.folder-governs.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.group-grant.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.overrides.test.ts +5 -5
- package/src/modules/access/__tests__/access.routes.proposal-branch.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.prospective.test.ts +54 -14
- package/src/modules/access/__tests__/access.routes.revoke.test.ts +6 -6
- package/src/modules/access/__tests__/access.routes.unknown-email.test.ts +6 -6
- package/src/modules/access/__tests__/admin-locked-commit.test.ts +6 -6
- package/src/modules/access/__tests__/admin-route-helpers.test.ts +5 -5
- package/src/modules/access/__tests__/groups-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/holder-changes.test.ts +127 -0
- package/src/modules/access/__tests__/roles-admin.security.test.ts +14 -13
- package/src/modules/access/__tests__/roles-admin.service.test.ts +27 -27
- package/src/modules/access/__tests__/roles-capabilities.test.ts +19 -19
- package/src/modules/access/__tests__/roles.routes.test.ts +6 -6
- package/src/modules/access/__tests__/synced-groups-committer.test.ts +13 -13
- package/src/modules/access/__tests__/user-access-removal.service.test.ts +29 -29
- package/src/modules/access/access-control.interface.ts +26 -0
- package/src/modules/access/access-control.service.ts +93 -1
- package/src/modules/access/access-declarations.ts +2 -2
- package/src/modules/access/access-mutation.service.ts +2 -2
- package/src/modules/access/access-requests.routes.ts +7 -7
- package/src/modules/access/access-requests.service.ts +13 -13
- package/src/modules/access/access.routes.ts +34 -15
- package/src/modules/access/admin-locked-commit.ts +11 -11
- package/src/modules/access/admin-route-helpers.ts +5 -5
- package/src/modules/access/change-read-gate.ts +1 -1
- package/src/modules/access/groups-admin.service.ts +7 -7
- package/src/modules/access/index.ts +1 -1
- package/src/modules/access/reference-scan.ts +1 -1
- package/src/modules/access/roles-admin.service.ts +9 -9
- package/src/modules/access/synced-groups-committer.ts +11 -11
- package/src/modules/access/user-access-removal.service.ts +7 -7
- package/src/modules/access-model/__tests__/access-grammar.test.ts +2 -2
- package/src/modules/access-model/access-errors.ts +4 -4
- package/src/modules/access-model/access-grammar.ts +4 -4
- package/src/modules/access-model/change-gate.ts +1 -1
- package/src/modules/access-model/roles-yaml-guard.ts +4 -4
- package/src/modules/agent-guide/__tests__/agent-guide.test.ts +98 -29
- package/src/modules/agent-guide/__tests__/agent-guide.tools.test.ts +39 -12
- package/src/modules/agent-guide/__tests__/guide-budget.test.ts +95 -0
- package/src/modules/agent-guide/__tests__/guide-eval.test.ts +182 -0
- package/src/modules/agent-guide/__tests__/guide-matches-code.test.ts +263 -0
- package/src/modules/agent-guide/__tests__/tool-surface.json +514 -0
- package/src/modules/agent-guide/__tests__/tool-surface.test.ts +75 -0
- package/src/modules/agent-guide/agent-guide.tools.ts +49 -31
- package/src/modules/agent-guide/agent-guide.ts +165 -32
- package/src/modules/agent-guide/guide-budget.ts +77 -0
- package/src/modules/agent-guide/index.ts +12 -0
- package/src/modules/agent-instructions/__tests__/agent-instructions.route.test.ts +4 -5
- package/src/modules/agent-instructions/__tests__/compose.test.ts +1 -1
- package/src/modules/agent-instructions/__tests__/shared-file-rules.test.ts +117 -11
- package/src/modules/agent-instructions/agent-instructions.routes.ts +12 -5
- package/src/modules/agent-instructions/compose.ts +28 -9
- package/src/modules/agent-instructions/shared-file-rules.ts +62 -18
- package/src/modules/agent-scope/__tests__/agent-surfaces.connect-as.test.ts +1 -1
- package/src/modules/audit/__tests__/agent-rest-audit.middleware.test.ts +113 -113
- package/src/modules/audit/__tests__/event-classifier.test.ts +121 -121
- package/src/modules/audit/event-classifier.ts +155 -155
- package/src/modules/auth/__tests__/account-deactivation.test.ts +1 -1
- package/src/modules/auth/__tests__/account-erasure.approval-gate.test.ts +4 -4
- package/src/modules/auth/__tests__/account-erasure.participants.test.ts +56 -0
- package/src/modules/auth/__tests__/account-switch-lock.pg.test.ts +2 -2
- package/src/modules/auth/__tests__/account-switch-lock.test.ts +2 -2
- package/src/modules/auth/__tests__/account.routes.test.ts +73 -11
- package/src/modules/auth/__tests__/auth.service.test.ts +1 -1
- package/src/modules/auth/account-erasure.service.ts +27 -9
- package/src/modules/auth/account-hooks.ts +34 -0
- package/src/modules/auth/account-switch-lock.ts +2 -2
- package/src/modules/auth/account.routes.ts +23 -5
- package/src/modules/auth/auth.service.ts +4 -4
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/code-mode/code-mode.tool.ts +2 -2
- package/src/modules/connection-probe/__tests__/connection-probe.service.test.ts +5 -24
- package/src/modules/connection-probe/connection-probe.service.ts +1 -34
- package/src/modules/database/__tests__/advisory-lock.test.ts +169 -169
- package/src/modules/database/__tests__/migrations-unqualified.test.ts +32 -32
- package/src/modules/database/core-schema.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.read-gate.test.ts +2 -2
- package/src/modules/diff/__tests__/diff.routes.rejectPathsLocked.test.ts +12 -12
- package/src/modules/diff/diff.routes.ts +8 -8
- package/src/modules/embed/__tests__/embed.service.lock.test.ts +7 -7
- package/src/modules/embed/__tests__/embed.service.test.ts +42 -42
- package/src/modules/embed/__tests__/embed.tools.test.ts +1 -1
- package/src/modules/embed/embed.routes.ts +1 -1
- package/src/modules/embed/embed.service.ts +17 -17
- package/src/modules/kb-fs/__tests__/branch-name.test.ts +2 -2
- package/src/modules/kb-fs/__tests__/locking-filesystem.test.ts +260 -260
- package/src/modules/kb-fs/__tests__/move-with-edits.test.ts +34 -34
- package/src/modules/kb-fs/__tests__/repo-path.test.ts +8 -8
- package/src/modules/kb-fs/branch-name.ts +8 -8
- package/src/modules/kb-fs/file-change-notifier.ts +2 -2
- package/src/modules/kb-fs/locking-filesystem.ts +30 -30
- package/src/modules/kb-fs/repo-path.ts +5 -5
- package/src/modules/kb-fs/tmp-ref.ts +3 -3
- package/src/modules/kb-sync/__tests__/kb-sync.service.test.ts +36 -36
- package/src/modules/kb-sync/index.ts +1 -1
- package/src/modules/kb-sync/kb-sync.interface.ts +3 -3
- package/src/modules/kb-sync/kb-sync.service.ts +9 -9
- package/src/modules/marketplace/__tests__/github-facade.test.ts +1 -1
- package/src/modules/marketplace/__tests__/marketplace-git.test.ts +1 -1
- package/src/modules/mcp/__tests__/mcp-proxy-helpers.test.ts +4 -2
- package/src/modules/mcp/__tests__/mcp.e2e.test.ts +69 -8
- package/src/modules/mcp/__tests__/mcp.service.test.ts +91 -13
- package/src/modules/mcp/__tests__/read-only-hint.pg.test.ts +194 -0
- package/src/modules/mcp/mcp.service.ts +93 -62
- package/src/modules/onboarding/__tests__/starter-pack.service.test.ts +55 -55
- package/src/modules/onboarding/onboarding.contract.ts +1 -1
- package/src/modules/onboarding/onboarding.routes.ts +2 -2
- package/src/modules/onboarding/starter-pack.service.ts +6 -6
- package/src/modules/plugins/__tests__/bundle-dialect.e2e.test.ts +1 -1
- package/src/modules/plugins/__tests__/compile-marketplace.test.ts +1 -1
- package/src/modules/plugins/__tests__/join-request-jobs.service.test.ts +43 -43
- package/src/modules/plugins/__tests__/join-requests.service.test.ts +19 -19
- package/src/modules/plugins/__tests__/join-requests.settlement.test.ts +26 -26
- package/src/modules/plugins/__tests__/plugins.routes.test.ts +25 -25
- package/src/modules/plugins/join-request-jobs.service.ts +10 -10
- package/src/modules/plugins/join-requests.service.ts +4 -4
- package/src/modules/plugins/plugin-rename.service.ts +1 -1
- package/src/modules/plugins/plugins.routes.ts +9 -9
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.managed.test.ts +773 -0
- package/src/modules/secrets-vault/__tests__/db-secrets-vault.oauth.test.ts +458 -4
- package/src/modules/secrets-vault/__tests__/managed-sign-in.route.test.ts +351 -0
- package/src/modules/secrets-vault/__tests__/oauth-live-declaration.route.test.ts +218 -0
- package/src/modules/secrets-vault/__tests__/oauth-return-to.route.test.ts +39 -6
- package/src/modules/secrets-vault/db-secrets-vault.service.ts +728 -118
- package/src/modules/secrets-vault/index.ts +8 -1
- package/src/modules/secrets-vault/managed-sign-in-erasure.ts +41 -0
- package/src/modules/secrets-vault/secrets-variable-loader.ts +134 -134
- package/src/modules/secrets-vault/secrets-vault.contract.ts +213 -11
- package/src/modules/secrets-vault/secrets-vault.routes.ts +244 -45
- package/src/modules/settings/__tests__/repository-source.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.layout-phase.test.ts +1 -1
- package/src/modules/settings/__tests__/setup.routes.managed-phase.test.ts +1 -1
- package/src/modules/settings/connection-check.ts +1 -1
- package/src/modules/settings/deployment-settings.service.ts +1 -1
- package/src/modules/settings/git-root-folders.ts +1 -1
- package/src/modules/settings/oidc-check.ts +5 -18
- package/src/modules/settings/setup.routes.ts +1 -1
- package/src/modules/skills/__tests__/allowed-tools-warn.tools.test.ts +3 -3
- package/src/modules/skills/__tests__/branch-skills.tools.test.ts +1 -1
- package/src/modules/skills/__tests__/pending-skills.service.test.ts +8 -8
- package/src/modules/skills/__tests__/skill-access-requests.routes.test.ts +18 -18
- package/src/modules/skills/__tests__/skills.service.test.ts +3 -3
- package/src/modules/skills/pending-skills.service.ts +3 -3
- package/src/modules/skills/skill-access-requests.routes.ts +7 -7
- package/src/modules/skills/skills.tools.ts +1 -1
- package/src/modules/tool-helpers/__tests__/agent-roles-write.test.ts +22 -14
- package/src/modules/tool-helpers/__tests__/branch-declaration.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/can-write.tools.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/phase4-tools.test.ts +4 -4
- package/src/modules/tool-helpers/__tests__/route-tool-schemas.catalog.test.ts +38 -0
- package/src/modules/tool-helpers/__tests__/tools-surface.test.ts +3 -3
- package/src/modules/tool-helpers/__tests__/validate-token.test.ts +1 -1
- package/src/modules/tool-helpers/tool-context.ts +6 -6
- package/src/modules/tool-helpers/tool-def.ts +1 -1
- package/src/modules/tool-helpers/tool-handler.ts +2 -2
- package/src/modules/tool-helpers/tool.contract.ts +4 -4
- package/src/modules/tool-manuals/__tests__/pending-tools.service.test.ts +9 -9
- package/src/modules/tool-manuals/__tests__/tool-manuals.managed-sign-in.test.ts +89 -0
- package/src/modules/tool-manuals/__tests__/tool-manuals.mcp-oauth.test.ts +197 -11
- package/src/modules/tool-manuals/__tests__/tool-manuals.restart.test.ts +1 -1
- package/src/modules/tool-manuals/__tests__/tool-manuals.tools.test.ts +132 -6
- package/src/modules/tool-manuals/mcp-json-discovery.ts +73 -34
- package/src/modules/tool-manuals/mcp-server-edit.service.ts +1 -1
- package/src/modules/tool-manuals/pending-tools.service.ts +3 -3
- package/src/modules/tool-manuals/tool-delete.service.ts +1 -1
- package/src/modules/tool-manuals/tool-manuals.contract.ts +63 -3
- package/src/modules/tool-manuals/tool-manuals.service.ts +191 -51
- package/src/modules/tool-manuals/tool-manuals.tools.ts +93 -28
- package/src/modules/tool-registry/__tests__/own-tool-schemas.test.ts +4 -4
- package/src/modules/tool-registry/__tests__/read-only-hints.test.ts +3 -3
- package/src/modules/tool-registry/__tests__/tool-description-length.test.ts +12 -119
- package/src/modules/{workflow → version-control}/__tests__/apply-failure.test.ts +54 -54
- package/src/modules/{workflow → version-control}/__tests__/event-bus.test.ts +27 -27
- package/src/modules/{workflow → version-control}/__tests__/events-delivery.test.ts +37 -37
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.deletion-gate.test.ts +2 -2
- package/src/modules/{workflow → version-control}/__tests__/file-lock.service.path-identity.test.ts +8 -8
- package/src/modules/{workflow → version-control}/__tests__/merge-announces-tree.test.ts +11 -11
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.concurrency.test.ts +9 -9
- package/src/modules/{workflow → version-control}/__tests__/pending-commits.worker.test.ts +25 -25
- package/src/modules/{workflow → version-control}/__tests__/preserve-roles-yaml.test.ts +42 -42
- package/src/modules/version-control/__tests__/public-surface.test.ts +114 -0
- package/src/modules/{workflow/__tests__/workflow.routes.folder-proposals.test.ts → version-control/__tests__/version-control.routes.folder-proposals.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.fork-point-file.test.ts → version-control/__tests__/version-control.routes.fork-point-file.test.ts} +19 -19
- package/src/modules/{workflow/__tests__/workflow.routes.history-read-gate.test.ts → version-control/__tests__/version-control.routes.history-read-gate.test.ts} +13 -13
- package/src/modules/{workflow/__tests__/workflow.routes.lock-path.test.ts → version-control/__tests__/version-control.routes.lock-path.test.ts} +18 -18
- package/src/modules/{workflow/__tests__/workflow.routes.open-change-request.test.ts → version-control/__tests__/version-control.routes.open-change-request.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.routes.push-refused.test.ts → version-control/__tests__/version-control.routes.push-refused.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.branch-in-use.test.ts → version-control/__tests__/version-control.service.branch-in-use.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.commitFileWhileLocked.test.ts → version-control/__tests__/version-control.service.commitFileWhileLocked.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.delete-branch.test.ts → version-control/__tests__/version-control.service.delete-branch.test.ts} +14 -14
- package/src/modules/{workflow/__tests__/workflow.service.deleted-branch-sweep.test.ts → version-control/__tests__/version-control.service.deleted-branch-sweep.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.facade.test.ts → version-control/__tests__/version-control.service.facade.test.ts} +97 -99
- package/src/modules/{workflow/__tests__/workflow.service.folder-proposals.test.ts → version-control/__tests__/version-control.service.folder-proposals.test.ts} +7 -7
- package/src/modules/{workflow/__tests__/workflow.service.platform-restore.test.ts → version-control/__tests__/version-control.service.platform-restore.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.read-gate.test.ts → version-control/__tests__/version-control.service.read-gate.test.ts} +9 -9
- package/src/modules/{workflow/__tests__/workflow.service.releaseLock.test.ts → version-control/__tests__/version-control.service.releaseLock.test.ts} +42 -42
- package/src/modules/{workflow/__tests__/workflow.service.repository-replaced.test.ts → version-control/__tests__/version-control.service.repository-replaced.test.ts} +4 -4
- package/src/modules/{workflow/__tests__/workflow.service.sync.test.ts → version-control/__tests__/version-control.service.sync.test.ts} +17 -17
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.pg.test.ts → version-control/__tests__/version-control.service.update-change-request.pg.test.ts} +6 -6
- package/src/modules/{workflow/__tests__/workflow.service.update-change-request.test.ts → version-control/__tests__/version-control.service.update-change-request.test.ts} +11 -11
- package/src/modules/{workflow/__tests__/workflow.service.update-from-target.test.ts → version-control/__tests__/version-control.service.update-from-target.test.ts} +22 -22
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read.tools.test.ts +3 -3
- package/src/modules/{workflow → version-control}/agent-tools/__tests__/update-change-request.parity.test.ts +16 -16
- package/src/modules/{workflow/agent-tools/__tests__/workflow.tools.test.ts → version-control/agent-tools/__tests__/version-control.tools.test.ts} +9 -9
- package/src/modules/{workflow → version-control}/agent-tools/change-request-read.tools.ts +2 -2
- package/src/modules/{workflow/agent-tools/workflow.tools.ts → version-control/agent-tools/version-control.tools.ts} +52 -48
- package/src/modules/{workflow → version-control}/change-request-hooks.ts +1 -1
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/approval-states.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/cancel-pr.test.ts +8 -8
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/carry-approvals-forward.test.ts +6 -6
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/erase-approver.test.ts +5 -5
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-gate.test.ts +3 -3
- package/src/modules/{workflow/review-workflow → version-control/change-request-review}/__tests__/merge-records-own-commit.test.ts +3 -3
- package/src/modules/{workflow/review-workflow/review-workflow.interface.ts → version-control/change-request-review/change-request-review.interface.ts} +1 -1
- package/src/modules/{workflow/review-workflow/review-workflow.service.ts → version-control/change-request-review/change-request-review.service.ts} +28 -28
- package/src/modules/{workflow → version-control}/event-bus.ts +14 -14
- package/src/modules/{workflow → version-control}/events-delivery.ts +11 -11
- package/src/modules/{workflow → version-control}/events.routes.ts +5 -5
- package/src/modules/{workflow → version-control}/file-lock.service.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git-test-helpers.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.accessGating.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.appliedChange.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedFilesForPr.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.changedPathsMemo.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitChanges.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.strayPath.test.ts +10 -10
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.commitFile.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.createBranch.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.deleteBranch.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileAtCommit.test.ts +9 -9
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.diffFileBetweenBranches.test.ts +23 -23
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileBytesAtCommit.test.ts +7 -7
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.fileContentsAtCommit.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.forkPoint.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.history-guards.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.list-branches.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.listTrackedFiles.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.logForFile.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeChangeRequest.test.ts +20 -20
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.mergeIntoBranch.test.ts +16 -16
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pendingChanges.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.postMergePull.test.ts +5 -5
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.prFetchFailure.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.pull.test.ts +12 -12
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.readFileAtRef.test.ts +3 -3
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.revertPathsAndPush.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.status.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.syncFromRemote.test.ts +8 -8
- package/src/modules/{workflow → version-control}/git/__tests__/git.service.worktrees.test.ts +4 -4
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.list-fetch.test.ts +2 -2
- package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.test.ts +6 -6
- package/src/modules/{workflow → version-control}/git/git.service.ts +57 -57
- package/src/modules/{workflow → version-control}/git/node-git-runner.ts +1 -1
- package/src/modules/{workflow → version-control}/git/pull-request.service.ts +12 -12
- package/src/modules/{workflow → version-control}/index.ts +6 -5
- package/src/modules/{workflow → version-control}/pending-commits.service.ts +2 -2
- package/src/modules/{workflow → version-control}/pending-commits.worker.ts +8 -8
- package/src/modules/{workflow → version-control}/read-on-branch.ts +2 -2
- package/src/modules/{workflow/workflow-hooks.ts → version-control/version-control-hooks.ts} +3 -3
- package/src/modules/{workflow/workflow.routes.ts → version-control/version-control.routes.ts} +64 -63
- package/src/modules/{workflow/workflow.service.ts → version-control/version-control.service.ts} +92 -97
- package/src/modules/workspace/__tests__/agent-access.gate.test.ts +8 -8
- package/src/modules/workspace/__tests__/agent-downloads.test.ts +13 -16
- package/src/modules/workspace/__tests__/agent-uploads.test.ts +11 -12
- package/src/modules/workspace/__tests__/escape-sequences.routes.test.ts +11 -16
- package/src/modules/workspace/__tests__/file-stat-access.test.ts +3 -3
- package/src/modules/workspace/__tests__/git-internals.security.test.ts +27 -27
- package/src/modules/workspace/__tests__/kb-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/rest-tool-arguments.test.ts +3 -3
- package/src/modules/workspace/__tests__/start-session.default-branch.test.ts +152 -0
- package/src/modules/workspace/__tests__/workspace-paths-inside-the-repo.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace-tmp.tools.test.ts +13 -14
- package/src/modules/workspace/__tests__/workspace.routes.at-ref.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.branch-errors.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.create-grant.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.delete.test.ts +8 -8
- package/src/modules/workspace/__tests__/workspace.routes.download-implies-read.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.download.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.file-writes.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.folder-zip-access.test.ts +4 -4
- package/src/modules/workspace/__tests__/workspace.routes.folders.test.ts +6 -6
- package/src/modules/workspace/__tests__/workspace.routes.move-platform-files.test.ts +7 -7
- package/src/modules/workspace/__tests__/workspace.routes.read-gate.test.ts +13 -13
- package/src/modules/workspace/__tests__/workspace.service.any-workspace-credentials.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.replaced-repository.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.service.worktrees.test.ts +1 -1
- package/src/modules/workspace/__tests__/workspace.tools.agents-file.test.ts +12 -14
- package/src/modules/workspace/__tests__/workspace.tools.branch-errors.test.ts +5 -5
- package/src/modules/workspace/__tests__/workspace.tools.test.ts +182 -75
- package/src/modules/workspace/agent-access.gate.ts +6 -6
- package/src/modules/workspace/git-internals.middleware.ts +2 -2
- package/src/modules/workspace/kb-repository.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.degraded.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.test.ts +1 -1
- package/src/modules/workspace/startup/__tests__/kb-startup-runner.worktrees.test.ts +1 -1
- package/src/modules/workspace/startup/kb-git.ts +1 -1
- package/src/modules/workspace/startup/steps/__tests__/steps.test.ts +94 -70
- package/src/modules/workspace/startup/steps/seed-tree.ts +4 -5
- package/src/modules/workspace/startup/steps/template-files.step.ts +4 -5
- package/src/modules/workspace/startup/steps/template-source.ts +21 -6
- package/src/modules/workspace/workspace-tmp.ts +4 -4
- package/src/modules/workspace/workspace.routes.ts +26 -26
- package/src/modules/workspace/workspace.service.ts +11 -11
- package/src/modules/workspace/workspace.tools.ts +90 -30
- package/src/shared/__tests__/canonical-file-identity.test.ts +5 -5
- package/src/shared/__tests__/http-errors.test.ts +4 -4
- package/src/shared/__tests__/read-capped.test.ts +68 -0
- package/src/shared/canonical-file-identity.ts +5 -5
- package/src/shared/domain-errors.ts +44 -44
- package/src/shared/git.contract.ts +1 -1
- package/src/shared/http-errors.ts +3 -3
- package/src/shared/kb-context.ts +130 -130
- package/src/shared/oauth-token-error.ts +46 -0
- package/src/shared/pending-proposals.ts +4 -4
- package/src/shared/read-capped.ts +40 -0
- package/src/tenancy/__tests__/tenant-host.test.ts +372 -372
- package/src/tenancy/__tests__/tenant-runtime.test.ts +221 -221
- package/src/tenancy/__tests__/tenant-secrets.test.ts +35 -35
- package/src/tenancy/index.ts +35 -35
- package/src/tenancy/static-tenant-source.ts +1 -1
- package/src/tenancy/tenant-host.ts +261 -261
- package/src/tenancy/tenant-runtime.ts +208 -208
- package/src/tenancy/tenant-source.contract.ts +59 -59
- package/agent-guide/finding-things.md +0 -7
- package/agent-guide/introduction.md +0 -27
- package/dist/modules/workflow/agent-tools/change-request-read-shape.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read-shape.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-read.tools.js.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/change-request-summary.js.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.d.ts.map +0 -1
- package/dist/modules/workflow/agent-tools/workflow.tools.js.map +0 -1
- package/dist/modules/workflow/change-request-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/change-request-hooks.js.map +0 -1
- package/dist/modules/workflow/event-bus.d.ts.map +0 -1
- package/dist/modules/workflow/event-bus.js.map +0 -1
- package/dist/modules/workflow/events-delivery.d.ts.map +0 -1
- package/dist/modules/workflow/events-delivery.js.map +0 -1
- package/dist/modules/workflow/events.routes.d.ts.map +0 -1
- package/dist/modules/workflow/events.routes.js.map +0 -1
- package/dist/modules/workflow/file-lock.service.d.ts.map +0 -1
- package/dist/modules/workflow/file-lock.service.js.map +0 -1
- package/dist/modules/workflow/git/change-request-link.d.ts.map +0 -1
- package/dist/modules/workflow/git/change-request-link.js.map +0 -1
- package/dist/modules/workflow/git/git-version.d.ts.map +0 -1
- package/dist/modules/workflow/git/git-version.js.map +0 -1
- package/dist/modules/workflow/git/git.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/git.service.js.map +0 -1
- package/dist/modules/workflow/git/merge-commit.d.ts.map +0 -1
- package/dist/modules/workflow/git/merge-commit.js.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.d.ts.map +0 -1
- package/dist/modules/workflow/git/node-git-runner.js.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.d.ts.map +0 -1
- package/dist/modules/workflow/git/pull-request.service.js.map +0 -1
- package/dist/modules/workflow/index.d.ts.map +0 -1
- package/dist/modules/workflow/index.js.map +0 -1
- package/dist/modules/workflow/pending-commits.service.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.service.js.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.d.ts.map +0 -1
- package/dist/modules/workflow/pending-commits.worker.js.map +0 -1
- package/dist/modules/workflow/read-on-branch.d.ts.map +0 -1
- package/dist/modules/workflow/read-on-branch.js.map +0 -1
- package/dist/modules/workflow/recovery-bot.d.ts.map +0 -1
- package/dist/modules/workflow/recovery-bot.js.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/approval-lock.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js +0 -2
- package/dist/modules/workflow/review-workflow/review-workflow.interface.js.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/review-workflow/review-workflow.service.js.map +0 -1
- package/dist/modules/workflow/sanitize-error.d.ts.map +0 -1
- package/dist/modules/workflow/sanitize-error.js.map +0 -1
- package/dist/modules/workflow/workflow-hooks.d.ts.map +0 -1
- package/dist/modules/workflow/workflow-hooks.js.map +0 -1
- package/dist/modules/workflow/workflow.routes.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.routes.js.map +0 -1
- package/dist/modules/workflow/workflow.service.d.ts.map +0 -1
- package/dist/modules/workflow/workflow.service.js.map +0 -1
- package/src/modules/mcp/__tests__/read-only-hint.e2e.test.ts +0 -213
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read-shape.js +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-read.tools.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/agent-tools/change-request-summary.js +0 -0
- /package/dist/modules/{workflow → version-control}/change-request-hooks.js +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.d.ts +0 -0
- /package/dist/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.js +0 -0
- /package/dist/modules/{workflow → version-control}/events-delivery.js +0 -0
- /package/dist/modules/{workflow → version-control}/events.routes.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/change-request-link.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/git-version.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/git/merge-commit.js +0 -0
- /package/dist/modules/{workflow → version-control}/git/node-git-runner.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/recovery-bot.js +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.d.ts +0 -0
- /package/dist/modules/{workflow → version-control}/sanitize-error.js +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/change-request-hooks.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/fake-file-lock-db.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.canonical.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.enqueue-if-absent.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/pending-commits.repository-replaced.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/__tests__/sanitize-error.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/__tests__/change-request-read-shape.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-read-shape.ts +0 -0
- /package/src/modules/{workflow → version-control}/agent-tools/change-request-summary.ts +0 -0
- /package/src/modules/{workflow/review-workflow → version-control/change-request-review}/approval-lock.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/branchAuthor.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/change-request-link.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.failure.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/git-version.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/node-git-runner.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.getPrDetail.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.placeholder.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-cancel.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-delete.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/__tests__/pull-request.service.viewer-can-update.test.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/change-request-link.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/git-version.ts +0 -0
- /package/src/modules/{workflow → version-control}/git/merge-commit.ts +0 -0
- /package/src/modules/{workflow → version-control}/recovery-bot.ts +0 -0
- /package/src/modules/{workflow → version-control}/sanitize-error.ts +0 -0
|
@@ -14,7 +14,7 @@ import { redactSecret, urlQuerySecrets } from '../../../shared/redact-secret.js'
|
|
|
14
14
|
* runs through (`shared/git.contract.ts`).
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
/** Fallback committer identity;
|
|
17
|
+
/** Fallback committer identity; version-control commits override with `--author`. */
|
|
18
18
|
export const BOT_NAME = 'Bevel Workflow';
|
|
19
19
|
export const BOT_EMAIL = 'bevel-workflow@bevel.software';
|
|
20
20
|
|
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import {
|
|
2
|
+
import { realDisk } from '../../../../../__tests__/real-disk.js';
|
|
3
|
+
import { NodeGitRunner } from '../../../../version-control/index.js';
|
|
4
|
+
import { renderRolesYaml } from '../../../../access-model/index.js';
|
|
3
5
|
import { execFile } from 'node:child_process';
|
|
4
6
|
import { promisify } from 'node:util';
|
|
5
7
|
import fs from 'node:fs/promises';
|
|
6
8
|
import os from 'node:os';
|
|
7
9
|
import path from 'node:path';
|
|
8
|
-
import { NodeGitRunner } from '../../../../workflow/git/node-git-runner.js';
|
|
9
10
|
import type { OnServerStart, ServerStartContext, StepResult } from '../../on-server-start.js';
|
|
10
11
|
import { GroupsToPluginsStep } from '../groups-to-plugins.step.js';
|
|
11
12
|
import { PluginDisplayNamesStep } from '../plugin-display-names.step.js';
|
|
12
13
|
import { PluginManifestsStep } from '../plugin-manifests.step.js';
|
|
13
14
|
import { PersonalSpacesStep } from '../personal-spaces.step.js';
|
|
14
15
|
import { RolesYamlStep } from '../roles-yaml.step.js';
|
|
15
|
-
import { renderRolesYaml } from '../../../../access-model/render-roles-yaml.js';
|
|
16
16
|
import { TemplateFilesStep } from '../template-files.step.js';
|
|
17
17
|
import { buildSeedTree } from '../seed-tree.js';
|
|
18
18
|
import { defaultKbTemplateDir } from '../../../../../assets.js';
|
|
19
19
|
import { DEFAULT_KB_LAYOUT } from '@bevel-software/platform-shared';
|
|
20
|
-
import { renderTemplateText } from '../template-source.js';
|
|
21
|
-
import {
|
|
20
|
+
import { SHARED_FILE_RULES_PLACEHOLDER, renderTemplateText } from '../template-source.js';
|
|
21
|
+
import {
|
|
22
|
+
TOOL_PREFIX_LINE,
|
|
23
|
+
composeAgentInstructions,
|
|
24
|
+
platformInstructions,
|
|
25
|
+
sharedFileRulesSection,
|
|
26
|
+
} from '../../../../agent-instructions/index.js';
|
|
22
27
|
import { testKbContext } from '../../../../../__tests__/kb-context.js';
|
|
23
28
|
import { newKbStartupRunner } from '../../../../../__tests__/workspace-service.js';
|
|
24
29
|
|
|
@@ -152,7 +157,7 @@ async function template(name: string): Promise<string> {
|
|
|
152
157
|
// `renderTemplateText`, not the layout renderer alone: the managed guide also
|
|
153
158
|
// asks for the shared file rules, and a fixture rendered with half the
|
|
154
159
|
// placeholders filled would read as drifted on every boot.
|
|
155
|
-
return renderTemplateText(await fs.readFile(path.join(TEMPLATE_DIR, name), 'utf8'), DEFAULT_KB_LAYOUT);
|
|
160
|
+
return renderTemplateText(await fs.readFile(path.join(TEMPLATE_DIR, name), 'utf8'), DEFAULT_KB_LAYOUT, '');
|
|
156
161
|
}
|
|
157
162
|
|
|
158
163
|
/** Every required file + reserved root already present, from the real template. */
|
|
@@ -171,7 +176,7 @@ async function fullScaffold(): Promise<Record<string, string>> {
|
|
|
171
176
|
describe('TemplateFilesStep', () => {
|
|
172
177
|
it('adds the missing scaffolding — .gitignore arriving from its packable template spelling', async () => {
|
|
173
178
|
await seedUpstream({ 'marker.txt': 'seeded' });
|
|
174
|
-
await makeRunner([new TemplateFilesStep(
|
|
179
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
175
180
|
|
|
176
181
|
for (const b of PROTECTED) {
|
|
177
182
|
const dir = await checkout(b);
|
|
@@ -199,7 +204,7 @@ describe('TemplateFilesStep', () => {
|
|
|
199
204
|
// the folders it will find, and an ignore file hiding the real ones.
|
|
200
205
|
kbContext.applyLayout({ knowledgeBaseDir: 'docs', skillsDir: 'skills', pluginsDir: 'plugins' });
|
|
201
206
|
await seedUpstream({ 'marker.txt': 'seeded' });
|
|
202
|
-
await makeRunner([new TemplateFilesStep(
|
|
207
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
203
208
|
|
|
204
209
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
205
210
|
// No guide is written: the platform serves it (see modules/agent-guide).
|
|
@@ -215,7 +220,7 @@ describe('TemplateFilesStep', () => {
|
|
|
215
220
|
expect(await exists(dir, 'docs/.gitkeep')).toBe(true);
|
|
216
221
|
|
|
217
222
|
// And a second boot sees the rendered guide as current: no churn commit.
|
|
218
|
-
await makeRunner([new TemplateFilesStep(
|
|
223
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
219
224
|
const again = await checkout(DEFAULT_BRANCH);
|
|
220
225
|
expect((await git(again, ['rev-list', '--count', 'HEAD'])).trim()).toBe('2'); // init + scaffolding
|
|
221
226
|
});
|
|
@@ -230,7 +235,7 @@ describe('TemplateFilesStep', () => {
|
|
|
230
235
|
* deployment's own root names rather than the placeholders.
|
|
231
236
|
*/
|
|
232
237
|
it('scaffolds the layout in effect when it RUNS, not the one it was built under', async () => {
|
|
233
|
-
const builtAtBoot = new TemplateFilesStep(
|
|
238
|
+
const builtAtBoot = new TemplateFilesStep(realDisk(), kbContext);
|
|
234
239
|
await seedUpstream({ 'skills/deploy/SKILL.md': '# deploy\n' });
|
|
235
240
|
kbContext.applyLayout({ knowledgeBaseDir: 'Docs', skillsDir: 'skills', pluginsDir: 'Plugins' });
|
|
236
241
|
await makeRunner([builtAtBoot]).runAll();
|
|
@@ -252,7 +257,7 @@ describe('TemplateFilesStep', () => {
|
|
|
252
257
|
|
|
253
258
|
it('rejects the git folder — in any spelling — as a reserved root name', async () => {
|
|
254
259
|
for (const bad of ['.git', '.GIT', '.Git', '.git.', '%2egit']) {
|
|
255
|
-
expect(() => new TemplateFilesStep(
|
|
260
|
+
expect(() => new TemplateFilesStep(realDisk(), kbContext, [bad]), bad).toThrow(/must not name the git folder/);
|
|
256
261
|
}
|
|
257
262
|
});
|
|
258
263
|
|
|
@@ -267,7 +272,7 @@ describe('TemplateFilesStep', () => {
|
|
|
267
272
|
delete scaffold['.bevelignore']; // the one file the step will declare from the template
|
|
268
273
|
await seedUpstream(scaffold);
|
|
269
274
|
|
|
270
|
-
await makeRunner([new TemplateFilesStep(
|
|
275
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)], customTemplate).runAll();
|
|
271
276
|
|
|
272
277
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
273
278
|
const lines = norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8')).split('\n').map((l) => l.trim());
|
|
@@ -287,14 +292,14 @@ describe('TemplateFilesStep', () => {
|
|
|
287
292
|
'# mine\n.git/\nAGENTS.md\nPlugins/\n\n# Added by the platform: the conventions doc is not node content.\nSkills/\n';
|
|
288
293
|
await seedUpstream(scaffold);
|
|
289
294
|
|
|
290
|
-
await makeRunner([new TemplateFilesStep(
|
|
295
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
291
296
|
|
|
292
297
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
293
298
|
const text = norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'));
|
|
294
299
|
// The plugins-root rule goes with it — the same sidebar draws that root now.
|
|
295
300
|
expect(text).toBe('# mine\n.git/\nAGENTS.md\n' + PREAMBLE_IGNORE_BLOCK);
|
|
296
301
|
// Idempotent: a second boot has nothing to change.
|
|
297
|
-
await makeRunner([new TemplateFilesStep(
|
|
302
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
298
303
|
const again = await checkout(DEFAULT_BRANCH);
|
|
299
304
|
expect(norm(await fs.readFile(path.join(again, '.bevelignore'), 'utf8'))).toBe(text);
|
|
300
305
|
});
|
|
@@ -308,7 +313,7 @@ describe('TemplateFilesStep', () => {
|
|
|
308
313
|
'AGENTS.md\nPlugins/\n# The shared-skills root is rendered by the Skills & Tools app, like Groups/.\nSkills/\n';
|
|
309
314
|
await seedUpstream(scaffold);
|
|
310
315
|
|
|
311
|
-
await makeRunner([new TemplateFilesStep(
|
|
316
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
312
317
|
|
|
313
318
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
314
319
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
@@ -325,7 +330,7 @@ describe('TemplateFilesStep', () => {
|
|
|
325
330
|
'AGENTS.md\nPlugins/\n# The shared-skills root is rendered by the Skills & Tools app, like My Plugins/.\nSkills/\n';
|
|
326
331
|
await seedUpstream(scaffold);
|
|
327
332
|
|
|
328
|
-
await makeRunner([new TemplateFilesStep(
|
|
333
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
329
334
|
|
|
330
335
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
331
336
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
@@ -342,7 +347,7 @@ describe('TemplateFilesStep', () => {
|
|
|
342
347
|
scaffold['.bevelignore'] = text;
|
|
343
348
|
await seedUpstream(scaffold);
|
|
344
349
|
|
|
345
|
-
await makeRunner([new TemplateFilesStep(
|
|
350
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
346
351
|
|
|
347
352
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
348
353
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
@@ -355,7 +360,7 @@ describe('TemplateFilesStep', () => {
|
|
|
355
360
|
scaffold['.bevelignore'] = 'AGENTS.md\n# I hide skills on purpose\nSkills/\n';
|
|
356
361
|
await seedUpstream(scaffold);
|
|
357
362
|
|
|
358
|
-
await makeRunner([new TemplateFilesStep(
|
|
363
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
359
364
|
|
|
360
365
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
361
366
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
@@ -374,13 +379,13 @@ describe('TemplateFilesStep', () => {
|
|
|
374
379
|
'# mine\nAGENTS.md\nPlugins/\nMy-Own-Rule/\n# Added by the platform: the conventions doc is not node content.\nPlugins/\n!Plugins/\n';
|
|
375
380
|
await seedUpstream(scaffold);
|
|
376
381
|
|
|
377
|
-
await makeRunner([new TemplateFilesStep(
|
|
382
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
378
383
|
|
|
379
384
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
380
385
|
const text = norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'));
|
|
381
386
|
expect(text).toBe('# mine\nAGENTS.md\nMy-Own-Rule/\n!Plugins/\n' + PREAMBLE_IGNORE_BLOCK);
|
|
382
387
|
// Idempotent: a second boot has nothing to change.
|
|
383
|
-
await makeRunner([new TemplateFilesStep(
|
|
388
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
384
389
|
const again = await checkout(DEFAULT_BRANCH);
|
|
385
390
|
expect(norm(await fs.readFile(path.join(again, '.bevelignore'), 'utf8'))).toBe(text);
|
|
386
391
|
});
|
|
@@ -393,7 +398,7 @@ describe('TemplateFilesStep', () => {
|
|
|
393
398
|
await fs.writeFile(path.join(customTemplate, '.bevelignore'), '.git/\nAGENTS.md\n\nPlugins/\n');
|
|
394
399
|
await seedUpstream({ 'marker.txt': 'seeded' });
|
|
395
400
|
|
|
396
|
-
await makeRunner([new TemplateFilesStep(
|
|
401
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)], customTemplate).runAll();
|
|
397
402
|
|
|
398
403
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
399
404
|
const lines = norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8')).split('\n').map((l) => l.trim());
|
|
@@ -412,7 +417,7 @@ describe('TemplateFilesStep', () => {
|
|
|
412
417
|
|
|
413
418
|
const dir = path.join(root, 'seeded-gitlink');
|
|
414
419
|
await fs.mkdir(dir, { recursive: true });
|
|
415
|
-
await buildSeedTree(
|
|
420
|
+
await buildSeedTree(realDisk(), customTemplate, [], ['admin@example.com'], kbContext)(dir);
|
|
416
421
|
|
|
417
422
|
await expect(fs.readFile(path.join(dir, 'notes.md'), 'utf8')).rejects.toMatchObject({ code: 'ENOENT' });
|
|
418
423
|
await expect(fs.readdir(path.join(dir, '.git'))).rejects.toMatchObject({ code: 'ENOENT' });
|
|
@@ -434,7 +439,7 @@ describe('TemplateFilesStep', () => {
|
|
|
434
439
|
// The empty-remote seed is the one path that copies a whole template.
|
|
435
440
|
const dir = path.join(root, 'seeded-bytes');
|
|
436
441
|
await fs.mkdir(dir, { recursive: true });
|
|
437
|
-
await buildSeedTree(
|
|
442
|
+
await buildSeedTree(realDisk(), customTemplate, [], ['admin@example.com'], kbContext)(dir);
|
|
438
443
|
|
|
439
444
|
expect(await fs.readFile(path.join(dir, 'assets', '.logo.bin'))).toEqual(binary);
|
|
440
445
|
expect(norm(await fs.readFile(path.join(dir, 'scripts', 'run.sh'), 'utf8'))).toBe('#!/bin/sh\necho Skills\n');
|
|
@@ -459,7 +464,7 @@ describe('TemplateFilesStep', () => {
|
|
|
459
464
|
delete scaffold['.bevelignore'];
|
|
460
465
|
await seedUpstream(scaffold);
|
|
461
466
|
|
|
462
|
-
await makeRunner([new TemplateFilesStep(
|
|
467
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)], customTemplate).runAll();
|
|
463
468
|
|
|
464
469
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
465
470
|
const text = norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'));
|
|
@@ -473,7 +478,7 @@ describe('TemplateFilesStep', () => {
|
|
|
473
478
|
scaffold['.bevelignore'] = 'AGENTS.md\n!Skills/\n';
|
|
474
479
|
await seedUpstream(scaffold);
|
|
475
480
|
|
|
476
|
-
await makeRunner([new TemplateFilesStep(
|
|
481
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
477
482
|
|
|
478
483
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
479
484
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
@@ -488,7 +493,7 @@ describe('TemplateFilesStep', () => {
|
|
|
488
493
|
scaffold['.bevelignore'] = '# operator wants the doc visible\n!AGENTS.md\nMyStuff/\n';
|
|
489
494
|
await seedUpstream(scaffold);
|
|
490
495
|
|
|
491
|
-
await makeRunner([new TemplateFilesStep(
|
|
496
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
492
497
|
|
|
493
498
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
494
499
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
@@ -501,7 +506,7 @@ describe('TemplateFilesStep', () => {
|
|
|
501
506
|
scaffold['.bevelignore'] = 'AGENTS.md\n!mcp-description.md\n';
|
|
502
507
|
await seedUpstream(scaffold);
|
|
503
508
|
|
|
504
|
-
await makeRunner([new TemplateFilesStep(
|
|
509
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
505
510
|
|
|
506
511
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
507
512
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
@@ -518,14 +523,14 @@ describe('TemplateFilesStep', () => {
|
|
|
518
523
|
'AGENTS.md\n# Added by the platform: agent instructions are edited from External agent access.\nmcp-description.md\n';
|
|
519
524
|
await seedUpstream(scaffold);
|
|
520
525
|
|
|
521
|
-
await makeRunner([new TemplateFilesStep(
|
|
526
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
522
527
|
|
|
523
528
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
524
529
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
525
530
|
'AGENTS.md\n# Added by the platform: agent instructions are edited from External agent access.\n/mcp-description.md\n',
|
|
526
531
|
);
|
|
527
532
|
// Idempotent: a second boot has nothing to change.
|
|
528
|
-
await makeRunner([new TemplateFilesStep(
|
|
533
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
529
534
|
const again = await checkout(DEFAULT_BRANCH);
|
|
530
535
|
expect(norm(await fs.readFile(path.join(again, '.bevelignore'), 'utf8'))).toBe(
|
|
531
536
|
'AGENTS.md\n# Added by the platform: agent instructions are edited from External agent access.\n/mcp-description.md\n',
|
|
@@ -537,7 +542,7 @@ describe('TemplateFilesStep', () => {
|
|
|
537
542
|
scaffold['.bevelignore'] = 'AGENTS.md\n# I hide it everywhere on purpose\nmcp-description.md\n';
|
|
538
543
|
await seedUpstream(scaffold);
|
|
539
544
|
|
|
540
|
-
await makeRunner([new TemplateFilesStep(
|
|
545
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
541
546
|
|
|
542
547
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
543
548
|
expect(norm(await fs.readFile(path.join(dir, '.bevelignore'), 'utf8'))).toBe(
|
|
@@ -549,7 +554,7 @@ describe('TemplateFilesStep', () => {
|
|
|
549
554
|
const scaffold = await fullScaffold();
|
|
550
555
|
delete scaffold['mcp-description.md'];
|
|
551
556
|
await seedUpstream(scaffold);
|
|
552
|
-
await makeRunner([new TemplateFilesStep(
|
|
557
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
553
558
|
|
|
554
559
|
for (const b of PROTECTED) {
|
|
555
560
|
const dir = await checkout(b);
|
|
@@ -564,7 +569,7 @@ describe('TemplateFilesStep', () => {
|
|
|
564
569
|
it('leaves an existing mcp-description.md untouched: seeded once, never refreshed', async () => {
|
|
565
570
|
const mine = 'Acme builds solar farms.\n\n## What is where\n\n- Projects/\n';
|
|
566
571
|
await seedUpstream({ ...(await fullScaffold()), 'mcp-description.md': mine });
|
|
567
|
-
await makeRunner([new TemplateFilesStep(
|
|
572
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
568
573
|
|
|
569
574
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
570
575
|
expect(norm(await fs.readFile(path.join(dir, 'mcp-description.md'), 'utf8'))).toBe(mine);
|
|
@@ -573,7 +578,7 @@ describe('TemplateFilesStep', () => {
|
|
|
573
578
|
|
|
574
579
|
it('keeps a deliberately emptied mcp-description.md empty: the top-up restores only a MISSING file', async () => {
|
|
575
580
|
await seedUpstream({ ...(await fullScaffold()), 'mcp-description.md': '' });
|
|
576
|
-
await makeRunner([new TemplateFilesStep(
|
|
581
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
577
582
|
|
|
578
583
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
579
584
|
expect(await fs.readFile(path.join(dir, 'mcp-description.md'), 'utf8')).toBe('');
|
|
@@ -590,7 +595,7 @@ describe('TemplateFilesStep', () => {
|
|
|
590
595
|
expect(shipped).toContain('first paragraph under about 220');
|
|
591
596
|
expect(shipped).not.toContain('{{');
|
|
592
597
|
const composed = composeAgentInstructions(shipped);
|
|
593
|
-
expect(composed.instructions).toBe(platformInstructions(DEFAULT_KB_LAYOUT));
|
|
598
|
+
expect(composed.instructions).toBe(platformInstructions(DEFAULT_KB_LAYOUT, ''));
|
|
594
599
|
expect(composed.toolPrefix).toBe(TOOL_PREFIX_LINE);
|
|
595
600
|
expect(composed.unterminatedComment).toBe(false);
|
|
596
601
|
expect(composed.preambleChars).toBe(0);
|
|
@@ -608,7 +613,7 @@ describe('TemplateFilesStep', () => {
|
|
|
608
613
|
await seedUpstream(scaffold);
|
|
609
614
|
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
610
615
|
|
|
611
|
-
await makeRunner([new TemplateFilesStep(
|
|
616
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)], customTemplate).runAll();
|
|
612
617
|
|
|
613
618
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
614
619
|
expect(norm(await fs.readFile(path.join(dir, 'mcp-description.md'), 'utf8'))).toBe(
|
|
@@ -623,7 +628,7 @@ describe('TemplateFilesStep', () => {
|
|
|
623
628
|
const scaffold = await fullScaffold();
|
|
624
629
|
delete scaffold['access.md'];
|
|
625
630
|
await seedUpstream(scaffold);
|
|
626
|
-
await expect(makeRunner([new TemplateFilesStep(
|
|
631
|
+
await expect(makeRunner([new TemplateFilesStep(realDisk(), kbContext)], stricter).runAll()).rejects.toThrow(/ENOENT/);
|
|
627
632
|
});
|
|
628
633
|
});
|
|
629
634
|
|
|
@@ -650,7 +655,7 @@ describe('TemplateFilesStep: the guide copies earlier releases wrote', () => {
|
|
|
650
655
|
|
|
651
656
|
it('removes the platform-written AGENTS.md from every protected branch, and the rules that hid it', async () => {
|
|
652
657
|
await seedUpstream({ ...(await fullScaffold()), 'AGENTS.md': MANAGED_GUIDE_COPY, '.bevelignore': OLD_RELEASE_IGNORE });
|
|
653
|
-
await makeRunner([new TemplateFilesStep(
|
|
658
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
654
659
|
|
|
655
660
|
for (const branch of PROTECTED) {
|
|
656
661
|
const dir = await checkout(branch);
|
|
@@ -671,13 +676,13 @@ describe('TemplateFilesStep: the guide copies earlier releases wrote', () => {
|
|
|
671
676
|
|
|
672
677
|
// The boot after finds nothing to do.
|
|
673
678
|
const head = (await git(await checkout(DEFAULT_BRANCH), ['rev-parse', 'HEAD'])).trim();
|
|
674
|
-
await makeRunner([new TemplateFilesStep(
|
|
679
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
675
680
|
expect((await git(await checkout(DEFAULT_BRANCH), ['rev-parse', 'HEAD'])).trim()).toBe(head);
|
|
676
681
|
});
|
|
677
682
|
|
|
678
683
|
it("leaves the organisation's own AGENTS.md byte for byte, and stops hiding it", async () => {
|
|
679
684
|
await seedUpstream({ ...(await fullScaffold()), 'AGENTS.md': CUSTOMER_GUIDE, '.bevelignore': OLD_RELEASE_IGNORE });
|
|
680
|
-
await makeRunner([new TemplateFilesStep(
|
|
685
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
681
686
|
|
|
682
687
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
683
688
|
expect(norm(await fs.readFile(path.join(dir, 'AGENTS.md'), 'utf8'))).toBe(CUSTOMER_GUIDE);
|
|
@@ -700,7 +705,7 @@ describe('TemplateFilesStep: the guide copies earlier releases wrote', () => {
|
|
|
700
705
|
// A negation and a hand-written rule under neither comment stay.
|
|
701
706
|
'!Notes.md\n# mine\nPrivate.md\n';
|
|
702
707
|
await seedUpstream(scaffold);
|
|
703
|
-
await makeRunner([new TemplateFilesStep(
|
|
708
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
704
709
|
|
|
705
710
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
706
711
|
expect(norm(await fs.readFile(path.join(dir, 'HEXIS.md'), 'utf8'))).toBe(CUSTOMER_GUIDE);
|
|
@@ -720,7 +725,7 @@ describe('TemplateFilesStep: the guide copies earlier releases wrote', () => {
|
|
|
720
725
|
scaffold['.bevelignore'] = '# mine\nAGENTS.md\nMyStuff/\n';
|
|
721
726
|
scaffold['AGENTS.md'] = CUSTOMER_GUIDE;
|
|
722
727
|
await seedUpstream(scaffold);
|
|
723
|
-
await makeRunner([new TemplateFilesStep(
|
|
728
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
724
729
|
const text = norm(await fs.readFile(path.join(await checkout(DEFAULT_BRANCH), '.bevelignore'), 'utf8'));
|
|
725
730
|
expect(text).toContain('# mine\nAGENTS.md\nMyStuff/');
|
|
726
731
|
});
|
|
@@ -733,7 +738,7 @@ describe('TemplateFilesStep: the guide copies earlier releases wrote', () => {
|
|
|
733
738
|
// The rule the release that wrote the guide under that name appended.
|
|
734
739
|
scaffold['.bevelignore'] = `${OLD_RELEASE_IGNORE}\n# The platform's agent guide.\n${String.raw`\#Guide\[1\].md`}\n`;
|
|
735
740
|
await seedUpstream(scaffold);
|
|
736
|
-
await makeRunner([new TemplateFilesStep(
|
|
741
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
737
742
|
|
|
738
743
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
739
744
|
expect(await exists(dir, '#Guide[1].md')).toBe(false);
|
|
@@ -754,7 +759,7 @@ describe('TemplateFilesStep: the guide copies earlier releases wrote', () => {
|
|
|
754
759
|
scaffold['Welcome.md'] = '# Welcome\n\nStart with the handbook.\n';
|
|
755
760
|
scaffold['.bevelignore'] = `${OLD_RELEASE_IGNORE}\n# The platform's agent guide.\nOLD-GUIDE.md\n`;
|
|
756
761
|
await seedUpstream(scaffold);
|
|
757
|
-
await makeRunner([new TemplateFilesStep(
|
|
762
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
758
763
|
|
|
759
764
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
760
765
|
expect(await exists(dir, 'OLD-GUIDE.md')).toBe(false);
|
|
@@ -777,7 +782,7 @@ describe('TemplateFilesStep: the guide copies earlier releases wrote', () => {
|
|
|
777
782
|
await git(seeding, ['commit', '-m', 'link AGENTS.md at our own file']);
|
|
778
783
|
await git(seeding, ['push', 'origin', DEFAULT_BRANCH]);
|
|
779
784
|
|
|
780
|
-
await makeRunner([new TemplateFilesStep(
|
|
785
|
+
await makeRunner([new TemplateFilesStep(realDisk(), kbContext)]).runAll();
|
|
781
786
|
|
|
782
787
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
783
788
|
expect((await fs.lstat(path.join(dir, 'AGENTS.md'))).isSymbolicLink()).toBe(true);
|
|
@@ -790,7 +795,7 @@ describe('TemplateFilesStep: the guide copies earlier releases wrote', () => {
|
|
|
790
795
|
describe('RolesYamlStep', () => {
|
|
791
796
|
it('generates roles.yaml with the configured admins on every protected branch', async () => {
|
|
792
797
|
await seedUpstream({ 'marker.txt': 'seeded' });
|
|
793
|
-
await makeRunner([new RolesYamlStep(
|
|
798
|
+
await makeRunner([new RolesYamlStep(realDisk(), ['admin@example.com'], kbContext)]).runAll();
|
|
794
799
|
|
|
795
800
|
for (const b of PROTECTED) {
|
|
796
801
|
const dir = await checkout(b);
|
|
@@ -808,7 +813,7 @@ describe('RolesYamlStep', () => {
|
|
|
808
813
|
// skip-if-present check, reporting success over a KB whose access roster
|
|
809
814
|
// cannot be read. Fail closed instead.
|
|
810
815
|
await seedUpstream({ 'roles.yaml/placeholder.txt': 'squatter' });
|
|
811
|
-
await expect(makeRunner([new RolesYamlStep(
|
|
816
|
+
await expect(makeRunner([new RolesYamlStep(realDisk(), ['admin@example.com'], kbContext)]).runAll()).rejects.toThrow(
|
|
812
817
|
/"roles\.yaml" on branch "current-company-state" exists but is not a regular file \(directory\)/,
|
|
813
818
|
);
|
|
814
819
|
});
|
|
@@ -816,7 +821,7 @@ describe('RolesYamlStep', () => {
|
|
|
816
821
|
it('declares a skip when the file is missing and no admins are configured', async () => {
|
|
817
822
|
await seedUpstream({ 'marker.txt': 'seeded' });
|
|
818
823
|
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
819
|
-
await makeRunner([new RolesYamlStep(
|
|
824
|
+
await makeRunner([new RolesYamlStep(realDisk(), [])]).runAll(); // resolves — a declared skip, not a failure
|
|
820
825
|
|
|
821
826
|
expect(warn.mock.calls.some((c) => String(c[0]).includes('roles-yaml: skipped'))).toBe(true);
|
|
822
827
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
@@ -862,7 +867,7 @@ describe('buildSeedTree', () => {
|
|
|
862
867
|
|
|
863
868
|
const dest = path.join(root, 'seed-dest');
|
|
864
869
|
await fs.mkdir(dest, { recursive: true });
|
|
865
|
-
const generated = await buildSeedTree(
|
|
870
|
+
const generated = await buildSeedTree(realDisk(),templateDir, [], ['admin@example.com'], kbContext)(dest);
|
|
866
871
|
|
|
867
872
|
expect(await exists(dest, '.git')).toBe(false);
|
|
868
873
|
expect(await exists(dest, 'docs/.git')).toBe(false);
|
|
@@ -873,12 +878,31 @@ describe('buildSeedTree', () => {
|
|
|
873
878
|
expect(await exists(dest, 'roles.yaml')).toBe(true);
|
|
874
879
|
});
|
|
875
880
|
|
|
881
|
+
it('seeds the shared rules naming the default branch, and naming none for a caller that hands only the layout', async () => {
|
|
882
|
+
const templateDir = path.join(root, 'seed-rules-template');
|
|
883
|
+
await fs.mkdir(templateDir, { recursive: true });
|
|
884
|
+
await fs.writeFile(path.join(templateDir, 'rules.md'), SHARED_FILE_RULES_PLACEHOLDER, 'utf8');
|
|
885
|
+
const seed = async (kb: Parameters<typeof buildSeedTree>[4], name: string): Promise<string> => {
|
|
886
|
+
const dest = path.join(root, name);
|
|
887
|
+
await fs.mkdir(dest, { recursive: true });
|
|
888
|
+
await buildSeedTree(realDisk(), templateDir, [], ['admin@example.com'], kb)(dest);
|
|
889
|
+
return fs.readFile(path.join(dest, 'rules.md'), 'utf8');
|
|
890
|
+
};
|
|
891
|
+
|
|
892
|
+
const named = await seed({ layout: DEFAULT_KB_LAYOUT, defaultBranch: 'target-company-state' }, 'seed-rules-named');
|
|
893
|
+
expect(named).toBe(sharedFileRulesSection(DEFAULT_KB_LAYOUT, 'target-company-state'));
|
|
894
|
+
expect(named).toContain("This knowledge base's default branch is `target-company-state`");
|
|
895
|
+
// The context took only `{ layout }` before the branch was named; that
|
|
896
|
+
// call still compiles and seeds the rules without the sentence.
|
|
897
|
+
expect(await seed({ layout: DEFAULT_KB_LAYOUT }, 'seed-rules-layout-only')).toBe(sharedFileRulesSection(DEFAULT_KB_LAYOUT, ''));
|
|
898
|
+
});
|
|
899
|
+
|
|
876
900
|
it('seeds the layout in effect when it seeds, not the one it was composed under', async () => {
|
|
877
901
|
const templateDir = path.join(root, 'seed-template-layout');
|
|
878
902
|
await fs.mkdir(templateDir, { recursive: true });
|
|
879
903
|
await fs.writeFile(path.join(templateDir, 'access.md'), 'policy', 'utf8');
|
|
880
904
|
// Composed at boot, under the defaults…
|
|
881
|
-
const seed = buildSeedTree(
|
|
905
|
+
const seed = buildSeedTree(realDisk(), templateDir, [], ['admin@example.com'], kbContext);
|
|
882
906
|
// …and run after the completing save applied the admin's names.
|
|
883
907
|
kbContext.applyLayout({ knowledgeBaseDir: 'Docs', skillsDir: 'skills', pluginsDir: 'Plugins' });
|
|
884
908
|
const dest = path.join(root, 'seed-dest-layout');
|
|
@@ -890,7 +914,7 @@ describe('buildSeedTree', () => {
|
|
|
890
914
|
it('seeds no guide, and no rule hiding one: the platform serves the guide', async () => {
|
|
891
915
|
const dest = path.join(root, 'seed-dest-no-guide');
|
|
892
916
|
await fs.mkdir(dest, { recursive: true });
|
|
893
|
-
await buildSeedTree(
|
|
917
|
+
await buildSeedTree(realDisk(), TEMPLATE_DIR, [], ['admin@example.com'], kbContext)(dest);
|
|
894
918
|
expect(await exists(dest, 'AGENTS.md')).toBe(false);
|
|
895
919
|
expect(await exists(dest, 'CLAUDE.md')).toBe(false);
|
|
896
920
|
const ignore = norm(await fs.readFile(path.join(dest, '.bevelignore'), 'utf8')).split('\n').map((l) => l.trim());
|
|
@@ -913,7 +937,7 @@ describe('buildSeedTree', () => {
|
|
|
913
937
|
await fs.writeFile(path.join(stale, 'LEGACY-GUIDE.MD'), MANAGED_GUIDE_COPY, 'utf8');
|
|
914
938
|
const staleDest = path.join(root, 'seed-dest-stale-guide');
|
|
915
939
|
await fs.mkdir(staleDest, { recursive: true });
|
|
916
|
-
await buildSeedTree(
|
|
940
|
+
await buildSeedTree(realDisk(), stale, [], ['admin@example.com'], kbContext)(staleDest);
|
|
917
941
|
expect(await exists(staleDest, 'AGENTS.md')).toBe(false);
|
|
918
942
|
expect(await exists(staleDest, 'OLD-GUIDE.md')).toBe(false);
|
|
919
943
|
expect(await exists(staleDest, 'LEGACY-GUIDE.MD')).toBe(false);
|
|
@@ -925,14 +949,14 @@ describe('buildSeedTree', () => {
|
|
|
925
949
|
await fs.writeFile(path.join(own, 'AGENTS.md'), '# Acme conventions\n', 'utf8');
|
|
926
950
|
const ownDest = path.join(root, 'seed-dest-own-guide');
|
|
927
951
|
await fs.mkdir(ownDest, { recursive: true });
|
|
928
|
-
await buildSeedTree(
|
|
952
|
+
await buildSeedTree(realDisk(), own, [], ['admin@example.com'], kbContext)(ownDest);
|
|
929
953
|
expect(norm(await fs.readFile(path.join(ownDest, 'AGENTS.md'), 'utf8'))).toBe('# Acme conventions\n');
|
|
930
954
|
});
|
|
931
955
|
|
|
932
956
|
it('names a template that is not there — a missing directory is a broken build, not an empty seed', async () => {
|
|
933
957
|
const dest = path.join(root, 'seed-dest-missing');
|
|
934
958
|
await fs.mkdir(dest, { recursive: true });
|
|
935
|
-
await expect(buildSeedTree(
|
|
959
|
+
await expect(buildSeedTree(realDisk(),path.join(root, 'no-such-template'), [], ['admin@example.com'], kbContext)(dest)).rejects.toThrow(
|
|
936
960
|
/KB template ".*no-such-template" is not a directory/,
|
|
937
961
|
);
|
|
938
962
|
});
|
|
@@ -948,7 +972,7 @@ describe('buildSeedTree', () => {
|
|
|
948
972
|
|
|
949
973
|
const dest = path.join(root, 'seed-dest-links');
|
|
950
974
|
await fs.mkdir(dest, { recursive: true });
|
|
951
|
-
await buildSeedTree(
|
|
975
|
+
await buildSeedTree(realDisk(),templateDir, [], ['admin@example.com'], kbContext)(dest);
|
|
952
976
|
// The link's CONTENT, under the link's own name, as a real file.
|
|
953
977
|
expect(await fs.readFile(path.join(dest, 'docs/linked.md'), 'utf8')).toBe('shared');
|
|
954
978
|
expect((await fs.lstat(path.join(dest, 'docs/linked.md'))).isSymbolicLink()).toBe(false);
|
|
@@ -957,7 +981,7 @@ describe('buildSeedTree', () => {
|
|
|
957
981
|
await fs.symlink(path.join(root, 'nowhere.md'), path.join(templateDir, 'dangling.md'), 'file');
|
|
958
982
|
const dest2 = path.join(root, 'seed-dest-links-2');
|
|
959
983
|
await fs.mkdir(dest2, { recursive: true });
|
|
960
|
-
await expect(buildSeedTree(
|
|
984
|
+
await expect(buildSeedTree(realDisk(),templateDir, [], ['admin@example.com'], kbContext)(dest2)).rejects.toThrow(
|
|
961
985
|
/KB template entry "dangling.md" links to nothing/,
|
|
962
986
|
);
|
|
963
987
|
// …and so is a link to a folder, named for what it is.
|
|
@@ -965,7 +989,7 @@ describe('buildSeedTree', () => {
|
|
|
965
989
|
await fs.symlink(elsewhere, path.join(templateDir, 'dirlink'), process.platform === 'win32' ? 'junction' : 'dir');
|
|
966
990
|
const dest3 = path.join(root, 'seed-dest-links-3');
|
|
967
991
|
await fs.mkdir(dest3, { recursive: true });
|
|
968
|
-
await expect(buildSeedTree(
|
|
992
|
+
await expect(buildSeedTree(realDisk(),templateDir, [], ['admin@example.com'], kbContext)(dest3)).rejects.toThrow(
|
|
969
993
|
/KB template entry "dirlink" links to a directory/,
|
|
970
994
|
);
|
|
971
995
|
});
|
|
@@ -983,7 +1007,7 @@ describe('buildSeedTree', () => {
|
|
|
983
1007
|
|
|
984
1008
|
const dest = path.join(root, 'proto-dest');
|
|
985
1009
|
await fs.mkdir(dest, { recursive: true });
|
|
986
|
-
await buildSeedTree(
|
|
1010
|
+
await buildSeedTree(realDisk(), templateDir, [], ['admin@example.com'], kbContext)(dest);
|
|
987
1011
|
expect(await fs.readFile(path.join(dest, 'constructor'), 'utf8')).toBe('not a function');
|
|
988
1012
|
expect(await fs.readFile(path.join(dest, 'toString'), 'utf8')).toBe('nor this');
|
|
989
1013
|
});
|
|
@@ -1015,7 +1039,7 @@ describe('PluginManifestsStep', () => {
|
|
|
1015
1039
|
'Plugins/deps/node_modules/some-pkg/SKILL.md': '---\ndescription: z\n---\n',
|
|
1016
1040
|
});
|
|
1017
1041
|
|
|
1018
|
-
await makeRunner([new PluginManifestsStep(
|
|
1042
|
+
await makeRunner([new PluginManifestsStep(realDisk(), kbContext)]).runAll();
|
|
1019
1043
|
|
|
1020
1044
|
for (const branch of PROTECTED) {
|
|
1021
1045
|
const dir = await checkout(branch);
|
|
@@ -1034,7 +1058,7 @@ describe('PluginManifestsStep', () => {
|
|
|
1034
1058
|
expect(log).toContain('Plugins/GTM: plugin.json written');
|
|
1035
1059
|
|
|
1036
1060
|
// Idempotent: nothing left to write on the next boot.
|
|
1037
|
-
await makeRunner([new PluginManifestsStep(
|
|
1061
|
+
await makeRunner([new PluginManifestsStep(realDisk(), kbContext)]).runAll();
|
|
1038
1062
|
const again = await checkout(DEFAULT_BRANCH);
|
|
1039
1063
|
expect((await git(again, ['rev-list', '--count', 'HEAD'])).trim()).toBe('2'); // init + one migration commit
|
|
1040
1064
|
});
|
|
@@ -1069,7 +1093,7 @@ describe('PluginDisplayNamesStep', () => {
|
|
|
1069
1093
|
'Plugins/functional/cluster/example/plugin.bundle.json': '{"name":"example"}',
|
|
1070
1094
|
});
|
|
1071
1095
|
|
|
1072
|
-
await makeRunner([new PluginDisplayNamesStep(
|
|
1096
|
+
await makeRunner([new PluginDisplayNamesStep(realDisk(), kbContext)]).runAll();
|
|
1073
1097
|
|
|
1074
1098
|
for (const branch of PROTECTED) {
|
|
1075
1099
|
const dir = await checkout(branch);
|
|
@@ -1101,7 +1125,7 @@ describe('PluginDisplayNamesStep', () => {
|
|
|
1101
1125
|
expect(log).toContain('Plugins/Sales Team: displayName "Sales Team"');
|
|
1102
1126
|
|
|
1103
1127
|
// Idempotent: every manifest it would touch now carries the field.
|
|
1104
|
-
await makeRunner([new PluginDisplayNamesStep(
|
|
1128
|
+
await makeRunner([new PluginDisplayNamesStep(realDisk(), kbContext)]).runAll();
|
|
1105
1129
|
const again = await checkout(DEFAULT_BRANCH);
|
|
1106
1130
|
expect((await git(again, ['rev-list', '--count', 'HEAD'])).trim()).toBe('2'); // init + one backfill commit
|
|
1107
1131
|
});
|
|
@@ -1138,7 +1162,7 @@ describe('PluginDisplayNamesStep', () => {
|
|
|
1138
1162
|
{ 'Plugins/Kit Pro/plugin.json': '../../vendor-manifest.json' },
|
|
1139
1163
|
);
|
|
1140
1164
|
|
|
1141
|
-
await makeRunner([new PluginDisplayNamesStep(
|
|
1165
|
+
await makeRunner([new PluginDisplayNamesStep(realDisk(), kbContext)]).runAll();
|
|
1142
1166
|
|
|
1143
1167
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
1144
1168
|
expect(await readJson(dir, 'Plugins/Growth Team/plugin.json')).toEqual({
|
|
@@ -1160,7 +1184,7 @@ describe('PluginDisplayNamesStep', () => {
|
|
|
1160
1184
|
expect(log).not.toContain('Kit Pro');
|
|
1161
1185
|
|
|
1162
1186
|
// Idempotent over all of it: the next boot finds nothing to write.
|
|
1163
|
-
await makeRunner([new PluginDisplayNamesStep(
|
|
1187
|
+
await makeRunner([new PluginDisplayNamesStep(realDisk(), kbContext)]).runAll();
|
|
1164
1188
|
const again = await checkout(DEFAULT_BRANCH);
|
|
1165
1189
|
expect((await git(again, ['rev-list', '--count', 'HEAD'])).trim()).toBe('2'); // init + one backfill commit
|
|
1166
1190
|
});
|
|
@@ -1174,7 +1198,7 @@ describe('PluginDisplayNamesStep', () => {
|
|
|
1174
1198
|
'Plugins/Sales Team/access.md': '---\n---\nread:\n - everyone\n',
|
|
1175
1199
|
});
|
|
1176
1200
|
|
|
1177
|
-
await makeRunner([new PluginManifestsStep(
|
|
1201
|
+
await makeRunner([new PluginManifestsStep(realDisk(), kbContext), new PluginDisplayNamesStep(realDisk(), kbContext)]).runAll();
|
|
1178
1202
|
|
|
1179
1203
|
const dir = await checkout(DEFAULT_BRANCH);
|
|
1180
1204
|
expect(await readJson(dir, 'Plugins/Sales Team/plugin.json')).toEqual({
|
|
@@ -1232,7 +1256,7 @@ describe('PersonalSpacesStep', () => {
|
|
|
1232
1256
|
await git(seed, ['checkout', '-b', 'ali/draft']);
|
|
1233
1257
|
await git(seed, ['push', 'origin', 'ali/draft']);
|
|
1234
1258
|
|
|
1235
|
-
await makeRunner([new PersonalSpacesStep(
|
|
1259
|
+
await makeRunner([new PersonalSpacesStep(realDisk(), kbContext)]).runAll();
|
|
1236
1260
|
|
|
1237
1261
|
for (const branch of [...PROTECTED, 'ali/draft']) {
|
|
1238
1262
|
const dir = await checkout(branch);
|
|
@@ -1288,7 +1312,7 @@ describe('PersonalSpacesStep', () => {
|
|
|
1288
1312
|
expect(log).toContain('Plugins/personal-u5/access.md: read denies everyone');
|
|
1289
1313
|
|
|
1290
1314
|
// Idempotent: the next boot finds every space already closed.
|
|
1291
|
-
await makeRunner([new PersonalSpacesStep(
|
|
1315
|
+
await makeRunner([new PersonalSpacesStep(realDisk(), kbContext)]).runAll();
|
|
1292
1316
|
const again = await checkout(DEFAULT_BRANCH);
|
|
1293
1317
|
expect((await git(again, ['rev-list', '--count', 'HEAD'])).trim()).toBe('2');
|
|
1294
1318
|
});
|
|
@@ -1317,7 +1341,7 @@ describe('GroupsToPluginsStep', () => {
|
|
|
1317
1341
|
await git(seed, ['checkout', '-b', 'alice/draft']);
|
|
1318
1342
|
await git(seed, ['push', 'origin', 'alice/draft']);
|
|
1319
1343
|
|
|
1320
|
-
await makeRunner([new GroupsToPluginsStep(
|
|
1344
|
+
await makeRunner([new GroupsToPluginsStep(realDisk(), kbContext)]).runAll();
|
|
1321
1345
|
|
|
1322
1346
|
for (const b of [DEFAULT_BRANCH, 'alice/draft']) {
|
|
1323
1347
|
const dir = await checkout(b);
|
|
@@ -1352,7 +1376,7 @@ describe('GroupsToPluginsStep', () => {
|
|
|
1352
1376
|
// silently skipping a branch whose reserved root cannot be a plugin tree
|
|
1353
1377
|
// (and on a draft nothing later would ever report it).
|
|
1354
1378
|
await seedUpstream({ Plugins: 'i am a file, not a folder' });
|
|
1355
|
-
await expect(makeRunner([new GroupsToPluginsStep(
|
|
1379
|
+
await expect(makeRunner([new GroupsToPluginsStep(realDisk(), kbContext)]).runAll()).rejects.toThrow(
|
|
1356
1380
|
/"Plugins" exists but is not a directory/,
|
|
1357
1381
|
);
|
|
1358
1382
|
});
|
|
@@ -1364,7 +1388,7 @@ describe('GroupsToPluginsStep', () => {
|
|
|
1364
1388
|
'Plugins/B/y.md': 'new',
|
|
1365
1389
|
});
|
|
1366
1390
|
await makeRunner([
|
|
1367
|
-
new GroupsToPluginsStep(
|
|
1391
|
+
new GroupsToPluginsStep(realDisk(), kbContext),
|
|
1368
1392
|
// A later step dirties the branch so the refusal note surfaces in the commit.
|
|
1369
1393
|
step('dirty', async (ctx) => {
|
|
1370
1394
|
for (const b of await ctx.protectedBranches()) {
|
|
@@ -1394,7 +1418,7 @@ describe('GroupsToPluginsStep', () => {
|
|
|
1394
1418
|
*/
|
|
1395
1419
|
describe('GroupsToPluginsStep — migration edge cases', () => {
|
|
1396
1420
|
async function migrate(): Promise<void> {
|
|
1397
|
-
await makeRunner([new GroupsToPluginsStep(
|
|
1421
|
+
await makeRunner([new GroupsToPluginsStep(realDisk(), kbContext)]).runAll();
|
|
1398
1422
|
}
|
|
1399
1423
|
|
|
1400
1424
|
/** What the runner's `partial` warning carried — the named refusals. */
|