@warpgogol/forge 2.17.0 → 2.20.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/README.md +11 -0
- package/os/core/core.module.ts +1 -1
- package/os/spec/live-spec-merge.test.ts +76 -0
- package/os/spec/live-spec-merge.ts +14 -49
- package/package.json +1 -1
- package/profiles/godot-csharp.yaml +4 -4
- package/profiles/typescript-turborepo.yaml +222 -0
- package/src/tests/profile-schema.test.ts +1 -1
- package/src/types/werkstatt-engine-shims.d.ts +11 -0
- package/src/types/werkstatt-shared-shims.d.ts +71 -0
- package/dist/bin/cli.d.ts +0 -3
- package/dist/bin/cli.d.ts.map +0 -1
- package/dist/bin/cli.js +0 -291
- package/dist/bin/cli.js.map +0 -1
- package/dist/os/adr/adr.module.d.ts +0 -3
- package/dist/os/adr/adr.module.d.ts.map +0 -1
- package/dist/os/adr/adr.module.js +0 -146
- package/dist/os/adr/adr.module.js.map +0 -1
- package/dist/os/adr/frontmatter-io.d.ts +0 -12
- package/dist/os/adr/frontmatter-io.d.ts.map +0 -1
- package/dist/os/adr/frontmatter-io.js +0 -67
- package/dist/os/adr/frontmatter-io.js.map +0 -1
- package/dist/os/adr/handlers/archive.d.ts +0 -24
- package/dist/os/adr/handlers/archive.d.ts.map +0 -1
- package/dist/os/adr/handlers/archive.js +0 -194
- package/dist/os/adr/handlers/archive.js.map +0 -1
- package/dist/os/adr/handlers/implement-stamp.d.ts +0 -4
- package/dist/os/adr/handlers/implement-stamp.d.ts.map +0 -1
- package/dist/os/adr/handlers/implement-stamp.js +0 -264
- package/dist/os/adr/handlers/implement-stamp.js.map +0 -1
- package/dist/os/adr/handlers/list-create.d.ts +0 -5
- package/dist/os/adr/handlers/list-create.d.ts.map +0 -1
- package/dist/os/adr/handlers/list-create.js +0 -201
- package/dist/os/adr/handlers/list-create.js.map +0 -1
- package/dist/os/adr/handlers/validate.d.ts +0 -4
- package/dist/os/adr/handlers/validate.d.ts.map +0 -1
- package/dist/os/adr/handlers/validate.js +0 -279
- package/dist/os/adr/handlers/validate.js.map +0 -1
- package/dist/os/adr/index.d.ts +0 -8
- package/dist/os/adr/index.d.ts.map +0 -1
- package/dist/os/adr/index.js +0 -18
- package/dist/os/adr/index.js.map +0 -1
- package/dist/os/adr/types.d.ts +0 -76
- package/dist/os/adr/types.d.ts.map +0 -1
- package/dist/os/adr/types.js +0 -56
- package/dist/os/adr/types.js.map +0 -1
- package/dist/os/audit/audit.module.d.ts +0 -3
- package/dist/os/audit/audit.module.d.ts.map +0 -1
- package/dist/os/audit/audit.module.js +0 -45
- package/dist/os/audit/audit.module.js.map +0 -1
- package/dist/os/audit/frontmatter-io.d.ts +0 -12
- package/dist/os/audit/frontmatter-io.d.ts.map +0 -1
- package/dist/os/audit/frontmatter-io.js +0 -71
- package/dist/os/audit/frontmatter-io.js.map +0 -1
- package/dist/os/audit/handlers/archive.d.ts +0 -4
- package/dist/os/audit/handlers/archive.d.ts.map +0 -1
- package/dist/os/audit/handlers/archive.js +0 -207
- package/dist/os/audit/handlers/archive.js.map +0 -1
- package/dist/os/audit/index.d.ts +0 -6
- package/dist/os/audit/index.d.ts.map +0 -1
- package/dist/os/audit/index.js +0 -16
- package/dist/os/audit/index.js.map +0 -1
- package/dist/os/audit/types.d.ts +0 -12
- package/dist/os/audit/types.d.ts.map +0 -1
- package/dist/os/audit/types.js +0 -17
- package/dist/os/audit/types.js.map +0 -1
- package/dist/os/compass/compass.module.d.ts +0 -3
- package/dist/os/compass/compass.module.d.ts.map +0 -1
- package/dist/os/compass/compass.module.js +0 -183
- package/dist/os/compass/compass.module.js.map +0 -1
- package/dist/os/compass/handlers/compass-audit-handler.d.ts +0 -36
- package/dist/os/compass/handlers/compass-audit-handler.d.ts.map +0 -1
- package/dist/os/compass/handlers/compass-audit-handler.js +0 -260
- package/dist/os/compass/handlers/compass-audit-handler.js.map +0 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts +0 -19
- package/dist/os/compass/handlers/compass-change-summary-handler.d.ts.map +0 -1
- package/dist/os/compass/handlers/compass-change-summary-handler.js +0 -222
- package/dist/os/compass/handlers/compass-change-summary-handler.js.map +0 -1
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts +0 -28
- package/dist/os/compass/handlers/compass-inventory-handler.d.ts.map +0 -1
- package/dist/os/compass/handlers/compass-inventory-handler.js +0 -377
- package/dist/os/compass/handlers/compass-inventory-handler.js.map +0 -1
- package/dist/os/compass/handlers/compass-inventory.d.ts +0 -30
- package/dist/os/compass/handlers/compass-inventory.d.ts.map +0 -1
- package/dist/os/compass/handlers/compass-inventory.js +0 -462
- package/dist/os/compass/handlers/compass-inventory.js.map +0 -1
- package/dist/os/compass/handlers/git-revision.d.ts +0 -8
- package/dist/os/compass/handlers/git-revision.d.ts.map +0 -1
- package/dist/os/compass/handlers/git-revision.js +0 -99
- package/dist/os/compass/handlers/git-revision.js.map +0 -1
- package/dist/os/compass/handlers/resolve-scan-root.d.ts +0 -3
- package/dist/os/compass/handlers/resolve-scan-root.d.ts.map +0 -1
- package/dist/os/compass/handlers/resolve-scan-root.js +0 -57
- package/dist/os/compass/handlers/resolve-scan-root.js.map +0 -1
- package/dist/os/compass/index.d.ts +0 -8
- package/dist/os/compass/index.d.ts.map +0 -1
- package/dist/os/compass/index.js +0 -19
- package/dist/os/compass/index.js.map +0 -1
- package/dist/os/core/core.module.d.ts +0 -3
- package/dist/os/core/core.module.d.ts.map +0 -1
- package/dist/os/core/core.module.js +0 -836
- package/dist/os/core/core.module.js.map +0 -1
- package/dist/os/core/handlers/assets-check.d.ts +0 -19
- package/dist/os/core/handlers/assets-check.d.ts.map +0 -1
- package/dist/os/core/handlers/assets-check.js +0 -89
- package/dist/os/core/handlers/assets-check.js.map +0 -1
- package/dist/os/core/handlers/assets-helpers.d.ts +0 -28
- package/dist/os/core/handlers/assets-helpers.d.ts.map +0 -1
- package/dist/os/core/handlers/assets-helpers.js +0 -128
- package/dist/os/core/handlers/assets-helpers.js.map +0 -1
- package/dist/os/core/handlers/assets-list.d.ts +0 -9
- package/dist/os/core/handlers/assets-list.d.ts.map +0 -1
- package/dist/os/core/handlers/assets-list.js +0 -72
- package/dist/os/core/handlers/assets-list.js.map +0 -1
- package/dist/os/core/handlers/build.d.ts +0 -16
- package/dist/os/core/handlers/build.d.ts.map +0 -1
- package/dist/os/core/handlers/build.js +0 -123
- package/dist/os/core/handlers/build.js.map +0 -1
- package/dist/os/core/handlers/determinism-check.d.ts +0 -20
- package/dist/os/core/handlers/determinism-check.d.ts.map +0 -1
- package/dist/os/core/handlers/determinism-check.js +0 -289
- package/dist/os/core/handlers/determinism-check.js.map +0 -1
- package/dist/os/core/handlers/dev.d.ts +0 -10
- package/dist/os/core/handlers/dev.d.ts.map +0 -1
- package/dist/os/core/handlers/dev.js +0 -102
- package/dist/os/core/handlers/dev.js.map +0 -1
- package/dist/os/core/handlers/forge-autonomy-validate.d.ts +0 -18
- package/dist/os/core/handlers/forge-autonomy-validate.d.ts.map +0 -1
- package/dist/os/core/handlers/forge-autonomy-validate.js +0 -115
- package/dist/os/core/handlers/forge-autonomy-validate.js.map +0 -1
- package/dist/os/core/handlers/knowledge-compact.d.ts +0 -4
- package/dist/os/core/handlers/knowledge-compact.d.ts.map +0 -1
- package/dist/os/core/handlers/knowledge-compact.js +0 -204
- package/dist/os/core/handlers/knowledge-compact.js.map +0 -1
- package/dist/os/core/handlers/package-health.d.ts +0 -17
- package/dist/os/core/handlers/package-health.d.ts.map +0 -1
- package/dist/os/core/handlers/package-health.js +0 -196
- package/dist/os/core/handlers/package-health.js.map +0 -1
- package/dist/os/core/handlers/pinned-check.d.ts +0 -49
- package/dist/os/core/handlers/pinned-check.d.ts.map +0 -1
- package/dist/os/core/handlers/pinned-check.js +0 -159
- package/dist/os/core/handlers/pinned-check.js.map +0 -1
- package/dist/os/core/handlers/pinned-init.d.ts +0 -19
- package/dist/os/core/handlers/pinned-init.d.ts.map +0 -1
- package/dist/os/core/handlers/pinned-init.js +0 -283
- package/dist/os/core/handlers/pinned-init.js.map +0 -1
- package/dist/os/core/handlers/pinned-types.d.ts +0 -29
- package/dist/os/core/handlers/pinned-types.d.ts.map +0 -1
- package/dist/os/core/handlers/pinned-types.js +0 -16
- package/dist/os/core/handlers/pinned-types.js.map +0 -1
- package/dist/os/core/handlers/pinned-validate.d.ts +0 -4
- package/dist/os/core/handlers/pinned-validate.d.ts.map +0 -1
- package/dist/os/core/handlers/pinned-validate.js +0 -248
- package/dist/os/core/handlers/pinned-validate.js.map +0 -1
- package/dist/os/core/handlers/profile-resolve.d.ts +0 -13
- package/dist/os/core/handlers/profile-resolve.d.ts.map +0 -1
- package/dist/os/core/handlers/profile-resolve.js +0 -65
- package/dist/os/core/handlers/profile-resolve.js.map +0 -1
- package/dist/os/core/handlers/release-prepare.d.ts +0 -25
- package/dist/os/core/handlers/release-prepare.d.ts.map +0 -1
- package/dist/os/core/handlers/release-prepare.js +0 -228
- package/dist/os/core/handlers/release-prepare.js.map +0 -1
- package/dist/os/core/handlers/release-publish.d.ts +0 -13
- package/dist/os/core/handlers/release-publish.d.ts.map +0 -1
- package/dist/os/core/handlers/release-publish.js +0 -173
- package/dist/os/core/handlers/release-publish.js.map +0 -1
- package/dist/os/core/handlers/validate.d.ts +0 -26
- package/dist/os/core/handlers/validate.d.ts.map +0 -1
- package/dist/os/core/handlers/validate.js +0 -208
- package/dist/os/core/handlers/validate.js.map +0 -1
- package/dist/os/core/index.d.ts +0 -2
- package/dist/os/core/index.d.ts.map +0 -1
- package/dist/os/core/index.js +0 -13
- package/dist/os/core/index.js.map +0 -1
- package/dist/os/exploration/exploration.module.d.ts +0 -3
- package/dist/os/exploration/exploration.module.d.ts.map +0 -1
- package/dist/os/exploration/exploration.module.js +0 -83
- package/dist/os/exploration/exploration.module.js.map +0 -1
- package/dist/os/exploration/frontmatter-io.d.ts +0 -13
- package/dist/os/exploration/frontmatter-io.d.ts.map +0 -1
- package/dist/os/exploration/frontmatter-io.js +0 -61
- package/dist/os/exploration/frontmatter-io.js.map +0 -1
- package/dist/os/exploration/handlers/archive.d.ts +0 -4
- package/dist/os/exploration/handlers/archive.d.ts.map +0 -1
- package/dist/os/exploration/handlers/archive.js +0 -141
- package/dist/os/exploration/handlers/archive.js.map +0 -1
- package/dist/os/exploration/handlers/list.d.ts +0 -4
- package/dist/os/exploration/handlers/list.d.ts.map +0 -1
- package/dist/os/exploration/handlers/list.js +0 -64
- package/dist/os/exploration/handlers/list.js.map +0 -1
- package/dist/os/exploration/handlers/show.d.ts +0 -4
- package/dist/os/exploration/handlers/show.d.ts.map +0 -1
- package/dist/os/exploration/handlers/show.js +0 -97
- package/dist/os/exploration/handlers/show.js.map +0 -1
- package/dist/os/exploration/index.d.ts +0 -7
- package/dist/os/exploration/index.d.ts.map +0 -1
- package/dist/os/exploration/index.js +0 -17
- package/dist/os/exploration/index.js.map +0 -1
- package/dist/os/exploration/types.d.ts +0 -38
- package/dist/os/exploration/types.d.ts.map +0 -1
- package/dist/os/exploration/types.js +0 -23
- package/dist/os/exploration/types.js.map +0 -1
- package/dist/os/mission/handlers/archive.d.ts +0 -4
- package/dist/os/mission/handlers/archive.d.ts.map +0 -1
- package/dist/os/mission/handlers/archive.js +0 -356
- package/dist/os/mission/handlers/archive.js.map +0 -1
- package/dist/os/mission/index.d.ts +0 -2
- package/dist/os/mission/index.d.ts.map +0 -1
- package/dist/os/mission/index.js +0 -2
- package/dist/os/mission/index.js.map +0 -1
- package/dist/os/mission/mission.module.d.ts +0 -3
- package/dist/os/mission/mission.module.d.ts.map +0 -1
- package/dist/os/mission/mission.module.js +0 -45
- package/dist/os/mission/mission.module.js.map +0 -1
- package/dist/os/mission/types.d.ts +0 -23
- package/dist/os/mission/types.d.ts.map +0 -1
- package/dist/os/mission/types.js +0 -18
- package/dist/os/mission/types.js.map +0 -1
- package/dist/os/naming/index.d.ts +0 -3
- package/dist/os/naming/index.d.ts.map +0 -1
- package/dist/os/naming/index.js +0 -14
- package/dist/os/naming/index.js.map +0 -1
- package/dist/os/naming/naming-convention.d.ts +0 -25
- package/dist/os/naming/naming-convention.d.ts.map +0 -1
- package/dist/os/naming/naming-convention.js +0 -324
- package/dist/os/naming/naming-convention.js.map +0 -1
- package/dist/os/naming/naming.module.d.ts +0 -3
- package/dist/os/naming/naming.module.d.ts.map +0 -1
- package/dist/os/naming/naming.module.js +0 -34
- package/dist/os/naming/naming.module.js.map +0 -1
- package/dist/os/notes/index.d.ts +0 -2
- package/dist/os/notes/index.d.ts.map +0 -1
- package/dist/os/notes/index.js +0 -10
- package/dist/os/notes/index.js.map +0 -1
- package/dist/os/notes/notes.module.d.ts +0 -3
- package/dist/os/notes/notes.module.d.ts.map +0 -1
- package/dist/os/notes/notes.module.js +0 -84
- package/dist/os/notes/notes.module.js.map +0 -1
- package/dist/os/plan/frontmatter-io.d.ts +0 -12
- package/dist/os/plan/frontmatter-io.d.ts.map +0 -1
- package/dist/os/plan/frontmatter-io.js +0 -69
- package/dist/os/plan/frontmatter-io.js.map +0 -1
- package/dist/os/plan/handlers/archive.d.ts +0 -4
- package/dist/os/plan/handlers/archive.d.ts.map +0 -1
- package/dist/os/plan/handlers/archive.js +0 -206
- package/dist/os/plan/handlers/archive.js.map +0 -1
- package/dist/os/plan/index.d.ts +0 -6
- package/dist/os/plan/index.d.ts.map +0 -1
- package/dist/os/plan/index.js +0 -16
- package/dist/os/plan/index.js.map +0 -1
- package/dist/os/plan/plan.module.d.ts +0 -3
- package/dist/os/plan/plan.module.d.ts.map +0 -1
- package/dist/os/plan/plan.module.js +0 -45
- package/dist/os/plan/plan.module.js.map +0 -1
- package/dist/os/plan/types.d.ts +0 -12
- package/dist/os/plan/types.d.ts.map +0 -1
- package/dist/os/plan/types.js +0 -17
- package/dist/os/plan/types.js.map +0 -1
- package/dist/os/plugin/plugin.module.d.ts +0 -25
- package/dist/os/plugin/plugin.module.d.ts.map +0 -1
- package/dist/os/plugin/plugin.module.js +0 -208
- package/dist/os/plugin/plugin.module.js.map +0 -1
- package/dist/os/program/discovery.d.ts +0 -61
- package/dist/os/program/discovery.d.ts.map +0 -1
- package/dist/os/program/discovery.js +0 -236
- package/dist/os/program/discovery.js.map +0 -1
- package/dist/os/program/handlers/complete.d.ts +0 -12
- package/dist/os/program/handlers/complete.d.ts.map +0 -1
- package/dist/os/program/handlers/complete.js +0 -362
- package/dist/os/program/handlers/complete.js.map +0 -1
- package/dist/os/program/handlers/lease.d.ts +0 -13
- package/dist/os/program/handlers/lease.d.ts.map +0 -1
- package/dist/os/program/handlers/lease.js +0 -328
- package/dist/os/program/handlers/lease.js.map +0 -1
- package/dist/os/program/handlers/seal.d.ts +0 -12
- package/dist/os/program/handlers/seal.d.ts.map +0 -1
- package/dist/os/program/handlers/seal.js +0 -277
- package/dist/os/program/handlers/seal.js.map +0 -1
- package/dist/os/program/handlers/validate.d.ts +0 -14
- package/dist/os/program/handlers/validate.d.ts.map +0 -1
- package/dist/os/program/handlers/validate.js +0 -170
- package/dist/os/program/handlers/validate.js.map +0 -1
- package/dist/os/program/lease.d.ts +0 -39
- package/dist/os/program/lease.d.ts.map +0 -1
- package/dist/os/program/lease.js +0 -129
- package/dist/os/program/lease.js.map +0 -1
- package/dist/os/program/program.module.d.ts +0 -3
- package/dist/os/program/program.module.d.ts.map +0 -1
- package/dist/os/program/program.module.js +0 -202
- package/dist/os/program/program.module.js.map +0 -1
- package/dist/os/program/schemas.d.ts +0 -225
- package/dist/os/program/schemas.d.ts.map +0 -1
- package/dist/os/program/schemas.js +0 -174
- package/dist/os/program/schemas.js.map +0 -1
- package/dist/os/program/state.d.ts +0 -38
- package/dist/os/program/state.d.ts.map +0 -1
- package/dist/os/program/state.js +0 -189
- package/dist/os/program/state.js.map +0 -1
- package/dist/os/rfc/acceptance.d.ts +0 -15
- package/dist/os/rfc/acceptance.d.ts.map +0 -1
- package/dist/os/rfc/acceptance.js +0 -318
- package/dist/os/rfc/acceptance.js.map +0 -1
- package/dist/os/rfc/decision-log.d.ts +0 -6
- package/dist/os/rfc/decision-log.d.ts.map +0 -1
- package/dist/os/rfc/decision-log.js +0 -269
- package/dist/os/rfc/decision-log.js.map +0 -1
- package/dist/os/rfc/dna-trace.d.ts +0 -27
- package/dist/os/rfc/dna-trace.d.ts.map +0 -1
- package/dist/os/rfc/dna-trace.js +0 -214
- package/dist/os/rfc/dna-trace.js.map +0 -1
- package/dist/os/rfc/frontmatter-io.d.ts +0 -18
- package/dist/os/rfc/frontmatter-io.d.ts.map +0 -1
- package/dist/os/rfc/frontmatter-io.js +0 -110
- package/dist/os/rfc/frontmatter-io.js.map +0 -1
- package/dist/os/rfc/handlers/archive.d.ts +0 -25
- package/dist/os/rfc/handlers/archive.d.ts.map +0 -1
- package/dist/os/rfc/handlers/archive.js +0 -247
- package/dist/os/rfc/handlers/archive.js.map +0 -1
- package/dist/os/rfc/handlers/check.d.ts +0 -4
- package/dist/os/rfc/handlers/check.d.ts.map +0 -1
- package/dist/os/rfc/handlers/check.js +0 -203
- package/dist/os/rfc/handlers/check.js.map +0 -1
- package/dist/os/rfc/handlers/implement-stamp.d.ts +0 -4
- package/dist/os/rfc/handlers/implement-stamp.d.ts.map +0 -1
- package/dist/os/rfc/handlers/implement-stamp.js +0 -426
- package/dist/os/rfc/handlers/implement-stamp.js.map +0 -1
- package/dist/os/rfc/handlers/index-graph.d.ts +0 -13
- package/dist/os/rfc/handlers/index-graph.d.ts.map +0 -1
- package/dist/os/rfc/handlers/index-graph.js +0 -192
- package/dist/os/rfc/handlers/index-graph.js.map +0 -1
- package/dist/os/rfc/handlers/lifecycle.d.ts +0 -13
- package/dist/os/rfc/handlers/lifecycle.d.ts.map +0 -1
- package/dist/os/rfc/handlers/lifecycle.js +0 -155
- package/dist/os/rfc/handlers/lifecycle.js.map +0 -1
- package/dist/os/rfc/handlers/list-create.d.ts +0 -6
- package/dist/os/rfc/handlers/list-create.d.ts.map +0 -1
- package/dist/os/rfc/handlers/list-create.js +0 -260
- package/dist/os/rfc/handlers/list-create.js.map +0 -1
- package/dist/os/rfc/handlers/pipeline-status.d.ts +0 -26
- package/dist/os/rfc/handlers/pipeline-status.d.ts.map +0 -1
- package/dist/os/rfc/handlers/pipeline-status.js +0 -124
- package/dist/os/rfc/handlers/pipeline-status.js.map +0 -1
- package/dist/os/rfc/handlers/shared.d.ts +0 -22
- package/dist/os/rfc/handlers/shared.d.ts.map +0 -1
- package/dist/os/rfc/handlers/shared.js +0 -105
- package/dist/os/rfc/handlers/shared.js.map +0 -1
- package/dist/os/rfc/handlers/supersede-propose.d.ts +0 -4
- package/dist/os/rfc/handlers/supersede-propose.d.ts.map +0 -1
- package/dist/os/rfc/handlers/supersede-propose.js +0 -203
- package/dist/os/rfc/handlers/supersede-propose.js.map +0 -1
- package/dist/os/rfc/handlers/validate-rules.d.ts +0 -32
- package/dist/os/rfc/handlers/validate-rules.d.ts.map +0 -1
- package/dist/os/rfc/handlers/validate-rules.js +0 -590
- package/dist/os/rfc/handlers/validate-rules.js.map +0 -1
- package/dist/os/rfc/handlers/validate.d.ts +0 -4
- package/dist/os/rfc/handlers/validate.d.ts.map +0 -1
- package/dist/os/rfc/handlers/validate.js +0 -122
- package/dist/os/rfc/handlers/validate.js.map +0 -1
- package/dist/os/rfc/handlers.d.ts +0 -7
- package/dist/os/rfc/handlers.d.ts.map +0 -1
- package/dist/os/rfc/handlers.js +0 -19
- package/dist/os/rfc/handlers.js.map +0 -1
- package/dist/os/rfc/index.d.ts +0 -18
- package/dist/os/rfc/index.d.ts.map +0 -1
- package/dist/os/rfc/index.js +0 -24
- package/dist/os/rfc/index.js.map +0 -1
- package/dist/os/rfc/rfc.module.d.ts +0 -3
- package/dist/os/rfc/rfc.module.d.ts.map +0 -1
- package/dist/os/rfc/rfc.module.js +0 -367
- package/dist/os/rfc/rfc.module.js.map +0 -1
- package/dist/os/rfc/types.d.ts +0 -483
- package/dist/os/rfc/types.d.ts.map +0 -1
- package/dist/os/rfc/types.js +0 -100
- package/dist/os/rfc/types.js.map +0 -1
- package/dist/os/rfc/verification-evidence.d.ts +0 -8
- package/dist/os/rfc/verification-evidence.d.ts.map +0 -1
- package/dist/os/rfc/verification-evidence.js +0 -184
- package/dist/os/rfc/verification-evidence.js.map +0 -1
- package/dist/os/session/atif-parser.d.ts +0 -29
- package/dist/os/session/atif-parser.d.ts.map +0 -1
- package/dist/os/session/atif-parser.js +0 -140
- package/dist/os/session/atif-parser.js.map +0 -1
- package/dist/os/session/frontmatter-io.d.ts +0 -31
- package/dist/os/session/frontmatter-io.d.ts.map +0 -1
- package/dist/os/session/frontmatter-io.js +0 -146
- package/dist/os/session/frontmatter-io.js.map +0 -1
- package/dist/os/session/handlers/archive.d.ts +0 -4
- package/dist/os/session/handlers/archive.d.ts.map +0 -1
- package/dist/os/session/handlers/archive.js +0 -241
- package/dist/os/session/handlers/archive.js.map +0 -1
- package/dist/os/session/handlers/list.d.ts +0 -4
- package/dist/os/session/handlers/list.d.ts.map +0 -1
- package/dist/os/session/handlers/list.js +0 -147
- package/dist/os/session/handlers/list.js.map +0 -1
- package/dist/os/session/handlers/save.d.ts +0 -6
- package/dist/os/session/handlers/save.d.ts.map +0 -1
- package/dist/os/session/handlers/save.js +0 -297
- package/dist/os/session/handlers/save.js.map +0 -1
- package/dist/os/session/handlers/validate.d.ts +0 -4
- package/dist/os/session/handlers/validate.d.ts.map +0 -1
- package/dist/os/session/handlers/validate.js +0 -224
- package/dist/os/session/handlers/validate.js.map +0 -1
- package/dist/os/session/index.d.ts +0 -9
- package/dist/os/session/index.d.ts.map +0 -1
- package/dist/os/session/index.js +0 -20
- package/dist/os/session/index.js.map +0 -1
- package/dist/os/session/session.module.d.ts +0 -3
- package/dist/os/session/session.module.d.ts.map +0 -1
- package/dist/os/session/session.module.js +0 -116
- package/dist/os/session/session.module.js.map +0 -1
- package/dist/os/session/types.d.ts +0 -131
- package/dist/os/session/types.d.ts.map +0 -1
- package/dist/os/session/types.js +0 -59
- package/dist/os/session/types.js.map +0 -1
- package/dist/os/spec/live-spec-list.d.ts +0 -4
- package/dist/os/spec/live-spec-list.d.ts.map +0 -1
- package/dist/os/spec/live-spec-list.js +0 -72
- package/dist/os/spec/live-spec-list.js.map +0 -1
- package/dist/os/spec/live-spec-merge.d.ts +0 -4
- package/dist/os/spec/live-spec-merge.d.ts.map +0 -1
- package/dist/os/spec/live-spec-merge.js +0 -345
- package/dist/os/spec/live-spec-merge.js.map +0 -1
- package/dist/os/spec/live-spec-show.d.ts +0 -4
- package/dist/os/spec/live-spec-show.d.ts.map +0 -1
- package/dist/os/spec/live-spec-show.js +0 -105
- package/dist/os/spec/live-spec-show.js.map +0 -1
- package/dist/os/spec/live-spec-types.d.ts +0 -71
- package/dist/os/spec/live-spec-types.d.ts.map +0 -1
- package/dist/os/spec/live-spec-types.js +0 -14
- package/dist/os/spec/live-spec-types.js.map +0 -1
- package/dist/os/spec/live-spec-validate.d.ts +0 -4
- package/dist/os/spec/live-spec-validate.d.ts.map +0 -1
- package/dist/os/spec/live-spec-validate.js +0 -140
- package/dist/os/spec/live-spec-validate.js.map +0 -1
- package/dist/os/spec/spec-materialize.d.ts +0 -21
- package/dist/os/spec/spec-materialize.d.ts.map +0 -1
- package/dist/os/spec/spec-materialize.js +0 -342
- package/dist/os/spec/spec-materialize.js.map +0 -1
- package/dist/os/spec/spec-schema.d.ts +0 -126
- package/dist/os/spec/spec-schema.d.ts.map +0 -1
- package/dist/os/spec/spec-schema.js +0 -118
- package/dist/os/spec/spec-schema.js.map +0 -1
- package/dist/os/spec/spec-status.d.ts +0 -33
- package/dist/os/spec/spec-status.d.ts.map +0 -1
- package/dist/os/spec/spec-status.js +0 -228
- package/dist/os/spec/spec-status.js.map +0 -1
- package/dist/os/spec/spec-validate.d.ts +0 -4
- package/dist/os/spec/spec-validate.d.ts.map +0 -1
- package/dist/os/spec/spec-validate.js +0 -435
- package/dist/os/spec/spec-validate.js.map +0 -1
- package/dist/os/spec/spec.module.d.ts +0 -3
- package/dist/os/spec/spec.module.d.ts.map +0 -1
- package/dist/os/spec/spec.module.js +0 -120
- package/dist/os/spec/spec.module.js.map +0 -1
- package/dist/os/werkstatt/handlers/lock.d.ts +0 -10
- package/dist/os/werkstatt/handlers/lock.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/lock.js +0 -153
- package/dist/os/werkstatt/handlers/lock.js.map +0 -1
- package/dist/os/werkstatt/handlers/schema.d.ts +0 -33
- package/dist/os/werkstatt/handlers/schema.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/schema.js +0 -42
- package/dist/os/werkstatt/handlers/schema.js.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts +0 -15
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js +0 -152
- package/dist/os/werkstatt/handlers/werkstatt-lock-recover.js.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts +0 -18
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js +0 -51
- package/dist/os/werkstatt/handlers/werkstatt-lock-status.js.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts +0 -11
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js +0 -79
- package/dist/os/werkstatt/handlers/werkstatt-operation-validate.js.map +0 -1
- package/dist/os/werkstatt/handlers/workspace-deps.d.ts +0 -12
- package/dist/os/werkstatt/handlers/workspace-deps.d.ts.map +0 -1
- package/dist/os/werkstatt/handlers/workspace-deps.js +0 -42
- package/dist/os/werkstatt/handlers/workspace-deps.js.map +0 -1
- package/dist/os/werkstatt/index.d.ts +0 -7
- package/dist/os/werkstatt/index.d.ts.map +0 -1
- package/dist/os/werkstatt/index.js +0 -18
- package/dist/os/werkstatt/index.js.map +0 -1
- package/dist/os/werkstatt/werkstatt.module.d.ts +0 -3
- package/dist/os/werkstatt/werkstatt.module.d.ts.map +0 -1
- package/dist/os/werkstatt/werkstatt.module.js +0 -59
- package/dist/os/werkstatt/werkstatt.module.js.map +0 -1
- package/dist/os/workflow/handlers.d.ts +0 -12
- package/dist/os/workflow/handlers.d.ts.map +0 -1
- package/dist/os/workflow/handlers.js +0 -262
- package/dist/os/workflow/handlers.js.map +0 -1
- package/dist/os/workflow/index.d.ts +0 -4
- package/dist/os/workflow/index.d.ts.map +0 -1
- package/dist/os/workflow/index.js +0 -18
- package/dist/os/workflow/index.js.map +0 -1
- package/dist/os/workflow/types.d.ts +0 -69
- package/dist/os/workflow/types.d.ts.map +0 -1
- package/dist/os/workflow/types.js +0 -23
- package/dist/os/workflow/types.js.map +0 -1
- package/dist/os/workflow/workflow.module.d.ts +0 -3
- package/dist/os/workflow/workflow.module.d.ts.map +0 -1
- package/dist/os/workflow/workflow.module.js +0 -49
- package/dist/os/workflow/workflow.module.js.map +0 -1
- package/dist/src/cli-output.d.ts +0 -5
- package/dist/src/cli-output.d.ts.map +0 -1
- package/dist/src/cli-output.js +0 -53
- package/dist/src/cli-output.js.map +0 -1
- package/dist/src/compass/contract-registry.d.ts +0 -7
- package/dist/src/compass/contract-registry.d.ts.map +0 -1
- package/dist/src/compass/contract-registry.js +0 -93
- package/dist/src/compass/contract-registry.js.map +0 -1
- package/dist/src/compass/types.d.ts +0 -28
- package/dist/src/compass/types.d.ts.map +0 -1
- package/dist/src/compass/types.js +0 -14
- package/dist/src/compass/types.js.map +0 -1
- package/dist/src/config/forge-config.d.ts +0 -242
- package/dist/src/config/forge-config.d.ts.map +0 -1
- package/dist/src/config/forge-config.js +0 -363
- package/dist/src/config/forge-config.js.map +0 -1
- package/dist/src/forge-module.d.ts +0 -17
- package/dist/src/forge-module.d.ts.map +0 -1
- package/dist/src/forge-module.js +0 -16
- package/dist/src/forge-module.js.map +0 -1
- package/dist/src/index.d.ts +0 -39
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -59
- package/dist/src/index.js.map +0 -1
- package/dist/src/knowledge/budgets.d.ts +0 -38
- package/dist/src/knowledge/budgets.d.ts.map +0 -1
- package/dist/src/knowledge/budgets.js +0 -157
- package/dist/src/knowledge/budgets.js.map +0 -1
- package/dist/src/knowledge/compact.d.ts +0 -47
- package/dist/src/knowledge/compact.d.ts.map +0 -1
- package/dist/src/knowledge/compact.js +0 -320
- package/dist/src/knowledge/compact.js.map +0 -1
- package/dist/src/knowledge/index.d.ts +0 -7
- package/dist/src/knowledge/index.d.ts.map +0 -1
- package/dist/src/knowledge/index.js +0 -19
- package/dist/src/knowledge/index.js.map +0 -1
- package/dist/src/knowledge/parse.d.ts +0 -3
- package/dist/src/knowledge/parse.d.ts.map +0 -1
- package/dist/src/knowledge/parse.js +0 -205
- package/dist/src/knowledge/parse.js.map +0 -1
- package/dist/src/knowledge/promote.d.ts +0 -37
- package/dist/src/knowledge/promote.d.ts.map +0 -1
- package/dist/src/knowledge/promote.js +0 -120
- package/dist/src/knowledge/promote.js.map +0 -1
- package/dist/src/knowledge/schema.d.ts +0 -61
- package/dist/src/knowledge/schema.d.ts.map +0 -1
- package/dist/src/knowledge/schema.js +0 -64
- package/dist/src/knowledge/schema.js.map +0 -1
- package/dist/src/knowledge/serialize.d.ts +0 -3
- package/dist/src/knowledge/serialize.d.ts.map +0 -1
- package/dist/src/knowledge/serialize.js +0 -67
- package/dist/src/knowledge/serialize.js.map +0 -1
- package/dist/src/migration-adapters/git-utils.d.ts +0 -3
- package/dist/src/migration-adapters/git-utils.d.ts.map +0 -1
- package/dist/src/migration-adapters/git-utils.js +0 -64
- package/dist/src/migration-adapters/git-utils.js.map +0 -1
- package/dist/src/migration-adapters/ignored-files.d.ts +0 -12
- package/dist/src/migration-adapters/ignored-files.d.ts.map +0 -1
- package/dist/src/migration-adapters/ignored-files.js +0 -190
- package/dist/src/migration-adapters/ignored-files.js.map +0 -1
- package/dist/src/migration-adapters/index.d.ts +0 -8
- package/dist/src/migration-adapters/index.d.ts.map +0 -1
- package/dist/src/migration-adapters/index.js +0 -17
- package/dist/src/migration-adapters/index.js.map +0 -1
- package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts +0 -3
- package/dist/src/migration-adapters/node-typescript-pnpm/index.d.ts.map +0 -1
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js +0 -141
- package/dist/src/migration-adapters/node-typescript-pnpm/index.js.map +0 -1
- package/dist/src/migration-adapters/phaser-pnpm/index.d.ts +0 -3
- package/dist/src/migration-adapters/phaser-pnpm/index.d.ts.map +0 -1
- package/dist/src/migration-adapters/phaser-pnpm/index.js +0 -142
- package/dist/src/migration-adapters/phaser-pnpm/index.js.map +0 -1
- package/dist/src/migration-adapters/registry.d.ts +0 -6
- package/dist/src/migration-adapters/registry.d.ts.map +0 -1
- package/dist/src/migration-adapters/registry.js +0 -55
- package/dist/src/migration-adapters/registry.js.map +0 -1
- package/dist/src/migration-adapters/types.d.ts +0 -35
- package/dist/src/migration-adapters/types.d.ts.map +0 -1
- package/dist/src/migration-adapters/types.js +0 -31
- package/dist/src/migration-adapters/types.js.map +0 -1
- package/dist/src/onboarding/agents-generate.d.ts +0 -31
- package/dist/src/onboarding/agents-generate.d.ts.map +0 -1
- package/dist/src/onboarding/agents-generate.js +0 -372
- package/dist/src/onboarding/agents-generate.js.map +0 -1
- package/dist/src/onboarding/create.d.ts +0 -12
- package/dist/src/onboarding/create.d.ts.map +0 -1
- package/dist/src/onboarding/create.js +0 -389
- package/dist/src/onboarding/create.js.map +0 -1
- package/dist/src/onboarding/doctor.d.ts +0 -45
- package/dist/src/onboarding/doctor.d.ts.map +0 -1
- package/dist/src/onboarding/doctor.js +0 -1190
- package/dist/src/onboarding/doctor.js.map +0 -1
- package/dist/src/onboarding/init.d.ts +0 -36
- package/dist/src/onboarding/init.d.ts.map +0 -1
- package/dist/src/onboarding/init.js +0 -362
- package/dist/src/onboarding/init.js.map +0 -1
- package/dist/src/onboarding/invariant-engine.d.ts +0 -17
- package/dist/src/onboarding/invariant-engine.d.ts.map +0 -1
- package/dist/src/onboarding/invariant-engine.js +0 -416
- package/dist/src/onboarding/invariant-engine.js.map +0 -1
- package/dist/src/onboarding/memory-scaffold.d.ts +0 -18
- package/dist/src/onboarding/memory-scaffold.d.ts.map +0 -1
- package/dist/src/onboarding/memory-scaffold.js +0 -151
- package/dist/src/onboarding/memory-scaffold.js.map +0 -1
- package/dist/src/onboarding/nested-agents-generate.d.ts +0 -18
- package/dist/src/onboarding/nested-agents-generate.d.ts.map +0 -1
- package/dist/src/onboarding/nested-agents-generate.js +0 -69
- package/dist/src/onboarding/nested-agents-generate.js.map +0 -1
- package/dist/src/onboarding/nested-agents-templates.d.ts +0 -26
- package/dist/src/onboarding/nested-agents-templates.d.ts.map +0 -1
- package/dist/src/onboarding/nested-agents-templates.js +0 -178
- package/dist/src/onboarding/nested-agents-templates.js.map +0 -1
- package/dist/src/onboarding/profile-validate.d.ts +0 -13
- package/dist/src/onboarding/profile-validate.d.ts.map +0 -1
- package/dist/src/onboarding/profile-validate.js +0 -109
- package/dist/src/onboarding/profile-validate.js.map +0 -1
- package/dist/src/onboarding/scaffold-project.d.ts +0 -12
- package/dist/src/onboarding/scaffold-project.d.ts.map +0 -1
- package/dist/src/onboarding/scaffold-project.js +0 -264
- package/dist/src/onboarding/scaffold-project.js.map +0 -1
- package/dist/src/onboarding/scaffold.d.ts +0 -15
- package/dist/src/onboarding/scaffold.d.ts.map +0 -1
- package/dist/src/onboarding/scaffold.js +0 -121
- package/dist/src/onboarding/scaffold.js.map +0 -1
- package/dist/src/onboarding/upgrade.d.ts +0 -27
- package/dist/src/onboarding/upgrade.d.ts.map +0 -1
- package/dist/src/onboarding/upgrade.js +0 -453
- package/dist/src/onboarding/upgrade.js.map +0 -1
- package/dist/src/onboarding/workspace-discovery.d.ts +0 -11
- package/dist/src/onboarding/workspace-discovery.d.ts.map +0 -1
- package/dist/src/onboarding/workspace-discovery.js +0 -138
- package/dist/src/onboarding/workspace-discovery.js.map +0 -1
- package/dist/src/plugin/ForgePluginManifest.d.ts +0 -38
- package/dist/src/plugin/ForgePluginManifest.d.ts.map +0 -1
- package/dist/src/plugin/ForgePluginManifest.js +0 -52
- package/dist/src/plugin/ForgePluginManifest.js.map +0 -1
- package/dist/src/profiles/profile-schema.d.ts +0 -361
- package/dist/src/profiles/profile-schema.d.ts.map +0 -1
- package/dist/src/profiles/profile-schema.js +0 -208
- package/dist/src/profiles/profile-schema.js.map +0 -1
- package/dist/src/profiles/stack-profile.d.ts +0 -173
- package/dist/src/profiles/stack-profile.d.ts.map +0 -1
- package/dist/src/profiles/stack-profile.js +0 -148
- package/dist/src/profiles/stack-profile.js.map +0 -1
- package/dist/src/profiles/terminology-utils.d.ts +0 -8
- package/dist/src/profiles/terminology-utils.d.ts.map +0 -1
- package/dist/src/profiles/terminology-utils.js +0 -31
- package/dist/src/profiles/terminology-utils.js.map +0 -1
- package/dist/src/registry.d.ts +0 -38
- package/dist/src/registry.d.ts.map +0 -1
- package/dist/src/registry.js +0 -174
- package/dist/src/registry.js.map +0 -1
- package/dist/src/skill-schema.d.ts +0 -30
- package/dist/src/skill-schema.d.ts.map +0 -1
- package/dist/src/skill-schema.js +0 -34
- package/dist/src/skill-schema.js.map +0 -1
- package/dist/src/types.d.ts +0 -154
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -17
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils/fs-atomic.d.ts +0 -7
- package/dist/src/utils/fs-atomic.d.ts.map +0 -1
- package/dist/src/utils/fs-atomic.js +0 -81
- package/dist/src/utils/fs-atomic.js.map +0 -1
- package/dist/src/utils/fs-idempotent.d.ts +0 -2
- package/dist/src/utils/fs-idempotent.d.ts.map +0 -1
- package/dist/src/utils/fs-idempotent.js +0 -39
- package/dist/src/utils/fs-idempotent.js.map +0 -1
- package/dist/src/utils/fs-trash-sync.d.ts +0 -2
- package/dist/src/utils/fs-trash-sync.d.ts.map +0 -1
- package/dist/src/utils/fs-trash-sync.js +0 -34
- package/dist/src/utils/fs-trash-sync.js.map +0 -1
- package/dist/src/utils/fs-trash.d.ts +0 -2
- package/dist/src/utils/fs-trash.d.ts.map +0 -1
- package/dist/src/utils/fs-trash.js +0 -24
- package/dist/src/utils/fs-trash.js.map +0 -1
- package/dist/src/utils/fs.d.ts +0 -8
- package/dist/src/utils/fs.d.ts.map +0 -1
- package/dist/src/utils/fs.js +0 -60
- package/dist/src/utils/fs.js.map +0 -1
- package/dist/src/utils/generated-marker.d.ts +0 -21
- package/dist/src/utils/generated-marker.d.ts.map +0 -1
- package/dist/src/utils/generated-marker.js +0 -128
- package/dist/src/utils/generated-marker.js.map +0 -1
- package/dist/src/utils/hash.d.ts +0 -2
- package/dist/src/utils/hash.d.ts.map +0 -1
- package/dist/src/utils/hash.js +0 -18
- package/dist/src/utils/hash.js.map +0 -1
- package/dist/src/utils/index.d.ts +0 -9
- package/dist/src/utils/index.d.ts.map +0 -1
- package/dist/src/utils/index.js +0 -21
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/string-utils.d.ts +0 -2
- package/dist/src/utils/string-utils.d.ts.map +0 -1
- package/dist/src/utils/string-utils.js +0 -19
- package/dist/src/utils/string-utils.js.map +0 -1
- package/dist/src/validators/note-frontmatter-validate.d.ts +0 -20
- package/dist/src/validators/note-frontmatter-validate.d.ts.map +0 -1
- package/dist/src/validators/note-frontmatter-validate.js +0 -117
- package/dist/src/validators/note-frontmatter-validate.js.map +0 -1
- package/dist/src/validators/note-link-validate.d.ts +0 -21
- package/dist/src/validators/note-link-validate.d.ts.map +0 -1
- package/dist/src/validators/note-link-validate.js +0 -121
- package/dist/src/validators/note-link-validate.js.map +0 -1
- package/dist/src/validators/note-orphan-detect.d.ts +0 -19
- package/dist/src/validators/note-orphan-detect.d.ts.map +0 -1
- package/dist/src/validators/note-orphan-detect.js +0 -123
- package/dist/src/validators/note-orphan-detect.js.map +0 -1
- package/dist/src/validators/port-validate.d.ts +0 -12
- package/dist/src/validators/port-validate.d.ts.map +0 -1
- package/dist/src/validators/port-validate.js +0 -78
- package/dist/src/validators/port-validate.js.map +0 -1
- package/dist/src/validators/skill-validate.d.ts +0 -29
- package/dist/src/validators/skill-validate.d.ts.map +0 -1
- package/dist/src/validators/skill-validate.js +0 -689
- package/dist/src/validators/skill-validate.js.map +0 -1
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
<MODULE_CONTRACT>
|
|
3
|
-
<purpose>Command handler for forge.skill.knowledge.compact — wraps pure compaction functions in the kernel command contract (RFC-0662).</purpose>
|
|
4
|
-
<non-goals>
|
|
5
|
-
<item>Do not implement planning logic — that lives in src/knowledge/compact.ts.</item>
|
|
6
|
-
<item>Do not import from @warpgogol/* — os/core may use dynamic imports but this handler stays forge-internal.</item>
|
|
7
|
-
</non-goals>
|
|
8
|
-
</MODULE_CONTRACT>
|
|
9
|
-
<CHANGE_SUMMARY>
|
|
10
|
-
<item>RFC-0662: initial knowledge compaction command handler.</item>
|
|
11
|
-
</CHANGE_SUMMARY>
|
|
12
|
-
*/
|
|
13
|
-
import fs from "node:fs";
|
|
14
|
-
import path from "node:path";
|
|
15
|
-
import { FORGE_SKILLS, discoverPackSkills } from "../../../src/registry.js";
|
|
16
|
-
import { loadForgeConfig } from "../../../src/config/forge-config.js";
|
|
17
|
-
import { resolveForgeRoot } from "../../../src/config/forge-config.js";
|
|
18
|
-
import { planCompaction, executeCompaction, resolveRetentionDays, resolveStaleDays, } from "../../../src/knowledge/compact.js";
|
|
19
|
-
import { parseKnowledgeFile } from "../../../src/knowledge/parse.js";
|
|
20
|
-
function discoverSkillKnowledgeFiles(workspaceRoot, skillName, all) {
|
|
21
|
-
const result = [];
|
|
22
|
-
const config = loadForgeConfig(workspaceRoot);
|
|
23
|
-
// Resolve forge root
|
|
24
|
-
let forgeRoot;
|
|
25
|
-
try {
|
|
26
|
-
forgeRoot = resolveForgeRoot(workspaceRoot);
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return result;
|
|
30
|
-
}
|
|
31
|
-
// Collect forge skills. skill.path is relative to forgeRoot and already
|
|
32
|
-
// includes the "skills/" prefix (see init.ts / skill-validate.ts).
|
|
33
|
-
for (const skill of FORGE_SKILLS) {
|
|
34
|
-
if (skillName && skill.name !== skillName)
|
|
35
|
-
continue;
|
|
36
|
-
if (!skill.knowledge || skill.knowledge.length === 0)
|
|
37
|
-
continue;
|
|
38
|
-
const skillDir = path.dirname(path.join(forgeRoot, skill.path));
|
|
39
|
-
const files = skill.knowledge
|
|
40
|
-
.map((f) => path.join(skillDir, f))
|
|
41
|
-
.filter((f) => {
|
|
42
|
-
try {
|
|
43
|
-
return fs.existsSync(f);
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
if (files.length > 0) {
|
|
50
|
-
result.push({ skill: skill.name, files });
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// Collect pack skills if --all or if --skill matches a pack skill
|
|
54
|
-
if (all || (skillName && !result.some((r) => r.skill === skillName))) {
|
|
55
|
-
let packSkills = [];
|
|
56
|
-
try {
|
|
57
|
-
packSkills = discoverPackSkills(workspaceRoot, config);
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
// Manifest missing or invalid — skip pack skills
|
|
61
|
-
}
|
|
62
|
-
for (const skill of packSkills) {
|
|
63
|
-
if (skillName && skill.name !== skillName)
|
|
64
|
-
continue;
|
|
65
|
-
if (!skill.knowledge || skill.knowledge.length === 0)
|
|
66
|
-
continue;
|
|
67
|
-
const packDir = path.resolve(workspaceRoot, skill.dir);
|
|
68
|
-
const skillDir = path.dirname(path.join(packDir, skill.path));
|
|
69
|
-
const files = skill.knowledge
|
|
70
|
-
.map((f) => path.join(skillDir, f))
|
|
71
|
-
.filter((f) => {
|
|
72
|
-
try {
|
|
73
|
-
return fs.existsSync(f);
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
if (files.length > 0) {
|
|
80
|
-
result.push({ skill: skill.name, files });
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return result;
|
|
85
|
-
}
|
|
86
|
-
export async function runKnowledgeCompact(input, context) {
|
|
87
|
-
const { flags } = input;
|
|
88
|
-
const skillName = typeof flags["skill"] === "string" ? flags["skill"] : undefined;
|
|
89
|
-
// --all is consumed by the site-kernel CLI (consumeCommonFlags) before the
|
|
90
|
-
// command runs, so the command-level switch is --all-skills.
|
|
91
|
-
const all = flags["all-skills"] === true;
|
|
92
|
-
const dryRun = context.dryRun || flags["dry-run"] === true;
|
|
93
|
-
const json = flags["json"] === true;
|
|
94
|
-
// Validate exactly one of --skill / --all
|
|
95
|
-
if (!skillName && !all) {
|
|
96
|
-
return {
|
|
97
|
-
data: {
|
|
98
|
-
command: "forge.skill.knowledge.compact",
|
|
99
|
-
status: "fail",
|
|
100
|
-
dryRun,
|
|
101
|
-
files: [],
|
|
102
|
-
totals: { archived: 0, markedStale: 0, legacyFiles: 0 },
|
|
103
|
-
errors: ["Exactly one of --skill <name> or --all-skills is required."],
|
|
104
|
-
},
|
|
105
|
-
exitCode: 1,
|
|
106
|
-
summary: "Error: --skill or --all-skills is required.",
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
if (skillName && all) {
|
|
110
|
-
return {
|
|
111
|
-
data: {
|
|
112
|
-
command: "forge.skill.knowledge.compact",
|
|
113
|
-
status: "fail",
|
|
114
|
-
dryRun,
|
|
115
|
-
files: [],
|
|
116
|
-
totals: { archived: 0, markedStale: 0, legacyFiles: 0 },
|
|
117
|
-
errors: ["--skill and --all-skills are mutually exclusive."],
|
|
118
|
-
},
|
|
119
|
-
exitCode: 1,
|
|
120
|
-
summary: "Error: --skill and --all-skills are mutually exclusive.",
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
// Resolve retention and stale days
|
|
124
|
-
const flagRetention = typeof flags["retention-days"] === "string" ? Number(flags["retention-days"]) : undefined;
|
|
125
|
-
const flagStale = typeof flags["stale-days"] === "string" ? Number(flags["stale-days"]) : undefined;
|
|
126
|
-
const retentionDays = flagRetention !== undefined && flagRetention > 0 && Number.isInteger(flagRetention)
|
|
127
|
-
? flagRetention
|
|
128
|
-
: resolveRetentionDays(context.workspaceRoot);
|
|
129
|
-
const staleDays = flagStale !== undefined && flagStale > 0 && Number.isInteger(flagStale)
|
|
130
|
-
? flagStale
|
|
131
|
-
: resolveStaleDays(context.workspaceRoot);
|
|
132
|
-
// Discover target skills and their knowledge files
|
|
133
|
-
const skillFiles = discoverSkillKnowledgeFiles(context.workspaceRoot, skillName, all);
|
|
134
|
-
if (skillFiles.length === 0) {
|
|
135
|
-
const summary = skillName
|
|
136
|
-
? `Skill "${skillName}" has no knowledge files to compact.`
|
|
137
|
-
: "No skills with knowledge files found.";
|
|
138
|
-
return {
|
|
139
|
-
data: {
|
|
140
|
-
command: "forge.skill.knowledge.compact",
|
|
141
|
-
status: "pass",
|
|
142
|
-
dryRun,
|
|
143
|
-
files: [],
|
|
144
|
-
totals: { archived: 0, markedStale: 0, legacyFiles: 0 },
|
|
145
|
-
},
|
|
146
|
-
exitCode: 0,
|
|
147
|
-
summary,
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
// Parse all knowledge files
|
|
151
|
-
const today = new Date().toISOString().slice(0, 10);
|
|
152
|
-
const allParsed = [];
|
|
153
|
-
const fileToSkill = new Map();
|
|
154
|
-
for (const { skill, files } of skillFiles) {
|
|
155
|
-
for (const file of files) {
|
|
156
|
-
const parsed = parseKnowledgeFile(file);
|
|
157
|
-
allParsed.push(parsed);
|
|
158
|
-
fileToSkill.set(file, skill);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
// Plan compaction
|
|
162
|
-
const plans = planCompaction(allParsed, { retentionDays, staleDays, today });
|
|
163
|
-
// Execute compaction
|
|
164
|
-
const report = executeCompaction(plans, dryRun);
|
|
165
|
-
// Group by skill for output
|
|
166
|
-
const skillsOutput = skillFiles.map(({ skill, files }) => {
|
|
167
|
-
const skillFileResults = report.files.filter((r) => files.includes(r.file));
|
|
168
|
-
return {
|
|
169
|
-
skill,
|
|
170
|
-
files: skillFileResults.map((r) => ({
|
|
171
|
-
file: path.basename(r.file),
|
|
172
|
-
actions: r.actions,
|
|
173
|
-
legacySectionCount: r.legacySectionCount,
|
|
174
|
-
})),
|
|
175
|
-
};
|
|
176
|
-
});
|
|
177
|
-
const groupedReport = {
|
|
178
|
-
...report,
|
|
179
|
-
skills: skillsOutput,
|
|
180
|
-
};
|
|
181
|
-
const exitCode = report.status === "pass" ? 0 : 1;
|
|
182
|
-
const summary = dryRun
|
|
183
|
-
? `[dry-run] forge.skill.knowledge.compact: ${report.totals.archived} would archive, ${report.totals.markedStale} would mark stale, ${report.totals.legacyFiles} legacy file(s)`
|
|
184
|
-
: `forge.skill.knowledge.compact: ${report.totals.archived} archived, ${report.totals.markedStale} marked stale, ${report.totals.legacyFiles} legacy file(s)`;
|
|
185
|
-
if (context.outputFormat === "pretty" && !json) {
|
|
186
|
-
context.logger.section("Knowledge Compaction");
|
|
187
|
-
for (const skill of skillsOutput) {
|
|
188
|
-
context.logger.info(`Skill: ${skill.skill}`);
|
|
189
|
-
for (const file of skill.files) {
|
|
190
|
-
context.logger.info(` ${file.file}: ${file.actions.length} action(s), ${file.legacySectionCount} legacy section(s)`);
|
|
191
|
-
for (const action of file.actions) {
|
|
192
|
-
context.logger.info(` ${action.kind}: ${action.entryId} — ${action.reason}`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
context.logger.info(`Totals: ${report.totals.archived} archived, ${report.totals.markedStale} marked stale, ${report.totals.legacyFiles} legacy file(s)`);
|
|
197
|
-
}
|
|
198
|
-
return {
|
|
199
|
-
data: groupedReport,
|
|
200
|
-
exitCode,
|
|
201
|
-
summary,
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
//# sourceMappingURL=knowledge-compact.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge-compact.js","sourceRoot":"","sources":["../../../../os/core/handlers/knowledge-compact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { ForgeCommandInput, ForgeCommandResult, ForgeRuntimeContext } from "../../../src/types.ts";
|
|
2
|
-
export interface PackageHealthViolation {
|
|
3
|
-
ruleId: string;
|
|
4
|
-
packageName: string;
|
|
5
|
-
severity: "error" | "warning";
|
|
6
|
-
message: string;
|
|
7
|
-
file?: string;
|
|
8
|
-
fixHint?: string;
|
|
9
|
-
}
|
|
10
|
-
export interface PackageHealthResult {
|
|
11
|
-
command: "forge.package.health";
|
|
12
|
-
packagesChecked: number;
|
|
13
|
-
violations: PackageHealthViolation[];
|
|
14
|
-
passed: boolean;
|
|
15
|
-
}
|
|
16
|
-
export declare function runPackageHealth(_input: ForgeCommandInput, context: ForgeRuntimeContext): Promise<ForgeCommandResult<PackageHealthResult>>;
|
|
17
|
-
//# sourceMappingURL=package-health.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package-health.d.ts","sourceRoot":"","sources":["../../../../os/core/handlers/package-health.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,sBAAsB,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC;CACjB;AAiCD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAmKlD"}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
<MODULE_CONTRACT>
|
|
3
|
-
<purpose>forge.package.health — validate all published packages (private: false) for standalone extraction readiness. Checks engines.node, embedded CI workflow, extract.config.yaml, and devDependencies completeness (no hoisted tool deps).</purpose>
|
|
4
|
-
<non-goals>
|
|
5
|
-
<item>Do not import from @warpgogol/* — this module is portable.</item>
|
|
6
|
-
<item>Do not modify files — read-only validation.</item>
|
|
7
|
-
</non-goals>
|
|
8
|
-
</MODULE_CONTRACT>
|
|
9
|
-
<CHANGE_SUMMARY>
|
|
10
|
-
<item>Initial: forge.package.health validator — engines, CI workflow, extract config, devDeps completeness.</item>
|
|
11
|
-
</CHANGE_SUMMARY>
|
|
12
|
-
*/
|
|
13
|
-
import fs from "node:fs";
|
|
14
|
-
import path from "node:path";
|
|
15
|
-
const KNOWN_SCRIPT_TOOLS = {
|
|
16
|
-
eslint: "eslint",
|
|
17
|
-
prettier: "prettier",
|
|
18
|
-
vitest: "vitest",
|
|
19
|
-
tsc: "typescript",
|
|
20
|
-
tsx: "tsx",
|
|
21
|
-
turbo: "turbo",
|
|
22
|
-
biome: "@biomejs/biome",
|
|
23
|
-
};
|
|
24
|
-
function extractToolNames(scripts) {
|
|
25
|
-
const tools = new Set();
|
|
26
|
-
for (const scriptValue of Object.values(scripts)) {
|
|
27
|
-
for (const [toolName, depName] of Object.entries(KNOWN_SCRIPT_TOOLS)) {
|
|
28
|
-
if (scriptValue.includes(toolName) || scriptValue.includes(`pnpm exec ${toolName}`)) {
|
|
29
|
-
tools.add(depName);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return tools;
|
|
34
|
-
}
|
|
35
|
-
function readJsonFile(filePath) {
|
|
36
|
-
try {
|
|
37
|
-
const raw = fs.readFileSync(filePath, "utf8");
|
|
38
|
-
return JSON.parse(raw);
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
export async function runPackageHealth(_input, context) {
|
|
45
|
-
const { workspaceRoot, logger } = context;
|
|
46
|
-
const packagesDir = path.join(workspaceRoot, "packages");
|
|
47
|
-
if (!fs.existsSync(packagesDir)) {
|
|
48
|
-
return {
|
|
49
|
-
data: {
|
|
50
|
-
command: "forge.package.health",
|
|
51
|
-
packagesChecked: 0,
|
|
52
|
-
violations: [],
|
|
53
|
-
passed: true,
|
|
54
|
-
},
|
|
55
|
-
exitCode: 0,
|
|
56
|
-
summary: "No packages/ directory found — nothing to check.",
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
const rootPkg = readJsonFile(path.join(workspaceRoot, "package.json"));
|
|
60
|
-
const rootEngines = rootPkg?.["engines"];
|
|
61
|
-
const rootNodeRange = rootEngines?.["node"];
|
|
62
|
-
const violations = [];
|
|
63
|
-
let packagesChecked = 0;
|
|
64
|
-
const entries = fs.readdirSync(packagesDir, { withFileTypes: true });
|
|
65
|
-
for (const entry of entries) {
|
|
66
|
-
if (!entry.isDirectory())
|
|
67
|
-
continue;
|
|
68
|
-
if (entry.name.startsWith("."))
|
|
69
|
-
continue;
|
|
70
|
-
const pkgDir = path.join(packagesDir, entry.name);
|
|
71
|
-
const pkgJsonPath = path.join(pkgDir, "package.json");
|
|
72
|
-
const pkg = readJsonFile(pkgJsonPath);
|
|
73
|
-
if (!pkg)
|
|
74
|
-
continue;
|
|
75
|
-
const isPrivate = pkg["private"] === true;
|
|
76
|
-
if (isPrivate)
|
|
77
|
-
continue;
|
|
78
|
-
packagesChecked++;
|
|
79
|
-
const packageName = String(pkg["name"] ?? entry.name);
|
|
80
|
-
// CHECK 1: engines.node exists and matches root
|
|
81
|
-
const pkgEngines = pkg["engines"];
|
|
82
|
-
const pkgNodeRange = pkgEngines?.["node"];
|
|
83
|
-
if (!pkgNodeRange) {
|
|
84
|
-
violations.push({
|
|
85
|
-
ruleId: "PKG-HEALTH-01",
|
|
86
|
-
packageName,
|
|
87
|
-
severity: "error",
|
|
88
|
-
message: `Missing engines.node in package.json. Root requires "${rootNodeRange ?? ">=24 <25"}".`,
|
|
89
|
-
file: pkgJsonPath,
|
|
90
|
-
fixHint: `Add "engines": { "node": "${rootNodeRange ?? ">=24 <25"}" } to package.json.`,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
else if (rootNodeRange && pkgNodeRange !== rootNodeRange) {
|
|
94
|
-
violations.push({
|
|
95
|
-
ruleId: "PKG-HEALTH-01",
|
|
96
|
-
packageName,
|
|
97
|
-
severity: "warning",
|
|
98
|
-
message: `engines.node is "${pkgNodeRange}" but root is "${rootNodeRange}".`,
|
|
99
|
-
file: pkgJsonPath,
|
|
100
|
-
fixHint: `Align engines.node with root: "${rootNodeRange}".`,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
// CHECK 2: .github/workflows/ci.yml exists inside package
|
|
104
|
-
const ciWorkflowPath = path.join(pkgDir, ".github", "workflows", "ci.yml");
|
|
105
|
-
if (!fs.existsSync(ciWorkflowPath)) {
|
|
106
|
-
violations.push({
|
|
107
|
-
ruleId: "PKG-HEALTH-02",
|
|
108
|
-
packageName,
|
|
109
|
-
severity: "error",
|
|
110
|
-
message: "Missing .github/workflows/ci.yml — standalone extraction repo will have no CI.",
|
|
111
|
-
file: pkgDir,
|
|
112
|
-
fixHint: "Create .github/workflows/ci.yml inside the package directory with Node 24 setup.",
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
// CHECK 3: extract.config.yaml exists
|
|
116
|
-
const extractConfigPath = path.join(pkgDir, "extract.config.yaml");
|
|
117
|
-
if (!fs.existsSync(extractConfigPath)) {
|
|
118
|
-
violations.push({
|
|
119
|
-
ruleId: "PKG-HEALTH-03",
|
|
120
|
-
packageName,
|
|
121
|
-
severity: "warning",
|
|
122
|
-
message: "Missing extract.config.yaml — package cannot be extracted via repo-extract.",
|
|
123
|
-
file: pkgDir,
|
|
124
|
-
fixHint: "Create extract.config.yaml with git remote and extraction settings.",
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
// CHECK 4: devDependencies completeness — tools used in scripts must be declared
|
|
128
|
-
const scripts = (pkg["scripts"] ?? {});
|
|
129
|
-
const devDeps = (pkg["devDependencies"] ?? {});
|
|
130
|
-
const deps = (pkg["dependencies"] ?? {});
|
|
131
|
-
const allDeclared = { ...devDeps, ...deps };
|
|
132
|
-
const usedTools = extractToolNames(scripts);
|
|
133
|
-
for (const toolDep of usedTools) {
|
|
134
|
-
if (!(toolDep in allDeclared)) {
|
|
135
|
-
violations.push({
|
|
136
|
-
ruleId: "PKG-HEALTH-04",
|
|
137
|
-
packageName,
|
|
138
|
-
severity: "error",
|
|
139
|
-
message: `Script uses "${toolDep}" but it is not in devDependencies or dependencies. It relies on monorepo hoisting and will fail standalone.`,
|
|
140
|
-
file: pkgJsonPath,
|
|
141
|
-
fixHint: `Add "${toolDep}" to devDependencies in package.json.`,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
const errors = violations.filter((v) => v.severity === "error");
|
|
147
|
-
const warnings = violations.filter((v) => v.severity === "warning");
|
|
148
|
-
const passed = errors.length === 0;
|
|
149
|
-
if (context.outputFormat === "pretty") {
|
|
150
|
-
if (packagesChecked === 0) {
|
|
151
|
-
logger.info("forge.package.health: no published packages found.");
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
for (const v of violations) {
|
|
155
|
-
if (v.severity === "error") {
|
|
156
|
-
logger.error(` [${v.ruleId}] ${v.packageName}: ${v.message}`);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
logger.warn(` [${v.ruleId}] ${v.packageName}: ${v.message}`);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (passed && warnings.length === 0) {
|
|
163
|
-
logger.success(`forge.package.health: all ${packagesChecked} published package(s) healthy.`);
|
|
164
|
-
}
|
|
165
|
-
else if (passed) {
|
|
166
|
-
logger.warn(`forge.package.health: ${packagesChecked} package(s) checked, ${warnings.length} warning${warnings.length === 1 ? "" : "s"}.`);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
const parts = [];
|
|
170
|
-
parts.push(`${errors.length} error${errors.length === 1 ? "" : "s"}`);
|
|
171
|
-
if (warnings.length > 0)
|
|
172
|
-
parts.push(`${warnings.length} warning${warnings.length === 1 ? "" : "s"}`);
|
|
173
|
-
logger.error(`forge.package.health: ${parts.join(", ")} across ${packagesChecked} package(s).`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
data: {
|
|
179
|
-
command: "forge.package.health",
|
|
180
|
-
packagesChecked,
|
|
181
|
-
violations,
|
|
182
|
-
passed,
|
|
183
|
-
},
|
|
184
|
-
exitCode: passed ? 0 : 1,
|
|
185
|
-
summary: passed
|
|
186
|
-
? warnings.length > 0
|
|
187
|
-
? `All ${packagesChecked} package(s) passed with ${warnings.length} warning${warnings.length === 1 ? "" : "s"}.`
|
|
188
|
-
: `All ${packagesChecked} package(s) healthy.`
|
|
189
|
-
: `${errors.length} error${errors.length === 1 ? "" : "s"} found across ${packagesChecked} package(s).`,
|
|
190
|
-
nextSteps: errors.map((e) => ({
|
|
191
|
-
action: e.fixHint ?? e.message,
|
|
192
|
-
kind: "required",
|
|
193
|
-
})),
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=package-health.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package-health.js","sourceRoot":"","sources":["../../../../os/core/handlers/package-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { PinnedEntry, PinnedManifest, PinnedViolation } from "./pinned-types.ts";
|
|
2
|
-
/**
|
|
3
|
-
* Path to the pinned manifest relative to the repository root.
|
|
4
|
-
*/
|
|
5
|
-
export declare const PINNED_MANIFEST_PATH: string;
|
|
6
|
-
/**
|
|
7
|
-
* Error thrown when the manifest exists but is malformed (invalid YAML or missing required fields).
|
|
8
|
-
*/
|
|
9
|
-
export declare class PinnedManifestMalformedError extends Error {
|
|
10
|
-
constructor(message: string);
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Load and parse the pinned manifest from .forge/pinned.yaml.
|
|
14
|
-
* Returns null if the file does not exist (protection is opt-in).
|
|
15
|
-
* Throws PinnedManifestMalformedError if the file exists but is not valid YAML
|
|
16
|
-
* or does not contain a `pinned` array.
|
|
17
|
-
*/
|
|
18
|
-
export declare function loadPinnedManifest(repoRoot: string): Promise<PinnedManifest | null>;
|
|
19
|
-
/**
|
|
20
|
-
* Check if a relative file path matches a pinned entry.
|
|
21
|
-
*
|
|
22
|
-
* Path matching rules:
|
|
23
|
-
* - Exact match: if the entry path equals the file path, it matches.
|
|
24
|
-
* - Directory match: if the entry path ends with `/`, it matches any file
|
|
25
|
-
* that starts with the directory prefix (recursive).
|
|
26
|
-
*
|
|
27
|
-
* Returns the matching PinnedEntry or null if no match.
|
|
28
|
-
*/
|
|
29
|
-
export declare function isPinned(manifest: PinnedManifest, relPath: string): PinnedEntry | null;
|
|
30
|
-
/**
|
|
31
|
-
* Check if a move from sourceRel to destRel stays within the same pinned directory.
|
|
32
|
-
* This exempts intra-directory moves (e.g. rfc.archive moves
|
|
33
|
-
* docs/rfcs/rfc-0076.md → docs/rfcs/archive/implemented/rfc-0076.md)
|
|
34
|
-
* from the pinned pre-check, since the file hasn't left the protected directory.
|
|
35
|
-
*
|
|
36
|
-
* Only applies to directory-pinned entries (path ends with `/`).
|
|
37
|
-
* Returns true if the same pinned directory entry matches both source and dest.
|
|
38
|
-
*/
|
|
39
|
-
export declare function isIntraDirMove(manifest: PinnedManifest, sourceRel: string, destRel: string): boolean;
|
|
40
|
-
/**
|
|
41
|
-
* Batch-check multiple file paths against the manifest.
|
|
42
|
-
* Returns violations for files that match a pinned entry.
|
|
43
|
-
* The operation type is determined by the caller (delete, move, or modify).
|
|
44
|
-
*/
|
|
45
|
-
export declare function checkFilesForPinned(manifest: PinnedManifest, files: Array<{
|
|
46
|
-
relPath: string;
|
|
47
|
-
operation: PinnedViolation["operation"];
|
|
48
|
-
}>): PinnedViolation[];
|
|
49
|
-
//# sourceMappingURL=pinned-check.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pinned-check.d.ts","sourceRoot":"","sources":["../../../../os/core/handlers/pinned-check.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAc,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKlG;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAqC,CAAC;AAEvE;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAkEzF;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAgBtF;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAiBT;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;CAAE,CAAC,GACzE,eAAe,EAAE,CAgBnB"}
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
<MODULE_CONTRACT>
|
|
3
|
-
<purpose>Shared pre-check utility for the forge pinned-files protection system (RFC-0733).
|
|
4
|
-
Loads the pinned manifest from .forge/pinned.yaml and provides an isPinned lookup
|
|
5
|
-
that all archive handlers call before moving files. Manifest loading is cached
|
|
6
|
-
per invocation — loadPinnedManifest is called once and the result is reused.</purpose>
|
|
7
|
-
<non-goals>
|
|
8
|
-
<item>Does not implement validation logic (git diff parsing, violation detection) — use pinned-validate.ts.</item>
|
|
9
|
-
<item>Does not implement manifest creation — use pinned-init.ts.</item>
|
|
10
|
-
<item>Does not enforce overrides or audit logging — that is pinned-validate.ts responsibility.</item>
|
|
11
|
-
</non-goals>
|
|
12
|
-
</MODULE_CONTRACT>
|
|
13
|
-
<CHANGE_SUMMARY>
|
|
14
|
-
<item>RFC-0733: initial pinned-check utility — loadPinnedManifest, isPinned, checkFilesForPinned.</item>
|
|
15
|
-
<item>Gap fix: add isIntraDirMove to exempt moves within the same pinned directory (e.g. rfc.archive moves docs/rfcs/x.md → docs/rfcs/archive/implemented/x.md).</item>
|
|
16
|
-
</CHANGE_SUMMARY>
|
|
17
|
-
*/
|
|
18
|
-
import fs from "node:fs/promises";
|
|
19
|
-
import path from "node:path";
|
|
20
|
-
import { parse as parseYaml } from "yaml";
|
|
21
|
-
const PINNED_DIR = ".forge";
|
|
22
|
-
const PINNED_FILE = "pinned.yaml";
|
|
23
|
-
/**
|
|
24
|
-
* Path to the pinned manifest relative to the repository root.
|
|
25
|
-
*/
|
|
26
|
-
export const PINNED_MANIFEST_PATH = path.join(PINNED_DIR, PINNED_FILE);
|
|
27
|
-
/**
|
|
28
|
-
* Error thrown when the manifest exists but is malformed (invalid YAML or missing required fields).
|
|
29
|
-
*/
|
|
30
|
-
export class PinnedManifestMalformedError extends Error {
|
|
31
|
-
constructor(message) {
|
|
32
|
-
super(message);
|
|
33
|
-
this.name = "PinnedManifestMalformedError";
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Load and parse the pinned manifest from .forge/pinned.yaml.
|
|
38
|
-
* Returns null if the file does not exist (protection is opt-in).
|
|
39
|
-
* Throws PinnedManifestMalformedError if the file exists but is not valid YAML
|
|
40
|
-
* or does not contain a `pinned` array.
|
|
41
|
-
*/
|
|
42
|
-
export async function loadPinnedManifest(repoRoot) {
|
|
43
|
-
const manifestPath = path.join(repoRoot, PINNED_MANIFEST_PATH);
|
|
44
|
-
let content;
|
|
45
|
-
try {
|
|
46
|
-
content = await fs.readFile(manifestPath, "utf8");
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
let parsed;
|
|
52
|
-
try {
|
|
53
|
-
parsed = parseYaml(content);
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
throw new PinnedManifestMalformedError(`pinned.yaml is not valid YAML: ${String(err.message)}`);
|
|
57
|
-
}
|
|
58
|
-
if (!parsed || typeof parsed !== "object") {
|
|
59
|
-
throw new PinnedManifestMalformedError("pinned.yaml must contain a top-level object with a `pinned` array");
|
|
60
|
-
}
|
|
61
|
-
const obj = parsed;
|
|
62
|
-
if (!Array.isArray(obj["pinned"])) {
|
|
63
|
-
throw new PinnedManifestMalformedError("pinned.yaml is missing required `pinned` array field");
|
|
64
|
-
}
|
|
65
|
-
const entries = [];
|
|
66
|
-
for (const raw of obj["pinned"]) {
|
|
67
|
-
if (!raw || typeof raw !== "object") {
|
|
68
|
-
throw new PinnedManifestMalformedError("pinned.yaml: each entry must be an object with path, mode, and reason");
|
|
69
|
-
}
|
|
70
|
-
const entry = raw;
|
|
71
|
-
const entryPath = entry["path"];
|
|
72
|
-
const entryMode = entry["mode"];
|
|
73
|
-
const entryReason = entry["reason"];
|
|
74
|
-
if (typeof entryPath !== "string" || !entryPath) {
|
|
75
|
-
throw new PinnedManifestMalformedError("pinned.yaml: each entry must have a non-empty `path` string");
|
|
76
|
-
}
|
|
77
|
-
if (entryMode !== "protect" && entryMode !== "freeze") {
|
|
78
|
-
throw new PinnedManifestMalformedError(`pinned.yaml: entry "${entryPath}" has invalid mode "${String(entryMode)}" — must be "protect" or "freeze"`);
|
|
79
|
-
}
|
|
80
|
-
if (typeof entryReason !== "string" || !entryReason) {
|
|
81
|
-
throw new PinnedManifestMalformedError(`pinned.yaml: entry "${entryPath}" must have a non-empty reason string`);
|
|
82
|
-
}
|
|
83
|
-
entries.push({
|
|
84
|
-
path: entryPath,
|
|
85
|
-
mode: entryMode,
|
|
86
|
-
reason: entryReason,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return { pinned: entries };
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Check if a relative file path matches a pinned entry.
|
|
93
|
-
*
|
|
94
|
-
* Path matching rules:
|
|
95
|
-
* - Exact match: if the entry path equals the file path, it matches.
|
|
96
|
-
* - Directory match: if the entry path ends with `/`, it matches any file
|
|
97
|
-
* that starts with the directory prefix (recursive).
|
|
98
|
-
*
|
|
99
|
-
* Returns the matching PinnedEntry or null if no match.
|
|
100
|
-
*/
|
|
101
|
-
export function isPinned(manifest, relPath) {
|
|
102
|
-
const normalizedRelPath = relPath.replace(/\\/g, "/");
|
|
103
|
-
for (const entry of manifest.pinned) {
|
|
104
|
-
const normalizedEntryPath = entry.path.replace(/\\/g, "/");
|
|
105
|
-
if (normalizedEntryPath.endsWith("/")) {
|
|
106
|
-
if (normalizedRelPath.startsWith(normalizedEntryPath)) {
|
|
107
|
-
return entry;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
else if (normalizedRelPath === normalizedEntryPath) {
|
|
111
|
-
return entry;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Check if a move from sourceRel to destRel stays within the same pinned directory.
|
|
118
|
-
* This exempts intra-directory moves (e.g. rfc.archive moves
|
|
119
|
-
* docs/rfcs/rfc-0076.md → docs/rfcs/archive/implemented/rfc-0076.md)
|
|
120
|
-
* from the pinned pre-check, since the file hasn't left the protected directory.
|
|
121
|
-
*
|
|
122
|
-
* Only applies to directory-pinned entries (path ends with `/`).
|
|
123
|
-
* Returns true if the same pinned directory entry matches both source and dest.
|
|
124
|
-
*/
|
|
125
|
-
export function isIntraDirMove(manifest, sourceRel, destRel) {
|
|
126
|
-
const normalizedSource = sourceRel.replace(/\\/g, "/");
|
|
127
|
-
const normalizedDest = destRel.replace(/\\/g, "/");
|
|
128
|
-
for (const entry of manifest.pinned) {
|
|
129
|
-
const normalizedEntryPath = entry.path.replace(/\\/g, "/");
|
|
130
|
-
if (normalizedEntryPath.endsWith("/")) {
|
|
131
|
-
if (normalizedSource.startsWith(normalizedEntryPath) &&
|
|
132
|
-
normalizedDest.startsWith(normalizedEntryPath)) {
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Batch-check multiple file paths against the manifest.
|
|
141
|
-
* Returns violations for files that match a pinned entry.
|
|
142
|
-
* The operation type is determined by the caller (delete, move, or modify).
|
|
143
|
-
*/
|
|
144
|
-
export function checkFilesForPinned(manifest, files) {
|
|
145
|
-
const violations = [];
|
|
146
|
-
for (const { relPath, operation } of files) {
|
|
147
|
-
const entry = isPinned(manifest, relPath);
|
|
148
|
-
if (entry) {
|
|
149
|
-
violations.push({
|
|
150
|
-
path: relPath,
|
|
151
|
-
mode: entry.mode,
|
|
152
|
-
operation,
|
|
153
|
-
reason: entry.reason,
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return violations;
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=pinned-check.js.map
|