@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,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatters for `pragma colophon` — plain (styled Markdown), llm (condensed
|
|
3
|
+
* Markdown passthrough), json (the structured envelope). Pure and dependency-
|
|
4
|
+
* light: the plain path routes through the `chalk`-only {@link
|
|
5
|
+
* renderMarkdownToTerminal}; there is NO Ink here.
|
|
6
|
+
*
|
|
7
|
+
* The section title is composed as an H1 (`# <title>`) and fed through the ONE
|
|
8
|
+
* styler, so all heading styling lives in a single place and the authored body
|
|
9
|
+
* (which carries no leading H1) is never double-titled.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { defaultStyle, type RenderStyle } from "../../kernel/render/style.js";
|
|
13
|
+
import type { Formatters } from "../../kernel/spec/types.js";
|
|
14
|
+
import { renderMarkdownToTerminal } from "./markdownTerminal.js";
|
|
15
|
+
import type { ColophonData, ColophonSection } from "./types.js";
|
|
16
|
+
|
|
17
|
+
/** Render one section (title as H1 + body) as styled terminal Markdown. */
|
|
18
|
+
function plainSection(section: ColophonSection, style: RenderStyle): string {
|
|
19
|
+
return renderMarkdownToTerminal(
|
|
20
|
+
`# ${section.title}\n\n${section.markdown}`,
|
|
21
|
+
style,
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Render one section as condensed Markdown for `--format llm` (summary preferred). */
|
|
26
|
+
function llmSection(section: ColophonSection): string {
|
|
27
|
+
return `## ${section.title}\n\n${section.summary ?? section.markdown}`;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const colophonFormatters: Formatters<ColophonData> = {
|
|
31
|
+
plain(data) {
|
|
32
|
+
// Resolve the TTY decision ONCE (impure: reads stdout.isTTY + chalk level),
|
|
33
|
+
// then render every section through the same inert-off-a-TTY styler.
|
|
34
|
+
const style = defaultStyle();
|
|
35
|
+
return data.sections
|
|
36
|
+
.map((section) => plainSection(section, style))
|
|
37
|
+
.join("\n\n");
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
llm(data) {
|
|
41
|
+
return data.sections.map(llmSection).join("\n\n");
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
json(data) {
|
|
45
|
+
return JSON.stringify(data);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `pragma colophon` — the storeless, pack-extensible toolchain colophon (PR10).
|
|
3
|
+
*
|
|
4
|
+
* Pins the covenant-exact emitted slice (`{ v:"colophon", mcp:"colophon" }`),
|
|
5
|
+
* proves the collector is storeless and combines pragma's built-in section with
|
|
6
|
+
* the active pack's (the bundled `block` design-system colophon), exercises the
|
|
7
|
+
* three formatter modes + `--format` precedence, holds CLI-json ≡ MCP
|
|
8
|
+
* parity, and checks the pack-grammar accepts a `colophon` field (rejecting a
|
|
9
|
+
* non-string).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
13
|
+
import { tmpdir } from "node:os";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
17
|
+
import { PragmaError } from "../../kernel/error/PragmaError.js";
|
|
18
|
+
import { parsePackDefinition } from "../../kernel/packs/schema.js";
|
|
19
|
+
import { executeVerb } from "../../kernel/project/cli/dispatch.js";
|
|
20
|
+
import { bootRuntime } from "../../kernel/runtime/boot.js";
|
|
21
|
+
import { emitSurface, emitVerb } from "../../kernel/spec/emitSurface.js";
|
|
22
|
+
import {
|
|
23
|
+
assertConforms,
|
|
24
|
+
type Covenant,
|
|
25
|
+
} from "../../kernel/spec/surfaceConformance.js";
|
|
26
|
+
import type { GlobalFlags, VerbSpec } from "../../kernel/spec/types.js";
|
|
27
|
+
import { projectMcp } from "../../testing/helpers/projectMcp.js";
|
|
28
|
+
import { collectColophon } from "./collectColophon.js";
|
|
29
|
+
import { colophonFormatters } from "./colophon.render.js";
|
|
30
|
+
import { colophonModule } from "./index.js";
|
|
31
|
+
import type { ColophonData } from "./types.js";
|
|
32
|
+
|
|
33
|
+
/** The committed covenant, read from disk exactly as a consumer would. */
|
|
34
|
+
const golden = JSON.parse(
|
|
35
|
+
readFileSync(
|
|
36
|
+
fileURLToPath(new URL("../../../surface/surface.v2.json", import.meta.url)),
|
|
37
|
+
"utf-8",
|
|
38
|
+
),
|
|
39
|
+
) as Covenant;
|
|
40
|
+
|
|
41
|
+
const colophonVerb = colophonModule.verbs[0] as VerbSpec;
|
|
42
|
+
|
|
43
|
+
const FLAGS: GlobalFlags = {
|
|
44
|
+
llm: false,
|
|
45
|
+
autoLlm: false,
|
|
46
|
+
format: "plain",
|
|
47
|
+
verbose: false,
|
|
48
|
+
};
|
|
49
|
+
const FLAGS_JSON: GlobalFlags = { ...FLAGS, format: "json" };
|
|
50
|
+
const FLAGS_LLM: GlobalFlags = { ...FLAGS, format: "llm", llm: true };
|
|
51
|
+
const NO_MUT = { dryRun: false, undo: false, yes: false };
|
|
52
|
+
|
|
53
|
+
/** A deterministic two-section fixture for pure formatter assertions. */
|
|
54
|
+
const FIXTURE: ColophonData = {
|
|
55
|
+
sections: [
|
|
56
|
+
{
|
|
57
|
+
kind: "pragma",
|
|
58
|
+
title: "pragma",
|
|
59
|
+
markdown: "Intro **bold** line.\n\n## Section\n- one\n- two",
|
|
60
|
+
summary: "condensed pragma story",
|
|
61
|
+
source: "built-in",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
kind: "pack",
|
|
65
|
+
title: "block",
|
|
66
|
+
markdown: "The domain body, no summary.",
|
|
67
|
+
source: "pack:block",
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const roots: string[] = [];
|
|
73
|
+
let prevXdg: string | undefined;
|
|
74
|
+
const tmpCwd = (): string => {
|
|
75
|
+
const dir = mkdtempSync(join(tmpdir(), "pragma-colophon-"));
|
|
76
|
+
roots.push(dir);
|
|
77
|
+
return dir;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
beforeEach(() => {
|
|
81
|
+
// Isolate the global config layer so the collector reads defaults (no stories)
|
|
82
|
+
// and the run is hermetic.
|
|
83
|
+
prevXdg = process.env.XDG_CONFIG_HOME;
|
|
84
|
+
process.env.XDG_CONFIG_HOME = tmpCwd();
|
|
85
|
+
});
|
|
86
|
+
afterEach(() => {
|
|
87
|
+
process.env.XDG_CONFIG_HOME = prevXdg;
|
|
88
|
+
for (const dir of roots) rmSync(dir, { recursive: true, force: true });
|
|
89
|
+
roots.length = 0;
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
describe("colophon — covenant-exact emission (PROTECTED)", () => {
|
|
93
|
+
it("emits the self-verb slice { v: colophon, mcp: colophon }", () => {
|
|
94
|
+
expect(emitVerb(colophonVerb)).toEqual({ v: "colophon", mcp: "colophon" });
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("the emitted colophon slice conforms to the frozen covenant", () => {
|
|
98
|
+
expect(() =>
|
|
99
|
+
assertConforms(emitSurface([colophonModule]), golden),
|
|
100
|
+
).not.toThrow();
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
describe("colophon — storeless collector (PROTECTED)", () => {
|
|
105
|
+
it("collectColophon never boots the store", async () => {
|
|
106
|
+
const rt = bootRuntime(FLAGS, tmpCwd());
|
|
107
|
+
await collectColophon(rt);
|
|
108
|
+
expect(rt.store.booted).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("the verb runs without booting the store", async () => {
|
|
112
|
+
const rt = bootRuntime(FLAGS, tmpCwd());
|
|
113
|
+
const outcome = await executeVerb(colophonVerb, {}, NO_MUT, rt);
|
|
114
|
+
expect(outcome.exitCode).toBe(0);
|
|
115
|
+
expect(rt.store.booted).toBe(false);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
describe("colophon — combined content (pragma + active domain)", () => {
|
|
120
|
+
it("leads with pragma's built-in section", async () => {
|
|
121
|
+
const data = await collectColophon(bootRuntime(FLAGS, tmpCwd()));
|
|
122
|
+
const first = data.sections[0];
|
|
123
|
+
expect(first?.kind).toBe("pragma");
|
|
124
|
+
expect(first?.title).toBe("pragma");
|
|
125
|
+
expect(first?.source).toBe("built-in");
|
|
126
|
+
expect(first?.markdown.length).toBeGreaterThan(0);
|
|
127
|
+
expect(first?.summary?.length).toBeGreaterThan(0);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it("appends the bundled design-system (block) domain section", async () => {
|
|
131
|
+
const data = await collectColophon(bootRuntime(FLAGS, tmpCwd()));
|
|
132
|
+
const block = data.sections.find((section) => section.title === "block");
|
|
133
|
+
expect(block?.kind).toBe("pack");
|
|
134
|
+
expect(block?.source).toBe("pack:block");
|
|
135
|
+
expect(block?.markdown).toContain("knowledge graph");
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
describe("colophon — formatter modes", () => {
|
|
140
|
+
it("plain styles headings/bullets and titles every section", () => {
|
|
141
|
+
const out = colophonFormatters.plain(FIXTURE);
|
|
142
|
+
expect(out).toContain("pragma");
|
|
143
|
+
expect(out).toContain("block");
|
|
144
|
+
expect(out).toContain("•"); // the `-` bullet transform
|
|
145
|
+
expect(out).not.toContain("**bold**"); // inline markers are consumed
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it("llm prefers the summary, else the markdown body", () => {
|
|
149
|
+
const out = colophonFormatters.llm(FIXTURE);
|
|
150
|
+
expect(out).toContain("## pragma");
|
|
151
|
+
expect(out).toContain("condensed pragma story"); // summary used
|
|
152
|
+
expect(out).not.toContain("Intro **bold** line"); // full body NOT used
|
|
153
|
+
expect(out).toContain("## block");
|
|
154
|
+
expect(out).toContain("The domain body, no summary."); // markdown used
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("json round-trips the ColophonData", () => {
|
|
158
|
+
expect(JSON.parse(colophonFormatters.json(FIXTURE))).toEqual(FIXTURE);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it("--format json wins: executeVerb returns the {ok,data} envelope", async () => {
|
|
162
|
+
const outcome = await executeVerb(
|
|
163
|
+
colophonVerb,
|
|
164
|
+
{},
|
|
165
|
+
NO_MUT,
|
|
166
|
+
bootRuntime(FLAGS_JSON, tmpCwd()),
|
|
167
|
+
);
|
|
168
|
+
const envelope = JSON.parse(outcome.stdout as string);
|
|
169
|
+
expect(envelope.ok).toBe(true);
|
|
170
|
+
expect((envelope.data as ColophonData).sections[0]?.kind).toBe("pragma");
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it("--format llm selects the condensed Markdown form", async () => {
|
|
174
|
+
const outcome = await executeVerb(
|
|
175
|
+
colophonVerb,
|
|
176
|
+
{},
|
|
177
|
+
NO_MUT,
|
|
178
|
+
bootRuntime(FLAGS_LLM, tmpCwd()),
|
|
179
|
+
);
|
|
180
|
+
expect(outcome.stdout).toContain("## pragma");
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
describe("colophon — MCP parity", () => {
|
|
185
|
+
it("projects a read-only `colophon` tool that returns the pragma section", async () => {
|
|
186
|
+
const cwd = tmpCwd();
|
|
187
|
+
const mcp = await projectMcp([colophonModule], cwd);
|
|
188
|
+
const tool = (await mcp.listTools()).find((t) => t.name === "colophon");
|
|
189
|
+
const envelope = await mcp.callTool("colophon");
|
|
190
|
+
await mcp.cleanup();
|
|
191
|
+
|
|
192
|
+
expect(tool).toBeDefined();
|
|
193
|
+
expect(tool?.annotations).toMatchObject({
|
|
194
|
+
readOnlyHint: true,
|
|
195
|
+
openWorldHint: false,
|
|
196
|
+
});
|
|
197
|
+
expect(envelope.ok).toBe(true);
|
|
198
|
+
expect((envelope.data as ColophonData).sections[0]?.kind).toBe("pragma");
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it("CLI --format json ≡ MCP colophon (same envelope)", async () => {
|
|
202
|
+
const cwd = tmpCwd();
|
|
203
|
+
const cli = await executeVerb(
|
|
204
|
+
colophonVerb,
|
|
205
|
+
{},
|
|
206
|
+
NO_MUT,
|
|
207
|
+
bootRuntime(FLAGS_JSON, cwd),
|
|
208
|
+
);
|
|
209
|
+
const cliEnvelope = JSON.parse(cli.stdout as string);
|
|
210
|
+
|
|
211
|
+
const mcp = await projectMcp([colophonModule], cwd);
|
|
212
|
+
const mcpEnvelope = await mcp.callTool("colophon");
|
|
213
|
+
await mcp.cleanup();
|
|
214
|
+
|
|
215
|
+
expect(cliEnvelope).toEqual(mcpEnvelope);
|
|
216
|
+
expect(cliEnvelope.ok).toBe(true);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
describe("colophon — pack-grammar `colophon` field", () => {
|
|
221
|
+
it("parsePackDefinition accepts a string colophon", () => {
|
|
222
|
+
const def = parsePackDefinition(
|
|
223
|
+
{
|
|
224
|
+
noun: "demo",
|
|
225
|
+
lookup: { by: "ds:name" },
|
|
226
|
+
colophon: "How the demo domain is made.",
|
|
227
|
+
},
|
|
228
|
+
"config",
|
|
229
|
+
);
|
|
230
|
+
expect(def.colophon).toBe("How the demo domain is made.");
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
it("rejects a non-string colophon (the schema is strict)", () => {
|
|
234
|
+
expect(() =>
|
|
235
|
+
parsePackDefinition(
|
|
236
|
+
{ noun: "demo", lookup: { by: "ds:name" }, colophon: 123 },
|
|
237
|
+
"config",
|
|
238
|
+
),
|
|
239
|
+
).toThrow(PragmaError);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `colophon` verb spec (noun `colophon`, self-verb).
|
|
3
|
+
*
|
|
4
|
+
* `run` is a lazy thunk: it dynamic-imports the collector, so building the
|
|
5
|
+
* command tree (help, completion, surface emit) reads this spec without pulling
|
|
6
|
+
* the config reader or the registry onto the fast path — identical to
|
|
7
|
+
* `infoVerb` / `doctorVerb` / `capabilitiesVerb`.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
11
|
+
import type { CapabilityModule, VerbSpec } from "../../kernel/spec/types.js";
|
|
12
|
+
import { colophonFormatters } from "./colophon.render.js";
|
|
13
|
+
import type { ColophonData } from "./types.js";
|
|
14
|
+
|
|
15
|
+
const colophonVerb: VerbSpec<Record<string, unknown>, ColophonData> = {
|
|
16
|
+
path: ["colophon"],
|
|
17
|
+
summary: "Narrate how pragma and the active domain are made.",
|
|
18
|
+
doc: "Storeless — a colophon for the toolchain. Prints pragma's own story (the effect monad, one-grammar-many-projections, the render/LLM-output model, storeless modularity, and the domain-as-data pack model) followed by the active pack's domain colophon. Also available as a condensed Markdown narration for agents, or as a structured JSON projection of the sections.",
|
|
19
|
+
params: [],
|
|
20
|
+
output: { formatters: colophonFormatters },
|
|
21
|
+
examples: [
|
|
22
|
+
{ cmd: "pragma colophon", note: "the toolchain + active domain story" },
|
|
23
|
+
{
|
|
24
|
+
cmd: "pragma colophon --format llm",
|
|
25
|
+
note: "condensed Markdown for agents",
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
capability: {
|
|
29
|
+
needsStore: false,
|
|
30
|
+
mutates: false,
|
|
31
|
+
mcp: {
|
|
32
|
+
expose: true,
|
|
33
|
+
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
run: (_params, runtime) =>
|
|
37
|
+
import("./collectColophon.js").then((m) => m.collectColophon(runtime)),
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/** The `colophon` capability module (a single storeless self-verb). */
|
|
41
|
+
export const colophonModule: CapabilityModule = {
|
|
42
|
+
name: "colophon",
|
|
43
|
+
verbs: [asVerb(colophonVerb)],
|
|
44
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `markdownTerminal` — the tiny Markdown→terminal styler for `pragma colophon`.
|
|
3
|
+
*
|
|
4
|
+
* Forces `chalk.level = 0` for deterministic, color-free assertions. Focuses on
|
|
5
|
+
* the control-char scrub (F4): the colophon body is domain-as-data (pack
|
|
6
|
+
* authored), so a hostile/careless pack must not smuggle raw ANSI escapes or C0
|
|
7
|
+
* control bytes to the terminal through it — every line is scrubbed BEFORE our
|
|
8
|
+
* own chalk styling. Also pins that clean Markdown still styles as before.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
13
|
+
import { renderMarkdownToTerminal } from "./markdownTerminal.js";
|
|
14
|
+
|
|
15
|
+
let prevLevel: number;
|
|
16
|
+
beforeAll(() => {
|
|
17
|
+
prevLevel = chalk.level;
|
|
18
|
+
chalk.level = 0;
|
|
19
|
+
});
|
|
20
|
+
afterAll(() => {
|
|
21
|
+
chalk.level = prevLevel;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe("markdownTerminal — strips pack-authored control codes (F4)", () => {
|
|
25
|
+
it("removes ANSI escapes and stray C0/DEL controls before styling", () => {
|
|
26
|
+
// One hostile line: SGR colour codes, a NUL, a BEL, a CSI screen-clear, and
|
|
27
|
+
// a lone ESC — all wrapped around real text.
|
|
28
|
+
const hostile = "safe\x1b[31mRED\x1b[0m\x00\x07 text\x1b[2J\x1bmore";
|
|
29
|
+
const out = renderMarkdownToTerminal(hostile);
|
|
30
|
+
// The control codes are gone; the visible text survives verbatim.
|
|
31
|
+
expect(out).toBe("safeRED textmore");
|
|
32
|
+
// Belt and braces: not a single C0/DEL control byte remains.
|
|
33
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: asserting the scrub removed control bytes
|
|
34
|
+
expect(out).not.toMatch(/[\x00-\x08\x0b-\x1f\x7f]/);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("scrubs control codes hidden inside a fenced code block too", () => {
|
|
38
|
+
const out = renderMarkdownToTerminal("```\nrm -rf /\x1b[2K\x07\n```");
|
|
39
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: asserting the scrub removed control bytes
|
|
40
|
+
expect(out).not.toMatch(/[\x00-\x08\x0b-\x1f\x7f]/);
|
|
41
|
+
expect(out).toContain("rm -rf /");
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("preserves the structural styling for clean Markdown", () => {
|
|
45
|
+
// Heading + bullet + inline markers still render exactly as before the scrub.
|
|
46
|
+
expect(renderMarkdownToTerminal("# Title\n- an **item** with `code`")).toBe(
|
|
47
|
+
["Title", " • an item with code"].join("\n"),
|
|
48
|
+
);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A tiny, self-contained Markdown→terminal styler — `chalk` only, no parser, no
|
|
3
|
+
* new dependency. It covers exactly the constructs the colophon Markdown uses:
|
|
4
|
+
* ATX headings, `-`/`*` bullets, fenced ```code``` blocks, and inline
|
|
5
|
+
* `**bold**` / `` `code` `` spans. Deliberately minimal: no wrapping, no tables,
|
|
6
|
+
* no nested lists.
|
|
7
|
+
*
|
|
8
|
+
* Single consumer today (`pragma colophon`); a promotion candidate to
|
|
9
|
+
* `kernel/render/` if another verb ever wants the same helper. Determinism note:
|
|
10
|
+
* styling routes through the shared {@link RenderStyle} seam (color only on a
|
|
11
|
+
* color-capable TTY), so piped / redirected / CI output — where `supports-color`
|
|
12
|
+
* can report a level with no TTY — stays byte-for-byte the color-free structural
|
|
13
|
+
* transform, and a test can force either mode by passing an explicit style.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
import { defaultStyle, type RenderStyle } from "../../kernel/render/style.js";
|
|
18
|
+
|
|
19
|
+
/** Full ANSI escape sequences (`ESC [ … final-letter`) — colour/cursor codes. */
|
|
20
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: deliberate control-char scrub
|
|
21
|
+
const ANSI_ESCAPE = /\x1b\[[0-9;]*[A-Za-z]/g;
|
|
22
|
+
/** Stray C0 control chars + DEL, keeping tab (`\x09`) and newline (`\x0a`). */
|
|
23
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: deliberate control-char scrub
|
|
24
|
+
const C0_CONTROLS = /[\x00-\x08\x0b-\x1f\x7f]/g;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Strip ANSI escape sequences and stray C0/DEL control characters from a line.
|
|
28
|
+
*
|
|
29
|
+
* The colophon body carries pack-authored domain text (the "domain-as-data"
|
|
30
|
+
* model), so a hostile or careless pack could otherwise smuggle raw terminal
|
|
31
|
+
* control codes — cursor moves, colour resets, screen clears — straight to the
|
|
32
|
+
* terminal. We apply our OWN styling via `chalk` afterwards, so any control char
|
|
33
|
+
* in the source is unwanted; scrub each line before styling.
|
|
34
|
+
*/
|
|
35
|
+
function stripControl(line: string): string {
|
|
36
|
+
return line.replace(ANSI_ESCAPE, "").replace(C0_CONTROLS, "");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Style inline `**bold**` and `` `code` `` spans within one line. The `**` / `` ` ``
|
|
41
|
+
* markers are ALWAYS consumed; off a TTY the styler is inert, so the markers drop
|
|
42
|
+
* with no color (byte-identical to the pre-seam `chalk.level = 0` behavior).
|
|
43
|
+
*/
|
|
44
|
+
function styleInline(text: string, style: RenderStyle): string {
|
|
45
|
+
return text
|
|
46
|
+
.replace(/\*\*([^*]+)\*\*/g, (_match, inner: string) => style.bold(inner))
|
|
47
|
+
.replace(/`([^`]+)`/g, (_match, inner: string) => style.cyan(inner));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Render a Markdown string to styled terminal text.
|
|
52
|
+
*
|
|
53
|
+
* @param markdown - The authored Markdown body.
|
|
54
|
+
* @param style - The TTY styler; defaults to the process style. On a color-capable
|
|
55
|
+
* terminal headings/bullets/inline spans are tinted; off a TTY the styler is
|
|
56
|
+
* inert, so the output is byte-identical to the color-free structural form.
|
|
57
|
+
* @returns The styled terminal string (no trailing newline).
|
|
58
|
+
*/
|
|
59
|
+
export function renderMarkdownToTerminal(
|
|
60
|
+
markdown: string,
|
|
61
|
+
style: RenderStyle = defaultStyle(),
|
|
62
|
+
): string {
|
|
63
|
+
const lines: string[] = [];
|
|
64
|
+
let inFence = false;
|
|
65
|
+
|
|
66
|
+
for (const rawLine of markdown.split("\n")) {
|
|
67
|
+
// Scrub pack-authored terminal control codes BEFORE our own styling
|
|
68
|
+
// (colophon bodies are domain-as-data — never a channel for raw ANSI).
|
|
69
|
+
const raw = stripControl(rawLine);
|
|
70
|
+
// A fence toggles code mode; the ``` markers themselves are dropped.
|
|
71
|
+
if (raw.trimStart().startsWith("```")) {
|
|
72
|
+
inFence = !inFence;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (inFence) {
|
|
76
|
+
lines.push(style.dim(` ${raw}`));
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const heading = /^(#{1,6})\s+(.+)$/.exec(raw);
|
|
81
|
+
if (heading) {
|
|
82
|
+
const level = heading[1]?.length ?? 1;
|
|
83
|
+
const text = styleInline(heading[2] ?? "", style);
|
|
84
|
+
// H1 earns bold+underline on a TTY; underline is outside the RenderStyle
|
|
85
|
+
// seam, so reach for chalk only when the styler is enabled.
|
|
86
|
+
lines.push(
|
|
87
|
+
level === 1 && style.enabled
|
|
88
|
+
? chalk.bold.underline(text)
|
|
89
|
+
: style.bold(text),
|
|
90
|
+
);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const bullet = /^\s*[-*]\s+(.+)$/.exec(raw);
|
|
95
|
+
if (bullet) {
|
|
96
|
+
lines.push(` ${style.cyan("•")} ${styleInline(bullet[1] ?? "", style)}`);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
lines.push(styleInline(raw, style));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return lines.join("\n");
|
|
104
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The built-in pragma colophon — how the toolchain itself is made. Authored
|
|
3
|
+
* Markdown grounded in this tree's real architecture; surfaced by `pragma
|
|
4
|
+
* colophon` as the first section, before any active pack's domain colophon.
|
|
5
|
+
*
|
|
6
|
+
* `PRAGMA_COLOPHON` is the full narrative for humans; `PRAGMA_COLOPHON_SUMMARY`
|
|
7
|
+
* is the condensed form `--format llm` emits (Markdown IS the agent-optimal shape).
|
|
8
|
+
* Both are BODIES with no leading H1 — the renderer supplies the "pragma"
|
|
9
|
+
* heading, so the section is never double-titled.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** The full built-in colophon (Markdown body). */
|
|
13
|
+
export const PRAGMA_COLOPHON = `pragma is a **domain-based toolchain**: one CLI and one MCP server projected
|
|
14
|
+
from a single grammar, serving a knowledge-graph domain that reads as data.
|
|
15
|
+
|
|
16
|
+
## The effect monad
|
|
17
|
+
|
|
18
|
+
Reads are plain \`async\` functions; a mutation instead *describes* its effects
|
|
19
|
+
as a \`Task\` (\`@canonical/task\`) that is interpreted — under the real node
|
|
20
|
+
interpreter, a \`--dry-run\` planner, or an \`--undo\` reverser. Describe-then-
|
|
21
|
+
interpret means dry-run and undo come for free, and the dispatcher tells the two
|
|
22
|
+
worlds apart on one bit: \`capability.mutates\`.
|
|
23
|
+
|
|
24
|
+
## One grammar, many projections
|
|
25
|
+
|
|
26
|
+
Every capability is a \`VerbSpec\` — a noun, its params, its effect profile, its
|
|
27
|
+
formatters. The CLI commands, the MCP tools, shell completion, and the
|
|
28
|
+
surface/docs are all *projections* of that one shape, so they cannot drift. The
|
|
29
|
+
projected surface is frozen in a covenant (\`surface/surface.v2.json\`): a single
|
|
30
|
+
source of truth a test asserts the live grammar still emits, tool for tool.
|
|
31
|
+
|
|
32
|
+
## LLM-optimized output
|
|
33
|
+
|
|
34
|
+
Each verb renders three ways — \`plain\` for a terminal, \`json\` for the machine
|
|
35
|
+
envelope, and \`llm\` for condensed Markdown. \`--format llm\` (or a non-interactive
|
|
36
|
+
stdout) selects the agent form: the same data, shaped for a model to read. This
|
|
37
|
+
colophon is itself a showcase of that render model.
|
|
38
|
+
|
|
39
|
+
## Modular, storeless by construction
|
|
40
|
+
|
|
41
|
+
Capabilities ship as **modules** — named bundles of verbs with optional
|
|
42
|
+
boot / resource / prompt hooks. A verb declares whether it \`needsStore\`, and
|
|
43
|
+
the dispatcher boots the triple store *only* for those; a storeless verb
|
|
44
|
+
(\`info\`, \`config\`, \`capabilities\`, \`colophon\`) never pays for the graph.
|
|
45
|
+
|
|
46
|
+
## Scaffolding
|
|
47
|
+
|
|
48
|
+
\`pragma create\` scaffolds components, packages, and applications through the
|
|
49
|
+
\`@canonical/summon-*\` generators, reusing summon's rich Ink wizard when it runs
|
|
50
|
+
interactively.
|
|
51
|
+
|
|
52
|
+
## The domain reads as data
|
|
53
|
+
|
|
54
|
+
A domain is a **pack**: a declarative \`PackDefinition\` (its list / lookup
|
|
55
|
+
queries) compiled into verbs, backed by a content-addressed graphpack that
|
|
56
|
+
\`sources update\` builds once. Swap the pack and the same pragma serves a
|
|
57
|
+
different domain — including the domain colophon printed below this one.`;
|
|
58
|
+
|
|
59
|
+
/** The condensed colophon for `--format llm` (Markdown body, no leading H1). */
|
|
60
|
+
export const PRAGMA_COLOPHON_SUMMARY = `pragma is a domain-based toolchain: one CLI + MCP server projected from a single \`VerbSpec\` grammar.
|
|
61
|
+
|
|
62
|
+
- **Effect monad** (\`@canonical/task\`): reads are async; a mutation returns an interpreted \`Task\`, so \`--dry-run\` and \`--undo\` are free. The dispatcher branches on \`capability.mutates\`.
|
|
63
|
+
- **One grammar, many projections**: CLI, MCP tools, completion, and docs all project one \`VerbSpec\`; the emitted surface is frozen in a covenant so the projections never drift.
|
|
64
|
+
- **LLM-optimized output**: every verb renders \`plain\` / \`json\` / \`llm\`; \`--format llm\` (or a piped stdout) emits condensed Markdown for agents.
|
|
65
|
+
- **Modular + storeless**: capability modules; the triple store boots only for \`needsStore\` verbs.
|
|
66
|
+
- **Domain as data**: a pack is a declarative \`PackDefinition\` compiled to verbs over a content-addressed graph built by \`sources update\`.`;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data shapes for `pragma colophon`.
|
|
3
|
+
*
|
|
4
|
+
* A colophon (the printer's end-note on how a book is made) for the toolchain:
|
|
5
|
+
* one section narrating how pragma itself is built, followed by one section per
|
|
6
|
+
* active pack/domain that declares a `colophon`. Storeless and read-only.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** One colophon section — pragma's own, or an active pack's domain story. */
|
|
10
|
+
export interface ColophonSection {
|
|
11
|
+
/** Whether this is pragma's built-in section or an active pack's. */
|
|
12
|
+
readonly kind: "pragma" | "pack";
|
|
13
|
+
/** Section heading — `"pragma"`, or the pack's noun/name. */
|
|
14
|
+
readonly title: string;
|
|
15
|
+
/**
|
|
16
|
+
* The authored Markdown BODY (no leading H1 — the renderer supplies the
|
|
17
|
+
* heading from {@link title}, so a section is never double-titled).
|
|
18
|
+
*/
|
|
19
|
+
readonly markdown: string;
|
|
20
|
+
/** Optional condensed body for `--format llm` (pragma supplies one). */
|
|
21
|
+
readonly summary?: string;
|
|
22
|
+
/** Provenance: `"built-in"`, or `"pack:<name>"`. */
|
|
23
|
+
readonly source?: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** The full `colophon` payload: pragma's section first, then active packs'. */
|
|
27
|
+
export interface ColophonData {
|
|
28
|
+
readonly sections: readonly ColophonSection[];
|
|
29
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collect the `config show` payload — the verb's run body (lazily imported).
|
|
3
|
+
*
|
|
4
|
+
* Storeless: read the layered config and pass it through with its provenance.
|
|
5
|
+
* Dynamic-imported by the spec so building the tree never pulls the config
|
|
6
|
+
* reader (or zod) onto the fast path.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { readConfig } from "../../kernel/config/readConfig.js";
|
|
10
|
+
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
11
|
+
import type { ConfigShowData } from "./types.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Assemble the resolved config with provenance for the current runtime.
|
|
15
|
+
*
|
|
16
|
+
* @param runtime - The per-invocation runtime.
|
|
17
|
+
* @returns The config-show payload.
|
|
18
|
+
* @note Impure — reads the config layers from disk.
|
|
19
|
+
*/
|
|
20
|
+
export async function collectConfigShow(
|
|
21
|
+
runtime: PragmaRuntime,
|
|
22
|
+
): Promise<ConfigShowData> {
|
|
23
|
+
const layers = await readConfig(runtime.cwd);
|
|
24
|
+
return {
|
|
25
|
+
config: layers.config,
|
|
26
|
+
origins: layers.origins,
|
|
27
|
+
...(layers.project.path ? { projectConfigPath: layers.project.path } : {}),
|
|
28
|
+
globalConfigPath: layers.global.path,
|
|
29
|
+
projectExists: layers.project.exists,
|
|
30
|
+
globalExists: layers.global.exists,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatters for a `config <field>` setter — plain, llm, json (no ink).
|
|
3
|
+
*
|
|
4
|
+
* One shared formatter across all three setters (the field-table pattern): a
|
|
5
|
+
* set reports the value and the file it landed in; a reset reports the removed
|
|
6
|
+
* field.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { Formatters } from "../../kernel/spec/types.js";
|
|
10
|
+
import type { ConfigFieldResult } from "./types.js";
|
|
11
|
+
|
|
12
|
+
export const configFieldFormatters: Formatters<ConfigFieldResult> = {
|
|
13
|
+
plain(data) {
|
|
14
|
+
return data.reset
|
|
15
|
+
? `Reset ${data.field} (removed from ${data.path})`
|
|
16
|
+
: `Set ${data.field} = ${data.value} (written to ${data.path})`;
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
llm(data) {
|
|
20
|
+
return data.reset
|
|
21
|
+
? `Reset \`${data.field}\` — removed from the global config.`
|
|
22
|
+
: `Set \`${data.field}\` = \`${data.value}\` in the global config.`;
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
json(data) {
|
|
26
|
+
return JSON.stringify(data);
|
|
27
|
+
},
|
|
28
|
+
};
|