@canonical/pragma-cli 0.27.1-experimental.0 → 0.30.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 +67 -15
- package/dist/pragma +0 -0
- package/package.json +16 -17
- 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 +215 -0
- package/src/config/readConfig.test.ts +104 -13
- package/src/config/readConfig.ts +12 -117
- package/src/config/readConfigLayers.test.ts +107 -0
- package/src/config/readConfigLayers.ts +115 -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 +88 -2
- package/src/config/writeConfig.ts +25 -43
- package/src/constants.ts +12 -1
- package/src/domains/block/commands/index.ts +2 -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 +55 -0
- package/src/domains/block/formatters/index.ts +2 -1
- package/src/domains/block/formatters/sample.ts +21 -0
- package/src/domains/block/index.ts +3 -3
- package/src/domains/block/mcp/specs.ts +36 -168
- package/src/domains/block/operations/index.ts +2 -1
- package/src/domains/block/operations/lookup.ts +9 -0
- package/src/domains/block/operations/sample.ts +41 -0
- package/src/domains/block/orchestration/blockEmptyError.test.ts +26 -0
- package/src/domains/block/orchestration/resolveBlockLookup.ts +11 -3
- package/src/domains/block/stories.test.ts +28 -0
- package/src/domains/block/stories.ts +254 -0
- package/src/domains/config/commands/channel.test.ts +14 -3
- package/src/domains/config/commands/channel.ts +11 -7
- package/src/domains/config/commands/configScope.ts +46 -0
- package/src/domains/config/commands/framework.test.ts +105 -0
- package/src/domains/config/commands/framework.ts +91 -0
- package/src/domains/config/commands/index.ts +2 -0
- package/src/domains/config/commands/show.ts +5 -45
- package/src/domains/config/commands/tier.test.ts +13 -2
- package/src/domains/config/commands/tier.ts +11 -7
- package/src/domains/config/commands/trace.test.ts +165 -0
- package/src/domains/config/commands/trace.ts +83 -0
- 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 +37 -0
- package/src/domains/config/formatters/index.ts +2 -0
- 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 +28 -0
- package/src/domains/config/index.ts +15 -2
- package/src/domains/config/mcp/specs.ts +33 -53
- package/src/domains/config/operations/index.ts +1 -0
- 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/validateFramework.ts +24 -0
- package/src/domains/config/stories.ts +42 -0
- package/src/domains/config/tasks/index.ts +3 -0
- package/src/domains/config/tasks/setChannel.ts +13 -22
- package/src/domains/config/tasks/setFramework.ts +21 -0
- package/src/domains/config/tasks/setTier.ts +10 -23
- package/src/domains/config/tasks/setTrace.ts +20 -0
- package/src/domains/config/tasks/writeConfigField.ts +41 -0
- package/src/domains/create/commands/component.ts +5 -5
- package/src/domains/doctor/operations/checks/checkConfigFile.ts +19 -5
- package/src/domains/doctor/operations/checks/checkKeStore.ts +5 -5
- package/src/domains/doctor/operations/checks/checkMcpCommands.ts +130 -0
- package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +1 -1
- package/src/domains/doctor/operations/checks/checkPackageRefs.ts +30 -48
- 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 +162 -8
- package/src/domains/doctor/operations/runChecks.test.ts +85 -4
- package/src/domains/doctor/operations/runChecks.ts +50 -12
- package/src/domains/graph/helpers/resolveUri.test.ts +50 -0
- package/src/domains/graph/helpers/resolveUri.ts +28 -21
- package/src/domains/graphql/commands/build.test.ts +196 -0
- package/src/domains/graphql/commands/build.ts +117 -0
- package/src/domains/graphql/commands/check.test.ts +141 -0
- package/src/domains/graphql/commands/check.ts +81 -0
- package/src/domains/graphql/commands/index.ts +5 -0
- package/src/domains/graphql/commands/serve.test.ts +40 -0
- package/src/domains/graphql/commands/serve.ts +131 -0
- package/src/domains/graphql/constants.ts +10 -0
- package/src/domains/graphql/formatters/index.ts +3 -0
- package/src/domains/graphql/formatters/report.ts +78 -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 +6 -0
- package/src/domains/graphql/helpers/parsePrefixes.test.ts +44 -0
- package/src/domains/graphql/helpers/parsePrefixes.ts +38 -0
- package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +56 -0
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +45 -0
- 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 +24 -0
- package/src/domains/graphql/operations/compileSchema.test.ts +95 -0
- package/src/domains/graphql/operations/compileSchema.ts +107 -0
- package/src/domains/graphql/operations/createSchemaServer.test.ts +50 -0
- package/src/domains/graphql/operations/createSchemaServer.ts +75 -0
- package/src/domains/graphql/operations/index.ts +12 -0
- package/src/domains/graphql/types.ts +29 -0
- package/src/domains/info/operations/collectInfo.test.ts +16 -5
- package/src/domains/info/operations/collectInfo.ts +16 -19
- package/src/domains/llm/capabilities.test.ts +91 -0
- package/src/domains/llm/commands/capabilities.ts +28 -0
- package/src/domains/llm/commands/index.ts +1 -0
- package/src/domains/llm/data/commandReference.ts +90 -18
- package/src/domains/llm/data/decisionTrees.ts +15 -13
- package/src/domains/llm/data/index.ts +2 -0
- package/src/domains/llm/data/toolCatalog.ts +190 -0
- package/src/domains/llm/formatters/capabilities.ts +50 -0
- package/src/domains/llm/formatters/index.ts +1 -0
- package/src/domains/llm/index.ts +3 -2
- package/src/domains/llm/mcp/index.ts +1 -1
- package/src/domains/llm/mcp/specs.ts +59 -52
- package/src/domains/llm/types.ts +40 -0
- package/src/domains/modifier/commands/index.ts +2 -1
- 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 +53 -0
- package/src/domains/modifier/formatters/index.ts +2 -1
- package/src/domains/modifier/formatters/sample.ts +15 -0
- package/src/domains/modifier/index.ts +7 -3
- package/src/domains/modifier/mcp/specs.ts +38 -70
- package/src/domains/modifier/operations/index.ts +2 -1
- package/src/domains/modifier/operations/lookup.ts +9 -0
- package/src/domains/modifier/operations/sample.ts +32 -0
- package/src/domains/modifier/orchestration/modifierEmptyError.test.ts +26 -0
- package/src/domains/modifier/orchestration/modifierEmptyError.ts +7 -2
- package/src/domains/modifier/orchestration/resolveModifierLookup.ts +15 -2
- package/src/domains/modifier/stories.test.ts +20 -0
- package/src/domains/modifier/stories.ts +77 -0
- package/src/domains/ontology/commands/list.ts +5 -58
- package/src/domains/ontology/commands/show.ts +6 -58
- package/src/domains/ontology/formatters/show.ts +7 -1
- package/src/domains/ontology/mcp/specs.ts +7 -84
- package/src/domains/ontology/stories.test.ts +36 -0
- package/src/domains/ontology/stories.ts +108 -0
- package/src/domains/refs/operations/index.ts +1 -1
- package/src/domains/refs/operations/paths.ts +29 -1
- package/src/domains/refs/operations/updateRefs.test.ts +6 -3
- package/src/domains/refs/operations/updateRefs.ts +2 -36
- 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/operations/setupMcp.test.ts +6 -1
- package/src/domains/shared/bootStore.ts +92 -50
- 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 +12 -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 +109 -0
- package/src/domains/shared/loaders/bundledLoader.test.ts +248 -0
- package/src/domains/shared/loaders/bundledLoader.ts +206 -0
- package/src/domains/shared/loaders/gitLoader.ts +31 -0
- package/src/domains/shared/loaders/index.ts +9 -0
- package/src/domains/shared/loaders/localLoader.ts +87 -0
- package/src/domains/shared/loaders/readPackageDir.ts +147 -0
- 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 +120 -0
- package/src/domains/shared/lookupMany.ts +43 -3
- package/src/domains/shared/mergeAndParseRefs.test.ts +89 -0
- package/src/domains/shared/mergeAndParseRefs.ts +44 -0
- package/src/domains/shared/packages.ts +14 -120
- package/src/domains/shared/pickRandom.ts +22 -0
- package/src/domains/shared/resolveConfiguredGraphs.test.ts +27 -0
- package/src/domains/shared/resolveConfiguredGraphs.ts +41 -0
- package/src/domains/shared/runtime.ts +7 -63
- package/src/domains/shared/sampleFormatters.ts +47 -0
- package/src/domains/shared/semanticPackage.ts +112 -0
- package/src/domains/shared/stories/compileLookupCommand.test.ts +145 -0
- package/src/domains/shared/stories/compileLookupCommand.ts +100 -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 +102 -0
- package/src/domains/shared/stories/pack/applyPackFilters.ts +76 -0
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +51 -0
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +80 -0
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +108 -0
- package/src/domains/shared/stories/pack/collectPackStories.ts +76 -0
- package/src/domains/shared/stories/pack/compilePackCommands.ts +40 -0
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +146 -0
- package/src/domains/shared/stories/pack/compilePackStories.ts +253 -0
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +43 -0
- package/src/domains/shared/stories/pack/index.ts +28 -0
- package/src/domains/shared/stories/pack/runSelectQuery.ts +31 -0
- package/src/domains/shared/stories/pack/standardParity.test.ts +308 -0
- package/src/domains/shared/stories/pack/types.ts +104 -0
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +240 -0
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +408 -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 +171 -0
- package/src/domains/shared/suggestions/detectCrossDomain.test.ts +43 -0
- package/src/domains/shared/suggestions/detectCrossDomain.ts +116 -0
- package/src/domains/shared/suggestions/expandGlob.test.ts +92 -0
- package/src/domains/shared/suggestions/expandGlob.ts +52 -0
- package/src/domains/shared/suggestions/expandLookupQueries.ts +57 -0
- package/src/domains/shared/suggestions/index.ts +7 -0
- package/src/domains/shared/suggestions/listDomainNames.ts +61 -0
- package/src/domains/shared/suggestions/suggestNames.test.ts +70 -0
- package/src/domains/shared/suggestions/suggestNames.ts +130 -0
- package/src/domains/shared/types/index.ts +1 -0
- package/src/domains/shared/types/runtime.ts +4 -1
- package/src/domains/shared/types/sample.ts +17 -0
- 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 +48 -16
- 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/standard/commands/index.ts +2 -1
- package/src/domains/standard/commands/list.ts +5 -84
- package/src/domains/standard/commands/lookup.ts +8 -93
- package/src/domains/standard/commands/sample.ts +57 -0
- package/src/domains/standard/formatters/index.ts +2 -1
- package/src/domains/standard/formatters/sample.ts +15 -0
- package/src/domains/standard/index.ts +8 -1
- package/src/domains/standard/mcp/specs.ts +44 -152
- package/src/domains/standard/operations/index.ts +2 -1
- package/src/domains/standard/operations/lookup.ts +9 -0
- package/src/domains/standard/operations/sample.ts +35 -0
- package/src/domains/standard/orchestration/resolveStandardLookup.ts +15 -2
- package/src/domains/standard/orchestration/standardEmptyError.test.ts +33 -0
- package/src/domains/standard/orchestration/standardEmptyError.ts +16 -6
- package/src/domains/standard/stories.test.ts +24 -0
- package/src/domains/standard/stories.ts +151 -0
- package/src/domains/tier/commands/list.ts +5 -55
- package/src/domains/tier/mcp/specs.ts +5 -31
- package/src/domains/tier/stories.test.ts +22 -0
- package/src/domains/tier/stories.ts +52 -0
- package/src/domains/token/commands/index.ts +2 -1
- package/src/domains/token/commands/sample.ts +53 -0
- package/src/domains/token/formatters/index.ts +2 -1
- package/src/domains/token/formatters/sample.ts +16 -0
- package/src/domains/token/index.ts +8 -1
- package/src/domains/token/mcp/specs.ts +52 -2
- package/src/domains/token/operations/index.ts +2 -1
- package/src/domains/token/operations/lookup.ts +9 -0
- package/src/domains/token/operations/sample.ts +32 -0
- package/src/domains/token/orchestration/resolveTokenLookup.ts +15 -2
- package/src/domains/token/orchestration/tokenEmptyError.test.ts +33 -0
- package/src/domains/token/orchestration/tokenEmptyError.ts +5 -2
- package/src/domains/trace/commands/clear.ts +71 -0
- package/src/domains/trace/commands/index.ts +5 -0
- package/src/domains/trace/commands/sessions.ts +32 -0
- package/src/domains/trace/commands/show.ts +145 -0
- package/src/domains/trace/formatters/index.ts +9 -0
- package/src/domains/trace/formatters/sessions.ts +80 -0
- package/src/domains/trace/formatters/show.ts +122 -0
- package/src/domains/trace/index.ts +17 -0
- package/src/domains/trace/operations/index.ts +8 -0
- package/src/domains/trace/operations/listSessions.test.ts +55 -0
- package/src/domains/trace/operations/listSessions.ts +52 -0
- package/src/domains/trace/operations/readTraceLog.test.ts +100 -0
- package/src/domains/trace/operations/readTraceLog.ts +104 -0
- package/src/domains/trace/tracePlugin.test.ts +171 -0
- package/src/domains/trace/tracePlugin.ts +159 -0
- package/src/domains/trace/types.ts +65 -0
- package/src/error/PragmaError.ts +15 -2
- package/src/error/types.ts +15 -1
- package/src/mcp/error/serializeErrorPayload.ts +7 -0
- package/src/mcp/error/types.ts +8 -0
- package/src/mcp/registerResources.test.ts +405 -75
- package/src/mcp/registerResources.ts +5 -299
- 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 +9 -0
- package/src/mcp/tools/registerTools.test.ts +84 -12
- package/src/mcp/types.ts +4 -0
- package/src/mcp/utils/wrapTool.test.ts +1 -0
- package/src/pipeline/collectCommands.ts +15 -2
- package/src/pipeline/renderError.ts +15 -0
- package/src/pipeline/resolveCommandKind.ts +8 -1
- package/src/pipeline/runCli.ts +51 -6
- package/src/testing/createTestMcpClient.ts +5 -1
- package/src/testing/graphqlFixtures.ts +72 -0
- package/src/testing/index.ts +17 -0
- package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +1207 -0
- package/src/testing/integration/cross-binary-byte-equality.test.ts +129 -0
- package/src/testing/integration/executor-execution.test.ts +101 -0
- package/src/testing/integration/executor-golden.test.ts +145 -0
- package/src/testing/integration/mcp-surface.test.ts +11 -5
- package/src/testing/integration/parity.test.ts +17 -12
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +71 -0
- package/src/testing/setupXdgIsolation.ts +15 -0
- package/src/testing/standardParityFixtures.ts +92 -0
- package/src/testing/storyFixtures.ts +63 -0
- package/src/pipeline/runInteractiveCommand.ts +0 -198
|
@@ -4,12 +4,17 @@ import { commands as configCommands } from "../domains/config/index.js";
|
|
|
4
4
|
import { commands as createCommands } from "../domains/create/index.js";
|
|
5
5
|
import { doctorCommand } from "../domains/doctor/commands/index.js";
|
|
6
6
|
import { commands as graphCommands } from "../domains/graph/index.js";
|
|
7
|
+
import { commands as graphqlCommands } from "../domains/graphql/index.js";
|
|
7
8
|
import { infoCommand, upgradeCommand } from "../domains/info/index.js";
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
buildCapabilitiesCommand,
|
|
11
|
+
buildLlmCommand,
|
|
12
|
+
} from "../domains/llm/index.js";
|
|
9
13
|
import { commands as modifierCommands } from "../domains/modifier/index.js";
|
|
10
14
|
import { commands as ontologyCommands } from "../domains/ontology/index.js";
|
|
11
15
|
import { commands as setupCommands } from "../domains/setup/index.js";
|
|
12
16
|
import type { PragmaContext } from "../domains/shared/context.js";
|
|
17
|
+
import { compilePackCommands } from "../domains/shared/stories/pack/index.js";
|
|
13
18
|
import { commands as skillCommands } from "../domains/skill/index.js";
|
|
14
19
|
import { commands as standardCommands } from "../domains/standard/index.js";
|
|
15
20
|
import { commands as tierCommands } from "../domains/tier/index.js";
|
|
@@ -27,7 +32,7 @@ import { commands as tokenCommands } from "../domains/token/index.js";
|
|
|
27
32
|
export default function collectCommands(
|
|
28
33
|
ctx: PragmaContext,
|
|
29
34
|
): CommandDefinition[] {
|
|
30
|
-
|
|
35
|
+
const builtIn: CommandDefinition[] = [
|
|
31
36
|
...configCommands(ctx),
|
|
32
37
|
...createCommands(),
|
|
33
38
|
...setupCommands(),
|
|
@@ -38,10 +43,18 @@ export default function collectCommands(
|
|
|
38
43
|
...blockCommands(ctx),
|
|
39
44
|
...ontologyCommands(ctx),
|
|
40
45
|
...graphCommands(ctx),
|
|
46
|
+
...graphqlCommands(),
|
|
41
47
|
...skillCommands(ctx),
|
|
42
48
|
doctorCommand,
|
|
43
49
|
infoCommand,
|
|
44
50
|
upgradeCommand,
|
|
45
51
|
buildLlmCommand(ctx),
|
|
52
|
+
buildCapabilitiesCommand(),
|
|
46
53
|
];
|
|
54
|
+
|
|
55
|
+
// Story packs project onto the same surface; built-in nouns are reserved.
|
|
56
|
+
const reservedNouns = new Set(
|
|
57
|
+
builtIn.map((command) => command.path.at(0) ?? ""),
|
|
58
|
+
);
|
|
59
|
+
return [...builtIn, ...compilePackCommands(ctx, reservedNouns)];
|
|
47
60
|
}
|
|
@@ -43,6 +43,14 @@ function renderErrorPlain(error: PragmaError): string {
|
|
|
43
43
|
lines.push(`Valid options: ${error.validOptions.join(", ")}`);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
if (error.crossDomain) {
|
|
47
|
+
lines.push("");
|
|
48
|
+
lines.push(
|
|
49
|
+
`"${error.entity?.name ?? ""}" exists as a ${error.crossDomain.entityType}.`,
|
|
50
|
+
);
|
|
51
|
+
lines.push(`Run \`${error.crossDomain.cli}\``);
|
|
52
|
+
}
|
|
53
|
+
|
|
46
54
|
if (error.recovery) {
|
|
47
55
|
lines.push("");
|
|
48
56
|
if (error.recovery.cli) {
|
|
@@ -82,6 +90,12 @@ function renderErrorLlm(error: PragmaError): string {
|
|
|
82
90
|
lines.push(`Valid options: ${error.validOptions.join(", ")}`);
|
|
83
91
|
}
|
|
84
92
|
|
|
93
|
+
if (error.crossDomain) {
|
|
94
|
+
lines.push(
|
|
95
|
+
`Cross-domain: "${error.entity?.name ?? ""}" exists as a ${error.crossDomain.entityType}. \`${error.crossDomain.cli}\``,
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
85
99
|
if (error.recovery) {
|
|
86
100
|
if (error.recovery.cli) {
|
|
87
101
|
lines.push(`Recovery: \`${error.recovery.cli}\``);
|
|
@@ -106,6 +120,7 @@ function renderErrorJson(error: PragmaError): string {
|
|
|
106
120
|
entity: error.entity,
|
|
107
121
|
suggestions: error.suggestions,
|
|
108
122
|
recovery: error.recovery,
|
|
123
|
+
crossDomain: error.crossDomain,
|
|
109
124
|
filters: error.filters,
|
|
110
125
|
validOptions: error.validOptions,
|
|
111
126
|
});
|
|
@@ -8,7 +8,14 @@
|
|
|
8
8
|
import type { CommandKind } from "./types.js";
|
|
9
9
|
|
|
10
10
|
/** Commands that do not require the ke store to be booted. */
|
|
11
|
-
const STORE_SKIP_COMMANDS = new Set([
|
|
11
|
+
const STORE_SKIP_COMMANDS = new Set([
|
|
12
|
+
"setup",
|
|
13
|
+
"mcp",
|
|
14
|
+
"update-refs",
|
|
15
|
+
"capabilities",
|
|
16
|
+
"trace",
|
|
17
|
+
"graphql",
|
|
18
|
+
]);
|
|
12
19
|
|
|
13
20
|
function findCommandArg(argv: readonly string[]): string | undefined {
|
|
14
21
|
const args = argv.slice(2);
|
package/src/pipeline/runCli.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { GlobalFlags } from "@canonical/cli-core";
|
|
2
2
|
import { CommanderError } from "commander";
|
|
3
|
+
import { commands as graphqlCommands } from "../domains/graphql/index.js";
|
|
4
|
+
import { buildCapabilitiesCommand } from "../domains/llm/index.js";
|
|
3
5
|
import { commands as refsCommands } from "../domains/refs/index.js";
|
|
4
6
|
import { commands as setupCommands } from "../domains/setup/index.js";
|
|
5
7
|
import type { PragmaContext } from "../domains/shared/context.js";
|
|
8
|
+
import createInteractivePromptSession from "../domains/shared/createInteractivePromptSession.js";
|
|
6
9
|
import type { PragmaRuntime } from "../domains/shared/runtime.js";
|
|
7
10
|
import { bootPragma } from "../domains/shared/runtime.js";
|
|
11
|
+
import { commands as traceCommands } from "../domains/trace/index.js";
|
|
8
12
|
import { PragmaError } from "../error/index.js";
|
|
9
13
|
import collectCommands from "./collectCommands.js";
|
|
10
14
|
import createProgram from "./createProgram.js";
|
|
@@ -16,7 +20,6 @@ import {
|
|
|
16
20
|
renderErrorPlain,
|
|
17
21
|
} from "./renderError.js";
|
|
18
22
|
import resolveCommandKind from "./resolveCommandKind.js";
|
|
19
|
-
import runInteractiveCommand from "./runInteractiveCommand.js";
|
|
20
23
|
|
|
21
24
|
function hasCommandArg(argv: readonly string[]): boolean {
|
|
22
25
|
const args = argv.slice(2);
|
|
@@ -76,11 +79,11 @@ async function handleDoctor(globalFlags: GlobalFlags): Promise<void> {
|
|
|
76
79
|
async function handleRootHelp(globalFlags: GlobalFlags): Promise<void> {
|
|
77
80
|
const stubCtx: PragmaContext = {
|
|
78
81
|
store: {} as PragmaRuntime["store"],
|
|
79
|
-
|
|
82
|
+
...(await resolveHelpConfig()),
|
|
80
83
|
cwd: process.cwd(),
|
|
81
84
|
dispose: () => {},
|
|
82
85
|
globalFlags,
|
|
83
|
-
|
|
86
|
+
promptSession: createInteractivePromptSession,
|
|
84
87
|
};
|
|
85
88
|
const commands = collectCommands(stubCtx);
|
|
86
89
|
const program = createProgram(commands, stubCtx);
|
|
@@ -92,6 +95,41 @@ async function handleRootHelp(globalFlags: GlobalFlags): Promise<void> {
|
|
|
92
95
|
}
|
|
93
96
|
}
|
|
94
97
|
|
|
98
|
+
/**
|
|
99
|
+
* Resolve config and packages for root help without booting the store.
|
|
100
|
+
*
|
|
101
|
+
* Story-pack nouns come from config and package files, so bare
|
|
102
|
+
* `pragma --help` reads them via the filesystem loaders only. Help must
|
|
103
|
+
* never fail on a broken config — errors fall back to the empty stub and
|
|
104
|
+
* surface on the next real command instead.
|
|
105
|
+
*
|
|
106
|
+
* @note Impure — reads config and resolves packages from disk.
|
|
107
|
+
*/
|
|
108
|
+
async function resolveHelpConfig(): Promise<
|
|
109
|
+
Pick<PragmaRuntime, "config" | "packages">
|
|
110
|
+
> {
|
|
111
|
+
try {
|
|
112
|
+
const { readConfig } = await import("#config");
|
|
113
|
+
const config = readConfig(process.cwd());
|
|
114
|
+
const { resolveSemanticPackages } = await import(
|
|
115
|
+
"../domains/shared/semanticPackage.js"
|
|
116
|
+
);
|
|
117
|
+
const { createGitLoader, createLocalLoader } = await import(
|
|
118
|
+
"../domains/shared/loaders/index.js"
|
|
119
|
+
);
|
|
120
|
+
const { mergeAndParseRefs } = await import(
|
|
121
|
+
"../domains/shared/mergeAndParseRefs.js"
|
|
122
|
+
);
|
|
123
|
+
const packages = await resolveSemanticPackages(
|
|
124
|
+
mergeAndParseRefs(config.packages),
|
|
125
|
+
[createLocalLoader(), createGitLoader()],
|
|
126
|
+
);
|
|
127
|
+
return { config, packages };
|
|
128
|
+
} catch {
|
|
129
|
+
return { config: { tier: undefined, channel: "normal" }, packages: [] };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
95
133
|
// — Stage 4+5: Boot, build program, execute ——————————————————————————————————
|
|
96
134
|
|
|
97
135
|
async function bootAndRun(
|
|
@@ -117,7 +155,7 @@ async function bootAndRun(
|
|
|
117
155
|
const ctx: PragmaContext = {
|
|
118
156
|
...runtime,
|
|
119
157
|
globalFlags,
|
|
120
|
-
|
|
158
|
+
promptSession: createInteractivePromptSession,
|
|
121
159
|
};
|
|
122
160
|
const commands = collectCommands(ctx);
|
|
123
161
|
const program = createProgram(commands, ctx);
|
|
@@ -137,11 +175,18 @@ async function runStoreSkip(
|
|
|
137
175
|
store: {} as PragmaRuntime["store"],
|
|
138
176
|
config: { tier: undefined, channel: "normal" },
|
|
139
177
|
cwd: process.cwd(),
|
|
178
|
+
packages: [],
|
|
140
179
|
dispose: () => {},
|
|
141
180
|
globalFlags,
|
|
142
|
-
|
|
181
|
+
promptSession: createInteractivePromptSession,
|
|
143
182
|
};
|
|
144
|
-
const commands = [
|
|
183
|
+
const commands = [
|
|
184
|
+
...setupCommands(),
|
|
185
|
+
...refsCommands(),
|
|
186
|
+
...traceCommands(),
|
|
187
|
+
...graphqlCommands(),
|
|
188
|
+
buildCapabilitiesCommand(),
|
|
189
|
+
];
|
|
145
190
|
const program = createProgram(commands, stubCtx);
|
|
146
191
|
|
|
147
192
|
try {
|
|
@@ -31,12 +31,16 @@ 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,
|
|
38
41
|
config,
|
|
39
42
|
cwd,
|
|
43
|
+
packages: [],
|
|
40
44
|
dispose: () => cleanupStore(),
|
|
41
45
|
};
|
|
42
46
|
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTL fixtures for graphql domain tests.
|
|
3
|
+
*
|
|
4
|
+
* Three compile outcomes: a clean ontology (no diagnostics), an ontology
|
|
5
|
+
* with an unresolvable field-name collision (M001 error diagnostic, schema
|
|
6
|
+
* still composes), and an ontology whose reserved `__` field name fails
|
|
7
|
+
* schema composition entirely (C003 → CompilationError).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** Namespace used by all graphql fixtures. */
|
|
11
|
+
export const EX_NAMESPACE = "http://example.org/";
|
|
12
|
+
|
|
13
|
+
/** `--prefix` entry registering {@link EX_NAMESPACE}. */
|
|
14
|
+
export const EX_PREFIX_ENTRY = `ex=${EX_NAMESPACE}`;
|
|
15
|
+
|
|
16
|
+
const prefixBlock = `@prefix ex: <${EX_NAMESPACE}> .
|
|
17
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
18
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
19
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .`;
|
|
20
|
+
|
|
21
|
+
/** Compiles to `type Thing` with zero diagnostics. */
|
|
22
|
+
export const GRAPHQL_CLEAN_TTL = `${prefixBlock}
|
|
23
|
+
|
|
24
|
+
ex:Thing a owl:Class ;
|
|
25
|
+
rdfs:label "Thing" .
|
|
26
|
+
|
|
27
|
+
ex:name a owl:DatatypeProperty ;
|
|
28
|
+
rdfs:domain ex:Thing ;
|
|
29
|
+
rdfs:range xsd:string ;
|
|
30
|
+
rdfs:label "name" .
|
|
31
|
+
|
|
32
|
+
ex:widget a ex:Thing ;
|
|
33
|
+
ex:name "Widget" .
|
|
34
|
+
`;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Produces an M001 error diagnostic (three properties collapse to
|
|
38
|
+
* `Thing.name` and the namespace-prefixed rename collides too), but the
|
|
39
|
+
* schema still composes — no CompilationError.
|
|
40
|
+
*/
|
|
41
|
+
export const GRAPHQL_ERROR_TTL = `${prefixBlock}
|
|
42
|
+
|
|
43
|
+
ex:Thing a owl:Class ;
|
|
44
|
+
rdfs:label "Thing" .
|
|
45
|
+
|
|
46
|
+
ex:name a owl:DatatypeProperty ;
|
|
47
|
+
rdfs:domain ex:Thing ;
|
|
48
|
+
rdfs:range xsd:string .
|
|
49
|
+
|
|
50
|
+
ex:hasName a owl:DatatypeProperty ;
|
|
51
|
+
rdfs:domain ex:Thing ;
|
|
52
|
+
rdfs:range xsd:string .
|
|
53
|
+
|
|
54
|
+
ex:isName a owl:DatatypeProperty ;
|
|
55
|
+
rdfs:domain ex:Thing ;
|
|
56
|
+
rdfs:range xsd:string .
|
|
57
|
+
`;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Fails schema composition (C003): `__bad` survives name sanitization but
|
|
61
|
+
* `__` is reserved by GraphQL introspection, so compile() throws
|
|
62
|
+
* CompilationError.
|
|
63
|
+
*/
|
|
64
|
+
export const GRAPHQL_FATAL_TTL = `${prefixBlock}
|
|
65
|
+
|
|
66
|
+
ex:Thing a owl:Class ;
|
|
67
|
+
rdfs:label "Thing" .
|
|
68
|
+
|
|
69
|
+
ex:__bad a owl:DatatypeProperty ;
|
|
70
|
+
rdfs:domain ex:Thing ;
|
|
71
|
+
rdfs:range xsd:string .
|
|
72
|
+
`;
|
package/src/testing/index.ts
CHANGED
|
@@ -3,6 +3,23 @@ export type { CommandResult } from "./cli.js";
|
|
|
3
3
|
export { runCommand } from "./cli.js";
|
|
4
4
|
export { default as createTestMcpClient } from "./createTestMcpClient.js";
|
|
5
5
|
export { DS_ALL_TTL, DS_ONTOLOGY_TTL, DS_TIERS_TTL } from "./dsFixtures.js";
|
|
6
|
+
export {
|
|
7
|
+
EX_NAMESPACE,
|
|
8
|
+
EX_PREFIX_ENTRY,
|
|
9
|
+
GRAPHQL_CLEAN_TTL,
|
|
10
|
+
GRAPHQL_ERROR_TTL,
|
|
11
|
+
GRAPHQL_FATAL_TTL,
|
|
12
|
+
} from "./graphqlFixtures.js";
|
|
13
|
+
export {
|
|
14
|
+
PARITY_GAPS,
|
|
15
|
+
STANDARD_PACK_STORY,
|
|
16
|
+
} from "./standardParityFixtures.js";
|
|
6
17
|
export type { PragmaTestStoreOptions } from "./store.js";
|
|
7
18
|
export { createTestStore } from "./store.js";
|
|
19
|
+
export {
|
|
20
|
+
RECIPE_NAMESPACE,
|
|
21
|
+
RECIPE_PREFIXES,
|
|
22
|
+
RECIPE_STORY,
|
|
23
|
+
RECIPE_TTL,
|
|
24
|
+
} from "./storyFixtures.js";
|
|
8
25
|
export type { TestMcpClientResult } from "./types.js";
|