@sdd-method/sdd-cli 1.43.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 +13 -14
- package/dist/author-program.js +1 -1
- package/dist/author-program.js.map +1 -1
- package/dist/cli.js +0 -0
- package/dist/index.js +1 -1
- package/dist/index.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/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/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/hooks-seed/entries.d.ts +35 -11
- package/dist/lib/hooks-seed/entries.d.ts.map +1 -1
- package/dist/lib/hooks-seed/entries.js +43 -21
- package/dist/lib/hooks-seed/entries.js.map +1 -1
- package/dist/lib/hooks-seed/index.d.ts +2 -1
- package/dist/lib/hooks-seed/index.d.ts.map +1 -1
- package/dist/lib/hooks-seed/index.js +1 -1
- package/dist/lib/hooks-seed/index.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/platform.d.ts.map +1 -1
- package/dist/lib/init/platform.js +1 -0
- 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/snapshot/targets.js +1 -1
- package/dist/lib/snapshot/targets.js.map +1 -1
- package/dist/lib/sync/index.d.ts +11 -0
- package/dist/lib/sync/index.d.ts.map +1 -1
- package/dist/lib/sync/index.js +26 -2
- package/dist/lib/sync/index.js.map +1 -1
- package/dist/lib/sync/settings-merge.d.ts +3 -1
- package/dist/lib/sync/settings-merge.d.ts.map +1 -1
- package/dist/lib/sync/settings-merge.js +1 -1
- 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.js +1 -1
- package/dist/maintain-program.js.map +1 -1
- package/dist/maintain-version.json +2 -2
- 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 +1 -1
- package/dist/verify-program.js.map +1 -1
- package/dist/verify-version.json +2 -2
- package/package.json +2 -10
- package/scripts/README.md +1 -1
- package/scripts/author-version.json +2 -2
- 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 +18 -7
- package/scripts/verify-version.json +2 -2
- 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 +0 -37
- package/dist/lib/mcp/reader.d.ts.map +0 -1
- package/dist/lib/mcp/reader.js +0 -93
- 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,240 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Catalogue resources (sdd-mcp Phase 8).
|
|
3
|
-
*
|
|
4
|
-
* Exposes the canonical catalogue schema + metamodel + category taxonomy,
|
|
5
|
-
* and the consumer repo's built catalogue rows, as read-only MCP resources.
|
|
6
|
-
* Mirrors the resource pattern in resources/adrs.ts / resources/data-models.ts
|
|
7
|
-
* and reuses the existing catalogue subsystem (schema-loader, csv-reader)
|
|
8
|
-
* rather than re-parsing.
|
|
9
|
-
*
|
|
10
|
-
* URIs:
|
|
11
|
-
* sdd://catalogue/schema — canonical schema (vendored), parsed to JSON
|
|
12
|
-
* sdd://catalogue/metamodel — catalogue-metamodel.md (synced markdown)
|
|
13
|
-
* sdd://catalogue/category-taxonomy — product-category-taxonomy.md (synced markdown)
|
|
14
|
-
* sdd://catalogue — list of catalogue names present in catalogues/
|
|
15
|
-
* sdd://catalogue/{name} — rows of one catalogue from catalogues/{name}.csv
|
|
16
|
-
*/
|
|
17
|
-
import { readFile, readdir, stat } from "node:fs/promises";
|
|
18
|
-
import { join } from "node:path";
|
|
19
|
-
import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
20
|
-
import { McpEnvelopeError } from "../errors.js";
|
|
21
|
-
import { loadCanonicalSchema, findCatalogue, } from "../../catalogue/schema-loader.js";
|
|
22
|
-
import { readCatalogueCsv } from "../../catalogue/csv-reader.js";
|
|
23
|
-
// Candidate locations for the two synced markdown docs. The post-IA-move
|
|
24
|
-
// path is tried first; the pre-IA path is kept as a fallback so the
|
|
25
|
-
// resource resolves against repos synced from older baselines.
|
|
26
|
-
const METAMODEL_PATHS = [
|
|
27
|
-
["docs", "method", "methods", "guides", "catalogue-metamodel.md"],
|
|
28
|
-
["docs", "method", "methods", "catalogue-metamodel.md"],
|
|
29
|
-
];
|
|
30
|
-
const TAXONOMY_PATHS = [
|
|
31
|
-
["docs", "method", "methods", "standards", "product-category-taxonomy.md"],
|
|
32
|
-
["docs", "method", "methods", "product-category-taxonomy.md"],
|
|
33
|
-
];
|
|
34
|
-
async function isFile(path) {
|
|
35
|
-
try {
|
|
36
|
-
return (await stat(path)).isFile();
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
async function firstExisting(sddRoot, candidates) {
|
|
43
|
-
for (const parts of candidates) {
|
|
44
|
-
const p = join(sddRoot, ...parts);
|
|
45
|
-
if (await isFile(p))
|
|
46
|
-
return p;
|
|
47
|
-
}
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
/** Transform the loaded schema into the plan's JSON shape (catalogues keyed by name). */
|
|
51
|
-
function schemaToJson(schema) {
|
|
52
|
-
const catalogues = {};
|
|
53
|
-
for (const c of schema.catalogues) {
|
|
54
|
-
catalogues[c.name] = {
|
|
55
|
-
primary_key: c.primaryKey,
|
|
56
|
-
...(c.description !== undefined ? { description: c.description } : {}),
|
|
57
|
-
foreign_keys: c.foreignKeys.map((fk) => ({
|
|
58
|
-
column: fk.column,
|
|
59
|
-
references: fk.references,
|
|
60
|
-
nullable: fk.nullable,
|
|
61
|
-
external: fk.external,
|
|
62
|
-
})),
|
|
63
|
-
columns: c.columns.map((col) => ({
|
|
64
|
-
name: col.name,
|
|
65
|
-
type: col.type,
|
|
66
|
-
nullable: col.nullable,
|
|
67
|
-
...(col.description !== undefined
|
|
68
|
-
? { description: col.description }
|
|
69
|
-
: {}),
|
|
70
|
-
})),
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
schema_version: schema.schemaVersion,
|
|
75
|
-
schema_owner: schema.schemaOwner,
|
|
76
|
-
schema_status: schema.schemaStatus,
|
|
77
|
-
catalogues,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
async function listCatalogueNames(sddRoot) {
|
|
81
|
-
const dir = join(sddRoot, "catalogues");
|
|
82
|
-
try {
|
|
83
|
-
const entries = await readdir(dir);
|
|
84
|
-
return entries
|
|
85
|
-
.filter((f) => f.endsWith(".csv"))
|
|
86
|
-
.map((f) => f.slice(0, -".csv".length))
|
|
87
|
-
.sort();
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
return [];
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
export function register(server, sddRoot) {
|
|
94
|
-
// --- sdd://catalogue/schema (vendored canonical schema) ---
|
|
95
|
-
server.registerResource("catalogue-schema", "sdd://catalogue/schema", {
|
|
96
|
-
title: "Catalogue schema",
|
|
97
|
-
description: "The canonical catalogue-schema.yaml (vendored from sdd-method) parsed to JSON: every catalogue's primary key, columns, and foreign keys.",
|
|
98
|
-
mimeType: "application/json",
|
|
99
|
-
}, async (uri) => {
|
|
100
|
-
const schema = await loadCanonicalSchema();
|
|
101
|
-
return {
|
|
102
|
-
contents: [
|
|
103
|
-
{
|
|
104
|
-
uri: uri.href,
|
|
105
|
-
mimeType: "application/json",
|
|
106
|
-
text: JSON.stringify(schemaToJson(schema), null, 2),
|
|
107
|
-
},
|
|
108
|
-
],
|
|
109
|
-
};
|
|
110
|
-
});
|
|
111
|
-
// --- sdd://catalogue/metamodel (synced markdown) ---
|
|
112
|
-
server.registerResource("catalogue-metamodel", "sdd://catalogue/metamodel", {
|
|
113
|
-
title: "Catalogue metamodel",
|
|
114
|
-
description: "The catalogue metamodel narrative (catalogue-metamodel.md), describing the entity/edge model the schema encodes.",
|
|
115
|
-
mimeType: "text/markdown",
|
|
116
|
-
}, async (uri) => {
|
|
117
|
-
const path = await firstExisting(sddRoot, METAMODEL_PATHS);
|
|
118
|
-
if (path === null) {
|
|
119
|
-
throw new McpEnvelopeError({
|
|
120
|
-
code: "CATALOGUE_METAMODEL_NOT_FOUND",
|
|
121
|
-
message: `No catalogue-metamodel.md under SDD root ${sddRoot}.`,
|
|
122
|
-
remediation: "The metamodel is synced from sdd-method. Run `sdd-cli sync` to pull the current method baseline, which ships docs/method/methods/guides/catalogue-metamodel.md.",
|
|
123
|
-
context: {
|
|
124
|
-
sdd_root: sddRoot,
|
|
125
|
-
tried: METAMODEL_PATHS.map((p) => join(...p)),
|
|
126
|
-
},
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
130
|
-
contents: [
|
|
131
|
-
{ uri: uri.href, mimeType: "text/markdown", text: await readFile(path, "utf8") },
|
|
132
|
-
],
|
|
133
|
-
};
|
|
134
|
-
});
|
|
135
|
-
// --- sdd://catalogue/category-taxonomy (synced markdown) ---
|
|
136
|
-
server.registerResource("catalogue-category-taxonomy", "sdd://catalogue/category-taxonomy", {
|
|
137
|
-
title: "Product category taxonomy",
|
|
138
|
-
description: "The product-category-taxonomy.md: allowed category values and the L1-emission rules an agent reasons about when reading product rows.",
|
|
139
|
-
mimeType: "text/markdown",
|
|
140
|
-
}, async (uri) => {
|
|
141
|
-
const path = await firstExisting(sddRoot, TAXONOMY_PATHS);
|
|
142
|
-
if (path === null) {
|
|
143
|
-
throw new McpEnvelopeError({
|
|
144
|
-
code: "CATALOGUE_TAXONOMY_NOT_FOUND",
|
|
145
|
-
message: `No product-category-taxonomy.md under SDD root ${sddRoot}.`,
|
|
146
|
-
remediation: "The taxonomy is synced from sdd-method. Run `sdd-cli sync` to pull the current method baseline, which ships docs/method/methods/standards/product-category-taxonomy.md.",
|
|
147
|
-
context: {
|
|
148
|
-
sdd_root: sddRoot,
|
|
149
|
-
tried: TAXONOMY_PATHS.map((p) => join(...p)),
|
|
150
|
-
},
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
return {
|
|
154
|
-
contents: [
|
|
155
|
-
{ uri: uri.href, mimeType: "text/markdown", text: await readFile(path, "utf8") },
|
|
156
|
-
],
|
|
157
|
-
};
|
|
158
|
-
});
|
|
159
|
-
// --- sdd://catalogue (list of built catalogues) ---
|
|
160
|
-
server.registerResource("catalogue-list", "sdd://catalogue", {
|
|
161
|
-
title: "Catalogue list",
|
|
162
|
-
description: "The catalogue names present in the consumer repo's catalogues/ directory. Use to discover what is built without reading every file.",
|
|
163
|
-
mimeType: "application/json",
|
|
164
|
-
}, async (uri) => {
|
|
165
|
-
const names = await listCatalogueNames(sddRoot);
|
|
166
|
-
return {
|
|
167
|
-
contents: [
|
|
168
|
-
{
|
|
169
|
-
uri: uri.href,
|
|
170
|
-
mimeType: "application/json",
|
|
171
|
-
text: JSON.stringify({ row_count: names.length, catalogues: names }, null, 2),
|
|
172
|
-
},
|
|
173
|
-
],
|
|
174
|
-
};
|
|
175
|
-
});
|
|
176
|
-
// --- sdd://catalogue/{name} (rows of one catalogue) ---
|
|
177
|
-
server.registerResource("catalogue-rows", new ResourceTemplate("sdd://catalogue/{name}", {
|
|
178
|
-
list: async () => {
|
|
179
|
-
const names = await listCatalogueNames(sddRoot);
|
|
180
|
-
return {
|
|
181
|
-
resources: names.map((name) => ({
|
|
182
|
-
uri: `sdd://catalogue/${name}`,
|
|
183
|
-
name: `Catalogue: ${name}`,
|
|
184
|
-
mimeType: "application/json",
|
|
185
|
-
})),
|
|
186
|
-
};
|
|
187
|
-
},
|
|
188
|
-
}), {
|
|
189
|
-
title: "Catalogue rows",
|
|
190
|
-
description: "Rows of one built catalogue from catalogues/{name}.csv, with the schema_version they were built against.",
|
|
191
|
-
mimeType: "application/json",
|
|
192
|
-
}, async (uri, { name }) => {
|
|
193
|
-
if (typeof name !== "string") {
|
|
194
|
-
throw new McpEnvelopeError({
|
|
195
|
-
code: "CATALOGUE_URI_INVALID",
|
|
196
|
-
message: `Catalogue URI ${uri.href} is missing the {name} parameter.`,
|
|
197
|
-
remediation: "Use the shape sdd://catalogue/{name}. List available catalogues via sdd://catalogue.",
|
|
198
|
-
context: { uri: uri.href },
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
const schema = await loadCanonicalSchema();
|
|
202
|
-
try {
|
|
203
|
-
findCatalogue(schema, name);
|
|
204
|
-
}
|
|
205
|
-
catch {
|
|
206
|
-
throw new McpEnvelopeError({
|
|
207
|
-
code: "CATALOGUE_NOT_DECLARED",
|
|
208
|
-
message: `"${name}" is not a catalogue declared in the canonical schema (version ${schema.schemaVersion}).`,
|
|
209
|
-
remediation: "Query sdd://catalogue/schema for the declared catalogue names, or sdd://catalogue for the ones this repo has built.",
|
|
210
|
-
context: { name, schema_version: schema.schemaVersion },
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
const csvPath = join(sddRoot, "catalogues", `${name}.csv`);
|
|
214
|
-
if (!(await isFile(csvPath))) {
|
|
215
|
-
throw new McpEnvelopeError({
|
|
216
|
-
code: "CATALOGUE_NOT_BUILT",
|
|
217
|
-
message: `Catalogue "${name}" is declared but catalogues/${name}.csv does not exist under ${sddRoot}.`,
|
|
218
|
-
remediation: "Build catalogues for this repo (e.g. via the catalogue-integrity-gate skill or `sdd-cli catalogue build`) before querying their rows.",
|
|
219
|
-
context: { name, expected_path: csvPath, sdd_root: sddRoot },
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
const parsed = await readCatalogueCsv(csvPath);
|
|
223
|
-
return {
|
|
224
|
-
contents: [
|
|
225
|
-
{
|
|
226
|
-
uri: uri.href,
|
|
227
|
-
mimeType: "application/json",
|
|
228
|
-
text: JSON.stringify({
|
|
229
|
-
catalogue: name,
|
|
230
|
-
schema_version: schema.schemaVersion,
|
|
231
|
-
row_count: parsed.rows.length,
|
|
232
|
-
columns: parsed.columns,
|
|
233
|
-
rows: parsed.rows,
|
|
234
|
-
}, null, 2),
|
|
235
|
-
},
|
|
236
|
-
],
|
|
237
|
-
};
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
//# sourceMappingURL=catalogue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/catalogue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Domain data-model artefacts. In the method's conventions a data
|
|
3
|
-
* model lives at docs/domains/{domain}/architecture/data-model.mermaid.md.
|
|
4
|
-
* Absent in the canonical method repo; populated in adopter SDDs.
|
|
5
|
-
*/
|
|
6
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
|
-
export declare function register(server: McpServer, sddRoot: string): void;
|
|
8
|
-
interface DiscoveredDataModel {
|
|
9
|
-
readonly domain: string;
|
|
10
|
-
readonly path: string;
|
|
11
|
-
}
|
|
12
|
-
export declare function discoverDataModels(sddRoot: string): DiscoveredDataModel[];
|
|
13
|
-
export {};
|
|
14
|
-
//# sourceMappingURL=data-models.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-models.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/data-models.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,SAAS,EAEV,MAAM,yCAAyC,CAAC;AAIjD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAoDjE;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAkBzE"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Domain data-model artefacts. In the method's conventions a data
|
|
3
|
-
* model lives at docs/domains/{domain}/architecture/data-model.mermaid.md.
|
|
4
|
-
* Absent in the canonical method repo; populated in adopter SDDs.
|
|
5
|
-
*/
|
|
6
|
-
import { readFileSync, readdirSync } from "node:fs";
|
|
7
|
-
import { join } from "node:path";
|
|
8
|
-
import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
|
-
import { McpEnvelopeError } from "../errors.js";
|
|
10
|
-
import { safeIsDir, safeIsFile } from "../parse/paths.js";
|
|
11
|
-
export function register(server, sddRoot) {
|
|
12
|
-
server.registerResource("data-model", new ResourceTemplate("sdd://data-models/domain/{domain}", {
|
|
13
|
-
list: async () => {
|
|
14
|
-
const models = discoverDataModels(sddRoot);
|
|
15
|
-
return {
|
|
16
|
-
resources: models.map((m) => ({
|
|
17
|
-
uri: `sdd://data-models/domain/${m.domain}`,
|
|
18
|
-
name: `Data model: ${m.domain}`,
|
|
19
|
-
mimeType: "text/markdown",
|
|
20
|
-
})),
|
|
21
|
-
};
|
|
22
|
-
},
|
|
23
|
-
}), {
|
|
24
|
-
title: "Domain data model",
|
|
25
|
-
description: "Mermaid data model for a given domain, from docs/domains/{domain}/architecture/data-model.mermaid.md.",
|
|
26
|
-
mimeType: "text/markdown",
|
|
27
|
-
}, async (uri, { domain }) => {
|
|
28
|
-
if (typeof domain !== "string") {
|
|
29
|
-
throw new McpEnvelopeError({
|
|
30
|
-
code: "DATA_MODEL_URI_INVALID",
|
|
31
|
-
message: `Data-model URI ${uri.href} is missing the {domain} parameter.`,
|
|
32
|
-
remediation: "Use the shape sdd://data-models/domain/{domain}. List available domains via resources/list.",
|
|
33
|
-
context: { uri: uri.href },
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
const path = dataModelPath(sddRoot, domain);
|
|
37
|
-
if (!safeIsFile(path)) {
|
|
38
|
-
throw new McpEnvelopeError({
|
|
39
|
-
code: "DATA_MODEL_NOT_FOUND",
|
|
40
|
-
message: `No data model for domain ${domain} under SDD root ${sddRoot}.`,
|
|
41
|
-
remediation: "Domain data models are adopter-instantiated (ADR 0112) and may be absent in the canonical method repo. Query resources/list to see which data models this SDD exposes.",
|
|
42
|
-
context: { domain, expected_path: path, sdd_root: sddRoot },
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
return {
|
|
46
|
-
contents: [
|
|
47
|
-
{
|
|
48
|
-
uri: uri.href,
|
|
49
|
-
mimeType: "text/markdown",
|
|
50
|
-
text: readFileSync(path, "utf8"),
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
export function discoverDataModels(sddRoot) {
|
|
57
|
-
const out = [];
|
|
58
|
-
const domainsRoot = join(sddRoot, "docs", "domains");
|
|
59
|
-
if (!safeIsDir(domainsRoot))
|
|
60
|
-
return out;
|
|
61
|
-
let domains;
|
|
62
|
-
try {
|
|
63
|
-
domains = readdirSync(domainsRoot);
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
return out;
|
|
67
|
-
}
|
|
68
|
-
for (const domain of domains) {
|
|
69
|
-
if (domain.startsWith("_"))
|
|
70
|
-
continue;
|
|
71
|
-
const path = dataModelPath(sddRoot, domain);
|
|
72
|
-
if (safeIsFile(path)) {
|
|
73
|
-
out.push({ domain, path });
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return out;
|
|
77
|
-
}
|
|
78
|
-
function dataModelPath(sddRoot, domain) {
|
|
79
|
-
return join(sddRoot, "docs", "domains", domain, "architecture", "data-model.mermaid.md");
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=data-models.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-models.js","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/data-models.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Gate-registry resource. Each gate's YAML file is exposed under
|
|
3
|
-
* sdd://gates/{gate-name}. The payload includes schema metadata, the
|
|
4
|
-
* pass threshold, and all scored entries. Summary counts are computed
|
|
5
|
-
* on the fly for callers that want a quick overview.
|
|
6
|
-
*/
|
|
7
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
-
export declare function register(server: McpServer, sddRoot: string): void;
|
|
9
|
-
//# sourceMappingURL=gates.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/gates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA0EjE"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Gate-registry resource. Each gate's YAML file is exposed under
|
|
3
|
-
* sdd://gates/{gate-name}. The payload includes schema metadata, the
|
|
4
|
-
* pass threshold, and all scored entries. Summary counts are computed
|
|
5
|
-
* on the fly for callers that want a quick overview.
|
|
6
|
-
*/
|
|
7
|
-
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
|
-
import { McpEnvelopeError } from "../errors.js";
|
|
9
|
-
import { listGates, readGateRegistry, summariseGateEntries } from "../parse/gate-registry.js";
|
|
10
|
-
export function register(server, sddRoot) {
|
|
11
|
-
server.registerResource("gate", new ResourceTemplate("sdd://gates/{gate}", {
|
|
12
|
-
list: async () => {
|
|
13
|
-
const gates = listGates(sddRoot);
|
|
14
|
-
return {
|
|
15
|
-
resources: gates.map((gate) => ({
|
|
16
|
-
uri: `sdd://gates/${gate}`,
|
|
17
|
-
name: `Gate registry: ${gate}`,
|
|
18
|
-
mimeType: "application/json",
|
|
19
|
-
})),
|
|
20
|
-
};
|
|
21
|
-
},
|
|
22
|
-
}), {
|
|
23
|
-
title: "Gate registry",
|
|
24
|
-
description: "Structured view of orchestration/gate-registry/{gate}-scores.yaml. Includes schema version, pass threshold, per-artefact entries, and a small summary count.",
|
|
25
|
-
mimeType: "application/json",
|
|
26
|
-
}, async (uri, { gate }) => {
|
|
27
|
-
if (typeof gate !== "string") {
|
|
28
|
-
throw new McpEnvelopeError({
|
|
29
|
-
code: "GATE_URI_INVALID",
|
|
30
|
-
message: `Gate URI ${uri.href} is missing the {gate} parameter.`,
|
|
31
|
-
remediation: "Use the shape sdd://gates/{gate}. Call resources/list to see the gates this SDD exposes.",
|
|
32
|
-
context: { uri: uri.href },
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
const registry = readGateRegistry(sddRoot, gate);
|
|
36
|
-
if (!registry) {
|
|
37
|
-
throw new McpEnvelopeError({
|
|
38
|
-
code: "GATE_NOT_FOUND",
|
|
39
|
-
message: `No gate registry for ${gate} under SDD root ${sddRoot}.`,
|
|
40
|
-
remediation: "Check the spelling (e.g. adr-quality, contract-quality, intent-quality). resources/list lists the available gates.",
|
|
41
|
-
context: { gate, sdd_root: sddRoot },
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
// A malformed registry must never read as a clean, empty one — reported
|
|
45
|
-
// through the envelope contract rather than thrown raw at the caller.
|
|
46
|
-
if (registry.parseError !== null) {
|
|
47
|
-
throw new McpEnvelopeError({
|
|
48
|
-
code: "GATE_REGISTRY_UNPARSEABLE",
|
|
49
|
-
message: `Gate registry ${registry.path} is not parseable YAML: ${registry.parseError}`,
|
|
50
|
-
remediation: "Repair the registry. Two shapes account for every case seen so far: a container mixing mapping entries with sequence entries, and a duplicate key — the latter silently discards one of two judgments in parsers that tolerate it, so treat a duplicate as two contradictory verdicts, not a typo.",
|
|
51
|
-
context: { gate, path: registry.path, parse_error: registry.parseError },
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
const summary = summariseGateEntries(registry.entries);
|
|
55
|
-
const payload = {
|
|
56
|
-
gate,
|
|
57
|
-
schema_version: registry.schemaVersion,
|
|
58
|
-
description: registry.description,
|
|
59
|
-
pass_threshold: registry.passThreshold,
|
|
60
|
-
entry_container: registry.entryContainer,
|
|
61
|
-
summary,
|
|
62
|
-
entries: registry.entries,
|
|
63
|
-
path: registry.path,
|
|
64
|
-
};
|
|
65
|
-
return {
|
|
66
|
-
contents: [
|
|
67
|
-
{
|
|
68
|
-
uri: uri.href,
|
|
69
|
-
mimeType: "application/json",
|
|
70
|
-
text: JSON.stringify(payload, null, 2),
|
|
71
|
-
},
|
|
72
|
-
],
|
|
73
|
-
};
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=gates.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gates.js","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/gates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Glossary resource. In adopter SDDs the platform glossary lives at
|
|
3
|
-
* docs/platform/reference/platform-glossary.md and per-domain
|
|
4
|
-
* glossaries at docs/domains/{domain}/reference/{domain}-glossary.md.
|
|
5
|
-
* Canonical method repo has no populated glossary; this server returns
|
|
6
|
-
* a structured NOT_FOUND when queried against such a repo.
|
|
7
|
-
*/
|
|
8
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
|
-
export declare function register(server: McpServer, sddRoot: string): void;
|
|
10
|
-
interface DiscoveredGlossary {
|
|
11
|
-
readonly scope: string;
|
|
12
|
-
readonly path: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function discoverGlossaries(sddRoot: string): DiscoveredGlossary[];
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=glossary.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glossary.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/glossary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EACL,SAAS,EAEV,MAAM,yCAAyC,CAAC;AAIjD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAoDjE;AAED,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAkCxE"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Glossary resource. In adopter SDDs the platform glossary lives at
|
|
3
|
-
* docs/platform/reference/platform-glossary.md and per-domain
|
|
4
|
-
* glossaries at docs/domains/{domain}/reference/{domain}-glossary.md.
|
|
5
|
-
* Canonical method repo has no populated glossary; this server returns
|
|
6
|
-
* a structured NOT_FOUND when queried against such a repo.
|
|
7
|
-
*/
|
|
8
|
-
import { readFileSync, readdirSync } from "node:fs";
|
|
9
|
-
import { join } from "node:path";
|
|
10
|
-
import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
11
|
-
import { McpEnvelopeError } from "../errors.js";
|
|
12
|
-
import { safeIsDir, safeIsFile } from "../parse/paths.js";
|
|
13
|
-
export function register(server, sddRoot) {
|
|
14
|
-
server.registerResource("glossary", new ResourceTemplate("sdd://glossary/{scope}", {
|
|
15
|
-
list: async () => {
|
|
16
|
-
const entries = discoverGlossaries(sddRoot);
|
|
17
|
-
return {
|
|
18
|
-
resources: entries.map((e) => ({
|
|
19
|
-
uri: `sdd://glossary/${e.scope}`,
|
|
20
|
-
name: `Glossary: ${e.scope}`,
|
|
21
|
-
mimeType: "text/markdown",
|
|
22
|
-
})),
|
|
23
|
-
};
|
|
24
|
-
},
|
|
25
|
-
}), {
|
|
26
|
-
title: "Glossary",
|
|
27
|
-
description: "Glossary for the requested scope. Scope is `platform` or `<domain>` (e.g. `party`).",
|
|
28
|
-
mimeType: "text/markdown",
|
|
29
|
-
}, async (uri, { scope }) => {
|
|
30
|
-
if (typeof scope !== "string") {
|
|
31
|
-
throw new McpEnvelopeError({
|
|
32
|
-
code: "GLOSSARY_URI_INVALID",
|
|
33
|
-
message: `Glossary URI ${uri.href} is missing the {scope} parameter.`,
|
|
34
|
-
remediation: "Use the shape sdd://glossary/{scope}. Call resources/list to see the glossaries this SDD exposes.",
|
|
35
|
-
context: { uri: uri.href },
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
const path = glossaryPath(sddRoot, scope);
|
|
39
|
-
if (!path) {
|
|
40
|
-
throw new McpEnvelopeError({
|
|
41
|
-
code: "GLOSSARY_NOT_FOUND",
|
|
42
|
-
message: `No glossary for scope ${scope} under SDD root ${sddRoot}.`,
|
|
43
|
-
remediation: "Glossaries are adopter-instantiated. The canonical method repo does not ship a populated glossary; resources/list shows what this SDD exposes.",
|
|
44
|
-
context: { scope, sdd_root: sddRoot },
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
contents: [
|
|
49
|
-
{
|
|
50
|
-
uri: uri.href,
|
|
51
|
-
mimeType: "text/markdown",
|
|
52
|
-
text: readFileSync(path, "utf8"),
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
};
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
export function discoverGlossaries(sddRoot) {
|
|
59
|
-
const out = [];
|
|
60
|
-
const platformPath = join(sddRoot, "docs", "platform", "reference", "platform-glossary.md");
|
|
61
|
-
if (safeIsFile(platformPath)) {
|
|
62
|
-
out.push({ scope: "platform", path: platformPath });
|
|
63
|
-
}
|
|
64
|
-
const domainsRoot = join(sddRoot, "docs", "domains");
|
|
65
|
-
if (safeIsDir(domainsRoot)) {
|
|
66
|
-
let domains = [];
|
|
67
|
-
try {
|
|
68
|
-
domains = readdirSync(domainsRoot);
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
// ignore
|
|
72
|
-
}
|
|
73
|
-
for (const domain of domains) {
|
|
74
|
-
if (domain.startsWith("_"))
|
|
75
|
-
continue;
|
|
76
|
-
const domainGlossary = join(domainsRoot, domain, "reference", `${domain}-glossary.md`);
|
|
77
|
-
if (safeIsFile(domainGlossary)) {
|
|
78
|
-
out.push({ scope: domain, path: domainGlossary });
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return out;
|
|
83
|
-
}
|
|
84
|
-
function glossaryPath(sddRoot, scope) {
|
|
85
|
-
return discoverGlossaries(sddRoot).find((g) => g.scope === scope)?.path;
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=glossary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"glossary.js","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/glossary.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAEL,gBAAgB,GACjB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,OAAe;IACzD,MAAM,CAAC,gBAAgB,CACrB,UAAU,EACV,IAAI,gBAAgB,CAAC,wBAAwB,EAAE;QAC7C,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC5C,OAAO;gBACL,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,GAAG,EAAE,kBAAkB,CAAC,CAAC,KAAK,EAAE;oBAChC,IAAI,EAAE,aAAa,CAAC,CAAC,KAAK,EAAE;oBAC5B,QAAQ,EAAE,eAAe;iBAC1B,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;KACF,CAAC,EACF;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,qFAAqF;QACvF,QAAQ,EAAE,eAAe;KAC1B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,gBAAgB,CAAC;gBACzB,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,gBAAgB,GAAG,CAAC,IAAI,oCAAoC;gBACrE,WAAW,EACT,mGAAmG;gBACrG,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;aAC3B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gBAAgB,CAAC;gBACzB,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,yBAAyB,KAAK,mBAAmB,OAAO,GAAG;gBACpE,WAAW,EACT,gJAAgJ;gBAClJ,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,GAAG,CAAC,IAAI;oBACb,QAAQ,EAAE,eAAe;oBACzB,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;iBACjC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,GAAG,GAAyB,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,CACvB,OAAO,EACP,MAAM,EACN,UAAU,EACV,WAAW,EACX,sBAAsB,CACvB,CAAC;IACF,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACrD,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACrC,MAAM,cAAc,GAAG,IAAI,CACzB,WAAW,EACX,MAAM,EACN,WAAW,EACX,GAAG,MAAM,cAAc,CACxB,CAAC;YACF,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,KAAa;IAClD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC;AAC1E,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Capability and feature specs. The MCP plan references the URIs
|
|
3
|
-
* sdd://specs/capability/{domain}/{capability} and
|
|
4
|
-
* sdd://specs/feature/{domain}/{capability}/{feature}; the on-disk
|
|
5
|
-
* layout is adopter-driven (docs/domains/{d}/product/{capability}.md
|
|
6
|
-
* and similar). Phase 1 does a best-effort discovery under
|
|
7
|
-
* docs/domains/{d}/product/ and exposes found specs; absent specs
|
|
8
|
-
* surface as a structured NOT_FOUND with a pointer to the catalogue.
|
|
9
|
-
*/
|
|
10
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
11
|
-
export declare function register(server: McpServer, sddRoot: string): void;
|
|
12
|
-
interface CapabilitySpec {
|
|
13
|
-
readonly domain: string;
|
|
14
|
-
readonly capability: string;
|
|
15
|
-
readonly path: string;
|
|
16
|
-
}
|
|
17
|
-
export declare function discoverCapabilitySpecs(sddRoot: string): CapabilitySpec[];
|
|
18
|
-
interface FeatureSpec extends CapabilitySpec {
|
|
19
|
-
readonly feature: string;
|
|
20
|
-
}
|
|
21
|
-
export declare function discoverFeatureSpecs(sddRoot: string): FeatureSpec[];
|
|
22
|
-
export {};
|
|
23
|
-
//# sourceMappingURL=specs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/specs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EACL,SAAS,EAEV,MAAM,yCAAyC,CAAC;AAKjD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA+EjE;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAiBzE;AAED,UAAU,WAAY,SAAQ,cAAc;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAsBnE"}
|