@warpgogol/forge 4.2.4 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +13 -5
- package/dist/os/adr/handlers/list-create.d.ts.map +1 -1
- package/dist/os/adr/handlers/list-create.js +4 -1
- package/dist/os/adr/handlers/list-create.js.map +1 -1
- package/dist/os/adr/handlers/validate.d.ts.map +1 -1
- package/dist/os/adr/handlers/validate.js +6 -1
- package/dist/os/adr/handlers/validate.js.map +1 -1
- package/dist/os/adr/types.d.ts.map +1 -1
- package/dist/os/adr/types.js +7 -3
- package/dist/os/adr/types.js.map +1 -1
- package/dist/os/compass/compass.module.d.ts.map +1 -1
- package/dist/os/compass/compass.module.js +76 -10
- package/dist/os/compass/compass.module.js.map +1 -1
- package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-audit-handler.js +7 -3
- package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts +1 -9
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.js +44 -186
- package/dist/os/compass/handlers/compass-change-summary-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts +2 -0
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-inventory-handler.js +24 -12
- package/dist/os/compass/handlers/compass-inventory-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-inventory.d.ts +7 -5
- package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-inventory.js +84 -241
- package/dist/os/compass/handlers/compass-inventory.js.map +1 -1
- package/dist/os/compass/handlers/compass-migrate-handler.d.ts +4 -0
- package/dist/os/compass/handlers/compass-migrate-handler.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-migrate-handler.js +100 -0
- package/dist/os/compass/handlers/compass-migrate-handler.js.map +1 -0
- package/dist/os/compass/handlers/compass-migrate.d.ts +34 -0
- package/dist/os/compass/handlers/compass-migrate.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-migrate.js +273 -0
- package/dist/os/compass/handlers/compass-migrate.js.map +1 -0
- package/dist/os/compass/handlers/resolve-scan-root.d.ts.map +1 -1
- package/dist/os/compass/handlers/resolve-scan-root.js +15 -8
- package/dist/os/compass/handlers/resolve-scan-root.js.map +1 -1
- package/dist/os/compass/handlers/summary-record.d.ts +46 -0
- package/dist/os/compass/handlers/summary-record.d.ts.map +1 -0
- package/dist/os/compass/handlers/summary-record.js +233 -0
- package/dist/os/compass/handlers/summary-record.js.map +1 -0
- package/dist/os/compass/index.d.ts +4 -1
- package/dist/os/compass/index.d.ts.map +1 -1
- package/dist/os/compass/index.js +9 -1
- package/dist/os/compass/index.js.map +1 -1
- package/dist/os/compass/policy.d.ts +65 -0
- package/dist/os/compass/policy.d.ts.map +1 -0
- package/dist/os/compass/policy.js +241 -0
- package/dist/os/compass/policy.js.map +1 -0
- package/dist/os/core/core.module.d.ts.map +1 -1
- package/dist/os/core/core.module.js +9 -21
- package/dist/os/core/core.module.js.map +1 -1
- package/dist/os/core/handlers/forge-autonomy-validate.d.ts.map +1 -1
- package/dist/os/core/handlers/forge-autonomy-validate.js +7 -1
- package/dist/os/core/handlers/forge-autonomy-validate.js.map +1 -1
- package/dist/os/core/handlers/package-health.d.ts.map +1 -1
- package/dist/os/core/handlers/package-health.js +6 -1
- package/dist/os/core/handlers/package-health.js.map +1 -1
- package/dist/os/core/handlers/pinned-check.d.ts.map +1 -1
- package/dist/os/core/handlers/pinned-check.js +6 -1
- package/dist/os/core/handlers/pinned-check.js.map +1 -1
- package/dist/os/core/handlers/pinned-validate.d.ts.map +1 -1
- package/dist/os/core/handlers/pinned-validate.js +6 -1
- package/dist/os/core/handlers/pinned-validate.js.map +1 -1
- package/dist/os/core/handlers/validate.d.ts.map +1 -1
- package/dist/os/core/handlers/validate.js +6 -1
- package/dist/os/core/handlers/validate.js.map +1 -1
- package/dist/os/exploration/exploration.module.d.ts.map +1 -1
- package/dist/os/exploration/exploration.module.js +6 -4
- package/dist/os/exploration/exploration.module.js.map +1 -1
- package/dist/os/exploration/handlers/list.d.ts.map +1 -1
- package/dist/os/exploration/handlers/list.js +4 -1
- package/dist/os/exploration/handlers/list.js.map +1 -1
- package/dist/os/mission/handlers/archive.d.ts.map +1 -1
- package/dist/os/mission/handlers/archive.js +7 -3
- package/dist/os/mission/handlers/archive.js.map +1 -1
- package/dist/os/mission/index.d.ts.map +1 -1
- package/dist/os/mission/index.js +13 -0
- package/dist/os/mission/index.js.map +1 -1
- package/dist/os/notes/index.d.ts.map +1 -1
- package/dist/os/notes/index.js +7 -1
- package/dist/os/notes/index.js.map +1 -1
- package/dist/os/rfc/frontmatter-io.d.ts.map +1 -1
- package/dist/os/rfc/frontmatter-io.js +6 -1
- package/dist/os/rfc/frontmatter-io.js.map +1 -1
- package/dist/os/rfc/handlers/archive.d.ts.map +1 -1
- package/dist/os/rfc/handlers/archive.js +6 -1
- package/dist/os/rfc/handlers/archive.js.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.js +7 -3
- package/dist/os/rfc/handlers/implement-stamp.js.map +1 -1
- package/dist/os/rfc/handlers/index-graph.d.ts.map +1 -1
- package/dist/os/rfc/handlers/index-graph.js +6 -1
- package/dist/os/rfc/handlers/index-graph.js.map +1 -1
- package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -1
- package/dist/os/rfc/handlers/lifecycle.js +6 -1
- package/dist/os/rfc/handlers/lifecycle.js.map +1 -1
- package/dist/os/rfc/handlers/list-create.d.ts.map +1 -1
- package/dist/os/rfc/handlers/list-create.js +6 -1
- package/dist/os/rfc/handlers/list-create.js.map +1 -1
- package/dist/os/rfc/handlers/pipeline-status.d.ts.map +1 -1
- package/dist/os/rfc/handlers/pipeline-status.js +6 -1
- package/dist/os/rfc/handlers/pipeline-status.js.map +1 -1
- package/dist/os/rfc/handlers/supersede-propose.d.ts.map +1 -1
- package/dist/os/rfc/handlers/supersede-propose.js +6 -1
- package/dist/os/rfc/handlers/supersede-propose.js.map +1 -1
- package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -1
- package/dist/os/rfc/handlers/validate-rules.js +7 -3
- package/dist/os/rfc/handlers/validate-rules.js.map +1 -1
- package/dist/os/rfc/handlers/validate.d.ts.map +1 -1
- package/dist/os/rfc/handlers/validate.js +6 -1
- package/dist/os/rfc/handlers/validate.js.map +1 -1
- package/dist/os/rfc/index.d.ts.map +1 -1
- package/dist/os/rfc/index.js +6 -1
- package/dist/os/rfc/index.js.map +1 -1
- package/dist/os/rfc/rfc.module.d.ts.map +1 -1
- package/dist/os/rfc/rfc.module.js +6 -1
- package/dist/os/rfc/rfc.module.js.map +1 -1
- package/dist/os/rfc/types.d.ts +7 -4
- package/dist/os/rfc/types.d.ts.map +1 -1
- package/dist/os/rfc/types.js +7 -4
- package/dist/os/rfc/types.js.map +1 -1
- package/dist/os/session/handlers/save.d.ts.map +1 -1
- package/dist/os/session/handlers/save.js +6 -1
- package/dist/os/session/handlers/save.js.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +6 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -1
- package/dist/os/werkstatt/handlers/workspace-deps.js +3 -3
- package/dist/os/werkstatt/handlers/workspace-deps.js.map +1 -1
- package/dist/os/workflow/index.d.ts.map +1 -1
- package/dist/os/workflow/index.js +6 -1
- package/dist/os/workflow/index.js.map +1 -1
- package/dist/src/config/forge-config.d.ts +50 -4
- package/dist/src/config/forge-config.d.ts.map +1 -1
- package/dist/src/config/forge-config.js +11 -19
- package/dist/src/config/forge-config.js.map +1 -1
- package/dist/src/forge-module.d.ts.map +1 -1
- package/dist/src/forge-module.js +6 -1
- package/dist/src/forge-module.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/migration-adapters/git-utils.d.ts.map +1 -1
- package/dist/src/migration-adapters/git-utils.js +6 -2
- package/dist/src/migration-adapters/git-utils.js.map +1 -1
- package/dist/src/migration-adapters/ignored-files.d.ts.map +1 -1
- package/dist/src/migration-adapters/ignored-files.js +6 -1
- package/dist/src/migration-adapters/ignored-files.js.map +1 -1
- package/dist/src/migration-adapters/index.d.ts.map +1 -1
- package/dist/src/migration-adapters/index.js +4 -1
- package/dist/src/migration-adapters/index.js.map +1 -1
- package/dist/src/migration-adapters/types.d.ts.map +1 -1
- package/dist/src/migration-adapters/types.js +6 -2
- package/dist/src/migration-adapters/types.js.map +1 -1
- package/dist/src/onboarding/agents-generate.js +7 -7
- package/dist/src/onboarding/create.d.ts.map +1 -1
- package/dist/src/onboarding/create.js +7 -6
- package/dist/src/onboarding/create.js.map +1 -1
- package/dist/src/onboarding/doctor.d.ts.map +1 -1
- package/dist/src/onboarding/doctor.js +7 -13
- package/dist/src/onboarding/doctor.js.map +1 -1
- package/dist/src/onboarding/init.d.ts.map +1 -1
- package/dist/src/onboarding/init.js +7 -12
- package/dist/src/onboarding/init.js.map +1 -1
- package/dist/src/onboarding/invariant-engine.d.ts.map +1 -1
- package/dist/src/onboarding/invariant-engine.js +7 -2
- package/dist/src/onboarding/invariant-engine.js.map +1 -1
- package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -1
- package/dist/src/onboarding/nested-agents-generate.js +7 -2
- package/dist/src/onboarding/nested-agents-generate.js.map +1 -1
- package/dist/src/onboarding/nested-agents-templates.d.ts.map +1 -1
- package/dist/src/onboarding/nested-agents-templates.js +6 -1
- package/dist/src/onboarding/nested-agents-templates.js.map +1 -1
- package/dist/src/onboarding/scaffold-project.d.ts.map +1 -1
- package/dist/src/onboarding/scaffold-project.js +6 -1
- package/dist/src/onboarding/scaffold-project.js.map +1 -1
- package/dist/src/onboarding/upgrade.d.ts.map +1 -1
- package/dist/src/onboarding/upgrade.js +7 -3
- package/dist/src/onboarding/upgrade.js.map +1 -1
- package/dist/src/profiles/profile-schema.d.ts +54 -4
- package/dist/src/profiles/profile-schema.d.ts.map +1 -1
- package/dist/src/profiles/profile-schema.js +34 -14
- package/dist/src/profiles/profile-schema.js.map +1 -1
- package/dist/src/profiles/stack-profile.d.ts +24 -0
- package/dist/src/profiles/stack-profile.d.ts.map +1 -1
- package/dist/src/profiles/stack-profile.js +7 -3
- package/dist/src/profiles/stack-profile.js.map +1 -1
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +7 -9
- package/dist/src/registry.js.map +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +6 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/fs-atomic.d.ts.map +1 -1
- package/dist/src/utils/fs-atomic.js +13 -1
- package/dist/src/utils/fs-atomic.js.map +1 -1
- package/dist/src/utils/fs-idempotent.d.ts.map +1 -1
- package/dist/src/utils/fs-idempotent.js +13 -0
- package/dist/src/utils/fs-idempotent.js.map +1 -1
- package/dist/src/utils/fs-trash-sync.d.ts.map +1 -1
- package/dist/src/utils/fs-trash-sync.js +13 -1
- package/dist/src/utils/fs-trash-sync.js.map +1 -1
- package/dist/src/utils/fs-trash.d.ts.map +1 -1
- package/dist/src/utils/fs-trash.js +13 -1
- package/dist/src/utils/fs-trash.js.map +1 -1
- package/dist/src/utils/fs.d.ts.map +1 -1
- package/dist/src/utils/fs.js +14 -3
- package/dist/src/utils/fs.js.map +1 -1
- package/dist/src/utils/hash.d.ts.map +1 -1
- package/dist/src/utils/hash.js +12 -1
- package/dist/src/utils/hash.js.map +1 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +13 -2
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/string-utils.d.ts.map +1 -1
- package/dist/src/utils/string-utils.js +12 -1
- package/dist/src/utils/string-utils.js.map +1 -1
- package/dist/src/validators/port-validate.js +1 -1
- package/dist/src/validators/port-validate.js.map +1 -1
- package/dist/src/validators/skill-validate.d.ts.map +1 -1
- package/dist/src/validators/skill-validate.js +7 -8
- package/dist/src/validators/skill-validate.js.map +1 -1
- package/docs/reference/forge-yaml.md +38 -9
- package/os/adr/handlers/list-create.ts +4 -1
- package/os/adr/handlers/validate.ts +6 -1
- package/os/adr/types.ts +7 -3
- package/os/compass/compass.module.ts +79 -13
- package/os/compass/handlers/compass-audit-handler.ts +22 -3
- package/os/compass/handlers/compass-change-summary-handler.ts +55 -227
- package/os/compass/handlers/compass-inventory-handler.ts +30 -12
- package/os/compass/handlers/compass-inventory.ts +103 -240
- package/os/compass/handlers/compass-migrate-handler.ts +122 -0
- package/os/compass/handlers/compass-migrate.ts +361 -0
- package/os/compass/handlers/resolve-scan-root-package.test.ts +70 -0
- package/os/compass/handlers/resolve-scan-root.ts +15 -8
- package/os/compass/handlers/summary-record.ts +313 -0
- package/os/compass/handlers/tests/compass-migrate.test.ts +291 -0
- package/os/compass/handlers/tests/compass-policy.test.ts +249 -0
- package/os/compass/handlers/tests/compass-v2-contract.test.ts +9 -9
- package/os/compass/handlers/tests/summary-record.test.ts +224 -0
- package/os/compass/index.ts +23 -5
- package/os/compass/policy.ts +350 -0
- package/os/core/core.module.ts +9 -21
- package/os/core/handlers/forge-autonomy-validate.ts +7 -1
- package/os/core/handlers/package-health.ts +6 -1
- package/os/core/handlers/pinned-check.ts +6 -1
- package/os/core/handlers/pinned-validate.ts +6 -1
- package/os/core/handlers/validate.ts +6 -1
- package/os/exploration/exploration.module.ts +72 -71
- package/os/exploration/handlers/list.ts +4 -1
- package/os/mission/handlers/archive.ts +7 -3
- package/os/mission/index.ts +14 -0
- package/os/notes/index.ts +7 -1
- package/os/rfc/frontmatter-io.ts +6 -1
- package/os/rfc/handlers/archive.ts +6 -1
- package/os/rfc/handlers/implement-stamp.ts +7 -3
- package/os/rfc/handlers/index-graph.ts +6 -1
- package/os/rfc/handlers/lifecycle.ts +6 -1
- package/os/rfc/handlers/list-create.ts +6 -1
- package/os/rfc/handlers/pipeline-status.ts +6 -1
- package/os/rfc/handlers/supersede-propose.ts +6 -1
- package/os/rfc/handlers/validate-rules.ts +7 -3
- package/os/rfc/handlers/validate.ts +6 -1
- package/os/rfc/index.ts +6 -1
- package/os/rfc/rfc.module.ts +6 -1
- package/os/rfc/types.ts +7 -4
- package/os/session/handlers/save.ts +6 -1
- package/os/werkstatt/handlers/werkstatt-lock-recover.ts +6 -1
- package/os/werkstatt/handlers/workspace-deps.ts +3 -3
- package/os/workflow/index.ts +6 -1
- package/package.json +1 -1
- package/skills/fo/fo-add-tests/SKILL.md +14 -0
- package/skills/fo/fo-architecture/SKILL.md +14 -0
- package/skills/fo/fo-compass-annotate/SKILL.md +14 -0
- package/skills/fo/fo-design-summit/SKILL.md +14 -0
- package/skills/fo/fo-doc-audit/SKILL.md +14 -0
- package/skills/fo/fo-explore/SKILL.md +14 -0
- package/skills/fo/fo-extract-dna/SKILL.md +14 -0
- package/skills/fo/fo-fix/SKILL.md +14 -0
- package/skills/fo/fo-handoff/SKILL.md +14 -0
- package/skills/fo/fo-harvest/SKILL.md +14 -0
- package/skills/fo/fo-idea/SKILL.md +14 -0
- package/skills/fo/fo-idea-audit/SKILL.md +14 -0
- package/skills/fo/fo-idea-create-adr/SKILL.md +14 -0
- package/skills/fo/fo-idea-create-rfc/SKILL.md +14 -0
- package/skills/fo/fo-idea-enhance/SKILL.md +14 -0
- package/skills/fo/fo-idea-i-just-want-to-see-the-plan/SKILL.md +14 -0
- package/skills/fo/fo-idea-i-just-want-to-see-the-result/SKILL.md +14 -0
- package/skills/fo/fo-idea-implement/SKILL.md +14 -0
- package/skills/fo/fo-idea-plan/SKILL.md +14 -0
- package/skills/fo/fo-idea-status/SKILL.md +14 -0
- package/skills/fo/fo-knowledge-distill/SKILL.md +14 -0
- package/skills/fo/fo-memory-sync/SKILL.md +14 -0
- package/skills/fo/fo-qa/SKILL.md +14 -0
- package/skills/fo/fo-review/SKILL.md +14 -0
- package/skills/fo/fo-session-retro/SKILL.md +14 -0
- package/skills/fo/fo-session-save/SKILL.md +14 -0
- package/skills/fo/fo-spec-ingest/SKILL.md +14 -0
- package/skills/fo/fo-step-commit/SKILL.md +14 -0
- package/skills/fo/fo-triage/SKILL.md +14 -0
- package/skills/meta/forge-bootstrap/SKILL.md +14 -0
- package/skills/meta/port-to-forge/SKILL.md +14 -0
- package/skills/meta/skill-create/SKILL.md +14 -0
- package/skills/shared/grilling/SKILL.md +14 -0
- package/skills/shared/my-preferences/SKILL.md +14 -0
- package/skills/shared/windows-ai-tooling/SKILL.md +14 -0
- package/skills/shared/writing-great-skills/SKILL.md +14 -0
- package/src/config/forge-config.ts +16 -23
- package/src/forge-module.ts +6 -1
- package/src/index.ts +10 -2
- package/src/migration-adapters/git-utils.ts +6 -2
- package/src/migration-adapters/ignored-files.ts +6 -1
- package/src/migration-adapters/index.ts +4 -1
- package/src/migration-adapters/types.ts +6 -2
- package/src/onboarding/agents-generate.ts +7 -7
- package/src/onboarding/create.ts +7 -6
- package/src/onboarding/doctor.ts +7 -13
- package/src/onboarding/init.ts +7 -12
- package/src/onboarding/invariant-engine.ts +7 -2
- package/src/onboarding/nested-agents-generate.ts +7 -2
- package/src/onboarding/nested-agents-templates.ts +6 -1
- package/src/onboarding/scaffold-project.ts +6 -1
- package/src/onboarding/upgrade.ts +7 -3
- package/src/profiles/profile-schema.ts +42 -18
- package/src/profiles/stack-profile.ts +7 -3
- package/src/registry.ts +7 -9
- package/src/tests/agents-generate.test.ts +2 -2
- package/src/tests/forge-autonomy-validate.test.ts +1 -1
- package/src/types.ts +6 -1
- package/src/utils/fs-atomic.ts +13 -1
- package/src/utils/fs-idempotent.ts +13 -0
- package/src/utils/fs-trash-sync.ts +13 -1
- package/src/utils/fs-trash.ts +13 -1
- package/src/utils/fs.ts +14 -3
- package/src/utils/hash.ts +12 -1
- package/src/utils/index.ts +13 -2
- package/src/utils/string-utils.ts +12 -1
- package/src/validators/port-validate.ts +1 -1
- package/src/validators/skill-validate.ts +7 -8
- package/skills/shared/extension-e2e-mitm/SKILL.md +0 -53
- package/skills/shared/extension-e2e-mitm/fixture-proxy.ts +0 -113
- package/src/types/werkstatt-engine-shims.d.ts +0 -1416
- package/src/types/werkstatt-shared-shims.d.ts +0 -5686
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>compass.migrate kernel handler (RFC-1097). Resolves scan root and
|
|
4
|
+
policy, enforces the dirty-tree refusal before any write, then delegates to
|
|
5
|
+
the migrateWorkspace codemod and returns the per-file action manifest.</purpose>
|
|
6
|
+
<non-goals>
|
|
7
|
+
<item>Do not implement transform logic — that lives in compass-migrate.ts.</item>
|
|
8
|
+
<item>Do not scaffold headers — no-header files are reported, not written.</item>
|
|
9
|
+
</non-goals>
|
|
10
|
+
</MODULE_CONTRACT>
|
|
11
|
+
<CHANGE_SUMMARY>
|
|
12
|
+
<item>RFC-1097: initial handler — dirty-tree refusal with --force, --files bypass, dry-run manifest.</item>
|
|
13
|
+
<item>RFC-1097: steps 1-4 — compass.migrate codemod
|
|
14
|
+
|
|
15
|
+
Add the v1 to v2 Compass header codemod: migrateFile pure transform (collapse, strip, seed, reorder, purpose-flag actions), migrateWorkspace walker, runCompassMigrate handler with dirty-tree refusal and --force/--files/--dry-run flags, module registration, and 15 unit tests.</item>
|
|
16
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
17
|
+
|
|
18
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
19
|
+
<item>RFC-1097: sweep — engine package clean
|
|
20
|
+
|
|
21
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. engine package now 0 diagnostics.</item>
|
|
22
|
+
<item>RFC-1097: AC-4 banned literal in os/compass handlers
|
|
23
|
+
|
|
24
|
+
compass-migrate-handler hint used a consumer-specific run command — switched to generic 'pnpm exec forge run' convention. Reworded recorded CHANGE_SUMMARY items in 3 handlers to drop the consumer-specific literal. compass-policy AC-4 test green (65/65).</item>
|
|
25
|
+
</CHANGE_SUMMARY>
|
|
26
|
+
*/
|
|
27
|
+
import { execFileSync } from "node:child_process";
|
|
28
|
+
import { migrateWorkspace } from "./compass-migrate.js";
|
|
29
|
+
import { resolveCompassScanRoot } from "./resolve-scan-root.js";
|
|
30
|
+
import { resolveCompassPolicy } from "../policy.js";
|
|
31
|
+
const DIRTY_LIST_CAP = 20;
|
|
32
|
+
function listDirtyPaths(repoRoot) {
|
|
33
|
+
try {
|
|
34
|
+
const out = execFileSync("git", ["-C", repoRoot, "status", "--porcelain"], {
|
|
35
|
+
encoding: "utf8",
|
|
36
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
37
|
+
timeout: 15000,
|
|
38
|
+
});
|
|
39
|
+
return out
|
|
40
|
+
.split("\n")
|
|
41
|
+
.map((line) => line.trim())
|
|
42
|
+
.filter(Boolean)
|
|
43
|
+
.map((line) => line.slice(3));
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Not a git repository — nothing to protect, skip the check.
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export async function runCompassMigrate(input, context) {
|
|
51
|
+
const scanRoot = resolveCompassScanRoot(input, context);
|
|
52
|
+
const baseRoot = scanRoot ?? context.workspaceRoot;
|
|
53
|
+
const policy = resolveCompassPolicy(baseRoot, context.forgeRoot);
|
|
54
|
+
const dryRun = context.dryRun || input.flags["dry-run"] === true;
|
|
55
|
+
const force = input.flags["force"] === true;
|
|
56
|
+
const rawFiles = input.flags["files"];
|
|
57
|
+
const files = (Array.isArray(rawFiles)
|
|
58
|
+
? rawFiles.filter((entry) => typeof entry === "string")
|
|
59
|
+
: typeof rawFiles === "string"
|
|
60
|
+
? [rawFiles]
|
|
61
|
+
: [])
|
|
62
|
+
.flatMap((entry) => entry.split(","))
|
|
63
|
+
.map((entry) => entry.trim())
|
|
64
|
+
.filter(Boolean);
|
|
65
|
+
const explicitFiles = files.length > 0 ? files : undefined;
|
|
66
|
+
// Dirty-tree refusal guards the write only — a dry-run writes nothing and
|
|
67
|
+
// stays useful as a pre-commit preview on a dirty tree.
|
|
68
|
+
if (!dryRun && !force) {
|
|
69
|
+
const dirty = listDirtyPaths(baseRoot);
|
|
70
|
+
if (dirty && dirty.length > 0) {
|
|
71
|
+
const shown = dirty.slice(0, DIRTY_LIST_CAP);
|
|
72
|
+
const suffix = dirty.length > shown.length ? ` … and ${dirty.length - shown.length} more` : "";
|
|
73
|
+
context.logger.error(`[compass.migrate] refusing to run on a dirty git tree (${dirty.length} uncommitted path(s)):\n${shown.map((p) => ` ${p}`).join("\n")}${suffix}\nCommit or stash first, or pass --force to override.`);
|
|
74
|
+
return { exitCode: 1, summary: "dirty git tree — refused" };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const result = await migrateWorkspace(context.workspaceRoot, input, scanRoot, policy, {
|
|
78
|
+
files: explicitFiles,
|
|
79
|
+
dryRun,
|
|
80
|
+
});
|
|
81
|
+
const counts = new Map();
|
|
82
|
+
for (const file of result.files) {
|
|
83
|
+
for (const action of file.actions) {
|
|
84
|
+
counts.set(action, (counts.get(action) ?? 0) + 1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const tally = [...counts.entries()].map(([k, v]) => `${k}=${v}`).join(", ");
|
|
88
|
+
return {
|
|
89
|
+
data: result,
|
|
90
|
+
exitCode: 0,
|
|
91
|
+
summary: `[compass.migrate] scanned=${result.scanned} ${tally}${dryRun ? " (dry-run)" : ""}`,
|
|
92
|
+
nextSteps: [
|
|
93
|
+
{
|
|
94
|
+
action: "Run `pnpm exec forge run compass.inventory --json` to list todo/purpose-flagged files for the agent sweep.",
|
|
95
|
+
kind: "optional",
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=compass-migrate-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compass-migrate-handler.js","sourceRoot":"","sources":["../../../../os/compass/handlers/compass-migrate-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { CompassPolicy } from "../policy.ts";
|
|
2
|
+
import type { ForgeCommandInput } from "../../../src/types.ts";
|
|
3
|
+
export type MigrateAction = "collapsed" | "stripped" | "seeded" | "todo" | "purpose-flagged" | "reordered" | "unparseable" | "no-header" | "unchanged";
|
|
4
|
+
export interface MigrateFileResult {
|
|
5
|
+
source: string;
|
|
6
|
+
actions: MigrateAction[];
|
|
7
|
+
}
|
|
8
|
+
export interface MigrateResult {
|
|
9
|
+
scanned: number;
|
|
10
|
+
files: Array<{
|
|
11
|
+
path: string;
|
|
12
|
+
actions: MigrateAction[];
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export interface MigrateOptions {
|
|
16
|
+
/** Explicit root-relative file list — bypasses scan-root filtering entirely. */
|
|
17
|
+
files?: string[];
|
|
18
|
+
/** Compute actions without writing. */
|
|
19
|
+
dryRun?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** Collect ai-invariant comment texts, deduped, capped, ID-prefix stripped. */
|
|
22
|
+
export declare function collectAiInvariants(source: string, policy: CompassPolicy): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Pure v1 to v2 transform of one file's source. Returns the rewritten source
|
|
25
|
+
* and the closed action union. `unchanged` is exclusive; every other action
|
|
26
|
+
* may combine. Never throws on malformed input — reports `unparseable`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function migrateFile(source: string, policy: CompassPolicy, pathFromRoot: string, workspaceRelativePath: string): MigrateFileResult;
|
|
29
|
+
/**
|
|
30
|
+
* Walk the workspace (or an explicit file list) and apply migrateFile to every
|
|
31
|
+
* authored file. Writes via writeFileIfChanged unless dryRun.
|
|
32
|
+
*/
|
|
33
|
+
export declare function migrateWorkspace(workspaceRoot: string, input: ForgeCommandInput, scanRoot: string | undefined, policy: CompassPolicy, options: MigrateOptions): Promise<MigrateResult>;
|
|
34
|
+
//# sourceMappingURL=compass-migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compass-migrate.d.ts","sourceRoot":"","sources":["../../../../os/compass/handlers/compass-migrate.ts"],"names":[],"mappings":"AA6CA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,UAAU,GACV,QAAQ,GACR,MAAM,GACN,iBAAiB,GACjB,WAAW,GACX,aAAa,GACb,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA6BD,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAqBnF;AAyBD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,MAAM,EACpB,qBAAqB,EAAE,MAAM,GAC5B,iBAAiB,CAkInB;AAeD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,aAAa,CAAC,CA6CxB"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>compass.migrate domain logic — the v1 to v2 Compass header codemod
|
|
4
|
+
(RFC-1097). Rewrites authored file headers in place: collapses CHANGE_SUMMARY
|
|
5
|
+
windows into history, strips forbidden v1 blocks, seeds KEY_DECISIONS from
|
|
6
|
+
ai-invariant comments, reorders blocks to canonical order, and reports a
|
|
7
|
+
closed action union per file. Pure per-file transform plus a workspace
|
|
8
|
+
walker; the kernel handler lives in compass-migrate-handler.ts.</purpose>
|
|
9
|
+
<non-goals>
|
|
10
|
+
<item>Do not author headers from scratch — files with no Compass header are reported no-header and skipped; the agent sweep writes them.</item>
|
|
11
|
+
<item>Do not rewrite purpose text — boilerplate purposes are flagged for the sweep, not auto-fixed.</item>
|
|
12
|
+
<item>Do not import @warpgogol/* packages — this module is autonomous (FORGE-AUTONOMY-01).</item>
|
|
13
|
+
</non-goals>
|
|
14
|
+
</MODULE_CONTRACT>
|
|
15
|
+
<KEY_DECISIONS>
|
|
16
|
+
<item>migrateFile is a pure source-to-source function so every action is unit-testable without I/O.</item>
|
|
17
|
+
<item>Collapse reuses the summary.trim repair semantics — ID-less items dropped, overflow IDs merged into history.</item>
|
|
18
|
+
<item>Seeded KEY_DECISIONS strip the leading governance-ID prefix so items satisfy COMPASS-KD-05 immediately.</item>
|
|
19
|
+
<item>Reorder only fires when the inter-block region is whitespace — interleaved content is left for the sweep.</item>
|
|
20
|
+
</KEY_DECISIONS>
|
|
21
|
+
<CHANGE_SUMMARY>
|
|
22
|
+
<item>RFC-1097: initial codemod — migrateFile pure transform, migrateWorkspace walker, closed action union.</item>
|
|
23
|
+
<item>RFC-1097: steps 1-4 — compass.migrate codemod
|
|
24
|
+
|
|
25
|
+
Add the v1 to v2 Compass header codemod: migrateFile pure transform (collapse, strip, seed, reorder, purpose-flag actions), migrateWorkspace walker, runCompassMigrate handler with dirty-tree refusal and --force/--files/--dry-run flags, module registration, and 15 unit tests.</item>
|
|
26
|
+
</CHANGE_SUMMARY>
|
|
27
|
+
*/
|
|
28
|
+
import { readFile } from "node:fs/promises";
|
|
29
|
+
import { relative, resolve } from "node:path";
|
|
30
|
+
import { createCompassInventoryEntries, detectRiskClass, getEntrySource, getRelativeSegments, getWorkspaceRelativeSegments, } from "./compass-inventory.js";
|
|
31
|
+
import { buildChangeSummaryBlock, CHANGE_SUMMARY_WINDOW, getLineCommentPrefix, mergeHistoryIds, parseChangeSummary, } from "./summary-record.js";
|
|
32
|
+
import { writeFileIfChanged } from "../../../src/utils/fs-idempotent.js";
|
|
33
|
+
const HEADER_SCAN_LINES = 120;
|
|
34
|
+
const KEY_DECISIONS_MAX_ITEMS = 7;
|
|
35
|
+
const TODO_ITEM = "TODO: record current design decisions";
|
|
36
|
+
const COMPASS_TAGS = ["MODULE_CONTRACT", "KEY_DECISIONS", "CHANGE_SUMMARY"];
|
|
37
|
+
const FORBIDDEN_BLOCK_TAGS = ["MODULE_MAP", "keywords", "responsibilities"];
|
|
38
|
+
const COMPASS_BLOCK_ANCHOR_RE = /[ \t]*<\/?COMPASS_BLOCK\b[^>]*>[ \t]*/g;
|
|
39
|
+
function blockSpan(source, tag) {
|
|
40
|
+
const open = source.indexOf(`<${tag}>`);
|
|
41
|
+
if (open < 0)
|
|
42
|
+
return null;
|
|
43
|
+
const closeTag = `</${tag}>`;
|
|
44
|
+
const close = source.indexOf(closeTag, open);
|
|
45
|
+
if (close < 0)
|
|
46
|
+
return null;
|
|
47
|
+
return { start: open, end: close + closeTag.length };
|
|
48
|
+
}
|
|
49
|
+
function hasUnclosedTag(source, tag) {
|
|
50
|
+
return source.includes(`<${tag}>`) && !source.includes(`</${tag}>`);
|
|
51
|
+
}
|
|
52
|
+
function inHeaderRegion(source, index) {
|
|
53
|
+
return source.slice(0, index).split("\n").length <= HEADER_SCAN_LINES;
|
|
54
|
+
}
|
|
55
|
+
/** Collect ai-invariant comment texts, deduped, capped, ID-prefix stripped. */
|
|
56
|
+
export function collectAiInvariants(source, policy) {
|
|
57
|
+
const items = [];
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
const re = /@ai-invariant:?\s+([^\n*]+)/g;
|
|
60
|
+
let m;
|
|
61
|
+
while ((m = re.exec(source)) !== null) {
|
|
62
|
+
let text = m[1].replace(/(-->|\*\/)\s*$/, "").trim();
|
|
63
|
+
// KD-05: seeded items must not lead with a governance-ID prefix.
|
|
64
|
+
const idMatch = text.match(policy.idPatternPrefix);
|
|
65
|
+
if (idMatch) {
|
|
66
|
+
text = text
|
|
67
|
+
.slice(idMatch[0].length)
|
|
68
|
+
.replace(/^\s*[:—-]\s*/, "")
|
|
69
|
+
.trim();
|
|
70
|
+
}
|
|
71
|
+
if (text.length === 0 || seen.has(text))
|
|
72
|
+
continue;
|
|
73
|
+
seen.add(text);
|
|
74
|
+
items.push(text);
|
|
75
|
+
if (items.length >= KEY_DECISIONS_MAX_ITEMS)
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
return items;
|
|
79
|
+
}
|
|
80
|
+
function buildKeyDecisionsBlock(items, filePath) {
|
|
81
|
+
const lines = ["<KEY_DECISIONS>"];
|
|
82
|
+
for (const item of items) {
|
|
83
|
+
lines.push(` <item>${item}</item>`);
|
|
84
|
+
}
|
|
85
|
+
lines.push("</KEY_DECISIONS>");
|
|
86
|
+
const prefix = getLineCommentPrefix(filePath);
|
|
87
|
+
if (prefix) {
|
|
88
|
+
// New block: every line needs the line-comment prefix (unlike block
|
|
89
|
+
// replacement where the first line already carries one).
|
|
90
|
+
return lines.map((line) => prefix + line).join("\n");
|
|
91
|
+
}
|
|
92
|
+
return lines.join("\n");
|
|
93
|
+
}
|
|
94
|
+
function extractPurposeText(source) {
|
|
95
|
+
const contract = blockSpan(source, "MODULE_CONTRACT");
|
|
96
|
+
if (!contract)
|
|
97
|
+
return "";
|
|
98
|
+
const contractText = source.slice(contract.start, contract.end);
|
|
99
|
+
const purposeMatch = contractText.match(/<purpose>([\s\S]*?)<\/purpose>/);
|
|
100
|
+
return purposeMatch ? purposeMatch[1].replace(/<[^>]+>/g, " ").trim() : "";
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Pure v1 to v2 transform of one file's source. Returns the rewritten source
|
|
104
|
+
* and the closed action union. `unchanged` is exclusive; every other action
|
|
105
|
+
* may combine. Never throws on malformed input — reports `unparseable`.
|
|
106
|
+
*/
|
|
107
|
+
export function migrateFile(source, policy, pathFromRoot, workspaceRelativePath) {
|
|
108
|
+
const actions = [];
|
|
109
|
+
// 1. Header detection — a Compass header lives in the header region only.
|
|
110
|
+
const mcIndex = source.indexOf("<MODULE_CONTRACT>");
|
|
111
|
+
const csIndex = source.indexOf("<CHANGE_SUMMARY>");
|
|
112
|
+
const hasHeader = (mcIndex >= 0 && inHeaderRegion(source, mcIndex)) ||
|
|
113
|
+
(csIndex >= 0 && inHeaderRegion(source, csIndex));
|
|
114
|
+
if (!hasHeader) {
|
|
115
|
+
return { source, actions: ["no-header"] };
|
|
116
|
+
}
|
|
117
|
+
// 2. Parseability — an open tag without its close is a broken header.
|
|
118
|
+
for (const tag of COMPASS_TAGS) {
|
|
119
|
+
if (hasUnclosedTag(source, tag)) {
|
|
120
|
+
return { source, actions: ["unparseable"] };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
let next = source;
|
|
124
|
+
// 3. Collapse CHANGE_SUMMARY — same repair semantics as compass.summary.trim.
|
|
125
|
+
const csSpan = blockSpan(next, "CHANGE_SUMMARY");
|
|
126
|
+
if (csSpan) {
|
|
127
|
+
const block = next.slice(csSpan.start, csSpan.end);
|
|
128
|
+
const { items, historyIds } = parseChangeSummary(block);
|
|
129
|
+
const idItems = items.filter((item) => policy.idPatternPrefix.test(item));
|
|
130
|
+
const collapsedIds = [];
|
|
131
|
+
while (idItems.length > CHANGE_SUMMARY_WINDOW) {
|
|
132
|
+
const oldest = idItems.shift();
|
|
133
|
+
const idMatch = oldest.match(policy.idPatternPrefix);
|
|
134
|
+
if (idMatch)
|
|
135
|
+
collapsedIds.push(idMatch[0]);
|
|
136
|
+
}
|
|
137
|
+
const nextHistory = mergeHistoryIds(historyIds, collapsedIds, policy);
|
|
138
|
+
const changed = idItems.length !== items.length ||
|
|
139
|
+
collapsedIds.length > 0 ||
|
|
140
|
+
nextHistory.length !== historyIds.length ||
|
|
141
|
+
nextHistory.some((id, i) => id !== historyIds[i]);
|
|
142
|
+
if (changed) {
|
|
143
|
+
const newBlock = buildChangeSummaryBlock(idItems, nextHistory, pathFromRoot);
|
|
144
|
+
next = next.slice(0, csSpan.start) + newBlock + next.slice(csSpan.end);
|
|
145
|
+
actions.push("collapsed");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// 4. Strip forbidden v1 blocks and COMPASS_BLOCK anchors.
|
|
149
|
+
let stripped = next;
|
|
150
|
+
for (const tag of FORBIDDEN_BLOCK_TAGS) {
|
|
151
|
+
const tagRe = new RegExp(`[ \\t]*<${tag}>[\\s\\S]*?</${tag}>[ \\t]*`, "g");
|
|
152
|
+
stripped = stripped.replace(tagRe, "");
|
|
153
|
+
}
|
|
154
|
+
stripped = stripped.replace(COMPASS_BLOCK_ANCHOR_RE, "");
|
|
155
|
+
if (stripped !== next) {
|
|
156
|
+
next = stripped;
|
|
157
|
+
actions.push("stripped");
|
|
158
|
+
}
|
|
159
|
+
// 5. Seed KEY_DECISIONS on medium/high-risk files that lack the block.
|
|
160
|
+
const riskClass = detectRiskClass(pathFromRoot, workspaceRelativePath, policy);
|
|
161
|
+
const kdRequired = riskClass === "medium" || riskClass === "high";
|
|
162
|
+
if (kdRequired && !next.includes("<KEY_DECISIONS>")) {
|
|
163
|
+
const invariants = collectAiInvariants(next, policy);
|
|
164
|
+
const items = invariants.length > 0 ? invariants : [TODO_ITEM];
|
|
165
|
+
const kdBlock = buildKeyDecisionsBlock(items, pathFromRoot);
|
|
166
|
+
const mcSpan = blockSpan(next, "MODULE_CONTRACT");
|
|
167
|
+
if (mcSpan) {
|
|
168
|
+
next = next.slice(0, mcSpan.end) + "\n" + kdBlock + next.slice(mcSpan.end);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
const csSpan2 = blockSpan(next, "CHANGE_SUMMARY");
|
|
172
|
+
if (csSpan2) {
|
|
173
|
+
next = next.slice(0, csSpan2.start) + kdBlock + "\n" + next.slice(csSpan2.start);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
actions.push(invariants.length > 0 ? "seeded" : "todo");
|
|
177
|
+
}
|
|
178
|
+
// 6. Reorder blocks to canonical order — only when the region between the
|
|
179
|
+
// outermost blocks is whitespace and the blocks themselves.
|
|
180
|
+
const spans = COMPASS_TAGS.map((tag) => ({ tag, span: blockSpan(next, tag) }))
|
|
181
|
+
.filter((entry) => entry.span !== null)
|
|
182
|
+
.sort((a, b) => a.span.start - b.span.start);
|
|
183
|
+
if (spans.length >= 2) {
|
|
184
|
+
const canonicalOrder = spans
|
|
185
|
+
.slice()
|
|
186
|
+
.sort((a, b) => COMPASS_TAGS.indexOf(a.tag) - COMPASS_TAGS.indexOf(b.tag))
|
|
187
|
+
.map((entry) => entry.tag);
|
|
188
|
+
const currentOrder = spans.map((entry) => entry.tag);
|
|
189
|
+
const outOfOrder = currentOrder.some((tag, i) => tag !== canonicalOrder[i]);
|
|
190
|
+
if (outOfOrder) {
|
|
191
|
+
const minStart = Math.min(...spans.map((entry) => entry.span.start));
|
|
192
|
+
const maxEnd = Math.max(...spans.map((entry) => entry.span.end));
|
|
193
|
+
const region = next.slice(minStart, maxEnd);
|
|
194
|
+
const residue = region
|
|
195
|
+
.replace(/<MODULE_CONTRACT>[\s\S]*?<\/MODULE_CONTRACT>/, "")
|
|
196
|
+
.replace(/<KEY_DECISIONS>[\s\S]*?<\/KEY_DECISIONS>/, "")
|
|
197
|
+
.replace(/<CHANGE_SUMMARY>[\s\S]*?<\/CHANGE_SUMMARY>/, "");
|
|
198
|
+
if (residue.trim().length === 0) {
|
|
199
|
+
const ordered = canonicalOrder.map((tag) => {
|
|
200
|
+
const span = spans.find((entry) => entry.tag === tag).span;
|
|
201
|
+
return next.slice(span.start, span.end);
|
|
202
|
+
});
|
|
203
|
+
next = next.slice(0, minStart) + ordered.join("\n") + next.slice(maxEnd);
|
|
204
|
+
actions.push("reordered");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// 7. Flag boilerplate purpose — report only, the sweep rewrites the text.
|
|
209
|
+
const purposeText = extractPurposeText(next);
|
|
210
|
+
if (purposeText.length > 0 &&
|
|
211
|
+
policy.purposeBoilerplatePatterns.some((pattern) => pattern.test(purposeText))) {
|
|
212
|
+
actions.push("purpose-flagged");
|
|
213
|
+
}
|
|
214
|
+
if (actions.length === 0 || next === source) {
|
|
215
|
+
const reportOnly = actions.filter((a) => a === "purpose-flagged");
|
|
216
|
+
return {
|
|
217
|
+
source,
|
|
218
|
+
actions: reportOnly.length > 0 ? reportOnly : ["unchanged"],
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
return { source: next, actions };
|
|
222
|
+
}
|
|
223
|
+
function toTarget(workspaceRoot, absPath, policy) {
|
|
224
|
+
const pathFromRoot = relative(workspaceRoot, absPath).replace(/\\/g, "/");
|
|
225
|
+
const segments = getRelativeSegments(absPath, workspaceRoot);
|
|
226
|
+
const workspaceRelativePath = getWorkspaceRelativeSegments(segments, policy).join("/");
|
|
227
|
+
return { absPath, pathFromRoot, workspaceRelativePath };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Walk the workspace (or an explicit file list) and apply migrateFile to every
|
|
231
|
+
* authored file. Writes via writeFileIfChanged unless dryRun.
|
|
232
|
+
*/
|
|
233
|
+
export async function migrateWorkspace(workspaceRoot, input, scanRoot, policy, options) {
|
|
234
|
+
const result = { scanned: 0, files: [] };
|
|
235
|
+
if (options.files && options.files.length > 0) {
|
|
236
|
+
for (const file of options.files) {
|
|
237
|
+
const absPath = resolve(scanRoot ?? workspaceRoot, file);
|
|
238
|
+
const target = toTarget(workspaceRoot, absPath, policy);
|
|
239
|
+
let source;
|
|
240
|
+
try {
|
|
241
|
+
source = await readFile(absPath, "utf8");
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
result.files.push({ path: file, actions: ["unparseable"] });
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
result.scanned += 1;
|
|
248
|
+
const migrated = migrateFile(source, policy, target.pathFromRoot, target.workspaceRelativePath);
|
|
249
|
+
result.files.push({ path: target.pathFromRoot, actions: migrated.actions });
|
|
250
|
+
if (!options.dryRun && migrated.source !== source) {
|
|
251
|
+
await writeFileIfChanged(absPath, migrated.source);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
const entries = await createCompassInventoryEntries(workspaceRoot, input, scanRoot, policy);
|
|
257
|
+
for (const entry of entries) {
|
|
258
|
+
if (entry.authoringStatus !== "authored")
|
|
259
|
+
continue;
|
|
260
|
+
result.scanned += 1;
|
|
261
|
+
const absPath = resolve(workspaceRoot, entry.path);
|
|
262
|
+
const source = getEntrySource(entry) ?? (await readFile(absPath, "utf8"));
|
|
263
|
+
const segments = getRelativeSegments(absPath, workspaceRoot);
|
|
264
|
+
const workspaceRelativePath = getWorkspaceRelativeSegments(segments, policy).join("/");
|
|
265
|
+
const migrated = migrateFile(source, policy, entry.path, workspaceRelativePath);
|
|
266
|
+
result.files.push({ path: entry.path, actions: migrated.actions });
|
|
267
|
+
if (!options.dryRun && migrated.source !== source) {
|
|
268
|
+
await writeFileIfChanged(absPath, migrated.source);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return result;
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=compass-migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compass-migrate.js","sourceRoot":"","sources":["../../../../os/compass/handlers/compass-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BE;AAEF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,6BAA6B,EAC7B,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAgCzE,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAE1D,MAAM,YAAY,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,CAAU,CAAC;AAGrF,MAAM,oBAAoB,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,kBAAkB,CAAU,CAAC;AACrF,MAAM,uBAAuB,GAAG,wCAAwC,CAAC;AAEzE,SAAS,SAAS,CAAC,MAAc,EAAE,GAAW;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,KAAK,GAAG,GAAG,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,GAAW;IACjD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,KAAa;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,iBAAiB,CAAC;AACxE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,MAAqB;IACvE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,EAAE,GAAG,8BAA8B,CAAC;IAC1C,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,GAAG,IAAI;iBACR,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;iBACxB,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;iBAC3B,IAAI,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAClD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,KAAK,CAAC,MAAM,IAAI,uBAAuB;YAAE,MAAM;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAe,EAAE,QAAgB;IAC/D,MAAM,KAAK,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,MAAM,EAAE,CAAC;QACX,oEAAoE;QACpE,yDAAyD;QACzD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC1E,OAAO,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,MAAqB,EACrB,YAAoB,EACpB,qBAA6B;IAE7B,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,0EAA0E;IAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnD,MAAM,SAAS,GACb,CAAC,OAAO,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,OAAO,IAAI,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,sEAAsE;IACtE,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,IAAI,GAAG,MAAM,CAAC;IAElB,8EAA8E;IAC9E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACjD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAG,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACrD,IAAI,OAAO;gBAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,OAAO,GACX,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAC/B,YAAY,CAAC,MAAM,GAAG,CAAC;YACvB,WAAW,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;YACxC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;YAC7E,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,GAAG,gBAAgB,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;QAC3E,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,GAAG,QAAQ,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED,uEAAuE;IACvE,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,MAAM,CAAC;IAClE,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;YAClD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,0EAA0E;IAC1E,4DAA4D;IAC5D,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;SAC3E,MAAM,CACL,CAAC,KAAK,EAAsE,EAAE,CAC5E,KAAK,CAAC,IAAI,KAAK,IAAI,CACtB;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,KAAK;aACzB,KAAK,EAAE;aACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACzE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM;iBACnB,OAAO,CAAC,8CAA8C,EAAE,EAAE,CAAC;iBAC3D,OAAO,CAAC,0CAA0C,EAAE,EAAE,CAAC;iBACvD,OAAO,CAAC,4CAA4C,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAE,CAAC,IAAI,CAAC;oBAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,IACE,WAAW,CAAC,MAAM,GAAG,CAAC;QACtB,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAC9E,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC;QAClE,OAAO;YACL,MAAM;YACN,OAAO,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;SAC5D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC;AAQD,SAAS,QAAQ,CAAC,aAAqB,EAAE,OAAe,EAAE,MAAqB;IAC7E,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC7D,MAAM,qBAAqB,GAAG,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,EACrB,KAAwB,EACxB,QAA4B,EAC5B,MAAqB,EACrB,OAAuB;IAEvB,MAAM,MAAM,GAAkB,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAExD,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,EAAE,IAAI,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,MAAc,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC5D,SAAS;YACX,CAAC;YACD,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAG,WAAW,CAC1B,MAAM,EACN,MAAM,EACN,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,qBAAqB,CAC7B,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAClD,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,6BAA6B,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5F,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,eAAe,KAAK,UAAU;YAAE,SAAS;QACnD,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QACpB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC7D,MAAM,qBAAqB,GAAG,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;QAChF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAClD,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-scan-root.d.ts","sourceRoot":"","sources":["../../../../os/compass/handlers/resolve-scan-root.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-scan-root.d.ts","sourceRoot":"","sources":["../../../../os/compass/handlers/resolve-scan-root.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEpF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,MAAM,GAAG,SAAS,CAqDpB"}
|
|
@@ -8,15 +8,26 @@ Moved from @warpgogol/site-kernel to @warpgogol/forge for full autonomous mode (
|
|
|
8
8
|
</non-goals>
|
|
9
9
|
</MODULE_CONTRACT>
|
|
10
10
|
<CHANGE_SUMMARY>
|
|
11
|
-
<item>Introduced as part of RFC-0015 to extend Compass commands to packages/.</item>
|
|
12
11
|
<item>RFC-0556: moved canonical implementation from @warpgogol/site-kernel to @warpgogol/forge for autonomous mode.</item>
|
|
13
12
|
<item>RFC-0617: added --workpiece flag for mission workpiece directory scanning.</item>
|
|
13
|
+
<item>RFC-1097: step 6 — compass.migrate codemod run
|
|
14
|
+
|
|
15
|
+
Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
|
|
16
|
+
<item>RFC-1097: sweep — engine package clean
|
|
17
|
+
|
|
18
|
+
Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. engine package now 0 diagnostics.</item>
|
|
19
|
+
<item>RFC-1097: AC-4 banned literal in os/compass handlers
|
|
20
|
+
|
|
21
|
+
compass-migrate-handler hint used a consumer-specific run command — switched to generic 'pnpm exec forge run' convention. Reworded recorded CHANGE_SUMMARY items in 3 handlers to drop the consumer-specific literal. compass-policy AC-4 test green (65/65).</item>
|
|
22
|
+
<item>RFC-0617: fix — --package alone now implies --packages scope (was a silent no-op falling through to full-repo scan).</item>
|
|
14
23
|
</CHANGE_SUMMARY>
|
|
15
24
|
*/
|
|
16
25
|
import { existsSync } from "node:fs";
|
|
17
26
|
import { resolve } from "node:path";
|
|
18
27
|
export function resolveCompassScanRoot(input, context) {
|
|
19
|
-
const
|
|
28
|
+
const packageName = input.flags["package"];
|
|
29
|
+
const hasPackage = typeof packageName === "string" && packageName.length > 0;
|
|
30
|
+
const hasPackages = input.flags["packages"] === true || hasPackage;
|
|
20
31
|
const workpiecePath = input.flags["workpiece"];
|
|
21
32
|
const hasWorkpiece = typeof workpiecePath === "string" && workpiecePath.length > 0;
|
|
22
33
|
if (hasWorkpiece && hasPackages) {
|
|
@@ -38,14 +49,10 @@ export function resolveCompassScanRoot(input, context) {
|
|
|
38
49
|
if (!hasPackages) {
|
|
39
50
|
return context.site ? context.site.directory : undefined;
|
|
40
51
|
}
|
|
41
|
-
|
|
42
|
-
if (!packageName || typeof packageName !== "string") {
|
|
52
|
+
if (!hasPackage) {
|
|
43
53
|
return resolve(context.workspaceRoot, "packages");
|
|
44
54
|
}
|
|
45
|
-
const candidates = [
|
|
46
|
-
resolve(context.workspaceRoot, "packages", "os", packageName),
|
|
47
|
-
resolve(context.workspaceRoot, "packages", packageName),
|
|
48
|
-
];
|
|
55
|
+
const candidates = [resolve(context.workspaceRoot, "packages", packageName)];
|
|
49
56
|
for (const candidate of candidates) {
|
|
50
57
|
if (existsSync(candidate)) {
|
|
51
58
|
const srcPath = resolve(candidate, "src");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-scan-root.js","sourceRoot":"","sources":["../../../../os/compass/handlers/resolve-scan-root.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"resolve-scan-root.js","sourceRoot":"","sources":["../../../../os/compass/handlers/resolve-scan-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;EAuBE;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,UAAU,sBAAsB,CACpC,KAAwB,EACxB,OAA4B;IAE5B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,UAAU,CAAC;IACnE,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnF,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,aAAuB,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,uCAAuC,aAAa,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAE7E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,sBAAsB,WAAW,wBAAwB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type CompassPolicy } from "../policy.ts";
|
|
2
|
+
import type { ForgeCommandInput, ForgeCommandResult, ForgeRuntimeContext } from "../../../src/types.ts";
|
|
3
|
+
export declare const CHANGE_SUMMARY_WINDOW = 5;
|
|
4
|
+
export interface SummaryRecordInput {
|
|
5
|
+
id: string;
|
|
6
|
+
files: string[];
|
|
7
|
+
text?: string;
|
|
8
|
+
workpiece?: string;
|
|
9
|
+
}
|
|
10
|
+
export type SummaryRecordSkipReason = "no-block" | "duplicate" | "unparseable";
|
|
11
|
+
export interface SummaryRecordResult {
|
|
12
|
+
command: "compass.summary.record";
|
|
13
|
+
status: "pass";
|
|
14
|
+
recorded: string[];
|
|
15
|
+
collapsed: string[];
|
|
16
|
+
skipped: Array<{
|
|
17
|
+
file: string;
|
|
18
|
+
reason: SummaryRecordSkipReason;
|
|
19
|
+
}>;
|
|
20
|
+
keyDecisionsReminders: string[];
|
|
21
|
+
}
|
|
22
|
+
interface ParsedChangeSummary {
|
|
23
|
+
items: string[];
|
|
24
|
+
historyIds: string[];
|
|
25
|
+
}
|
|
26
|
+
export declare function parseChangeSummary(block: string): ParsedChangeSummary;
|
|
27
|
+
/** Merge existing + new history IDs: dedupe, per-namespace ascending numeric order. */
|
|
28
|
+
export declare function mergeHistoryIds(existing: string[], incoming: string[], policy: CompassPolicy): string[];
|
|
29
|
+
export declare function getLineCommentPrefix(filePath: string): string | null;
|
|
30
|
+
export declare function buildChangeSummaryBlock(items: string[], historyIds: string[], filePath: string): string;
|
|
31
|
+
export declare function stripConventionalPrefix(subject: string): string;
|
|
32
|
+
export declare function sanitizeItemText(text: string): string;
|
|
33
|
+
export declare function isValidGovernanceId(id: string, policy: CompassPolicy): boolean;
|
|
34
|
+
interface RecordOutcome {
|
|
35
|
+
recorded: boolean;
|
|
36
|
+
collapsed: boolean;
|
|
37
|
+
skipReason?: SummaryRecordSkipReason;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Append `ID: text` to one file's CHANGE_SUMMARY and collapse the window.
|
|
41
|
+
* Returns the outcome; writes the file only when mutated and not dry-run.
|
|
42
|
+
*/
|
|
43
|
+
export declare function recordSummaryItem(absPath: string, relPath: string, id: string, text: string, dryRun: boolean, policy: CompassPolicy): Promise<RecordOutcome>;
|
|
44
|
+
export declare function runCompassSummaryRecord(input: ForgeCommandInput, context: ForgeRuntimeContext): Promise<ForgeCommandResult<SummaryRecordResult>>;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=summary-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary-record.d.ts","sourceRoot":"","sources":["../../../../os/compass/handlers/summary-record.ts"],"names":[],"mappings":"AAsCA,OAAO,EAAgD,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhG,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAO/B,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAOvC,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,CAAC,CAAC;IAClE,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAerE;AAWD,uFAAuF;AACvF,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAAE,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,EAAE,aAAa,GACpB,MAAM,EAAE,CAUV;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIpE;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,MAAM,GACf,MAAM,CAcR;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D;AAQD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAE9E;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,aAAa,CAAC,CA8CxB;AASD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAoElD"}
|