@canonical/pragma-cli 0.31.0 → 0.32.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/dist/pragma +0 -0
- package/package.json +27 -42
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.verb.ts +150 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +155 -0
- package/src/capabilities/block/parity.test.ts +180 -0
- package/src/capabilities/block/tierChain.ts +78 -0
- package/src/capabilities/capabilities/capabilities.render.ts +89 -0
- package/src/capabilities/capabilities/capabilities.test.ts +131 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +144 -0
- package/src/capabilities/capabilities/hints.ts +221 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +58 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +87 -0
- package/src/capabilities/colophon/colophon.render.ts +38 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +41 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +85 -0
- package/src/capabilities/colophon/pragmaColophon.ts +66 -0
- package/src/capabilities/colophon/types.ts +29 -0
- package/src/capabilities/config/collectConfigShow.ts +32 -0
- package/src/capabilities/config/field.render.ts +28 -0
- package/src/capabilities/config/field.test.ts +188 -0
- package/src/capabilities/config/fields.ts +152 -0
- package/src/capabilities/config/index.ts +6 -0
- package/src/capabilities/config/runField.ts +59 -0
- package/src/capabilities/config/runSet.ts +38 -0
- package/src/capabilities/config/set.test.ts +207 -0
- package/src/capabilities/config/set.verb.ts +70 -0
- package/src/capabilities/config/show.render.ts +61 -0
- package/src/capabilities/config/show.verb.ts +45 -0
- package/src/capabilities/config/types.ts +27 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +88 -0
- package/src/capabilities/create/byteEquality.test.ts +222 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +152 -0
- package/src/capabilities/create/create.mcp.test.ts +139 -0
- package/src/capabilities/create/create.render.ts +50 -0
- package/src/capabilities/create/create.test.ts +403 -0
- package/src/capabilities/create/create.verb.ts +435 -0
- package/src/capabilities/create/cwdJail.test.ts +129 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +111 -0
- package/src/capabilities/create/index.ts +25 -0
- package/src/capabilities/create/pathJail.ts +73 -0
- package/src/capabilities/create/pickGenerator.ts +63 -0
- package/src/capabilities/create/templates.embedded.generated.ts +53 -0
- package/src/capabilities/create/types.ts +8 -0
- package/src/capabilities/doctor/checks/checkConfigFile.ts +41 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +39 -0
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +108 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +61 -0
- package/src/capabilities/doctor/checks/checkNodeVersion.ts +25 -0
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +73 -0
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +22 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +111 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +131 -0
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +60 -0
- package/src/capabilities/doctor/doctor.render.ts +116 -0
- package/src/capabilities/doctor/doctor.test.ts +179 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +76 -0
- package/src/capabilities/doctor/types.ts +41 -0
- package/src/capabilities/emptyRecovery.test.ts +112 -0
- package/src/capabilities/graph/index.ts +21 -0
- package/src/capabilities/graph/inspect.render.ts +38 -0
- package/src/capabilities/graph/inspect.test.ts +80 -0
- package/src/capabilities/graph/inspect.verb.ts +51 -0
- package/src/capabilities/graph/query.render.ts +77 -0
- package/src/capabilities/graph/query.test.ts +156 -0
- package/src/capabilities/graph/query.verb.ts +58 -0
- package/src/capabilities/graph/runQuery.ts +49 -0
- package/src/capabilities/index.ts +54 -0
- package/src/capabilities/info/collectInfo.ts +76 -0
- package/src/capabilities/info/index.ts +6 -0
- package/src/capabilities/info/info.render.ts +72 -0
- package/src/capabilities/info/info.test.ts +127 -0
- package/src/capabilities/info/info.verb.ts +46 -0
- package/src/capabilities/info/types.ts +42 -0
- package/src/capabilities/lazy.test.ts +89 -0
- package/src/capabilities/meta/complete.verb.ts +52 -0
- package/src/capabilities/meta/index.ts +15 -0
- package/src/capabilities/meta/mcp.verb.ts +35 -0
- package/src/capabilities/modifier/index.ts +15 -0
- package/src/capabilities/modifier/pack.ts +64 -0
- package/src/capabilities/ontology/index.ts +12 -0
- package/src/capabilities/ontology/ontology.test.ts +94 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +170 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.ts +70 -0
- package/src/capabilities/prompt/prompt.test.ts +119 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +231 -0
- package/src/capabilities/resources/resources.test.ts +114 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/setup/index.ts +6 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +108 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +307 -0
- package/src/capabilities/setup/operations/setupLsp.ts +61 -0
- package/src/capabilities/setup/operations/setupMcp.ts +85 -0
- package/src/capabilities/setup/operations/setupSkills.ts +199 -0
- package/src/capabilities/setup/setup.render.ts +49 -0
- package/src/capabilities/setup/setup.test.ts +351 -0
- package/src/capabilities/setup/setup.verb.ts +209 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +42 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -0
- package/src/capabilities/shared/packageManager.ts +62 -0
- package/src/capabilities/shared/registry.ts +70 -0
- package/src/capabilities/skill/discover.ts +178 -0
- package/src/capabilities/skill/index.ts +12 -0
- package/src/capabilities/skill/render.ts +60 -0
- package/src/capabilities/skill/skill.test.ts +142 -0
- package/src/capabilities/skill/verbs.ts +100 -0
- package/src/capabilities/sources/collectStatus.ts +87 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +407 -0
- package/src/capabilities/sources/sources.test.ts +642 -0
- package/src/capabilities/sources/status.render.ts +56 -0
- package/src/capabilities/sources/status.verb.ts +42 -0
- package/src/capabilities/sources/types.ts +51 -0
- package/src/capabilities/sources/update.render.ts +35 -0
- package/src/capabilities/sources/update.verb.ts +76 -0
- package/src/capabilities/standard/index.ts +18 -0
- package/src/capabilities/standard/pack.ts +128 -0
- package/src/capabilities/standard/parity.test.ts +208 -0
- package/src/capabilities/surface.test.ts +208 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.ts +34 -0
- package/src/capabilities/tier/lookup.test.ts +68 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +59 -0
- package/src/capabilities/token/addConfig.render.ts +27 -0
- package/src/capabilities/token/addConfig.test.ts +62 -0
- package/src/capabilities/token/addConfig.verb.ts +40 -0
- package/src/capabilities/token/index.ts +19 -0
- package/src/capabilities/token/pack.ts +58 -0
- package/src/capabilities/token/runAddConfig.ts +95 -0
- package/src/capabilities/upgrade/index.ts +6 -0
- package/src/capabilities/upgrade/runUpgrade.ts +119 -0
- package/src/capabilities/upgrade/types.ts +21 -0
- package/src/capabilities/upgrade/upgrade.render.ts +55 -0
- package/src/capabilities/upgrade/upgrade.test.ts +372 -0
- package/src/capabilities/upgrade/upgrade.verb.ts +56 -0
- package/src/constants.test.ts +33 -0
- package/src/constants.ts +38 -70
- package/src/index.ts +27 -122
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +340 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +101 -0
- package/src/kernel/completion/complete.ts +77 -0
- package/src/kernel/completion/emitScripts.test.ts +173 -0
- package/src/kernel/completion/emitScripts.ts +122 -0
- package/src/kernel/completion/entitySource.test.ts +198 -0
- package/src/kernel/completion/entitySource.ts +269 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +259 -0
- package/src/kernel/completion/parse.test.ts +338 -0
- package/src/kernel/completion/parse.ts +294 -0
- package/src/kernel/completion/rank.test.ts +100 -0
- package/src/kernel/completion/rank.ts +118 -0
- package/src/kernel/completion/resolve.test.ts +204 -0
- package/src/kernel/completion/resolve.ts +133 -0
- package/src/kernel/completion/safety.test.ts +374 -0
- package/src/kernel/completion/templates/bash.ts +249 -0
- package/src/kernel/completion/templates/fish.ts +245 -0
- package/src/kernel/completion/templates/shared.ts +134 -0
- package/src/kernel/completion/templates/zsh.ts +246 -0
- package/src/kernel/completion/types.ts +153 -0
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +11 -0
- package/src/kernel/config/defaults.ts +28 -0
- package/src/kernel/config/evaluateProjectConfig.ts +119 -0
- package/src/kernel/config/findProjectConfig.ts +45 -0
- package/src/kernel/config/firstRun.test.ts +60 -0
- package/src/kernel/config/firstRun.ts +91 -0
- package/src/kernel/config/globalConfig.ts +94 -0
- package/src/kernel/config/index.ts +35 -0
- package/src/kernel/config/paths.ts +39 -0
- package/src/kernel/config/readConfig.test.ts +245 -0
- package/src/kernel/config/readConfig.ts +94 -0
- package/src/kernel/config/schema.ts +56 -0
- package/src/kernel/config/types.ts +106 -0
- package/src/kernel/config/writeConfigField.ts +82 -0
- package/src/kernel/error/PragmaError.test.ts +119 -0
- package/src/kernel/error/PragmaError.ts +182 -0
- package/src/kernel/error/constants.ts +38 -0
- package/src/kernel/error/fromTaskError.test.ts +83 -0
- package/src/kernel/error/fromTaskError.ts +80 -0
- package/src/kernel/error/index.ts +23 -0
- package/src/kernel/error/recovery.test.ts +60 -0
- package/src/kernel/error/recovery.ts +49 -0
- package/src/kernel/error/renderError.ts +101 -0
- package/src/kernel/error/serialize.ts +28 -0
- package/src/kernel/error/types.ts +62 -0
- package/src/kernel/packs/collect.test.ts +138 -0
- package/src/kernel/packs/collect.ts +108 -0
- package/src/kernel/packs/compile.test.ts +229 -0
- package/src/kernel/packs/compile.ts +315 -0
- package/src/kernel/packs/disclosure.test.ts +200 -0
- package/src/kernel/packs/disclosure.ts +98 -0
- package/src/kernel/packs/glob.ts +39 -0
- package/src/kernel/packs/graphql/buildLookupDocument.ts +397 -0
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +217 -0
- package/src/kernel/packs/graphql/nameMap.ts +67 -0
- package/src/kernel/packs/graphqlSource.test.ts +383 -0
- package/src/kernel/packs/iri.ts +78 -0
- package/src/kernel/packs/renderPack.ts +196 -0
- package/src/kernel/packs/resolveEntity.ts +232 -0
- package/src/kernel/packs/runBodies.ts +157 -0
- package/src/kernel/packs/sample.ts +60 -0
- package/src/kernel/packs/schema.ts +328 -0
- package/src/kernel/packs/sparql/applyFilters.ts +83 -0
- package/src/kernel/packs/sparql/applySearch.ts +33 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +180 -0
- package/src/kernel/packs/sparql/escape.ts +22 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +80 -0
- package/src/kernel/packs/sparql/runSelect.ts +84 -0
- package/src/kernel/packs/toolDescription.test.ts +81 -0
- package/src/kernel/packs/types.ts +337 -0
- package/src/kernel/packs/uniqueness.ts +35 -0
- package/src/kernel/project/cli/buildProgram.test.ts +387 -0
- package/src/kernel/project/cli/buildProgram.ts +280 -0
- package/src/kernel/project/cli/dispatch.test.ts +288 -0
- package/src/kernel/project/cli/dispatch.ts +334 -0
- package/src/kernel/project/cli/exitCodes.test.ts +59 -0
- package/src/kernel/project/cli/exitCodes.ts +68 -0
- package/src/kernel/project/cli/globalFlags.test.ts +99 -0
- package/src/kernel/project/cli/globalFlags.ts +149 -0
- package/src/kernel/project/cli/helpFormat.ts +58 -0
- package/src/kernel/project/cli/index.ts +21 -0
- package/src/kernel/project/cli/interactionSeam.test.ts +99 -0
- package/src/kernel/project/cli/rootHelp.ts +218 -0
- package/src/kernel/project/cli/suggest.test.ts +54 -0
- package/src/kernel/project/cli/suggest.ts +67 -0
- package/src/kernel/project/cli/suggestNames.ts +122 -0
- package/src/kernel/project/cli/verbHelp.test.ts +138 -0
- package/src/kernel/project/cli/verbHelp.ts +144 -0
- package/src/kernel/project/mcp/buildServer.ts +70 -0
- package/src/kernel/project/mcp/envelope.ts +44 -0
- package/src/kernel/project/mcp/index.ts +8 -0
- package/src/kernel/project/mcp/instructions.ts +48 -0
- package/src/kernel/project/mcp/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +96 -0
- package/src/kernel/project/mcp/prompts/provider.ts +74 -0
- package/src/kernel/project/mcp/prompts/source.ts +194 -0
- package/src/kernel/project/mcp/registerVerb.test.ts +238 -0
- package/src/kernel/project/mcp/registerVerb.ts +296 -0
- package/src/kernel/project/mcp/serve.ts +34 -0
- package/src/kernel/project/mcp/toolDescriptions.test.ts +80 -0
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +127 -0
- package/src/kernel/render/compactUri.ts +25 -0
- package/src/kernel/render/contracts.ts +72 -0
- package/src/kernel/render/disclosure.ts +44 -0
- package/src/kernel/render/envelope.ts +50 -0
- package/src/kernel/render/formatters.ts +30 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +171 -0
- package/src/kernel/render/renderers.ts +429 -0
- package/src/kernel/render/writeStdout.test.ts +43 -0
- package/src/kernel/render/writeStdout.ts +49 -0
- package/src/kernel/runtime/boot.test.ts +69 -0
- package/src/kernel/runtime/boot.ts +59 -0
- package/src/kernel/runtime/facade.test.ts +125 -0
- package/src/kernel/runtime/facade.ts +47 -0
- package/src/kernel/runtime/graphpack/build.ts +148 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +229 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +8 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +4 -0
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +39 -0
- package/src/kernel/runtime/graphpack/embedded.ts +70 -0
- package/src/kernel/runtime/graphpack/graphpack.test.ts +153 -0
- package/src/kernel/runtime/graphpack/hash.ts +46 -0
- package/src/kernel/runtime/graphpack/index.ts +21 -0
- package/src/kernel/runtime/graphpack/manifest.ts +55 -0
- package/src/kernel/runtime/graphpack/read.ts +102 -0
- package/src/kernel/runtime/graphpack/types.ts +111 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +56 -0
- package/src/kernel/runtime/lock.ts +90 -0
- package/src/kernel/runtime/paths.ts +37 -0
- package/src/kernel/runtime/probe.test.ts +16 -0
- package/src/kernel/runtime/probe.ts +39 -0
- package/src/kernel/runtime/readEntity.ts +83 -0
- package/src/kernel/runtime/refs/gitOps.ts +88 -0
- package/src/kernel/runtime/refs/parseRef.test.ts +34 -0
- package/src/kernel/runtime/refs/parseRef.ts +103 -0
- package/src/kernel/runtime/refs/resolve.ts +320 -0
- package/src/kernel/runtime/resolveSources.test.ts +154 -0
- package/src/kernel/runtime/resolveSources.ts +66 -0
- package/src/kernel/runtime/store.test.ts +94 -0
- package/src/kernel/runtime/store.ts +90 -0
- package/src/kernel/runtime/storeless.test.ts +86 -0
- package/src/kernel/runtime/types.ts +210 -0
- package/src/kernel/runtime/wasmEmbed.test.ts +142 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +223 -0
- package/src/kernel/spec/index.ts +34 -0
- package/src/kernel/spec/surfaceConformance.test.ts +94 -0
- package/src/kernel/spec/surfaceConformance.ts +135 -0
- package/src/kernel/spec/types.ts +233 -0
- package/src/kernel/spec/validate.test.ts +81 -0
- package/src/kernel/spec/validate.ts +125 -0
- package/src/testing/PARITY_GAPS.test.ts +32 -0
- package/src/testing/PARITY_GAPS.ts +179 -0
- package/src/testing/behavioral/README.md +164 -0
- package/src/testing/behavioral/agentSession.mcp.test.ts +160 -0
- package/src/testing/behavioral/autoLlm.e2e.test.ts +44 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +103 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +123 -0
- package/src/testing/behavioral/exitCodes.e2e.test.ts +53 -0
- package/src/testing/behavioral/firstRun.e2e.test.ts +40 -0
- package/src/testing/behavioral/harness.foundation.test.ts +136 -0
- package/src/testing/behavioral/journeys.cli.test.ts +129 -0
- package/src/testing/behavioral/liveReadSurface.ts +80 -0
- package/src/testing/behavioral/mcpServe.e2e.test.ts +21 -0
- package/src/testing/behavioral/mcpSurface.test.ts +139 -0
- package/src/testing/behavioral/parity.test.ts +224 -0
- package/src/testing/behavioral/rootCli.e2e.test.ts +62 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +201 -0
- package/src/testing/eval/cases/assembly.ts +195 -0
- package/src/testing/eval/cases/effectful.ts +245 -0
- package/src/testing/eval/cases/readNouns.ts +232 -0
- package/src/testing/eval/cases/stable.ts +163 -0
- package/src/testing/eval/eval.test.ts +74 -0
- package/src/testing/eval/harness.ts +91 -0
- package/src/testing/eval/report.ts +58 -0
- package/src/testing/fixtures/blockGraph.ts +112 -0
- package/src/testing/fixtures/completionFixture.ts +239 -0
- package/src/testing/fixtures/fixtureCapability.ts +175 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -0
- package/src/testing/helpers/fixtureGraph.ts +148 -0
- package/src/testing/helpers/golden.ts +45 -0
- package/src/testing/helpers/packRuntime.ts +118 -0
- package/src/testing/helpers/parity.ts +86 -0
- package/src/testing/helpers/projectCli.ts +35 -0
- package/src/testing/helpers/projectMcp.ts +145 -0
- package/src/testing/helpers/runCli.ts +128 -0
- package/src/testing/perf/budgets.test.ts +164 -0
- package/src/testing/perf/budgets.ts +37 -0
- package/src/testing/perf/globalSetup.ts +30 -0
- package/src/testing/perf/measure.ts +97 -0
- package/src/testing/setupXdgIsolation.ts +13 -12
- package/src/types.ts +42 -0
- package/README.md +0 -458
- package/src/bin.test.ts +0 -54
- package/src/compile-validation.runner.ts +0 -137
- package/src/compile-validation.ts +0 -191
- package/src/completions/computeSocketPath.test.ts +0 -26
- package/src/completions/computeSocketPath.ts +0 -16
- package/src/completions/constants.ts +0 -25
- package/src/completions/handleQuery.test.ts +0 -125
- package/src/completions/handleQuery.ts +0 -49
- package/src/completions/index.ts +0 -14
- package/src/completions/queryCompletions.test.ts +0 -105
- package/src/completions/queryCompletions.ts +0 -75
- package/src/completions/querySocket.test.ts +0 -101
- package/src/completions/querySocket.ts +0 -71
- package/src/completions/startCompletionsServer.test.ts +0 -74
- package/src/completions/startCompletionsServer.ts +0 -75
- package/src/completions/startCompletionsServer.unit.test.ts +0 -131
- package/src/completions/waitForSocket.test.ts +0 -27
- package/src/completions/waitForSocket.ts +0 -27
- package/src/config/configExists.ts +0 -14
- package/src/config/defaultConfig.test.ts +0 -33
- package/src/config/defaultConfig.ts +0 -59
- package/src/config/defaults.json +0 -17
- package/src/config/findProjectConfigPath.test.ts +0 -53
- package/src/config/findProjectConfigPath.ts +0 -36
- package/src/config/index.ts +0 -21
- package/src/config/mergeConfigFileUpdate.ts +0 -58
- package/src/config/parseConfigValues.ts +0 -217
- package/src/config/readConfig.test.ts +0 -395
- package/src/config/readConfig.ts +0 -21
- package/src/config/readConfigLayers.test.ts +0 -109
- package/src/config/readConfigLayers.ts +0 -118
- package/src/config/resolveConfigPath.test.ts +0 -20
- package/src/config/resolveConfigPath.ts +0 -11
- package/src/config/resolveGlobalConfigPath.ts +0 -13
- package/src/config/resolveWriteConfigPath.test.ts +0 -53
- package/src/config/resolveWriteConfigPath.ts +0 -31
- package/src/config/types.ts +0 -128
- package/src/config/writeConfig.ts +0 -37
- package/src/domains/block/blockConfig.ts +0 -97
- package/src/domains/block/commands/index.ts +0 -5
- package/src/domains/block/commands/list.test.ts +0 -111
- package/src/domains/block/commands/list.ts +0 -11
- package/src/domains/block/commands/lookup.test.ts +0 -187
- package/src/domains/block/commands/lookup.ts +0 -14
- package/src/domains/block/commands/sample.ts +0 -56
- package/src/domains/block/formatters/index.ts +0 -5
- package/src/domains/block/formatters/list.test.ts +0 -107
- package/src/domains/block/formatters/list.ts +0 -50
- package/src/domains/block/formatters/lookup.test.ts +0 -318
- package/src/domains/block/formatters/lookup.ts +0 -149
- package/src/domains/block/formatters/sample.ts +0 -21
- package/src/domains/block/formatters/types.ts +0 -16
- package/src/domains/block/helpers/index.ts +0 -4
- package/src/domains/block/helpers/resolveAspects.test.ts +0 -64
- package/src/domains/block/helpers/resolveAspects.ts +0 -35
- package/src/domains/block/index.ts +0 -25
- package/src/domains/block/mcp/index.ts +0 -2
- package/src/domains/block/mcp/specs.ts +0 -67
- package/src/domains/block/operations/index.ts +0 -5
- package/src/domains/block/operations/list.test.ts +0 -80
- package/src/domains/block/operations/list.ts +0 -72
- package/src/domains/block/operations/lookup.test.ts +0 -129
- package/src/domains/block/operations/lookup.ts +0 -446
- package/src/domains/block/operations/sample.ts +0 -41
- package/src/domains/block/orchestration/blockEmptyError.test.ts +0 -26
- package/src/domains/block/orchestration/blockEmptyError.ts +0 -19
- package/src/domains/block/orchestration/buildBlockFilters.ts +0 -12
- package/src/domains/block/orchestration/enrichBlocks.ts +0 -44
- package/src/domains/block/orchestration/index.ts +0 -5
- package/src/domains/block/orchestration/resolveBlockList.ts +0 -39
- package/src/domains/block/orchestration/resolveBlockLookup.ts +0 -35
- package/src/domains/block/stories.test.ts +0 -28
- package/src/domains/block/stories.ts +0 -260
- package/src/domains/block/types.ts +0 -30
- package/src/domains/config/commands/channel.test.ts +0 -128
- package/src/domains/config/commands/channel.ts +0 -99
- package/src/domains/config/commands/configScope.ts +0 -46
- package/src/domains/config/commands/framework.test.ts +0 -119
- package/src/domains/config/commands/framework.ts +0 -103
- package/src/domains/config/commands/index.ts +0 -6
- package/src/domains/config/commands/show.test.ts +0 -61
- package/src/domains/config/commands/show.ts +0 -11
- package/src/domains/config/commands/tier.test.ts +0 -102
- package/src/domains/config/commands/tier.ts +0 -97
- package/src/domains/config/commands/trace.test.ts +0 -165
- package/src/domains/config/commands/trace.ts +0 -83
- package/src/domains/config/formatters/channel.test.ts +0 -70
- package/src/domains/config/formatters/channel.ts +0 -37
- package/src/domains/config/formatters/framework.ts +0 -37
- package/src/domains/config/formatters/index.ts +0 -6
- package/src/domains/config/formatters/show.test.ts +0 -153
- package/src/domains/config/formatters/show.ts +0 -89
- package/src/domains/config/formatters/tier.test.ts +0 -86
- package/src/domains/config/formatters/tier.ts +0 -48
- package/src/domains/config/formatters/trace.ts +0 -28
- package/src/domains/config/index.ts +0 -36
- package/src/domains/config/mcp/index.ts +0 -2
- package/src/domains/config/mcp/specs.ts +0 -100
- package/src/domains/config/operations/index.ts +0 -6
- package/src/domains/config/operations/show.test.ts +0 -78
- package/src/domains/config/operations/show.ts +0 -48
- package/src/domains/config/operations/types.ts +0 -20
- package/src/domains/config/operations/validateChannel.test.ts +0 -36
- package/src/domains/config/operations/validateChannel.ts +0 -24
- package/src/domains/config/operations/validateFramework.ts +0 -24
- package/src/domains/config/operations/validateTier.test.ts +0 -65
- package/src/domains/config/operations/validateTier.ts +0 -43
- package/src/domains/config/stories.ts +0 -42
- package/src/domains/config/tasks/index.ts +0 -6
- package/src/domains/config/tasks/setChannel.ts +0 -21
- package/src/domains/config/tasks/setFramework.ts +0 -21
- package/src/domains/config/tasks/setTier.ts +0 -20
- package/src/domains/config/tasks/setTrace.ts +0 -20
- package/src/domains/config/tasks/writeConfigField.ts +0 -41
- package/src/domains/create/generatorPack/bundled.ts +0 -49
- package/src/domains/create/generatorPack/compileGeneratorPack.test.ts +0 -159
- package/src/domains/create/generatorPack/compileGeneratorPack.ts +0 -312
- package/src/domains/create/index.ts +0 -21
- package/src/domains/create/mcp/index.ts +0 -2
- package/src/domains/create/mcp/specs.ts +0 -13
- package/src/domains/create/renderGeneratorUi.test.ts +0 -103
- package/src/domains/create/renderGeneratorUi.ts +0 -65
- package/src/domains/doctor/commands/doctor.test.ts +0 -75
- package/src/domains/doctor/commands/doctor.ts +0 -43
- package/src/domains/doctor/commands/index.ts +0 -2
- package/src/domains/doctor/formatters/doctor.test.ts +0 -165
- package/src/domains/doctor/formatters/doctor.ts +0 -136
- package/src/domains/doctor/formatters/index.ts +0 -2
- package/src/domains/doctor/index.ts +0 -9
- package/src/domains/doctor/mcp/index.ts +0 -2
- package/src/domains/doctor/mcp/specs.ts +0 -41
- package/src/domains/doctor/operations/checks/checkConfigFile.ts +0 -42
- package/src/domains/doctor/operations/checks/checkKeStore.ts +0 -38
- package/src/domains/doctor/operations/checks/checkMcpCommands.ts +0 -133
- package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +0 -65
- package/src/domains/doctor/operations/checks/checkNodeVersion.ts +0 -25
- package/src/domains/doctor/operations/checks/checkPackageRefs.ts +0 -76
- package/src/domains/doctor/operations/checks/checkPragmaVersion.ts +0 -20
- package/src/domains/doctor/operations/checks/checkShellCompletions.ts +0 -42
- package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +0 -64
- package/src/domains/doctor/operations/checks/index.ts +0 -10
- package/src/domains/doctor/operations/checks.test.ts +0 -307
- package/src/domains/doctor/operations/index.ts +0 -3
- package/src/domains/doctor/operations/runChecks.test.ts +0 -176
- package/src/domains/doctor/operations/runChecks.ts +0 -78
- package/src/domains/doctor/operations/types.ts +0 -42
- package/src/domains/graph/commands/index.ts +0 -4
- package/src/domains/graph/commands/inspect.test.ts +0 -94
- package/src/domains/graph/commands/inspect.ts +0 -63
- package/src/domains/graph/commands/query.test.ts +0 -94
- package/src/domains/graph/commands/query.ts +0 -60
- package/src/domains/graph/formatters/index.ts +0 -4
- package/src/domains/graph/formatters/inspect.ts +0 -50
- package/src/domains/graph/formatters/query.test.ts +0 -87
- package/src/domains/graph/formatters/query.ts +0 -74
- package/src/domains/graph/helpers/index.ts +0 -3
- package/src/domains/graph/helpers/resolveUri.test.ts +0 -50
- package/src/domains/graph/helpers/resolveUri.ts +0 -77
- package/src/domains/graph/index.ts +0 -22
- package/src/domains/graph/mcp/index.ts +0 -2
- package/src/domains/graph/mcp/specs.ts +0 -82
- package/src/domains/graph/operations/executeQuery.test.ts +0 -68
- package/src/domains/graph/operations/executeQuery.ts +0 -32
- package/src/domains/graph/operations/index.ts +0 -4
- package/src/domains/graph/operations/inspectUri.test.ts +0 -101
- package/src/domains/graph/operations/inspectUri.ts +0 -64
- package/src/domains/graphql/commands/build.test.ts +0 -196
- package/src/domains/graphql/commands/build.ts +0 -117
- package/src/domains/graphql/commands/check.test.ts +0 -141
- package/src/domains/graphql/commands/check.ts +0 -81
- package/src/domains/graphql/commands/index.ts +0 -5
- package/src/domains/graphql/commands/serve.test.ts +0 -46
- package/src/domains/graphql/commands/serve.ts +0 -141
- package/src/domains/graphql/constants.ts +0 -10
- package/src/domains/graphql/formatters/index.ts +0 -3
- package/src/domains/graphql/formatters/report.ts +0 -78
- package/src/domains/graphql/helpers/gatherSources.test.ts +0 -92
- package/src/domains/graphql/helpers/gatherSources.ts +0 -58
- package/src/domains/graphql/helpers/index.ts +0 -6
- package/src/domains/graphql/helpers/parsePrefixes.test.ts +0 -44
- package/src/domains/graphql/helpers/parsePrefixes.ts +0 -38
- package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +0 -65
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -66
- package/src/domains/graphql/helpers/routeGraphql.test.ts +0 -43
- package/src/domains/graphql/helpers/routeGraphql.ts +0 -28
- package/src/domains/graphql/index.ts +0 -24
- package/src/domains/graphql/operations/compileSchema.test.ts +0 -95
- package/src/domains/graphql/operations/compileSchema.ts +0 -107
- package/src/domains/graphql/operations/createSchemaServer.test.ts +0 -50
- package/src/domains/graphql/operations/createSchemaServer.ts +0 -75
- package/src/domains/graphql/operations/ensureSchemaArtifact.test.ts +0 -167
- package/src/domains/graphql/operations/ensureSchemaArtifact.ts +0 -178
- package/src/domains/graphql/operations/index.ts +0 -17
- package/src/domains/graphql/types.ts +0 -29
- package/src/domains/info/commands/index.ts +0 -4
- package/src/domains/info/commands/info.test.ts +0 -88
- package/src/domains/info/commands/info.ts +0 -47
- package/src/domains/info/commands/upgrade.test.ts +0 -183
- package/src/domains/info/commands/upgrade.ts +0 -153
- package/src/domains/info/constants.test.ts +0 -22
- package/src/domains/info/constants.ts +0 -15
- package/src/domains/info/formatters/index.ts +0 -8
- package/src/domains/info/formatters/info.test.ts +0 -207
- package/src/domains/info/formatters/info.ts +0 -131
- package/src/domains/info/formatters/upgrade.test.ts +0 -136
- package/src/domains/info/formatters/upgrade.ts +0 -70
- package/src/domains/info/index.ts +0 -9
- package/src/domains/info/mcp/index.ts +0 -2
- package/src/domains/info/mcp/specs.ts +0 -65
- package/src/domains/info/operations/checkRegistryVersion.test.ts +0 -124
- package/src/domains/info/operations/checkRegistryVersion.ts +0 -45
- package/src/domains/info/operations/collectEntityCounts.test.ts +0 -156
- package/src/domains/info/operations/collectEntityCounts.ts +0 -123
- package/src/domains/info/operations/collectInfo.test.ts +0 -122
- package/src/domains/info/operations/collectInfo.ts +0 -94
- package/src/domains/info/operations/collectStoreSummary.test.ts +0 -61
- package/src/domains/info/operations/collectStoreSummary.ts +0 -42
- package/src/domains/info/operations/index.ts +0 -6
- package/src/domains/info/types.test-d.ts +0 -35
- package/src/domains/info/types.ts +0 -67
- package/src/domains/llm/capabilities.test.ts +0 -111
- package/src/domains/llm/commands/capabilities.ts +0 -37
- package/src/domains/llm/commands/index.ts +0 -4
- package/src/domains/llm/commands/llm.ts +0 -41
- package/src/domains/llm/data/commandReference.ts +0 -106
- package/src/domains/llm/data/decisionTrees.ts +0 -55
- package/src/domains/llm/data/index.ts +0 -6
- package/src/domains/llm/data/toolCatalog.ts +0 -221
- package/src/domains/llm/formatters/capabilities.ts +0 -50
- package/src/domains/llm/formatters/index.ts +0 -4
- package/src/domains/llm/formatters/orientation.ts +0 -57
- package/src/domains/llm/index.ts +0 -9
- package/src/domains/llm/llmCommand.test.ts +0 -101
- package/src/domains/llm/mcp/index.ts +0 -2
- package/src/domains/llm/mcp/specs.ts +0 -93
- package/src/domains/llm/operations/collectContext.test.ts +0 -64
- package/src/domains/llm/operations/collectContext.ts +0 -37
- package/src/domains/llm/operations/index.ts +0 -3
- package/src/domains/llm/types.ts +0 -72
- package/src/domains/modifier/commands/index.ts +0 -5
- package/src/domains/modifier/commands/list.test.ts +0 -57
- package/src/domains/modifier/commands/list.ts +0 -9
- package/src/domains/modifier/commands/lookup.test.ts +0 -91
- package/src/domains/modifier/commands/lookup.ts +0 -14
- package/src/domains/modifier/commands/sample.ts +0 -54
- package/src/domains/modifier/formatters/index.ts +0 -8
- package/src/domains/modifier/formatters/list.test.ts +0 -38
- package/src/domains/modifier/formatters/list.ts +0 -22
- package/src/domains/modifier/formatters/lookup.test.ts +0 -33
- package/src/domains/modifier/formatters/lookup.ts +0 -50
- package/src/domains/modifier/formatters/sample.ts +0 -15
- package/src/domains/modifier/index.ts +0 -27
- package/src/domains/modifier/mcp/index.ts +0 -2
- package/src/domains/modifier/mcp/specs.ts +0 -65
- package/src/domains/modifier/modifierConfig.ts +0 -36
- package/src/domains/modifier/operations/index.ts +0 -5
- package/src/domains/modifier/operations/list.test.ts +0 -39
- package/src/domains/modifier/operations/list.ts +0 -41
- package/src/domains/modifier/operations/lookup.test.ts +0 -37
- package/src/domains/modifier/operations/lookup.ts +0 -69
- package/src/domains/modifier/operations/sample.ts +0 -32
- package/src/domains/modifier/orchestration/index.ts +0 -3
- package/src/domains/modifier/orchestration/modifierEmptyError.test.ts +0 -26
- package/src/domains/modifier/orchestration/modifierEmptyError.ts +0 -15
- package/src/domains/modifier/orchestration/resolveModifierList.ts +0 -16
- package/src/domains/modifier/orchestration/resolveModifierLookup.ts +0 -33
- package/src/domains/modifier/stories.test.ts +0 -20
- package/src/domains/modifier/stories.ts +0 -86
- package/src/domains/modifier/types.ts +0 -5
- package/src/domains/ontology/commands/index.ts +0 -4
- package/src/domains/ontology/commands/list.test.ts +0 -84
- package/src/domains/ontology/commands/list.ts +0 -11
- package/src/domains/ontology/commands/show.test.ts +0 -179
- package/src/domains/ontology/commands/show.ts +0 -14
- package/src/domains/ontology/formatters/index.ts +0 -5
- package/src/domains/ontology/formatters/list.ts +0 -64
- package/src/domains/ontology/formatters/show.ts +0 -396
- package/src/domains/ontology/helpers/buildClassTree.ts +0 -89
- package/src/domains/ontology/helpers/completeClassNames.ts +0 -43
- package/src/domains/ontology/helpers/expandOntologyIris.ts +0 -79
- package/src/domains/ontology/helpers/findNamespace.ts +0 -23
- package/src/domains/ontology/helpers/index.ts +0 -21
- package/src/domains/ontology/helpers/queryClasses.ts +0 -66
- package/src/domains/ontology/helpers/queryProperties.ts +0 -90
- package/src/domains/ontology/helpers/queryTboxFacts.ts +0 -160
- package/src/domains/ontology/helpers/resolvePrefix.ts +0 -45
- package/src/domains/ontology/index.ts +0 -26
- package/src/domains/ontology/mcp/index.ts +0 -2
- package/src/domains/ontology/mcp/specs.ts +0 -16
- package/src/domains/ontology/operations/index.ts +0 -5
- package/src/domains/ontology/operations/listOntologies.test.ts +0 -122
- package/src/domains/ontology/operations/listOntologies.ts +0 -197
- package/src/domains/ontology/operations/showOntology.test.ts +0 -184
- package/src/domains/ontology/operations/showOntology.ts +0 -323
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -41
- package/src/domains/ontology/operations/showOntologyRaw.ts +0 -50
- package/src/domains/ontology/stories.test.ts +0 -36
- package/src/domains/ontology/stories.ts +0 -153
- package/src/domains/refs/commands/updateRefs.ts +0 -52
- package/src/domains/refs/formatters/updateRefs.ts +0 -27
- package/src/domains/refs/index.ts +0 -27
- package/src/domains/refs/operations/gitOps.test.ts +0 -155
- package/src/domains/refs/operations/gitOps.ts +0 -92
- package/src/domains/refs/operations/index.ts +0 -10
- package/src/domains/refs/operations/parseRef.test.ts +0 -157
- package/src/domains/refs/operations/parseRef.ts +0 -114
- package/src/domains/refs/operations/paths.test.ts +0 -98
- package/src/domains/refs/operations/paths.ts +0 -91
- package/src/domains/refs/operations/readGlobalRefs.test.ts +0 -63
- package/src/domains/refs/operations/readGlobalRefs.ts +0 -37
- package/src/domains/refs/operations/updateRefs.test.ts +0 -167
- package/src/domains/refs/operations/updateRefs.ts +0 -180
- package/src/domains/setup/commands/all.ts +0 -58
- package/src/domains/setup/commands/completions.ts +0 -85
- package/src/domains/setup/commands/entrypoints.test.ts +0 -170
- package/src/domains/setup/commands/index.ts +0 -7
- package/src/domains/setup/commands/lsp.ts +0 -49
- package/src/domains/setup/commands/mcp.ts +0 -119
- package/src/domains/setup/commands/setup.ts +0 -70
- package/src/domains/setup/commands/skills.test.ts +0 -68
- package/src/domains/setup/commands/skills.ts +0 -110
- package/src/domains/setup/formatters/index.ts +0 -2
- package/src/domains/setup/formatters/skills.test.ts +0 -103
- package/src/domains/setup/formatters/skills.ts +0 -112
- package/src/domains/setup/formatters/types.ts +0 -7
- package/src/domains/setup/helpers/completionScripts.test.ts +0 -58
- package/src/domains/setup/helpers/completionScripts.ts +0 -92
- package/src/domains/setup/helpers/constants.ts +0 -2
- package/src/domains/setup/helpers/detectShell.test.ts +0 -48
- package/src/domains/setup/helpers/detectShell.ts +0 -20
- package/src/domains/setup/helpers/index.ts +0 -12
- package/src/domains/setup/helpers/runSetupTask.test.ts +0 -277
- package/src/domains/setup/helpers/runSetupTask.ts +0 -221
- package/src/domains/setup/index.ts +0 -37
- package/src/domains/setup/operations/index.ts +0 -6
- package/src/domains/setup/operations/setupAll.test.ts +0 -48
- package/src/domains/setup/operations/setupAll.ts +0 -41
- package/src/domains/setup/operations/setupCompletions.test.ts +0 -94
- package/src/domains/setup/operations/setupCompletions.ts +0 -54
- package/src/domains/setup/operations/setupLsp.test.ts +0 -30
- package/src/domains/setup/operations/setupLsp.ts +0 -22
- package/src/domains/setup/operations/setupMcp.test.ts +0 -120
- package/src/domains/setup/operations/setupMcp.ts +0 -108
- package/src/domains/setup/operations/setupSkills.test.ts +0 -191
- package/src/domains/setup/operations/setupSkills.ts +0 -160
- package/src/domains/setup/types.ts +0 -18
- package/src/domains/shared/ToolSpec.ts +0 -49
- package/src/domains/shared/bootStore.bareCore.test.ts +0 -63
- package/src/domains/shared/bootStore.test.ts +0 -82
- package/src/domains/shared/bootStore.ts +0 -171
- package/src/domains/shared/buildQuery.ts +0 -18
- package/src/domains/shared/compactUri.test.ts +0 -32
- package/src/domains/shared/compactUri.ts +0 -21
- package/src/domains/shared/context.ts +0 -16
- package/src/domains/shared/contracts.ts +0 -164
- package/src/domains/shared/createInteractivePromptSession.test.ts +0 -439
- package/src/domains/shared/createInteractivePromptSession.ts +0 -236
- package/src/domains/shared/emptyErrorRecovery.test.ts +0 -106
- package/src/domains/shared/extractLocalName.test.ts +0 -21
- package/src/domains/shared/extractLocalName.ts +0 -14
- package/src/domains/shared/filters/buildChannelFilter.test.ts +0 -52
- package/src/domains/shared/filters/buildChannelFilter.ts +0 -41
- package/src/domains/shared/filters/buildFilterConfig.ts +0 -15
- package/src/domains/shared/filters/buildFilters.test.ts +0 -33
- package/src/domains/shared/filters/buildFilters.ts +0 -30
- package/src/domains/shared/filters/buildTierFilter.test.ts +0 -78
- package/src/domains/shared/filters/buildTierFilter.ts +0 -69
- package/src/domains/shared/filters/describeFilters.ts +0 -14
- package/src/domains/shared/filters/index.ts +0 -10
- package/src/domains/shared/formatters.ts +0 -103
- package/src/domains/shared/listTiers.ts +0 -40
- package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
- package/src/domains/shared/loaders/bundledLoader.ts +0 -254
- package/src/domains/shared/loaders/gitLoader.ts +0 -30
- package/src/domains/shared/loaders/index.ts +0 -9
- package/src/domains/shared/loaders/localLoader.ts +0 -71
- package/src/domains/shared/loaders/readPackageDir.test.ts +0 -58
- package/src/domains/shared/loaders/readPackageDir.ts +0 -185
- package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +0 -84
- package/src/domains/shared/loaders/storyAssetsPlugin.ts +0 -46
- package/src/domains/shared/lookupMany.test.ts +0 -135
- package/src/domains/shared/lookupMany.ts +0 -101
- package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
- package/src/domains/shared/mergeAndParseRefs.ts +0 -44
- package/src/domains/shared/namespaces.ts +0 -26
- package/src/domains/shared/packages.ts +0 -20
- package/src/domains/shared/parseSampleCount.test.ts +0 -47
- package/src/domains/shared/parseSampleCount.ts +0 -45
- package/src/domains/shared/pickRandom.ts +0 -22
- package/src/domains/shared/prefixes.test.ts +0 -211
- package/src/domains/shared/prefixes.ts +0 -204
- package/src/domains/shared/renderers.ts +0 -410
- package/src/domains/shared/resolveConfiguredGraphs.test.ts +0 -27
- package/src/domains/shared/resolveConfiguredGraphs.ts +0 -41
- package/src/domains/shared/resolveLookupExitCode.test.ts +0 -48
- package/src/domains/shared/resolveLookupExitCode.ts +0 -42
- package/src/domains/shared/runtime.ts +0 -61
- package/src/domains/shared/sampleFormatters.ts +0 -47
- package/src/domains/shared/semanticPackage.test.ts +0 -89
- package/src/domains/shared/semanticPackage.ts +0 -127
- package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
- package/src/domains/shared/stories/compileLookupCommand.ts +0 -102
- package/src/domains/shared/stories/compileLookupTool.test.ts +0 -105
- package/src/domains/shared/stories/compileLookupTool.ts +0 -96
- package/src/domains/shared/stories/compileReadCommand.test.ts +0 -121
- package/src/domains/shared/stories/compileReadCommand.ts +0 -48
- package/src/domains/shared/stories/compileReadTool.test.ts +0 -64
- package/src/domains/shared/stories/compileReadTool.ts +0 -38
- package/src/domains/shared/stories/condense.test.ts +0 -18
- package/src/domains/shared/stories/condense.ts +0 -15
- package/src/domains/shared/stories/index.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.test.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.ts +0 -22
- package/src/domains/shared/stories/pack/applyPackFilters.test.ts +0 -151
- package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -111
- package/src/domains/shared/stories/pack/applyPackSearch.test.ts +0 -57
- package/src/domains/shared/stories/pack/applyPackSearch.ts +0 -41
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -81
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -154
- package/src/domains/shared/stories/pack/bundled/index.ts +0 -23
- package/src/domains/shared/stories/pack/bundled/standardPack.ts +0 -164
- package/src/domains/shared/stories/pack/bundled/tierPack.ts +0 -50
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -406
- package/src/domains/shared/stories/pack/collectPackStories.ts +0 -158
- package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -50
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -751
- package/src/domains/shared/stories/pack/compilePackStories.ts +0 -724
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -55
- package/src/domains/shared/stories/pack/index.ts +0 -42
- package/src/domains/shared/stories/pack/reservedVerbs.test.ts +0 -213
- package/src/domains/shared/stories/pack/reservedVerbs.ts +0 -170
- package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
- package/src/domains/shared/stories/pack/standardParity.test.ts +0 -381
- package/src/domains/shared/stories/pack/types.ts +0 -224
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -742
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -859
- package/src/domains/shared/stories/projectCliParameters.test.ts +0 -59
- package/src/domains/shared/stories/projectCliParameters.ts +0 -57
- package/src/domains/shared/stories/projectToolParams.test.ts +0 -50
- package/src/domains/shared/stories/projectToolParams.ts +0 -32
- package/src/domains/shared/stories/requirePragmaContext.test.ts +0 -23
- package/src/domains/shared/stories/requirePragmaContext.ts +0 -23
- package/src/domains/shared/stories/resolveLookupDetailed.test.ts +0 -57
- package/src/domains/shared/stories/resolveLookupDetailed.ts +0 -27
- package/src/domains/shared/stories/types.ts +0 -179
- package/src/domains/shared/suggestions/detectCrossDomain.test.ts +0 -43
- package/src/domains/shared/suggestions/detectCrossDomain.ts +0 -116
- package/src/domains/shared/suggestions/expandGlob.test.ts +0 -92
- package/src/domains/shared/suggestions/expandGlob.ts +0 -52
- package/src/domains/shared/suggestions/expandLookupQueries.ts +0 -57
- package/src/domains/shared/suggestions/index.ts +0 -7
- package/src/domains/shared/suggestions/listDomainNames.ts +0 -61
- package/src/domains/shared/suggestions/suggestNames.test.ts +0 -70
- package/src/domains/shared/suggestions/suggestNames.ts +0 -130
- package/src/domains/shared/types/block.ts +0 -107
- package/src/domains/shared/types/common.ts +0 -33
- package/src/domains/shared/types/graph.ts +0 -17
- package/src/domains/shared/types/index.ts +0 -46
- package/src/domains/shared/types/modifier.ts +0 -22
- package/src/domains/shared/types/ontology.ts +0 -145
- package/src/domains/shared/types/runtime.ts +0 -24
- package/src/domains/shared/types/sample.ts +0 -17
- package/src/domains/shared/types/standard.ts +0 -21
- package/src/domains/shared/types/tier.ts +0 -15
- package/src/domains/shared/types/token.ts +0 -30
- package/src/domains/skill/commands/index.ts +0 -4
- package/src/domains/skill/commands/list.test.ts +0 -115
- package/src/domains/skill/commands/list.ts +0 -11
- package/src/domains/skill/commands/lookup.test.ts +0 -118
- package/src/domains/skill/commands/lookup.ts +0 -14
- package/src/domains/skill/formatters/index.ts +0 -3
- package/src/domains/skill/formatters/list.test.ts +0 -140
- package/src/domains/skill/formatters/list.ts +0 -119
- package/src/domains/skill/formatters/lookup.test.ts +0 -46
- package/src/domains/skill/formatters/lookup.ts +0 -57
- package/src/domains/skill/formatters/types.ts +0 -8
- package/src/domains/skill/helpers/index.ts +0 -6
- package/src/domains/skill/helpers/parseFrontmatter.test.ts +0 -122
- package/src/domains/skill/helpers/parseFrontmatter.ts +0 -112
- package/src/domains/skill/helpers/resolveSkillSources.ts +0 -70
- package/src/domains/skill/index.ts +0 -23
- package/src/domains/skill/mcp/index.ts +0 -2
- package/src/domains/skill/mcp/specs.ts +0 -19
- package/src/domains/skill/operations/discover.test.ts +0 -176
- package/src/domains/skill/operations/discover.ts +0 -59
- package/src/domains/skill/operations/index.ts +0 -5
- package/src/domains/skill/operations/list.test.ts +0 -76
- package/src/domains/skill/operations/list.ts +0 -47
- package/src/domains/skill/operations/lookup.test.ts +0 -91
- package/src/domains/skill/operations/lookup.ts +0 -70
- package/src/domains/skill/stories.test.ts +0 -43
- package/src/domains/skill/stories.ts +0 -103
- package/src/domains/skill/types.ts +0 -33
- package/src/domains/token/commands/add-config.test.ts +0 -68
- package/src/domains/token/commands/add-config.ts +0 -62
- package/src/domains/token/commands/index.ts +0 -6
- package/src/domains/token/commands/list.test.ts +0 -82
- package/src/domains/token/commands/list.ts +0 -54
- package/src/domains/token/commands/lookup.test.ts +0 -133
- package/src/domains/token/commands/lookup.ts +0 -107
- package/src/domains/token/commands/sample.ts +0 -54
- package/src/domains/token/featureFlag.ts +0 -17
- package/src/domains/token/formatters/index.ts +0 -8
- package/src/domains/token/formatters/list.test.ts +0 -37
- package/src/domains/token/formatters/list.ts +0 -24
- package/src/domains/token/formatters/lookup.test.ts +0 -61
- package/src/domains/token/formatters/lookup.ts +0 -107
- package/src/domains/token/formatters/sample.ts +0 -16
- package/src/domains/token/index.ts +0 -45
- package/src/domains/token/mcp/index.ts +0 -2
- package/src/domains/token/mcp/specs.ts +0 -207
- package/src/domains/token/operations/add-config.test.ts +0 -68
- package/src/domains/token/operations/add-config.ts +0 -61
- package/src/domains/token/operations/index.ts +0 -8
- package/src/domains/token/operations/list.test.ts +0 -50
- package/src/domains/token/operations/list.ts +0 -52
- package/src/domains/token/operations/lookup.test.ts +0 -42
- package/src/domains/token/operations/lookup.ts +0 -75
- package/src/domains/token/operations/sample.ts +0 -32
- package/src/domains/token/orchestration/index.ts +0 -3
- package/src/domains/token/orchestration/resolveTokenList.ts +0 -17
- package/src/domains/token/orchestration/resolveTokenLookup.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.test.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.ts +0 -20
- package/src/domains/token/tokenConfig.ts +0 -38
- package/src/domains/token/types.ts +0 -6
- package/src/domains/trace/commands/clear.ts +0 -71
- package/src/domains/trace/commands/index.ts +0 -5
- package/src/domains/trace/commands/resolveTraceLimit.test.ts +0 -31
- package/src/domains/trace/commands/sessions.ts +0 -32
- package/src/domains/trace/commands/show.ts +0 -171
- package/src/domains/trace/formatters/index.ts +0 -9
- package/src/domains/trace/formatters/sessions.ts +0 -80
- package/src/domains/trace/formatters/show.ts +0 -122
- package/src/domains/trace/index.ts +0 -17
- package/src/domains/trace/operations/index.ts +0 -8
- package/src/domains/trace/operations/listSessions.test.ts +0 -55
- package/src/domains/trace/operations/listSessions.ts +0 -52
- package/src/domains/trace/operations/readTraceLog.test.ts +0 -100
- package/src/domains/trace/operations/readTraceLog.ts +0 -104
- package/src/domains/trace/tracePlugin.test.ts +0 -171
- package/src/domains/trace/tracePlugin.ts +0 -159
- package/src/domains/trace/types.ts +0 -65
- package/src/embedWasm.ts +0 -42
- package/src/error/PragmaError.test.ts +0 -121
- package/src/error/PragmaError.ts +0 -177
- package/src/error/constants.ts +0 -12
- package/src/error/index.ts +0 -4
- package/src/error/types.ts +0 -55
- package/src/mcp/createMcpServer.test.ts +0 -41
- package/src/mcp/createMcpServer.ts +0 -53
- package/src/mcp/error/buildRecovery.test.ts +0 -37
- package/src/mcp/error/buildRecovery.ts +0 -17
- package/src/mcp/error/index.ts +0 -12
- package/src/mcp/error/serializeError.test.ts +0 -121
- package/src/mcp/error/serializeError.ts +0 -31
- package/src/mcp/error/serializeErrorPayload.test.ts +0 -38
- package/src/mcp/error/serializeErrorPayload.ts +0 -34
- package/src/mcp/error/types.ts +0 -59
- package/src/mcp/index.ts +0 -15
- package/src/mcp/registerResources.test.ts +0 -566
- package/src/mcp/registerResources.ts +0 -9
- package/src/mcp/resources/buildGraphIndex.ts +0 -167
- package/src/mcp/resources/buildResourceList.test.ts +0 -97
- package/src/mcp/resources/buildResourceList.ts +0 -176
- package/src/mcp/resources/classifyEntity.test.ts +0 -40
- package/src/mcp/resources/classifyEntity.ts +0 -27
- package/src/mcp/resources/constants.ts +0 -105
- package/src/mcp/resources/displayPredicates.ts +0 -62
- package/src/mcp/resources/pickFirstValue.test.ts +0 -29
- package/src/mcp/resources/pickFirstValue.ts +0 -26
- package/src/mcp/resources/pickPrimaryType.test.ts +0 -41
- package/src/mcp/resources/pickPrimaryType.ts +0 -26
- package/src/mcp/resources/rankUriCompletions.test.ts +0 -52
- package/src/mcp/resources/rankUriCompletions.ts +0 -64
- package/src/mcp/resources/readEntity.ts +0 -169
- package/src/mcp/resources/registerResources.ts +0 -126
- package/src/mcp/resources/types.ts +0 -128
- package/src/mcp/runMcpServer.test.ts +0 -66
- package/src/mcp/runMcpServer.ts +0 -24
- package/src/mcp/tools/index.ts +0 -74
- package/src/mcp/tools/registerFromSpec.ts +0 -97
- package/src/mcp/tools/registerTools.test.ts +0 -1277
- package/src/mcp/types.ts +0 -66
- package/src/mcp/utils/estimateTokens.test.ts +0 -14
- package/src/mcp/utils/estimateTokens.ts +0 -9
- package/src/mcp/utils/index.ts +0 -11
- package/src/mcp/utils/wrapTool.test.ts +0 -109
- package/src/mcp/utils/wrapTool.ts +0 -81
- package/src/package-manager/constants.ts +0 -29
- package/src/package-manager/detectInstallSource.test.ts +0 -23
- package/src/package-manager/detectInstallSource.ts +0 -111
- package/src/package-manager/detectLocalInstall.test.ts +0 -16
- package/src/package-manager/detectLocalInstall.ts +0 -43
- package/src/package-manager/detectPackageManager.test.ts +0 -81
- package/src/package-manager/detectPackageManager.ts +0 -30
- package/src/package-manager/index.ts +0 -6
- package/src/package-manager/types.ts +0 -10
- package/src/pipeline/collectCommands.test.ts +0 -187
- package/src/pipeline/collectCommands.ts +0 -75
- package/src/pipeline/constants.ts +0 -14
- package/src/pipeline/createProgram.test.ts +0 -116
- package/src/pipeline/createProgram.ts +0 -89
- package/src/pipeline/firstRun.test.ts +0 -80
- package/src/pipeline/firstRun.ts +0 -99
- package/src/pipeline/formatTerminal.test.ts +0 -43
- package/src/pipeline/formatTerminal.ts +0 -53
- package/src/pipeline/index.ts +0 -22
- package/src/pipeline/mapExitCode.test.ts +0 -41
- package/src/pipeline/mapExitCode.ts +0 -12
- package/src/pipeline/parseGlobalFlags.test.ts +0 -193
- package/src/pipeline/parseGlobalFlags.ts +0 -135
- package/src/pipeline/renderError.test.ts +0 -151
- package/src/pipeline/renderError.ts +0 -129
- package/src/pipeline/resolveCommandKind.test.ts +0 -80
- package/src/pipeline/resolveCommandKind.ts +0 -82
- package/src/pipeline/rootHelp.test.ts +0 -87
- package/src/pipeline/rootHelp.ts +0 -265
- package/src/pipeline/runCli.orchestration.test.ts +0 -435
- package/src/pipeline/runCli.test.ts +0 -83
- package/src/pipeline/runCli.ts +0 -411
- package/src/pipeline/types.ts +0 -17
- package/src/testing/cli.ts +0 -71
- package/src/testing/createTestMcpClient.ts +0 -68
- package/src/testing/dsFixtures.ts +0 -523
- package/src/testing/fixtures/canonical-config.json +0 -4
- package/src/testing/fixtures/canonical.ttl +0 -437
- package/src/testing/fixtures/filtered-config.json +0 -4
- package/src/testing/fixtures.ts +0 -34
- package/src/testing/graphqlFixtures.ts +0 -72
- package/src/testing/helpers/assertParity.ts +0 -28
- package/src/testing/helpers/createTestMcpClient.ts +0 -40
- package/src/testing/helpers/createTestRuntime.ts +0 -67
- package/src/testing/index.ts +0 -22
- package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +0 -1207
- package/src/testing/integration/agent-session.test.ts +0 -148
- package/src/testing/integration/boot.test.ts +0 -105
- package/src/testing/integration/cli-user-stories.test.ts +0 -261
- package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
- package/src/testing/integration/edge-cases.test.ts +0 -275
- package/src/testing/integration/executor-execution.test.ts +0 -103
- package/src/testing/integration/executor-golden.test.ts +0 -145
- package/src/testing/integration/mcp-surface.test.ts +0 -605
- package/src/testing/integration/parity.test.ts +0 -596
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
- package/src/testing/standardParityFixtures.ts +0 -35
- package/src/testing/store.ts +0 -39
- package/src/testing/storyFixtures.ts +0 -63
- package/src/testing/types.ts +0 -20
- package/src/tui/components/BulletList/BulletList.tsx +0 -46
- package/src/tui/components/BulletList/index.ts +0 -2
- package/src/tui/components/BulletList/types.ts +0 -6
- package/src/tui/components/Card/Card.tsx +0 -73
- package/src/tui/components/Card/index.ts +0 -1
- package/src/tui/components/Card/types.ts +0 -12
- package/src/tui/components/CodeBlock/CodeBlock.tsx +0 -37
- package/src/tui/components/CodeBlock/index.ts +0 -2
- package/src/tui/components/CodeBlock/types.ts +0 -6
- package/src/tui/components/DataRow/DataRow.tsx +0 -80
- package/src/tui/components/DataRow/index.ts +0 -2
- package/src/tui/components/DataRow/types.ts +0 -14
- package/src/tui/components/FieldRow/FieldRow.tsx +0 -24
- package/src/tui/components/FieldRow/index.ts +0 -2
- package/src/tui/components/FieldRow/types.ts +0 -10
- package/src/tui/components/HeaderRow/HeaderRow.tsx +0 -32
- package/src/tui/components/HeaderRow/index.ts +0 -2
- package/src/tui/components/HeaderRow/types.ts +0 -8
- package/src/tui/components/MarkdownText/MarkdownText.tsx +0 -19
- package/src/tui/components/MarkdownText/index.ts +0 -2
- package/src/tui/components/MarkdownText/types.ts +0 -4
- package/src/tui/components/MiniTable/MiniTable.tsx +0 -82
- package/src/tui/components/MiniTable/index.ts +0 -2
- package/src/tui/components/MiniTable/types.ts +0 -6
- package/src/tui/components/SectionRenderer/SectionRenderer.tsx +0 -91
- package/src/tui/components/SectionRenderer/index.ts +0 -2
- package/src/tui/components/SectionRenderer/types.ts +0 -15
- package/src/tui/components/TreeView/TreeView.tsx +0 -84
- package/src/tui/components/TreeView/index.ts +0 -2
- package/src/tui/components/TreeView/types.ts +0 -6
- package/src/tui/components/index.ts +0 -19
- package/src/tui/constants.ts +0 -39
- package/src/tui/createListView.ts +0 -23
- package/src/tui/createLookupView.ts +0 -26
- package/src/tui/helpers/computeWidths.ts +0 -53
- package/src/tui/helpers/fitColumns.ts +0 -33
- package/src/tui/helpers/formatMarkdown.ts +0 -19
- package/src/tui/helpers/getTerminalSize.ts +0 -16
- package/src/tui/helpers/index.ts +0 -6
- package/src/tui/helpers/syntaxColor.ts +0 -67
- package/src/tui/helpers/truncateText.ts +0 -12
- package/src/tui/hooks/index.ts +0 -3
- package/src/tui/hooks/types.ts +0 -7
- package/src/tui/hooks/useAutoExit.ts +0 -17
- package/src/tui/hooks/useTerminalSize.ts +0 -19
- package/src/tui/index.ts +0 -15
- package/src/tui/renderInk.tsx +0 -18
- package/src/tui/types.ts +0 -12
- package/src/tui/views/ListView/ListView.tsx +0 -104
- package/src/tui/views/ListView/index.ts +0 -2
- package/src/tui/views/ListView/types.ts +0 -14
- package/src/tui/views/LookupView/LookupView.tsx +0 -244
- package/src/tui/views/LookupView/index.ts +0 -2
- package/src/tui/views/LookupView/types.ts +0 -16
- package/src/tui/views/index.ts +0 -4
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The lazy store — the ONE guarded factory the storeless-guarantee spy targets.
|
|
3
|
+
*
|
|
4
|
+
* `get()` dynamic-imports the heavy session loader, so constructing a runtime —
|
|
5
|
+
* or importing any capability — never pulls ke/ke-graphql/oxigraph. The
|
|
6
|
+
* dispatcher calls `get()` only for `capability.needsStore` verbs, which is what
|
|
7
|
+
* makes the storeless guarantee hold by construction: a storeless verb has no
|
|
8
|
+
* path to the store factory, so `booted` stays false.
|
|
9
|
+
*
|
|
10
|
+
* Memoization WITH invalidation — the store is long-lived (the MCP server boots
|
|
11
|
+
* ONE runtime for its whole lifetime and shares it across every tool call), not
|
|
12
|
+
* one-shot:
|
|
13
|
+
*
|
|
14
|
+
* - A SUCCESSFUL boot is memoized (the session is immutable until invalidated).
|
|
15
|
+
* A REJECTED boot is NOT: a cold store throws STORE_UNAVAILABLE from the
|
|
16
|
+
* loader, and `get()` clears the memo before re-throwing so a later `get()`
|
|
17
|
+
* retries from scratch. This matters precisely because the server is
|
|
18
|
+
* long-lived: an agent that hits STORE_UNAVAILABLE can run `sources update`
|
|
19
|
+
* (which builds the pack on disk) and retry — something DID change to make the
|
|
20
|
+
* retry succeed, so memoizing the rejection would strand the session forever.
|
|
21
|
+
* For a one-shot CLI (a single `get()` per process) clearing the memo on
|
|
22
|
+
* failure is a harmless no-op.
|
|
23
|
+
* - `invalidate()` drops the memoized session so the next `get()` re-boots
|
|
24
|
+
* against the current on-disk pack. Because boot reads config through
|
|
25
|
+
* `ctx.loadConfig` (which is itself memoized upstream), invalidating the store
|
|
26
|
+
* must also drop that config memo — otherwise a re-boot would reuse stale
|
|
27
|
+
* config. `onInvalidate` is the hook the runtime wires for exactly that (it
|
|
28
|
+
* clears the boot-level `configPromise`). The MCP projector calls
|
|
29
|
+
* `invalidate()` after every real mutation so a `config_set`/`sources update`
|
|
30
|
+
* becomes visible to the next read tool.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import type { ConfigLayers } from "../config/types.js";
|
|
34
|
+
import type { LazyStore, StoreSession } from "./types.js";
|
|
35
|
+
|
|
36
|
+
/** What the lazy store needs to boot: a cwd and a memoized config loader. */
|
|
37
|
+
export interface LazyStoreContext {
|
|
38
|
+
readonly cwd: string;
|
|
39
|
+
readonly loadConfig: () => Promise<ConfigLayers>;
|
|
40
|
+
/**
|
|
41
|
+
* Called by `invalidate()` after the store memo is dropped, so the runtime can
|
|
42
|
+
* also drop the sibling caches this store's boot depends on (the memoized
|
|
43
|
+
* config `loadConfig` resolves) — a re-boot must not reuse stale config.
|
|
44
|
+
*/
|
|
45
|
+
readonly onInvalidate?: () => void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Create a lazy store handle.
|
|
50
|
+
*
|
|
51
|
+
* @param ctx - The working directory, memoized config loader, and optional
|
|
52
|
+
* invalidation hook.
|
|
53
|
+
* @returns The lazy store: a `get()` that memoizes a successful boot (never a
|
|
54
|
+
* rejection), a `booted` flag, and an `invalidate()` reset.
|
|
55
|
+
*/
|
|
56
|
+
export function createLazyStore(ctx: LazyStoreContext): LazyStore {
|
|
57
|
+
let session: Promise<StoreSession> | undefined;
|
|
58
|
+
let booted = false;
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
get booted(): boolean {
|
|
62
|
+
return booted;
|
|
63
|
+
},
|
|
64
|
+
get(): Promise<StoreSession> {
|
|
65
|
+
if (session === undefined) {
|
|
66
|
+
session = (async () => {
|
|
67
|
+
try {
|
|
68
|
+
const { loadStoreSession } = await import("./loadSession.js");
|
|
69
|
+
const loaded = await loadStoreSession(ctx);
|
|
70
|
+
booted = true;
|
|
71
|
+
return loaded;
|
|
72
|
+
} catch (err) {
|
|
73
|
+
// Clear the memo BEFORE the rejection propagates (inside the async
|
|
74
|
+
// IIFE, so there is no window where a concurrent caller adopts the
|
|
75
|
+
// rejected promise): the next `get()` retries a fresh boot, which a
|
|
76
|
+
// `sources update` between calls can make succeed.
|
|
77
|
+
session = undefined;
|
|
78
|
+
throw err;
|
|
79
|
+
}
|
|
80
|
+
})();
|
|
81
|
+
}
|
|
82
|
+
return session;
|
|
83
|
+
},
|
|
84
|
+
invalidate(): void {
|
|
85
|
+
session = undefined;
|
|
86
|
+
booted = false;
|
|
87
|
+
ctx.onInvalidate?.();
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { mkdtempSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { configModule } from "../../capabilities/config/index.js";
|
|
6
|
+
import { infoModule } from "../../capabilities/info/index.js";
|
|
7
|
+
import { completeVerb } from "../../capabilities/meta/complete.verb.js";
|
|
8
|
+
import { sourcesModule } from "../../capabilities/sources/index.js";
|
|
9
|
+
import { executeVerb } from "../project/cli/dispatch.js";
|
|
10
|
+
import type { GlobalFlags, VerbSpec } from "../spec/types.js";
|
|
11
|
+
import { bootRuntime } from "./boot.js";
|
|
12
|
+
|
|
13
|
+
const NO_MUT = { dryRun: false, undo: false, yes: false };
|
|
14
|
+
const FLAGS: GlobalFlags = {
|
|
15
|
+
llm: false,
|
|
16
|
+
autoLlm: false,
|
|
17
|
+
format: "plain",
|
|
18
|
+
verbose: false,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const infoVerb = infoModule.verbs[0] as VerbSpec;
|
|
22
|
+
const showVerb = configModule.verbs[0] as VerbSpec;
|
|
23
|
+
const sourcesStatusVerb = sourcesModule.verbs[0] as VerbSpec;
|
|
24
|
+
|
|
25
|
+
/** A needs-store READ verb whose body never touches the store — so a `booted`
|
|
26
|
+
* flag flipping to true proves the *dispatcher* booted it for `needsStore`. */
|
|
27
|
+
const needsStoreVerb: VerbSpec = {
|
|
28
|
+
path: ["fixture", "needs-store"],
|
|
29
|
+
summary: "A store-backed read.",
|
|
30
|
+
params: [],
|
|
31
|
+
output: {
|
|
32
|
+
formatters: {
|
|
33
|
+
plain: (d) => JSON.stringify(d),
|
|
34
|
+
llm: (d) => JSON.stringify(d),
|
|
35
|
+
json: (d) => JSON.stringify(d),
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
capability: {
|
|
39
|
+
needsStore: true,
|
|
40
|
+
mutates: false,
|
|
41
|
+
mcp: { expose: false, reason: "test fixture" },
|
|
42
|
+
},
|
|
43
|
+
run: async () => ({ ok: true }),
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const freshCwd = (): string => mkdtempSync(join(tmpdir(), "pragma-storeless-"));
|
|
47
|
+
|
|
48
|
+
describe("storeless guarantee — the store never boots for storeless verbs (PROTECTED)", () => {
|
|
49
|
+
it("info does not construct the store", async () => {
|
|
50
|
+
const runtime = bootRuntime(FLAGS, freshCwd());
|
|
51
|
+
await executeVerb(infoVerb, {}, NO_MUT, runtime);
|
|
52
|
+
expect(runtime.store.booted).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("config show does not construct the store", async () => {
|
|
56
|
+
const runtime = bootRuntime(FLAGS, freshCwd());
|
|
57
|
+
await executeVerb(showVerb, {}, NO_MUT, runtime);
|
|
58
|
+
expect(runtime.store.booted).toBe(false);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("sources status does not construct the store (reports a cold store)", async () => {
|
|
62
|
+
const runtime = bootRuntime(FLAGS, freshCwd());
|
|
63
|
+
const outcome = await executeVerb(sourcesStatusVerb, {}, NO_MUT, runtime);
|
|
64
|
+
expect(outcome.exitCode).toBe(0);
|
|
65
|
+
expect(runtime.store.booted).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("__complete does not construct the store", async () => {
|
|
69
|
+
const runtime = bootRuntime(FLAGS, freshCwd());
|
|
70
|
+
await executeVerb(
|
|
71
|
+
completeVerb as VerbSpec,
|
|
72
|
+
{ words: ["config"] },
|
|
73
|
+
NO_MUT,
|
|
74
|
+
runtime,
|
|
75
|
+
);
|
|
76
|
+
expect(runtime.store.booted).toBe(false);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("a needsStore verb DOES construct the store (spy fires)", async () => {
|
|
80
|
+
const runtime = bootRuntime(FLAGS, freshCwd());
|
|
81
|
+
expect(runtime.store.booted).toBe(false);
|
|
82
|
+
const outcome = await executeVerb(needsStoreVerb, {}, NO_MUT, runtime);
|
|
83
|
+
expect(outcome.exitCode).toBe(0);
|
|
84
|
+
expect(runtime.store.booted).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime context shapes threaded through the kernel.
|
|
3
|
+
*
|
|
4
|
+
* The grammar (`VerbSpec.run`) receives a {@link PragmaRuntime}; the CLI and
|
|
5
|
+
* MCP projectors build one per invocation. The interface grows one field-group
|
|
6
|
+
* per PR as each layer lands — global flags with the CLI projector, resolved
|
|
7
|
+
* config + provenance with the config layer — so a verb only ever sees fields
|
|
8
|
+
* that are actually populated by the time it runs.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { DetailLevel, OutputFormat } from "../../constants.js";
|
|
12
|
+
import type { ConfigLayers } from "../config/types.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Global flags parsed once, before the command tree runs, and shared by every
|
|
16
|
+
* verb. The renderer reads these to pick a formatter; auto-LLM is recorded
|
|
17
|
+
* separately so inferred mode can shape output without switching behaviour.
|
|
18
|
+
*/
|
|
19
|
+
export interface GlobalFlags {
|
|
20
|
+
/** Condensed Markdown output for LLM/agent consumption. */
|
|
21
|
+
readonly llm: boolean;
|
|
22
|
+
/** True when `llm` was inferred from a non-interactive stdout, not requested. */
|
|
23
|
+
readonly autoLlm?: boolean;
|
|
24
|
+
/** Selected output format; `--format text` is normalised to `plain`. */
|
|
25
|
+
readonly format: OutputFormat;
|
|
26
|
+
/** Diagnostic output to stderr. */
|
|
27
|
+
readonly verbose: boolean;
|
|
28
|
+
/** Explicit progressive-disclosure level from `--detail`, if any. */
|
|
29
|
+
readonly detail?: DetailLevel;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A booted store session: the immutable bundle a pack read produces. ke/graphql
|
|
34
|
+
* types are referenced inline so this module carries no static import of the
|
|
35
|
+
* heavy runtime — the store code stays dynamic-import-only.
|
|
36
|
+
*/
|
|
37
|
+
export interface StoreSession {
|
|
38
|
+
/** The ke triple store (booted from the pack's n-quads cache). */
|
|
39
|
+
readonly store: import("@canonical/ke").Store;
|
|
40
|
+
/** The executable GraphQL schema (rebuilt from the extraction artifact). */
|
|
41
|
+
readonly schema: import("graphql").GraphQLSchema;
|
|
42
|
+
/** Create a fresh execution context bound to a store (accepts a Promise). */
|
|
43
|
+
readonly createContext: (
|
|
44
|
+
store:
|
|
45
|
+
| import("@canonical/ke").Store
|
|
46
|
+
| Promise<import("@canonical/ke").Store>,
|
|
47
|
+
) => import("@canonical/ke-graphql").CompilerContext;
|
|
48
|
+
/** The prefixes the store (and every query) was built with. */
|
|
49
|
+
readonly prefixes: Readonly<Record<string, string>>;
|
|
50
|
+
/** The storeless entity index shipped with the pack. */
|
|
51
|
+
readonly index: import("./graphpack/types.js").PackIndex;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The lazy store handle. `get()` memoizes a successful {@link StoreSession}
|
|
56
|
+
* boot (a rejected boot is not memoized — a cold store throws STORE_UNAVAILABLE
|
|
57
|
+
* and a later `get()` retries); `booted` reports whether the store has actually
|
|
58
|
+
* been constructed (the storeless-guarantee spy target); `invalidate()` drops
|
|
59
|
+
* the memoized session (and the config memo it depends on) so the next `get()`
|
|
60
|
+
* re-boots — the long-lived MCP server calls it after every real mutation.
|
|
61
|
+
*/
|
|
62
|
+
export interface LazyStore {
|
|
63
|
+
/** Boot (once) and return the store session; throws STORE_UNAVAILABLE cold. */
|
|
64
|
+
get(): Promise<StoreSession>;
|
|
65
|
+
/** Whether the store has been constructed yet (spy target). */
|
|
66
|
+
readonly booted: boolean;
|
|
67
|
+
/** Drop the memoized session so the next `get()` re-boots against disk. */
|
|
68
|
+
invalidate(): void;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The query facade: `graphql` is the default typed spine (executed against the
|
|
73
|
+
* pack's precompiled schema); `sparql` is the raw, auto-prefixed escape hatch.
|
|
74
|
+
* Both boot the store lazily on first use.
|
|
75
|
+
*/
|
|
76
|
+
export interface QueryFacade {
|
|
77
|
+
/** Execute a GraphQL document against the pack's precompiled schema. */
|
|
78
|
+
graphql(
|
|
79
|
+
document: string,
|
|
80
|
+
variables?: Record<string, unknown> | null,
|
|
81
|
+
): Promise<import("graphql").ExecutionResult>;
|
|
82
|
+
/** Execute a raw SPARQL query against the store (prefixes auto-applied). */
|
|
83
|
+
sparql(text: string): Promise<import("@canonical/ke").QueryResult>;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Mutation-invocation context — present only for a mutating verb, set by the
|
|
88
|
+
* CLI/MCP projector just before `run`. `preview` is true for a plan-only
|
|
89
|
+
* invocation (`--dry-run` on the CLI, or an MCP tool call without `confirm`): a
|
|
90
|
+
* mutating verb reads it to describe its intended effects WITHOUT performing
|
|
91
|
+
* network or heavy setup, so a preview stays side-effect-free. Real execution
|
|
92
|
+
* leaves it false. This is the generic seam every mutation verb copies.
|
|
93
|
+
*/
|
|
94
|
+
export interface MutationRuntime {
|
|
95
|
+
/** True for a plan-only preview; false for a real execution. */
|
|
96
|
+
readonly preview: boolean;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* How this invocation reaches the user — populated by the projector for a
|
|
101
|
+
* mutating verb. An interactive verb reads it to pick its prompt strategy: an
|
|
102
|
+
* attended CLI without `--yes` gets a wizard; a non-interactive CLI (or `--yes`)
|
|
103
|
+
* gets flags+defaults; MCP gets params-or-error. `signal` aborts a run.
|
|
104
|
+
*
|
|
105
|
+
* NOTE (PR6): interactive setup mutations reuse this exact shape.
|
|
106
|
+
*/
|
|
107
|
+
export interface InteractionRuntime {
|
|
108
|
+
/**
|
|
109
|
+
* Both stdin and STDERR are a TTY (CLI); always false over MCP. Gated on
|
|
110
|
+
* stderr — not stdout — because the interactive Ink wizard renders to stderr
|
|
111
|
+
* and reads stdin, so `pragma <verb> 2>/dev/null` (stderr redirected) must
|
|
112
|
+
* fall to the non-interactive path rather than mounting an invisible render
|
|
113
|
+
* that blocks on stdin.
|
|
114
|
+
*/
|
|
115
|
+
readonly isTTY: boolean;
|
|
116
|
+
/** Which projector is driving this run. */
|
|
117
|
+
readonly transport: "cli" | "mcp";
|
|
118
|
+
/** The user asked to skip an interactive confirmation (`--yes` / MCP confirm). */
|
|
119
|
+
readonly yes: boolean;
|
|
120
|
+
/** Abort signal for the run, if the projector wired one. */
|
|
121
|
+
readonly signal?: AbortSignal;
|
|
122
|
+
/**
|
|
123
|
+
* Abort the run (internal seam field, NOT covenant surface). An interactive
|
|
124
|
+
* verb threads this into its wizard so an in-Ink Ctrl-C — which Ink's raw
|
|
125
|
+
* mode swallows before it can become a SIGINT — aborts the run's
|
|
126
|
+
* `AbortController`, firing the interpreter's `checkInterrupted` between
|
|
127
|
+
* effects. The projector wires it alongside `signal`.
|
|
128
|
+
*/
|
|
129
|
+
readonly abort?: () => void;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* The opaque runner options a mutating verb's `run` assembles and the projector
|
|
134
|
+
* spreads into the node interpreter on the REAL-run branch only (never on
|
|
135
|
+
* dry-run/undo, which stay handler-free and mock prompts). It carries the
|
|
136
|
+
* interactivity + progress seam: the prompt handler, the stamping/progress
|
|
137
|
+
* effect callbacks, log routing, and an optional teardown the projector runs in
|
|
138
|
+
* a `finally` (e.g. to dispose an Ink render).
|
|
139
|
+
*
|
|
140
|
+
* The task-effect types are referenced inline so this module carries no static
|
|
141
|
+
* import of the node interpreter — the runtime stays cheap to construct.
|
|
142
|
+
*/
|
|
143
|
+
export interface RunnerOptions {
|
|
144
|
+
/** Resolve each interactive `Prompt` effect (the injected UI strategy). */
|
|
145
|
+
promptHandler?: (
|
|
146
|
+
effect: import("@canonical/task").Effect & { _tag: "Prompt" },
|
|
147
|
+
) => Promise<unknown>;
|
|
148
|
+
/** Called before each effect — the stamping + progress seam. */
|
|
149
|
+
onEffectStart?: (effect: import("@canonical/task").Effect) => void;
|
|
150
|
+
/** Called after each effect completes (with its duration). */
|
|
151
|
+
onEffectComplete?: (
|
|
152
|
+
effect: import("@canonical/task").Effect,
|
|
153
|
+
duration: number,
|
|
154
|
+
) => void;
|
|
155
|
+
/** Route task log output. */
|
|
156
|
+
onLog?: (level: "debug" | "info" | "warn" | "error", message: string) => void;
|
|
157
|
+
/**
|
|
158
|
+
* The per-call write root: relative fs-effect paths resolve against it in the
|
|
159
|
+
* node interpreter (`RunTaskOptions.cwd`), and it is the SAME `rt.cwd` the
|
|
160
|
+
* SEC-2 path jail validates — so a mutating verb's output can never land
|
|
161
|
+
* outside the directory the jail checked (no jail bypass). Absolute effect
|
|
162
|
+
* paths are unchanged; omitting it falls back to `process.cwd()`. Honest as of
|
|
163
|
+
* PR7 (the node interpreter now honours `RunTaskOptions.cwd`).
|
|
164
|
+
*/
|
|
165
|
+
cwd?: string;
|
|
166
|
+
/** Abort signal, forwarded to the interpreter. */
|
|
167
|
+
signal?: AbortSignal;
|
|
168
|
+
/** Teardown run by the projector after the task settles (e.g. unmount Ink). */
|
|
169
|
+
dispose?: () => void | Promise<void>;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Per-invocation runtime handed to every verb `run`. Storeless verbs use only
|
|
174
|
+
* `cwd`/`version`/`globalFlags`/`loadConfig`; store-backed verbs reach the graph
|
|
175
|
+
* through `store`/`query`. The dispatcher boots the store only for
|
|
176
|
+
* `capability.needsStore` verbs, so a storeless verb never constructs it.
|
|
177
|
+
*/
|
|
178
|
+
export interface PragmaRuntime {
|
|
179
|
+
/** Directory the invocation resolves project state (config) against. */
|
|
180
|
+
readonly cwd: string;
|
|
181
|
+
/** CLI version string, surfaced by `info`. */
|
|
182
|
+
readonly version: string;
|
|
183
|
+
/** Global flags for this invocation. */
|
|
184
|
+
readonly globalFlags: GlobalFlags;
|
|
185
|
+
/** Memoized layered-config loader (resolved once per invocation). */
|
|
186
|
+
readonly loadConfig: () => Promise<ConfigLayers>;
|
|
187
|
+
/** The lazy store — booted only for `needsStore` verbs. */
|
|
188
|
+
readonly store: LazyStore;
|
|
189
|
+
/** The query facade over the lazy store. */
|
|
190
|
+
readonly query: QueryFacade;
|
|
191
|
+
/** Mutation context, set by the projector for a mutating verb (else absent). */
|
|
192
|
+
readonly mutation?: MutationRuntime;
|
|
193
|
+
/** How this run reaches the user, set by the projector for a mutating verb. */
|
|
194
|
+
readonly interaction?: InteractionRuntime;
|
|
195
|
+
/**
|
|
196
|
+
* Progress seam for a long mutating verb. Set by the projector (the CLI writes
|
|
197
|
+
* each message to stderr) so a verb can STREAM stage lines while it does heavy
|
|
198
|
+
* EAGER work — the resolve/parse/build that runs before its Task is even
|
|
199
|
+
* returned, which the Task interpreter's `onLog` therefore never sees. A verb
|
|
200
|
+
* emits through `runtime.report?.(…)`; unset (e.g. over MCP) makes it a no-op.
|
|
201
|
+
* Diagnostic-only: progress goes to stderr, never the stdout data stream.
|
|
202
|
+
*/
|
|
203
|
+
readonly report?: (message: string) => void;
|
|
204
|
+
/**
|
|
205
|
+
* The runner options a mutating verb's `run` assembles for its real
|
|
206
|
+
* execution. NOT readonly: the verb writes it as its last act before
|
|
207
|
+
* returning the Task, and the projector reads it back on the real-run branch.
|
|
208
|
+
*/
|
|
209
|
+
exec?: RunnerOptions;
|
|
210
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import {
|
|
3
|
+
existsSync,
|
|
4
|
+
mkdirSync,
|
|
5
|
+
mkdtempSync,
|
|
6
|
+
rmSync,
|
|
7
|
+
writeFileSync,
|
|
8
|
+
} from "node:fs";
|
|
9
|
+
import { tmpdir } from "node:os";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { fileURLToPath } from "node:url";
|
|
12
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The store-boot path only fully lives in the standalone binary: this is the
|
|
16
|
+
* one thing vitest's in-process suite cannot catch — whether oxigraph's WASM
|
|
17
|
+
* and the embedded pack survive `bun build --compile`. So compile a fresh
|
|
18
|
+
* binary from the current source and spawn it. If the WASM did not embed, the
|
|
19
|
+
* probe crashes and this fails loudly (rather than the compiled CLI silently
|
|
20
|
+
* failing every store-backed command in production).
|
|
21
|
+
*/
|
|
22
|
+
const packageRoot = fileURLToPath(new URL("../../../", import.meta.url));
|
|
23
|
+
|
|
24
|
+
let workdir: string;
|
|
25
|
+
let binary: string;
|
|
26
|
+
|
|
27
|
+
beforeAll(() => {
|
|
28
|
+
workdir = mkdtempSync(join(tmpdir(), "pragma-wasm-smoke-"));
|
|
29
|
+
binary = join(workdir, "pragma-smoke");
|
|
30
|
+
const build = spawnSync(
|
|
31
|
+
"bun",
|
|
32
|
+
[
|
|
33
|
+
"build",
|
|
34
|
+
"--compile",
|
|
35
|
+
"--target=bun-linux-x64",
|
|
36
|
+
"src/bin.ts",
|
|
37
|
+
"--outfile",
|
|
38
|
+
binary,
|
|
39
|
+
],
|
|
40
|
+
{ cwd: packageRoot, stdio: "pipe", encoding: "utf-8" },
|
|
41
|
+
);
|
|
42
|
+
if (build.status !== 0) {
|
|
43
|
+
throw new Error(`smoke build failed:\n${build.stderr}`);
|
|
44
|
+
}
|
|
45
|
+
}, 120_000);
|
|
46
|
+
|
|
47
|
+
afterAll(() => {
|
|
48
|
+
rmSync(workdir, { recursive: true, force: true });
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/** Run the compiled binary in a scratch cwd with isolated XDG dirs (no local
|
|
52
|
+
* node_modules, no real cache) — proves the binary is self-contained. */
|
|
53
|
+
const runBinary = (args: string[]) =>
|
|
54
|
+
spawnSync(binary, args, {
|
|
55
|
+
cwd: workdir,
|
|
56
|
+
stdio: "pipe",
|
|
57
|
+
encoding: "utf-8",
|
|
58
|
+
env: {
|
|
59
|
+
...process.env,
|
|
60
|
+
HOME: workdir,
|
|
61
|
+
XDG_CACHE_HOME: join(workdir, "cache"),
|
|
62
|
+
XDG_STATE_HOME: join(workdir, "state"),
|
|
63
|
+
XDG_CONFIG_HOME: join(workdir, "config"),
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
describe("oxigraph WASM + embedded pack embed in the compiled binary (PROTECTED)", () => {
|
|
68
|
+
it("dist binary boots the embedded store via __store-probe (needsStore path)", () => {
|
|
69
|
+
const run = runBinary(["__store-probe"]);
|
|
70
|
+
expect(run.status, run.stderr).toBe(0);
|
|
71
|
+
const out = JSON.parse(run.stdout.trim()) as {
|
|
72
|
+
ok: boolean;
|
|
73
|
+
entities: number;
|
|
74
|
+
triples: string;
|
|
75
|
+
};
|
|
76
|
+
expect(out.ok).toBe(true);
|
|
77
|
+
expect(out.entities).toBe(6);
|
|
78
|
+
expect(Number(out.triples)).toBeGreaterThan(0);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("dist binary runs storeless sources status", () => {
|
|
82
|
+
const run = runBinary(["sources", "status", "--format", "json"]);
|
|
83
|
+
expect(run.status, run.stderr).toBe(0);
|
|
84
|
+
const envelope = JSON.parse(run.stdout.trim()) as {
|
|
85
|
+
ok: boolean;
|
|
86
|
+
data: { lockPresent: boolean; cached: boolean };
|
|
87
|
+
};
|
|
88
|
+
expect(envelope.ok).toBe(true);
|
|
89
|
+
// A fresh install: no lock, store not yet built.
|
|
90
|
+
expect(envelope.data.lockPresent).toBe(false);
|
|
91
|
+
expect(envelope.data.cached).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Regression guard: `sources update` walks a package's TTL directories. The
|
|
95
|
+
// compiled binary's node:fs globSync mishandles `**` (returns bogus paths),
|
|
96
|
+
// which the in-process suite could not catch — so exercise the real binary.
|
|
97
|
+
it("dist binary runs sources update end-to-end (build + lock + status)", () => {
|
|
98
|
+
const pkg = join(workdir, "pkg");
|
|
99
|
+
const proj = join(workdir, "proj");
|
|
100
|
+
mkdirSync(join(pkg, "definitions"), { recursive: true });
|
|
101
|
+
mkdirSync(proj, { recursive: true });
|
|
102
|
+
writeFileSync(
|
|
103
|
+
join(pkg, "definitions", "w.ttl"),
|
|
104
|
+
`@prefix ex: <https://ex.test/#> .
|
|
105
|
+
@prefix owl: <http://www.w3.org/2002/07/owl#> .
|
|
106
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
107
|
+
ex:Widget a owl:Class ; rdfs:label "Widget" .
|
|
108
|
+
ex:one a ex:Widget ; rdfs:label "One" .
|
|
109
|
+
`,
|
|
110
|
+
);
|
|
111
|
+
writeFileSync(
|
|
112
|
+
join(proj, "pragma.config.ts"),
|
|
113
|
+
`export default { packages: [{ name: "pkg-a", source: "file://${pkg}" }] };\n`,
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
const env = {
|
|
117
|
+
HOME: workdir,
|
|
118
|
+
XDG_CACHE_HOME: join(workdir, "cache"),
|
|
119
|
+
XDG_STATE_HOME: join(workdir, "state"),
|
|
120
|
+
XDG_CONFIG_HOME: join(workdir, "config"),
|
|
121
|
+
};
|
|
122
|
+
const inProj = (args: string[]) =>
|
|
123
|
+
spawnSync(binary, args, {
|
|
124
|
+
cwd: proj,
|
|
125
|
+
stdio: "pipe",
|
|
126
|
+
encoding: "utf-8",
|
|
127
|
+
env: { ...process.env, ...env },
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
const update = inProj(["sources", "update", "--yes", "--format", "json"]);
|
|
131
|
+
expect(update.status, update.stderr).toBe(0);
|
|
132
|
+
expect(existsSync(join(proj, "pragma.lock.json"))).toBe(true);
|
|
133
|
+
|
|
134
|
+
const status = inProj(["sources", "status", "--format", "json"]);
|
|
135
|
+
const envelope = JSON.parse(status.stdout.trim()) as {
|
|
136
|
+
data: { lockPresent: boolean; cached: boolean; entityCount: number };
|
|
137
|
+
};
|
|
138
|
+
expect(envelope.data.lockPresent).toBe(true);
|
|
139
|
+
expect(envelope.data.cached).toBe(true);
|
|
140
|
+
expect(envelope.data.entityCount).toBe(2);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Widen a strongly-typed verb to the base {@link VerbSpec} at the registry
|
|
3
|
+
* boundary.
|
|
4
|
+
*
|
|
5
|
+
* A `VerbSpec<P, R>` with a concrete `R` cannot be placed directly in a
|
|
6
|
+
* `CapabilityModule.verbs` array (`VerbSpec<…, unknown>[]`) because `Formatters`
|
|
7
|
+
* is invariant in its data type. Authoring keeps the strong `R` so the
|
|
8
|
+
* formatters in each `*.render.ts` are type-checked against the real payload;
|
|
9
|
+
* this erases only that phantom `R` where the module is composed. The
|
|
10
|
+
* projectors re-narrow through the verb's own formatters at run time.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { VerbSpec } from "./types.js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Erase a verb's concrete data type for registry composition.
|
|
17
|
+
*
|
|
18
|
+
* @param verb - A strongly-typed verb spec.
|
|
19
|
+
* @returns The same verb widened to the base `VerbSpec`.
|
|
20
|
+
*/
|
|
21
|
+
export function asVerb<P, R>(verb: VerbSpec<P, R>): VerbSpec {
|
|
22
|
+
return verb as unknown as VerbSpec;
|
|
23
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { fixtureModule } from "../../testing/fixtures/fixtureCapability.js";
|
|
3
|
+
import {
|
|
4
|
+
emitSurface,
|
|
5
|
+
FIXED_SURFACE,
|
|
6
|
+
kebabCase,
|
|
7
|
+
toolName,
|
|
8
|
+
verbLabel,
|
|
9
|
+
} from "./emitSurface.js";
|
|
10
|
+
|
|
11
|
+
describe("naming rules", () => {
|
|
12
|
+
it("derives tool names from the path", () => {
|
|
13
|
+
expect(toolName(["info"])).toBe("info");
|
|
14
|
+
expect(toolName(["config", "show"])).toBe("config_show");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("uses the last path segment as the verb label", () => {
|
|
18
|
+
expect(verbLabel(["info"])).toBe("info");
|
|
19
|
+
expect(verbLabel(["config", "show"])).toBe("show");
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("kebab-cases camelCase flag names", () => {
|
|
23
|
+
expect(kebabCase("withHistory")).toBe("with-history");
|
|
24
|
+
expect(kebabCase("allTiers")).toBe("all-tiers");
|
|
25
|
+
expect(kebabCase("name")).toBe("name");
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
describe("emitSurface", () => {
|
|
30
|
+
const surface = emitSurface([fixtureModule]);
|
|
31
|
+
|
|
32
|
+
it("excludes hidden verbs", () => {
|
|
33
|
+
const labels = surface.nouns.widget?.verbs.map((v) => v.v);
|
|
34
|
+
expect(labels).toEqual(["list", "make"]);
|
|
35
|
+
expect(labels).not.toContain("internal");
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("emits a bare read verb with only v + mcp", () => {
|
|
39
|
+
const list = surface.nouns.widget?.verbs.find((v) => v.v === "list");
|
|
40
|
+
expect(list).toEqual({ v: "list", mcp: "widget_list" });
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("emits args, flags, mutates, needsStore for a mutating verb", () => {
|
|
44
|
+
const make = surface.nouns.widget?.verbs.find((v) => v.v === "make");
|
|
45
|
+
expect(make).toEqual({
|
|
46
|
+
v: "make",
|
|
47
|
+
args: ["<name>"],
|
|
48
|
+
flags: ["--with-history"],
|
|
49
|
+
mutates: true,
|
|
50
|
+
needsStore: true,
|
|
51
|
+
mcp: "widget_make",
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("collects exposed tools, sorted, excluding hidden", () => {
|
|
56
|
+
expect(surface.mcpSurface.tools).toEqual(["widget_list", "widget_make"]);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("merges in the fixed kernel sections verbatim", () => {
|
|
60
|
+
expect(surface.bins).toEqual(FIXED_SURFACE.bins);
|
|
61
|
+
expect(surface.globalFlags).toEqual(FIXED_SURFACE.globalFlags);
|
|
62
|
+
expect(surface.exitCodes).toEqual(FIXED_SURFACE.exitCodes);
|
|
63
|
+
expect(surface.budgets).toEqual(FIXED_SURFACE.budgets);
|
|
64
|
+
});
|
|
65
|
+
});
|