@canonical/pragma-cli 0.31.0 → 0.33.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 +35 -421
- package/dist/pragma +0 -0
- package/package.json +28 -42
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.test.ts +79 -0
- package/src/capabilities/block/blockList.verb.ts +163 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +166 -0
- package/src/capabilities/block/parity.test.ts +187 -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 +140 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +148 -0
- package/src/capabilities/capabilities/hints.ts +212 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +60 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +114 -0
- package/src/capabilities/colophon/colophon.render.ts +47 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +44 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +104 -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/fields.ts +81 -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.test.ts +65 -0
- package/src/capabilities/config/show.render.ts +107 -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 +225 -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 +432 -0
- package/src/capabilities/create/create.verb.ts +493 -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 +114 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +67 -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/checks/deriveBand.test.ts +42 -0
- package/src/capabilities/doctor/checks/deriveBand.ts +28 -0
- package/src/capabilities/doctor/doctor.render.test.ts +170 -0
- package/src/capabilities/doctor/doctor.render.ts +198 -0
- package/src/capabilities/doctor/doctor.test.ts +209 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +100 -0
- package/src/capabilities/doctor/types.ts +56 -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 +19 -0
- package/src/capabilities/ontology/ontology.test.ts +246 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +269 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.test.ts +94 -0
- package/src/capabilities/prompt/prompt.render.ts +87 -0
- package/src/capabilities/prompt/prompt.test.ts +180 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/reference.test.ts +32 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +245 -0
- package/src/capabilities/resources/resources.test.ts +213 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/scopeTypeSync.test.ts +37 -0
- package/src/capabilities/setup/index.ts +12 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +141 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +403 -0
- package/src/capabilities/setup/operations/setupLsp.ts +105 -0
- package/src/capabilities/setup/operations/setupMcp.ts +262 -0
- package/src/capabilities/setup/operations/setupSkills.ts +205 -0
- package/src/capabilities/setup/setup.render.test.ts +109 -0
- package/src/capabilities/setup/setup.render.ts +96 -0
- package/src/capabilities/setup/setup.test.ts +702 -0
- package/src/capabilities/setup/setup.verb.ts +261 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +99 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -0
- package/src/capabilities/shared/bands.ts +16 -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 +102 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +464 -0
- package/src/capabilities/sources/sources.test.ts +828 -0
- package/src/capabilities/sources/status.render.test.ts +65 -0
- package/src/capabilities/sources/status.render.ts +83 -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 +233 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.test.ts +72 -0
- package/src/capabilities/tier/lookup.render.ts +59 -0
- package/src/capabilities/tier/lookup.test.ts +83 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +87 -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 +339 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +99 -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 +277 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +258 -0
- package/src/kernel/completion/parse.test.ts +336 -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 +431 -0
- package/src/kernel/project/cli/buildProgram.ts +291 -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 +107 -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 +220 -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/mcpError.ts +52 -0
- package/src/kernel/project/mcp/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +104 -0
- package/src/kernel/project/mcp/prompts/provider.ts +104 -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 +31 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +205 -0
- package/src/kernel/render/renderers.ts +447 -0
- package/src/kernel/render/style.test.ts +31 -0
- package/src/kernel/render/style.ts +74 -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 +176 -0
- package/src/kernel/runtime/graphpack/buildIndex.test.ts +103 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +317 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +5 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +3 -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 +221 -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 +117 -0
- package/src/kernel/runtime/graphpack/types.ts +125 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +48 -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 +380 -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/storeReadiness.ts +61 -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 +144 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitReference.test.ts +196 -0
- package/src/kernel/spec/emitReference.ts +491 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +225 -0
- package/src/kernel/spec/index.ts +36 -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 +54 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +115 -0
- package/src/testing/behavioral/docExamples.test.ts +283 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +124 -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 +131 -0
- package/src/testing/behavioral/journeys.defaultPack.test.ts +571 -0
- package/src/testing/behavioral/journeys.interactiveTty.e2e.test.ts +66 -0
- package/src/testing/behavioral/journeys.livePack.e2e.test.ts +129 -0
- package/src/testing/behavioral/journeys.mcpLifecycle.mcp.test.ts +176 -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/behavioral/staleCommands.test.ts +76 -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 +248 -0
- package/src/testing/eval/cases/readNouns.ts +235 -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 +331 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/graph/defaultPack.ts +178 -0
- package/src/testing/fixtures/graph/owlExport.ts +95 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -0
- package/src/testing/helpers/extractSnippets.ts +29 -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/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,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store-backed single-entity read: every triple where a URI is the subject,
|
|
3
|
+
* grouped by predicate.
|
|
4
|
+
*
|
|
5
|
+
* The ONE reader shared by the `graph inspect` CLI verb and the MCP resource
|
|
6
|
+
* `read` — so a resource read and a `graph inspect` of the same URI return
|
|
7
|
+
* identical content (the mirror contract). The URI is resolved through the
|
|
8
|
+
* store's merged prefix map and validated safe for `<iri>` embedding — via
|
|
9
|
+
* `resolveUri` → `assertSafeIri`, which rejects every IRI-breaking character
|
|
10
|
+
* (`<>"{}|\^\`` + whitespace) — before it is interpolated, so a prefixed name or
|
|
11
|
+
* absolute IRI addresses the subject exactly and user input never reaches the
|
|
12
|
+
* query text raw.
|
|
13
|
+
*
|
|
14
|
+
* Reached only behind the lazy store (a `needsStore` verb / a resource read), so
|
|
15
|
+
* it never lands on the storeless fast path.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { PragmaError } from "../error/PragmaError.js";
|
|
19
|
+
import { resolveUri } from "../packs/iri.js";
|
|
20
|
+
import type { PragmaRuntime } from "./types.js";
|
|
21
|
+
|
|
22
|
+
/** All objects asserted for one predicate on a subject. */
|
|
23
|
+
export interface PredicateGroup {
|
|
24
|
+
readonly predicate: string;
|
|
25
|
+
readonly objects: string[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** The result of inspecting one subject URI. */
|
|
29
|
+
export interface InspectResult {
|
|
30
|
+
/** The resolved (full) subject URI. */
|
|
31
|
+
readonly uri: string;
|
|
32
|
+
/** Human label from the pack index, when known. */
|
|
33
|
+
readonly label?: string | null;
|
|
34
|
+
/** Predicate/object groups, ordered by predicate. */
|
|
35
|
+
readonly groups: PredicateGroup[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Read one entity's triples, grouped by predicate.
|
|
40
|
+
*
|
|
41
|
+
* @param rt - The runtime (lazy store + query facade).
|
|
42
|
+
* @param uri - A prefixed name or absolute IRI.
|
|
43
|
+
* @returns The resolved URI, its index label, and predicate groups.
|
|
44
|
+
* @throws PragmaError ENTITY_NOT_FOUND when the subject has no triples.
|
|
45
|
+
* @note Impure — boots the store and queries it.
|
|
46
|
+
*/
|
|
47
|
+
export async function readEntity(
|
|
48
|
+
rt: Pick<PragmaRuntime, "store" | "query">,
|
|
49
|
+
uri: string,
|
|
50
|
+
): Promise<InspectResult> {
|
|
51
|
+
const session = await rt.store.get();
|
|
52
|
+
const resolved = resolveUri(uri, session.prefixes);
|
|
53
|
+
|
|
54
|
+
const result = await rt.query.sparql(
|
|
55
|
+
`SELECT ?predicate ?object WHERE { <${resolved}> ?predicate ?object } ORDER BY ?predicate ?object`,
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
if (result.type !== "select" || result.bindings.length === 0) {
|
|
59
|
+
throw PragmaError.notFound("entity", uri, {
|
|
60
|
+
recovery: {
|
|
61
|
+
message: "Check the URI, or list known entities.",
|
|
62
|
+
cli: "pragma graph query 'SELECT ?s WHERE { ?s ?p ?o } LIMIT 10'",
|
|
63
|
+
mcp: { tool: "graph_query" },
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const groupMap = new Map<string, string[]>();
|
|
69
|
+
for (const binding of result.bindings) {
|
|
70
|
+
const predicate = binding.predicate ?? "";
|
|
71
|
+
const object = binding.object ?? "";
|
|
72
|
+
const objects = groupMap.get(predicate) ?? [];
|
|
73
|
+
objects.push(object);
|
|
74
|
+
groupMap.set(predicate, objects);
|
|
75
|
+
}
|
|
76
|
+
const groups = [...groupMap.entries()].map(([predicate, objects]) => ({
|
|
77
|
+
predicate,
|
|
78
|
+
objects,
|
|
79
|
+
}));
|
|
80
|
+
|
|
81
|
+
const label = session.index.entities.find((e) => e.uri === resolved)?.label;
|
|
82
|
+
return { uri: resolved, ...(label != null ? { label } : {}), groups };
|
|
83
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git operations for cached package clones.
|
|
3
|
+
*
|
|
4
|
+
* Ported from the v1 refs domain. Every call is `execFileSync` with the default
|
|
5
|
+
* `shell: false`, so refs and URLs are passed as argv, never interpolated into
|
|
6
|
+
* a shell. Authentication is delegated entirely to the user's git client (SSH
|
|
7
|
+
* keys, credential helpers) — zero custom auth. Shallow clones (`--depth 1`)
|
|
8
|
+
* keep checkouts cheap.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { execFileSync } from "node:child_process";
|
|
12
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
13
|
+
import { dirname } from "node:path";
|
|
14
|
+
|
|
15
|
+
/** Whether a ref looks like a commit SHA (7-40 hex chars). */
|
|
16
|
+
export function isSha(ref: string): boolean {
|
|
17
|
+
return /^[0-9a-f]{7,40}$/.test(ref);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Run git in a directory, throwing on non-zero exit. */
|
|
21
|
+
function git(cwd: string, args: readonly string[]): void {
|
|
22
|
+
execFileSync("git", [...args], { cwd, stdio: "pipe" });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Run git and return trimmed stdout. */
|
|
26
|
+
function gitOutput(cwd: string, args: readonly string[]): string {
|
|
27
|
+
return execFileSync("git", [...args], { cwd, stdio: "pipe" })
|
|
28
|
+
.toString()
|
|
29
|
+
.trim();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Clone a repository at a ref into a destination directory (must not exist).
|
|
34
|
+
*
|
|
35
|
+
* @param url - Git remote URL.
|
|
36
|
+
* @param ref - Branch, tag, or commit SHA.
|
|
37
|
+
* @param dest - Target directory.
|
|
38
|
+
* @note Impure — runs git, writes the checkout.
|
|
39
|
+
*/
|
|
40
|
+
export function cloneRef(url: string, ref: string, dest: string): void {
|
|
41
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
42
|
+
if (isSha(ref)) {
|
|
43
|
+
// Shallow clone by SHA is unsupported — init + fetch the commit + checkout.
|
|
44
|
+
mkdirSync(dest, { recursive: true });
|
|
45
|
+
git(dest, ["init"]);
|
|
46
|
+
git(dest, ["fetch", "--depth", "1", url, ref]);
|
|
47
|
+
git(dest, ["checkout", "FETCH_HEAD"]);
|
|
48
|
+
} else {
|
|
49
|
+
execFileSync("git", ["clone", "--depth", "1", "--branch", ref, url, dest], {
|
|
50
|
+
stdio: "pipe",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Fetch a ref into an existing cached clone and check it out.
|
|
57
|
+
*
|
|
58
|
+
* @returns The newly resolved HEAD commit.
|
|
59
|
+
* @note Impure — runs git, updates the checkout.
|
|
60
|
+
*/
|
|
61
|
+
export function fetchRef(url: string, ref: string, dest: string): string {
|
|
62
|
+
git(dest, ["fetch", "--depth", "1", url, ref]);
|
|
63
|
+
git(dest, ["checkout", "FETCH_HEAD"]);
|
|
64
|
+
return gitOutput(dest, ["rev-parse", "HEAD"]);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Check out an exact commit in an existing clone (fetching it if needed). */
|
|
68
|
+
export function checkoutCommit(
|
|
69
|
+
url: string,
|
|
70
|
+
commit: string,
|
|
71
|
+
dest: string,
|
|
72
|
+
): void {
|
|
73
|
+
if (!existsSync(dest)) {
|
|
74
|
+
cloneRef(url, commit, dest);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
git(dest, ["checkout", commit]);
|
|
79
|
+
} catch {
|
|
80
|
+
git(dest, ["fetch", "--depth", "1", url, commit]);
|
|
81
|
+
git(dest, ["checkout", commit]);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** The resolved HEAD commit of a checkout. */
|
|
86
|
+
export function headCommit(dest: string): string {
|
|
87
|
+
return gitOutput(dest, ["rev-parse", "HEAD"]);
|
|
88
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { redactUrl } from "./parseRef.js";
|
|
3
|
+
|
|
4
|
+
describe("redactUrl", () => {
|
|
5
|
+
it("strips user:password userinfo so an inlined token never reaches output", () => {
|
|
6
|
+
expect(redactUrl("https://alice:ghp_SECRET@github.com/org/repo.git")).toBe(
|
|
7
|
+
"https://***@github.com/org/repo.git",
|
|
8
|
+
);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it("strips a token-as-username (no colon)", () => {
|
|
12
|
+
expect(redactUrl("https://ghp_SECRET@github.com/org/repo.git")).toBe(
|
|
13
|
+
"https://***@github.com/org/repo.git",
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("redacts across a compound scheme (git+https)", () => {
|
|
18
|
+
expect(redactUrl("git+https://user:tok@host.example/x.git")).toBe(
|
|
19
|
+
"git+https://***@host.example/x.git",
|
|
20
|
+
);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("leaves a credential-free URL unchanged", () => {
|
|
24
|
+
expect(redactUrl("https://github.com/org/repo.git")).toBe(
|
|
25
|
+
"https://github.com/org/repo.git",
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("does not treat an '@' after the first path slash as userinfo", () => {
|
|
30
|
+
expect(redactUrl("https://host.example/org/@scope/pkg")).toBe(
|
|
31
|
+
"https://host.example/org/@scope/pkg",
|
|
32
|
+
);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a config `packages` entry into a typed {@link PackageRef}.
|
|
3
|
+
*
|
|
4
|
+
* Ported from the v1 refs domain. Three resolution strategies, discriminated by
|
|
5
|
+
* `kind`: `npm` (a bare package name, resolved via `require.resolve`), `file`
|
|
6
|
+
* (a `file://` local path override), and `git` (a `git+<proto>://…#ref` shallow
|
|
7
|
+
* clone). The `source` string is kept verbatim so the lock records exactly what
|
|
8
|
+
* the config declared.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { PackageEntry } from "../../config/types.js";
|
|
12
|
+
import { PragmaError } from "../../error/PragmaError.js";
|
|
13
|
+
|
|
14
|
+
/** A parsed, validated package reference — discriminated by `kind`. */
|
|
15
|
+
export type PackageRef =
|
|
16
|
+
| { readonly kind: "npm"; readonly pkg: string; readonly source: string }
|
|
17
|
+
| {
|
|
18
|
+
readonly kind: "file";
|
|
19
|
+
readonly pkg: string;
|
|
20
|
+
readonly path: string;
|
|
21
|
+
readonly source: string;
|
|
22
|
+
}
|
|
23
|
+
| {
|
|
24
|
+
readonly kind: "git";
|
|
25
|
+
readonly pkg: string;
|
|
26
|
+
readonly url: string;
|
|
27
|
+
readonly ref: string;
|
|
28
|
+
readonly source: string;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Parse a config `packages` entry into a {@link PackageRef}.
|
|
33
|
+
*
|
|
34
|
+
* @param entry - A bare npm name, or a `{ name, source }` declaration.
|
|
35
|
+
* @returns The parsed reference (with the verbatim `source`).
|
|
36
|
+
* @throws PragmaError CONFIG_ERROR on an invalid `source`.
|
|
37
|
+
*/
|
|
38
|
+
export function parsePackageEntry(entry: PackageEntry): PackageRef {
|
|
39
|
+
if (typeof entry === "string") {
|
|
40
|
+
return { kind: "npm", pkg: entry, source: entry };
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const { name, source } = entry;
|
|
44
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
45
|
+
throw PragmaError.configError(
|
|
46
|
+
'Package entry must have a non-empty "name".',
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
if (source === undefined) {
|
|
50
|
+
return { kind: "npm", pkg: name, source: name };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (source.startsWith("file://")) {
|
|
54
|
+
const path = source.slice("file://".length);
|
|
55
|
+
if (path.length === 0) {
|
|
56
|
+
throw PragmaError.configError(
|
|
57
|
+
`Invalid source for "${name}": file:// must be followed by a path.`,
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
return { kind: "file", pkg: name, path, source };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (source.startsWith("git+")) {
|
|
64
|
+
const hashIdx = source.indexOf("#");
|
|
65
|
+
if (hashIdx === -1 || hashIdx === source.length - 1) {
|
|
66
|
+
throw PragmaError.configError(
|
|
67
|
+
`Invalid source for "${name}": git URL must include a ref after #.`,
|
|
68
|
+
{
|
|
69
|
+
recovery: {
|
|
70
|
+
message: "Example: git+https://github.com/org/repo.git#main",
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
kind: "git",
|
|
77
|
+
pkg: name,
|
|
78
|
+
url: source.slice("git+".length, hashIdx),
|
|
79
|
+
ref: source.slice(hashIdx + 1),
|
|
80
|
+
source,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
throw PragmaError.configError(
|
|
85
|
+
`Invalid source for "${name}": "${source}". Expected file://, git+https://, git+ssh://, or git+file://.`,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Strip any userinfo (`user:pass@` / `token@`) from a URL for display.
|
|
91
|
+
*
|
|
92
|
+
* A git source can inline credentials (`git+https://user:TOKEN@host/…`); those
|
|
93
|
+
* must never reach progress or error output, which lands in stderr logs and —
|
|
94
|
+
* via `toolError` — MCP-agent-visible responses. Applied only where a URL is
|
|
95
|
+
* interpolated for a human/agent; `PackageRef.url` keeps the credential verbatim
|
|
96
|
+
* so git can still authenticate.
|
|
97
|
+
*
|
|
98
|
+
* @param url - A URL that may carry userinfo before the host.
|
|
99
|
+
* @returns The URL with any leading `userinfo@` replaced by `***@`.
|
|
100
|
+
*/
|
|
101
|
+
export function redactUrl(url: string): string {
|
|
102
|
+
return url.replace(/^([a-zA-Z][a-zA-Z0-9+.-]*:\/\/)[^/@]+@/, "$1***@");
|
|
103
|
+
}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a {@link PackageRef} to its pinned revision and RDF source contents.
|
|
3
|
+
*
|
|
4
|
+
* `file` reads the local path in place; `npm` resolves the installed package
|
|
5
|
+
* from the project's `node_modules`; `git` clones/fetches into the ref cache
|
|
6
|
+
* (or, under `--frozen`, checks out exactly the lock's pinned commit and never
|
|
7
|
+
* advances). Each package contributes its `definitions/**` and `data/**` TTL
|
|
8
|
+
* files, labelled by a stable `pkg/relative-path` so the pack's content hash is
|
|
9
|
+
* machine-independent. Reached only from the `sources update` Task body.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
13
|
+
import { createRequire } from "node:module";
|
|
14
|
+
import { dirname, join, relative } from "node:path";
|
|
15
|
+
import { RECOVERY_CLI_PREFIX } from "../../../constants.js";
|
|
16
|
+
import { PragmaError } from "../../error/PragmaError.js";
|
|
17
|
+
import { cliRecovery } from "../../error/recovery.js";
|
|
18
|
+
import { refsCacheDir } from "../paths.js";
|
|
19
|
+
import { checkoutCommit, cloneRef, fetchRef, headCommit } from "./gitOps.js";
|
|
20
|
+
import { type PackageRef, redactUrl } from "./parseRef.js";
|
|
21
|
+
|
|
22
|
+
/** A resolved package: its pinned revision and labelled RDF sources. */
|
|
23
|
+
export interface ResolvedPackage {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
/** The config `packages` source ref, verbatim. */
|
|
26
|
+
readonly source: string;
|
|
27
|
+
/** The resolved commit / version / absolute path. */
|
|
28
|
+
readonly resolved: string;
|
|
29
|
+
/**
|
|
30
|
+
* The package's on-disk root — the local `file:` path, the npm install dir, or
|
|
31
|
+
* the git clone dir. Everything the package ships lives under it, so
|
|
32
|
+
* `sources update` can also discover a package's `skills/` (U10) from here.
|
|
33
|
+
*/
|
|
34
|
+
readonly root: string;
|
|
35
|
+
/** The labelled RDF sources (path label + content). */
|
|
36
|
+
readonly sources: { readonly path: string; readonly content: string }[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Options for a resolution: whether to honour a pinned commit (`--frozen`). */
|
|
40
|
+
export interface ResolveOptions {
|
|
41
|
+
readonly cwd: string;
|
|
42
|
+
readonly frozen: boolean;
|
|
43
|
+
/** The lock's pinned revision for this package (used under `--frozen`). */
|
|
44
|
+
readonly pinned?: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** The package subdirectories scanned for `.ttl` sources. */
|
|
48
|
+
const TTL_DIRS = ["definitions", "data"];
|
|
49
|
+
|
|
50
|
+
/** Sanitize a ref for use as a cache path segment. */
|
|
51
|
+
const sanitize = (value: string): string => value.replace(/[/\\:*?"<>|]/g, "_");
|
|
52
|
+
|
|
53
|
+
/** A concise reason from a thrown subprocess/parse error: prefer captured
|
|
54
|
+
* stderr (git writes the real reason there under `stdio: "pipe"`), else the
|
|
55
|
+
* message. Used to name WHY a resolve failed without dumping a raw stack. */
|
|
56
|
+
function errorDetail(error: unknown): string {
|
|
57
|
+
if (error && typeof error === "object") {
|
|
58
|
+
const { stderr, message } = error as {
|
|
59
|
+
stderr?: unknown;
|
|
60
|
+
message?: unknown;
|
|
61
|
+
};
|
|
62
|
+
if (stderr != null) {
|
|
63
|
+
const text = String(stderr).trim();
|
|
64
|
+
if (text) return text;
|
|
65
|
+
}
|
|
66
|
+
if (typeof message === "string" && message.trim()) return message.trim();
|
|
67
|
+
}
|
|
68
|
+
return String(error);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Recursively collect `*.ttl` files under a directory (a manual walk — the
|
|
72
|
+
* compiled binary's node:fs globSync mishandles `**`, so we avoid it). */
|
|
73
|
+
function walkTtl(
|
|
74
|
+
dir: string,
|
|
75
|
+
base: string,
|
|
76
|
+
label: string,
|
|
77
|
+
out: { path: string; content: string }[],
|
|
78
|
+
): void {
|
|
79
|
+
if (!existsSync(dir)) return;
|
|
80
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
81
|
+
// Skip hidden entries (dot-prefixed): editor/partial/generated artifacts
|
|
82
|
+
// like `.modifier.dark.ttl`, and tooling dirs like `.git`, are never
|
|
83
|
+
// intended graph sources — and ingesting them ships malformed RDF into the
|
|
84
|
+
// build (a `.`-prefixed Turtle local name isn't even valid).
|
|
85
|
+
if (entry.name.startsWith(".")) continue;
|
|
86
|
+
const full = join(dir, entry.name);
|
|
87
|
+
// Resolve symlinks: pnpm / workspace trees link their sources, but
|
|
88
|
+
// `Dirent.isFile`/`isDirectory` are BOTH false for a symlink — so a
|
|
89
|
+
// symlinked `.ttl` was silently skipped (L6). Follow the link to recover a
|
|
90
|
+
// symlinked FILE, but NEVER recurse into a symlinked DIRECTORY: a symlink
|
|
91
|
+
// cycle (a link to an ancestor dir) would recurse without bound — a
|
|
92
|
+
// stack-overflow RangeError surfacing as an INTERNAL "please report" — and a
|
|
93
|
+
// linked directory could pull `.ttl` from OUTSIDE the package root. Linking
|
|
94
|
+
// individual source files (all L6 needs) stays supported; a dangling link is
|
|
95
|
+
// skipped, not fatal.
|
|
96
|
+
let isDir = entry.isDirectory();
|
|
97
|
+
let isFile = entry.isFile();
|
|
98
|
+
if (entry.isSymbolicLink()) {
|
|
99
|
+
try {
|
|
100
|
+
isFile = statSync(full).isFile();
|
|
101
|
+
isDir = false;
|
|
102
|
+
} catch {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (isDir) {
|
|
107
|
+
walkTtl(full, base, label, out);
|
|
108
|
+
} else if (isFile && entry.name.endsWith(".ttl")) {
|
|
109
|
+
out.push({
|
|
110
|
+
path: `${label}/${relative(base, full)}`,
|
|
111
|
+
content: readFileSync(full, "utf-8"),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Read a package's `definitions/**` and `data/**` TTL, with stable labels. */
|
|
118
|
+
function readTtlSources(
|
|
119
|
+
rootDir: string,
|
|
120
|
+
label: string,
|
|
121
|
+
): { path: string; content: string }[] {
|
|
122
|
+
const sources: { path: string; content: string }[] = [];
|
|
123
|
+
for (const sub of TTL_DIRS) {
|
|
124
|
+
walkTtl(join(rootDir, sub), rootDir, label, sources);
|
|
125
|
+
}
|
|
126
|
+
sources.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
|
|
127
|
+
return sources;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* A Turtle/SPARQL prefix prologue declaration: `@prefix ex: <iri> .` or the
|
|
132
|
+
* keyword-form `PREFIX ex: <iri>`. Both are legal in Turtle 1.1; the keyword is
|
|
133
|
+
* case-insensitive and the leading `@` is optional, so `@?prefix` with the `i`
|
|
134
|
+
* flag covers every spelling. The label group requires at least one character,
|
|
135
|
+
* so the default-namespace form (`@prefix : <iri>`) is skipped — its `:local`
|
|
136
|
+
* tokens are not the named-prefix contract the index freezes.
|
|
137
|
+
*/
|
|
138
|
+
const PREFIX_DECL = /(?:^|\s)@?prefix\s+([^\s:]+):\s*<([^>]*)>/gi;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Harvest a package's own `@prefix` / `PREFIX` declarations from its TTL text.
|
|
142
|
+
*
|
|
143
|
+
* ke's `createStore` does NOT fold parsed-Turtle prefixes into `store.prefixes`
|
|
144
|
+
* (TTL `@prefix` applies only within a file during parsing), so a package's
|
|
145
|
+
* namespaces are invisible to the index unless we lift them out of the source
|
|
146
|
+
* ourselves. The returned map (label → namespace IRI) is merged BELOW config
|
|
147
|
+
* precedence so the pack's own names compact to `pfx:Local` in the index.
|
|
148
|
+
*
|
|
149
|
+
* @param sources - The package's labelled RDF sources.
|
|
150
|
+
* @returns A prefix map of every named declaration found (last wins on clash).
|
|
151
|
+
*/
|
|
152
|
+
export function harvestPrefixes(
|
|
153
|
+
sources: readonly { readonly content: string }[],
|
|
154
|
+
): Record<string, string> {
|
|
155
|
+
const prefixes: Record<string, string> = {};
|
|
156
|
+
for (const { content } of sources) {
|
|
157
|
+
for (const match of content.matchAll(PREFIX_DECL)) {
|
|
158
|
+
const [, label, iri] = match;
|
|
159
|
+
if (label !== undefined && iri !== undefined) prefixes[label] = iri;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return prefixes;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** One `@prefix` clash: a label declared with two or more distinct IRIs. */
|
|
166
|
+
export interface PrefixClash {
|
|
167
|
+
readonly label: string;
|
|
168
|
+
/** The distinct IRIs bound to the label, in first-seen order. */
|
|
169
|
+
readonly iris: readonly string[];
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Detect `@prefix` label clashes across a set of sources.
|
|
174
|
+
*
|
|
175
|
+
* {@link harvestPrefixes} resolves clashes last-wins (Turtle's own rule),
|
|
176
|
+
* silently compacting the losing package's URIs to the wrong prefix (or to full
|
|
177
|
+
* IRIs). This surfaces the clashes so `sources update` can warn (A5): a label
|
|
178
|
+
* bound to two or more distinct IRIs. Harmless same-label/same-IRI
|
|
179
|
+
* redeclarations (the common case) are NOT clashes. Result is sorted by label
|
|
180
|
+
* so the warnings are deterministic.
|
|
181
|
+
*
|
|
182
|
+
* @param sources - The packages' labelled RDF sources.
|
|
183
|
+
* @returns One entry per clashing label, each with its distinct IRIs.
|
|
184
|
+
*/
|
|
185
|
+
export function detectPrefixClashes(
|
|
186
|
+
sources: readonly { readonly content: string }[],
|
|
187
|
+
): PrefixClash[] {
|
|
188
|
+
const byLabel = new Map<string, string[]>();
|
|
189
|
+
for (const { content } of sources) {
|
|
190
|
+
for (const match of content.matchAll(PREFIX_DECL)) {
|
|
191
|
+
const [, label, iri] = match;
|
|
192
|
+
if (label === undefined || iri === undefined) continue;
|
|
193
|
+
const iris = byLabel.get(label) ?? [];
|
|
194
|
+
if (!iris.includes(iri)) iris.push(iri);
|
|
195
|
+
byLabel.set(label, iris);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const clashes: PrefixClash[] = [];
|
|
199
|
+
for (const [label, iris] of byLabel) {
|
|
200
|
+
if (iris.length > 1) clashes.push({ label, iris });
|
|
201
|
+
}
|
|
202
|
+
clashes.sort((a, b) => (a.label < b.label ? -1 : a.label > b.label ? 1 : 0));
|
|
203
|
+
return clashes;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Locate a package's `package.json` from the project.
|
|
208
|
+
*
|
|
209
|
+
* The direct `require.resolve("<pkg>/package.json")` throws
|
|
210
|
+
* `ERR_PACKAGE_PATH_NOT_EXPORTED` for a package whose `exports` map does not
|
|
211
|
+
* expose `./package.json` (common with modern packages) — which would be
|
|
212
|
+
* misreported as "not installed". So on failure it falls back to resolving the
|
|
213
|
+
* package entry and walking up to the `package.json` whose `name` matches.
|
|
214
|
+
*
|
|
215
|
+
* @param require - A `createRequire` bound to the project directory.
|
|
216
|
+
* @param pkg - The package name.
|
|
217
|
+
* @returns The absolute `package.json` path, or `undefined` when not installed.
|
|
218
|
+
*/
|
|
219
|
+
export function resolvePackageJson(
|
|
220
|
+
require: ReturnType<typeof createRequire>,
|
|
221
|
+
pkg: string,
|
|
222
|
+
): string | undefined {
|
|
223
|
+
try {
|
|
224
|
+
return require.resolve(`${pkg}/package.json`);
|
|
225
|
+
} catch {
|
|
226
|
+
// `exports` may not expose ./package.json — resolve the entry and walk up.
|
|
227
|
+
}
|
|
228
|
+
let current: string;
|
|
229
|
+
try {
|
|
230
|
+
current = dirname(require.resolve(pkg));
|
|
231
|
+
} catch {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
for (let depth = 0; depth < 64; depth++) {
|
|
235
|
+
const candidate = join(current, "package.json");
|
|
236
|
+
if (existsSync(candidate)) {
|
|
237
|
+
try {
|
|
238
|
+
const parsed = JSON.parse(readFileSync(candidate, "utf-8")) as {
|
|
239
|
+
name?: unknown;
|
|
240
|
+
};
|
|
241
|
+
if (parsed.name === pkg) return candidate;
|
|
242
|
+
} catch {
|
|
243
|
+
// Unreadable or non-JSON — keep walking up.
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const parent = dirname(current);
|
|
247
|
+
if (parent === current) break;
|
|
248
|
+
current = parent;
|
|
249
|
+
}
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Resolve a package reference to its revision and RDF sources.
|
|
255
|
+
*
|
|
256
|
+
* @param ref - The parsed package reference.
|
|
257
|
+
* @param options - The cwd, frozen flag, and any pinned revision.
|
|
258
|
+
* @returns The resolved package.
|
|
259
|
+
* @throws PragmaError on a missing file path or unresolvable npm package.
|
|
260
|
+
* @throws PragmaError under `--frozen` when the package has no lock entry.
|
|
261
|
+
* @note Impure — may clone/fetch git, reads TTL from disk.
|
|
262
|
+
*/
|
|
263
|
+
export async function resolvePackage(
|
|
264
|
+
ref: PackageRef,
|
|
265
|
+
options: ResolveOptions,
|
|
266
|
+
): Promise<ResolvedPackage> {
|
|
267
|
+
// `--frozen` means "reproduce the locked state exactly". A configured package
|
|
268
|
+
// with no lock entry has nothing to reproduce, so refuse rather than silently
|
|
269
|
+
// resolving it fresh (which would advance the very state the lock pins).
|
|
270
|
+
if (options.frozen && options.pinned === undefined) {
|
|
271
|
+
throw PragmaError.configError(
|
|
272
|
+
`Cannot resolve "${ref.pkg}" under --frozen: it has no entry in the lock.`,
|
|
273
|
+
{
|
|
274
|
+
recovery: cliRecovery(
|
|
275
|
+
`${RECOVERY_CLI_PREFIX}sources update`,
|
|
276
|
+
"Update the lock without --frozen, then commit it.",
|
|
277
|
+
),
|
|
278
|
+
},
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
switch (ref.kind) {
|
|
283
|
+
case "file": {
|
|
284
|
+
if (!existsSync(ref.path)) {
|
|
285
|
+
throw PragmaError.configError(
|
|
286
|
+
`Package "${ref.pkg}" path not found: ${ref.path}.`,
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
return {
|
|
290
|
+
name: ref.pkg,
|
|
291
|
+
source: ref.source,
|
|
292
|
+
resolved: ref.path,
|
|
293
|
+
root: ref.path,
|
|
294
|
+
sources: readTtlSources(ref.path, ref.pkg),
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
case "npm": {
|
|
299
|
+
const require = createRequire(join(options.cwd, "noop.js"));
|
|
300
|
+
const pkgJsonPath = resolvePackageJson(require, ref.pkg);
|
|
301
|
+
if (pkgJsonPath === undefined) {
|
|
302
|
+
throw PragmaError.configError(
|
|
303
|
+
`Package "${ref.pkg}" is not installed. Add it to the project.`,
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
const dir = dirname(pkgJsonPath);
|
|
307
|
+
let version: string;
|
|
308
|
+
try {
|
|
309
|
+
version =
|
|
310
|
+
(JSON.parse(readFileSync(pkgJsonPath, "utf-8")).version as string) ??
|
|
311
|
+
"0.0.0";
|
|
312
|
+
} catch (error) {
|
|
313
|
+
// A malformed `package.json` for an otherwise-installed package: name it
|
|
314
|
+
// as a data error, not an INTERNAL_ERROR "please report this issue".
|
|
315
|
+
throw PragmaError.configError(
|
|
316
|
+
`Package "${ref.pkg}" has an invalid package.json (${pkgJsonPath}): ${errorDetail(error)}`,
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
name: ref.pkg,
|
|
321
|
+
source: ref.source,
|
|
322
|
+
resolved: version,
|
|
323
|
+
root: dir,
|
|
324
|
+
sources: readTtlSources(dir, ref.pkg),
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
case "git": {
|
|
329
|
+
const useCommit = options.frozen && options.pinned;
|
|
330
|
+
const dir = join(
|
|
331
|
+
refsCacheDir(),
|
|
332
|
+
sanitize(ref.pkg),
|
|
333
|
+
sanitize(useCommit ? (options.pinned as string) : ref.ref),
|
|
334
|
+
);
|
|
335
|
+
let resolved: string;
|
|
336
|
+
try {
|
|
337
|
+
if (useCommit) {
|
|
338
|
+
checkoutCommit(ref.url, options.pinned as string, dir);
|
|
339
|
+
resolved = options.pinned as string;
|
|
340
|
+
} else if (existsSync(dir)) {
|
|
341
|
+
resolved = fetchRef(ref.url, ref.ref, dir);
|
|
342
|
+
} else {
|
|
343
|
+
cloneRef(ref.url, ref.ref, dir);
|
|
344
|
+
resolved = headCommit(dir);
|
|
345
|
+
}
|
|
346
|
+
} catch (error) {
|
|
347
|
+
// A git clone/fetch/checkout failed — an unreachable remote, a moved or
|
|
348
|
+
// deleted ref, an auth/credential problem, or (under --frozen) a pinned
|
|
349
|
+
// commit that is gone. Name the package + ref with git's own reason so
|
|
350
|
+
// it reads as a fixable data/reproducibility error, not INTERNAL_ERROR.
|
|
351
|
+
throw useCommit
|
|
352
|
+
? PragmaError.configError(
|
|
353
|
+
`Cannot reproduce "${ref.pkg}" under --frozen: commit ${options.pinned} could not be checked out from ${redactUrl(ref.url)}. ${errorDetail(error)}`,
|
|
354
|
+
{
|
|
355
|
+
recovery: {
|
|
356
|
+
message:
|
|
357
|
+
"The pinned commit may have been force-pushed away or the remote is unreachable. Restore access to it, or re-run `pragma sources update` without --frozen to re-pin.",
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
)
|
|
361
|
+
: PragmaError.configError(
|
|
362
|
+
`Cannot resolve "${ref.pkg}" from ${redactUrl(ref.url)}#${ref.ref}: ${errorDetail(error)}`,
|
|
363
|
+
{
|
|
364
|
+
recovery: {
|
|
365
|
+
message:
|
|
366
|
+
"Check the git URL and ref, your network, and your git credentials, then re-run the update.",
|
|
367
|
+
},
|
|
368
|
+
},
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
return {
|
|
372
|
+
name: ref.pkg,
|
|
373
|
+
source: ref.source,
|
|
374
|
+
resolved,
|
|
375
|
+
root: dir,
|
|
376
|
+
sources: readTtlSources(dir, ref.pkg),
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|