@warpgogol/forge 2.1.0 → 2.2.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 +1 -1
- package/README.md +39 -87
- package/README.uk.md +39 -87
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +292 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/os/adr/adr.module.d.ts +3 -0
- package/dist/os/adr/adr.module.d.ts.map +1 -0
- package/dist/os/adr/adr.module.js +145 -0
- package/dist/os/adr/adr.module.js.map +1 -0
- package/dist/os/adr/frontmatter-io.d.ts +12 -0
- package/dist/os/adr/frontmatter-io.d.ts.map +1 -0
- package/dist/os/adr/frontmatter-io.js +67 -0
- package/dist/os/adr/frontmatter-io.js.map +1 -0
- package/dist/os/adr/handlers/archive.d.ts +24 -0
- package/dist/os/adr/handlers/archive.d.ts.map +1 -0
- package/dist/os/adr/handlers/archive.js +194 -0
- package/dist/os/adr/handlers/archive.js.map +1 -0
- package/dist/os/adr/handlers/implement-stamp.d.ts +4 -0
- package/dist/os/adr/handlers/implement-stamp.d.ts.map +1 -0
- package/dist/os/adr/handlers/implement-stamp.js +258 -0
- package/dist/os/adr/handlers/implement-stamp.js.map +1 -0
- package/dist/os/adr/handlers/list-create.d.ts +5 -0
- package/dist/os/adr/handlers/list-create.d.ts.map +1 -0
- package/dist/os/adr/handlers/list-create.js +165 -0
- package/dist/os/adr/handlers/list-create.js.map +1 -0
- package/dist/os/adr/handlers/validate.d.ts +4 -0
- package/dist/os/adr/handlers/validate.d.ts.map +1 -0
- package/dist/os/adr/handlers/validate.js +265 -0
- package/dist/os/adr/handlers/validate.js.map +1 -0
- package/dist/os/adr/index.d.ts +8 -0
- package/dist/os/adr/index.d.ts.map +1 -0
- package/dist/os/adr/index.js +18 -0
- package/dist/os/adr/index.js.map +1 -0
- package/dist/os/adr/types.d.ts +75 -0
- package/dist/os/adr/types.d.ts.map +1 -0
- package/dist/os/adr/types.js +55 -0
- package/dist/os/adr/types.js.map +1 -0
- package/dist/os/audit/audit.module.d.ts +3 -0
- package/dist/os/audit/audit.module.d.ts.map +1 -0
- package/dist/os/audit/audit.module.js +44 -0
- package/dist/os/audit/audit.module.js.map +1 -0
- package/dist/os/audit/frontmatter-io.d.ts +12 -0
- package/dist/os/audit/frontmatter-io.d.ts.map +1 -0
- package/dist/os/audit/frontmatter-io.js +71 -0
- package/dist/os/audit/frontmatter-io.js.map +1 -0
- package/dist/os/audit/handlers/archive.d.ts +4 -0
- package/dist/os/audit/handlers/archive.d.ts.map +1 -0
- package/dist/os/audit/handlers/archive.js +207 -0
- package/dist/os/audit/handlers/archive.js.map +1 -0
- package/dist/os/audit/index.d.ts +6 -0
- package/dist/os/audit/index.d.ts.map +1 -0
- package/dist/os/audit/index.js +16 -0
- package/dist/os/audit/index.js.map +1 -0
- package/dist/os/audit/types.d.ts +12 -0
- package/dist/os/audit/types.d.ts.map +1 -0
- package/dist/os/audit/types.js +17 -0
- package/dist/os/audit/types.js.map +1 -0
- package/dist/os/compass/compass.module.d.ts +3 -0
- package/dist/os/compass/compass.module.d.ts.map +1 -0
- package/dist/os/compass/compass.module.js +166 -0
- package/dist/os/compass/compass.module.js.map +1 -0
- package/dist/os/compass/handlers/compass-audit-handler.d.ts +36 -0
- package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-audit-handler.js +238 -0
- package/dist/os/compass/handlers/compass-audit-handler.js.map +1 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts +19 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.js +205 -0
- package/dist/os/compass/handlers/compass-change-summary-handler.js.map +1 -0
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts +28 -0
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-inventory-handler.js +213 -0
- package/dist/os/compass/handlers/compass-inventory-handler.js.map +1 -0
- package/dist/os/compass/handlers/compass-inventory.d.ts +30 -0
- package/dist/os/compass/handlers/compass-inventory.d.ts.map +1 -0
- package/dist/os/compass/handlers/compass-inventory.js +418 -0
- package/dist/os/compass/handlers/compass-inventory.js.map +1 -0
- package/dist/os/compass/handlers/git-revision.d.ts +8 -0
- package/dist/os/compass/handlers/git-revision.d.ts.map +1 -0
- package/dist/os/compass/handlers/git-revision.js +99 -0
- package/dist/os/compass/handlers/git-revision.js.map +1 -0
- package/dist/os/compass/handlers/resolve-scan-root.d.ts +3 -0
- package/dist/os/compass/handlers/resolve-scan-root.d.ts.map +1 -0
- package/dist/os/compass/handlers/resolve-scan-root.js +57 -0
- package/dist/os/compass/handlers/resolve-scan-root.js.map +1 -0
- package/dist/os/compass/index.d.ts +8 -0
- package/dist/os/compass/index.d.ts.map +1 -0
- package/dist/os/compass/index.js +19 -0
- package/dist/os/compass/index.js.map +1 -0
- package/dist/os/core/core.module.d.ts +3 -0
- package/dist/os/core/core.module.d.ts.map +1 -0
- package/dist/os/core/core.module.js +758 -0
- package/dist/os/core/core.module.js.map +1 -0
- package/dist/os/core/handlers/assets-check.d.ts +19 -0
- package/dist/os/core/handlers/assets-check.d.ts.map +1 -0
- package/dist/os/core/handlers/assets-check.js +89 -0
- package/dist/os/core/handlers/assets-check.js.map +1 -0
- package/dist/os/core/handlers/assets-helpers.d.ts +28 -0
- package/dist/os/core/handlers/assets-helpers.d.ts.map +1 -0
- package/dist/os/core/handlers/assets-helpers.js +128 -0
- package/dist/os/core/handlers/assets-helpers.js.map +1 -0
- package/dist/os/core/handlers/assets-list.d.ts +9 -0
- package/dist/os/core/handlers/assets-list.d.ts.map +1 -0
- package/dist/os/core/handlers/assets-list.js +72 -0
- package/dist/os/core/handlers/assets-list.js.map +1 -0
- package/dist/os/core/handlers/build.d.ts +16 -0
- package/dist/os/core/handlers/build.d.ts.map +1 -0
- package/dist/os/core/handlers/build.js +123 -0
- package/dist/os/core/handlers/build.js.map +1 -0
- package/dist/os/core/handlers/determinism-check.d.ts +20 -0
- package/dist/os/core/handlers/determinism-check.d.ts.map +1 -0
- package/dist/os/core/handlers/determinism-check.js +289 -0
- package/dist/os/core/handlers/determinism-check.js.map +1 -0
- package/dist/os/core/handlers/dev.d.ts +10 -0
- package/dist/os/core/handlers/dev.d.ts.map +1 -0
- package/dist/os/core/handlers/dev.js +102 -0
- package/dist/os/core/handlers/dev.js.map +1 -0
- package/dist/os/core/handlers/knowledge-compact.d.ts +4 -0
- package/dist/os/core/handlers/knowledge-compact.d.ts.map +1 -0
- package/dist/os/core/handlers/knowledge-compact.js +198 -0
- package/dist/os/core/handlers/knowledge-compact.js.map +1 -0
- package/dist/os/core/handlers/pinned-check.d.ts +49 -0
- package/dist/os/core/handlers/pinned-check.d.ts.map +1 -0
- package/dist/os/core/handlers/pinned-check.js +159 -0
- package/dist/os/core/handlers/pinned-check.js.map +1 -0
- package/dist/os/core/handlers/pinned-init.d.ts +19 -0
- package/dist/os/core/handlers/pinned-init.d.ts.map +1 -0
- package/dist/os/core/handlers/pinned-init.js +283 -0
- package/dist/os/core/handlers/pinned-init.js.map +1 -0
- package/dist/os/core/handlers/pinned-types.d.ts +29 -0
- package/dist/os/core/handlers/pinned-types.d.ts.map +1 -0
- package/dist/os/core/handlers/pinned-types.js +16 -0
- package/dist/os/core/handlers/pinned-types.js.map +1 -0
- package/dist/os/core/handlers/pinned-validate.d.ts +4 -0
- package/dist/os/core/handlers/pinned-validate.d.ts.map +1 -0
- package/dist/os/core/handlers/pinned-validate.js +248 -0
- package/dist/os/core/handlers/pinned-validate.js.map +1 -0
- package/dist/os/core/handlers/profile-resolve.d.ts +13 -0
- package/dist/os/core/handlers/profile-resolve.d.ts.map +1 -0
- package/dist/os/core/handlers/profile-resolve.js +65 -0
- package/dist/os/core/handlers/profile-resolve.js.map +1 -0
- package/dist/os/core/handlers/release-prepare.d.ts +25 -0
- package/dist/os/core/handlers/release-prepare.d.ts.map +1 -0
- package/dist/os/core/handlers/release-prepare.js +228 -0
- package/dist/os/core/handlers/release-prepare.js.map +1 -0
- package/dist/os/core/handlers/release-publish.d.ts +13 -0
- package/dist/os/core/handlers/release-publish.d.ts.map +1 -0
- package/dist/os/core/handlers/release-publish.js +173 -0
- package/dist/os/core/handlers/release-publish.js.map +1 -0
- package/dist/os/core/handlers/validate.d.ts +26 -0
- package/dist/os/core/handlers/validate.d.ts.map +1 -0
- package/dist/os/core/handlers/validate.js +208 -0
- package/dist/os/core/handlers/validate.js.map +1 -0
- package/dist/os/core/handlers/workspace-deps.d.ts +12 -0
- package/dist/os/core/handlers/workspace-deps.d.ts.map +1 -0
- package/dist/os/core/handlers/workspace-deps.js +39 -0
- package/dist/os/core/handlers/workspace-deps.js.map +1 -0
- package/dist/os/core/index.d.ts +2 -0
- package/dist/os/core/index.d.ts.map +1 -0
- package/dist/os/core/index.js +13 -0
- package/dist/os/core/index.js.map +1 -0
- package/dist/os/exploration/exploration.module.d.ts +3 -0
- package/dist/os/exploration/exploration.module.d.ts.map +1 -0
- package/dist/os/exploration/exploration.module.js +82 -0
- package/dist/os/exploration/exploration.module.js.map +1 -0
- package/dist/os/exploration/frontmatter-io.d.ts +13 -0
- package/dist/os/exploration/frontmatter-io.d.ts.map +1 -0
- package/dist/os/exploration/frontmatter-io.js +61 -0
- package/dist/os/exploration/frontmatter-io.js.map +1 -0
- package/dist/os/exploration/handlers/archive.d.ts +4 -0
- package/dist/os/exploration/handlers/archive.d.ts.map +1 -0
- package/dist/os/exploration/handlers/archive.js +135 -0
- package/dist/os/exploration/handlers/archive.js.map +1 -0
- package/dist/os/exploration/handlers/list.d.ts +4 -0
- package/dist/os/exploration/handlers/list.d.ts.map +1 -0
- package/dist/os/exploration/handlers/list.js +56 -0
- package/dist/os/exploration/handlers/list.js.map +1 -0
- package/dist/os/exploration/handlers/show.d.ts +4 -0
- package/dist/os/exploration/handlers/show.d.ts.map +1 -0
- package/dist/os/exploration/handlers/show.js +91 -0
- package/dist/os/exploration/handlers/show.js.map +1 -0
- package/dist/os/exploration/index.d.ts +7 -0
- package/dist/os/exploration/index.d.ts.map +1 -0
- package/dist/os/exploration/index.js +17 -0
- package/dist/os/exploration/index.js.map +1 -0
- package/dist/os/exploration/types.d.ts +38 -0
- package/dist/os/exploration/types.d.ts.map +1 -0
- package/dist/os/exploration/types.js +23 -0
- package/dist/os/exploration/types.js.map +1 -0
- package/dist/os/mission/handlers/archive.d.ts +4 -0
- package/dist/os/mission/handlers/archive.d.ts.map +1 -0
- package/dist/os/mission/handlers/archive.js +356 -0
- package/dist/os/mission/handlers/archive.js.map +1 -0
- package/dist/os/mission/index.d.ts +2 -0
- package/dist/os/mission/index.d.ts.map +1 -0
- package/dist/os/mission/index.js +2 -0
- package/dist/os/mission/index.js.map +1 -0
- package/dist/os/mission/mission.module.d.ts +3 -0
- package/dist/os/mission/mission.module.d.ts.map +1 -0
- package/dist/os/mission/mission.module.js +44 -0
- package/dist/os/mission/mission.module.js.map +1 -0
- package/dist/os/mission/types.d.ts +23 -0
- package/dist/os/mission/types.d.ts.map +1 -0
- package/dist/os/mission/types.js +18 -0
- package/dist/os/mission/types.js.map +1 -0
- package/dist/os/naming/index.d.ts +3 -0
- package/dist/os/naming/index.d.ts.map +1 -0
- package/dist/os/naming/index.js +14 -0
- package/dist/os/naming/index.js.map +1 -0
- package/dist/os/naming/naming-convention.d.ts +25 -0
- package/dist/os/naming/naming-convention.d.ts.map +1 -0
- package/dist/os/naming/naming-convention.js +324 -0
- package/dist/os/naming/naming-convention.js.map +1 -0
- package/dist/os/naming/naming.module.d.ts +3 -0
- package/dist/os/naming/naming.module.d.ts.map +1 -0
- package/dist/os/naming/naming.module.js +33 -0
- package/dist/os/naming/naming.module.js.map +1 -0
- package/dist/os/notes/index.d.ts +2 -0
- package/dist/os/notes/index.d.ts.map +1 -0
- package/dist/os/notes/index.js +10 -0
- package/dist/os/notes/index.js.map +1 -0
- package/dist/os/notes/notes.module.d.ts +3 -0
- package/dist/os/notes/notes.module.d.ts.map +1 -0
- package/dist/os/notes/notes.module.js +83 -0
- package/dist/os/notes/notes.module.js.map +1 -0
- package/dist/os/plan/frontmatter-io.d.ts +12 -0
- package/dist/os/plan/frontmatter-io.d.ts.map +1 -0
- package/dist/os/plan/frontmatter-io.js +69 -0
- package/dist/os/plan/frontmatter-io.js.map +1 -0
- package/dist/os/plan/handlers/archive.d.ts +4 -0
- package/dist/os/plan/handlers/archive.d.ts.map +1 -0
- package/dist/os/plan/handlers/archive.js +206 -0
- package/dist/os/plan/handlers/archive.js.map +1 -0
- package/dist/os/plan/index.d.ts +6 -0
- package/dist/os/plan/index.d.ts.map +1 -0
- package/dist/os/plan/index.js +16 -0
- package/dist/os/plan/index.js.map +1 -0
- package/dist/os/plan/plan.module.d.ts +3 -0
- package/dist/os/plan/plan.module.d.ts.map +1 -0
- package/dist/os/plan/plan.module.js +44 -0
- package/dist/os/plan/plan.module.js.map +1 -0
- package/dist/os/plan/types.d.ts +12 -0
- package/dist/os/plan/types.d.ts.map +1 -0
- package/dist/os/plan/types.js +17 -0
- package/dist/os/plan/types.js.map +1 -0
- package/dist/os/program/discovery.d.ts +61 -0
- package/dist/os/program/discovery.d.ts.map +1 -0
- package/dist/os/program/discovery.js +236 -0
- package/dist/os/program/discovery.js.map +1 -0
- package/dist/os/program/handlers/complete.d.ts +12 -0
- package/dist/os/program/handlers/complete.d.ts.map +1 -0
- package/dist/os/program/handlers/complete.js +344 -0
- package/dist/os/program/handlers/complete.js.map +1 -0
- package/dist/os/program/handlers/lease.d.ts +13 -0
- package/dist/os/program/handlers/lease.d.ts.map +1 -0
- package/dist/os/program/handlers/lease.js +322 -0
- package/dist/os/program/handlers/lease.js.map +1 -0
- package/dist/os/program/handlers/seal.d.ts +12 -0
- package/dist/os/program/handlers/seal.d.ts.map +1 -0
- package/dist/os/program/handlers/seal.js +265 -0
- package/dist/os/program/handlers/seal.js.map +1 -0
- package/dist/os/program/handlers/validate.d.ts +14 -0
- package/dist/os/program/handlers/validate.d.ts.map +1 -0
- package/dist/os/program/handlers/validate.js +164 -0
- package/dist/os/program/handlers/validate.js.map +1 -0
- package/dist/os/program/lease.d.ts +39 -0
- package/dist/os/program/lease.d.ts.map +1 -0
- package/dist/os/program/lease.js +129 -0
- package/dist/os/program/lease.js.map +1 -0
- package/dist/os/program/program.module.d.ts +3 -0
- package/dist/os/program/program.module.d.ts.map +1 -0
- package/dist/os/program/program.module.js +201 -0
- package/dist/os/program/program.module.js.map +1 -0
- package/dist/os/program/schemas.d.ts +225 -0
- package/dist/os/program/schemas.d.ts.map +1 -0
- package/dist/os/program/schemas.js +174 -0
- package/dist/os/program/schemas.js.map +1 -0
- package/dist/os/program/state.d.ts +38 -0
- package/dist/os/program/state.d.ts.map +1 -0
- package/dist/os/program/state.js +189 -0
- package/dist/os/program/state.js.map +1 -0
- package/dist/os/rfc/acceptance.d.ts +15 -0
- package/dist/os/rfc/acceptance.d.ts.map +1 -0
- package/dist/os/rfc/acceptance.js +310 -0
- package/dist/os/rfc/acceptance.js.map +1 -0
- package/dist/os/rfc/decision-log.d.ts +6 -0
- package/dist/os/rfc/decision-log.d.ts.map +1 -0
- package/dist/os/rfc/decision-log.js +269 -0
- package/dist/os/rfc/decision-log.js.map +1 -0
- package/dist/os/rfc/dna-trace.d.ts +27 -0
- package/dist/os/rfc/dna-trace.d.ts.map +1 -0
- package/dist/os/rfc/dna-trace.js +214 -0
- package/dist/os/rfc/dna-trace.js.map +1 -0
- package/dist/os/rfc/frontmatter-io.d.ts +18 -0
- package/dist/os/rfc/frontmatter-io.d.ts.map +1 -0
- package/dist/os/rfc/frontmatter-io.js +110 -0
- package/dist/os/rfc/frontmatter-io.js.map +1 -0
- package/dist/os/rfc/handlers/archive.d.ts +25 -0
- package/dist/os/rfc/handlers/archive.d.ts.map +1 -0
- package/dist/os/rfc/handlers/archive.js +247 -0
- package/dist/os/rfc/handlers/archive.js.map +1 -0
- package/dist/os/rfc/handlers/check.d.ts +4 -0
- package/dist/os/rfc/handlers/check.d.ts.map +1 -0
- package/dist/os/rfc/handlers/check.js +195 -0
- package/dist/os/rfc/handlers/check.js.map +1 -0
- package/dist/os/rfc/handlers/implement-stamp.d.ts +4 -0
- package/dist/os/rfc/handlers/implement-stamp.d.ts.map +1 -0
- package/dist/os/rfc/handlers/implement-stamp.js +420 -0
- package/dist/os/rfc/handlers/implement-stamp.js.map +1 -0
- package/dist/os/rfc/handlers/index-graph.d.ts +13 -0
- package/dist/os/rfc/handlers/index-graph.d.ts.map +1 -0
- package/dist/os/rfc/handlers/index-graph.js +192 -0
- package/dist/os/rfc/handlers/index-graph.js.map +1 -0
- package/dist/os/rfc/handlers/lifecycle.d.ts +13 -0
- package/dist/os/rfc/handlers/lifecycle.d.ts.map +1 -0
- package/dist/os/rfc/handlers/lifecycle.js +155 -0
- package/dist/os/rfc/handlers/lifecycle.js.map +1 -0
- package/dist/os/rfc/handlers/list-create.d.ts +6 -0
- package/dist/os/rfc/handlers/list-create.d.ts.map +1 -0
- package/dist/os/rfc/handlers/list-create.js +240 -0
- package/dist/os/rfc/handlers/list-create.js.map +1 -0
- package/dist/os/rfc/handlers/pipeline-status.d.ts +26 -0
- package/dist/os/rfc/handlers/pipeline-status.d.ts.map +1 -0
- package/dist/os/rfc/handlers/pipeline-status.js +124 -0
- package/dist/os/rfc/handlers/pipeline-status.js.map +1 -0
- package/dist/os/rfc/handlers/shared.d.ts +22 -0
- package/dist/os/rfc/handlers/shared.d.ts.map +1 -0
- package/dist/os/rfc/handlers/shared.js +105 -0
- package/dist/os/rfc/handlers/shared.js.map +1 -0
- package/dist/os/rfc/handlers/supersede-propose.d.ts +4 -0
- package/dist/os/rfc/handlers/supersede-propose.d.ts.map +1 -0
- package/dist/os/rfc/handlers/supersede-propose.js +203 -0
- package/dist/os/rfc/handlers/supersede-propose.js.map +1 -0
- package/dist/os/rfc/handlers/validate-rules.d.ts +32 -0
- package/dist/os/rfc/handlers/validate-rules.d.ts.map +1 -0
- package/dist/os/rfc/handlers/validate-rules.js +590 -0
- package/dist/os/rfc/handlers/validate-rules.js.map +1 -0
- package/dist/os/rfc/handlers/validate.d.ts +4 -0
- package/dist/os/rfc/handlers/validate.d.ts.map +1 -0
- package/dist/os/rfc/handlers/validate.js +108 -0
- package/dist/os/rfc/handlers/validate.js.map +1 -0
- package/dist/os/rfc/handlers.d.ts +7 -0
- package/dist/os/rfc/handlers.d.ts.map +1 -0
- package/dist/os/rfc/handlers.js +19 -0
- package/dist/os/rfc/handlers.js.map +1 -0
- package/dist/os/rfc/index.d.ts +18 -0
- package/dist/os/rfc/index.d.ts.map +1 -0
- package/dist/os/rfc/index.js +24 -0
- package/dist/os/rfc/index.js.map +1 -0
- package/dist/os/rfc/rfc.module.d.ts +3 -0
- package/dist/os/rfc/rfc.module.d.ts.map +1 -0
- package/dist/os/rfc/rfc.module.js +366 -0
- package/dist/os/rfc/rfc.module.js.map +1 -0
- package/dist/os/rfc/types.d.ts +483 -0
- package/dist/os/rfc/types.d.ts.map +1 -0
- package/dist/os/rfc/types.js +100 -0
- package/dist/os/rfc/types.js.map +1 -0
- package/dist/os/rfc/verification-evidence.d.ts +8 -0
- package/dist/os/rfc/verification-evidence.d.ts.map +1 -0
- package/dist/os/rfc/verification-evidence.js +184 -0
- package/dist/os/rfc/verification-evidence.js.map +1 -0
- package/dist/os/session/atif-parser.d.ts +29 -0
- package/dist/os/session/atif-parser.d.ts.map +1 -0
- package/dist/os/session/atif-parser.js +140 -0
- package/dist/os/session/atif-parser.js.map +1 -0
- package/dist/os/session/frontmatter-io.d.ts +31 -0
- package/dist/os/session/frontmatter-io.d.ts.map +1 -0
- package/dist/os/session/frontmatter-io.js +146 -0
- package/dist/os/session/frontmatter-io.js.map +1 -0
- package/dist/os/session/handlers/archive.d.ts +4 -0
- package/dist/os/session/handlers/archive.d.ts.map +1 -0
- package/dist/os/session/handlers/archive.js +241 -0
- package/dist/os/session/handlers/archive.js.map +1 -0
- package/dist/os/session/handlers/list.d.ts +4 -0
- package/dist/os/session/handlers/list.d.ts.map +1 -0
- package/dist/os/session/handlers/list.js +147 -0
- package/dist/os/session/handlers/list.js.map +1 -0
- package/dist/os/session/handlers/save.d.ts +6 -0
- package/dist/os/session/handlers/save.d.ts.map +1 -0
- package/dist/os/session/handlers/save.js +297 -0
- package/dist/os/session/handlers/save.js.map +1 -0
- package/dist/os/session/handlers/validate.d.ts +4 -0
- package/dist/os/session/handlers/validate.d.ts.map +1 -0
- package/dist/os/session/handlers/validate.js +188 -0
- package/dist/os/session/handlers/validate.js.map +1 -0
- package/dist/os/session/index.d.ts +9 -0
- package/dist/os/session/index.d.ts.map +1 -0
- package/dist/os/session/index.js +20 -0
- package/dist/os/session/index.js.map +1 -0
- package/dist/os/session/session.module.d.ts +3 -0
- package/dist/os/session/session.module.d.ts.map +1 -0
- package/dist/os/session/session.module.js +115 -0
- package/dist/os/session/session.module.js.map +1 -0
- package/dist/os/session/types.d.ts +101 -0
- package/dist/os/session/types.d.ts.map +1 -0
- package/dist/os/session/types.js +52 -0
- package/dist/os/session/types.js.map +1 -0
- package/dist/os/spec/live-spec-list.d.ts +4 -0
- package/dist/os/spec/live-spec-list.d.ts.map +1 -0
- package/dist/os/spec/live-spec-list.js +64 -0
- package/dist/os/spec/live-spec-list.js.map +1 -0
- package/dist/os/spec/live-spec-merge.d.ts +4 -0
- package/dist/os/spec/live-spec-merge.d.ts.map +1 -0
- package/dist/os/spec/live-spec-merge.js +345 -0
- package/dist/os/spec/live-spec-merge.js.map +1 -0
- package/dist/os/spec/live-spec-show.d.ts +4 -0
- package/dist/os/spec/live-spec-show.d.ts.map +1 -0
- package/dist/os/spec/live-spec-show.js +99 -0
- package/dist/os/spec/live-spec-show.js.map +1 -0
- package/dist/os/spec/live-spec-types.d.ts +71 -0
- package/dist/os/spec/live-spec-types.d.ts.map +1 -0
- package/dist/os/spec/live-spec-types.js +14 -0
- package/dist/os/spec/live-spec-types.js.map +1 -0
- package/dist/os/spec/live-spec-validate.d.ts +4 -0
- package/dist/os/spec/live-spec-validate.d.ts.map +1 -0
- package/dist/os/spec/live-spec-validate.js +140 -0
- package/dist/os/spec/live-spec-validate.js.map +1 -0
- package/dist/os/spec/spec-materialize.d.ts +21 -0
- package/dist/os/spec/spec-materialize.d.ts.map +1 -0
- package/dist/os/spec/spec-materialize.js +336 -0
- package/dist/os/spec/spec-materialize.js.map +1 -0
- package/dist/os/spec/spec-schema.d.ts +126 -0
- package/dist/os/spec/spec-schema.d.ts.map +1 -0
- package/dist/os/spec/spec-schema.js +118 -0
- package/dist/os/spec/spec-schema.js.map +1 -0
- package/dist/os/spec/spec-status.d.ts +33 -0
- package/dist/os/spec/spec-status.d.ts.map +1 -0
- package/dist/os/spec/spec-status.js +222 -0
- package/dist/os/spec/spec-status.js.map +1 -0
- package/dist/os/spec/spec-validate.d.ts +4 -0
- package/dist/os/spec/spec-validate.d.ts.map +1 -0
- package/dist/os/spec/spec-validate.js +435 -0
- package/dist/os/spec/spec-validate.js.map +1 -0
- package/dist/os/spec/spec.module.d.ts +3 -0
- package/dist/os/spec/spec.module.d.ts.map +1 -0
- package/dist/os/spec/spec.module.js +119 -0
- package/dist/os/spec/spec.module.js.map +1 -0
- package/dist/os/werkstatt/handlers/lock.d.ts +10 -0
- package/dist/os/werkstatt/handlers/lock.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/lock.js +153 -0
- package/dist/os/werkstatt/handlers/lock.js.map +1 -0
- package/dist/os/werkstatt/handlers/schema.d.ts +33 -0
- package/dist/os/werkstatt/handlers/schema.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/schema.js +42 -0
- package/dist/os/werkstatt/handlers/schema.js.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts +15 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +144 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts +18 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js +43 -0
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts +11 -0
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +1 -0
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +79 -0
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +1 -0
- package/dist/os/werkstatt/index.d.ts +7 -0
- package/dist/os/werkstatt/index.d.ts.map +1 -0
- package/dist/os/werkstatt/index.js +18 -0
- package/dist/os/werkstatt/index.js.map +1 -0
- package/dist/os/werkstatt/werkstatt.module.d.ts +3 -0
- package/dist/os/werkstatt/werkstatt.module.d.ts.map +1 -0
- package/dist/os/werkstatt/werkstatt.module.js +58 -0
- package/dist/os/werkstatt/werkstatt.module.js.map +1 -0
- package/dist/os/workflow/handlers.d.ts +12 -0
- package/dist/os/workflow/handlers.d.ts.map +1 -0
- package/dist/os/workflow/handlers.js +254 -0
- package/dist/os/workflow/handlers.js.map +1 -0
- package/dist/os/workflow/index.d.ts +4 -0
- package/dist/os/workflow/index.d.ts.map +1 -0
- package/dist/os/workflow/index.js +18 -0
- package/dist/os/workflow/index.js.map +1 -0
- package/dist/os/workflow/types.d.ts +69 -0
- package/dist/os/workflow/types.d.ts.map +1 -0
- package/dist/os/workflow/types.js +23 -0
- package/dist/os/workflow/types.js.map +1 -0
- package/dist/os/workflow/workflow.module.d.ts +3 -0
- package/dist/os/workflow/workflow.module.d.ts.map +1 -0
- package/dist/os/workflow/workflow.module.js +48 -0
- package/dist/os/workflow/workflow.module.js.map +1 -0
- package/dist/src/cli-output.d.ts +5 -0
- package/dist/src/cli-output.d.ts.map +1 -0
- package/dist/src/cli-output.js +53 -0
- package/dist/src/cli-output.js.map +1 -0
- package/dist/src/config/forge-config.d.ts +242 -0
- package/dist/src/config/forge-config.d.ts.map +1 -0
- package/dist/src/config/forge-config.js +359 -0
- package/dist/src/config/forge-config.js.map +1 -0
- package/dist/src/forge-module.d.ts +16 -0
- package/dist/src/forge-module.d.ts.map +1 -0
- package/dist/src/forge-module.js +15 -0
- package/dist/src/forge-module.js.map +1 -0
- package/dist/src/index.d.ts +36 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +56 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/knowledge/budgets.d.ts +38 -0
- package/dist/src/knowledge/budgets.d.ts.map +1 -0
- package/dist/src/knowledge/budgets.js +157 -0
- package/dist/src/knowledge/budgets.js.map +1 -0
- package/dist/src/knowledge/compact.d.ts +47 -0
- package/dist/src/knowledge/compact.d.ts.map +1 -0
- package/dist/src/knowledge/compact.js +320 -0
- package/dist/src/knowledge/compact.js.map +1 -0
- package/dist/src/knowledge/index.d.ts +7 -0
- package/dist/src/knowledge/index.d.ts.map +1 -0
- package/dist/src/knowledge/index.js +19 -0
- package/dist/src/knowledge/index.js.map +1 -0
- package/dist/src/knowledge/parse.d.ts +3 -0
- package/dist/src/knowledge/parse.d.ts.map +1 -0
- package/dist/src/knowledge/parse.js +205 -0
- package/dist/src/knowledge/parse.js.map +1 -0
- package/dist/src/knowledge/promote.d.ts +37 -0
- package/dist/src/knowledge/promote.d.ts.map +1 -0
- package/dist/src/knowledge/promote.js +120 -0
- package/dist/src/knowledge/promote.js.map +1 -0
- package/dist/src/knowledge/schema.d.ts +61 -0
- package/dist/src/knowledge/schema.d.ts.map +1 -0
- package/dist/src/knowledge/schema.js +64 -0
- package/dist/src/knowledge/schema.js.map +1 -0
- package/dist/src/knowledge/serialize.d.ts +3 -0
- package/dist/src/knowledge/serialize.d.ts.map +1 -0
- package/dist/src/knowledge/serialize.js +67 -0
- package/dist/src/knowledge/serialize.js.map +1 -0
- package/dist/src/migration-adapters/git-utils.d.ts +3 -0
- package/dist/src/migration-adapters/git-utils.d.ts.map +1 -0
- package/dist/src/migration-adapters/git-utils.js +56 -0
- package/dist/src/migration-adapters/git-utils.js.map +1 -0
- package/dist/src/migration-adapters/ignored-files.d.ts +12 -0
- package/dist/src/migration-adapters/ignored-files.d.ts.map +1 -0
- package/dist/src/migration-adapters/ignored-files.js +190 -0
- package/dist/src/migration-adapters/ignored-files.js.map +1 -0
- package/dist/src/migration-adapters/index.d.ts +8 -0
- package/dist/src/migration-adapters/index.d.ts.map +1 -0
- package/dist/src/migration-adapters/index.js +17 -0
- package/dist/src/migration-adapters/index.js.map +1 -0
- package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts +3 -0
- package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts.map +1 -0
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js +141 -0
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js.map +1 -0
- package/dist/src/migration-adapters/phaser-pnpm/index.d.ts +3 -0
- package/dist/src/migration-adapters/phaser-pnpm/index.d.ts.map +1 -0
- package/dist/src/migration-adapters/phaser-pnpm/index.js +142 -0
- package/dist/src/migration-adapters/phaser-pnpm/index.js.map +1 -0
- package/dist/src/migration-adapters/registry.d.ts +6 -0
- package/dist/src/migration-adapters/registry.d.ts.map +1 -0
- package/dist/src/migration-adapters/registry.js +55 -0
- package/dist/src/migration-adapters/registry.js.map +1 -0
- package/dist/src/migration-adapters/types.d.ts +35 -0
- package/dist/src/migration-adapters/types.d.ts.map +1 -0
- package/dist/src/migration-adapters/types.js +31 -0
- package/dist/src/migration-adapters/types.js.map +1 -0
- package/dist/src/onboarding/agents-generate.d.ts +30 -0
- package/dist/src/onboarding/agents-generate.d.ts.map +1 -0
- package/dist/src/onboarding/agents-generate.js +352 -0
- package/dist/src/onboarding/agents-generate.js.map +1 -0
- package/dist/src/onboarding/create.d.ts +12 -0
- package/dist/src/onboarding/create.d.ts.map +1 -0
- package/dist/src/onboarding/create.js +318 -0
- package/dist/src/onboarding/create.js.map +1 -0
- package/dist/src/onboarding/doctor.d.ts +45 -0
- package/dist/src/onboarding/doctor.d.ts.map +1 -0
- package/dist/src/onboarding/doctor.js +1108 -0
- package/dist/src/onboarding/doctor.js.map +1 -0
- package/dist/src/onboarding/init.d.ts +32 -0
- package/dist/src/onboarding/init.d.ts.map +1 -0
- package/dist/src/onboarding/init.js +291 -0
- package/dist/src/onboarding/init.js.map +1 -0
- package/dist/src/onboarding/invariant-engine.d.ts +17 -0
- package/dist/src/onboarding/invariant-engine.d.ts.map +1 -0
- package/dist/src/onboarding/invariant-engine.js +416 -0
- package/dist/src/onboarding/invariant-engine.js.map +1 -0
- package/dist/src/onboarding/memory-scaffold.d.ts +18 -0
- package/dist/src/onboarding/memory-scaffold.d.ts.map +1 -0
- package/dist/src/onboarding/memory-scaffold.js +151 -0
- package/dist/src/onboarding/memory-scaffold.js.map +1 -0
- package/dist/src/onboarding/nested-agents-generate.d.ts +18 -0
- package/dist/src/onboarding/nested-agents-generate.d.ts.map +1 -0
- package/dist/src/onboarding/nested-agents-generate.js +69 -0
- package/dist/src/onboarding/nested-agents-generate.js.map +1 -0
- package/dist/src/onboarding/nested-agents-templates.d.ts +26 -0
- package/dist/src/onboarding/nested-agents-templates.d.ts.map +1 -0
- package/dist/src/onboarding/nested-agents-templates.js +178 -0
- package/dist/src/onboarding/nested-agents-templates.js.map +1 -0
- package/dist/src/onboarding/profile-validate.d.ts +13 -0
- package/dist/src/onboarding/profile-validate.d.ts.map +1 -0
- package/dist/src/onboarding/profile-validate.js +109 -0
- package/dist/src/onboarding/profile-validate.js.map +1 -0
- package/dist/src/onboarding/scaffold-project.d.ts +12 -0
- package/dist/src/onboarding/scaffold-project.d.ts.map +1 -0
- package/dist/src/onboarding/scaffold-project.js +248 -0
- package/dist/src/onboarding/scaffold-project.js.map +1 -0
- package/dist/src/onboarding/scaffold.d.ts +15 -0
- package/dist/src/onboarding/scaffold.d.ts.map +1 -0
- package/dist/src/onboarding/scaffold.js +120 -0
- package/dist/src/onboarding/scaffold.js.map +1 -0
- package/dist/src/onboarding/upgrade.d.ts +25 -0
- package/dist/src/onboarding/upgrade.d.ts.map +1 -0
- package/dist/src/onboarding/upgrade.js +391 -0
- package/dist/src/onboarding/upgrade.js.map +1 -0
- package/dist/src/onboarding/workspace-discovery.d.ts +11 -0
- package/dist/src/onboarding/workspace-discovery.d.ts.map +1 -0
- package/dist/src/onboarding/workspace-discovery.js +138 -0
- package/dist/src/onboarding/workspace-discovery.js.map +1 -0
- package/dist/src/profiles/profile-schema.d.ts +351 -0
- package/dist/src/profiles/profile-schema.d.ts.map +1 -0
- package/dist/src/profiles/profile-schema.js +201 -0
- package/dist/src/profiles/profile-schema.js.map +1 -0
- package/dist/src/profiles/stack-profile.d.ts +168 -0
- package/dist/src/profiles/stack-profile.d.ts.map +1 -0
- package/dist/src/profiles/stack-profile.js +144 -0
- package/dist/src/profiles/stack-profile.js.map +1 -0
- package/dist/src/profiles/terminology-utils.d.ts +8 -0
- package/dist/src/profiles/terminology-utils.d.ts.map +1 -0
- package/dist/src/profiles/terminology-utils.js +31 -0
- package/dist/src/profiles/terminology-utils.js.map +1 -0
- package/dist/src/registry.d.ts +38 -0
- package/dist/src/registry.d.ts.map +1 -0
- package/dist/src/registry.js +135 -0
- package/dist/src/registry.js.map +1 -0
- package/dist/src/skill-schema.d.ts +30 -0
- package/dist/src/skill-schema.d.ts.map +1 -0
- package/dist/src/skill-schema.js +34 -0
- package/dist/src/skill-schema.js.map +1 -0
- package/dist/src/types.d.ts +152 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +17 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/fs-atomic.d.ts +7 -0
- package/dist/src/utils/fs-atomic.d.ts.map +1 -0
- package/dist/src/utils/fs-atomic.js +81 -0
- package/dist/src/utils/fs-atomic.js.map +1 -0
- package/dist/src/utils/fs-idempotent.d.ts +2 -0
- package/dist/src/utils/fs-idempotent.d.ts.map +1 -0
- package/dist/src/utils/fs-idempotent.js +39 -0
- package/dist/src/utils/fs-idempotent.js.map +1 -0
- package/dist/src/utils/fs-trash-sync.d.ts +2 -0
- package/dist/src/utils/fs-trash-sync.d.ts.map +1 -0
- package/dist/src/utils/fs-trash-sync.js +34 -0
- package/dist/src/utils/fs-trash-sync.js.map +1 -0
- package/dist/src/utils/fs-trash.d.ts +2 -0
- package/dist/src/utils/fs-trash.d.ts.map +1 -0
- package/dist/src/utils/fs-trash.js +24 -0
- package/dist/src/utils/fs-trash.js.map +1 -0
- package/dist/src/utils/fs.d.ts +8 -0
- package/dist/src/utils/fs.d.ts.map +1 -0
- package/dist/src/utils/fs.js +60 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/utils/generated-marker.d.ts +21 -0
- package/dist/src/utils/generated-marker.d.ts.map +1 -0
- package/dist/src/utils/generated-marker.js +128 -0
- package/dist/src/utils/generated-marker.js.map +1 -0
- package/dist/src/utils/hash.d.ts +2 -0
- package/dist/src/utils/hash.d.ts.map +1 -0
- package/dist/src/utils/hash.js +18 -0
- package/dist/src/utils/hash.js.map +1 -0
- package/dist/src/utils/index.d.ts +9 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +21 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/string-utils.d.ts +2 -0
- package/dist/src/utils/string-utils.d.ts.map +1 -0
- package/dist/src/utils/string-utils.js +19 -0
- package/dist/src/utils/string-utils.js.map +1 -0
- package/dist/src/validators/note-frontmatter-validate.d.ts +20 -0
- package/dist/src/validators/note-frontmatter-validate.d.ts.map +1 -0
- package/dist/src/validators/note-frontmatter-validate.js +117 -0
- package/dist/src/validators/note-frontmatter-validate.js.map +1 -0
- package/dist/src/validators/note-link-validate.d.ts +21 -0
- package/dist/src/validators/note-link-validate.d.ts.map +1 -0
- package/dist/src/validators/note-link-validate.js +121 -0
- package/dist/src/validators/note-link-validate.js.map +1 -0
- package/dist/src/validators/note-orphan-detect.d.ts +19 -0
- package/dist/src/validators/note-orphan-detect.d.ts.map +1 -0
- package/dist/src/validators/note-orphan-detect.js +123 -0
- package/dist/src/validators/note-orphan-detect.js.map +1 -0
- package/dist/src/validators/port-validate.d.ts +12 -0
- package/dist/src/validators/port-validate.d.ts.map +1 -0
- package/dist/src/validators/port-validate.js +78 -0
- package/dist/src/validators/port-validate.js.map +1 -0
- package/dist/src/validators/skill-validate.d.ts +29 -0
- package/dist/src/validators/skill-validate.d.ts.map +1 -0
- package/dist/src/validators/skill-validate.js +689 -0
- package/dist/src/validators/skill-validate.js.map +1 -0
- package/package.json +1 -1
- package/profiles/forge-shell.yaml +2 -0
- package/profiles/godot-csharp.yaml +192 -9
- package/profiles/phaser-turborepo.yaml +5 -3
- package/src/onboarding/templates/behavioral-layer-core.md +4 -5
- package/src/onboarding/templates/root-agents-business.md +1 -1
- package/src/onboarding/templates/root-agents-creative.md +1 -1
- package/profiles/astro-typescript-turborepo.yaml +0 -378
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>naming.convention.lint — validates that every filename in registered repo roots
|
|
4
|
+
uses kebab-case (lowercase letters, digits, hyphens only), with documented exemptions.</purpose>
|
|
5
|
+
<non-goals>
|
|
6
|
+
<item>Do not introduce app-specific runtime composition or deployment behavior into this reusable package source file.</item>
|
|
7
|
+
</non-goals>
|
|
8
|
+
</MODULE_CONTRACT>
|
|
9
|
+
<CHANGE_SUMMARY>
|
|
10
|
+
<item>RFC-0303: split out of structure.ts (Phase 3 file-size split).</item>
|
|
11
|
+
<item>RFC-0360: extend scan roots from apps/ and packages/ to the whole repo.</item>
|
|
12
|
+
</CHANGE_SUMMARY>
|
|
13
|
+
*/
|
|
14
|
+
import { basename, join, relative } from "node:path";
|
|
15
|
+
import { readFile } from "node:fs/promises";
|
|
16
|
+
import { readdirSync } from "node:fs";
|
|
17
|
+
import { collectFiles } from "../../src/utils/fs.js";
|
|
18
|
+
// @ai-invariant The exception rules below are the canonical source for naming.convention.lint.
|
|
19
|
+
// Update naming-conventions.md (packages/site-kernel/docs/) when these rules change.
|
|
20
|
+
// RFC-0360: Registered recursive roots — scanned recursively for filename violations.
|
|
21
|
+
const NAMING_CONVENTION_RECURSIVE_ROOTS = [
|
|
22
|
+
"apps",
|
|
23
|
+
"packages",
|
|
24
|
+
"services",
|
|
25
|
+
"docs",
|
|
26
|
+
"integrations",
|
|
27
|
+
"onboarding",
|
|
28
|
+
"fleet",
|
|
29
|
+
"hooks",
|
|
30
|
+
"tools",
|
|
31
|
+
"scripts",
|
|
32
|
+
"systems",
|
|
33
|
+
"tsconfig",
|
|
34
|
+
];
|
|
35
|
+
// RFC-0360: Registered ephemeral roots — root name validated, contents skipped unless --include-ignored.
|
|
36
|
+
const NAMING_CONVENTION_EPHEMERAL_ROOTS = ["missions", "releases", "agents", ".werkstatt"];
|
|
37
|
+
// RFC-0360: Tool/cache directories that are never scanned at any level.
|
|
38
|
+
const NAMING_CONVENTION_IGNORED_TOP_LEVEL = new Set([
|
|
39
|
+
"node_modules",
|
|
40
|
+
".git",
|
|
41
|
+
".turbo",
|
|
42
|
+
".astro",
|
|
43
|
+
".wrangler",
|
|
44
|
+
".vscode",
|
|
45
|
+
".idea",
|
|
46
|
+
"coverage",
|
|
47
|
+
".changelog-system",
|
|
48
|
+
".codex-runlogs",
|
|
49
|
+
".agents",
|
|
50
|
+
".claude",
|
|
51
|
+
".github",
|
|
52
|
+
".opencode",
|
|
53
|
+
".windsurf",
|
|
54
|
+
".cache",
|
|
55
|
+
"tmp",
|
|
56
|
+
]);
|
|
57
|
+
// Tool-mandated filenames exempt from kebab-case (Docker, Caddy use these exact names).
|
|
58
|
+
const NAMING_CONVENTION_TOOL_MANDATED = new Set(["Dockerfile", "Caddyfile"]);
|
|
59
|
+
const NAMING_CONVENTION_IGNORED_DIRS = new Set([
|
|
60
|
+
"node_modules",
|
|
61
|
+
"dist",
|
|
62
|
+
".git",
|
|
63
|
+
".turbo",
|
|
64
|
+
".astro",
|
|
65
|
+
".wrangler",
|
|
66
|
+
".vscode",
|
|
67
|
+
".idea",
|
|
68
|
+
"coverage",
|
|
69
|
+
"spec",
|
|
70
|
+
"todo",
|
|
71
|
+
// Generated, gitignored media-artifact dirs under public/ — their filenames are owned by the
|
|
72
|
+
// generators, not authored: RFC-0204 responsive image variants (_img) and RFC-0210 video
|
|
73
|
+
// variants / HLS segments (_video, e.g. "1080p_000.ts", where ".ts" is MPEG-TS, not TypeScript).
|
|
74
|
+
"_img",
|
|
75
|
+
"_video",
|
|
76
|
+
// DB migration dirs follow the ordered tool convention "NNN_name.sql" (Supabase/Postgres,
|
|
77
|
+
// RFC-0186) — the numeric-underscore prefix is required for ordering and is not authored prose.
|
|
78
|
+
"migrations",
|
|
79
|
+
]);
|
|
80
|
+
const NAMING_CONVENTION_EXEMPT_KEYWORDS = ["config", "module"];
|
|
81
|
+
// Set of directory paths that are exempt from naming convention (generated files)
|
|
82
|
+
const NAMING_CONVENTION_EXEMPT_DIRS = new Set([
|
|
83
|
+
"components/icons/gen", // Generated icon components — naming controlled by generator
|
|
84
|
+
]);
|
|
85
|
+
/**
|
|
86
|
+
* Returns true when a filename is exempt from kebab-case enforcement.
|
|
87
|
+
*
|
|
88
|
+
* Exemptions (see naming-conventions.md for the canonical description):
|
|
89
|
+
* 1. File name starts with a dot (.env, .gitignore, ...).
|
|
90
|
+
* 2. File name starts with an underscore (_shared.ts, _headers, etc.).
|
|
91
|
+
* 3. File name is ALLCAPS (AGENTS.md, README.md, LICENSE, etc.).
|
|
92
|
+
* 4. File name (full, including extension) contains "config" or "module".
|
|
93
|
+
* 5. File is in an exempt directory (components/icons/gen — generated files).
|
|
94
|
+
* 6. Base icon component (LordIconBase.astro) — used by generated icon components.
|
|
95
|
+
*/
|
|
96
|
+
function isNamingExempt(fileName, filePath) {
|
|
97
|
+
if (fileName.startsWith("."))
|
|
98
|
+
return true;
|
|
99
|
+
if (fileName.startsWith("_"))
|
|
100
|
+
return true;
|
|
101
|
+
if (NAMING_CONVENTION_TOOL_MANDATED.has(fileName))
|
|
102
|
+
return true;
|
|
103
|
+
// SHOUTY_SNAKE_CASE files are exempt (AGENTS.md, README.md, LICENSE,
|
|
104
|
+
// ICONS_GENERATE.md, etc.). RFC-0132 extension: the check uses the FIRST
|
|
105
|
+
// stem segment so multi-segment names like AGENTS.template.md and
|
|
106
|
+
// SCHEMA.draft.md inherit the exemption from their canonical first segment
|
|
107
|
+
// — this is intentional for template files whose generated artifact carries
|
|
108
|
+
// the canonical name (AGENTS.template.md → AGENTS.md after agents.generate).
|
|
109
|
+
const firstDotIndex = fileName.indexOf(".");
|
|
110
|
+
const firstStem = firstDotIndex > 0 ? fileName.slice(0, firstDotIndex) : fileName;
|
|
111
|
+
if (firstStem.length > 0 && /^[A-Z]+(_[A-Z]+)*$/.test(firstStem))
|
|
112
|
+
return true;
|
|
113
|
+
for (const keyword of NAMING_CONVENTION_EXEMPT_KEYWORDS) {
|
|
114
|
+
if (fileName.includes(keyword))
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
// Check if file is in an exempt directory
|
|
118
|
+
if (filePath) {
|
|
119
|
+
for (const exemptDir of NAMING_CONVENTION_EXEMPT_DIRS) {
|
|
120
|
+
if (filePath.includes(exemptDir))
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Returns true when a filename violates the kebab-case convention.
|
|
128
|
+
* Violations: underscores OR mixed-case (PascalCase, camelCase).
|
|
129
|
+
* Note: ALLCAPS files are exempt, not violations.
|
|
130
|
+
* Only called when the file is not already exempt.
|
|
131
|
+
*/
|
|
132
|
+
function hasNamingViolation(fileName) {
|
|
133
|
+
const dotIndex = fileName.lastIndexOf(".");
|
|
134
|
+
const stem = dotIndex > 0 ? fileName.slice(0, dotIndex) : fileName;
|
|
135
|
+
// kebab-case allows only lowercase letters, digits, and hyphens
|
|
136
|
+
// Violations: underscores OR mixed-case (contains both upper and lower)
|
|
137
|
+
if (stem.includes("_"))
|
|
138
|
+
return true;
|
|
139
|
+
// Mixed case: has at least one uppercase AND at least one lowercase
|
|
140
|
+
const hasUpper = /[A-Z]/.test(stem);
|
|
141
|
+
const hasLower = /[a-z]/.test(stem);
|
|
142
|
+
return hasUpper && hasLower;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Reads a gitignore-style file and returns a set of simple (no-wildcard) patterns.
|
|
146
|
+
* Patterns containing `*` or `?` are skipped — too complex without a full gitignore engine.
|
|
147
|
+
*/
|
|
148
|
+
async function readSimpleIgnorePatterns(filePath) {
|
|
149
|
+
const patterns = new Set();
|
|
150
|
+
try {
|
|
151
|
+
const content = await readFile(filePath, "utf8");
|
|
152
|
+
for (const rawLine of content.split("\n")) {
|
|
153
|
+
const line = rawLine.trim();
|
|
154
|
+
if (!line || line.startsWith("#"))
|
|
155
|
+
continue;
|
|
156
|
+
if (line.includes("*") || line.includes("?"))
|
|
157
|
+
continue;
|
|
158
|
+
patterns.add(line.replace(/^\//, "").replace(/\/$/, ""));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// File absent — silently skip
|
|
163
|
+
}
|
|
164
|
+
return patterns;
|
|
165
|
+
}
|
|
166
|
+
function isSegmentIgnored(relPath, ignorePatterns) {
|
|
167
|
+
for (const segment of relPath.split("/")) {
|
|
168
|
+
if (ignorePatterns.has(segment))
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
async function collectAllFilesForNaming(dirPath, ignorePatterns) {
|
|
174
|
+
return collectFiles(dirPath, {
|
|
175
|
+
ignore: (name) => name.startsWith(".") ||
|
|
176
|
+
NAMING_CONVENTION_IGNORED_DIRS.has(name) ||
|
|
177
|
+
ignorePatterns.has(name) ||
|
|
178
|
+
ignorePatterns.has(`${name}/`),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
function isRegisteredOrIgnoredTopLevel(name) {
|
|
182
|
+
return (NAMING_CONVENTION_RECURSIVE_ROOTS.includes(name) ||
|
|
183
|
+
NAMING_CONVENTION_EPHEMERAL_ROOTS.includes(name) ||
|
|
184
|
+
NAMING_CONVENTION_IGNORED_TOP_LEVEL.has(name));
|
|
185
|
+
}
|
|
186
|
+
function resolveScanPlan(repoRoot) {
|
|
187
|
+
let entries;
|
|
188
|
+
try {
|
|
189
|
+
entries = readdirSync(repoRoot, { withFileTypes: true });
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return {
|
|
193
|
+
recursiveRoots: [...NAMING_CONVENTION_RECURSIVE_ROOTS],
|
|
194
|
+
ephemeralRoots: [...NAMING_CONVENTION_EPHEMERAL_ROOTS],
|
|
195
|
+
unknown: [],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
const topLevelDirs = entries
|
|
199
|
+
.filter((e) => e.isDirectory() && !e.isSymbolicLink())
|
|
200
|
+
.map((e) => e.name);
|
|
201
|
+
const unknown = topLevelDirs.filter((name) => !isRegisteredOrIgnoredTopLevel(name));
|
|
202
|
+
const recursiveRoots = NAMING_CONVENTION_RECURSIVE_ROOTS.filter((name) => topLevelDirs.includes(name));
|
|
203
|
+
const ephemeralRoots = NAMING_CONVENTION_EPHEMERAL_ROOTS.filter((name) => topLevelDirs.includes(name));
|
|
204
|
+
return { recursiveRoots, ephemeralRoots, unknown };
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Validates that all filenames in registered repo roots use kebab-case.
|
|
208
|
+
*
|
|
209
|
+
* Rule: filenames must use only lowercase letters, digits, and hyphens.
|
|
210
|
+
* Violations: underscores, uppercase letters (PascalCase, camelCase, ALLCAPS).
|
|
211
|
+
*
|
|
212
|
+
* Exceptions (not flagged):
|
|
213
|
+
* - Files starting with a dot (.env, .gitignore)
|
|
214
|
+
* - Files starting with an underscore (_shared.ts, _headers, _redirects, _routes.json)
|
|
215
|
+
* - Tool-mandated filenames (Dockerfile, Caddyfile)
|
|
216
|
+
* - Files containing "config" or "module" in their name (astro.config.mjs, check.module.ts)
|
|
217
|
+
* - Files in directories starting with a dot (.git, .astro, .vscode)
|
|
218
|
+
* - Files excluded by .gitignore or .windsurfignore (simple non-wildcard patterns only)
|
|
219
|
+
*
|
|
220
|
+
* See packages/site-kernel/docs/naming-conventions.md — "Global Rule" section.
|
|
221
|
+
*/
|
|
222
|
+
export async function runNamingConventionLint(input, context) {
|
|
223
|
+
const workspaceRoot = context.workspaceRoot;
|
|
224
|
+
const includeIgnored = input.flags["include-ignored"] === true;
|
|
225
|
+
const gitignorePatterns = await readSimpleIgnorePatterns(join(workspaceRoot, ".gitignore"));
|
|
226
|
+
const windsurfignorePatterns = await readSimpleIgnorePatterns(join(workspaceRoot, ".windsurfignore"));
|
|
227
|
+
const ignorePatterns = new Set([...gitignorePatterns, ...windsurfignorePatterns]);
|
|
228
|
+
let violations = 0;
|
|
229
|
+
let checkedFiles = 0;
|
|
230
|
+
// App-scoped mode: scan only the app directory
|
|
231
|
+
if (context.site) {
|
|
232
|
+
const files = await collectAllFilesForNaming(context.site.directory, ignorePatterns);
|
|
233
|
+
for (const filePath of files) {
|
|
234
|
+
const fileName = basename(filePath);
|
|
235
|
+
const relPath = relative(workspaceRoot, filePath).replace(/\\/g, "/");
|
|
236
|
+
if (isNamingExempt(fileName, relPath))
|
|
237
|
+
continue;
|
|
238
|
+
if (isSegmentIgnored(relPath, ignorePatterns))
|
|
239
|
+
continue;
|
|
240
|
+
checkedFiles += 1;
|
|
241
|
+
if (hasNamingViolation(fileName)) {
|
|
242
|
+
context.logger.error(`${relPath}: "${fileName}" violates kebab-case — use only lowercase letters, digits, and hyphens`);
|
|
243
|
+
violations += 1;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
data: { violations, checkedFiles },
|
|
248
|
+
exitCode: violations > 0 ? 1 : 0,
|
|
249
|
+
summary: violations > 0
|
|
250
|
+
? undefined
|
|
251
|
+
: `[naming.convention] OK (${checkedFiles} non-exempt files checked)`,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// Workspace-scoped mode: resolve scan plan from filesystem
|
|
255
|
+
const scanPlan = resolveScanPlan(workspaceRoot);
|
|
256
|
+
// Report unknown top-level directories
|
|
257
|
+
for (const unknownDir of scanPlan.unknown) {
|
|
258
|
+
context.logger.error(`[naming.convention.lint] unknown top-level directory '${unknownDir}'; register it or remove it`);
|
|
259
|
+
violations += 1;
|
|
260
|
+
}
|
|
261
|
+
// Validate ephemeral root names (kebab-case check on the root name itself)
|
|
262
|
+
for (const ephemeral of scanPlan.ephemeralRoots) {
|
|
263
|
+
const name = ephemeral.startsWith(".") ? ephemeral.slice(1) : ephemeral;
|
|
264
|
+
if (name && !name.includes("_") && !(/[A-Z]/.test(name) && /[a-z]/.test(name))) {
|
|
265
|
+
// ok
|
|
266
|
+
}
|
|
267
|
+
else if (name && (name.includes("_") || (/[A-Z]/.test(name) && /[a-z]/.test(name)))) {
|
|
268
|
+
context.logger.error(`[naming.convention.lint] top-level directory '${ephemeral}' violates naming convention`);
|
|
269
|
+
violations += 1;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Scan recursive roots
|
|
273
|
+
for (const rootName of scanPlan.recursiveRoots) {
|
|
274
|
+
const scanDir = join(workspaceRoot, rootName);
|
|
275
|
+
const files = await collectAllFilesForNaming(scanDir, ignorePatterns);
|
|
276
|
+
for (const filePath of files) {
|
|
277
|
+
const fileName = basename(filePath);
|
|
278
|
+
const relPath = relative(workspaceRoot, filePath).replace(/\\/g, "/");
|
|
279
|
+
if (isNamingExempt(fileName, relPath))
|
|
280
|
+
continue;
|
|
281
|
+
if (isSegmentIgnored(relPath, ignorePatterns))
|
|
282
|
+
continue;
|
|
283
|
+
checkedFiles += 1;
|
|
284
|
+
if (hasNamingViolation(fileName)) {
|
|
285
|
+
context.logger.error(`${relPath}: "${fileName}" violates kebab-case — use only lowercase letters, digits, and hyphens`);
|
|
286
|
+
violations += 1;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Scan ephemeral root contents only when --include-ignored is passed
|
|
291
|
+
if (includeIgnored) {
|
|
292
|
+
for (const rootName of scanPlan.ephemeralRoots) {
|
|
293
|
+
const scanDir = join(workspaceRoot, rootName);
|
|
294
|
+
const files = await collectAllFilesForNaming(scanDir, ignorePatterns);
|
|
295
|
+
for (const filePath of files) {
|
|
296
|
+
const fileName = basename(filePath);
|
|
297
|
+
const relPath = relative(workspaceRoot, filePath).replace(/\\/g, "/");
|
|
298
|
+
if (isNamingExempt(fileName, relPath))
|
|
299
|
+
continue;
|
|
300
|
+
if (isSegmentIgnored(relPath, ignorePatterns))
|
|
301
|
+
continue;
|
|
302
|
+
checkedFiles += 1;
|
|
303
|
+
if (hasNamingViolation(fileName)) {
|
|
304
|
+
context.logger.error(`${relPath}: "${fileName}" violates kebab-case — use only lowercase letters, digits, and hyphens`);
|
|
305
|
+
violations += 1;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
data: {
|
|
312
|
+
violations,
|
|
313
|
+
checkedFiles,
|
|
314
|
+
scannedRoots: scanPlan.recursiveRoots,
|
|
315
|
+
ephemeralRootsSkipped: includeIgnored ? [] : scanPlan.ephemeralRoots,
|
|
316
|
+
unknownTopLevelDirs: scanPlan.unknown,
|
|
317
|
+
},
|
|
318
|
+
exitCode: violations > 0 ? 1 : 0,
|
|
319
|
+
summary: violations > 0
|
|
320
|
+
? undefined
|
|
321
|
+
: `[naming.convention] OK (${checkedFiles} non-exempt files checked)`,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=naming-convention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming-convention.js","sourceRoot":"","sources":["../../../os/naming/naming-convention.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.module.d.ts","sourceRoot":"","sources":["../../../os/naming/naming.module.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAO,MAAM,iBAAiB,EAAE,WAqB/B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>Register the forge naming convention lint command with the Site OS kernel registry.</purpose>
|
|
4
|
+
<non-goals>
|
|
5
|
+
<item>Do not register project-specific naming commands (naming.pages.lint, etc.) — those stay in site-kernel-checks.</item>
|
|
6
|
+
</non-goals>
|
|
7
|
+
</MODULE_CONTRACT>
|
|
8
|
+
<CHANGE_SUMMARY>
|
|
9
|
+
<item>RFC-0374: initial forgeNamingModule registering naming.convention.lint.</item>
|
|
10
|
+
</CHANGE_SUMMARY>
|
|
11
|
+
*/
|
|
12
|
+
export const forgeNamingModule = {
|
|
13
|
+
name: "forge-naming",
|
|
14
|
+
version: "0.1.0",
|
|
15
|
+
async register(registry) {
|
|
16
|
+
const { runNamingConventionLint } = await import("./naming-convention.js");
|
|
17
|
+
registry.registerCommand({
|
|
18
|
+
name: "naming.convention.lint",
|
|
19
|
+
description: "Validate all filenames use kebab-case (no underscores) across registered workspace roots.",
|
|
20
|
+
scope: "workspace",
|
|
21
|
+
supportsAllSites: true,
|
|
22
|
+
flags: {
|
|
23
|
+
"include-ignored": {
|
|
24
|
+
kind: "boolean",
|
|
25
|
+
description: "Also scan files ignored by .gitignore or .windsurfignore.",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
reads: ["packages/**/*.{ts,tsx}", "apps/**/*.{ts,tsx}", "services/**/*.{ts,tsx}"],
|
|
29
|
+
execute: runNamingConventionLint,
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=naming.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.module.js","sourceRoot":"","sources":["../../../os/naming/naming.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAIF,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACrB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC3E,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EACT,2FAA2F;YAC7F,KAAK,EAAE,WAAW;YAClB,gBAAgB,EAAE,IAAI;YACtB,KAAK,EAAE;gBACL,iBAAiB,EAAE;oBACjB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,2DAA2D;iBACzE;aACF;YACD,KAAK,EAAE,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,wBAAwB,CAAC;YACjF,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../os/notes/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>Re-export forgeNotesModule and note validator handlers.</purpose>
|
|
4
|
+
</MODULE_CONTRACT>
|
|
5
|
+
<CHANGE_SUMMARY>
|
|
6
|
+
<item>RFC-0808: initial notes module index.</item>
|
|
7
|
+
</CHANGE_SUMMARY>
|
|
8
|
+
*/
|
|
9
|
+
export { forgeNotesModule } from "./notes.module.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../os/notes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;EAOE;AAEF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.module.d.ts","sourceRoot":"","sources":["../../../os/notes/notes.module.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAO7D,eAAO,MAAM,gBAAgB,EAAE,WA0F9B,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>Register note validation commands (note.link.validate, note.frontmatter.validate, note.orphan.detect) with the forge kernel registry.</purpose>
|
|
4
|
+
<non-goals>
|
|
5
|
+
<item>Do not implement handler logic here — delegate to src/validators/.</item>
|
|
6
|
+
</non-goals>
|
|
7
|
+
</MODULE_CONTRACT>
|
|
8
|
+
<CHANGE_SUMMARY>
|
|
9
|
+
<item>RFC-0808: initial forgeNotesModule registering 3 note validation commands.</item>
|
|
10
|
+
</CHANGE_SUMMARY>
|
|
11
|
+
*/
|
|
12
|
+
export const forgeNotesModule = {
|
|
13
|
+
name: "forge-notes",
|
|
14
|
+
version: "0.1.0",
|
|
15
|
+
async register(registry) {
|
|
16
|
+
const { runNoteLinkValidate } = await import("../../src/validators/note-link-validate.js");
|
|
17
|
+
const { runNoteFrontmatterValidate } = await import("../../src/validators/note-frontmatter-validate.js");
|
|
18
|
+
const { runNoteOrphanDetect } = await import("../../src/validators/note-orphan-detect.js");
|
|
19
|
+
const noteLinkValidateWrapper = async (input, context) => {
|
|
20
|
+
return runNoteLinkValidate(input, context);
|
|
21
|
+
};
|
|
22
|
+
const noteFrontmatterValidateWrapper = async (input, context) => {
|
|
23
|
+
return runNoteFrontmatterValidate(input, context);
|
|
24
|
+
};
|
|
25
|
+
const noteOrphanDetectWrapper = async (input, context) => {
|
|
26
|
+
return runNoteOrphanDetect(input, context);
|
|
27
|
+
};
|
|
28
|
+
registry.registerCommand({
|
|
29
|
+
name: "note.link.validate",
|
|
30
|
+
description: "Validate wikilink integrity across an Obsidian vault. Scans [[wikilinks]] and resolves each against the note graph.",
|
|
31
|
+
scope: "workspace",
|
|
32
|
+
supportsAllSites: false,
|
|
33
|
+
flags: {
|
|
34
|
+
"vault-dir": {
|
|
35
|
+
kind: "string",
|
|
36
|
+
description: "Vault directory relative to workspace root (default: vault).",
|
|
37
|
+
},
|
|
38
|
+
path: {
|
|
39
|
+
kind: "string",
|
|
40
|
+
description: "Subdirectory within the vault to scope the scan to.",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
reads: ["vault/**/*.md"],
|
|
44
|
+
cacheable: false,
|
|
45
|
+
execute: noteLinkValidateWrapper,
|
|
46
|
+
});
|
|
47
|
+
registry.registerCommand({
|
|
48
|
+
name: "note.frontmatter.validate",
|
|
49
|
+
description: "Validate frontmatter consistency across an Obsidian vault. Checks for required fields in YAML frontmatter.",
|
|
50
|
+
scope: "workspace",
|
|
51
|
+
supportsAllSites: false,
|
|
52
|
+
flags: {
|
|
53
|
+
"vault-dir": {
|
|
54
|
+
kind: "string",
|
|
55
|
+
description: "Vault directory relative to workspace root (default: vault).",
|
|
56
|
+
},
|
|
57
|
+
fields: {
|
|
58
|
+
kind: "string",
|
|
59
|
+
description: "Comma-separated list of required fields (default: title).",
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
reads: ["vault/**/*.md"],
|
|
63
|
+
cacheable: false,
|
|
64
|
+
execute: noteFrontmatterValidateWrapper,
|
|
65
|
+
});
|
|
66
|
+
registry.registerCommand({
|
|
67
|
+
name: "note.orphan.detect",
|
|
68
|
+
description: "Detect orphan notes in an Obsidian vault — notes with zero inbound wikilinks. Always exits zero (warnings, not errors).",
|
|
69
|
+
scope: "workspace",
|
|
70
|
+
supportsAllSites: false,
|
|
71
|
+
flags: {
|
|
72
|
+
"vault-dir": {
|
|
73
|
+
kind: "string",
|
|
74
|
+
description: "Vault directory relative to workspace root (default: vault).",
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
reads: ["vault/**/*.md"],
|
|
78
|
+
cacheable: false,
|
|
79
|
+
execute: noteOrphanDetectWrapper,
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=notes.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notes.module.js","sourceRoot":"","sources":["../../../os/notes/notes.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AASF,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,OAAO;IAChB,KAAK,CAAC,QAAQ,CAAC,QAAQ;QACrB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,4CAA4C,CAAC,CAAC;QAC3F,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CACjD,mDAAmD,CACpD,CAAC;QACF,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,4CAA4C,CAAC,CAAC;QAE3F,MAAM,uBAAuB,GAAG,KAAK,EACnC,KAAwB,EACxB,OAA4B,EACC,EAAE;YAC/B,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,MAAM,8BAA8B,GAAG,KAAK,EAC1C,KAAwB,EACxB,OAA4B,EACC,EAAE;YAC/B,OAAO,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,KAAK,EACnC,KAAwB,EACxB,OAA4B,EACC,EAAE;YAC/B,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EACT,qHAAqH;YACvH,KAAK,EAAE,WAAW;YAClB,gBAAgB,EAAE,KAAK;YACvB,KAAK,EAAE;gBACL,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8DAA8D;iBAC5E;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;aACF;YACD,KAAK,EAAE,CAAC,eAAe,CAAC;YACxB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,2BAA2B;YACjC,WAAW,EACT,4GAA4G;YAC9G,KAAK,EAAE,WAAW;YAClB,gBAAgB,EAAE,KAAK;YACvB,KAAK,EAAE;gBACL,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8DAA8D;iBAC5E;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2DAA2D;iBACzE;aACF;YACD,KAAK,EAAE,CAAC,eAAe,CAAC;YACxB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,8BAA8B;SACxC,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,CAAC;YACvB,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EACT,yHAAyH;YAC3H,KAAK,EAAE,WAAW;YAClB,gBAAgB,EAAE,KAAK;YACvB,KAAK,EAAE;gBACL,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8DAA8D;iBAC5E;aACF;YACD,KAAK,EAAE,CAAC,eAAe,CAAC;YACxB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ParsedPlan {
|
|
2
|
+
frontmatter: Record<string, unknown>;
|
|
3
|
+
body: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function parsePlanFile(source: string): ParsedPlan;
|
|
6
|
+
export declare function listPlanFiles(planDirPath: string): Promise<string[]>;
|
|
7
|
+
export declare function readAndParsePlan(planDirPath: string, fileName: string): Promise<{
|
|
8
|
+
fileName: string;
|
|
9
|
+
parsed: ParsedPlan;
|
|
10
|
+
} | undefined>;
|
|
11
|
+
export declare function extractRfcIdFromPlanFile(fileName: string): string | undefined;
|
|
12
|
+
//# sourceMappingURL=frontmatter-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter-io.d.ts","sourceRoot":"","sources":["../../../os/plan/frontmatter-io.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CASxD;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2B1E;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,SAAS,CAAC,CAQ/D;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG7E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*
|
|
2
|
+
<MODULE_CONTRACT>
|
|
3
|
+
<purpose>
|
|
4
|
+
Plan frontmatter file I/O — recursive file discovery and YAML frontmatter
|
|
5
|
+
parsing for plan files under docs/plans/.
|
|
6
|
+
</purpose>
|
|
7
|
+
<non-goals>
|
|
8
|
+
<item>Do not validate plan content — that is a future concern.</item>
|
|
9
|
+
</non-goals>
|
|
10
|
+
</MODULE_CONTRACT>
|
|
11
|
+
<CHANGE_SUMMARY>
|
|
12
|
+
<item>RFC-0521: initial plan frontmatter I/O.</item>
|
|
13
|
+
</CHANGE_SUMMARY>
|
|
14
|
+
*/
|
|
15
|
+
import fs from "node:fs/promises";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
import YAML from "yaml";
|
|
18
|
+
import { PLAN_FILE_PATTERN } from "./types.js";
|
|
19
|
+
export function parsePlanFile(source) {
|
|
20
|
+
const match = source.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
21
|
+
if (!match) {
|
|
22
|
+
return { frontmatter: {}, body: source };
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
frontmatter: (YAML.parse(match[1]) ?? {}),
|
|
26
|
+
body: match[2] ?? "",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export async function listPlanFiles(planDirPath) {
|
|
30
|
+
const results = [];
|
|
31
|
+
async function scanDir(dirPath, relativePrefix) {
|
|
32
|
+
try {
|
|
33
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
const relativePath = relativePrefix ? `${relativePrefix}/${entry.name}` : entry.name;
|
|
36
|
+
if (entry.isDirectory()) {
|
|
37
|
+
await scanDir(path.join(dirPath, entry.name), relativePath);
|
|
38
|
+
}
|
|
39
|
+
else if (entry.isFile() &&
|
|
40
|
+
entry.name.endsWith(".md") &&
|
|
41
|
+
!entry.name.startsWith("plan-0000") &&
|
|
42
|
+
entry.name !== "README.md" &&
|
|
43
|
+
PLAN_FILE_PATTERN.test(entry.name)) {
|
|
44
|
+
results.push(relativePath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Directory doesn't exist or is unreadable — return empty
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
await scanDir(planDirPath, "");
|
|
53
|
+
return results.sort();
|
|
54
|
+
}
|
|
55
|
+
export async function readAndParsePlan(planDirPath, fileName) {
|
|
56
|
+
try {
|
|
57
|
+
const filePath = path.join(planDirPath, fileName);
|
|
58
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
59
|
+
return { fileName, parsed: parsePlanFile(content) };
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function extractRfcIdFromPlanFile(fileName) {
|
|
66
|
+
const match = path.basename(fileName).match(/^plan-(rfc-\d{4})-/i);
|
|
67
|
+
return match ? match[1].toUpperCase() : undefined;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=frontmatter-io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter-io.js","sourceRoot":"","sources":["../../../os/plan/frontmatter-io.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ForgeCommandInput, ForgeCommandResult, ForgeRuntimeContext } from "../../../src/types.ts";
|
|
2
|
+
import type { PlanArchiveResult } from "../types.ts";
|
|
3
|
+
export declare function runPlanArchive(input: ForgeCommandInput, context: ForgeRuntimeContext): Promise<ForgeCommandResult<PlanArchiveResult>>;
|
|
4
|
+
//# sourceMappingURL=archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../../os/plan/handlers/archive.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,wBAAsB,cAAc,CAClC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAwMhD"}
|