@warpgogol/forge 5.2.4 → 5.3.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/README.md +1 -1
- package/README.uk.md +8 -8
- package/bin/cli.ts +25 -33
- package/dist/bin/cli.js +21 -32
- package/dist/bin/cli.js.map +1 -1
- package/dist/os/adr/adr.module.d.ts.map +1 -1
- package/dist/os/adr/adr.module.js +8 -3
- package/dist/os/adr/adr.module.js.map +1 -1
- package/dist/os/adr/frontmatter-io.js +5 -5
- package/dist/os/adr/frontmatter-io.js.map +1 -1
- package/dist/os/adr/handlers/archive.d.ts.map +1 -1
- package/dist/os/adr/handlers/archive.js +10 -4
- package/dist/os/adr/handlers/archive.js.map +1 -1
- package/dist/os/adr/handlers/implement-stamp.d.ts.map +1 -1
- package/dist/os/adr/handlers/implement-stamp.js +10 -10
- package/dist/os/adr/handlers/implement-stamp.js.map +1 -1
- package/dist/os/adr/handlers/list-create.js +5 -5
- package/dist/os/adr/handlers/list-create.js.map +1 -1
- package/dist/os/adr/handlers/validate.js +1 -1
- package/dist/os/adr/handlers/validate.js.map +1 -1
- package/dist/os/audit/audit.module.js +3 -3
- package/dist/os/audit/audit.module.js.map +1 -1
- package/dist/os/audit/frontmatter-io.js +5 -5
- package/dist/os/audit/frontmatter-io.js.map +1 -1
- package/dist/os/audit/handlers/archive.d.ts.map +1 -1
- package/dist/os/audit/handlers/archive.js +10 -4
- package/dist/os/audit/handlers/archive.js.map +1 -1
- package/dist/os/compass/compass.module.d.ts.map +1 -1
- package/dist/os/compass/compass.module.js +17 -1
- 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 +12 -5
- package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.js +3 -2
- package/dist/os/compass/handlers/compass-change-summary-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-inventory-handler.js +6 -4
- package/dist/os/compass/handlers/compass-inventory-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-inventory.js +10 -8
- package/dist/os/compass/handlers/compass-inventory.js.map +1 -1
- package/dist/os/compass/handlers/compass-migrate-handler.js +1 -1
- package/dist/os/compass/handlers/compass-migrate-handler.js.map +1 -1
- package/dist/os/compass/handlers/compass-migrate.d.ts.map +1 -1
- package/dist/os/compass/handlers/compass-migrate.js +6 -3
- package/dist/os/compass/handlers/compass-migrate.js.map +1 -1
- package/dist/os/compass/handlers/git-revision.d.ts.map +1 -1
- package/dist/os/compass/handlers/git-revision.js +9 -6
- package/dist/os/compass/handlers/git-revision.js.map +1 -1
- package/dist/os/compass/handlers/resolve-scan-root.js +1 -1
- package/dist/os/compass/handlers/resolve-scan-root.js.map +1 -1
- package/dist/os/compass/handlers/summary-record.d.ts.map +1 -1
- package/dist/os/compass/handlers/summary-record.js +8 -4
- package/dist/os/compass/handlers/summary-record.js.map +1 -1
- package/dist/os/core/core.module.d.ts.map +1 -1
- package/dist/os/core/core.module.js +43 -4
- package/dist/os/core/core.module.js.map +1 -1
- package/dist/os/core/handlers/assets-helpers.d.ts.map +1 -1
- package/dist/os/core/handlers/assets-helpers.js +6 -3
- package/dist/os/core/handlers/assets-helpers.js.map +1 -1
- package/dist/os/core/handlers/build.js +1 -1
- package/dist/os/core/handlers/build.js.map +1 -1
- package/dist/os/core/handlers/determinism-check.d.ts.map +1 -1
- package/dist/os/core/handlers/determinism-check.js +10 -6
- package/dist/os/core/handlers/determinism-check.js.map +1 -1
- package/dist/os/core/handlers/dev.js +1 -1
- package/dist/os/core/handlers/dev.js.map +1 -1
- package/dist/os/core/handlers/file-size-lint.d.ts.map +1 -1
- package/dist/os/core/handlers/file-size-lint.js +11 -7
- package/dist/os/core/handlers/file-size-lint.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 +9 -5
- package/dist/os/core/handlers/forge-autonomy-validate.js.map +1 -1
- package/dist/os/core/handlers/knowledge-compact.js +1 -1
- package/dist/os/core/handlers/knowledge-compact.js.map +1 -1
- package/dist/os/core/handlers/package-health.js +1 -1
- package/dist/os/core/handlers/package-health.js.map +1 -1
- package/dist/os/core/handlers/pinned-check.js +2 -2
- package/dist/os/core/handlers/pinned-check.js.map +1 -1
- package/dist/os/core/handlers/pinned-init.d.ts.map +1 -1
- package/dist/os/core/handlers/pinned-init.js +9 -8
- package/dist/os/core/handlers/pinned-init.js.map +1 -1
- package/dist/os/core/handlers/pinned-validate.js +3 -3
- package/dist/os/core/handlers/pinned-validate.js.map +1 -1
- package/dist/os/core/handlers/profile-resolve.js +1 -1
- package/dist/os/core/handlers/profile-resolve.js.map +1 -1
- package/dist/os/core/handlers/public-surface.js +1 -1
- package/dist/os/core/handlers/public-surface.js.map +1 -1
- package/dist/os/core/handlers/release-prepare.d.ts.map +1 -1
- package/dist/os/core/handlers/release-prepare.js +10 -6
- package/dist/os/core/handlers/release-prepare.js.map +1 -1
- package/dist/os/core/handlers/release-publish.js +6 -6
- package/dist/os/core/handlers/release-publish.js.map +1 -1
- package/dist/os/core/handlers/validate.js +1 -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 +1 -0
- package/dist/os/exploration/exploration.module.js.map +1 -1
- package/dist/os/exploration/frontmatter-io.js +4 -4
- package/dist/os/exploration/frontmatter-io.js.map +1 -1
- package/dist/os/exploration/handlers/archive.js +3 -3
- package/dist/os/exploration/handlers/archive.js.map +1 -1
- package/dist/os/mission/handlers/archive.d.ts.map +1 -1
- package/dist/os/mission/handlers/archive.js +44 -23
- package/dist/os/mission/handlers/archive.js.map +1 -1
- package/dist/os/mission/mission.module.js +3 -3
- package/dist/os/mission/mission.module.js.map +1 -1
- package/dist/os/naming/naming-convention.d.ts.map +1 -1
- package/dist/os/naming/naming-convention.js +7 -3
- package/dist/os/naming/naming-convention.js.map +1 -1
- package/dist/os/naming/naming.module.d.ts.map +1 -1
- package/dist/os/naming/naming.module.js +4 -3
- package/dist/os/naming/naming.module.js.map +1 -1
- package/dist/os/notes/notes.module.d.ts.map +1 -1
- package/dist/os/notes/notes.module.js +6 -3
- package/dist/os/notes/notes.module.js.map +1 -1
- package/dist/os/plan/frontmatter-io.js +5 -5
- package/dist/os/plan/frontmatter-io.js.map +1 -1
- package/dist/os/plan/handlers/archive.d.ts.map +1 -1
- package/dist/os/plan/handlers/archive.js +10 -4
- package/dist/os/plan/handlers/archive.js.map +1 -1
- package/dist/os/plan/plan.module.js +3 -3
- package/dist/os/plan/plan.module.js.map +1 -1
- package/dist/os/plugin/plugin.module.d.ts.map +1 -1
- package/dist/os/plugin/plugin.module.js +6 -3
- package/dist/os/plugin/plugin.module.js.map +1 -1
- package/dist/os/program/discovery.js +2 -2
- package/dist/os/program/discovery.js.map +1 -1
- package/dist/os/program/handlers/complete.js +1 -1
- package/dist/os/program/handlers/complete.js.map +1 -1
- package/dist/os/program/handlers/lease.js +1 -1
- package/dist/os/program/handlers/lease.js.map +1 -1
- package/dist/os/program/handlers/seal.js +1 -1
- package/dist/os/program/handlers/seal.js.map +1 -1
- package/dist/os/program/lease.js +1 -1
- package/dist/os/program/lease.js.map +1 -1
- package/dist/os/program/program.module.d.ts.map +1 -1
- package/dist/os/program/program.module.js +9 -3
- package/dist/os/program/program.module.js.map +1 -1
- package/dist/os/queue/index.js +1 -1
- package/dist/os/queue/manifest.d.ts.map +1 -1
- package/dist/os/queue/manifest.js +4 -8
- package/dist/os/queue/manifest.js.map +1 -1
- package/dist/os/rfc/acceptance.d.ts.map +1 -1
- package/dist/os/rfc/acceptance.js +10 -6
- package/dist/os/rfc/acceptance.js.map +1 -1
- package/dist/os/rfc/decision-log.d.ts.map +1 -1
- package/dist/os/rfc/decision-log.js +4 -3
- package/dist/os/rfc/decision-log.js.map +1 -1
- package/dist/os/rfc/dna-trace.d.ts.map +1 -1
- package/dist/os/rfc/dna-trace.js +7 -2
- package/dist/os/rfc/dna-trace.js.map +1 -1
- package/dist/os/rfc/frontmatter-io.js +5 -5
- 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 +11 -5
- package/dist/os/rfc/handlers/archive.js.map +1 -1
- package/dist/os/rfc/handlers/check.d.ts.map +1 -1
- package/dist/os/rfc/handlers/check.js +6 -3
- package/dist/os/rfc/handlers/check.js.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -1
- package/dist/os/rfc/handlers/implement-stamp.js +11 -10
- package/dist/os/rfc/handlers/implement-stamp.js.map +1 -1
- package/dist/os/rfc/handlers/index-graph.js +3 -3
- 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 -2
- 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 +7 -6
- package/dist/os/rfc/handlers/list-create.js.map +1 -1
- package/dist/os/rfc/handlers/shared.js +3 -3
- package/dist/os/rfc/handlers/shared.js.map +1 -1
- package/dist/os/rfc/handlers/supersede-propose.d.ts.map +1 -1
- package/dist/os/rfc/handlers/supersede-propose.js +7 -3
- 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 +8 -5
- 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/rfc.module.d.ts.map +1 -1
- package/dist/os/rfc/rfc.module.js +44 -4
- package/dist/os/rfc/rfc.module.js.map +1 -1
- package/dist/os/rfc/verification-evidence.d.ts.map +1 -1
- package/dist/os/rfc/verification-evidence.js +9 -5
- package/dist/os/rfc/verification-evidence.js.map +1 -1
- package/dist/os/rfc/verification-refresh.d.ts.map +1 -1
- package/dist/os/rfc/verification-refresh.js +4 -3
- package/dist/os/rfc/verification-refresh.js.map +1 -1
- package/dist/os/session/frontmatter-io.js +12 -12
- package/dist/os/session/frontmatter-io.js.map +1 -1
- package/dist/os/session/handlers/archive.d.ts.map +1 -1
- package/dist/os/session/handlers/archive.js +10 -4
- package/dist/os/session/handlers/archive.js.map +1 -1
- package/dist/os/session/handlers/metrics-aggregate.d.ts.map +1 -1
- package/dist/os/session/handlers/metrics-aggregate.js +9 -5
- package/dist/os/session/handlers/metrics-aggregate.js.map +1 -1
- package/dist/os/session/handlers/metrics-rfc.d.ts.map +1 -1
- package/dist/os/session/handlers/metrics-rfc.js +11 -8
- package/dist/os/session/handlers/metrics-rfc.js.map +1 -1
- package/dist/os/session/handlers/metrics-session.d.ts.map +1 -1
- package/dist/os/session/handlers/metrics-session.js +6 -3
- package/dist/os/session/handlers/metrics-session.js.map +1 -1
- package/dist/os/session/handlers/save.d.ts.map +1 -1
- package/dist/os/session/handlers/save.js +14 -8
- package/dist/os/session/handlers/save.js.map +1 -1
- package/dist/os/session/session.module.d.ts.map +1 -1
- package/dist/os/session/session.module.js +6 -0
- package/dist/os/session/session.module.js.map +1 -1
- package/dist/os/spec/live-spec-list.js +4 -4
- package/dist/os/spec/live-spec-list.js.map +1 -1
- package/dist/os/spec/live-spec-merge.js +5 -5
- package/dist/os/spec/live-spec-merge.js.map +1 -1
- package/dist/os/spec/live-spec-show.js +3 -3
- package/dist/os/spec/live-spec-show.js.map +1 -1
- package/dist/os/spec/live-spec-validate.js +4 -4
- package/dist/os/spec/live-spec-validate.js.map +1 -1
- package/dist/os/spec/spec-materialize.js +9 -9
- package/dist/os/spec/spec-materialize.js.map +1 -1
- package/dist/os/spec/spec-status.js +9 -9
- package/dist/os/spec/spec-status.js.map +1 -1
- package/dist/os/spec/spec-validate.js +7 -7
- package/dist/os/spec/spec-validate.js.map +1 -1
- package/dist/os/spec/spec.module.d.ts.map +1 -1
- package/dist/os/spec/spec.module.js +8 -0
- package/dist/os/spec/spec.module.js.map +1 -1
- package/dist/os/werkstatt/handlers/lock.js +16 -16
- package/dist/os/werkstatt/handlers/lock.js.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +3 -3
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +1 -1
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +3 -2
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +1 -1
- package/dist/os/werkstatt/handlers/workspace-deps.d.ts.map +1 -1
- package/dist/os/werkstatt/handlers/workspace-deps.js +0 -1
- package/dist/os/werkstatt/handlers/workspace-deps.js.map +1 -1
- package/dist/os/werkstatt/werkstatt.module.d.ts.map +1 -1
- package/dist/os/werkstatt/werkstatt.module.js +6 -2
- package/dist/os/werkstatt/werkstatt.module.js.map +1 -1
- package/dist/os/workflow/handlers.d.ts.map +1 -1
- package/dist/os/workflow/handlers.js +8 -5
- package/dist/os/workflow/handlers.js.map +1 -1
- package/dist/os/workflow/workflow.module.d.ts.map +1 -1
- package/dist/os/workflow/workflow.module.js +6 -3
- package/dist/os/workflow/workflow.module.js.map +1 -1
- package/dist/src/cli-flags.d.ts +28 -0
- package/dist/src/cli-flags.d.ts.map +1 -0
- package/dist/src/cli-flags.js +232 -0
- package/dist/src/cli-flags.js.map +1 -0
- package/dist/src/compass/contract-registry.js +1 -1
- package/dist/src/compass/contract-registry.js.map +1 -1
- package/dist/src/config/forge-config.d.ts +1 -1
- package/dist/src/config/forge-config.js +1 -1
- package/dist/src/config/forge-config.js.map +1 -1
- package/dist/src/knowledge/budgets.js +1 -1
- package/dist/src/knowledge/budgets.js.map +1 -1
- package/dist/src/knowledge/compact.js +1 -1
- package/dist/src/knowledge/compact.js.map +1 -1
- package/dist/src/knowledge/parse.js +1 -1
- package/dist/src/knowledge/parse.js.map +1 -1
- package/dist/src/knowledge/sync.d.ts.map +1 -1
- package/dist/src/knowledge/sync.js +3 -5
- package/dist/src/knowledge/sync.js.map +1 -1
- package/dist/src/migration-adapters/git-utils.js +2 -2
- package/dist/src/migration-adapters/git-utils.js.map +1 -1
- package/dist/src/migration-adapters/ignored-files.js +2 -2
- package/dist/src/migration-adapters/ignored-files.js.map +1 -1
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js +1 -1
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js.map +1 -1
- package/dist/src/migration-adapters/phaser-pnpm/index.js +1 -1
- package/dist/src/migration-adapters/phaser-pnpm/index.js.map +1 -1
- package/dist/src/onboarding/agents-generate.d.ts.map +1 -1
- package/dist/src/onboarding/agents-generate.js +76 -34
- package/dist/src/onboarding/agents-generate.js.map +1 -1
- package/dist/src/onboarding/create.d.ts.map +1 -1
- package/dist/src/onboarding/create.js +10 -10
- 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 +68 -59
- 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 +30 -1
- package/dist/src/onboarding/init.js.map +1 -1
- package/dist/src/onboarding/invariant-engine.js +1 -1
- package/dist/src/onboarding/invariant-engine.js.map +1 -1
- package/dist/src/onboarding/memory-compact.d.ts.map +1 -1
- package/dist/src/onboarding/memory-compact.js +5 -4
- package/dist/src/onboarding/memory-compact.js.map +1 -1
- package/dist/src/onboarding/memory-scaffold.js +1 -1
- package/dist/src/onboarding/memory-scaffold.js.map +1 -1
- package/dist/src/onboarding/nested-agents-generate.d.ts +4 -1
- package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -1
- package/dist/src/onboarding/nested-agents-generate.js +34 -5
- 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 +8 -12
- package/dist/src/onboarding/nested-agents-templates.js.map +1 -1
- package/dist/src/onboarding/npm-token-check.js +2 -2
- package/dist/src/onboarding/npm-token-check.js.map +1 -1
- package/dist/src/onboarding/prettierignore.d.ts +29 -0
- package/dist/src/onboarding/prettierignore.d.ts.map +1 -0
- package/dist/src/onboarding/prettierignore.js +231 -0
- package/dist/src/onboarding/prettierignore.js.map +1 -0
- package/dist/src/onboarding/profile-validate.d.ts.map +1 -1
- package/dist/src/onboarding/profile-validate.js +5 -4
- package/dist/src/onboarding/profile-validate.js.map +1 -1
- package/dist/src/onboarding/scaffold-project.d.ts.map +1 -1
- package/dist/src/onboarding/scaffold-project.js +35 -27
- package/dist/src/onboarding/scaffold-project.js.map +1 -1
- package/dist/src/onboarding/scaffold.js +1 -1
- package/dist/src/onboarding/scaffold.js.map +1 -1
- package/dist/src/onboarding/skill-markers.d.ts +27 -0
- package/dist/src/onboarding/skill-markers.d.ts.map +1 -0
- package/dist/src/onboarding/skill-markers.js +131 -0
- package/dist/src/onboarding/skill-markers.js.map +1 -0
- package/dist/src/onboarding/upgrade.d.ts +10 -0
- package/dist/src/onboarding/upgrade.d.ts.map +1 -1
- package/dist/src/onboarding/upgrade.js +215 -74
- package/dist/src/onboarding/upgrade.js.map +1 -1
- package/dist/src/onboarding/workspace-discovery.js +1 -1
- package/dist/src/onboarding/workspace-discovery.js.map +1 -1
- package/dist/src/pipeline-status.d.ts +6 -5
- package/dist/src/pipeline-status.d.ts.map +1 -1
- package/dist/src/pipeline-status.js +24 -19
- package/dist/src/pipeline-status.js.map +1 -1
- package/dist/src/profiles/stack-profile.js +1 -1
- package/dist/src/profiles/stack-profile.js.map +1 -1
- package/dist/src/registry.d.ts +1 -1
- package/dist/src/registry.d.ts.map +1 -1
- package/dist/src/registry.js +3 -3
- package/dist/src/registry.js.map +1 -1
- package/dist/src/skill-schema.d.ts +1 -1
- package/dist/src/skill-schema.d.ts.map +1 -1
- package/dist/src/skill-schema.js +4 -1
- package/dist/src/skill-schema.js.map +1 -1
- package/dist/src/types.d.ts +116 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/editable-region.d.ts +46 -0
- package/dist/src/utils/editable-region.d.ts.map +1 -0
- package/dist/src/utils/editable-region.js +125 -0
- package/dist/src/utils/editable-region.js.map +1 -0
- package/dist/src/utils/fs-idempotent.d.ts +2 -1
- package/dist/src/utils/fs-idempotent.d.ts.map +1 -1
- package/dist/src/utils/fs-idempotent.js +11 -7
- package/dist/src/utils/fs-idempotent.js.map +1 -1
- package/dist/src/utils/generated-marker.d.ts +17 -0
- package/dist/src/utils/generated-marker.d.ts.map +1 -1
- package/dist/src/utils/generated-marker.js +29 -1
- package/dist/src/utils/generated-marker.js.map +1 -1
- package/dist/src/utils/index.d.ts +3 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +3 -1
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/io.d.ts +9 -0
- package/dist/src/utils/io.d.ts.map +1 -0
- package/dist/src/utils/io.js +130 -0
- package/dist/src/utils/io.js.map +1 -0
- package/dist/src/utils/markdown-table.d.ts +21 -0
- package/dist/src/utils/markdown-table.d.ts.map +1 -0
- package/dist/src/utils/markdown-table.js +116 -0
- package/dist/src/utils/markdown-table.js.map +1 -0
- package/dist/src/utils/sync-fs.d.ts +5 -0
- package/dist/src/utils/sync-fs.d.ts.map +1 -0
- package/dist/src/utils/sync-fs.js +26 -0
- package/dist/src/utils/sync-fs.js.map +1 -0
- package/dist/src/validators/note-frontmatter-validate.js +1 -1
- package/dist/src/validators/note-frontmatter-validate.js.map +1 -1
- package/dist/src/validators/note-link-validate.js +1 -1
- package/dist/src/validators/note-link-validate.js.map +1 -1
- package/dist/src/validators/note-orphan-detect.js +1 -1
- package/dist/src/validators/note-orphan-detect.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 +34 -13
- package/dist/src/validators/skill-validate.js.map +1 -1
- package/os/adr/adr.module.ts +136 -132
- package/os/adr/frontmatter-io.ts +5 -5
- package/os/adr/handlers/archive.ts +8 -4
- package/os/adr/handlers/implement-stamp.ts +14 -10
- package/os/adr/handlers/list-create.ts +5 -5
- package/os/adr/handlers/validate.ts +1 -1
- package/os/audit/audit.module.ts +33 -34
- package/os/audit/frontmatter-io.ts +5 -5
- package/os/audit/handlers/archive.ts +8 -4
- package/os/compass/compass.module.ts +17 -1
- package/os/compass/handlers/compass-audit-handler.ts +13 -5
- package/os/compass/handlers/compass-change-summary-handler.ts +4 -2
- package/os/compass/handlers/compass-inventory-handler.ts +7 -4
- package/os/compass/handlers/compass-inventory.ts +11 -8
- package/os/compass/handlers/compass-migrate-handler.ts +1 -1
- package/os/compass/handlers/compass-migrate.ts +7 -3
- package/os/compass/handlers/git-revision.ts +11 -6
- package/os/compass/handlers/resolve-scan-root.ts +1 -1
- package/os/compass/handlers/summary-record.ts +10 -4
- package/os/compass/handlers/tests/compass-audit-plan.test.ts +2 -1
- package/os/core/core.module.ts +43 -4
- package/os/core/handlers/assets-helpers.ts +7 -3
- package/os/core/handlers/build.ts +1 -1
- package/os/core/handlers/determinism-check.ts +12 -6
- package/os/core/handlers/dev.ts +1 -1
- package/os/core/handlers/file-size-lint.ts +16 -9
- package/os/core/handlers/forge-autonomy-validate.ts +10 -5
- package/os/core/handlers/knowledge-compact.ts +1 -1
- package/os/core/handlers/package-health.ts +1 -1
- package/os/core/handlers/pinned-check.ts +2 -2
- package/os/core/handlers/pinned-init.ts +9 -8
- package/os/core/handlers/pinned-validate.ts +3 -3
- package/os/core/handlers/profile-resolve.ts +1 -1
- package/os/core/handlers/public-surface.ts +1 -1
- package/os/core/handlers/release-prepare.ts +11 -6
- package/os/core/handlers/release-publish.ts +6 -6
- package/os/core/handlers/validate.ts +1 -1
- package/os/exploration/exploration.module.ts +1 -0
- package/os/exploration/frontmatter-io.ts +4 -4
- package/os/exploration/handlers/archive.ts +3 -3
- package/os/mission/handlers/archive.test.ts +38 -1
- package/os/mission/handlers/archive.ts +54 -23
- package/os/mission/mission.module.ts +38 -39
- package/os/naming/naming-convention.ts +9 -3
- package/os/naming/naming.module.ts +25 -25
- package/os/notes/notes.module.ts +87 -85
- package/os/plan/frontmatter-io.ts +5 -5
- package/os/plan/handlers/archive.ts +8 -4
- package/os/plan/plan.module.ts +33 -34
- package/os/plugin/plugin.module.ts +8 -6
- package/os/program/discovery.ts +2 -2
- package/os/program/handlers/complete.ts +1 -1
- package/os/program/handlers/lease.ts +1 -1
- package/os/program/handlers/seal.ts +1 -1
- package/os/program/lease.ts +1 -1
- package/os/program/program.module.ts +198 -193
- package/os/queue/index.ts +1 -1
- package/os/queue/manifest.ts +10 -9
- package/os/queue/queue-validate.test.ts +6 -15
- package/os/rfc/acceptance.ts +12 -6
- package/os/rfc/decision-log.ts +4 -3
- package/os/rfc/dna-trace.ts +8 -2
- package/os/rfc/frontmatter-io.ts +5 -5
- package/os/rfc/handlers/archive.ts +9 -5
- package/os/rfc/handlers/check.ts +5 -3
- package/os/rfc/handlers/implement-stamp.ts +15 -10
- package/os/rfc/handlers/index-graph.ts +3 -3
- package/os/rfc/handlers/lifecycle.ts +7 -2
- package/os/rfc/handlers/list-create.ts +7 -6
- package/os/rfc/handlers/shared.ts +3 -3
- package/os/rfc/handlers/supersede-propose.ts +8 -3
- package/os/rfc/handlers/validate-rules-rfc1006.test.ts +18 -6
- package/os/rfc/handlers/validate-rules.ts +10 -5
- package/os/rfc/handlers/validate.test.ts +71 -0
- package/os/rfc/handlers/validate.ts +6 -1
- package/os/rfc/rfc-create-concurrent.test.ts +11 -3
- package/os/rfc/rfc.module.ts +413 -374
- package/os/rfc/verification-evidence.ts +11 -5
- package/os/rfc/verification-refresh.ts +4 -3
- package/os/session/frontmatter-io.ts +14 -14
- package/os/session/handlers/archive.ts +8 -4
- package/os/session/handlers/metrics-aggregate.ts +34 -13
- package/os/session/handlers/metrics-rfc.ts +13 -8
- package/os/session/handlers/metrics-session.ts +7 -3
- package/os/session/handlers/save.ts +12 -8
- package/os/session/session.module.ts +6 -0
- package/os/spec/live-spec-list.ts +4 -4
- package/os/spec/live-spec-merge.ts +5 -5
- package/os/spec/live-spec-show.ts +3 -3
- package/os/spec/live-spec-validate.ts +4 -4
- package/os/spec/spec-materialize.ts +9 -9
- package/os/spec/spec-status.ts +9 -9
- package/os/spec/spec-validate.ts +7 -7
- package/os/spec/spec.module.ts +8 -0
- package/os/werkstatt/handlers/lock.ts +16 -16
- package/os/werkstatt/handlers/werkstatt-lock-recover.ts +3 -3
- package/os/werkstatt/handlers/werkstatt-operation-validate.ts +4 -2
- package/os/werkstatt/handlers/workspace-deps.ts +0 -1
- package/os/werkstatt/werkstatt.module.ts +8 -5
- package/os/workflow/handlers.ts +7 -5
- package/os/workflow/workflow.module.ts +45 -44
- package/package.json +1 -1
- package/profiles/forge-shell.yaml +1 -1
- package/profiles/godot-game.yaml +1 -1
- package/profiles/knowledge.yaml +1 -1
- package/profiles/phaser-game.yaml +1 -1
- package/profiles/site-workshop.yaml +1 -1
- package/profiles/typescript.yaml +1 -1
- package/skills/fo/fo-add-tests/SKILL.md +2 -2
- package/skills/fo/fo-architecture/SKILL.md +2 -2
- package/skills/fo/fo-compass-annotate/SKILL.md +2 -2
- package/skills/fo/fo-design-summit/SKILL.md +2 -2
- package/skills/fo/fo-doc-audit/SKILL.md +2 -2
- package/skills/fo/fo-explore/SKILL.md +2 -2
- package/skills/fo/fo-extract-dna/SKILL.md +2 -2
- package/skills/fo/fo-fix/SKILL.md +2 -2
- package/skills/fo/fo-handoff/SKILL.md +2 -2
- package/skills/fo/fo-harvest/SKILL.md +2 -2
- package/skills/fo/fo-idea/SKILL.md +2 -2
- package/skills/fo/fo-idea-audit/SKILL.md +2 -2
- package/skills/fo/fo-idea-create-adr/SKILL.md +3 -3
- package/skills/fo/fo-idea-create-rfc/SKILL.md +3 -3
- package/skills/fo/fo-idea-enhance/SKILL.md +2 -2
- package/skills/fo/fo-idea-i-just-want-to-see-the-plan/SKILL.md +2 -2
- package/skills/fo/fo-idea-i-just-want-to-see-the-result/SKILL.md +1 -1
- package/skills/fo/fo-idea-implement/SKILL.md +2 -2
- package/skills/fo/fo-idea-plan/SKILL.md +2 -2
- package/skills/fo/fo-idea-status/SKILL.md +2 -2
- package/skills/fo/fo-knowledge-distill/SKILL.md +2 -2
- package/skills/fo/fo-memory-sync/SKILL.md +2 -2
- package/skills/fo/fo-qa/SKILL.md +2 -2
- package/skills/fo/fo-review/SKILL.md +2 -2
- package/skills/fo/fo-session-retro/SKILL.md +2 -2
- package/skills/fo/fo-session-save/SKILL.md +2 -2
- package/skills/fo/fo-spec-ingest/SKILL.md +2 -2
- package/skills/fo/fo-step-commit/SKILL.md +1 -1
- package/skills/fo/fo-triage/SKILL.md +2 -2
- package/skills/meta/forge-bootstrap/SKILL.md +1 -1
- package/skills/meta/port-to-forge/SKILL.md +1 -1
- package/skills/meta/skill-create/SKILL.md +1 -1
- package/skills/shared/grilling/SKILL.md +1 -1
- package/skills/shared/grilling/learned-principles.archive.md +17 -0
- package/skills/shared/grilling/learned-principles.md +0 -1
- package/skills/shared/knowledge/learned-principles.md +6 -0
- package/skills/shared/my-preferences/SKILL.md +1 -1
- package/skills/shared/windows-ai-tooling/SKILL.md +1 -1
- package/skills/shared/writing-great-skills/SKILL.md +1 -1
- package/src/cli-flags.ts +285 -0
- package/src/compass/contract-registry.ts +1 -1
- package/src/config/forge-config.ts +1 -1
- package/src/knowledge/__tests__/sync.test.ts +2 -7
- package/src/knowledge/budgets.ts +1 -1
- package/src/knowledge/compact.ts +1 -1
- package/src/knowledge/parse.ts +1 -1
- package/src/knowledge/sync.ts +3 -5
- package/src/migration-adapters/git-utils.ts +2 -2
- package/src/migration-adapters/ignored-files.ts +2 -2
- package/src/migration-adapters/node-typescript-pnpm/index.ts +1 -1
- package/src/migration-adapters/phaser-pnpm/index.ts +1 -1
- package/src/onboarding/agents-generate.ts +92 -36
- package/src/onboarding/create.ts +10 -10
- package/src/onboarding/doctor.ts +70 -55
- package/src/onboarding/init.ts +38 -1
- package/src/onboarding/invariant-engine.ts +1 -1
- package/src/onboarding/memory-compact.ts +5 -4
- package/src/onboarding/memory-scaffold.ts +1 -1
- package/src/onboarding/nested-agents-generate.ts +45 -4
- package/src/onboarding/nested-agents-templates.ts +19 -13
- package/src/onboarding/npm-token-check.ts +2 -2
- package/src/onboarding/prettierignore.ts +263 -0
- package/src/onboarding/profile-validate.ts +5 -4
- package/src/onboarding/scaffold-project.ts +38 -27
- package/src/onboarding/scaffold.ts +1 -1
- package/src/onboarding/skill-markers.ts +162 -0
- package/src/onboarding/templates/behavioral-layer-core.md +2 -4
- package/src/onboarding/upgrade.ts +285 -89
- package/src/onboarding/workspace-discovery.ts +1 -1
- package/src/pipeline-status.test.ts +1 -4
- package/src/pipeline-status.ts +30 -13
- package/src/profiles/stack-profile.ts +1 -1
- package/src/registry.ts +4 -4
- package/src/skill-schema.ts +4 -1
- package/src/tests/acceptance-probe-kinds.test.ts +5 -15
- package/src/tests/agents-generate.test.ts +28 -5
- package/src/tests/cli-flags.test.ts +169 -0
- package/src/tests/contract-registry.test.ts +12 -6
- package/src/tests/doctor-fix.test.ts +1 -4
- package/src/tests/doctor-nested-agents.test.ts +53 -1
- package/src/tests/editable-generated-region.test.ts +231 -0
- package/src/tests/file-size-lint.test.ts +8 -12
- package/src/tests/fixtures/agents-generate-business-before.txt +85 -56
- package/src/tests/markdown-table.test.ts +107 -0
- package/src/tests/prettierignore-manage.test.ts +134 -0
- package/src/tests/skill-agents-sync.test.ts +168 -0
- package/src/tests/skill-sync-marker.test.ts +134 -0
- package/src/tests/skill-validate.test.ts +12 -5
- package/src/tests/upgrade.test.ts +87 -41
- package/src/types.ts +123 -0
- package/src/utils/editable-region.ts +156 -0
- package/src/utils/fs-idempotent.ts +12 -6
- package/src/utils/generated-marker.ts +36 -2
- package/src/utils/index.ts +17 -0
- package/src/utils/io.ts +143 -0
- package/src/utils/markdown-table.ts +121 -0
- package/src/utils/sync-fs.ts +43 -0
- package/src/validators/note-frontmatter-validate.ts +1 -1
- package/src/validators/note-link-validate.ts +1 -1
- package/src/validators/note-orphan-detect.ts +1 -1
- package/src/validators/port-validate.ts +1 -1
- package/src/validators/skill-validate.ts +38 -13
- package/AGENTS.md +0 -502
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>RFC-1153: preservation-boundary split/merge for editable generated
|
|
4
|
+
files. Pure, no I/O — callers read the existing file and write the merged
|
|
5
|
+
result through WorkspaceIO. The `forge:custom` marker line bounds the
|
|
6
|
+
generator-owned head; everything below it is carried over verbatim.</purpose>
|
|
7
|
+
<non-goals>
|
|
8
|
+
<item>Do not perform file I/O — operates on in-memory content strings only.</item>
|
|
9
|
+
<item>Do not apply to non-editable generated files — GENERATED_MARKER files
|
|
10
|
+
keep the RFC-0081 binary semantics (marker present = overwrite, absent = skip).</item>
|
|
11
|
+
</non-goals>
|
|
12
|
+
</MODULE_CONTRACT>
|
|
13
|
+
<KEY_DECISIONS>
|
|
14
|
+
<item>forge:custom marker bounds the generated head; canonical footer is the fallback boundary when absent.</item>
|
|
15
|
+
</KEY_DECISIONS>
|
|
16
|
+
<CHANGE_SUMMARY>
|
|
17
|
+
<item>RFC-1153: initial — splitEditableGenerated + mergeEditableGenerated with
|
|
18
|
+
forge:custom marker boundary and canonical-footer (last non-empty render line) fallback.</item>
|
|
19
|
+
</CHANGE_SUMMARY>
|
|
20
|
+
*/
|
|
21
|
+
import { CUSTOM_BOUNDARY_HINTS, CUSTOM_BOUNDARY_MARKERS, CUSTOM_BOUNDARY_TOKEN, commentStyleForPath, } from "./generated-marker.js";
|
|
22
|
+
/** DNA-58 rule: boundary and footer matching normalize CRLF to LF. */
|
|
23
|
+
function normalizeNewlines(text) {
|
|
24
|
+
return text.replace(/\r\n/g, "\n");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Canonical footer of a render — its last non-empty line. Callers that need
|
|
28
|
+
* the boundary value separately (doctor staleness, preserved-tail detection)
|
|
29
|
+
* derive it from the same render they pass to the merge.
|
|
30
|
+
*/
|
|
31
|
+
export function canonicalFooterOf(rendered) {
|
|
32
|
+
const lines = normalizeNewlines(rendered).split("\n");
|
|
33
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
34
|
+
const line = lines[i];
|
|
35
|
+
if (line !== undefined && line.trim() !== "")
|
|
36
|
+
return line;
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Split an existing editable generated file at its preservation boundary.
|
|
42
|
+
*
|
|
43
|
+
* Priority:
|
|
44
|
+
* 1. First line containing the `forge:custom` token (comment-style agnostic —
|
|
45
|
+
* a token in prose is a documented, deliberate-looking boundary hazard).
|
|
46
|
+
* The marker line and an immediately following canonical hint line belong
|
|
47
|
+
* to the generated head.
|
|
48
|
+
* 2. `footerLine` (canonical template footer, derived by callers from the
|
|
49
|
+
* render as its last non-empty line) — first occurrence is the boundary.
|
|
50
|
+
* 3. `"none"` — no resolvable boundary.
|
|
51
|
+
*/
|
|
52
|
+
export function splitEditableGenerated(content, filePath, footerLine) {
|
|
53
|
+
const text = normalizeNewlines(content);
|
|
54
|
+
const style = commentStyleForPath(filePath);
|
|
55
|
+
const hint = CUSTOM_BOUNDARY_HINTS[style];
|
|
56
|
+
const lines = text.split("\n");
|
|
57
|
+
for (let i = 0; i < lines.length; i++) {
|
|
58
|
+
const line = lines[i];
|
|
59
|
+
if (line !== undefined && line.includes(CUSTOM_BOUNDARY_TOKEN)) {
|
|
60
|
+
let headEnd = i + 1;
|
|
61
|
+
if (lines[headEnd] === hint)
|
|
62
|
+
headEnd += 1;
|
|
63
|
+
const tail = lines.slice(headEnd).join("\n");
|
|
64
|
+
return {
|
|
65
|
+
generatedHead: lines.slice(0, headEnd).join("\n"),
|
|
66
|
+
customTail: tail.trim() === "" ? null : tail,
|
|
67
|
+
boundary: "marker",
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (footerLine !== undefined) {
|
|
72
|
+
// lastIndexOf: the canonical footer is the template's last line — the
|
|
73
|
+
// trailingmost occurrence is the correct boundary even when an operator
|
|
74
|
+
// copied the line into a mid-file section.
|
|
75
|
+
const idx = lines.lastIndexOf(footerLine);
|
|
76
|
+
if (idx >= 0) {
|
|
77
|
+
const tail = lines.slice(idx + 1).join("\n");
|
|
78
|
+
return {
|
|
79
|
+
generatedHead: lines.slice(0, idx + 1).join("\n"),
|
|
80
|
+
customTail: tail.trim() === "" ? null : tail,
|
|
81
|
+
boundary: "footer",
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return { generatedHead: text, customTail: null, boundary: "none" };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Merge a fresh render with an existing editable generated file.
|
|
89
|
+
*
|
|
90
|
+
* The canonical footer is derived internally as the last non-empty line of
|
|
91
|
+
* `rendered` — no per-file-kind footer registry exists; when a template tail
|
|
92
|
+
* changes, the boundary follows the new render automatically.
|
|
93
|
+
*
|
|
94
|
+
* Merge contract:
|
|
95
|
+
* - `existing === null` (new file): rendered + boundary marker + hint.
|
|
96
|
+
* - marker boundary: head = fresh render + marker + hint; tail verbatim.
|
|
97
|
+
* - footer boundary (legacy marker-less file): head = fresh render + marker +
|
|
98
|
+
* hint (marker introduced now); tail = content after the legacy footer line.
|
|
99
|
+
* - none + identical content: clean regeneration, marker + hint appended.
|
|
100
|
+
* - none + divergent content: returns null — caller must skip and warn
|
|
101
|
+
* (`unmapped-customization`), never overwrite.
|
|
102
|
+
*
|
|
103
|
+
* The result is LF-normalized; callers write through `writeFileIfChanged`.
|
|
104
|
+
*/
|
|
105
|
+
export function mergeEditableGenerated(rendered, existing, filePath) {
|
|
106
|
+
const render = normalizeNewlines(rendered);
|
|
107
|
+
const style = commentStyleForPath(filePath);
|
|
108
|
+
const marker = CUSTOM_BOUNDARY_MARKERS[style];
|
|
109
|
+
const hint = CUSTOM_BOUNDARY_HINTS[style];
|
|
110
|
+
const boundaryBlock = `${marker}\n${hint}\n`;
|
|
111
|
+
if (existing === null) {
|
|
112
|
+
return `${render}${boundaryBlock}`;
|
|
113
|
+
}
|
|
114
|
+
const text = normalizeNewlines(existing);
|
|
115
|
+
const footer = canonicalFooterOf(render);
|
|
116
|
+
const split = splitEditableGenerated(text, filePath, footer ?? undefined);
|
|
117
|
+
if (split.boundary === "marker" || split.boundary === "footer") {
|
|
118
|
+
return `${render}${boundaryBlock}${split.customTail ?? ""}`;
|
|
119
|
+
}
|
|
120
|
+
if (text === render || text === `${render}${boundaryBlock}`) {
|
|
121
|
+
return `${render}${boundaryBlock}`;
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=editable-region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-region.js","sourceRoot":"","sources":["../../../src/utils/editable-region.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { WorkspaceIO } from "../types.ts";
|
|
2
|
+
export declare function writeFileIfChanged(filePath: string, content: string | Uint8Array, io?: WorkspaceIO): Promise<"written" | "unchanged">;
|
|
2
3
|
//# sourceMappingURL=fs-idempotent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-idempotent.d.ts","sourceRoot":"","sources":["../../../src/utils/fs-idempotent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs-idempotent.d.ts","sourceRoot":"","sources":["../../../src/utils/fs-idempotent.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,EAAE,CAAC,EAAE,WAAW,GACf,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,CAmBlC"}
|
|
@@ -26,19 +26,23 @@ Sweep batch 2: real KEY_DECISIONS on 10 files, expanded purposes (CONTRACT-02/PU
|
|
|
26
26
|
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. werkstatt-engine now 0 diagnostics.</item>
|
|
27
27
|
</CHANGE_SUMMARY>
|
|
28
28
|
*/
|
|
29
|
-
import {
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
import { resolveIo } from "./io.js";
|
|
30
|
+
// Forge-autonomy boundary (ADR-0019 / FORGE-AUTONOMY-01): `io` is optional and
|
|
31
|
+
// TYPE-ONLY — forge's standalone CLI has no kernel context, so `resolveIo`
|
|
32
|
+
// falls back to the ambient adapter. Kernel callers pass context.io so the
|
|
33
|
+
// read-compare-write goes through the recording adapter.
|
|
34
|
+
export async function writeFileIfChanged(filePath, content, io) {
|
|
35
|
+
const fio = resolveIo(io);
|
|
32
36
|
try {
|
|
33
37
|
if (typeof content === "string") {
|
|
34
|
-
const existing = await readFile(filePath
|
|
38
|
+
const existing = await fio.readFile(filePath);
|
|
35
39
|
if (existing === content) {
|
|
36
40
|
return "unchanged";
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
else {
|
|
40
|
-
const existing = await
|
|
41
|
-
if (Buffer.compare(existing, Buffer.from(content)) === 0) {
|
|
44
|
+
const existing = await fio.readFileBytes(filePath);
|
|
45
|
+
if (Buffer.compare(Buffer.from(existing), Buffer.from(content)) === 0) {
|
|
42
46
|
return "unchanged";
|
|
43
47
|
}
|
|
44
48
|
}
|
|
@@ -46,7 +50,7 @@ export async function writeFileIfChanged(filePath, content) {
|
|
|
46
50
|
catch {
|
|
47
51
|
// File does not exist — proceed to write.
|
|
48
52
|
}
|
|
49
|
-
await
|
|
53
|
+
await fio.writeFile(filePath, content);
|
|
50
54
|
return "written";
|
|
51
55
|
}
|
|
52
56
|
//# sourceMappingURL=fs-idempotent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-idempotent.js","sourceRoot":"","sources":["../../../src/utils/fs-idempotent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BE;
|
|
1
|
+
{"version":3,"file":"fs-idempotent.js","sourceRoot":"","sources":["../../../src/utils/fs-idempotent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BE;AAGF,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,+EAA+E;AAC/E,2EAA2E;AAC3E,2EAA2E;AAC3E,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,OAA4B,EAC5B,EAAgB;IAEhB,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC;QACH,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtE,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
export declare const GENERATED_MARKER = "GENERATED. Do not change this line unless the file contains project specific changes.";
|
|
2
2
|
export declare const EDITABLE_GENERATED_MARKER = "GENERATED. Safe to edit \u2014 project-specific changes are expected and encouraged.";
|
|
3
|
+
/**
|
|
4
|
+
* RFC-1153: preservation boundary marker for editable generated files.
|
|
5
|
+
* Everything below the marker line is carried over verbatim on regeneration;
|
|
6
|
+
* everything above (including the marker line itself) is generator-owned.
|
|
7
|
+
* Emitted in the file's comment style — see CUSTOM_BOUNDARY_MARKERS.
|
|
8
|
+
*/
|
|
9
|
+
export declare const CUSTOM_BOUNDARY_TOKEN = "forge:custom";
|
|
10
|
+
export declare const CUSTOM_BOUNDARY_MARKERS: Record<GeneratedHeaderCommentStyle, string>;
|
|
11
|
+
export declare const CUSTOM_BOUNDARY_HINTS: Record<GeneratedHeaderCommentStyle, string>;
|
|
3
12
|
export declare function hasGeneratedMarker(content: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* RFC-1153: true only for files carrying the editable marker. A file bearing
|
|
15
|
+
* just GENERATED_MARKER is fully generator-owned (RFC-0081) — the merge
|
|
16
|
+
* upgrades it to the editable boundary contract instead of skipping it.
|
|
17
|
+
*/
|
|
18
|
+
export declare function hasEditableGeneratedMarker(content: string): boolean;
|
|
4
19
|
export interface StripGeneratedMarkerResult {
|
|
5
20
|
changed: boolean;
|
|
6
21
|
content: string;
|
|
@@ -23,6 +38,8 @@ export interface GeneratedHeaderInput {
|
|
|
23
38
|
*/
|
|
24
39
|
editable?: boolean;
|
|
25
40
|
}
|
|
41
|
+
export type GeneratedHeaderCommentStyle = "line-slash" | "line-hash" | "block-html" | "block-css";
|
|
42
|
+
export declare function commentStyleForPath(filePath: string): GeneratedHeaderCommentStyle;
|
|
26
43
|
export declare function buildGeneratedHeader(input: GeneratedHeaderInput): string;
|
|
27
44
|
export declare function isGeneratedMarkerTextCandidate(filePath: string): boolean;
|
|
28
45
|
//# sourceMappingURL=generated-marker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-marker.d.ts","sourceRoot":"","sources":["../../../src/utils/generated-marker.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,gBAAgB,0FAC4D,CAAC;AAE1F,eAAO,MAAM,yBAAyB,yFAC6C,CAAC;
|
|
1
|
+
{"version":3,"file":"generated-marker.d.ts","sourceRoot":"","sources":["../../../src/utils/generated-marker.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,gBAAgB,0FAC4D,CAAC;AAE1F,eAAO,MAAM,yBAAyB,yFAC6C,CAAC;AAEpF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AAEpD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,2BAA2B,EAAE,MAAM,CAK/E,CAAC;AAKF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,2BAA2B,EAAE,MAAM,CAK7E,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,0BAA0B,CAuDhF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,2BAA2B,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;AAElG,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,2BAA2B,CAgBjF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CA+BxE;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAiBxE"}
|
|
@@ -15,11 +15,39 @@ source (dependency inversion).</purpose>
|
|
|
15
15
|
*/
|
|
16
16
|
export const GENERATED_MARKER = "GENERATED. Do not change this line unless the file contains project specific changes.";
|
|
17
17
|
export const EDITABLE_GENERATED_MARKER = "GENERATED. Safe to edit — project-specific changes are expected and encouraged.";
|
|
18
|
+
/**
|
|
19
|
+
* RFC-1153: preservation boundary marker for editable generated files.
|
|
20
|
+
* Everything below the marker line is carried over verbatim on regeneration;
|
|
21
|
+
* everything above (including the marker line itself) is generator-owned.
|
|
22
|
+
* Emitted in the file's comment style — see CUSTOM_BOUNDARY_MARKERS.
|
|
23
|
+
*/
|
|
24
|
+
export const CUSTOM_BOUNDARY_TOKEN = "forge:custom";
|
|
25
|
+
export const CUSTOM_BOUNDARY_MARKERS = {
|
|
26
|
+
"line-slash": "// forge:custom",
|
|
27
|
+
"line-hash": "# forge:custom",
|
|
28
|
+
"block-html": "<!-- forge:custom -->",
|
|
29
|
+
"block-css": "/* forge:custom */",
|
|
30
|
+
};
|
|
31
|
+
const CUSTOM_BOUNDARY_HINT_TEXT = "Add workspace-specific guidance below this line. Everything below is preserved on regeneration.";
|
|
32
|
+
export const CUSTOM_BOUNDARY_HINTS = {
|
|
33
|
+
"line-slash": `// ${CUSTOM_BOUNDARY_HINT_TEXT}`,
|
|
34
|
+
"line-hash": `# ${CUSTOM_BOUNDARY_HINT_TEXT}`,
|
|
35
|
+
"block-html": `<!-- ${CUSTOM_BOUNDARY_HINT_TEXT} -->`,
|
|
36
|
+
"block-css": `/* ${CUSTOM_BOUNDARY_HINT_TEXT} */`,
|
|
37
|
+
};
|
|
18
38
|
const DO_NOT_EDIT_LINE = "DO NOT EDIT THIS FILE. Changes are overwritten on the next build.";
|
|
19
39
|
const SAFE_TO_EDIT_LINE = "This file is generated but editable — your changes are preserved on regeneration.";
|
|
20
40
|
export function hasGeneratedMarker(content) {
|
|
21
41
|
return content.includes(GENERATED_MARKER) || content.includes(EDITABLE_GENERATED_MARKER);
|
|
22
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* RFC-1153: true only for files carrying the editable marker. A file bearing
|
|
45
|
+
* just GENERATED_MARKER is fully generator-owned (RFC-0081) — the merge
|
|
46
|
+
* upgrades it to the editable boundary contract instead of skipping it.
|
|
47
|
+
*/
|
|
48
|
+
export function hasEditableGeneratedMarker(content) {
|
|
49
|
+
return content.includes(EDITABLE_GENERATED_MARKER);
|
|
50
|
+
}
|
|
23
51
|
function escapeRegex(str) {
|
|
24
52
|
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
25
53
|
}
|
|
@@ -70,7 +98,7 @@ export function stripGeneratedMarker(content) {
|
|
|
70
98
|
}
|
|
71
99
|
return { changed, content: result };
|
|
72
100
|
}
|
|
73
|
-
function commentStyleForPath(filePath) {
|
|
101
|
+
export function commentStyleForPath(filePath) {
|
|
74
102
|
const lower = filePath.toLowerCase().replace(/\\/g, "/");
|
|
75
103
|
const base = lower.slice(lower.lastIndexOf("/") + 1);
|
|
76
104
|
if (base === ".gitattributes" ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-marker.js","sourceRoot":"","sources":["../../../src/utils/generated-marker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generated-marker.js","sourceRoot":"","sources":["../../../src/utils/generated-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;EAcE;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAC3B,uFAAuF,CAAC;AAE1F,MAAM,CAAC,MAAM,yBAAyB,GACpC,iFAAiF,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAEpD,MAAM,CAAC,MAAM,uBAAuB,GAAgD;IAClF,YAAY,EAAE,iBAAiB;IAC/B,WAAW,EAAE,gBAAgB;IAC7B,YAAY,EAAE,uBAAuB;IACrC,WAAW,EAAE,oBAAoB;CAClC,CAAC;AAEF,MAAM,yBAAyB,GAC7B,iGAAiG,CAAC;AAEpG,MAAM,CAAC,MAAM,qBAAqB,GAAgD;IAChF,YAAY,EAAE,MAAM,yBAAyB,EAAE;IAC/C,WAAW,EAAE,KAAK,yBAAyB,EAAE;IAC7C,YAAY,EAAE,QAAQ,yBAAyB,MAAM;IACrD,WAAW,EAAE,MAAM,yBAAyB,KAAK;CAClD,CAAC;AAEF,MAAM,gBAAgB,GAAG,mEAAmE,CAAC;AAC7F,MAAM,iBAAiB,GACrB,mFAAmF,CAAC;AAEtF,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AAC3F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,OAAO,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AACrD,CAAC;AAOD,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,MAAM,GAAG,OAAO,CAAC;IACrB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,QAAQ,GAAG,CAAC,QAAkB,EAAQ,EAAE;QAC5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI;QAC5B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;QACpC,CAAC,yBAAyB,EAAE,iBAAiB,CAAC;KACtC,EAAE,CAAC;QACX,QAAQ,CAAC;YACP,IAAI,MAAM,CAAC,2BAA2B,WAAW,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC;YAC/E,IAAI,MAAM,CAAC,2BAA2B,WAAW,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC;SACjF,CAAC,CAAC;QAEH,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,YAAY,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,aAAa,CAAC,UAAU,MAAM,OAAO,CAAC;YACvF,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,WAAW,CAAC,UAAU,WAAW,CAAC,GAAG,CAAC,KAAK;gBACzC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACnC,YAAY,CAAC,kBAAkB,CAAC;gBAChC,YAAY,CAAC,iBAAiB,CAAC;gBAC/B,YAAY,CAAC,eAAe,CAAC,EAC/B,IAAI,CACL,CAAC;YACF,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACtB,CAAC;QAED,QAAQ,CAAC;YACP,IAAI,MAAM,CAAC,gBAAgB,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC;YAC/D,IAAI,MAAM,CAAC,cAAc,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;YACtD,IAAI,MAAM,CAAC,gBAAgB,WAAW,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;YAChE,IAAI,MAAM,CAAC,aAAa,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;YACrD,IAAI,MAAM,CAAC,QAAQ,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;SACjD,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAsBD,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,IACE,IAAI,KAAK,gBAAgB;QACzB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,YAAY;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EACtB,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,WAAW,CAAC;IAC9C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA2B;IAC9D,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACvE,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACrE,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI;QAClC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,YAAY,WAAW,KAAK,CAAC,IAAI,EAAE;QACxD,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY;QACpC,CAAC,CAAC,iBAAiB,KAAK,CAAC,YAAY,EAAE;QACvC,CAAC,CAAC,qBAAqB,KAAK,CAAC,YAAY,oCAAoC,CAAC;IAEhF,MAAM,KAAK,GAAG;QACZ,MAAM;QACN,YAAY;QACZ,kBAAkB,KAAK,CAAC,YAAY,EAAE;QACtC,WAAW;QACX,iBAAiB,iBAAiB,EAAE;KACrC,CAAC;IAEF,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,YAAY;YACf,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7D,KAAK,WAAW;YACd,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5D,KAAK,WAAW;YACd,OAAO,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpE,KAAK,YAAY;YACf,OAAO,SAAS,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,QAAgB;IAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;QACxB,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;QACN,OAAO;QACP,MAAM;QACN,KAAK;QACL,MAAM;QACN,KAAK;QACL,OAAO;QACP,OAAO;QACP,QAAQ;KACT,CAAC,CAAC;IACH,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { writeFileAtomic, type WriteFileAtomicOptions } from "./fs-atomic.ts";
|
|
2
2
|
export { writeFileIfChanged } from "./fs-idempotent.ts";
|
|
3
|
-
export { GENERATED_MARKER, EDITABLE_GENERATED_MARKER, hasGeneratedMarker, stripGeneratedMarker, buildGeneratedHeader, isGeneratedMarkerTextCandidate, type GeneratedHeaderInput, type StripGeneratedMarkerResult, } from "./generated-marker.ts";
|
|
3
|
+
export { GENERATED_MARKER, EDITABLE_GENERATED_MARKER, CUSTOM_BOUNDARY_TOKEN, CUSTOM_BOUNDARY_MARKERS, CUSTOM_BOUNDARY_HINTS, hasGeneratedMarker, hasEditableGeneratedMarker, stripGeneratedMarker, buildGeneratedHeader, commentStyleForPath, isGeneratedMarkerTextCandidate, type GeneratedHeaderCommentStyle, type GeneratedHeaderInput, type StripGeneratedMarkerResult, } from "./generated-marker.ts";
|
|
4
|
+
export { splitEditableGenerated, mergeEditableGenerated, canonicalFooterOf, type EditableRegionSplit, } from "./editable-region.ts";
|
|
4
5
|
export { toKebabCase } from "./string-utils.ts";
|
|
6
|
+
export { alignMarkdownTable, parseMarkdownTable, type ParsedMarkdownTable, } from "./markdown-table.ts";
|
|
5
7
|
export { collectFiles, fileExists, type CollectFilesOptions } from "./fs.ts";
|
|
6
8
|
export { byteHash } from "./hash.ts";
|
|
7
9
|
export { trashPath } from "./fs-trash.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,8BAA8B,EAC9B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/src/utils/index.js
CHANGED
|
@@ -23,8 +23,10 @@ Sweep batch 4: 73 Compass headers on headerless engine files (certification, com
|
|
|
23
23
|
*/
|
|
24
24
|
export { writeFileAtomic } from "./fs-atomic.js";
|
|
25
25
|
export { writeFileIfChanged } from "./fs-idempotent.js";
|
|
26
|
-
export { GENERATED_MARKER, EDITABLE_GENERATED_MARKER, hasGeneratedMarker, stripGeneratedMarker, buildGeneratedHeader, isGeneratedMarkerTextCandidate, } from "./generated-marker.js";
|
|
26
|
+
export { GENERATED_MARKER, EDITABLE_GENERATED_MARKER, CUSTOM_BOUNDARY_TOKEN, CUSTOM_BOUNDARY_MARKERS, CUSTOM_BOUNDARY_HINTS, hasGeneratedMarker, hasEditableGeneratedMarker, stripGeneratedMarker, buildGeneratedHeader, commentStyleForPath, isGeneratedMarkerTextCandidate, } from "./generated-marker.js";
|
|
27
|
+
export { splitEditableGenerated, mergeEditableGenerated, canonicalFooterOf, } from "./editable-region.js";
|
|
27
28
|
export { toKebabCase } from "./string-utils.js";
|
|
29
|
+
export { alignMarkdownTable, parseMarkdownTable, } from "./markdown-table.js";
|
|
28
30
|
export { collectFiles, fileExists } from "./fs.js";
|
|
29
31
|
export { byteHash } from "./hash.js";
|
|
30
32
|
export { trashPath } from "./fs-trash.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;EAsBE;AAEF,OAAO,EAAE,eAAe,EAA+B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;EAsBE;AAEF,OAAO,EAAE,eAAe,EAA+B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,8BAA8B,GAI/B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { WorkspaceIO } from "../types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* The ambient adapter — real fs, no intent recording. Used by forge helpers
|
|
4
|
+
* when no `io` is injected (standalone `forge` CLI path).
|
|
5
|
+
*/
|
|
6
|
+
export declare const ambientIo: WorkspaceIO;
|
|
7
|
+
/** Resolve the effective io for a helper: injected port or ambient default. */
|
|
8
|
+
export declare function resolveIo(io?: WorkspaceIO): WorkspaceIO;
|
|
9
|
+
//# sourceMappingURL=io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../../src/utils/io.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAA2B,WAAW,EAAE,MAAM,aAAa,CAAC;AAkCxE;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,WA+DvB,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,WAAW,CAEvD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>
|
|
4
|
+
RFC-1152 (Wave 2a): the standalone-CLI ambient WorkspaceIO adapter. Forge
|
|
5
|
+
helpers take an optional `io?: WorkspaceIO` — when absent, `resolveIo` returns
|
|
6
|
+
this ambient adapter so the standalone `forge` CLI keeps working without a
|
|
7
|
+
kernel context. Kernel callers (`forge/os` handlers) pass `context.io` through.
|
|
8
|
+
</purpose>
|
|
9
|
+
<non-goals>
|
|
10
|
+
<item>Do not record WriteIntents — forge CLI has no execution-report surface.</item>
|
|
11
|
+
<item>Do not enforce sync parity — WorkspaceIO is async-only; sync helpers stay ambient.</item>
|
|
12
|
+
</non-goals>
|
|
13
|
+
</MODULE_CONTRACT>
|
|
14
|
+
<KEY_DECISIONS>
|
|
15
|
+
<item>createDefaultIO is deliberately unused — forge keeps a minimal ambient adapter for the standalone CLI.</item>
|
|
16
|
+
</KEY_DECISIONS>
|
|
17
|
+
<CHANGE_SUMMARY>
|
|
18
|
+
<item>RFC-1152 Wave 2a: initial ambient adapter for forge standalone CLI.</item>
|
|
19
|
+
</CHANGE_SUMMARY>
|
|
20
|
+
*/
|
|
21
|
+
import { readFile as fsReadFile, mkdir as fsMkdir, rm as fsRm, readdir as fsReaddir, stat as fsStat, rename as fsRename, appendFile as fsAppendFile, copyFile as fsCopyFile, mkdtemp as fsMkdtemp, realpath as fsRealpath, glob as fsGlob, } from "node:fs/promises";
|
|
22
|
+
import { spawn } from "node:child_process";
|
|
23
|
+
import { dirname } from "node:path";
|
|
24
|
+
import { writeFileAtomic } from "./fs-atomic.js";
|
|
25
|
+
async function execImpl(command, args, opts) {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const child = spawn(command, args, {
|
|
28
|
+
cwd: opts?.cwd,
|
|
29
|
+
env: opts?.env ? { ...process.env, ...opts.env } : undefined,
|
|
30
|
+
});
|
|
31
|
+
let stdout = "";
|
|
32
|
+
let stderr = "";
|
|
33
|
+
child.stdout?.on("data", (chunk) => {
|
|
34
|
+
stdout += chunk;
|
|
35
|
+
});
|
|
36
|
+
child.stderr?.on("data", (chunk) => {
|
|
37
|
+
stderr += chunk;
|
|
38
|
+
});
|
|
39
|
+
const timer = opts?.timeoutMs
|
|
40
|
+
? setTimeout(() => {
|
|
41
|
+
child.kill();
|
|
42
|
+
}, opts.timeoutMs)
|
|
43
|
+
: undefined;
|
|
44
|
+
timer?.unref?.();
|
|
45
|
+
child.on("close", (exitCode) => {
|
|
46
|
+
if (timer)
|
|
47
|
+
clearTimeout(timer);
|
|
48
|
+
resolve({ exitCode, stdout, stderr });
|
|
49
|
+
});
|
|
50
|
+
child.on("error", (error) => {
|
|
51
|
+
if (timer)
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
reject(error);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The ambient adapter — real fs, no intent recording. Used by forge helpers
|
|
59
|
+
* when no `io` is injected (standalone `forge` CLI path).
|
|
60
|
+
*/
|
|
61
|
+
export const ambientIo = {
|
|
62
|
+
async readFile(path) {
|
|
63
|
+
return fsReadFile(path, "utf8");
|
|
64
|
+
},
|
|
65
|
+
async readFileBytes(path) {
|
|
66
|
+
return fsReadFile(path);
|
|
67
|
+
},
|
|
68
|
+
async exists(path) {
|
|
69
|
+
try {
|
|
70
|
+
await fsStat(path);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
async glob(pattern, opts) {
|
|
78
|
+
const results = [];
|
|
79
|
+
for await (const entry of fsGlob(pattern, { cwd: opts?.cwd })) {
|
|
80
|
+
results.push(entry);
|
|
81
|
+
}
|
|
82
|
+
return results;
|
|
83
|
+
},
|
|
84
|
+
async readdir(path) {
|
|
85
|
+
const entries = await fsReaddir(path, { withFileTypes: true });
|
|
86
|
+
return entries.map((entry) => ({
|
|
87
|
+
name: entry.name,
|
|
88
|
+
isFile: entry.isFile(),
|
|
89
|
+
isDirectory: entry.isDirectory(),
|
|
90
|
+
}));
|
|
91
|
+
},
|
|
92
|
+
async stat(path) {
|
|
93
|
+
const s = await fsStat(path);
|
|
94
|
+
return { isFile: s.isFile(), isDirectory: s.isDirectory(), mtimeMs: s.mtimeMs, size: s.size };
|
|
95
|
+
},
|
|
96
|
+
async realpath(path) {
|
|
97
|
+
return fsRealpath(path);
|
|
98
|
+
},
|
|
99
|
+
async writeFile(path, content) {
|
|
100
|
+
await fsMkdir(dirname(path), { recursive: true });
|
|
101
|
+
await writeFileAtomic(path, content);
|
|
102
|
+
},
|
|
103
|
+
async appendFile(path, content) {
|
|
104
|
+
await fsMkdir(dirname(path), { recursive: true });
|
|
105
|
+
await fsAppendFile(path, content);
|
|
106
|
+
},
|
|
107
|
+
async mkdir(path) {
|
|
108
|
+
await fsMkdir(path, { recursive: true });
|
|
109
|
+
},
|
|
110
|
+
async rm(path, opts) {
|
|
111
|
+
await fsRm(path, { recursive: opts?.recursive ?? true, force: true });
|
|
112
|
+
},
|
|
113
|
+
async rename(src, dst) {
|
|
114
|
+
await fsMkdir(dirname(dst), { recursive: true });
|
|
115
|
+
await fsRename(src, dst);
|
|
116
|
+
},
|
|
117
|
+
async copyFile(src, dst) {
|
|
118
|
+
await fsMkdir(dirname(dst), { recursive: true });
|
|
119
|
+
await fsCopyFile(src, dst);
|
|
120
|
+
},
|
|
121
|
+
async mkdtemp(prefix) {
|
|
122
|
+
return fsMkdtemp(prefix);
|
|
123
|
+
},
|
|
124
|
+
exec: execImpl,
|
|
125
|
+
};
|
|
126
|
+
/** Resolve the effective io for a helper: injected port or ambient default. */
|
|
127
|
+
export function resolveIo(io) {
|
|
128
|
+
return io ?? ambientIo;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../../src/utils/io.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ParsedMarkdownTable {
|
|
2
|
+
headers: string[];
|
|
3
|
+
rows: string[][];
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Emit a prettier-normal markdown table: every cell is space-padded so all
|
|
7
|
+
* `|` delimiters align per column, and the separator row is dashes repeated
|
|
8
|
+
* to each column's width. Column width is max(3, widest cell content).
|
|
9
|
+
*
|
|
10
|
+
* Rows may be shorter or longer than headers — missing cells become empty,
|
|
11
|
+
* extra cells extend the column set.
|
|
12
|
+
*/
|
|
13
|
+
export declare function alignMarkdownTable(headers: string[], rows: string[][]): string;
|
|
14
|
+
/**
|
|
15
|
+
* Parse a markdown table into headers + rows. Returns null when the input is
|
|
16
|
+
* not a table (missing separator row). The separator row is detected by
|
|
17
|
+
* cells matching `:?-+:?` and is dropped — alignment colons are normalized
|
|
18
|
+
* away on re-emission (forge emitters never produce them).
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseMarkdownTable(text: string): ParsedMarkdownTable | null;
|
|
21
|
+
//# sourceMappingURL=markdown-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-table.d.ts","sourceRoot":"","sources":["../../../src/utils/markdown-table.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CA2B9E;AA6BD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAkB3E"}
|