@sdd-method/sdd-cli 1.42.0 → 1.44.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/NOTICE +1 -1
- package/README.md +16 -70
- package/dist/author-bin.d.ts +3 -0
- package/dist/author-bin.d.ts.map +1 -0
- package/dist/author-bin.js +8 -0
- package/dist/author-bin.js.map +1 -0
- package/dist/author-program.d.ts +8 -0
- package/dist/author-program.d.ts.map +1 -0
- package/dist/author-program.js +99 -0
- package/dist/author-program.js.map +1 -0
- package/dist/cli.js +0 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-harness.d.ts +11 -8
- package/dist/lib/agent-harness.d.ts.map +1 -1
- package/dist/lib/agent-harness.js +17 -8
- package/dist/lib/agent-harness.js.map +1 -1
- package/dist/lib/briefing/index.d.ts +1 -1
- package/dist/lib/briefing/index.d.ts.map +1 -1
- package/dist/lib/briefing/index.js +1 -1
- package/dist/lib/briefing/index.js.map +1 -1
- package/dist/lib/briefing/render.d.ts +18 -1
- package/dist/lib/briefing/render.d.ts.map +1 -1
- package/dist/lib/briefing/render.js +17 -8
- package/dist/lib/briefing/render.js.map +1 -1
- package/dist/lib/catalogue/aggregate.js +6 -6
- package/dist/lib/catalogue/aggregate.js.map +1 -1
- package/dist/lib/catalogue/aggregation-manifest-loader.js +4 -4
- package/dist/lib/catalogue/aggregation-manifest-loader.js.map +1 -1
- package/dist/lib/catalogue/build.js +1 -1
- package/dist/lib/catalogue/build.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-components.js +1 -1
- package/dist/lib/catalogue/builders/c4-components.js.map +1 -1
- package/dist/lib/catalogue/builders/c4-containers.d.ts +1 -1
- package/dist/lib/catalogue/builders/c4-containers.js +1 -1
- package/dist/lib/catalogue/builders/c4-l1-candidates.js +1 -1
- package/dist/lib/catalogue/builders/c4-l1-candidates.js.map +1 -1
- package/dist/lib/catalogue/builders/container-dependency.d.ts +1 -1
- package/dist/lib/catalogue/builders/container-dependency.js +1 -1
- package/dist/lib/catalogue/builders/data-store-mapping.js +1 -1
- package/dist/lib/catalogue/builders/data-store-mapping.js.map +1 -1
- package/dist/lib/catalogue/builders/screen-tree.d.ts +1 -1
- package/dist/lib/catalogue/builders/screen-tree.js +1 -1
- package/dist/lib/catalogue/contract-path-resolution.d.ts +2 -2
- package/dist/lib/catalogue/contract-path-resolution.js +2 -2
- package/dist/lib/catalogue/dedupe-keyed-tables.d.ts +1 -1
- package/dist/lib/catalogue/dedupe-keyed-tables.js +0 -0
- package/dist/lib/catalogue/dedupe-keyed-tables.js.map +1 -1
- package/dist/lib/catalogue/freshness.d.ts +1 -0
- package/dist/lib/catalogue/freshness.d.ts.map +1 -1
- package/dist/lib/catalogue/freshness.js +4 -3
- package/dist/lib/catalogue/freshness.js.map +1 -1
- package/dist/lib/catalogue/scores-coverage.js +1 -1
- package/dist/lib/catalogue/scores-coverage.js.map +1 -1
- package/dist/lib/catalogue/service-contract-aliases-loader.d.ts +1 -1
- package/dist/lib/catalogue/service-contract-aliases-loader.js +1 -1
- package/dist/lib/ci-binding/index.d.ts.map +1 -1
- package/dist/lib/ci-binding/index.js +44 -5
- package/dist/lib/ci-binding/index.js.map +1 -1
- package/dist/lib/ci-binding/module.d.ts +10 -0
- package/dist/lib/ci-binding/module.d.ts.map +1 -1
- package/dist/lib/ci-binding/module.js +74 -2
- package/dist/lib/ci-binding/module.js.map +1 -1
- package/dist/lib/context-pull/index.d.ts +15 -9
- package/dist/lib/context-pull/index.d.ts.map +1 -1
- package/dist/lib/context-pull/index.js +79 -39
- package/dist/lib/context-pull/index.js.map +1 -1
- package/dist/lib/context-pull/retired-mcp-setup.d.ts +7 -0
- package/dist/lib/context-pull/retired-mcp-setup.d.ts.map +1 -0
- package/dist/lib/context-pull/retired-mcp-setup.js +7 -0
- package/dist/lib/context-pull/retired-mcp-setup.js.map +1 -0
- package/dist/lib/hooks-seed/entries.d.ts +41 -2
- package/dist/lib/hooks-seed/entries.d.ts.map +1 -1
- package/dist/lib/hooks-seed/entries.js +55 -4
- package/dist/lib/hooks-seed/entries.js.map +1 -1
- package/dist/lib/hooks-seed/index.d.ts +5 -9
- package/dist/lib/hooks-seed/index.d.ts.map +1 -1
- package/dist/lib/hooks-seed/index.js +4 -7
- package/dist/lib/hooks-seed/index.js.map +1 -1
- package/dist/lib/hooks-seed/merge.d.ts +7 -0
- package/dist/lib/hooks-seed/merge.d.ts.map +1 -1
- package/dist/lib/hooks-seed/merge.js +31 -0
- package/dist/lib/hooks-seed/merge.js.map +1 -1
- package/dist/lib/init/app.d.ts +0 -1
- package/dist/lib/init/app.d.ts.map +1 -1
- package/dist/lib/init/app.js +0 -7
- package/dist/lib/init/app.js.map +1 -1
- package/dist/lib/init/ci-workflow.js +26 -2
- package/dist/lib/init/ci-workflow.js.map +1 -1
- package/dist/lib/init/integration.d.ts +0 -1
- package/dist/lib/init/integration.d.ts.map +1 -1
- package/dist/lib/init/integration.js +0 -7
- package/dist/lib/init/integration.js.map +1 -1
- package/dist/lib/init/platform.d.ts +2 -10
- package/dist/lib/init/platform.d.ts.map +1 -1
- package/dist/lib/init/platform.js +7 -13
- package/dist/lib/init/platform.js.map +1 -1
- package/dist/lib/lock-file.d.ts +7 -0
- package/dist/lib/lock-file.d.ts.map +1 -1
- package/dist/lib/lock-file.js +10 -0
- package/dist/lib/lock-file.js.map +1 -1
- package/dist/lib/pack/builder.d.ts +14 -0
- package/dist/lib/pack/builder.d.ts.map +1 -1
- package/dist/lib/pack/builder.js +56 -4
- package/dist/lib/pack/builder.js.map +1 -1
- package/dist/lib/pack/index.d.ts +3 -1
- package/dist/lib/pack/index.d.ts.map +1 -1
- package/dist/lib/pack/index.js +1 -0
- package/dist/lib/pack/index.js.map +1 -1
- package/dist/lib/pack/publish-transform.js +1 -1
- package/dist/lib/pack/publish-transform.js.map +1 -1
- package/dist/lib/plan/index.d.ts.map +1 -1
- package/dist/lib/plan/index.js +4 -4
- package/dist/lib/plan/index.js.map +1 -1
- package/dist/lib/plan/read-sdd.js +1 -1
- package/dist/lib/plan/render-template.d.ts +8 -0
- package/dist/lib/plan/render-template.d.ts.map +1 -1
- package/dist/lib/plan/render-template.js +27 -3
- package/dist/lib/plan/render-template.js.map +1 -1
- package/dist/lib/sdd-index/repo-config.d.ts +1 -1
- package/dist/lib/sdd-index/repo-config.js +1 -1
- package/dist/lib/{mcp/reader.d.ts → sdd-reader.d.ts} +3 -5
- package/dist/lib/sdd-reader.d.ts.map +1 -0
- package/dist/lib/{mcp/reader.js → sdd-reader.js} +3 -5
- package/dist/lib/sdd-reader.js.map +1 -0
- package/dist/lib/snapshot/targets.js +1 -1
- package/dist/lib/snapshot/targets.js.map +1 -1
- package/dist/lib/sync/briefing-merge.d.ts +1 -1
- package/dist/lib/sync/briefing-merge.d.ts.map +1 -1
- package/dist/lib/sync/briefing-merge.js +50 -34
- package/dist/lib/sync/briefing-merge.js.map +1 -1
- package/dist/lib/sync/diff.js +1 -1
- package/dist/lib/sync/diff.js.map +1 -1
- package/dist/lib/sync/index.d.ts +14 -6
- package/dist/lib/sync/index.d.ts.map +1 -1
- package/dist/lib/sync/index.js +46 -72
- package/dist/lib/sync/index.js.map +1 -1
- package/dist/lib/sync/settings-merge.d.ts +29 -49
- package/dist/lib/sync/settings-merge.d.ts.map +1 -1
- package/dist/lib/sync/settings-merge.js +71 -163
- package/dist/lib/sync/settings-merge.js.map +1 -1
- package/dist/lib/validate/plan.d.ts +10 -1
- package/dist/lib/validate/plan.d.ts.map +1 -1
- package/dist/lib/validate/plan.js +6 -3
- package/dist/lib/validate/plan.js.map +1 -1
- package/dist/maintain-program.d.ts.map +1 -1
- package/dist/maintain-program.js +6 -3
- package/dist/maintain-program.js.map +1 -1
- package/dist/maintain-version.json +2 -2
- package/dist/verbs/catalogue-check.d.ts +10 -0
- package/dist/verbs/catalogue-check.d.ts.map +1 -0
- package/dist/verbs/catalogue-check.js +28 -0
- package/dist/verbs/catalogue-check.js.map +1 -0
- package/dist/verbs/catalogue.d.ts.map +1 -1
- package/dist/verbs/catalogue.js +2 -0
- package/dist/verbs/catalogue.js.map +1 -1
- package/dist/verbs/context.js +1 -1
- package/dist/verbs/context.js.map +1 -1
- package/dist/verbs/pack-build.d.ts.map +1 -1
- package/dist/verbs/pack-build.js +22 -0
- package/dist/verbs/pack-build.js.map +1 -1
- package/dist/verbs/plan.js +1 -1
- package/dist/verbs/plan.js.map +1 -1
- package/dist/verbs/sync.d.ts.map +1 -1
- package/dist/verbs/sync.js +17 -0
- package/dist/verbs/sync.js.map +1 -1
- package/dist/verbs/validate.d.ts.map +1 -1
- package/dist/verbs/validate.js +6 -1
- package/dist/verbs/validate.js.map +1 -1
- package/dist/verify-program.js +2 -2
- package/dist/verify-program.js.map +1 -1
- package/dist/verify-version.json +2 -2
- package/package.json +5 -13
- package/scripts/README.md +1 -1
- package/scripts/author-acceptance.mjs +170 -0
- package/scripts/author-version.json +4 -0
- package/scripts/build-persona-package.mjs +46 -13
- package/scripts/maintain-acceptance.mjs +3 -2
- package/scripts/maintain-version.json +2 -2
- package/scripts/publish-release.mjs +117 -0
- package/scripts/release-gate.mjs +19 -8
- package/scripts/verify-version.json +2 -2
- package/scripts/vitest-tmpdir.mjs +26 -0
- package/dist/lib/catalogue/advisory-container-type.d.ts +0 -13
- package/dist/lib/catalogue/advisory-container-type.d.ts.map +0 -1
- package/dist/lib/catalogue/advisory-container-type.js +0 -56
- package/dist/lib/catalogue/advisory-container-type.js.map +0 -1
- package/dist/lib/hooks-seed/copilot.d.ts +0 -93
- package/dist/lib/hooks-seed/copilot.d.ts.map +0 -1
- package/dist/lib/hooks-seed/copilot.js +0 -167
- package/dist/lib/hooks-seed/copilot.js.map +0 -1
- package/dist/lib/hooks-seed/lifecycle-mapping.d.ts +0 -12
- package/dist/lib/hooks-seed/lifecycle-mapping.d.ts.map +0 -1
- package/dist/lib/hooks-seed/lifecycle-mapping.js +0 -28
- package/dist/lib/hooks-seed/lifecycle-mapping.js.map +0 -1
- package/dist/lib/mcp/build-info.d.ts +0 -7
- package/dist/lib/mcp/build-info.d.ts.map +0 -1
- package/dist/lib/mcp/build-info.js +0 -10
- package/dist/lib/mcp/build-info.js.map +0 -1
- package/dist/lib/mcp/errors.d.ts +0 -23
- package/dist/lib/mcp/errors.d.ts.map +0 -1
- package/dist/lib/mcp/errors.js +0 -25
- package/dist/lib/mcp/errors.js.map +0 -1
- package/dist/lib/mcp/parse/frontmatter.d.ts +0 -22
- package/dist/lib/mcp/parse/frontmatter.d.ts.map +0 -1
- package/dist/lib/mcp/parse/frontmatter.js +0 -49
- package/dist/lib/mcp/parse/frontmatter.js.map +0 -1
- package/dist/lib/mcp/parse/gate-registry.d.ts +0 -78
- package/dist/lib/mcp/parse/gate-registry.d.ts.map +0 -1
- package/dist/lib/mcp/parse/gate-registry.js +0 -164
- package/dist/lib/mcp/parse/gate-registry.js.map +0 -1
- package/dist/lib/mcp/parse/paths.d.ts +0 -21
- package/dist/lib/mcp/parse/paths.d.ts.map +0 -1
- package/dist/lib/mcp/parse/paths.js +0 -84
- package/dist/lib/mcp/parse/paths.js.map +0 -1
- package/dist/lib/mcp/pin/errors.d.ts +0 -11
- package/dist/lib/mcp/pin/errors.d.ts.map +0 -1
- package/dist/lib/mcp/pin/errors.js +0 -32
- package/dist/lib/mcp/pin/errors.js.map +0 -1
- package/dist/lib/mcp/pin/index.d.ts +0 -18
- package/dist/lib/mcp/pin/index.d.ts.map +0 -1
- package/dist/lib/mcp/pin/index.js +0 -29
- package/dist/lib/mcp/pin/index.js.map +0 -1
- package/dist/lib/mcp/pin/read.d.ts +0 -24
- package/dist/lib/mcp/pin/read.d.ts.map +0 -1
- package/dist/lib/mcp/pin/read.js +0 -64
- package/dist/lib/mcp/pin/read.js.map +0 -1
- package/dist/lib/mcp/pin/resolve.d.ts +0 -12
- package/dist/lib/mcp/pin/resolve.d.ts.map +0 -1
- package/dist/lib/mcp/pin/resolve.js +0 -33
- package/dist/lib/mcp/pin/resolve.js.map +0 -1
- package/dist/lib/mcp/prompts/evaluate-cascade.d.ts +0 -14
- package/dist/lib/mcp/prompts/evaluate-cascade.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/evaluate-cascade.js +0 -147
- package/dist/lib/mcp/prompts/evaluate-cascade.js.map +0 -1
- package/dist/lib/mcp/prompts/index.d.ts +0 -9
- package/dist/lib/mcp/prompts/index.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/index.js +0 -23
- package/dist/lib/mcp/prompts/index.js.map +0 -1
- package/dist/lib/mcp/prompts/propose-adr.d.ts +0 -12
- package/dist/lib/mcp/prompts/propose-adr.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/propose-adr.js +0 -100
- package/dist/lib/mcp/prompts/propose-adr.js.map +0 -1
- package/dist/lib/mcp/prompts/review-data-model-change.d.ts +0 -10
- package/dist/lib/mcp/prompts/review-data-model-change.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/review-data-model-change.js +0 -134
- package/dist/lib/mcp/prompts/review-data-model-change.js.map +0 -1
- package/dist/lib/mcp/prompts/template-loader.d.ts +0 -29
- package/dist/lib/mcp/prompts/template-loader.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/template-loader.js +0 -44
- package/dist/lib/mcp/prompts/template-loader.js.map +0 -1
- package/dist/lib/mcp/prompts/types.d.ts +0 -17
- package/dist/lib/mcp/prompts/types.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/types.js +0 -10
- package/dist/lib/mcp/prompts/types.js.map +0 -1
- package/dist/lib/mcp/prompts/write-capability-spec.d.ts +0 -8
- package/dist/lib/mcp/prompts/write-capability-spec.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/write-capability-spec.js +0 -85
- package/dist/lib/mcp/prompts/write-capability-spec.js.map +0 -1
- package/dist/lib/mcp/prompts/write-feature-spec.d.ts +0 -10
- package/dist/lib/mcp/prompts/write-feature-spec.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/write-feature-spec.js +0 -94
- package/dist/lib/mcp/prompts/write-feature-spec.js.map +0 -1
- package/dist/lib/mcp/prompts/write-work-order.d.ts +0 -7
- package/dist/lib/mcp/prompts/write-work-order.d.ts.map +0 -1
- package/dist/lib/mcp/prompts/write-work-order.js +0 -69
- package/dist/lib/mcp/prompts/write-work-order.js.map +0 -1
- package/dist/lib/mcp/reader.d.ts.map +0 -1
- package/dist/lib/mcp/reader.js.map +0 -1
- package/dist/lib/mcp/resources/adrs.d.ts +0 -3
- package/dist/lib/mcp/resources/adrs.d.ts.map +0 -1
- package/dist/lib/mcp/resources/adrs.js +0 -97
- package/dist/lib/mcp/resources/adrs.js.map +0 -1
- package/dist/lib/mcp/resources/catalogue.d.ts +0 -19
- package/dist/lib/mcp/resources/catalogue.d.ts.map +0 -1
- package/dist/lib/mcp/resources/catalogue.js +0 -240
- package/dist/lib/mcp/resources/catalogue.js.map +0 -1
- package/dist/lib/mcp/resources/data-models.d.ts +0 -14
- package/dist/lib/mcp/resources/data-models.d.ts.map +0 -1
- package/dist/lib/mcp/resources/data-models.js +0 -81
- package/dist/lib/mcp/resources/data-models.js.map +0 -1
- package/dist/lib/mcp/resources/gates.d.ts +0 -9
- package/dist/lib/mcp/resources/gates.d.ts.map +0 -1
- package/dist/lib/mcp/resources/gates.js +0 -76
- package/dist/lib/mcp/resources/gates.js.map +0 -1
- package/dist/lib/mcp/resources/glossary.d.ts +0 -16
- package/dist/lib/mcp/resources/glossary.d.ts.map +0 -1
- package/dist/lib/mcp/resources/glossary.js +0 -87
- package/dist/lib/mcp/resources/glossary.js.map +0 -1
- package/dist/lib/mcp/resources/specs.d.ts +0 -23
- package/dist/lib/mcp/resources/specs.d.ts.map +0 -1
- package/dist/lib/mcp/resources/specs.js +0 -151
- package/dist/lib/mcp/resources/specs.js.map +0 -1
- package/dist/lib/mcp/resources/version.d.ts +0 -3
- package/dist/lib/mcp/resources/version.d.ts.map +0 -1
- package/dist/lib/mcp/resources/version.js +0 -45
- package/dist/lib/mcp/resources/version.js.map +0 -1
- package/dist/lib/mcp/server.d.ts +0 -29
- package/dist/lib/mcp/server.d.ts.map +0 -1
- package/dist/lib/mcp/server.js +0 -108
- package/dist/lib/mcp/server.js.map +0 -1
- package/dist/lib/mcp/tools/cascade-impact.d.ts +0 -22
- package/dist/lib/mcp/tools/cascade-impact.d.ts.map +0 -1
- package/dist/lib/mcp/tools/cascade-impact.js +0 -53
- package/dist/lib/mcp/tools/cascade-impact.js.map +0 -1
- package/dist/lib/mcp/tools/catalogue.d.ts +0 -16
- package/dist/lib/mcp/tools/catalogue.d.ts.map +0 -1
- package/dist/lib/mcp/tools/catalogue.js +0 -268
- package/dist/lib/mcp/tools/catalogue.js.map +0 -1
- package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts +0 -7
- package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-consumers-of-contract.js +0 -70
- package/dist/lib/mcp/tools/find-consumers-of-contract.js.map +0 -1
- package/dist/lib/mcp/tools/find-consumers.d.ts +0 -7
- package/dist/lib/mcp/tools/find-consumers.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-consumers.js +0 -52
- package/dist/lib/mcp/tools/find-consumers.js.map +0 -1
- package/dist/lib/mcp/tools/find-dependencies.d.ts +0 -8
- package/dist/lib/mcp/tools/find-dependencies.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-dependencies.js +0 -101
- package/dist/lib/mcp/tools/find-dependencies.js.map +0 -1
- package/dist/lib/mcp/tools/find-dependents.d.ts +0 -8
- package/dist/lib/mcp/tools/find-dependents.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-dependents.js +0 -89
- package/dist/lib/mcp/tools/find-dependents.js.map +0 -1
- package/dist/lib/mcp/tools/find-producers.d.ts +0 -8
- package/dist/lib/mcp/tools/find-producers.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-producers.js +0 -57
- package/dist/lib/mcp/tools/find-producers.js.map +0 -1
- package/dist/lib/mcp/tools/find-related-specs.d.ts +0 -9
- package/dist/lib/mcp/tools/find-related-specs.d.ts.map +0 -1
- package/dist/lib/mcp/tools/find-related-specs.js +0 -92
- package/dist/lib/mcp/tools/find-related-specs.js.map +0 -1
- package/dist/lib/mcp/tools/list-adrs.d.ts +0 -3
- package/dist/lib/mcp/tools/list-adrs.d.ts.map +0 -1
- package/dist/lib/mcp/tools/list-adrs.js +0 -73
- package/dist/lib/mcp/tools/list-adrs.js.map +0 -1
- package/dist/lib/mcp/tools/query-gate-status.d.ts +0 -3
- package/dist/lib/mcp/tools/query-gate-status.d.ts.map +0 -1
- package/dist/lib/mcp/tools/query-gate-status.js +0 -68
- package/dist/lib/mcp/tools/query-gate-status.js.map +0 -1
- package/dist/lib/mcp/tools/search-specs.d.ts +0 -12
- package/dist/lib/mcp/tools/search-specs.d.ts.map +0 -1
- package/dist/lib/mcp/tools/search-specs.js +0 -151
- package/dist/lib/mcp/tools/search-specs.js.map +0 -1
- package/dist/lib/mcp/workspace.d.ts +0 -31
- package/dist/lib/mcp/workspace.d.ts.map +0 -1
- package/dist/lib/mcp/workspace.js +0 -146
- package/dist/lib/mcp/workspace.js.map +0 -1
- package/dist/lib/mcp-seed/entries.d.ts +0 -32
- package/dist/lib/mcp-seed/entries.d.ts.map +0 -1
- package/dist/lib/mcp-seed/entries.js +0 -14
- package/dist/lib/mcp-seed/entries.js.map +0 -1
- package/dist/lib/mcp-seed/index.d.ts +0 -36
- package/dist/lib/mcp-seed/index.d.ts.map +0 -1
- package/dist/lib/mcp-seed/index.js +0 -28
- package/dist/lib/mcp-seed/index.js.map +0 -1
- package/dist/lib/mcp-seed/merge.d.ts +0 -34
- package/dist/lib/mcp-seed/merge.d.ts.map +0 -1
- package/dist/lib/mcp-seed/merge.js +0 -99
- package/dist/lib/mcp-seed/merge.js.map +0 -1
- package/dist/lib/mcp-seed/types.d.ts +0 -24
- package/dist/lib/mcp-seed/types.d.ts.map +0 -1
- package/dist/lib/mcp-seed/types.js +0 -13
- package/dist/lib/mcp-seed/types.js.map +0 -1
- package/dist/lib/sdd-index/cascade.d.ts +0 -46
- package/dist/lib/sdd-index/cascade.d.ts.map +0 -1
- package/dist/lib/sdd-index/cascade.js +0 -91
- package/dist/lib/sdd-index/cascade.js.map +0 -1
- package/dist/lib/sdd-index/contracts.d.ts +0 -29
- package/dist/lib/sdd-index/contracts.d.ts.map +0 -1
- package/dist/lib/sdd-index/contracts.js +0 -216
- package/dist/lib/sdd-index/contracts.js.map +0 -1
- package/dist/lib/sdd-index/data-model.d.ts +0 -13
- package/dist/lib/sdd-index/data-model.d.ts.map +0 -1
- package/dist/lib/sdd-index/data-model.js +0 -23
- package/dist/lib/sdd-index/data-model.js.map +0 -1
- package/dist/lib/sdd-index/execution-map.d.ts +0 -34
- package/dist/lib/sdd-index/execution-map.d.ts.map +0 -1
- package/dist/lib/sdd-index/execution-map.js +0 -105
- package/dist/lib/sdd-index/execution-map.js.map +0 -1
- package/dist/lib/sdd-index/graph.d.ts +0 -28
- package/dist/lib/sdd-index/graph.d.ts.map +0 -1
- package/dist/lib/sdd-index/graph.js +0 -122
- package/dist/lib/sdd-index/graph.js.map +0 -1
- package/dist/lib/sdd-index/index.d.ts +0 -29
- package/dist/lib/sdd-index/index.d.ts.map +0 -1
- package/dist/lib/sdd-index/index.js +0 -79
- package/dist/lib/sdd-index/index.js.map +0 -1
- package/dist/lib/sdd-index/watch.d.ts +0 -24
- package/dist/lib/sdd-index/watch.d.ts.map +0 -1
- package/dist/lib/sdd-index/watch.js +0 -112
- package/dist/lib/sdd-index/watch.js.map +0 -1
- package/dist/lib/sync/copilot-hooks-merge.d.ts +0 -36
- package/dist/lib/sync/copilot-hooks-merge.d.ts.map +0 -1
- package/dist/lib/sync/copilot-hooks-merge.js +0 -108
- package/dist/lib/sync/copilot-hooks-merge.js.map +0 -1
- package/dist/verbs/mcp.d.ts +0 -3
- package/dist/verbs/mcp.d.ts.map +0 -1
- package/dist/verbs/mcp.js +0 -22
- package/dist/verbs/mcp.js.map +0 -1
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Graph-builder pass. Consumes already-parsed ServiceNodes + ContractNodes
|
|
3
|
-
* and derives the cross-reference maps that dependency-graph tools query:
|
|
4
|
-
*
|
|
5
|
-
* - producers: aggregate/event → service ids that own it
|
|
6
|
-
* - consumers: aggregate/event → service ids that depend on it
|
|
7
|
-
* - pins: contract path → (service id → version string)
|
|
8
|
-
*
|
|
9
|
-
* Producer linkage from repo-config: a service that declares a contract
|
|
10
|
-
* and owns at least one of its produced aggregates is marked as a
|
|
11
|
-
* producer of that contract. Everyone else who declares the contract
|
|
12
|
-
* is a consumer. This is deliberately asymmetric — adopters tend not
|
|
13
|
-
* to flag producer-vs-consumer explicitly, so ownership of the
|
|
14
|
-
* aggregate is our tiebreaker. When no service owns the aggregates,
|
|
15
|
-
* all declaring services are consumers and no producer is recorded
|
|
16
|
-
* (surfaced via metadataIncomplete on the ContractNode).
|
|
17
|
-
*/
|
|
18
|
-
export function buildGraph(serviceList, contractList, _edges) {
|
|
19
|
-
const services = new Map();
|
|
20
|
-
for (const s of serviceList)
|
|
21
|
-
services.set(s.id, s);
|
|
22
|
-
const contractsByPath = new Map();
|
|
23
|
-
for (const c of contractList)
|
|
24
|
-
contractsByPath.set(c.path, c);
|
|
25
|
-
const producersAcc = new Map();
|
|
26
|
-
const consumersAcc = new Map();
|
|
27
|
-
const pinsAcc = new Map();
|
|
28
|
-
const contractProducers = new Map();
|
|
29
|
-
const contractConsumers = new Map();
|
|
30
|
-
const warnings = [];
|
|
31
|
-
for (const service of serviceList) {
|
|
32
|
-
const ownedAggregates = new Set(service.aggregates);
|
|
33
|
-
for (const ref of service.contracts) {
|
|
34
|
-
const contract = contractsByPath.get(ref.path);
|
|
35
|
-
// Version pin map.
|
|
36
|
-
if (ref.version) {
|
|
37
|
-
let inner = pinsAcc.get(ref.path);
|
|
38
|
-
if (!inner) {
|
|
39
|
-
inner = new Map();
|
|
40
|
-
pinsAcc.set(ref.path, inner);
|
|
41
|
-
}
|
|
42
|
-
inner.set(service.id, ref.version);
|
|
43
|
-
}
|
|
44
|
-
// Producer / consumer classification.
|
|
45
|
-
const producesAny = contract
|
|
46
|
-
? contract.producedAggregates.some((a) => ownedAggregates.has(a))
|
|
47
|
-
: ownedAggregates.size > 0 &&
|
|
48
|
-
service.aggregates.some((a) => ref.path.includes(a));
|
|
49
|
-
if (producesAny) {
|
|
50
|
-
addToSetMap(contractProducers, ref.path, service.id);
|
|
51
|
-
// Also index every produced event/aggregate → this service.
|
|
52
|
-
if (contract) {
|
|
53
|
-
for (const agg of contract.producedAggregates) {
|
|
54
|
-
addToSetMap(producersAcc, agg, service.id);
|
|
55
|
-
}
|
|
56
|
-
for (const ev of contract.producedEvents) {
|
|
57
|
-
addToSetMap(producersAcc, ev, service.id);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
for (const agg of service.aggregates) {
|
|
61
|
-
addToSetMap(producersAcc, agg, service.id);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
addToSetMap(contractConsumers, ref.path, service.id);
|
|
66
|
-
if (contract) {
|
|
67
|
-
for (const agg of contract.producedAggregates) {
|
|
68
|
-
addToSetMap(consumersAcc, agg, service.id);
|
|
69
|
-
}
|
|
70
|
-
for (const ev of contract.producedEvents) {
|
|
71
|
-
addToSetMap(consumersAcc, ev, service.id);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// Rewrite ContractNodes with their resolved producer/consumer lists.
|
|
78
|
-
const contracts = new Map();
|
|
79
|
-
for (const [path, node] of contractsByPath) {
|
|
80
|
-
const producers = Array.from(contractProducers.get(path) ?? []).sort();
|
|
81
|
-
const consumers = Array.from(contractConsumers.get(path) ?? []).sort();
|
|
82
|
-
if (producers.length === 0 && !node.metadataIncomplete) {
|
|
83
|
-
warnings.push(`graph: contract ${path} has consumers but no producer could be identified (aggregates ${JSON.stringify(node.producedAggregates)})`);
|
|
84
|
-
}
|
|
85
|
-
contracts.set(path, {
|
|
86
|
-
...node,
|
|
87
|
-
producers,
|
|
88
|
-
consumers,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
services,
|
|
93
|
-
contracts,
|
|
94
|
-
producers: freezeSetMap(producersAcc),
|
|
95
|
-
consumers: freezeSetMap(consumersAcc),
|
|
96
|
-
pins: freezeInnerMap(pinsAcc),
|
|
97
|
-
warnings,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
function addToSetMap(map, key, value) {
|
|
101
|
-
let inner = map.get(key);
|
|
102
|
-
if (!inner) {
|
|
103
|
-
inner = new Set();
|
|
104
|
-
map.set(key, inner);
|
|
105
|
-
}
|
|
106
|
-
inner.add(value);
|
|
107
|
-
}
|
|
108
|
-
function freezeSetMap(map) {
|
|
109
|
-
const out = new Map();
|
|
110
|
-
for (const [k, set] of map) {
|
|
111
|
-
out.set(k, Array.from(set).sort());
|
|
112
|
-
}
|
|
113
|
-
return out;
|
|
114
|
-
}
|
|
115
|
-
function freezeInnerMap(map) {
|
|
116
|
-
const out = new Map();
|
|
117
|
-
for (const [k, inner] of map) {
|
|
118
|
-
out.set(k, new Map(inner));
|
|
119
|
-
}
|
|
120
|
-
return out;
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=graph.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/lib/sdd-index/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public facade for the in-memory SDD index. Consumers call
|
|
3
|
-
* `getSddIndex(reader)` and get a fully-populated `SddIndex` with
|
|
4
|
-
* lazy-built, per-reader caching.
|
|
5
|
-
*
|
|
6
|
-
* Cache keying is by `sddRoot + pin` so a pinned read and a live read
|
|
7
|
-
* maintain separate indexes (scope doc §Pin semantics: pinned reads
|
|
8
|
-
* bypass live index; no drift detection).
|
|
9
|
-
*/
|
|
10
|
-
import type { SddIndex } from "./types.js";
|
|
11
|
-
import type { SddReader } from "../mcp/reader.js";
|
|
12
|
-
export type { SddIndex } from "./types.js";
|
|
13
|
-
export type { ContractKind, ContractNode, ContractRef, DependencyKind, ExecutionEdge, ServiceNode, StabilityClass, } from "./types.js";
|
|
14
|
-
export { REPO_CONFIG_DIR, parseRepoConfigFile, readAllRepoConfigs, } from "./repo-config.js";
|
|
15
|
-
export { EXECUTION_MAP_PATH, readExecutionMap } from "./execution-map.js";
|
|
16
|
-
export { readContract } from "./contracts.js";
|
|
17
|
-
export { buildGraph } from "./graph.js";
|
|
18
|
-
export declare function getSddIndex(reader: SddReader): SddIndex;
|
|
19
|
-
/**
|
|
20
|
-
* Drop any cached index for the given reader. Called by the file-watch
|
|
21
|
-
* invalidation hook (WS6) when the SDD changes under a live reader.
|
|
22
|
-
* Pinned-reader caches are never invalidated — the tree at that SHA is
|
|
23
|
-
* immutable by definition.
|
|
24
|
-
*/
|
|
25
|
-
export declare function invalidateSddIndex(reader: SddReader): void;
|
|
26
|
-
/** Exposed for tests; production callers should use getSddIndex(). */
|
|
27
|
-
export declare function clearSddIndexCache(): void;
|
|
28
|
-
export declare function buildSddIndex(reader: SddReader): SddIndex;
|
|
29
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/sdd-index/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAGV,QAAQ,EAET,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKxC,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAOvD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAI1D;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAuCzD"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Public facade for the in-memory SDD index. Consumers call
|
|
3
|
-
* `getSddIndex(reader)` and get a fully-populated `SddIndex` with
|
|
4
|
-
* lazy-built, per-reader caching.
|
|
5
|
-
*
|
|
6
|
-
* Cache keying is by `sddRoot + pin` so a pinned read and a live read
|
|
7
|
-
* maintain separate indexes (scope doc §Pin semantics: pinned reads
|
|
8
|
-
* bypass live index; no drift detection).
|
|
9
|
-
*/
|
|
10
|
-
import { readContract } from "./contracts.js";
|
|
11
|
-
import { readExecutionMap } from "./execution-map.js";
|
|
12
|
-
import { buildGraph } from "./graph.js";
|
|
13
|
-
import { readAllRepoConfigs } from "./repo-config.js";
|
|
14
|
-
export { REPO_CONFIG_DIR, parseRepoConfigFile, readAllRepoConfigs, } from "./repo-config.js";
|
|
15
|
-
export { EXECUTION_MAP_PATH, readExecutionMap } from "./execution-map.js";
|
|
16
|
-
export { readContract } from "./contracts.js";
|
|
17
|
-
export { buildGraph } from "./graph.js";
|
|
18
|
-
/** Internal cache: `${sddRoot}|${pin}` → index. */
|
|
19
|
-
const cache = new Map();
|
|
20
|
-
export function getSddIndex(reader) {
|
|
21
|
-
const key = `${reader.sddRoot}|${reader.pin}`;
|
|
22
|
-
const existing = cache.get(key);
|
|
23
|
-
if (existing)
|
|
24
|
-
return existing;
|
|
25
|
-
const fresh = buildSddIndex(reader);
|
|
26
|
-
cache.set(key, fresh);
|
|
27
|
-
return fresh;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Drop any cached index for the given reader. Called by the file-watch
|
|
31
|
-
* invalidation hook (WS6) when the SDD changes under a live reader.
|
|
32
|
-
* Pinned-reader caches are never invalidated — the tree at that SHA is
|
|
33
|
-
* immutable by definition.
|
|
34
|
-
*/
|
|
35
|
-
export function invalidateSddIndex(reader) {
|
|
36
|
-
if (reader.pin !== "HEAD")
|
|
37
|
-
return;
|
|
38
|
-
const key = `${reader.sddRoot}|${reader.pin}`;
|
|
39
|
-
cache.delete(key);
|
|
40
|
-
}
|
|
41
|
-
/** Exposed for tests; production callers should use getSddIndex(). */
|
|
42
|
-
export function clearSddIndexCache() {
|
|
43
|
-
cache.clear();
|
|
44
|
-
}
|
|
45
|
-
export function buildSddIndex(reader) {
|
|
46
|
-
const warnings = [];
|
|
47
|
-
const repoConfigResult = readAllRepoConfigs(reader);
|
|
48
|
-
warnings.push(...repoConfigResult.warnings);
|
|
49
|
-
const serviceList = Array.from(repoConfigResult.services);
|
|
50
|
-
// Build a unique set of contract refs across all services.
|
|
51
|
-
const contractKinds = new Map();
|
|
52
|
-
for (const svc of serviceList) {
|
|
53
|
-
for (const ref of svc.contracts) {
|
|
54
|
-
if (!contractKinds.has(ref.path))
|
|
55
|
-
contractKinds.set(ref.path, ref.kind);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const contractList = [];
|
|
59
|
-
for (const [path, kind] of contractKinds) {
|
|
60
|
-
contractList.push(readContract(reader, path, kind));
|
|
61
|
-
}
|
|
62
|
-
const mapResult = readExecutionMap(reader);
|
|
63
|
-
warnings.push(...mapResult.warnings);
|
|
64
|
-
const graph = buildGraph(serviceList, contractList, mapResult.edges);
|
|
65
|
-
warnings.push(...graph.warnings);
|
|
66
|
-
return {
|
|
67
|
-
sddRoot: reader.sddRoot,
|
|
68
|
-
pin: reader.pin,
|
|
69
|
-
builtAt: Date.now(),
|
|
70
|
-
services: graph.services,
|
|
71
|
-
contracts: graph.contracts,
|
|
72
|
-
producers: graph.producers,
|
|
73
|
-
consumers: graph.consumers,
|
|
74
|
-
pins: graph.pins,
|
|
75
|
-
executionEdges: mapResult.edges,
|
|
76
|
-
warnings,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/sdd-index/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Index invalidation watcher. Polls mtimes on the directories that
|
|
3
|
-
* feed the SDD index at a fixed cadence (30s by default — matches the
|
|
4
|
-
* scope doc §Process lifecycle ceiling). On any change, drops the
|
|
5
|
-
* cached index for that reader so the next query triggers a rebuild.
|
|
6
|
-
*
|
|
7
|
-
* Poll-only by design: the scope doc notes that file-watch on NFS/SMB
|
|
8
|
-
* is unreliable and treats the 30s fallback as the documented ceiling.
|
|
9
|
-
* An adopter on a watch-capable filesystem can swap in chokidar later
|
|
10
|
-
* without changing the public surface.
|
|
11
|
-
*/
|
|
12
|
-
import type { SddReader } from "../mcp/reader.js";
|
|
13
|
-
export interface IndexWatcherOptions {
|
|
14
|
-
/** Poll interval in milliseconds. Default 30_000. */
|
|
15
|
-
readonly intervalMs?: number;
|
|
16
|
-
/** Optional callback fired after each detected change. */
|
|
17
|
-
readonly onInvalidate?: () => void;
|
|
18
|
-
}
|
|
19
|
-
export interface IndexWatcher {
|
|
20
|
-
/** Stop polling and release timers. Safe to call multiple times. */
|
|
21
|
-
stop(): void;
|
|
22
|
-
}
|
|
23
|
-
export declare function startIndexWatcher(reader: SddReader, opts?: IndexWatcherOptions): IndexWatcher;
|
|
24
|
-
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/lib/sdd-index/watch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKlD,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,IAAI,IAAI,IAAI,CAAC;CACd;AAOD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,IAAI,GAAE,mBAAwB,GAC7B,YAAY,CA8Bd"}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Index invalidation watcher. Polls mtimes on the directories that
|
|
3
|
-
* feed the SDD index at a fixed cadence (30s by default — matches the
|
|
4
|
-
* scope doc §Process lifecycle ceiling). On any change, drops the
|
|
5
|
-
* cached index for that reader so the next query triggers a rebuild.
|
|
6
|
-
*
|
|
7
|
-
* Poll-only by design: the scope doc notes that file-watch on NFS/SMB
|
|
8
|
-
* is unreliable and treats the 30s fallback as the documented ceiling.
|
|
9
|
-
* An adopter on a watch-capable filesystem can swap in chokidar later
|
|
10
|
-
* without changing the public surface.
|
|
11
|
-
*/
|
|
12
|
-
import { readdirSync, statSync } from "node:fs";
|
|
13
|
-
import { join } from "node:path";
|
|
14
|
-
import { invalidateSddIndex } from "./index.js";
|
|
15
|
-
import { REPO_CONFIG_DIR } from "./repo-config.js";
|
|
16
|
-
import { EXECUTION_MAP_PATH } from "./execution-map.js";
|
|
17
|
-
export function startIndexWatcher(reader, opts = {}) {
|
|
18
|
-
if (reader.pin !== "HEAD") {
|
|
19
|
-
// Pinned readers point at an immutable tree; no invalidation possible.
|
|
20
|
-
return { stop() { } };
|
|
21
|
-
}
|
|
22
|
-
const intervalMs = opts.intervalMs ?? 30_000;
|
|
23
|
-
let stopped = false;
|
|
24
|
-
let snapshot = takeSnapshot(reader);
|
|
25
|
-
const timer = setInterval(() => {
|
|
26
|
-
if (stopped)
|
|
27
|
-
return;
|
|
28
|
-
const next = takeSnapshot(reader);
|
|
29
|
-
if (!snapshotsEqual(snapshot, next)) {
|
|
30
|
-
snapshot = next;
|
|
31
|
-
invalidateSddIndex(reader);
|
|
32
|
-
opts.onInvalidate?.();
|
|
33
|
-
}
|
|
34
|
-
}, intervalMs);
|
|
35
|
-
// Don't keep the process alive for polling alone.
|
|
36
|
-
if (typeof timer.unref === "function")
|
|
37
|
-
timer.unref();
|
|
38
|
-
return {
|
|
39
|
-
stop() {
|
|
40
|
-
if (stopped)
|
|
41
|
-
return;
|
|
42
|
-
stopped = true;
|
|
43
|
-
clearInterval(timer);
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
function takeSnapshot(reader) {
|
|
48
|
-
const repoConfigMtimes = new Map();
|
|
49
|
-
walkMtimes(reader.sddRoot, REPO_CONFIG_DIR, repoConfigMtimes);
|
|
50
|
-
const executionMapMtime = tryMtime(join(reader.sddRoot, EXECUTION_MAP_PATH));
|
|
51
|
-
return { repoConfigMtimes, executionMapMtime };
|
|
52
|
-
}
|
|
53
|
-
function walkMtimes(root, relDir, out) {
|
|
54
|
-
const absDir = join(root, relDir);
|
|
55
|
-
try {
|
|
56
|
-
const stat = statSync(absDir);
|
|
57
|
-
if (!stat.isDirectory())
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const stack = [absDir];
|
|
64
|
-
while (stack.length > 0) {
|
|
65
|
-
const dir = stack.pop();
|
|
66
|
-
if (!dir)
|
|
67
|
-
continue;
|
|
68
|
-
let entries;
|
|
69
|
-
try {
|
|
70
|
-
entries = readdirSync(dir);
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
for (const entry of entries) {
|
|
76
|
-
const full = join(dir, entry);
|
|
77
|
-
let s;
|
|
78
|
-
try {
|
|
79
|
-
s = statSync(full);
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (s.isDirectory()) {
|
|
85
|
-
stack.push(full);
|
|
86
|
-
}
|
|
87
|
-
else if (s.isFile()) {
|
|
88
|
-
out.set(full, s.mtimeMs);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
function tryMtime(path) {
|
|
94
|
-
try {
|
|
95
|
-
return statSync(path).mtimeMs;
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
return null;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
function snapshotsEqual(a, b) {
|
|
102
|
-
if (a.executionMapMtime !== b.executionMapMtime)
|
|
103
|
-
return false;
|
|
104
|
-
if (a.repoConfigMtimes.size !== b.repoConfigMtimes.size)
|
|
105
|
-
return false;
|
|
106
|
-
for (const [k, v] of a.repoConfigMtimes) {
|
|
107
|
-
if (b.repoConfigMtimes.get(k) !== v)
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
return true;
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=watch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/lib/sdd-index/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `.github/hooks/*.json` merge pass during `sdd-cli sync` when the
|
|
3
|
-
* adopter opted into `--agent-harness github-copilot-cli`.
|
|
4
|
-
*
|
|
5
|
-
* Method-managed event entries are sentinel-tagged via their
|
|
6
|
-
* `command.bash` / `command.powershell` strings. Adopter-added events
|
|
7
|
-
* in the same `events[]` array survive sync. Drift inside a method-
|
|
8
|
-
* managed event refuses without `--allow-overwrite`, symmetric to the
|
|
9
|
-
* Claude Code settings-merge path.
|
|
10
|
-
*/
|
|
11
|
-
import type { PortableLifecycleEventClass } from "../hooks-seed/lifecycle-mapping.js";
|
|
12
|
-
export interface CopilotHooksMergeOptions {
|
|
13
|
-
readonly targetRepo: string;
|
|
14
|
-
readonly allowOverwrite: boolean;
|
|
15
|
-
/**
|
|
16
|
-
* Detection only: compute drift and the would-refuse verdict, write
|
|
17
|
-
* nothing. Lets `runSync` gate before the payload is applied — see the
|
|
18
|
-
* matching flag on the Claude Code settings merge.
|
|
19
|
-
*/
|
|
20
|
-
readonly checkOnly?: boolean;
|
|
21
|
-
}
|
|
22
|
-
export interface CopilotHookFileResult {
|
|
23
|
-
readonly relPath: string;
|
|
24
|
-
readonly portableClass: PortableLifecycleEventClass;
|
|
25
|
-
readonly drifted: boolean;
|
|
26
|
-
readonly wrote: boolean;
|
|
27
|
-
}
|
|
28
|
-
export interface CopilotHooksMergeResult {
|
|
29
|
-
readonly files: readonly CopilotHookFileResult[];
|
|
30
|
-
/** Filenames where method-managed drift exists but --allow-overwrite was not passed. */
|
|
31
|
-
readonly driftedRefused: readonly string[];
|
|
32
|
-
/** Set when any file was refused. */
|
|
33
|
-
readonly refused: boolean;
|
|
34
|
-
}
|
|
35
|
-
export declare function syncMethodManagedCopilotHooks(opts: CopilotHooksMergeOptions): Promise<CopilotHooksMergeResult>;
|
|
36
|
-
//# sourceMappingURL=copilot-hooks-merge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-hooks-merge.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/copilot-hooks-merge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAaH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAEtF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,2BAA2B,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACjD,wFAAwF;IACxF,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAoFlC"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `.github/hooks/*.json` merge pass during `sdd-cli sync` when the
|
|
3
|
-
* adopter opted into `--agent-harness github-copilot-cli`.
|
|
4
|
-
*
|
|
5
|
-
* Method-managed event entries are sentinel-tagged via their
|
|
6
|
-
* `command.bash` / `command.powershell` strings. Adopter-added events
|
|
7
|
-
* in the same `events[]` array survive sync. Drift inside a method-
|
|
8
|
-
* managed event refuses without `--allow-overwrite`, symmetric to the
|
|
9
|
-
* Claude Code settings-merge path.
|
|
10
|
-
*/
|
|
11
|
-
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
12
|
-
import { dirname, join } from "node:path";
|
|
13
|
-
import { buildMethodManagedCopilotHooks, detectCopilotHookDrift, upsertCopilotHookFile, } from "../hooks-seed/copilot.js";
|
|
14
|
-
export async function syncMethodManagedCopilotHooks(opts) {
|
|
15
|
-
const surface = buildMethodManagedCopilotHooks();
|
|
16
|
-
const entries = Object.entries(surface);
|
|
17
|
-
// First pass: detect drift across all files. If any drifted file
|
|
18
|
-
// would be refused (no --allow-overwrite), we refuse the whole
|
|
19
|
-
// merge without writing — same all-or-nothing posture as the
|
|
20
|
-
// Claude Code settings merge.
|
|
21
|
-
const reads = [];
|
|
22
|
-
for (const [portableClass, { filePath, events }] of entries) {
|
|
23
|
-
const absPath = join(opts.targetRepo, filePath);
|
|
24
|
-
const existing = await readHookFile(absPath);
|
|
25
|
-
const drifted = detectCopilotHookDrift(existing, events);
|
|
26
|
-
reads.push({
|
|
27
|
-
portableClass,
|
|
28
|
-
relPath: filePath,
|
|
29
|
-
absPath,
|
|
30
|
-
existing,
|
|
31
|
-
owned: events,
|
|
32
|
-
drifted,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
const driftedFiles = reads.filter((r) => r.drifted).map((r) => r.relPath);
|
|
36
|
-
if (driftedFiles.length > 0 && !opts.allowOverwrite) {
|
|
37
|
-
return {
|
|
38
|
-
files: reads.map((r) => ({
|
|
39
|
-
relPath: r.relPath,
|
|
40
|
-
portableClass: r.portableClass,
|
|
41
|
-
drifted: r.drifted,
|
|
42
|
-
wrote: false,
|
|
43
|
-
})),
|
|
44
|
-
driftedRefused: driftedFiles,
|
|
45
|
-
refused: true,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
if (opts.checkOnly) {
|
|
49
|
-
return {
|
|
50
|
-
files: reads.map((r) => ({
|
|
51
|
-
relPath: r.relPath,
|
|
52
|
-
portableClass: r.portableClass,
|
|
53
|
-
drifted: r.drifted,
|
|
54
|
-
wrote: false,
|
|
55
|
-
})),
|
|
56
|
-
driftedRefused: [],
|
|
57
|
-
refused: false,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
// Second pass: upsert + write.
|
|
61
|
-
const fileResults = [];
|
|
62
|
-
for (const r of reads) {
|
|
63
|
-
const merge = upsertCopilotHookFile(r.existing, r.owned);
|
|
64
|
-
let wrote = false;
|
|
65
|
-
if (merge.changed || r.existing === null) {
|
|
66
|
-
await mkdir(dirname(r.absPath), { recursive: true });
|
|
67
|
-
await writeFile(r.absPath, JSON.stringify(merge.file, null, 2) + "\n", "utf8");
|
|
68
|
-
wrote = true;
|
|
69
|
-
}
|
|
70
|
-
fileResults.push({
|
|
71
|
-
relPath: r.relPath,
|
|
72
|
-
portableClass: r.portableClass,
|
|
73
|
-
drifted: r.drifted,
|
|
74
|
-
wrote,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
return { files: fileResults, driftedRefused: [], refused: false };
|
|
78
|
-
}
|
|
79
|
-
async function readHookFile(absPath) {
|
|
80
|
-
if (!(await fileExists(absPath)))
|
|
81
|
-
return null;
|
|
82
|
-
const raw = await readFile(absPath, "utf8");
|
|
83
|
-
if (raw.trim().length === 0)
|
|
84
|
-
return null;
|
|
85
|
-
try {
|
|
86
|
-
const parsed = JSON.parse(raw);
|
|
87
|
-
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
88
|
-
const obj = parsed;
|
|
89
|
-
if (Array.isArray(obj["events"])) {
|
|
90
|
-
return obj;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
/* fall through — treat malformed as empty so the next write reseats it */
|
|
96
|
-
}
|
|
97
|
-
return null;
|
|
98
|
-
}
|
|
99
|
-
async function fileExists(path) {
|
|
100
|
-
try {
|
|
101
|
-
await access(path);
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=copilot-hooks-merge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"copilot-hooks-merge.js","sourceRoot":"","sources":["../../../src/lib/sync/copilot-hooks-merge.ts"],"names":[],"mappings":"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"}
|
package/dist/verbs/mcp.d.ts
DELETED
package/dist/verbs/mcp.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/verbs/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0BlD"}
|
package/dist/verbs/mcp.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { runMcpServe } from "../lib/mcp/server.js";
|
|
2
|
-
export function registerMcp(program) {
|
|
3
|
-
const mcp = program
|
|
4
|
-
.command("mcp")
|
|
5
|
-
.description("Model Context Protocol (MCP) server management. See `sdd-cli mcp serve --help` for the stdio server.");
|
|
6
|
-
mcp
|
|
7
|
-
.command("serve")
|
|
8
|
-
.description("Start a local stdio MCP server exposing the SDD as resources and tools. Spawned by an MCP client (e.g. Claude Code) over stdio.")
|
|
9
|
-
.option("--sdd-repo <dir>", "explicit SDD repository path; overrides sibling discovery but is itself overridden by the SDD_REPO_PATH environment variable")
|
|
10
|
-
.action(async (opts) => {
|
|
11
|
-
try {
|
|
12
|
-
await runMcpServe({
|
|
13
|
-
...(opts.sddRepo ? { sddRepo: opts.sddRepo } : {}),
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
// Fatal errors are already surfaced on stderr by runMcpServe.
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=mcp.js.map
|
package/dist/verbs/mcp.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/verbs/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMnD,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CACV,sGAAsG,CACvG,CAAC;IAEJ,GAAG;SACA,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CACV,iIAAiI,CAClI;SACA,MAAM,CACL,kBAAkB,EAClB,8HAA8H,CAC/H;SACA,MAAM,CAAC,KAAK,EAAE,IAA8B,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,WAAW,CAAC;gBAChB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|