@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
|
@@ -3,13 +3,23 @@ import type { IToolRegistry, UtcpTool } from '../tool-registry/index.js';
|
|
|
3
3
|
import { GET_AGENT_GUIDE_TOOL, TOOL_DESCRIPTION_CAP } from '../tool-registry/index.js';
|
|
4
4
|
import { ToolError, toolDef } from '../tool-helpers/index.js';
|
|
5
5
|
import type { ToolHandlerFactory } from '../tool-helpers/index.js';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
AGENT_GUIDE_FILE,
|
|
8
|
+
START_HERE_SECTION_ID,
|
|
9
|
+
WHOLE_GUIDE_SECTION,
|
|
10
|
+
joinGuideSections,
|
|
11
|
+
type AgentGuideSectionsReader,
|
|
12
|
+
} from './agent-guide.js';
|
|
7
13
|
|
|
8
14
|
export { GET_AGENT_GUIDE_TOOL };
|
|
9
15
|
|
|
10
16
|
/**
|
|
11
|
-
* The one tool that returns the guide on its own
|
|
12
|
-
*
|
|
17
|
+
* The one tool that returns the guide on its own: the start section when no
|
|
18
|
+
* section is named, one section by id, or the whole guide (`all`). Start
|
|
19
|
+
* section by default because this is the call every tool description tells
|
|
20
|
+
* an agent, and each sub-agent it starts, to make first: answering it with
|
|
21
|
+
* the whole guide made the most-read text the platform has also its longest.
|
|
22
|
+
* It takes nothing else: the guide is the platform's text for this
|
|
13
23
|
* deployment, the same for every caller and every branch, and reading it
|
|
14
24
|
* touches no file — so no `branch`, no `sessionId`, and no access gate. The
|
|
15
25
|
* other way to the same text is a `read_file` of `AGENTS.md` at the
|
|
@@ -33,27 +43,30 @@ export function registerAgentGuideTool(
|
|
|
33
43
|
const build = async (): Promise<UtcpTool> => {
|
|
34
44
|
const list = await sections();
|
|
35
45
|
const describe = (sectionList: string) =>
|
|
36
|
-
"The platform's guide to this knowledge base
|
|
37
|
-
'
|
|
38
|
-
'
|
|
39
|
-
'`section
|
|
46
|
+
"The platform's guide to this knowledge base. ALWAYS call this first, before anything else in the " +
|
|
47
|
+
'platform. With no `section` it returns the start section: the default branch every file tool takes, the ' +
|
|
48
|
+
'first-call rules, and which section answers which question. Then fetch only the section a task needs, by ' +
|
|
49
|
+
'`section`; only `"' +
|
|
50
|
+
WHOLE_GUIDE_SECTION +
|
|
51
|
+
'"` returns the whole guide. `read_file` on `' +
|
|
40
52
|
AGENT_GUIDE_FILE +
|
|
41
|
-
"` at the KB root
|
|
53
|
+
"` at the KB root answers with the same start section (after the knowledge base's own " +
|
|
42
54
|
AGENT_GUIDE_FILE +
|
|
43
|
-
` when it has one. Sections: ${sectionList}.`;
|
|
55
|
+
` when it has one). Returns \`{ guide }\` as markdown. Sections: ${sectionList}.`;
|
|
44
56
|
// The description stays under the cap WHATEVER a distribution adds, in
|
|
45
57
|
// three steps: every id with its title; every id alone; as many ids as
|
|
46
58
|
// fit and a count of the rest. An id a client cut off the end would be a
|
|
47
59
|
// section an agent cannot ask for — so nothing is ever cut: the one
|
|
48
|
-
// complete list of sections is `sections` on the
|
|
49
|
-
// which the description names when it cannot carry them
|
|
60
|
+
// complete list of sections is `sections` on the answer to a call
|
|
61
|
+
// without one, which the description names when it cannot carry them
|
|
62
|
+
// all itself.
|
|
50
63
|
const titled = describe(list.map((s) => `\`${s.id}\` (${s.title})`).join(', '));
|
|
51
64
|
const ids = list.map((s) => `\`${s.id}\``);
|
|
52
65
|
const counted = (shown: number) =>
|
|
53
66
|
describe(
|
|
54
67
|
shown === 0
|
|
55
|
-
? `${ids.length}, named under \`sections\` in the
|
|
56
|
-
: [...ids.slice(0, shown), `and ${ids.length - shown} more, all named under \`sections\` in the
|
|
68
|
+
? `${ids.length}, named under \`sections\` in the answer`
|
|
69
|
+
: [...ids.slice(0, shown), `and ${ids.length - shown} more, all named under \`sections\` in the answer`].join(', '),
|
|
57
70
|
);
|
|
58
71
|
let description = titled.length <= TOOL_DESCRIPTION_CAP ? titled : describe(ids.join(', '));
|
|
59
72
|
for (let shown = ids.length; description.length > TOOL_DESCRIPTION_CAP && shown > 0; shown--) {
|
|
@@ -69,8 +82,10 @@ export function registerAgentGuideTool(
|
|
|
69
82
|
section: {
|
|
70
83
|
type: 'string',
|
|
71
84
|
description:
|
|
72
|
-
'Optional: the id of one section to read
|
|
73
|
-
'
|
|
85
|
+
'Optional: the id of one section to read (the ids are listed in this description, and every one under ' +
|
|
86
|
+
'`sections` in the answer), or `"' +
|
|
87
|
+
WHOLE_GUIDE_SECTION +
|
|
88
|
+
'"` for the whole guide. Omit it for the start section.',
|
|
74
89
|
},
|
|
75
90
|
},
|
|
76
91
|
additionalProperties: false,
|
|
@@ -78,18 +93,18 @@ export function registerAgentGuideTool(
|
|
|
78
93
|
outputs: {
|
|
79
94
|
type: 'object',
|
|
80
95
|
properties: {
|
|
81
|
-
guide: { type: 'string', description: 'The
|
|
96
|
+
guide: { type: 'string', description: 'The section asked for (the start section by default), or the whole guide, as markdown.' },
|
|
82
97
|
sections: {
|
|
83
98
|
type: 'array',
|
|
84
|
-
description:
|
|
99
|
+
description: `Without \`section\`, or with \`"${WHOLE_GUIDE_SECTION}"\`: every section of the guide, in order, by id and heading — the complete list.`,
|
|
85
100
|
items: {
|
|
86
101
|
type: 'object',
|
|
87
102
|
properties: { id: { type: 'string' }, title: { type: 'string' } },
|
|
88
103
|
required: ['id', 'title'],
|
|
89
104
|
},
|
|
90
105
|
},
|
|
91
|
-
section: { type: 'string', description: '
|
|
92
|
-
title: { type: 'string', description: '
|
|
106
|
+
section: { type: 'string', description: 'The id of the one section returned.' },
|
|
107
|
+
title: { type: 'string', description: 'Its heading.' },
|
|
93
108
|
},
|
|
94
109
|
required: ['guide'],
|
|
95
110
|
},
|
|
@@ -104,24 +119,27 @@ export function registerAgentGuideTool(
|
|
|
104
119
|
toolAuth,
|
|
105
120
|
toolHandler(async (args, ctx) => {
|
|
106
121
|
const list = await sections();
|
|
122
|
+
const index = list.map((s) => ({ id: s.id, title: s.title }));
|
|
107
123
|
const wanted = typeof args.section === 'string' ? args.section.trim() : '';
|
|
108
|
-
// A
|
|
109
|
-
//
|
|
110
|
-
|
|
124
|
+
// A distribution that dropped the start section gets the whole guide by
|
|
125
|
+
// default, as before there was one: never an answer with nothing in it.
|
|
126
|
+
const start = list.find((s) => s.id === START_HERE_SECTION_ID);
|
|
127
|
+
// A connection made as an agent configuration is told so at the top of
|
|
128
|
+
// the guide's first answer and of the whole guide: the catalog it
|
|
129
|
+
// describes is narrowed to that agent. Everything is told nothing new,
|
|
130
|
+
// so its guide is the same text.
|
|
111
131
|
const connection = ctx.connectionScope?.describe() ?? null;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
};
|
|
119
|
-
}
|
|
132
|
+
const told = (guide: string) => ({
|
|
133
|
+
guide: connection ? `> ${connection}\n\n${guide}` : guide,
|
|
134
|
+
...(connection ? { connection } : {}),
|
|
135
|
+
});
|
|
136
|
+
if (wanted === WHOLE_GUIDE_SECTION || (!wanted && !start)) return { ...told(joinGuideSections(list)), sections: index };
|
|
137
|
+
if (!wanted) return { ...told(start!.body), section: start!.id, title: start!.title, sections: index };
|
|
120
138
|
const one = list.find((s) => s.id === wanted);
|
|
121
139
|
if (!one) {
|
|
122
140
|
throw new ToolError(
|
|
123
141
|
`The guide has no section "${wanted}". Sections: ${list.map((s) => `\`${s.id}\``).join(', ')}. ` +
|
|
124
|
-
|
|
142
|
+
`Omit \`section\` for the start section, or pass \`"${WHOLE_GUIDE_SECTION}"\` for the whole guide.`,
|
|
125
143
|
400,
|
|
126
144
|
);
|
|
127
145
|
}
|
|
@@ -20,10 +20,17 @@
|
|
|
20
20
|
* The sections ship as markdown files in the package's `agent-guide/` folder
|
|
21
21
|
* (see `assets.ts`), one per section, with the layout placeholders the old
|
|
22
22
|
* template carried (`{{knowledgeBaseDir}}`, `{{skillsDir}}`, `{{pluginsDir}}`,
|
|
23
|
-
* `{{agentsFile}}`)
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
23
|
+
* `{{agentsFile}}`), the checkout folder's `{{kbDirName}}` and the default
|
|
24
|
+
* branch's `{{defaultBranch}}`. ONE section is computed rather than read: the
|
|
25
|
+
* rules every file tool shares, which the MCP handshake also sends — the same
|
|
26
|
+
* string in both places, from `shared-file-rules.ts`, so a rule cannot be
|
|
27
|
+
* changed in one and left stale in the other.
|
|
28
|
+
*
|
|
29
|
+
* The guide is LAYERED (see openspec/changes/agent-guide-layers/design.md):
|
|
30
|
+
* `get_agent_guide` with no section answers with the short start section
|
|
31
|
+
* ({@link START_HERE_SECTION_ID}), which says which section answers which
|
|
32
|
+
* question, and an agent fetches the others by id when a task needs them.
|
|
33
|
+
* Each section has a token budget (`guide-budget.ts`), held by a test.
|
|
27
34
|
*/
|
|
28
35
|
|
|
29
36
|
import fs from 'node:fs/promises';
|
|
@@ -34,6 +41,7 @@ import {
|
|
|
34
41
|
resolveKbLayout,
|
|
35
42
|
type KbLayout,
|
|
36
43
|
} from '@bevel-software/platform-shared';
|
|
44
|
+
import { ONBOARDING_GUIDE_SECTION_ID } from '@bevel-software/platform-mcp-core';
|
|
37
45
|
import { agentGuideDir } from '../../assets.js';
|
|
38
46
|
import { sharedFileRulesSection } from '../agent-instructions/index.js';
|
|
39
47
|
|
|
@@ -59,6 +67,13 @@ export interface AgentGuideSection {
|
|
|
59
67
|
* could only misread a folder name it STATES as a placeholder.
|
|
60
68
|
*/
|
|
61
69
|
literal?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* The question this section answers, as a row of the start section's
|
|
72
|
+
* "which section answers what" table. Core's sections are in that table
|
|
73
|
+
* already; a distribution sets it on a section it adds, so an agent that
|
|
74
|
+
* reads only the start section is routed to it.
|
|
75
|
+
*/
|
|
76
|
+
asks?: string;
|
|
62
77
|
}
|
|
63
78
|
|
|
64
79
|
/**
|
|
@@ -79,6 +94,19 @@ export type AgentGuideReader = () => Promise<string>;
|
|
|
79
94
|
/** The computed section: the rules every file tool shares. */
|
|
80
95
|
export const WORKING_WITH_FILES_SECTION_ID = 'working-with-files';
|
|
81
96
|
|
|
97
|
+
/**
|
|
98
|
+
* The sections a hook may neither drop nor empty, because something outside
|
|
99
|
+
* the guide points an agent at them by id (see `composeAgentGuide`).
|
|
100
|
+
*/
|
|
101
|
+
const REQUIRED_SECTIONS: readonly { id: string; pointedAtBy: string; content: string }[] = Object.freeze([
|
|
102
|
+
{ id: WORKING_WITH_FILES_SECTION_ID, pointedAtBy: 'which every file tool points at', content: 'the rules' },
|
|
103
|
+
{
|
|
104
|
+
id: ONBOARDING_GUIDE_SECTION_ID,
|
|
105
|
+
pointedAtBy: "which the platform's `onboard` prompt points at",
|
|
106
|
+
content: 'an onboarding flow',
|
|
107
|
+
},
|
|
108
|
+
]);
|
|
109
|
+
|
|
82
110
|
/**
|
|
83
111
|
* What to do on a knowledge base nobody has written in yet: the section the
|
|
84
112
|
* `firstRun` note `start_session` answers with points at (see
|
|
@@ -86,21 +114,37 @@ export const WORKING_WITH_FILES_SECTION_ID = 'working-with-files';
|
|
|
86
114
|
*/
|
|
87
115
|
export const NEW_KNOWLEDGE_BASE_SECTION_ID = 'new-knowledge-base';
|
|
88
116
|
|
|
117
|
+
/**
|
|
118
|
+
* The first-contact section: what `get_agent_guide` answers when no section is
|
|
119
|
+
* named. Short on purpose, and the one place that maps each question to the
|
|
120
|
+
* section answering it, so an agent fetches one section rather than the guide.
|
|
121
|
+
*/
|
|
122
|
+
export const START_HERE_SECTION_ID = 'start-here';
|
|
123
|
+
|
|
124
|
+
/** The `section` that asks `get_agent_guide` for every section at once. */
|
|
125
|
+
export const WHOLE_GUIDE_SECTION = 'all';
|
|
126
|
+
|
|
89
127
|
/**
|
|
90
128
|
* Core's sections, in reading order. Every id but the shared-rules one names
|
|
91
129
|
* a file in the package's `agent-guide/` folder.
|
|
92
130
|
*/
|
|
93
131
|
export const CORE_SECTION_IDS: readonly string[] = Object.freeze([
|
|
94
|
-
|
|
132
|
+
START_HERE_SECTION_ID,
|
|
133
|
+
// Named in mcp-core, where the platform's `/onboard` prompt points at it.
|
|
134
|
+
ONBOARDING_GUIDE_SECTION_ID,
|
|
135
|
+
'how-agents-find-things',
|
|
136
|
+
'for-git-users',
|
|
137
|
+
'glossary',
|
|
95
138
|
'directory-structure',
|
|
96
139
|
'where-a-new-file-goes',
|
|
97
140
|
WORKING_WITH_FILES_SECTION_ID,
|
|
98
141
|
'access-control',
|
|
142
|
+
'drafts-and-change-requests',
|
|
99
143
|
'skills',
|
|
144
|
+
'tools',
|
|
100
145
|
'tool-manuals',
|
|
101
146
|
'html-views',
|
|
102
147
|
'conventions',
|
|
103
|
-
'finding-things',
|
|
104
148
|
NEW_KNOWLEDGE_BASE_SECTION_ID,
|
|
105
149
|
]);
|
|
106
150
|
|
|
@@ -146,9 +190,10 @@ async function readCoreSectionFiles(): Promise<ReadonlyMap<string, string>> {
|
|
|
146
190
|
/**
|
|
147
191
|
* Core's sections for `layout`: the files, placeholders unrendered, with the
|
|
148
192
|
* shared-rules section computed and in its place. What a distribution's hook
|
|
149
|
-
* is handed.
|
|
193
|
+
* is handed. `defaultBranch` is the branch the shared rules name (see
|
|
194
|
+
* {@link AgentGuideContext.defaultBranch}).
|
|
150
195
|
*/
|
|
151
|
-
export async function coreAgentGuideSections(layout: KbLayout): Promise<AgentGuideSection[]> {
|
|
196
|
+
export async function coreAgentGuideSections(layout: KbLayout, defaultBranch = ''): Promise<AgentGuideSection[]> {
|
|
152
197
|
coreSectionFiles ??= readCoreSectionFiles();
|
|
153
198
|
let files: ReadonlyMap<string, string>;
|
|
154
199
|
try {
|
|
@@ -160,7 +205,7 @@ export async function coreAgentGuideSections(layout: KbLayout): Promise<AgentGui
|
|
|
160
205
|
}
|
|
161
206
|
return CORE_SECTION_IDS.map((id) =>
|
|
162
207
|
id === WORKING_WITH_FILES_SECTION_ID
|
|
163
|
-
? { id, body: sharedFileRulesSection(layout), literal: true }
|
|
208
|
+
? { id, body: sharedFileRulesSection(layout, defaultBranch), literal: true }
|
|
164
209
|
: { id, body: files.get(id)! },
|
|
165
210
|
);
|
|
166
211
|
}
|
|
@@ -174,11 +219,22 @@ export interface AgentGuideContext {
|
|
|
174
219
|
* deployment's tools report back.
|
|
175
220
|
*/
|
|
176
221
|
kbDirName?: string;
|
|
222
|
+
/**
|
|
223
|
+
* The knowledge base's default branch, rendered into `{{defaultBranch}}` so
|
|
224
|
+
* the start section names the branch every file tool's `branch` takes for
|
|
225
|
+
* what is live, and named by the shared file rules in the same sentence the
|
|
226
|
+
* MCP handshake carries. Read when the guide is composed: a fresh deployment
|
|
227
|
+
* gets its branch model from the setup screen after the services are built.
|
|
228
|
+
*/
|
|
229
|
+
defaultBranch?: string;
|
|
177
230
|
}
|
|
178
231
|
|
|
179
232
|
/** The checkout folder's name when none is given — core's own default. */
|
|
180
233
|
const DEFAULT_KB_DIR_NAME = 'knowledge-base';
|
|
181
234
|
|
|
235
|
+
/** What `{{defaultBranch}}` reads as when no branch is configured yet: a name no branch can have. */
|
|
236
|
+
const UNCONFIGURED_DEFAULT_BRANCH = '<the default branch>';
|
|
237
|
+
|
|
182
238
|
/** One section of the guide as an agent reads it: rendered, with the heading's text as its title. */
|
|
183
239
|
export interface RenderedGuideSection {
|
|
184
240
|
id: string;
|
|
@@ -197,16 +253,23 @@ export type AgentGuideSectionsReader = () => Promise<RenderedGuideSection[]>;
|
|
|
197
253
|
* with its title. The whole guide is these joined (see
|
|
198
254
|
* {@link composeAgentGuide}); `get_agent_guide` also serves one at a time.
|
|
199
255
|
*
|
|
200
|
-
* A hook may append, replace and drop sections
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
256
|
+
* A hook may append, replace and drop sections. It replaces one by returning
|
|
257
|
+
* its own under the same id, beside core's or in its place: of two sections
|
|
258
|
+
* under one id the LAST is served, where the FIRST stood, so a distribution
|
|
259
|
+
* overrides core's `start-here` or `html-views` by adding its own and the
|
|
260
|
+
* guide keeps its order (see {@link oneSectionPerId}). TWO exceptions, the
|
|
261
|
+
* sections something outside the guide points an agent at by id
|
|
262
|
+
* (`REQUIRED_SECTIONS`): the shared file rules
|
|
263
|
+
* ({@link WORKING_WITH_FILES_SECTION_ID}), which every file tool names — a
|
|
264
|
+
* client that drops the handshake instructions has the guide as the only
|
|
265
|
+
* place to read them — and the onboarding section
|
|
266
|
+
* ({@link ONBOARDING_GUIDE_SECTION_ID}), which the platform's `onboard`
|
|
267
|
+
* prompt sends an agent to. Each must come back WITH TEXT IN IT, as core's
|
|
268
|
+
* or as the hook's own replacement. A hook that drops one, or hands it back
|
|
269
|
+
* empty, is a composition error, thrown rather than served. Judged on what
|
|
270
|
+
* would be SERVED — the rendered, trimmed body — so a replacement of
|
|
271
|
+
* whitespace is caught like a missing one, rather than passing the check and
|
|
272
|
+
* vanishing with the other empty sections below.
|
|
210
273
|
*/
|
|
211
274
|
export async function agentGuideSections(
|
|
212
275
|
layout: KbLayout,
|
|
@@ -214,29 +277,86 @@ export async function agentGuideSections(
|
|
|
214
277
|
context: AgentGuideContext = {},
|
|
215
278
|
): Promise<RenderedGuideSection[]> {
|
|
216
279
|
const resolved = resolveKbLayout(layout);
|
|
217
|
-
const core = await coreAgentGuideSections(resolved);
|
|
218
|
-
const sections = hook ? await hook(core, resolved) : core;
|
|
280
|
+
const core = await coreAgentGuideSections(resolved, context.defaultBranch);
|
|
281
|
+
const sections = withRoutes(oneSectionPerId(hook ? await hook(core, resolved) : core));
|
|
219
282
|
const kbDirName = context.kbDirName?.trim() || DEFAULT_KB_DIR_NAME;
|
|
283
|
+
const defaultBranch = context.defaultBranch?.trim() || UNCONFIGURED_DEFAULT_BRANCH;
|
|
220
284
|
const rendered = sections.map((section) => {
|
|
221
285
|
const body = (
|
|
222
286
|
section.literal
|
|
223
287
|
? section.body
|
|
224
|
-
: renderKbLayoutPlaceholders(
|
|
288
|
+
: renderKbLayoutPlaceholders(
|
|
289
|
+
section.body
|
|
290
|
+
.replaceAll('{{kbDirName}}', () => kbDirName)
|
|
291
|
+
.replaceAll('{{defaultBranch}}', () => defaultBranch),
|
|
292
|
+
resolved,
|
|
293
|
+
)
|
|
225
294
|
).trim();
|
|
226
295
|
return { id: section.id, title: titleOf(body, section.id), body };
|
|
227
296
|
});
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
);
|
|
297
|
+
// One section per id by now (`oneSectionPerId`), so a hook's own version
|
|
298
|
+
// of the rules is what is judged, on what survives the empty-body filter
|
|
299
|
+
// below.
|
|
300
|
+
// Two sections something outside the guide points at, so a hook may not
|
|
301
|
+
// take them away: the file tools name the rules, and the platform's
|
|
302
|
+
// `onboard` prompt sends an agent to the onboarding section by id.
|
|
303
|
+
for (const required of REQUIRED_SECTIONS) {
|
|
304
|
+
const found = rendered.filter((section) => section.id === required.id);
|
|
305
|
+
if (!found.some((section) => section.body.length > 0)) {
|
|
306
|
+
throw new Error(
|
|
307
|
+
`The agent guide hook ${found.length === 0 ? 'dropped' : 'emptied'} the "${required.id}" ` +
|
|
308
|
+
`section, ${required.pointedAtBy}. Keep it, or replace it under the same id with ${required.content} in it.`,
|
|
309
|
+
);
|
|
310
|
+
}
|
|
236
311
|
}
|
|
237
312
|
return rendered.filter((section) => section.body.length > 0);
|
|
238
313
|
}
|
|
239
314
|
|
|
315
|
+
/**
|
|
316
|
+
* One section per id. A hook that returns an id twice (its own version of a
|
|
317
|
+
* core section, added beside core's) means the later one: it is served in
|
|
318
|
+
* the earlier one's place, so a distribution overrides a section by adding
|
|
319
|
+
* its own under the same id, and the guide keeps core's order. Without this
|
|
320
|
+
* the whole guide carried both and `get_agent_guide` served the first, which
|
|
321
|
+
* was always core's.
|
|
322
|
+
*/
|
|
323
|
+
function oneSectionPerId(sections: readonly AgentGuideSection[]): readonly AgentGuideSection[] {
|
|
324
|
+
const at = new Map<string, number>();
|
|
325
|
+
const out: AgentGuideSection[] = [];
|
|
326
|
+
for (const section of sections) {
|
|
327
|
+
const index = at.get(section.id);
|
|
328
|
+
if (index === undefined) {
|
|
329
|
+
at.set(section.id, out.length);
|
|
330
|
+
out.push(section);
|
|
331
|
+
} else {
|
|
332
|
+
out[index] = section;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return out;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Adds a row to the start section's routing table for every section that
|
|
340
|
+
* says what it {@link AgentGuideSection.asks} and is not routed there yet.
|
|
341
|
+
* The rows go after the table's last row. A start section without the table
|
|
342
|
+
* (a distribution replaced it) is left as it is.
|
|
343
|
+
*/
|
|
344
|
+
function withRoutes(sections: readonly AgentGuideSection[]): readonly AgentGuideSection[] {
|
|
345
|
+
const start = sections.find((section) => section.id === START_HERE_SECTION_ID);
|
|
346
|
+
if (!start) return sections;
|
|
347
|
+
const routed = sections.filter((section) => section.asks?.trim() && !start.body.includes(`| \`${section.id}\` |`));
|
|
348
|
+
if (routed.length === 0) return sections;
|
|
349
|
+
const lines = start.body.split('\n');
|
|
350
|
+
const header = lines.findIndex((line) => /^\|\s*Question\s*\|\s*Section\s*\|/.test(line));
|
|
351
|
+
if (header < 0) return sections;
|
|
352
|
+
let last = header;
|
|
353
|
+
while (last + 1 < lines.length && lines[last + 1]!.startsWith('|')) last += 1;
|
|
354
|
+
const rows = routed.map((section) => `| ${section.asks!.trim().replaceAll('|', '\\|')} | \`${section.id}\` |`);
|
|
355
|
+
lines.splice(last + 1, 0, ...rows);
|
|
356
|
+
const body = lines.join('\n');
|
|
357
|
+
return sections.map((section) => (section === start ? { ...start, body } : section));
|
|
358
|
+
}
|
|
359
|
+
|
|
240
360
|
/**
|
|
241
361
|
* The heading's text, or the id when the section opens with no heading. An
|
|
242
362
|
* ATX heading may close with a run of `#` of its own (`## Custom ##`); that
|
|
@@ -260,6 +380,19 @@ export async function composeAgentGuide(
|
|
|
260
380
|
return joinGuideSections(await agentGuideSections(layout, hook, context));
|
|
261
381
|
}
|
|
262
382
|
|
|
383
|
+
/**
|
|
384
|
+
* What a `read_file` of the guide's name answers: the start section and the
|
|
385
|
+
* list of every section, the same as `get_agent_guide` with no `section`, so
|
|
386
|
+
* no read hands an agent the whole guide unless it asks for it. A guide
|
|
387
|
+
* without a start section (a distribution dropped it) is answered whole.
|
|
388
|
+
*/
|
|
389
|
+
export function guideStartText(sections: readonly RenderedGuideSection[]): string {
|
|
390
|
+
const start = sections.find((section) => section.id === START_HERE_SECTION_ID);
|
|
391
|
+
if (!start) return joinGuideSections(sections);
|
|
392
|
+
const list = sections.map((section) => `- \`${section.id}\`: ${section.title}`).join('\n');
|
|
393
|
+
return `${start.body}\n\n### Every section\n\n${list}\n`;
|
|
394
|
+
}
|
|
395
|
+
|
|
263
396
|
/** The sections as one document, the way `composeAgentGuide` joins them. */
|
|
264
397
|
export function joinGuideSections(sections: readonly RenderedGuideSection[]): string {
|
|
265
398
|
return `${sections.map((section) => section.body).join('\n\n')}\n`;
|
|
@@ -268,12 +401,12 @@ export function joinGuideSections(sections: readonly RenderedGuideSection[]): st
|
|
|
268
401
|
/**
|
|
269
402
|
* What a `read_file` of the guide's name answers when the knowledge base has an
|
|
270
403
|
* `AGENTS.md` of its own: their text first, whole, then a rule and one line
|
|
271
|
-
* saying what follows, then the platform's guide. Theirs first because it is
|
|
404
|
+
* saying what follows, then the start of the platform's guide. Theirs first because it is
|
|
272
405
|
* the more specific of the two, and the line between so neither is read as
|
|
273
406
|
* part of the other.
|
|
274
407
|
*/
|
|
275
408
|
export const PLATFORM_GUIDE_SEPARATOR =
|
|
276
|
-
"---\n\n_The text above is this knowledge base's own conventions file. The platform's guide follows; `get_agent_guide`
|
|
409
|
+
"---\n\n_The text above is this knowledge base's own conventions file. The start of the platform's guide follows; `get_agent_guide` with a `section` returns the rest._";
|
|
277
410
|
|
|
278
411
|
export function withPlatformGuideAppended(ownText: string, guide: string): string {
|
|
279
412
|
// Their text as they wrote it, line endings normalised and the trailing
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How much each layer of what an agent is told may cost, in tokens.
|
|
3
|
+
*
|
|
4
|
+
* Three layers (openspec/changes/agent-guide-layers/design.md): what every
|
|
5
|
+
* connection carries (the handshake instructions and the tool list), what an
|
|
6
|
+
* agent reads on first contact (the start section `get_agent_guide` answers
|
|
7
|
+
* with), and what it fetches only when a task needs it (every other section).
|
|
8
|
+
* A line in the first layer costs every conversation and every sub-agent; a
|
|
9
|
+
* line in the last costs only the tasks that fetch it. The budgets are what
|
|
10
|
+
* keeps the guide from growing into a document every agent loads whole and
|
|
11
|
+
* reads little of, which is what a customer's agent did fifteen times in one
|
|
12
|
+
* day.
|
|
13
|
+
*
|
|
14
|
+
* Counted with the `o200k_base` encoding by `__tests__/guide-budget.test.ts`.
|
|
15
|
+
* It is a real tokenizer that runs offline; it is not Claude's own, which
|
|
16
|
+
* usually counts somewhat more for the same text, so these are ceilings to
|
|
17
|
+
* compare against each other and over time rather than a model's bill.
|
|
18
|
+
*
|
|
19
|
+
* Every number is one a reviewer may move. The point of pinning them is that
|
|
20
|
+
* growing the guide is a decision someone takes, not a paragraph someone
|
|
21
|
+
* appends: a section that needs more room says why in the pull request that
|
|
22
|
+
* raises its line here.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/** The encoding the budgets are counted in. */
|
|
26
|
+
export const GUIDE_TOKEN_ENCODING = 'o200k_base';
|
|
27
|
+
|
|
28
|
+
/** The platform's part of the handshake instructions: the header and the shared file rules. */
|
|
29
|
+
export const INSTRUCTIONS_TOKEN_BUDGET = 2_000;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The platform's own tools as the hosted endpoint lists them to an MCP client:
|
|
33
|
+
* each name, description (with its `Call:` line and, on the four
|
|
34
|
+
* knowledge-base tools, the purpose prefix) and input schema. Measured over
|
|
35
|
+
* every registrar the root mounts, the change-request readers and `open_page`
|
|
36
|
+
* included: 46 tools, 17,278 tokens at 0.35.0 (an earlier figure of 15,710
|
|
37
|
+
* left those five out).
|
|
38
|
+
*/
|
|
39
|
+
export const TOOL_LIST_TOKEN_BUDGET = 17_500;
|
|
40
|
+
|
|
41
|
+
/** The ceiling for a section a distribution adds, which core's checks cannot see: the same as core's own. */
|
|
42
|
+
export const SECTION_TOKEN_BUDGET = 2_500;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Each core section's budget, by id. A section without a line here fails the
|
|
46
|
+
* budget test: a new section starts by saying what it may cost.
|
|
47
|
+
*/
|
|
48
|
+
export const SECTION_TOKEN_BUDGETS: Readonly<Record<string, number>> = Object.freeze({
|
|
49
|
+
'start-here': 1_200,
|
|
50
|
+
onboarding: SECTION_TOKEN_BUDGET,
|
|
51
|
+
'how-agents-find-things': SECTION_TOKEN_BUDGET,
|
|
52
|
+
'for-git-users': SECTION_TOKEN_BUDGET,
|
|
53
|
+
glossary: SECTION_TOKEN_BUDGET,
|
|
54
|
+
'directory-structure': SECTION_TOKEN_BUDGET,
|
|
55
|
+
'where-a-new-file-goes': SECTION_TOKEN_BUDGET,
|
|
56
|
+
'working-with-files': SECTION_TOKEN_BUDGET,
|
|
57
|
+
'access-control': SECTION_TOKEN_BUDGET,
|
|
58
|
+
'drafts-and-change-requests': SECTION_TOKEN_BUDGET,
|
|
59
|
+
skills: SECTION_TOKEN_BUDGET,
|
|
60
|
+
tools: SECTION_TOKEN_BUDGET,
|
|
61
|
+
'tool-manuals': SECTION_TOKEN_BUDGET,
|
|
62
|
+
// The page contract is long by nature (the frame, the bridge, the link
|
|
63
|
+
// rules, pages that load live data), and an agent fetches it only to build
|
|
64
|
+
// a page.
|
|
65
|
+
'html-views': 5_500,
|
|
66
|
+
conventions: SECTION_TOKEN_BUDGET,
|
|
67
|
+
'new-knowledge-base': SECTION_TOKEN_BUDGET,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Every core section at once: what `section: "all"` returns. 23,000 since the
|
|
72
|
+
* `onboarding` section (about 1,200) was added; 21,500 before.
|
|
73
|
+
*/
|
|
74
|
+
export const WHOLE_GUIDE_TOKEN_BUDGET = 23_000;
|
|
75
|
+
|
|
76
|
+
/** One task: the start section plus the sections it routes the task to. */
|
|
77
|
+
export const TASK_TOKEN_BUDGET = 6_000;
|
|
@@ -3,10 +3,13 @@ export {
|
|
|
3
3
|
CORE_SECTION_IDS,
|
|
4
4
|
NEW_KNOWLEDGE_BASE_SECTION_ID,
|
|
5
5
|
PLATFORM_GUIDE_SEPARATOR,
|
|
6
|
+
START_HERE_SECTION_ID,
|
|
7
|
+
WHOLE_GUIDE_SECTION,
|
|
6
8
|
WORKING_WITH_FILES_SECTION_ID,
|
|
7
9
|
agentGuideSections,
|
|
8
10
|
composeAgentGuide,
|
|
9
11
|
coreAgentGuideSections,
|
|
12
|
+
guideStartText,
|
|
10
13
|
isAgentGuidePath,
|
|
11
14
|
isManagedGuide,
|
|
12
15
|
joinGuideSections,
|
|
@@ -19,4 +22,13 @@ export {
|
|
|
19
22
|
type RenderedGuideSection,
|
|
20
23
|
} from './agent-guide.js';
|
|
21
24
|
export { GET_AGENT_GUIDE_TOOL, registerAgentGuideTool } from './agent-guide.tools.js';
|
|
25
|
+
export {
|
|
26
|
+
GUIDE_TOKEN_ENCODING,
|
|
27
|
+
INSTRUCTIONS_TOKEN_BUDGET,
|
|
28
|
+
SECTION_TOKEN_BUDGET,
|
|
29
|
+
SECTION_TOKEN_BUDGETS,
|
|
30
|
+
TASK_TOKEN_BUDGET,
|
|
31
|
+
TOOL_LIST_TOKEN_BUDGET,
|
|
32
|
+
WHOLE_GUIDE_TOKEN_BUDGET,
|
|
33
|
+
} from './guide-budget.js';
|
|
22
34
|
export { GUIDE_FIRST_SENTENCE, withGuideFirst } from '../tool-registry/index.js';
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import type { Server as HttpServer } from 'node:http';
|
|
2
2
|
import express from 'express';
|
|
3
3
|
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
4
|
-
import { createManualAuthMiddleware } from '
|
|
5
|
-
import type { IExternalApiKeyService } from '../../tool-auth/
|
|
6
|
-
import type {
|
|
7
|
-
import type { AuthService } from '../../auth/auth.service.js';
|
|
4
|
+
import { createManualAuthMiddleware } from '../../../__tests__/tool-wiring.js';
|
|
5
|
+
import type { IExternalApiKeyService, InternalTokenService } from '../../tool-auth/index.js';
|
|
6
|
+
import type { AuthService } from '../../auth/index.js';
|
|
8
7
|
import { createAgentInstructionsRoutes } from '../agent-instructions.routes.js';
|
|
9
8
|
import { DEFAULT_KB_LAYOUT } from '@bevel-software/platform-shared';
|
|
10
9
|
import { TOOL_PREFIX_LINE, platformInstructions } from '../compose.js';
|
|
11
10
|
|
|
12
11
|
/** The platform-owned text the route leads with: header + the shared file rules. */
|
|
13
|
-
const PLATFORM = platformInstructions(DEFAULT_KB_LAYOUT);
|
|
12
|
+
const PLATFORM = platformInstructions(DEFAULT_KB_LAYOUT, '');
|
|
14
13
|
|
|
15
14
|
/**
|
|
16
15
|
* `GET /agent/instructions` behind the REAL manual-auth gate, with the three
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
* The rules themselves are pinned in `shared-file-rules.test.ts`; here they are
|
|
22
22
|
* only the fixed text the preamble follows.
|
|
23
23
|
*/
|
|
24
|
-
const PLATFORM = platformInstructions(DEFAULT_KB_LAYOUT);
|
|
24
|
+
const PLATFORM = platformInstructions(DEFAULT_KB_LAYOUT, '');
|
|
25
25
|
|
|
26
26
|
describe('composeAgentInstructions: the handshake text', () => {
|
|
27
27
|
it('sends the platform text alone — header and shared rules — for an absent, empty, whitespace or comment-only preamble', () => {
|