@canonical/pragma-cli 0.29.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +128 -47
- package/dist/pragma +0 -0
- package/package.json +15 -13
- package/src/completions/constants.ts +7 -0
- package/src/completions/handleQuery.test.ts +32 -0
- package/src/completions/handleQuery.ts +20 -1
- package/src/completions/queryCompletions.test.ts +5 -0
- package/src/completions/queryCompletions.ts +17 -3
- package/src/completions/querySocket.test.ts +31 -0
- package/src/completions/querySocket.ts +36 -9
- package/src/config/defaultConfig.test.ts +33 -0
- package/src/config/defaultConfig.ts +59 -0
- package/src/config/defaults.json +17 -0
- package/src/config/findProjectConfigPath.test.ts +53 -0
- package/src/config/findProjectConfigPath.ts +36 -0
- package/src/config/index.ts +17 -2
- package/src/config/mergeConfigFileUpdate.ts +58 -0
- package/src/config/parseConfigValues.ts +217 -0
- package/src/config/readConfig.test.ts +104 -13
- package/src/config/readConfig.ts +12 -153
- package/src/config/readConfigLayers.test.ts +109 -0
- package/src/config/readConfigLayers.ts +118 -0
- package/src/config/resolveGlobalConfigPath.ts +13 -0
- package/src/config/resolveWriteConfigPath.test.ts +53 -0
- package/src/config/resolveWriteConfigPath.ts +31 -0
- package/src/config/types.ts +83 -1
- package/src/config/writeConfig.ts +25 -55
- package/src/constants.ts +3 -1
- package/src/domains/block/commands/list.ts +5 -90
- package/src/domains/block/commands/lookup.ts +8 -167
- package/src/domains/block/commands/sample.ts +2 -1
- package/src/domains/block/formatters/list.test.ts +3 -3
- package/src/domains/block/formatters/lookup.test.ts +5 -5
- package/src/domains/block/mcp/specs.ts +16 -196
- package/src/domains/block/orchestration/enrichBlocks.ts +6 -3
- package/src/domains/block/orchestration/resolveBlockLookup.ts +2 -1
- package/src/domains/block/stories.test.ts +28 -0
- package/src/domains/block/stories.ts +260 -0
- package/src/domains/config/commands/channel.test.ts +30 -3
- package/src/domains/config/commands/channel.ts +25 -8
- package/src/domains/config/commands/configScope.ts +46 -0
- package/src/domains/config/commands/framework.test.ts +32 -1
- package/src/domains/config/commands/framework.ts +26 -8
- package/src/domains/config/commands/show.ts +5 -45
- package/src/domains/config/commands/tier.test.ts +20 -2
- package/src/domains/config/commands/tier.ts +25 -8
- package/src/domains/config/commands/trace.test.ts +19 -2
- package/src/domains/config/commands/trace.ts +6 -3
- package/src/domains/config/formatters/channel.test.ts +20 -6
- package/src/domains/config/formatters/channel.ts +14 -11
- package/src/domains/config/formatters/framework.ts +14 -11
- package/src/domains/config/formatters/show.test.ts +27 -0
- package/src/domains/config/formatters/show.ts +27 -4
- package/src/domains/config/formatters/tier.test.ts +26 -10
- package/src/domains/config/formatters/tier.ts +19 -11
- package/src/domains/config/formatters/trace.ts +7 -7
- package/src/domains/config/mcp/specs.ts +33 -53
- package/src/domains/config/operations/show.test.ts +18 -0
- package/src/domains/config/operations/show.ts +7 -1
- package/src/domains/config/operations/types.ts +7 -0
- package/src/domains/config/operations/validateTier.test.ts +9 -0
- package/src/domains/config/operations/validateTier.ts +10 -2
- package/src/domains/config/stories.ts +42 -0
- package/src/domains/config/tasks/index.ts +1 -0
- package/src/domains/config/tasks/setChannel.ts +13 -28
- package/src/domains/config/tasks/setFramework.ts +11 -30
- package/src/domains/config/tasks/setTier.ts +10 -29
- package/src/domains/config/tasks/setTrace.ts +10 -28
- package/src/domains/config/tasks/writeConfigField.ts +41 -0
- package/src/domains/create/generatorPack/bundled.ts +49 -0
- package/src/domains/create/generatorPack/compileGeneratorPack.test.ts +159 -0
- package/src/domains/create/generatorPack/compileGeneratorPack.ts +312 -0
- package/src/domains/create/index.ts +13 -7
- package/src/domains/create/mcp/specs.ts +6 -161
- package/src/domains/create/renderGeneratorUi.test.ts +103 -0
- package/src/domains/create/renderGeneratorUi.ts +65 -0
- package/src/domains/doctor/formatters/doctor.test.ts +50 -2
- package/src/domains/doctor/formatters/doctor.ts +90 -38
- package/src/domains/doctor/operations/checks/checkConfigFile.ts +19 -5
- package/src/domains/doctor/operations/checks/checkMcpCommands.ts +133 -0
- package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +1 -1
- package/src/domains/doctor/operations/checks/checkPackageRefs.ts +32 -26
- package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +1 -1
- package/src/domains/doctor/operations/checks/index.ts +1 -0
- package/src/domains/doctor/operations/checks.test.ts +160 -7
- package/src/domains/doctor/operations/runChecks.test.ts +15 -6
- package/src/domains/doctor/operations/runChecks.ts +2 -0
- package/src/domains/doctor/operations/types.ts +23 -1
- package/src/domains/graph/commands/inspect.test.ts +2 -2
- package/src/domains/graph/commands/query.test.ts +5 -3
- package/src/domains/graph/formatters/inspect.ts +7 -7
- package/src/domains/graph/formatters/query.test.ts +87 -0
- package/src/domains/graph/formatters/query.ts +42 -5
- package/src/domains/graph/helpers/resolveUri.test.ts +50 -0
- package/src/domains/graph/helpers/resolveUri.ts +28 -21
- package/src/domains/graph/operations/inspectUri.test.ts +5 -5
- package/src/domains/graphql/commands/build.test.ts +5 -3
- package/src/domains/graphql/commands/build.ts +8 -16
- package/src/domains/graphql/commands/check.test.ts +5 -3
- package/src/domains/graphql/commands/check.ts +7 -13
- package/src/domains/graphql/commands/index.ts +1 -0
- package/src/domains/graphql/commands/serve.test.ts +46 -0
- package/src/domains/graphql/commands/serve.ts +141 -0
- package/src/domains/graphql/constants.ts +10 -0
- package/src/domains/graphql/helpers/gatherSources.test.ts +92 -0
- package/src/domains/graphql/helpers/gatherSources.ts +58 -0
- package/src/domains/graphql/helpers/index.ts +2 -0
- package/src/domains/graphql/helpers/parsePrefixes.test.ts +3 -3
- package/src/domains/graphql/helpers/parsePrefixes.ts +3 -3
- package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +9 -0
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +24 -3
- package/src/domains/graphql/helpers/routeGraphql.test.ts +43 -0
- package/src/domains/graphql/helpers/routeGraphql.ts +28 -0
- package/src/domains/graphql/index.ts +9 -6
- package/src/domains/graphql/operations/compileSchema.test.ts +23 -47
- package/src/domains/graphql/operations/compileSchema.ts +23 -25
- package/src/domains/graphql/operations/createSchemaServer.test.ts +50 -0
- package/src/domains/graphql/operations/createSchemaServer.ts +75 -0
- package/src/domains/graphql/operations/ensureSchemaArtifact.test.ts +167 -0
- package/src/domains/graphql/operations/ensureSchemaArtifact.ts +178 -0
- package/src/domains/graphql/operations/index.ts +10 -0
- package/src/domains/info/formatters/upgrade.test.ts +7 -4
- package/src/domains/info/formatters/upgrade.ts +3 -1
- package/src/domains/info/operations/collectEntityCounts.test.ts +156 -0
- package/src/domains/info/operations/collectEntityCounts.ts +123 -0
- package/src/domains/info/operations/collectInfo.test.ts +14 -3
- package/src/domains/info/operations/collectInfo.ts +12 -15
- package/src/domains/info/operations/index.ts +1 -0
- package/src/domains/info/types.ts +13 -0
- package/src/domains/llm/capabilities.test.ts +24 -4
- package/src/domains/llm/commands/capabilities.ts +12 -3
- package/src/domains/llm/commands/llm.ts +5 -1
- package/src/domains/llm/data/commandReference.ts +20 -11
- package/src/domains/llm/data/decisionTrees.ts +10 -5
- package/src/domains/llm/data/toolCatalog.ts +55 -18
- package/src/domains/llm/formatters/orientation.ts +5 -1
- package/src/domains/llm/llmCommand.test.ts +11 -3
- package/src/domains/llm/mcp/specs.ts +3 -4
- package/src/domains/llm/operations/collectContext.test.ts +64 -0
- package/src/domains/llm/operations/collectContext.ts +7 -17
- package/src/domains/modifier/commands/list.ts +5 -38
- package/src/domains/modifier/commands/lookup.ts +8 -79
- package/src/domains/modifier/commands/sample.ts +2 -1
- package/src/domains/modifier/mcp/specs.ts +15 -94
- package/src/domains/modifier/operations/lookup.ts +5 -3
- package/src/domains/modifier/orchestration/resolveModifierLookup.ts +2 -1
- package/src/domains/modifier/stories.test.ts +20 -0
- package/src/domains/modifier/stories.ts +86 -0
- package/src/domains/ontology/commands/list.test.ts +5 -3
- package/src/domains/ontology/commands/list.ts +5 -58
- package/src/domains/ontology/commands/show.test.ts +85 -9
- package/src/domains/ontology/commands/show.ts +6 -58
- package/src/domains/ontology/formatters/index.ts +1 -0
- package/src/domains/ontology/formatters/list.ts +37 -12
- package/src/domains/ontology/formatters/show.ts +361 -64
- package/src/domains/ontology/helpers/buildClassTree.ts +89 -0
- package/src/domains/ontology/helpers/completeClassNames.ts +43 -0
- package/src/domains/ontology/helpers/expandOntologyIris.ts +79 -0
- package/src/domains/ontology/helpers/index.ts +14 -0
- package/src/domains/ontology/helpers/queryClasses.ts +32 -16
- package/src/domains/ontology/helpers/queryProperties.ts +39 -6
- package/src/domains/ontology/helpers/queryTboxFacts.ts +160 -0
- package/src/domains/ontology/mcp/specs.ts +7 -84
- package/src/domains/ontology/operations/listOntologies.test.ts +80 -3
- package/src/domains/ontology/operations/listOntologies.ts +126 -30
- package/src/domains/ontology/operations/showOntology.test.ts +131 -12
- package/src/domains/ontology/operations/showOntology.ts +289 -7
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +4 -2
- package/src/domains/ontology/stories.test.ts +36 -0
- package/src/domains/ontology/stories.ts +153 -0
- package/src/domains/refs/operations/updateRefs.ts +2 -38
- package/src/domains/setup/commands/index.ts +1 -0
- package/src/domains/setup/commands/setup.ts +70 -0
- package/src/domains/setup/commands/skills.test.ts +6 -2
- package/src/domains/setup/commands/skills.ts +6 -2
- package/src/domains/setup/helpers/runSetupTask.test.ts +148 -150
- package/src/domains/setup/helpers/runSetupTask.ts +62 -70
- package/src/domains/setup/index.ts +7 -3
- package/src/domains/setup/operations/setupLsp.test.ts +3 -2
- package/src/domains/setup/operations/setupLsp.ts +7 -2
- package/src/domains/setup/operations/setupMcp.test.ts +6 -1
- package/src/domains/shared/bootStore.bareCore.test.ts +63 -0
- package/src/domains/shared/bootStore.test.ts +82 -0
- package/src/domains/shared/bootStore.ts +57 -18
- package/src/domains/shared/compactUri.test.ts +11 -0
- package/src/domains/shared/compactUri.ts +10 -5
- package/src/domains/shared/context.ts +2 -2
- package/src/domains/shared/contracts.ts +11 -0
- package/src/domains/shared/createInteractivePromptSession.test.ts +439 -0
- package/src/domains/shared/createInteractivePromptSession.ts +236 -0
- package/src/domains/shared/emptyErrorRecovery.test.ts +23 -26
- package/src/domains/shared/extractLocalName.test.ts +3 -3
- package/src/domains/shared/formatters.ts +23 -2
- package/src/domains/shared/listTiers.ts +40 -0
- package/src/domains/shared/loaders/bundledLoader.test.ts +248 -0
- package/src/domains/shared/loaders/bundledLoader.ts +158 -12
- package/src/domains/shared/loaders/gitLoader.ts +1 -2
- package/src/domains/shared/loaders/index.ts +4 -1
- package/src/domains/shared/loaders/localLoader.ts +2 -4
- package/src/domains/shared/loaders/readPackageDir.test.ts +58 -0
- package/src/domains/shared/loaders/readPackageDir.ts +82 -9
- package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +84 -0
- package/src/domains/shared/loaders/storyAssetsPlugin.ts +46 -0
- package/src/domains/shared/lookupMany.test.ts +135 -0
- package/src/domains/shared/lookupMany.ts +50 -2
- package/src/domains/shared/mergeAndParseRefs.test.ts +89 -0
- package/src/domains/shared/mergeAndParseRefs.ts +44 -0
- package/src/domains/shared/namespaces.ts +13 -5
- package/src/domains/shared/packages.ts +10 -17
- package/src/domains/shared/parseSampleCount.test.ts +47 -0
- package/src/domains/shared/parseSampleCount.ts +45 -0
- package/src/domains/shared/prefixes.test.ts +211 -0
- package/src/domains/shared/prefixes.ts +182 -15
- package/src/domains/shared/renderers.ts +5 -5
- package/src/domains/shared/resolveConfiguredGraphs.test.ts +27 -0
- package/src/domains/shared/resolveConfiguredGraphs.ts +41 -0
- package/src/domains/shared/resolveLookupExitCode.test.ts +48 -0
- package/src/domains/shared/resolveLookupExitCode.ts +42 -0
- package/src/domains/shared/runtime.ts +4 -63
- package/src/domains/shared/semanticPackage.test.ts +89 -0
- package/src/domains/shared/semanticPackage.ts +34 -3
- package/src/domains/shared/stories/compileLookupCommand.test.ts +145 -0
- package/src/domains/shared/stories/compileLookupCommand.ts +102 -0
- package/src/domains/shared/stories/compileLookupTool.test.ts +105 -0
- package/src/domains/shared/stories/compileLookupTool.ts +96 -0
- package/src/domains/shared/stories/compileReadCommand.test.ts +121 -0
- package/src/domains/shared/stories/compileReadCommand.ts +48 -0
- package/src/domains/shared/stories/compileReadTool.test.ts +64 -0
- package/src/domains/shared/stories/compileReadTool.ts +38 -0
- package/src/domains/shared/stories/condense.test.ts +18 -0
- package/src/domains/shared/stories/condense.ts +15 -0
- package/src/domains/shared/stories/index.ts +20 -0
- package/src/domains/shared/stories/normalizeNames.test.ts +20 -0
- package/src/domains/shared/stories/normalizeNames.ts +22 -0
- package/src/domains/shared/stories/pack/applyPackFilters.test.ts +151 -0
- package/src/domains/shared/stories/pack/applyPackFilters.ts +111 -0
- package/src/domains/shared/stories/pack/applyPackSearch.test.ts +57 -0
- package/src/domains/shared/stories/pack/applyPackSearch.ts +41 -0
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +81 -0
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +154 -0
- package/src/domains/shared/stories/pack/bundled/index.ts +23 -0
- package/src/domains/shared/stories/pack/bundled/standardPack.ts +164 -0
- package/src/domains/shared/stories/pack/bundled/tierPack.ts +50 -0
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +406 -0
- package/src/domains/shared/stories/pack/collectPackStories.ts +158 -0
- package/src/domains/shared/stories/pack/compilePackCommands.ts +50 -0
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +751 -0
- package/src/domains/shared/stories/pack/compilePackStories.ts +724 -0
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +55 -0
- package/src/domains/shared/stories/pack/index.ts +42 -0
- package/src/domains/shared/stories/pack/reservedVerbs.test.ts +213 -0
- package/src/domains/shared/stories/pack/reservedVerbs.ts +170 -0
- package/src/domains/shared/stories/pack/runSelectQuery.ts +31 -0
- package/src/domains/shared/stories/pack/standardParity.test.ts +381 -0
- package/src/domains/shared/stories/pack/types.ts +224 -0
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +742 -0
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +859 -0
- package/src/domains/shared/stories/projectCliParameters.test.ts +59 -0
- package/src/domains/shared/stories/projectCliParameters.ts +57 -0
- package/src/domains/shared/stories/projectToolParams.test.ts +50 -0
- package/src/domains/shared/stories/projectToolParams.ts +32 -0
- package/src/domains/shared/stories/requirePragmaContext.test.ts +23 -0
- package/src/domains/shared/stories/requirePragmaContext.ts +23 -0
- package/src/domains/shared/stories/resolveLookupDetailed.test.ts +57 -0
- package/src/domains/shared/stories/resolveLookupDetailed.ts +27 -0
- package/src/domains/shared/stories/types.ts +179 -0
- package/src/domains/shared/suggestions/expandGlob.ts +1 -0
- package/src/domains/shared/suggestions/suggestNames.ts +43 -10
- package/src/domains/shared/types/index.ts +5 -9
- package/src/domains/shared/types/ontology.ts +119 -24
- package/src/domains/shared/types/standard.ts +9 -52
- package/src/domains/skill/commands/index.ts +3 -1
- package/src/domains/skill/commands/list.test.ts +6 -2
- package/src/domains/skill/commands/list.ts +5 -63
- package/src/domains/skill/commands/lookup.test.ts +118 -0
- package/src/domains/skill/commands/lookup.ts +14 -0
- package/src/domains/skill/formatters/index.ts +1 -0
- package/src/domains/skill/formatters/lookup.test.ts +46 -0
- package/src/domains/skill/formatters/lookup.ts +57 -0
- package/src/domains/skill/helpers/resolveSkillSources.ts +0 -1
- package/src/domains/skill/index.ts +7 -3
- package/src/domains/skill/mcp/specs.ts +10 -29
- package/src/domains/skill/operations/discover.test.ts +61 -30
- package/src/domains/skill/operations/discover.ts +28 -37
- package/src/domains/skill/operations/index.ts +2 -1
- package/src/domains/skill/operations/list.test.ts +15 -7
- package/src/domains/skill/operations/lookup.test.ts +91 -0
- package/src/domains/skill/operations/lookup.ts +70 -0
- package/src/domains/skill/stories.test.ts +43 -0
- package/src/domains/skill/stories.ts +103 -0
- package/src/domains/skill/types.ts +8 -0
- package/src/domains/token/commands/lookup.test.ts +8 -0
- package/src/domains/token/commands/lookup.ts +12 -0
- package/src/domains/token/commands/sample.ts +2 -1
- package/src/domains/token/featureFlag.ts +17 -0
- package/src/domains/token/index.ts +5 -0
- package/src/domains/token/mcp/specs.ts +18 -2
- package/src/domains/token/orchestration/resolveTokenLookup.ts +2 -1
- package/src/domains/trace/commands/resolveTraceLimit.test.ts +31 -0
- package/src/domains/trace/commands/show.ts +30 -4
- package/src/domains/trace/tracePlugin.test.ts +1 -1
- package/src/index.ts +1 -13
- package/src/mcp/registerResources.test.ts +382 -74
- package/src/mcp/registerResources.ts +5 -348
- package/src/mcp/resources/buildGraphIndex.ts +167 -0
- package/src/mcp/resources/buildResourceList.test.ts +97 -0
- package/src/mcp/resources/buildResourceList.ts +176 -0
- package/src/mcp/resources/classifyEntity.test.ts +40 -0
- package/src/mcp/resources/classifyEntity.ts +27 -0
- package/src/mcp/resources/constants.ts +105 -0
- package/src/mcp/resources/displayPredicates.ts +62 -0
- package/src/mcp/resources/pickFirstValue.test.ts +29 -0
- package/src/mcp/resources/pickFirstValue.ts +26 -0
- package/src/mcp/resources/pickPrimaryType.test.ts +41 -0
- package/src/mcp/resources/pickPrimaryType.ts +26 -0
- package/src/mcp/resources/rankUriCompletions.test.ts +52 -0
- package/src/mcp/resources/rankUriCompletions.ts +64 -0
- package/src/mcp/resources/readEntity.ts +169 -0
- package/src/mcp/resources/registerResources.ts +126 -0
- package/src/mcp/resources/types.ts +128 -0
- package/src/mcp/tools/index.ts +22 -5
- package/src/mcp/tools/registerTools.test.ts +167 -34
- package/src/mcp/types.ts +4 -0
- package/src/pipeline/collectCommands.test.ts +151 -1
- package/src/pipeline/collectCommands.ts +35 -13
- package/src/pipeline/createProgram.test.ts +5 -1
- package/src/pipeline/createProgram.ts +2 -2
- package/src/pipeline/firstRun.test.ts +80 -0
- package/src/pipeline/firstRun.ts +99 -0
- package/src/pipeline/parseGlobalFlags.test.ts +102 -1
- package/src/pipeline/parseGlobalFlags.ts +98 -9
- package/src/pipeline/resolveCommandKind.test.ts +12 -0
- package/src/pipeline/resolveCommandKind.ts +4 -0
- package/src/pipeline/rootHelp.test.ts +87 -0
- package/src/pipeline/rootHelp.ts +265 -0
- package/src/pipeline/runCli.orchestration.test.ts +28 -12
- package/src/pipeline/runCli.test.ts +17 -4
- package/src/pipeline/runCli.ts +202 -25
- package/src/testing/cli.ts +30 -2
- package/src/testing/createTestMcpClient.ts +4 -1
- package/src/testing/dsFixtures.ts +21 -4
- package/src/testing/index.ts +7 -0
- package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +1207 -0
- package/src/testing/integration/cli-user-stories.test.ts +63 -0
- package/src/testing/integration/cross-binary-byte-equality.test.ts +129 -0
- package/src/testing/integration/edge-cases.test.ts +62 -50
- package/src/testing/integration/executor-execution.test.ts +103 -0
- package/src/testing/integration/executor-golden.test.ts +145 -0
- package/src/testing/integration/mcp-surface.test.ts +40 -15
- package/src/testing/integration/parity.test.ts +136 -82
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +71 -0
- package/src/testing/setupXdgIsolation.ts +26 -0
- package/src/testing/standardParityFixtures.ts +35 -0
- package/src/testing/store.ts +4 -4
- package/src/testing/storyFixtures.ts +63 -0
- package/src/domains/create/commands/component.test.ts +0 -166
- package/src/domains/create/commands/component.ts +0 -123
- package/src/domains/create/commands/index.ts +0 -3
- package/src/domains/create/commands/package.test.ts +0 -35
- package/src/domains/create/commands/package.ts +0 -21
- package/src/domains/create/generators.ts +0 -8
- package/src/domains/standard/commands/categories.test.ts +0 -70
- package/src/domains/standard/commands/categories.ts +0 -48
- package/src/domains/standard/commands/index.ts +0 -6
- package/src/domains/standard/commands/list.test.ts +0 -105
- package/src/domains/standard/commands/list.ts +0 -90
- package/src/domains/standard/commands/lookup.test.ts +0 -135
- package/src/domains/standard/commands/lookup.ts +0 -99
- package/src/domains/standard/commands/sample.ts +0 -57
- package/src/domains/standard/formatters/categories.test.ts +0 -44
- package/src/domains/standard/formatters/categories.ts +0 -38
- package/src/domains/standard/formatters/index.ts +0 -10
- package/src/domains/standard/formatters/list.test.ts +0 -169
- package/src/domains/standard/formatters/list.ts +0 -184
- package/src/domains/standard/formatters/lookup.test.ts +0 -95
- package/src/domains/standard/formatters/lookup.ts +0 -101
- package/src/domains/standard/formatters/sample.ts +0 -15
- package/src/domains/standard/formatters/types.ts +0 -31
- package/src/domains/standard/index.ts +0 -40
- package/src/domains/standard/mcp/index.ts +0 -2
- package/src/domains/standard/mcp/specs.ts +0 -244
- package/src/domains/standard/operations/categories.test.ts +0 -61
- package/src/domains/standard/operations/categories.ts +0 -38
- package/src/domains/standard/operations/index.ts +0 -6
- package/src/domains/standard/operations/list.test.ts +0 -75
- package/src/domains/standard/operations/list.ts +0 -64
- package/src/domains/standard/operations/lookup.test.ts +0 -58
- package/src/domains/standard/operations/lookup.ts +0 -151
- package/src/domains/standard/operations/sample.ts +0 -35
- package/src/domains/standard/orchestration/buildStandardFilters.ts +0 -11
- package/src/domains/standard/orchestration/index.ts +0 -4
- package/src/domains/standard/orchestration/resolveStandardList.ts +0 -45
- package/src/domains/standard/orchestration/resolveStandardLookup.ts +0 -32
- package/src/domains/standard/orchestration/standardEmptyError.test.ts +0 -33
- package/src/domains/standard/orchestration/standardEmptyError.ts +0 -29
- package/src/domains/standard/standardConfig.ts +0 -42
- package/src/domains/standard/types.ts +0 -15
- package/src/domains/tier/commands/index.ts +0 -3
- package/src/domains/tier/commands/list.test.ts +0 -67
- package/src/domains/tier/commands/list.ts +0 -59
- package/src/domains/tier/formatters/index.ts +0 -3
- package/src/domains/tier/formatters/list.test.ts +0 -33
- package/src/domains/tier/formatters/list.ts +0 -45
- package/src/domains/tier/index.ts +0 -17
- package/src/domains/tier/mcp/index.ts +0 -2
- package/src/domains/tier/mcp/specs.ts +0 -38
- package/src/domains/tier/operations/index.ts +0 -3
- package/src/domains/tier/operations/list.test.ts +0 -32
- package/src/domains/tier/operations/list.ts +0 -33
- package/src/pipeline/runInteractiveCommand.ts +0 -198
package/src/pipeline/runCli.ts
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
import type { GlobalFlags } from "@canonical/cli-core";
|
|
2
2
|
import { CommanderError } from "commander";
|
|
3
|
+
import { PROGRAM_NAME, VERSION } from "../constants.js";
|
|
4
|
+
import { commands as createCommands } from "../domains/create/index.js";
|
|
3
5
|
import { commands as graphqlCommands } from "../domains/graphql/index.js";
|
|
4
6
|
import { buildCapabilitiesCommand } from "../domains/llm/index.js";
|
|
5
7
|
import { commands as refsCommands } from "../domains/refs/index.js";
|
|
6
8
|
import { commands as setupCommands } from "../domains/setup/index.js";
|
|
7
9
|
import type { PragmaContext } from "../domains/shared/context.js";
|
|
10
|
+
import createInteractivePromptSession from "../domains/shared/createInteractivePromptSession.js";
|
|
8
11
|
import type { PragmaRuntime } from "../domains/shared/runtime.js";
|
|
9
12
|
import { bootPragma } from "../domains/shared/runtime.js";
|
|
10
13
|
import { commands as traceCommands } from "../domains/trace/index.js";
|
|
11
14
|
import { PragmaError } from "../error/index.js";
|
|
12
15
|
import collectCommands from "./collectCommands.js";
|
|
13
16
|
import createProgram from "./createProgram.js";
|
|
17
|
+
import ensureFirstRun from "./firstRun.js";
|
|
14
18
|
import mapExitCode from "./mapExitCode.js";
|
|
15
|
-
import parseGlobalFlags, {
|
|
19
|
+
import parseGlobalFlags, {
|
|
20
|
+
readRawFormat,
|
|
21
|
+
stripGlobalFlags,
|
|
22
|
+
} from "./parseGlobalFlags.js";
|
|
16
23
|
import {
|
|
17
24
|
renderErrorJson,
|
|
18
25
|
renderErrorLlm,
|
|
19
26
|
renderErrorPlain,
|
|
20
27
|
} from "./renderError.js";
|
|
21
28
|
import resolveCommandKind from "./resolveCommandKind.js";
|
|
22
|
-
import runInteractiveCommand from "./runInteractiveCommand.js";
|
|
23
29
|
|
|
24
30
|
function hasCommandArg(argv: readonly string[]): boolean {
|
|
25
31
|
const args = argv.slice(2);
|
|
@@ -67,8 +73,23 @@ async function handleCompletionsServer(): Promise<void> {
|
|
|
67
73
|
await startCompletionsServer();
|
|
68
74
|
}
|
|
69
75
|
|
|
70
|
-
async function handleDoctor(
|
|
76
|
+
async function handleDoctor(
|
|
77
|
+
argv: readonly string[],
|
|
78
|
+
globalFlags: GlobalFlags,
|
|
79
|
+
): Promise<void> {
|
|
71
80
|
const { doctorCommand } = await import("../domains/doctor/commands/index.js");
|
|
81
|
+
|
|
82
|
+
// `doctor` runs before Commander, so honour --help/-h here rather than
|
|
83
|
+
// executing the health check when the user only asked for usage.
|
|
84
|
+
const wantsHelp = argv
|
|
85
|
+
.slice(2)
|
|
86
|
+
.some((arg) => arg === "--help" || arg === "-h");
|
|
87
|
+
if (wantsHelp) {
|
|
88
|
+
const { formatVerbHelp } = await import("@canonical/cli-core");
|
|
89
|
+
process.stdout.write(`${formatVerbHelp(PROGRAM_NAME, doctorCommand)}\n`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
72
93
|
const ctx = { cwd: process.cwd(), globalFlags };
|
|
73
94
|
const result = await doctorCommand.execute({}, ctx);
|
|
74
95
|
if (result.tag === "output") {
|
|
@@ -79,12 +100,11 @@ async function handleDoctor(globalFlags: GlobalFlags): Promise<void> {
|
|
|
79
100
|
async function handleRootHelp(globalFlags: GlobalFlags): Promise<void> {
|
|
80
101
|
const stubCtx: PragmaContext = {
|
|
81
102
|
store: {} as PragmaRuntime["store"],
|
|
82
|
-
|
|
103
|
+
...(await resolveHelpConfig()),
|
|
83
104
|
cwd: process.cwd(),
|
|
84
|
-
packages: [],
|
|
85
105
|
dispose: () => {},
|
|
86
106
|
globalFlags,
|
|
87
|
-
|
|
107
|
+
promptSession: createInteractivePromptSession,
|
|
88
108
|
};
|
|
89
109
|
const commands = collectCommands(stubCtx);
|
|
90
110
|
const program = createProgram(commands, stubCtx);
|
|
@@ -92,7 +112,42 @@ async function handleRootHelp(globalFlags: GlobalFlags): Promise<void> {
|
|
|
92
112
|
try {
|
|
93
113
|
await program.parseAsync(["node", "pragma", "--help"]);
|
|
94
114
|
} catch (err) {
|
|
95
|
-
handleProgramError(err, globalFlags);
|
|
115
|
+
await handleProgramError(err, globalFlags, ["node", "pragma", "--help"]);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Resolve config and packages for root help without booting the store.
|
|
121
|
+
*
|
|
122
|
+
* Story-pack nouns come from config and package files, so bare
|
|
123
|
+
* `pragma --help` reads them via the filesystem loaders only. Help must
|
|
124
|
+
* never fail on a broken config — errors fall back to the empty stub and
|
|
125
|
+
* surface on the next real command instead.
|
|
126
|
+
*
|
|
127
|
+
* @note Impure — reads config and resolves packages from disk.
|
|
128
|
+
*/
|
|
129
|
+
async function resolveHelpConfig(): Promise<
|
|
130
|
+
Pick<PragmaRuntime, "config" | "packages">
|
|
131
|
+
> {
|
|
132
|
+
try {
|
|
133
|
+
const { readConfig } = await import("#config");
|
|
134
|
+
const config = readConfig(process.cwd());
|
|
135
|
+
const { resolveSemanticPackages } = await import(
|
|
136
|
+
"../domains/shared/semanticPackage.js"
|
|
137
|
+
);
|
|
138
|
+
const { createGitLoader, createLocalLoader } = await import(
|
|
139
|
+
"../domains/shared/loaders/index.js"
|
|
140
|
+
);
|
|
141
|
+
const { mergeAndParseRefs } = await import(
|
|
142
|
+
"../domains/shared/mergeAndParseRefs.js"
|
|
143
|
+
);
|
|
144
|
+
const packages = await resolveSemanticPackages(
|
|
145
|
+
mergeAndParseRefs(config.packages),
|
|
146
|
+
[createLocalLoader(), createGitLoader()],
|
|
147
|
+
);
|
|
148
|
+
return { config, packages };
|
|
149
|
+
} catch {
|
|
150
|
+
return { config: { tier: undefined, channel: "normal" }, packages: [] };
|
|
96
151
|
}
|
|
97
152
|
}
|
|
98
153
|
|
|
@@ -117,22 +172,60 @@ async function bootAndRun(
|
|
|
117
172
|
return;
|
|
118
173
|
}
|
|
119
174
|
|
|
175
|
+
await emitSchemaArtifact(runtime, globalFlags);
|
|
176
|
+
|
|
120
177
|
try {
|
|
121
178
|
const ctx: PragmaContext = {
|
|
122
179
|
...runtime,
|
|
123
180
|
globalFlags,
|
|
124
|
-
|
|
181
|
+
promptSession: createInteractivePromptSession,
|
|
125
182
|
};
|
|
126
183
|
const commands = collectCommands(ctx);
|
|
127
184
|
const program = createProgram(commands, ctx);
|
|
128
185
|
await program.parseAsync(stripGlobalFlags(argv));
|
|
129
186
|
} catch (err) {
|
|
130
|
-
handleProgramError(err, globalFlags);
|
|
187
|
+
await handleProgramError(err, globalFlags, argv);
|
|
131
188
|
} finally {
|
|
132
189
|
runtime.dispose();
|
|
133
190
|
}
|
|
134
191
|
}
|
|
135
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Keep the `schema.graphql` artifact current on every booted run.
|
|
195
|
+
*
|
|
196
|
+
* The freshness probe is a source hash against the artifact's header, so
|
|
197
|
+
* the common case costs one hash + one small read; compilation runs only
|
|
198
|
+
* when the resolved TTL sources actually changed (or on first use).
|
|
199
|
+
* Never fatal — a failed compile warns and the command proceeds.
|
|
200
|
+
*/
|
|
201
|
+
async function emitSchemaArtifact(
|
|
202
|
+
runtime: PragmaRuntime,
|
|
203
|
+
globalFlags: GlobalFlags,
|
|
204
|
+
): Promise<void> {
|
|
205
|
+
try {
|
|
206
|
+
const { ensureSchemaArtifact } = await import(
|
|
207
|
+
"../domains/graphql/operations/index.js"
|
|
208
|
+
);
|
|
209
|
+
const result = await ensureSchemaArtifact(runtime);
|
|
210
|
+
if (result.status === "written") {
|
|
211
|
+
process.stderr.write(
|
|
212
|
+
`Updated GraphQL schema artifact (sources changed): ${result.path}\n`,
|
|
213
|
+
);
|
|
214
|
+
} else if (result.status === "failed" && globalFlags.verbose) {
|
|
215
|
+
process.stderr.write(
|
|
216
|
+
`Warning: GraphQL schema compilation failed; ${result.path} not updated. Run \`pragma graphql check\` for diagnostics.\n`,
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
} catch (err) {
|
|
220
|
+
if (globalFlags.verbose) {
|
|
221
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
222
|
+
process.stderr.write(
|
|
223
|
+
`Warning: could not update GraphQL schema artifact: ${reason}\n`,
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
136
229
|
async function runStoreSkip(
|
|
137
230
|
argv: readonly string[],
|
|
138
231
|
globalFlags: GlobalFlags,
|
|
@@ -144,13 +237,14 @@ async function runStoreSkip(
|
|
|
144
237
|
packages: [],
|
|
145
238
|
dispose: () => {},
|
|
146
239
|
globalFlags,
|
|
147
|
-
|
|
240
|
+
promptSession: createInteractivePromptSession,
|
|
148
241
|
};
|
|
149
242
|
const commands = [
|
|
150
243
|
...setupCommands(),
|
|
151
244
|
...refsCommands(),
|
|
152
245
|
...traceCommands(),
|
|
153
246
|
...graphqlCommands(),
|
|
247
|
+
...createCommands(),
|
|
154
248
|
buildCapabilitiesCommand(),
|
|
155
249
|
];
|
|
156
250
|
const program = createProgram(commands, stubCtx);
|
|
@@ -158,11 +252,53 @@ async function runStoreSkip(
|
|
|
158
252
|
try {
|
|
159
253
|
await program.parseAsync(stripGlobalFlags(argv));
|
|
160
254
|
} catch (err) {
|
|
161
|
-
handleProgramError(err, globalFlags);
|
|
255
|
+
await handleProgramError(err, globalFlags, argv);
|
|
162
256
|
}
|
|
163
257
|
}
|
|
164
258
|
|
|
165
|
-
|
|
259
|
+
/**
|
|
260
|
+
* First non-flag token in argv — the command noun, if any.
|
|
261
|
+
*
|
|
262
|
+
* Global flags are stripped first so a flag *value* (e.g. the `json` in
|
|
263
|
+
* `--format json`) is never mistaken for the noun; otherwise
|
|
264
|
+
* `pragma --format json standard frobnicate` would scan `json` and fail to
|
|
265
|
+
* suggest `standard`'s verbs.
|
|
266
|
+
*/
|
|
267
|
+
function findNoun(argv: readonly string[]): string | undefined {
|
|
268
|
+
return stripGlobalFlags(argv)
|
|
269
|
+
.slice(2)
|
|
270
|
+
.find((arg) => !arg.startsWith("-"));
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* When an unknown command/verb is entered under a known noun, print that noun's
|
|
275
|
+
* valid verbs so the user can recover — "defer to the category that exists".
|
|
276
|
+
*
|
|
277
|
+
* @note Impure — writes the noun's verb list to stderr.
|
|
278
|
+
*/
|
|
279
|
+
async function suggestNounVerbs(argv: readonly string[]): Promise<void> {
|
|
280
|
+
const noun = findNoun(argv);
|
|
281
|
+
if (!noun) return;
|
|
282
|
+
const stubCtx: PragmaContext = {
|
|
283
|
+
store: {} as PragmaRuntime["store"],
|
|
284
|
+
...(await resolveHelpConfig()),
|
|
285
|
+
cwd: process.cwd(),
|
|
286
|
+
dispose: () => {},
|
|
287
|
+
globalFlags: { llm: false, autoLlm: false, format: "text", verbose: false },
|
|
288
|
+
promptSession: createInteractivePromptSession,
|
|
289
|
+
};
|
|
290
|
+
const commands = collectCommands(stubCtx);
|
|
291
|
+
const hasNoun = commands.some((cmd) => cmd.path.at(0) === noun);
|
|
292
|
+
if (!hasNoun) return;
|
|
293
|
+
const { formatNounHelp } = await import("@canonical/cli-core");
|
|
294
|
+
process.stderr.write(`\n${formatNounHelp(PROGRAM_NAME, noun, commands)}\n`);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
async function handleProgramError(
|
|
298
|
+
err: unknown,
|
|
299
|
+
globalFlags: GlobalFlags,
|
|
300
|
+
argv: readonly string[],
|
|
301
|
+
): Promise<void> {
|
|
166
302
|
if (err instanceof CommanderError) {
|
|
167
303
|
if (
|
|
168
304
|
err.code === "commander.helpDisplayed" ||
|
|
@@ -171,6 +307,9 @@ function handleProgramError(err: unknown, globalFlags: GlobalFlags): void {
|
|
|
171
307
|
process.exitCode = 0;
|
|
172
308
|
return;
|
|
173
309
|
}
|
|
310
|
+
if (err.code === "commander.unknownCommand") {
|
|
311
|
+
await suggestNounVerbs(argv);
|
|
312
|
+
}
|
|
174
313
|
process.exitCode = err.exitCode;
|
|
175
314
|
return;
|
|
176
315
|
}
|
|
@@ -206,26 +345,64 @@ function handleProgramError(err: unknown, globalFlags: GlobalFlags): void {
|
|
|
206
345
|
*/
|
|
207
346
|
export default async function runCli(argv: readonly string[]): Promise<void> {
|
|
208
347
|
const globalFlags = parseGlobalFlags(argv);
|
|
209
|
-
|
|
348
|
+
|
|
349
|
+
const commandKind = resolveCommandKind(argv);
|
|
350
|
+
|
|
351
|
+
// Completion queries must be handled before the root-help shortcut:
|
|
352
|
+
// `pragma --completions` (empty first-Tab partial) has no non-flag command
|
|
353
|
+
// arg, so it would otherwise fall through to root help and dump the help
|
|
354
|
+
// banner into the shell's completion buffer.
|
|
355
|
+
if (commandKind.kind === "completions-client") {
|
|
356
|
+
return handleCompletionsClient(commandKind.partial);
|
|
357
|
+
}
|
|
358
|
+
if (commandKind.kind === "completions-server") {
|
|
359
|
+
return handleCompletionsServer();
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// First-run onboarding: when the global config does not exist yet, greet on
|
|
363
|
+
// stderr and create it with defaults. After the completions early-exits so
|
|
364
|
+
// the note can never leak into a shell completion buffer; stderr-only so
|
|
365
|
+
// stdout (command output, --format json, MCP stdio) stays untouched; and
|
|
366
|
+
// failure-tolerant — onboarding must never break an invocation.
|
|
367
|
+
await ensureFirstRun();
|
|
368
|
+
|
|
369
|
+
// `--version`/`-V` is a global flag: print the version and exit regardless
|
|
370
|
+
// of where it appears (root or after a command/verb), so `block list -V`
|
|
371
|
+
// behaves like the root `pragma --version` instead of erroring.
|
|
372
|
+
if (argv.slice(2).some((arg) => arg === "--version" || arg === "-V")) {
|
|
373
|
+
process.stdout.write(`${VERSION}\n`);
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
const explicitHelp = argv
|
|
210
378
|
.slice(2)
|
|
211
|
-
.some(
|
|
212
|
-
(arg) =>
|
|
213
|
-
arg === "--help" || arg === "-h" || arg === "--version" || arg === "-V",
|
|
214
|
-
);
|
|
379
|
+
.some((arg) => arg === "--help" || arg === "-h");
|
|
215
380
|
|
|
216
|
-
|
|
217
|
-
|
|
381
|
+
// Reject an unknown --format value early (completion queries and --version
|
|
382
|
+
// are handled above, so neither errors). Skip when the user asked for help —
|
|
383
|
+
// it should print regardless of a bad --format. Only text/json are supported.
|
|
384
|
+
const rawFormat = readRawFormat(argv);
|
|
385
|
+
if (
|
|
386
|
+
!explicitHelp &&
|
|
387
|
+
rawFormat !== undefined &&
|
|
388
|
+
rawFormat !== "text" &&
|
|
389
|
+
rawFormat !== "json"
|
|
390
|
+
) {
|
|
391
|
+
const error = PragmaError.invalidInput("format", rawFormat, {
|
|
392
|
+
validOptions: ["text", "json"],
|
|
393
|
+
});
|
|
394
|
+
process.stderr.write(`${renderError(error, globalFlags)}\n`);
|
|
395
|
+
process.exitCode = mapExitCode(error.code);
|
|
396
|
+
return;
|
|
218
397
|
}
|
|
219
398
|
|
|
220
|
-
|
|
399
|
+
if (!hasCommandArg(argv) && !explicitHelp) {
|
|
400
|
+
return handleRootHelp(globalFlags);
|
|
401
|
+
}
|
|
221
402
|
|
|
222
403
|
switch (commandKind.kind) {
|
|
223
|
-
case "completions-client":
|
|
224
|
-
return handleCompletionsClient(commandKind.partial);
|
|
225
|
-
case "completions-server":
|
|
226
|
-
return handleCompletionsServer();
|
|
227
404
|
case "doctor":
|
|
228
|
-
return handleDoctor(globalFlags);
|
|
405
|
+
return handleDoctor(argv, globalFlags);
|
|
229
406
|
case "store-skip":
|
|
230
407
|
return runStoreSkip(argv, globalFlags);
|
|
231
408
|
case "store-required":
|
package/src/testing/cli.ts
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { spawnSync } from "node:child_process";
|
|
9
|
-
import {
|
|
9
|
+
import { mkdirSync, mkdtempSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { tmpdir } from "node:os";
|
|
11
|
+
import { join, resolve } from "node:path";
|
|
10
12
|
|
|
11
13
|
/** Captured output from a CLI subprocess invocation. */
|
|
12
14
|
interface CommandResult {
|
|
@@ -15,21 +17,47 @@ interface CommandResult {
|
|
|
15
17
|
exitCode: number;
|
|
16
18
|
}
|
|
17
19
|
|
|
20
|
+
/**
|
|
21
|
+
* XDG home whose global config already exists, shared by all default
|
|
22
|
+
* invocations in this file's worker.
|
|
23
|
+
*
|
|
24
|
+
* Subprocesses would otherwise trigger the first-run greeting in whichever
|
|
25
|
+
* test happens to spawn first (the setup-file XDG is fresh per file), making
|
|
26
|
+
* stderr assertions ordering-dependent. Seeding the config keeps every
|
|
27
|
+
* default `runCommand` past first-run; tests that WANT the first-run path
|
|
28
|
+
* pass their own fresh XDG via `env`.
|
|
29
|
+
*/
|
|
30
|
+
let seededXdg: string | undefined;
|
|
31
|
+
function seededXdgHome(): string {
|
|
32
|
+
if (!seededXdg) {
|
|
33
|
+
seededXdg = mkdtempSync(join(tmpdir(), "pragma-cli-xdg-"));
|
|
34
|
+
mkdirSync(join(seededXdg, "pragma"), { recursive: true });
|
|
35
|
+
writeFileSync(join(seededXdg, "pragma", "config.json"), "{}\n");
|
|
36
|
+
}
|
|
37
|
+
return seededXdg;
|
|
38
|
+
}
|
|
39
|
+
|
|
18
40
|
/**
|
|
19
41
|
* Spawn the pragma CLI binary synchronously and capture its output.
|
|
20
42
|
*
|
|
21
43
|
* @param args - CLI arguments to pass after the binary path.
|
|
22
44
|
* @param cwd - Optional working directory for the subprocess.
|
|
45
|
+
* @param env - Extra environment overrides (merged over the seeded default).
|
|
23
46
|
* @returns Captured stdout, stderr, and exit code.
|
|
24
47
|
*
|
|
25
48
|
* @note Impure
|
|
26
49
|
*/
|
|
27
|
-
function runCommand(
|
|
50
|
+
function runCommand(
|
|
51
|
+
args: string[],
|
|
52
|
+
cwd?: string,
|
|
53
|
+
env?: Record<string, string>,
|
|
54
|
+
): CommandResult {
|
|
28
55
|
const binPath = resolve(import.meta.dirname, "../bin.ts");
|
|
29
56
|
const result = spawnSync("bun", ["run", binPath, ...args], {
|
|
30
57
|
cwd,
|
|
31
58
|
encoding: "utf-8",
|
|
32
59
|
timeout: 20_000,
|
|
60
|
+
env: { ...process.env, XDG_CONFIG_HOME: seededXdgHome(), ...env },
|
|
33
61
|
});
|
|
34
62
|
|
|
35
63
|
return {
|
|
@@ -31,7 +31,10 @@ export default async function createTestMcpClient(options?: {
|
|
|
31
31
|
};
|
|
32
32
|
const cwd = options?.cwd ?? process.cwd();
|
|
33
33
|
|
|
34
|
-
const { store, cleanup: cleanupStore } = await createTestStore({
|
|
34
|
+
const { store, cleanup: cleanupStore } = await createTestStore({
|
|
35
|
+
ttl,
|
|
36
|
+
prefixes: config.prefixes,
|
|
37
|
+
});
|
|
35
38
|
|
|
36
39
|
const runtime: PragmaRuntime = {
|
|
37
40
|
store,
|
|
@@ -5,16 +5,19 @@
|
|
|
5
5
|
* that D3 operations query against.
|
|
6
6
|
*
|
|
7
7
|
* All @prefix declarations derived from {@link TTL_PREFIXES} so that
|
|
8
|
-
* a namespace rename in
|
|
8
|
+
* a namespace rename in DEFAULT_PREFIX_MAP propagates here automatically.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_PREFIX_MAP,
|
|
13
|
+
TTL_PREFIXES,
|
|
14
|
+
} from "../domains/shared/prefixes.js";
|
|
12
15
|
|
|
13
16
|
/** Turtle @prefix block for ds: only (most data fixtures). */
|
|
14
|
-
const dsPrefix = `@prefix ds: <${
|
|
17
|
+
const dsPrefix = `@prefix ds: <${DEFAULT_PREFIX_MAP.ds}> .`;
|
|
15
18
|
|
|
16
19
|
/** Turtle @prefix block for cs: only (standards fixtures). */
|
|
17
|
-
const csPrefix = `@prefix cs: <${
|
|
20
|
+
const csPrefix = `@prefix cs: <${DEFAULT_PREFIX_MAP.cs}> .`;
|
|
18
21
|
|
|
19
22
|
// =============================================================================
|
|
20
23
|
// Ontology (TBox) — class and property definitions
|
|
@@ -225,6 +228,20 @@ cs:code a owl:DatatypeProperty ;
|
|
|
225
228
|
cs:extends a owl:ObjectProperty ;
|
|
226
229
|
rdfs:domain cs:CodeStandard ;
|
|
227
230
|
rdfs:range cs:CodeStandard .
|
|
231
|
+
|
|
232
|
+
# ---- TBox extras (header, comments, functional typing, SHACL) ----
|
|
233
|
+
|
|
234
|
+
ds:ontology a owl:Ontology ;
|
|
235
|
+
rdfs:label "Design System Ontology" ;
|
|
236
|
+
owl:versionInfo "0.1.0-test" .
|
|
237
|
+
|
|
238
|
+
ds:Component rdfs:comment "A reusable UI building block." .
|
|
239
|
+
|
|
240
|
+
ds:tier a owl:FunctionalProperty .
|
|
241
|
+
|
|
242
|
+
ds:ComponentShape a <http://www.w3.org/ns/shacl#NodeShape> ;
|
|
243
|
+
<http://www.w3.org/ns/shacl#targetClass> ds:Component ;
|
|
244
|
+
<http://www.w3.org/ns/shacl#property> ds:shapeName, ds:shapeTier .
|
|
228
245
|
`;
|
|
229
246
|
|
|
230
247
|
// =============================================================================
|
package/src/testing/index.ts
CHANGED
|
@@ -10,6 +10,13 @@ export {
|
|
|
10
10
|
GRAPHQL_ERROR_TTL,
|
|
11
11
|
GRAPHQL_FATAL_TTL,
|
|
12
12
|
} from "./graphqlFixtures.js";
|
|
13
|
+
export { PARITY_GAPS } from "./standardParityFixtures.js";
|
|
13
14
|
export type { PragmaTestStoreOptions } from "./store.js";
|
|
14
15
|
export { createTestStore } from "./store.js";
|
|
16
|
+
export {
|
|
17
|
+
RECIPE_NAMESPACE,
|
|
18
|
+
RECIPE_PREFIXES,
|
|
19
|
+
RECIPE_STORY,
|
|
20
|
+
RECIPE_TTL,
|
|
21
|
+
} from "./storyFixtures.js";
|
|
15
22
|
export type { TestMcpClientResult } from "./types.js";
|