@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,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan the symlink install of package-provided skills (U10).
|
|
3
|
+
*
|
|
4
|
+
* Design-system packages ship a top-level `skills/<name>/SKILL.md`, but skill
|
|
5
|
+
* discovery only scans the project root and the installed-skills root — never a
|
|
6
|
+
* resolved package's clone/dir. So `sources update` INSTALLS each package's
|
|
7
|
+
* skills into the installed-skills root (`$XDG_DATA_HOME/pragma/skills`) as
|
|
8
|
+
* symlinks, exactly the root `discoverSkills` already reads. Precedence is
|
|
9
|
+
* preserved (a project `.pragma/skills` entry still wins — it is discovered
|
|
10
|
+
* first), and the update Task stays reversible (each created link carries an
|
|
11
|
+
* unlink undo).
|
|
12
|
+
*
|
|
13
|
+
* Decisions run against REAL fs here so the update's `--dry-run` plan is
|
|
14
|
+
* accurate; the composed Task performs only the symlink/delete effects.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { existsSync, lstatSync, readdirSync, readlinkSync } from "node:fs";
|
|
18
|
+
import { basename, join, resolve } from "node:path";
|
|
19
|
+
import type { ResolvedPackage } from "../../kernel/runtime/refs/resolve.js";
|
|
20
|
+
import { installedSkillsDir } from "../skill/discover.js";
|
|
21
|
+
|
|
22
|
+
/** One planned skill symlink into the installed-skills root. */
|
|
23
|
+
export interface SkillLinkAction {
|
|
24
|
+
/** The package's skill folder — the symlink target. */
|
|
25
|
+
readonly target: string;
|
|
26
|
+
/** `<installedSkillsDir>/<folderName>` — where the symlink is created. */
|
|
27
|
+
readonly linkPath: string;
|
|
28
|
+
/** created (absent), skipped (already correct / a real dir), or replaced. */
|
|
29
|
+
readonly action: "created" | "skipped" | "replaced";
|
|
30
|
+
/** The skill folder name (the discovery key). */
|
|
31
|
+
readonly folderName: string;
|
|
32
|
+
/** The package the skill came from. */
|
|
33
|
+
readonly packageName: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** What currently occupies a candidate link path. */
|
|
37
|
+
type LinkState =
|
|
38
|
+
| { readonly kind: "absent" }
|
|
39
|
+
| { readonly kind: "symlink"; readonly target: string }
|
|
40
|
+
| { readonly kind: "other" };
|
|
41
|
+
|
|
42
|
+
/** Classify a link path: absent, our-or-another symlink, or a real entry. */
|
|
43
|
+
function linkState(linkPath: string): LinkState {
|
|
44
|
+
let stat: ReturnType<typeof lstatSync>;
|
|
45
|
+
try {
|
|
46
|
+
stat = lstatSync(linkPath);
|
|
47
|
+
} catch {
|
|
48
|
+
return { kind: "absent" };
|
|
49
|
+
}
|
|
50
|
+
if (stat.isSymbolicLink()) {
|
|
51
|
+
try {
|
|
52
|
+
return { kind: "symlink", target: readlinkSync(linkPath) };
|
|
53
|
+
} catch {
|
|
54
|
+
return { kind: "other" };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return { kind: "other" };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Skill folders (immediate subdirs with a `SKILL.md`) under `<root>/skills`. */
|
|
61
|
+
function packageSkillDirs(root: string): string[] {
|
|
62
|
+
const skillsDir = join(root, "skills");
|
|
63
|
+
let names: string[];
|
|
64
|
+
try {
|
|
65
|
+
names = readdirSync(skillsDir);
|
|
66
|
+
} catch {
|
|
67
|
+
return []; // No `skills/` dir — the common case.
|
|
68
|
+
}
|
|
69
|
+
const out: string[] = [];
|
|
70
|
+
for (const name of names) {
|
|
71
|
+
const dir = join(skillsDir, name);
|
|
72
|
+
try {
|
|
73
|
+
if (lstatSync(dir).isDirectory() && existsSync(join(dir, "SKILL.md"))) {
|
|
74
|
+
out.push(dir);
|
|
75
|
+
}
|
|
76
|
+
} catch {
|
|
77
|
+
// Unreadable entry — skip.
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return out;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Plan the symlink actions that install each resolved package's `skills/*` into
|
|
85
|
+
* the installed-skills discovery root. First-seen wins on a folder-name clash
|
|
86
|
+
* across packages. A real (non-symlink) entry at the link path is left untouched
|
|
87
|
+
* (`skipped`) so a manually-installed skill is never clobbered.
|
|
88
|
+
*
|
|
89
|
+
* @param resolved - The resolved packages (each carrying its on-disk `root`).
|
|
90
|
+
* @returns The planned actions (including `skipped`, for an accurate preview).
|
|
91
|
+
* @note Impure — stats the filesystem to decide each action.
|
|
92
|
+
*/
|
|
93
|
+
export function planSkillInstall(
|
|
94
|
+
resolved: readonly ResolvedPackage[],
|
|
95
|
+
): SkillLinkAction[] {
|
|
96
|
+
const dest = installedSkillsDir();
|
|
97
|
+
const actions: SkillLinkAction[] = [];
|
|
98
|
+
const seen = new Set<string>();
|
|
99
|
+
for (const pkg of resolved) {
|
|
100
|
+
for (const skillDir of packageSkillDirs(pkg.root)) {
|
|
101
|
+
const folderName = basename(skillDir);
|
|
102
|
+
if (seen.has(folderName)) continue;
|
|
103
|
+
seen.add(folderName);
|
|
104
|
+
const linkPath = resolve(dest, folderName);
|
|
105
|
+
const state = linkState(linkPath);
|
|
106
|
+
const action: SkillLinkAction["action"] =
|
|
107
|
+
state.kind === "absent"
|
|
108
|
+
? "created"
|
|
109
|
+
: state.kind === "symlink" && state.target === skillDir
|
|
110
|
+
? "skipped"
|
|
111
|
+
: state.kind === "symlink"
|
|
112
|
+
? "replaced"
|
|
113
|
+
: "skipped";
|
|
114
|
+
actions.push({
|
|
115
|
+
target: skillDir,
|
|
116
|
+
linkPath,
|
|
117
|
+
action,
|
|
118
|
+
folderName,
|
|
119
|
+
packageName: pkg.name,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return actions;
|
|
124
|
+
}
|
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the `sources update` Task.
|
|
3
|
+
*
|
|
4
|
+
* Two modes, chosen by `runtime.mutation.preview`:
|
|
5
|
+
*
|
|
6
|
+
* - Preview (CLI `--dry-run`, or MCP without `confirm`): NETWORK-FREE. It reads
|
|
7
|
+
* only the config, then hands back a plan-only Task listing the refs it would
|
|
8
|
+
* resolve+build and the lock it would write — no git fetch, no compile, no
|
|
9
|
+
* cache write. This is what a dry-run / agent "preview" must be: side-effect
|
|
10
|
+
* free and offline-safe.
|
|
11
|
+
* - Real execution: the heavy work — resolve every configured package (git
|
|
12
|
+
* clone/fetch, file verify, npm resolve), then build the ONE combined
|
|
13
|
+
* content-addressed pack — runs eagerly (it is not expressible as a task
|
|
14
|
+
* effect: the effect set is fs + exec, and the in-process compile is not an
|
|
15
|
+
* effect at all). The returned Task models the one project mutation, the
|
|
16
|
+
* `pragma.lock.json` write, with an undo that restores (or removes) the prior
|
|
17
|
+
* lock. Under `--frozen` each package re-resolves to the lock's pinned
|
|
18
|
+
* revision and keeps its `resolvedAt`, so an unchanged update rewrites a
|
|
19
|
+
* byte-identical lock.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import {
|
|
23
|
+
$,
|
|
24
|
+
deleteFile,
|
|
25
|
+
gen,
|
|
26
|
+
info,
|
|
27
|
+
mkdir,
|
|
28
|
+
symlink,
|
|
29
|
+
type Task,
|
|
30
|
+
writeFile,
|
|
31
|
+
} from "@canonical/task";
|
|
32
|
+
import { RECOVERY_CLI_PREFIX, VERSION } from "../../constants.js";
|
|
33
|
+
import type { PackageEntry } from "../../kernel/config/types.js";
|
|
34
|
+
import { PragmaError } from "../../kernel/error/PragmaError.js";
|
|
35
|
+
import { cliRecovery } from "../../kernel/error/recovery.js";
|
|
36
|
+
import { buildPack } from "../../kernel/runtime/graphpack/build.js";
|
|
37
|
+
import {
|
|
38
|
+
type PragmaLock,
|
|
39
|
+
readLock,
|
|
40
|
+
serializeLock,
|
|
41
|
+
} from "../../kernel/runtime/lock.js";
|
|
42
|
+
import { LOCK_BASENAME, lockPath } from "../../kernel/runtime/paths.js";
|
|
43
|
+
import type { PackageRef } from "../../kernel/runtime/refs/parseRef.js";
|
|
44
|
+
import {
|
|
45
|
+
parsePackageEntry,
|
|
46
|
+
redactUrl,
|
|
47
|
+
} from "../../kernel/runtime/refs/parseRef.js";
|
|
48
|
+
import {
|
|
49
|
+
detectPrefixClashes,
|
|
50
|
+
harvestPrefixes,
|
|
51
|
+
type ResolvedPackage,
|
|
52
|
+
resolvePackage,
|
|
53
|
+
} from "../../kernel/runtime/refs/resolve.js";
|
|
54
|
+
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
55
|
+
import { installedSkillsDir } from "../skill/discover.js";
|
|
56
|
+
import { planSkillInstall } from "./installSkills.js";
|
|
57
|
+
import type { SourcesUpdateData } from "./types.js";
|
|
58
|
+
|
|
59
|
+
/** Generic-core prefixes; config `prefixes` merge over them (config wins). */
|
|
60
|
+
const CORE_PREFIXES: Readonly<Record<string, string>> = {
|
|
61
|
+
rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
|
|
62
|
+
rdfs: "http://www.w3.org/2000/01/rdf-schema#",
|
|
63
|
+
owl: "http://www.w3.org/2002/07/owl#",
|
|
64
|
+
xsd: "http://www.w3.org/2001/XMLSchema#",
|
|
65
|
+
skos: "http://www.w3.org/2004/02/skos/core#",
|
|
66
|
+
sh: "http://www.w3.org/ns/shacl#",
|
|
67
|
+
dcterms: "http://purl.org/dc/terms/",
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const entryName = (entry: PackageEntry): string =>
|
|
71
|
+
typeof entry === "string" ? entry : entry.name;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Build the NETWORK-FREE preview plan for `sources update`.
|
|
75
|
+
*
|
|
76
|
+
* A plan-only Task: it reads the config to list the refs a real update would
|
|
77
|
+
* resolve and build, then models the single project mutation (the lock write)
|
|
78
|
+
* as effects the dry-run interpreter can describe WITHOUT running them. No git,
|
|
79
|
+
* no compile, no cache write — so `--dry-run` and an MCP plan-first call are
|
|
80
|
+
* offline-safe. Config refs are parsed (a cheap, offline validity check) but
|
|
81
|
+
* never resolved.
|
|
82
|
+
*
|
|
83
|
+
* @param runtime - The per-invocation runtime.
|
|
84
|
+
* @returns A plan-only Task describing the intended effects.
|
|
85
|
+
*/
|
|
86
|
+
async function buildUpdatePlan(
|
|
87
|
+
runtime: PragmaRuntime,
|
|
88
|
+
): Promise<Task<SourcesUpdateData>> {
|
|
89
|
+
const layers = await runtime.loadConfig();
|
|
90
|
+
const entries = layers.config.packages ?? [];
|
|
91
|
+
const refs = entries.map(parsePackageEntry);
|
|
92
|
+
const path = lockPath(runtime.cwd);
|
|
93
|
+
|
|
94
|
+
const data: SourcesUpdateData = {
|
|
95
|
+
contentHash: "",
|
|
96
|
+
reused: false,
|
|
97
|
+
lockPath: path,
|
|
98
|
+
packs: refs.map((ref) => ({ name: ref.pkg, resolved: "", sourceCount: 0 })),
|
|
99
|
+
};
|
|
100
|
+
// A representative (never-written) lock, so the previewed write shows a
|
|
101
|
+
// plausible shape/size. Placeholders make clear nothing was resolved.
|
|
102
|
+
const previewLock: PragmaLock = {
|
|
103
|
+
version: 1,
|
|
104
|
+
contentHash: "(resolved on execute)",
|
|
105
|
+
packs: refs.map((ref) => ({
|
|
106
|
+
name: ref.pkg,
|
|
107
|
+
source: ref.source,
|
|
108
|
+
resolved: "(resolved on execute)",
|
|
109
|
+
resolvedAt: "(resolved on execute)",
|
|
110
|
+
})),
|
|
111
|
+
};
|
|
112
|
+
const previewContent = serializeLock(previewLock);
|
|
113
|
+
|
|
114
|
+
return gen(function* () {
|
|
115
|
+
yield* $(
|
|
116
|
+
info(
|
|
117
|
+
refs.length > 0
|
|
118
|
+
? `Resolve and build ${refs.length} package(s): ${refs.map((ref) => ref.source).join(", ")}`
|
|
119
|
+
: "No packages configured — the embedded pack answers store reads",
|
|
120
|
+
),
|
|
121
|
+
);
|
|
122
|
+
// The one project mutation, previewed (dry-run never executes it).
|
|
123
|
+
yield* $(writeFile(path, previewContent));
|
|
124
|
+
return data;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Resolve, build, and produce the lock-writing Task — or, for a preview, the
|
|
130
|
+
* network-free plan.
|
|
131
|
+
*
|
|
132
|
+
* @param runtime - The per-invocation runtime.
|
|
133
|
+
* @param frozen - When true, re-resolve to the lock's pinned revisions only.
|
|
134
|
+
* @returns A Task that writes `pragma.lock.json` and returns the update result.
|
|
135
|
+
* @note Impure — resolves packages (may hit git) and builds the pack eagerly,
|
|
136
|
+
* UNLESS `runtime.mutation.preview` is set, in which case it stays offline.
|
|
137
|
+
*/
|
|
138
|
+
export async function buildUpdateTask(
|
|
139
|
+
runtime: PragmaRuntime,
|
|
140
|
+
frozen: boolean,
|
|
141
|
+
skipInvalid = false,
|
|
142
|
+
): Promise<Task<SourcesUpdateData>> {
|
|
143
|
+
if (runtime.mutation?.preview) return buildUpdatePlan(runtime);
|
|
144
|
+
|
|
145
|
+
// Progress seam (U7/U11): stream stage lines while the heavy EAGER work — the
|
|
146
|
+
// clone/parse/build below — runs, so the long op is never silent. Unset over
|
|
147
|
+
// MCP (a no-op there); `--verbose` adds a line per source (U11).
|
|
148
|
+
const report = runtime.report;
|
|
149
|
+
const verbose = runtime.globalFlags.verbose;
|
|
150
|
+
|
|
151
|
+
const layers = await runtime.loadConfig();
|
|
152
|
+
const entries = layers.config.packages ?? [];
|
|
153
|
+
const existing = readLock(runtime.cwd);
|
|
154
|
+
const priorContent = existing ? serializeLock(existing) : undefined;
|
|
155
|
+
|
|
156
|
+
const resolved: ResolvedPackage[] = [];
|
|
157
|
+
for (const entry of entries) {
|
|
158
|
+
const ref = parsePackageEntry(entry);
|
|
159
|
+
report?.(resolveProgress(ref));
|
|
160
|
+
const pinned = existing?.packs.find((pack) => pack.name === ref.pkg);
|
|
161
|
+
resolved.push(
|
|
162
|
+
await resolvePackage(ref, {
|
|
163
|
+
cwd: runtime.cwd,
|
|
164
|
+
frozen,
|
|
165
|
+
pinned: pinned?.resolved,
|
|
166
|
+
}),
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Prefix precedence: core < pack < config. A resolved package's own
|
|
171
|
+
// `@prefix` declarations are harvested from its TTL and merged beneath config
|
|
172
|
+
// so the index compacts pack URIs to `pfx:Local` (the FROZEN {name,type}
|
|
173
|
+
// token contract); config still wins any clash. The merged map is persisted
|
|
174
|
+
// in the manifest, so boot reads the same names.
|
|
175
|
+
const inputs = resolved.flatMap((pkg) => pkg.sources);
|
|
176
|
+
|
|
177
|
+
// Refuse to lock an empty store (A4). A package that ships no `.ttl` (or no
|
|
178
|
+
// configured packages at all) would build a 0-triple pack whose empty
|
|
179
|
+
// `data.nq` fails the completeness gate — so the "successful" update boots to
|
|
180
|
+
// a PERMANENT `STORE_UNAVAILABLE` loop. Fail loudly here, leaving the embedded
|
|
181
|
+
// fallback (or the prior lock) intact, instead of writing that broken lock.
|
|
182
|
+
if (inputs.length === 0) {
|
|
183
|
+
throw PragmaError.configError(
|
|
184
|
+
entries.length === 0
|
|
185
|
+
? "No packages are configured, so there are no sources to build a store from. The embedded sample pack answers reads until you add a package."
|
|
186
|
+
: `The ${entries.length} configured package(s) resolved 0 RDF sources (no definitions/**.ttl or data/**.ttl). Refusing to write a lock for an empty store.`,
|
|
187
|
+
{
|
|
188
|
+
recovery: cliRecovery(
|
|
189
|
+
`${RECOVERY_CLI_PREFIX}sources update --verbose`,
|
|
190
|
+
"Add a package that ships `.ttl` under definitions/ or data/, then re-run.",
|
|
191
|
+
),
|
|
192
|
+
},
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const prefixes = {
|
|
197
|
+
...CORE_PREFIXES,
|
|
198
|
+
...harvestPrefixes(inputs),
|
|
199
|
+
...(layers.config.prefixes ?? {}),
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
// Warn on conflicting `@prefix` declarations across packages (A5): last-wins
|
|
203
|
+
// is silent otherwise, compacting the losing package's URIs to the wrong
|
|
204
|
+
// prefix. Display-only, so a warning (not a hard failure) is the right call.
|
|
205
|
+
for (const clash of detectPrefixClashes(inputs)) {
|
|
206
|
+
report?.(
|
|
207
|
+
`Prefix "${clash.label}:" is declared with conflicting IRIs across packages (${clash.iris.join(" vs ")}); last wins, so some entities may compact to the wrong prefix.`,
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
report?.(`Building store from ${inputs.length} source(s)`);
|
|
212
|
+
if (verbose) for (const input of inputs) report?.(` parse ${input.path}`);
|
|
213
|
+
|
|
214
|
+
// Build the pack. On a parse/build failure, classify it as a NAMED data error
|
|
215
|
+
// (U6) — not INTERNAL_ERROR's "please report this issue" — identifying the
|
|
216
|
+
// offending package source, since ke's parser error carries only line/column.
|
|
217
|
+
// With `--skip-invalid`, drop the unparseable sources (warning LOUDLY about
|
|
218
|
+
// each — never a silent partial graph) and build from the rest instead of
|
|
219
|
+
// failing the whole update.
|
|
220
|
+
const sourceRef = entries.map(entryName).join(",") || "embedded";
|
|
221
|
+
let built: Awaited<ReturnType<typeof buildPack>>;
|
|
222
|
+
try {
|
|
223
|
+
built = await buildPack(inputs, {
|
|
224
|
+
name: "pragma",
|
|
225
|
+
version: VERSION,
|
|
226
|
+
sourceRef,
|
|
227
|
+
prefixes,
|
|
228
|
+
});
|
|
229
|
+
} catch (error) {
|
|
230
|
+
if (!skipInvalid) throw await classifySourceBuildError(error, inputs);
|
|
231
|
+
const bad = await collectBadSources(inputs);
|
|
232
|
+
// A build failure not attributable to a single unparseable source (e.g. a
|
|
233
|
+
// cross-file conflict) can't be skipped away — surface the named error.
|
|
234
|
+
if (bad.length === 0) throw await classifySourceBuildError(error, inputs);
|
|
235
|
+
const badPaths = new Set(bad.map((entry) => entry.path));
|
|
236
|
+
const usableInputs = inputs.filter((input) => !badPaths.has(input.path));
|
|
237
|
+
for (const entry of bad)
|
|
238
|
+
report?.(` skipped invalid source ${entry.path}: ${entry.message}`);
|
|
239
|
+
report?.(
|
|
240
|
+
`Skipped ${bad.length} invalid source(s); building from ${usableInputs.length} of ${inputs.length}`,
|
|
241
|
+
);
|
|
242
|
+
if (usableInputs.length === 0)
|
|
243
|
+
throw PragmaError.configError(
|
|
244
|
+
`All ${inputs.length} configured source(s) failed to parse — nothing to build.`,
|
|
245
|
+
{
|
|
246
|
+
recovery: cliRecovery(
|
|
247
|
+
`${RECOVERY_CLI_PREFIX}sources update --verbose`,
|
|
248
|
+
"Fix the reported sources, then re-run.",
|
|
249
|
+
),
|
|
250
|
+
},
|
|
251
|
+
);
|
|
252
|
+
try {
|
|
253
|
+
built = await buildPack(usableInputs, {
|
|
254
|
+
name: "pragma",
|
|
255
|
+
version: VERSION,
|
|
256
|
+
sourceRef,
|
|
257
|
+
// Re-harvest prefixes from only the sources that survived, so a dropped
|
|
258
|
+
// file's declarations don't skew compaction.
|
|
259
|
+
prefixes: {
|
|
260
|
+
...CORE_PREFIXES,
|
|
261
|
+
...harvestPrefixes(usableInputs),
|
|
262
|
+
...(layers.config.prefixes ?? {}),
|
|
263
|
+
},
|
|
264
|
+
});
|
|
265
|
+
} catch (rebuildError) {
|
|
266
|
+
throw await classifySourceBuildError(rebuildError, usableInputs);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
report?.(
|
|
270
|
+
`${built.reused ? "Reused" : "Built"} store ${built.contentHash.slice(0, 12)}`,
|
|
271
|
+
);
|
|
272
|
+
|
|
273
|
+
// Refuse to lock a 0-triple build (A4): non-empty sources can still parse to
|
|
274
|
+
// no triples (e.g. comment-only TTL, or a file of only `@prefix` lines). A
|
|
275
|
+
// locked empty pack boots to the same `STORE_UNAVAILABLE` loop, so treat it
|
|
276
|
+
// as a data error rather than a silent "success". (A manifest predating the
|
|
277
|
+
// triple count is left alone — `undefined` never trips this.)
|
|
278
|
+
if (built.manifest.tripleCount === 0) {
|
|
279
|
+
throw PragmaError.configError(
|
|
280
|
+
`The configured sources parsed to 0 RDF triples, so the store would be empty. Refusing to write a lock for an empty store.`,
|
|
281
|
+
{
|
|
282
|
+
recovery: cliRecovery(
|
|
283
|
+
`${RECOVERY_CLI_PREFIX}sources update --verbose`,
|
|
284
|
+
"Check that the package sources actually contain RDF triples, then re-run.",
|
|
285
|
+
),
|
|
286
|
+
},
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const now = new Date().toISOString();
|
|
291
|
+
const lock: PragmaLock = {
|
|
292
|
+
version: 1,
|
|
293
|
+
contentHash: built.contentHash,
|
|
294
|
+
packs: resolved.map((pkg) => {
|
|
295
|
+
const prev = existing?.packs.find((entry) => entry.name === pkg.name);
|
|
296
|
+
// Preserve the prior `resolvedAt` when nothing actually changed — under
|
|
297
|
+
// --frozen (re-pinned to the same revision) AND on a plain re-run that
|
|
298
|
+
// resolves the IDENTICAL revision from the same source. Otherwise every
|
|
299
|
+
// `sources update` stamped a fresh timestamp and rewrote the lock, dirtying
|
|
300
|
+
// the git tree on a no-op run (L1). A moved revision still restamps.
|
|
301
|
+
const reproducible =
|
|
302
|
+
prev !== undefined &&
|
|
303
|
+
(frozen ||
|
|
304
|
+
(prev.resolved === pkg.resolved && prev.source === pkg.source));
|
|
305
|
+
return {
|
|
306
|
+
name: pkg.name,
|
|
307
|
+
source: pkg.source,
|
|
308
|
+
resolved: pkg.resolved,
|
|
309
|
+
resolvedAt: reproducible && prev ? prev.resolvedAt : now,
|
|
310
|
+
};
|
|
311
|
+
}),
|
|
312
|
+
};
|
|
313
|
+
const newContent = serializeLock(lock);
|
|
314
|
+
const path = lockPath(runtime.cwd);
|
|
315
|
+
|
|
316
|
+
const data: SourcesUpdateData = {
|
|
317
|
+
contentHash: built.contentHash,
|
|
318
|
+
reused: built.reused,
|
|
319
|
+
lockPath: path,
|
|
320
|
+
packs: resolved.map((pkg) => ({
|
|
321
|
+
name: pkg.name,
|
|
322
|
+
resolved: pkg.resolved,
|
|
323
|
+
sourceCount: pkg.sources.length,
|
|
324
|
+
})),
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
const undo =
|
|
328
|
+
priorContent !== undefined
|
|
329
|
+
? writeFile(path, priorContent)
|
|
330
|
+
: deleteFile(path);
|
|
331
|
+
|
|
332
|
+
// Install package-provided skills (U10): symlink each resolved package's
|
|
333
|
+
// `skills/*` into the installed-skills root, so `skill list` / `setup skills`
|
|
334
|
+
// see them after an update. Kept in this Task (reversible: created links carry
|
|
335
|
+
// an unlink undo) so `sources update --undo` also removes them.
|
|
336
|
+
const skillLinks = planSkillInstall(resolved).filter(
|
|
337
|
+
(link) => link.action !== "skipped",
|
|
338
|
+
);
|
|
339
|
+
if (skillLinks.length > 0)
|
|
340
|
+
report?.(`Installing ${skillLinks.length} skill(s)`);
|
|
341
|
+
|
|
342
|
+
report?.(`Writing ${LOCK_BASENAME}`);
|
|
343
|
+
return gen(function* () {
|
|
344
|
+
yield* $(writeFile(path, newContent, { undo }));
|
|
345
|
+
if (skillLinks.length > 0) {
|
|
346
|
+
yield* $(mkdir(installedSkillsDir(), true));
|
|
347
|
+
for (const link of skillLinks) {
|
|
348
|
+
if (link.action === "replaced") yield* $(deleteFile(link.linkPath));
|
|
349
|
+
yield* $(
|
|
350
|
+
symlink(link.target, link.linkPath, {
|
|
351
|
+
undo: deleteFile(link.linkPath),
|
|
352
|
+
}),
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return data;
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/** Progress line for a package about to be resolved, phrased by ref kind. */
|
|
361
|
+
function resolveProgress(ref: PackageRef): string {
|
|
362
|
+
switch (ref.kind) {
|
|
363
|
+
case "git":
|
|
364
|
+
return `Cloning ${ref.pkg} from ${redactUrl(ref.url)}`;
|
|
365
|
+
case "file":
|
|
366
|
+
return `Reading ${ref.pkg} from ${ref.path}`;
|
|
367
|
+
case "npm":
|
|
368
|
+
return `Resolving ${ref.pkg}`;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Classify a pack-build failure as a NAMED data error (U6).
|
|
374
|
+
*
|
|
375
|
+
* ke/Oxigraph parses each source's Turtle, but its thrown parser error carries
|
|
376
|
+
* only the line/column — NOT which source produced it (it sees a content string,
|
|
377
|
+
* not a path). So on failure we re-parse each source in ISOLATION to find the
|
|
378
|
+
* first that throws — the culprit — and raise a `CONFIG_ERROR` naming its
|
|
379
|
+
* `pkg/relative-path` with the parser's own message and an actionable recovery.
|
|
380
|
+
* This runs only on the error path, so the per-source re-parse cost is paid once.
|
|
381
|
+
* A `PragmaError` from resolution (e.g. a missing file) is already classified and
|
|
382
|
+
* passes through untouched.
|
|
383
|
+
*
|
|
384
|
+
* @param error - The value thrown by `buildPack`.
|
|
385
|
+
* @param inputs - The labelled sources handed to the build.
|
|
386
|
+
* @returns A classified {@link PragmaError} (never INTERNAL_ERROR for bad data).
|
|
387
|
+
*/
|
|
388
|
+
export async function classifySourceBuildError(
|
|
389
|
+
error: unknown,
|
|
390
|
+
inputs: readonly { readonly path: string; readonly content: string }[],
|
|
391
|
+
): Promise<PragmaError> {
|
|
392
|
+
if (error instanceof PragmaError) return error;
|
|
393
|
+
const parserMessage = error instanceof Error ? error.message : String(error);
|
|
394
|
+
const culprit = await isolateBadSource(inputs);
|
|
395
|
+
const detail = culprit?.message ?? parserMessage;
|
|
396
|
+
const where = culprit
|
|
397
|
+
? `Package source "${culprit.path}" could not be parsed`
|
|
398
|
+
: "The configured package sources could not be built into a store";
|
|
399
|
+
return PragmaError.configError(`${where}: ${detail}`, {
|
|
400
|
+
recovery: cliRecovery(
|
|
401
|
+
`${RECOVERY_CLI_PREFIX}sources update --verbose`,
|
|
402
|
+
"Re-run with --verbose to see each file as it parses. If a package ships malformed RDF, report it to that package's maintainer.",
|
|
403
|
+
),
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Re-parse each source alone to find the first that fails to parse.
|
|
409
|
+
*
|
|
410
|
+
* @param inputs - The labelled sources.
|
|
411
|
+
* @returns The offending source's path + parser message, or `undefined` if none
|
|
412
|
+
* fails in isolation (a build failure unrelated to a single bad source).
|
|
413
|
+
* @note Impure — boots a throwaway ke store per source; error path only.
|
|
414
|
+
*/
|
|
415
|
+
async function isolateBadSource(
|
|
416
|
+
inputs: readonly { readonly path: string; readonly content: string }[],
|
|
417
|
+
): Promise<{ path: string; message: string } | undefined> {
|
|
418
|
+
const { createStore } = await import("@canonical/ke");
|
|
419
|
+
for (const input of inputs) {
|
|
420
|
+
try {
|
|
421
|
+
const store = await createStore({
|
|
422
|
+
sources: [{ content: input.content, path: input.path }],
|
|
423
|
+
});
|
|
424
|
+
store.dispose();
|
|
425
|
+
} catch (error) {
|
|
426
|
+
return {
|
|
427
|
+
path: input.path,
|
|
428
|
+
message: error instanceof Error ? error.message : String(error),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return undefined;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/**
|
|
436
|
+
* Re-parse each source in isolation and collect EVERY one that fails to parse.
|
|
437
|
+
*
|
|
438
|
+
* Backs `--skip-invalid`: {@link isolateBadSource} returns just the first
|
|
439
|
+
* culprit (for the error message), whereas the skip path needs the full set to
|
|
440
|
+
* drop before rebuilding. Error path only — one throwaway ke store per source.
|
|
441
|
+
*
|
|
442
|
+
* @param inputs - The labelled sources.
|
|
443
|
+
* @returns Every source that fails to parse alone, with its parser message.
|
|
444
|
+
*/
|
|
445
|
+
async function collectBadSources(
|
|
446
|
+
inputs: readonly { readonly path: string; readonly content: string }[],
|
|
447
|
+
): Promise<{ path: string; message: string }[]> {
|
|
448
|
+
const { createStore } = await import("@canonical/ke");
|
|
449
|
+
const bad: { path: string; message: string }[] = [];
|
|
450
|
+
for (const input of inputs) {
|
|
451
|
+
try {
|
|
452
|
+
const store = await createStore({
|
|
453
|
+
sources: [{ content: input.content, path: input.path }],
|
|
454
|
+
});
|
|
455
|
+
store.dispose();
|
|
456
|
+
} catch (error) {
|
|
457
|
+
bad.push({
|
|
458
|
+
path: input.path,
|
|
459
|
+
message: error instanceof Error ? error.message : String(error),
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return bad;
|
|
464
|
+
}
|