@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
|
@@ -10,9 +10,11 @@ import {
|
|
|
10
10
|
createOutputResult,
|
|
11
11
|
} from "@canonical/cli-core";
|
|
12
12
|
import { createLookupView } from "#tui";
|
|
13
|
+
import { PragmaError } from "../../../error/index.js";
|
|
13
14
|
import type { PragmaContext } from "../../shared/context.js";
|
|
14
15
|
import type { LookupResult } from "../../shared/contracts.js";
|
|
15
16
|
import { renderLookupResults } from "../../shared/formatters.js";
|
|
17
|
+
import resolveLookupExitCode from "../../shared/resolveLookupExitCode.js";
|
|
16
18
|
import {
|
|
17
19
|
createLookupFormatters,
|
|
18
20
|
createTokenInkLookupOptions,
|
|
@@ -56,6 +58,15 @@ export default function buildLookupCommand(
|
|
|
56
58
|
},
|
|
57
59
|
async execute(params: Record<string, unknown>) {
|
|
58
60
|
const names = normalizeNames(params.names, params.name);
|
|
61
|
+
if (names.length === 0) {
|
|
62
|
+
throw PragmaError.invalidInput("names", "(empty)", {
|
|
63
|
+
recovery: {
|
|
64
|
+
message: "List available tokens.",
|
|
65
|
+
cli: "pragma token list",
|
|
66
|
+
mcp: { tool: "token_list" },
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
}
|
|
59
70
|
const detailed = (params.detailed as boolean) ?? false;
|
|
60
71
|
const contract = await resolveTokenLookup(ctx.store, names);
|
|
61
72
|
|
|
@@ -77,6 +88,7 @@ export default function buildLookupCommand(
|
|
|
77
88
|
options: createTokenInkLookupOptions({ detailed: isDetailed }),
|
|
78
89
|
}),
|
|
79
90
|
},
|
|
91
|
+
resolveLookupExitCode(contract.result),
|
|
80
92
|
);
|
|
81
93
|
},
|
|
82
94
|
};
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from "@canonical/cli-core";
|
|
12
12
|
import type { PragmaContext } from "../../shared/context.js";
|
|
13
13
|
import { selectFormatter } from "../../shared/formatters.js";
|
|
14
|
+
import parseSampleCount from "../../shared/parseSampleCount.js";
|
|
14
15
|
import type { SampleOutput, TokenDetailed } from "../../shared/types/index.js";
|
|
15
16
|
import { sampleFormatters } from "../formatters/index.js";
|
|
16
17
|
import { sampleTokens } from "../operations/index.js";
|
|
@@ -37,7 +38,7 @@ export default function sampleCommand(ctx: PragmaContext): CommandDefinition {
|
|
|
37
38
|
examples: ["pragma token sample", "pragma token sample --count 3"],
|
|
38
39
|
},
|
|
39
40
|
async execute(params) {
|
|
40
|
-
const count =
|
|
41
|
+
const count = parseSampleCount(params.count);
|
|
41
42
|
const result = await sampleTokens(ctx.store, count);
|
|
42
43
|
|
|
43
44
|
const output: SampleOutput<TokenDetailed> = {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature flag for the token *read* surface (`token list`, `token lookup`,
|
|
3
|
+
* `token sample` and their MCP twins `token_list`, `token_lookup`,
|
|
4
|
+
* `token_sample`).
|
|
5
|
+
*
|
|
6
|
+
* Disabled until token data ships in the semantic packages: the current
|
|
7
|
+
* `@canonical/design-system` data (bundled and `#main`) contains no token
|
|
8
|
+
* instances, so every read command returned EMPTY_RESULTS while the docs
|
|
9
|
+
* and LLM orientation advertised the surface. Flip this to `true` once the
|
|
10
|
+
* ontology publishes token data — commands, MCP tools, and the LLM
|
|
11
|
+
* orientation (tool catalog, command reference, decision trees) all key
|
|
12
|
+
* off this single constant.
|
|
13
|
+
*
|
|
14
|
+
* `pragma tokens add-config` is unaffected: it scaffolds Terrazzo config
|
|
15
|
+
* from package conventions and does not depend on store data.
|
|
16
|
+
*/
|
|
17
|
+
export const TOKEN_READ_SURFACE_ENABLED = false;
|
|
@@ -14,8 +14,12 @@ import {
|
|
|
14
14
|
lookupCommand,
|
|
15
15
|
sampleCommand,
|
|
16
16
|
} from "./commands/index.js";
|
|
17
|
+
import { TOKEN_READ_SURFACE_ENABLED } from "./featureFlag.js";
|
|
17
18
|
|
|
18
19
|
export function commands(ctx: PragmaContext): CommandDefinition[] {
|
|
20
|
+
if (!TOKEN_READ_SURFACE_ENABLED) {
|
|
21
|
+
return [addConfigCommand()];
|
|
22
|
+
}
|
|
19
23
|
return [
|
|
20
24
|
listCommand(ctx),
|
|
21
25
|
lookupCommand(ctx),
|
|
@@ -24,6 +28,7 @@ export function commands(ctx: PragmaContext): CommandDefinition[] {
|
|
|
24
28
|
];
|
|
25
29
|
}
|
|
26
30
|
|
|
31
|
+
export { TOKEN_READ_SURFACE_ENABLED } from "./featureFlag.js";
|
|
27
32
|
export { specs as mcpSpecs } from "./mcp/index.js";
|
|
28
33
|
export type { AddConfigResult, TokenListFilters } from "./operations/index.js";
|
|
29
34
|
export {
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
import { writeFileSync } from "node:fs";
|
|
9
9
|
import { PragmaError } from "#error";
|
|
10
|
+
import { lookupToolMeta } from "../../shared/lookupMany.js";
|
|
10
11
|
import type { ToolSpec } from "../../shared/ToolSpec.js";
|
|
12
|
+
import { TOKEN_READ_SURFACE_ENABLED } from "../featureFlag.js";
|
|
11
13
|
import {
|
|
12
14
|
createLookupFormatters as createTokenLookupFmt,
|
|
13
15
|
listFormatters as tokenListFmt,
|
|
@@ -19,7 +21,7 @@ import {
|
|
|
19
21
|
resolveTokenLookup,
|
|
20
22
|
} from "../orchestration/index.js";
|
|
21
23
|
|
|
22
|
-
const
|
|
24
|
+
const allSpecs: readonly ToolSpec[] = [
|
|
23
25
|
{
|
|
24
26
|
name: "token_list",
|
|
25
27
|
description:
|
|
@@ -101,7 +103,10 @@ const specs: readonly ToolSpec[] = [
|
|
|
101
103
|
};
|
|
102
104
|
}
|
|
103
105
|
|
|
104
|
-
return {
|
|
106
|
+
return {
|
|
107
|
+
data: { results: result.results, errors: result.errors },
|
|
108
|
+
meta: lookupToolMeta(result),
|
|
109
|
+
};
|
|
105
110
|
},
|
|
106
111
|
},
|
|
107
112
|
|
|
@@ -188,4 +193,15 @@ const specs: readonly ToolSpec[] = [
|
|
|
188
193
|
},
|
|
189
194
|
] as const;
|
|
190
195
|
|
|
196
|
+
/** Token read tools gated by {@link TOKEN_READ_SURFACE_ENABLED}. */
|
|
197
|
+
const TOKEN_READ_TOOLS = new Set([
|
|
198
|
+
"token_list",
|
|
199
|
+
"token_lookup",
|
|
200
|
+
"token_sample",
|
|
201
|
+
]);
|
|
202
|
+
|
|
203
|
+
const specs: readonly ToolSpec[] = TOKEN_READ_SURFACE_ENABLED
|
|
204
|
+
? allSpecs
|
|
205
|
+
: allSpecs.filter((spec) => !TOKEN_READ_TOOLS.has(spec.name));
|
|
206
|
+
|
|
191
207
|
export default specs;
|
|
@@ -18,11 +18,12 @@ export default async function resolveTokenLookup(
|
|
|
18
18
|
const lookupResult: LookupResult<TokenDetailed> =
|
|
19
19
|
names.length > 0
|
|
20
20
|
? await lookupMany(names, (query) => lookupToken(store, query))
|
|
21
|
-
: { results: [], errors: [] };
|
|
21
|
+
: { results: [], errors: [], meta: { internalErrorCount: 0 } };
|
|
22
22
|
|
|
23
23
|
const result: LookupResult<TokenDetailed> = {
|
|
24
24
|
results: lookupResult.results,
|
|
25
25
|
errors: [...lookupResult.errors, ...globErrors],
|
|
26
|
+
meta: lookupResult.meta ?? { internalErrorCount: 0 },
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
return {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { PragmaError } from "#error";
|
|
3
|
+
import { resolveTraceLimit } from "./show.js";
|
|
4
|
+
|
|
5
|
+
describe("resolveTraceLimit", () => {
|
|
6
|
+
it("defaults to 50 when absent", () => {
|
|
7
|
+
expect(resolveTraceLimit(undefined)).toBe(50);
|
|
8
|
+
expect(resolveTraceLimit("")).toBe(50);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it("accepts a positive integer", () => {
|
|
12
|
+
expect(resolveTraceLimit("20")).toBe(20);
|
|
13
|
+
expect(resolveTraceLimit(" 5 ")).toBe(5);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it.each([
|
|
17
|
+
"notanumber",
|
|
18
|
+
"-5",
|
|
19
|
+
"0",
|
|
20
|
+
"3.5",
|
|
21
|
+
"1e1",
|
|
22
|
+
"0x5",
|
|
23
|
+
])("rejects the non-positive-integer value %j", (value) => {
|
|
24
|
+
expect(() => resolveTraceLimit(value)).toThrowError(PragmaError);
|
|
25
|
+
try {
|
|
26
|
+
resolveTraceLimit(value);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
expect((error as PragmaError).code).toBe("INVALID_INPUT");
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
type CommandDefinition,
|
|
10
10
|
createOutputResult,
|
|
11
11
|
} from "@canonical/cli-core";
|
|
12
|
+
import { PragmaError } from "#error";
|
|
12
13
|
import { traceDir } from "../../refs/operations/paths.js";
|
|
13
14
|
import { selectFormatter } from "../../shared/formatters.js";
|
|
14
15
|
import {
|
|
@@ -22,6 +23,30 @@ import {
|
|
|
22
23
|
readTraceLog,
|
|
23
24
|
} from "../operations/index.js";
|
|
24
25
|
|
|
26
|
+
/** Number of trace records shown when `--limit` is omitted. */
|
|
27
|
+
const DEFAULT_TRACE_LIMIT = 50;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Resolve the `--limit` value into a positive integer record count.
|
|
31
|
+
*
|
|
32
|
+
* @param raw - The raw param value.
|
|
33
|
+
* @returns The default when absent, else the validated positive integer.
|
|
34
|
+
* @throws PragmaError INVALID_INPUT when present but not a positive integer.
|
|
35
|
+
*/
|
|
36
|
+
export function resolveTraceLimit(raw: unknown): number {
|
|
37
|
+
if (raw === undefined || raw === null || raw === "") {
|
|
38
|
+
return DEFAULT_TRACE_LIMIT;
|
|
39
|
+
}
|
|
40
|
+
const text = String(raw).trim();
|
|
41
|
+
const parsed = Number(text);
|
|
42
|
+
if (!/^\d+$/.test(text) || parsed < 1) {
|
|
43
|
+
throw PragmaError.invalidInput("limit", String(raw), {
|
|
44
|
+
recovery: { message: "Provide a positive integer." },
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return parsed;
|
|
48
|
+
}
|
|
49
|
+
|
|
25
50
|
function formatOneLine(r: import("../types.js").TraceRecord): string {
|
|
26
51
|
const d = new Date(r.ts);
|
|
27
52
|
const time = [
|
|
@@ -81,6 +106,10 @@ const showCommand: CommandDefinition = {
|
|
|
81
106
|
],
|
|
82
107
|
},
|
|
83
108
|
async execute(params, ctx) {
|
|
109
|
+
// Validate --limit up front so a bad value is rejected regardless of
|
|
110
|
+
// whether any sessions exist.
|
|
111
|
+
const limit = resolveTraceLimit(params.limit);
|
|
112
|
+
|
|
84
113
|
const dir = traceDir();
|
|
85
114
|
const sessions = listSessions(dir);
|
|
86
115
|
|
|
@@ -129,10 +158,7 @@ const showCommand: CommandDefinition = {
|
|
|
129
158
|
return createOutputResult("", { plain: () => "" });
|
|
130
159
|
}
|
|
131
160
|
|
|
132
|
-
// Normal mode — read and format
|
|
133
|
-
const limit =
|
|
134
|
-
typeof params.limit === "string" ? Number.parseInt(params.limit, 10) : 50;
|
|
135
|
-
|
|
161
|
+
// Normal mode — read and format (limit validated at the top of execute).
|
|
136
162
|
const records = readTraceLog({ path: target.path, limit });
|
|
137
163
|
const data = { sessionId: target.sessionId, records };
|
|
138
164
|
|
|
@@ -152,7 +152,7 @@ describe("createTracePlugin", () => {
|
|
|
152
152
|
|
|
153
153
|
// bindings should be at most 2 (may be 0 with empty store)
|
|
154
154
|
expect(record.bindings).toBeDefined();
|
|
155
|
-
expect(record.bindings
|
|
155
|
+
expect(record.bindings?.length).toBeLessThanOrEqual(2);
|
|
156
156
|
});
|
|
157
157
|
|
|
158
158
|
it("generates a session ID when not provided", async () => {
|
package/src/index.ts
CHANGED
|
@@ -43,8 +43,6 @@ export type {
|
|
|
43
43
|
BlockDetailed,
|
|
44
44
|
BlockDigest,
|
|
45
45
|
BlockSummary,
|
|
46
|
-
CategorySummary,
|
|
47
|
-
CodeBlock,
|
|
48
46
|
Disclosure,
|
|
49
47
|
FilterConfig,
|
|
50
48
|
InspectResult,
|
|
@@ -54,10 +52,7 @@ export type {
|
|
|
54
52
|
OntologyProperty,
|
|
55
53
|
OntologySummary,
|
|
56
54
|
PredicateGroup,
|
|
57
|
-
StandardDetailed,
|
|
58
|
-
StandardListFilters,
|
|
59
55
|
StandardRef,
|
|
60
|
-
StandardSummary,
|
|
61
56
|
TierEntry,
|
|
62
57
|
TokenDetailed,
|
|
63
58
|
TokenRef,
|
|
@@ -90,18 +85,11 @@ export {
|
|
|
90
85
|
showOntology,
|
|
91
86
|
showOntologyRaw,
|
|
92
87
|
} from "./domains/ontology/operations/index.js";
|
|
88
|
+
export { listTiers } from "./domains/shared/listTiers.js";
|
|
93
89
|
export {
|
|
94
90
|
discoverSkills,
|
|
95
91
|
listSkills,
|
|
96
92
|
} from "./domains/skill/operations/index.js";
|
|
97
|
-
export {
|
|
98
|
-
listCategories,
|
|
99
|
-
listStandards,
|
|
100
|
-
lookupStandard,
|
|
101
|
-
resolveStandardList,
|
|
102
|
-
resolveStandardLookup,
|
|
103
|
-
} from "./domains/standard/index.js";
|
|
104
|
-
export { listTiers } from "./domains/tier/operations/index.js";
|
|
105
93
|
export {
|
|
106
94
|
listTokens,
|
|
107
95
|
lookupToken,
|