@canonical/pragma-cli 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pragma +0 -0
- package/package.json +27 -42
- package/src/bin.ts +292 -11
- package/src/capabilities/block/blockList.verb.ts +150 -0
- package/src/capabilities/block/index.ts +25 -0
- package/src/capabilities/block/pack.ts +155 -0
- package/src/capabilities/block/parity.test.ts +180 -0
- package/src/capabilities/block/tierChain.ts +78 -0
- package/src/capabilities/capabilities/capabilities.render.ts +89 -0
- package/src/capabilities/capabilities/capabilities.test.ts +131 -0
- package/src/capabilities/capabilities/capabilities.verb.ts +48 -0
- package/src/capabilities/capabilities/catalog.ts +144 -0
- package/src/capabilities/capabilities/hints.ts +221 -0
- package/src/capabilities/capabilities/index.ts +13 -0
- package/src/capabilities/capabilities/types.ts +58 -0
- package/src/capabilities/colophon/collectColophon.ts +68 -0
- package/src/capabilities/colophon/colophon.render.test.ts +87 -0
- package/src/capabilities/colophon/colophon.render.ts +38 -0
- package/src/capabilities/colophon/colophon.test.ts +241 -0
- package/src/capabilities/colophon/colophon.verb.ts +41 -0
- package/src/capabilities/colophon/index.ts +6 -0
- package/src/capabilities/colophon/markdownTerminal.test.ts +50 -0
- package/src/capabilities/colophon/markdownTerminal.ts +85 -0
- package/src/capabilities/colophon/pragmaColophon.ts +66 -0
- package/src/capabilities/colophon/types.ts +29 -0
- package/src/capabilities/config/collectConfigShow.ts +32 -0
- package/src/capabilities/config/field.render.ts +28 -0
- package/src/capabilities/config/field.test.ts +188 -0
- package/src/capabilities/config/fields.ts +152 -0
- package/src/capabilities/config/index.ts +6 -0
- package/src/capabilities/config/runField.ts +59 -0
- package/src/capabilities/config/runSet.ts +38 -0
- package/src/capabilities/config/set.test.ts +207 -0
- package/src/capabilities/config/set.verb.ts +70 -0
- package/src/capabilities/config/show.render.ts +61 -0
- package/src/capabilities/config/show.verb.ts +45 -0
- package/src/capabilities/config/types.ts +27 -0
- package/src/capabilities/create/byteEquality.subprocess.test.ts +88 -0
- package/src/capabilities/create/byteEquality.test.ts +222 -0
- package/src/capabilities/create/compiledCreate.subprocess.test.ts +152 -0
- package/src/capabilities/create/create.mcp.test.ts +139 -0
- package/src/capabilities/create/create.render.ts +50 -0
- package/src/capabilities/create/create.test.ts +403 -0
- package/src/capabilities/create/create.verb.ts +435 -0
- package/src/capabilities/create/cwdJail.test.ts +129 -0
- package/src/capabilities/create/generatorToVerbSpec.ts +111 -0
- package/src/capabilities/create/index.ts +25 -0
- package/src/capabilities/create/pathJail.ts +73 -0
- package/src/capabilities/create/pickGenerator.ts +63 -0
- package/src/capabilities/create/templates.embedded.generated.ts +53 -0
- package/src/capabilities/create/types.ts +8 -0
- package/src/capabilities/doctor/checks/checkConfigFile.ts +41 -0
- package/src/capabilities/doctor/checks/checkKeStore.ts +39 -0
- package/src/capabilities/doctor/checks/checkMcpCommands.ts +108 -0
- package/src/capabilities/doctor/checks/checkMcpConfigured.ts +61 -0
- package/src/capabilities/doctor/checks/checkNodeVersion.ts +25 -0
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +73 -0
- package/src/capabilities/doctor/checks/checkPragmaVersion.ts +22 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +111 -0
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +131 -0
- package/src/capabilities/doctor/checks/checkSkillsSymlinked.ts +60 -0
- package/src/capabilities/doctor/doctor.render.ts +116 -0
- package/src/capabilities/doctor/doctor.test.ts +179 -0
- package/src/capabilities/doctor/doctor.verb.ts +46 -0
- package/src/capabilities/doctor/index.ts +6 -0
- package/src/capabilities/doctor/runChecks.ts +76 -0
- package/src/capabilities/doctor/types.ts +41 -0
- package/src/capabilities/emptyRecovery.test.ts +112 -0
- package/src/capabilities/graph/index.ts +21 -0
- package/src/capabilities/graph/inspect.render.ts +38 -0
- package/src/capabilities/graph/inspect.test.ts +80 -0
- package/src/capabilities/graph/inspect.verb.ts +51 -0
- package/src/capabilities/graph/query.render.ts +77 -0
- package/src/capabilities/graph/query.test.ts +156 -0
- package/src/capabilities/graph/query.verb.ts +58 -0
- package/src/capabilities/graph/runQuery.ts +49 -0
- package/src/capabilities/index.ts +54 -0
- package/src/capabilities/info/collectInfo.ts +76 -0
- package/src/capabilities/info/index.ts +6 -0
- package/src/capabilities/info/info.render.ts +72 -0
- package/src/capabilities/info/info.test.ts +127 -0
- package/src/capabilities/info/info.verb.ts +46 -0
- package/src/capabilities/info/types.ts +42 -0
- package/src/capabilities/lazy.test.ts +89 -0
- package/src/capabilities/meta/complete.verb.ts +52 -0
- package/src/capabilities/meta/index.ts +15 -0
- package/src/capabilities/meta/mcp.verb.ts +35 -0
- package/src/capabilities/modifier/index.ts +15 -0
- package/src/capabilities/modifier/pack.ts +64 -0
- package/src/capabilities/ontology/index.ts +12 -0
- package/src/capabilities/ontology/ontology.test.ts +94 -0
- package/src/capabilities/ontology/queries.ts +197 -0
- package/src/capabilities/ontology/render.ts +87 -0
- package/src/capabilities/ontology/verbs.ts +170 -0
- package/src/capabilities/prompt/index.ts +18 -0
- package/src/capabilities/prompt/prompt.render.ts +70 -0
- package/src/capabilities/prompt/prompt.test.ts +119 -0
- package/src/capabilities/prompt/types.ts +30 -0
- package/src/capabilities/prompt/verbs.ts +93 -0
- package/src/capabilities/resources/index.ts +15 -0
- package/src/capabilities/resources/provider.ts +231 -0
- package/src/capabilities/resources/resources.test.ts +114 -0
- package/src/capabilities/roundtrip.test.ts +107 -0
- package/src/capabilities/setup/index.ts +6 -0
- package/src/capabilities/setup/operations/setupCompletions.ts +108 -0
- package/src/capabilities/setup/operations/setupGenerator.ts +307 -0
- package/src/capabilities/setup/operations/setupLsp.ts +61 -0
- package/src/capabilities/setup/operations/setupMcp.ts +85 -0
- package/src/capabilities/setup/operations/setupSkills.ts +199 -0
- package/src/capabilities/setup/setup.render.ts +49 -0
- package/src/capabilities/setup/setup.test.ts +351 -0
- package/src/capabilities/setup/setup.verb.ts +209 -0
- package/src/capabilities/setup/shell.ts +85 -0
- package/src/capabilities/setup/types.ts +42 -0
- package/src/capabilities/shared/assertExecOk.ts +106 -0
- package/src/capabilities/shared/packageManager.ts +62 -0
- package/src/capabilities/shared/registry.ts +70 -0
- package/src/capabilities/skill/discover.ts +178 -0
- package/src/capabilities/skill/index.ts +12 -0
- package/src/capabilities/skill/render.ts +60 -0
- package/src/capabilities/skill/skill.test.ts +142 -0
- package/src/capabilities/skill/verbs.ts +100 -0
- package/src/capabilities/sources/collectStatus.ts +87 -0
- package/src/capabilities/sources/index.ts +15 -0
- package/src/capabilities/sources/installSkills.ts +124 -0
- package/src/capabilities/sources/runUpdate.ts +407 -0
- package/src/capabilities/sources/sources.test.ts +642 -0
- package/src/capabilities/sources/status.render.ts +56 -0
- package/src/capabilities/sources/status.verb.ts +42 -0
- package/src/capabilities/sources/types.ts +51 -0
- package/src/capabilities/sources/update.render.ts +35 -0
- package/src/capabilities/sources/update.verb.ts +76 -0
- package/src/capabilities/standard/index.ts +18 -0
- package/src/capabilities/standard/pack.ts +128 -0
- package/src/capabilities/standard/parity.test.ts +208 -0
- package/src/capabilities/surface.test.ts +208 -0
- package/src/capabilities/tier/index.ts +19 -0
- package/src/capabilities/tier/lookup.render.ts +34 -0
- package/src/capabilities/tier/lookup.test.ts +68 -0
- package/src/capabilities/tier/lookup.verb.ts +44 -0
- package/src/capabilities/tier/pack.ts +28 -0
- package/src/capabilities/tier/runLookup.ts +59 -0
- package/src/capabilities/token/addConfig.render.ts +27 -0
- package/src/capabilities/token/addConfig.test.ts +62 -0
- package/src/capabilities/token/addConfig.verb.ts +40 -0
- package/src/capabilities/token/index.ts +19 -0
- package/src/capabilities/token/pack.ts +58 -0
- package/src/capabilities/token/runAddConfig.ts +95 -0
- package/src/capabilities/upgrade/index.ts +6 -0
- package/src/capabilities/upgrade/runUpgrade.ts +119 -0
- package/src/capabilities/upgrade/types.ts +21 -0
- package/src/capabilities/upgrade/upgrade.render.ts +55 -0
- package/src/capabilities/upgrade/upgrade.test.ts +372 -0
- package/src/capabilities/upgrade/upgrade.verb.ts +56 -0
- package/src/constants.test.ts +33 -0
- package/src/constants.ts +38 -70
- package/src/index.ts +27 -122
- package/src/kernel/completion/__snapshots__/emitScripts.test.ts.snap +340 -0
- package/src/kernel/completion/bashDrive.test.ts +73 -0
- package/src/kernel/completion/complete.test.ts +101 -0
- package/src/kernel/completion/complete.ts +77 -0
- package/src/kernel/completion/emitScripts.test.ts +173 -0
- package/src/kernel/completion/emitScripts.ts +122 -0
- package/src/kernel/completion/entitySource.test.ts +198 -0
- package/src/kernel/completion/entitySource.ts +269 -0
- package/src/kernel/completion/index.ts +42 -0
- package/src/kernel/completion/model.test.ts +405 -0
- package/src/kernel/completion/model.ts +259 -0
- package/src/kernel/completion/parse.test.ts +338 -0
- package/src/kernel/completion/parse.ts +294 -0
- package/src/kernel/completion/rank.test.ts +100 -0
- package/src/kernel/completion/rank.ts +118 -0
- package/src/kernel/completion/resolve.test.ts +204 -0
- package/src/kernel/completion/resolve.ts +133 -0
- package/src/kernel/completion/safety.test.ts +374 -0
- package/src/kernel/completion/templates/bash.ts +249 -0
- package/src/kernel/completion/templates/fish.ts +245 -0
- package/src/kernel/completion/templates/shared.ts +134 -0
- package/src/kernel/completion/templates/zsh.ts +246 -0
- package/src/kernel/completion/types.ts +153 -0
- package/src/kernel/config/__snapshots__/firstRun.test.ts.snap +11 -0
- package/src/kernel/config/defaults.ts +28 -0
- package/src/kernel/config/evaluateProjectConfig.ts +119 -0
- package/src/kernel/config/findProjectConfig.ts +45 -0
- package/src/kernel/config/firstRun.test.ts +60 -0
- package/src/kernel/config/firstRun.ts +91 -0
- package/src/kernel/config/globalConfig.ts +94 -0
- package/src/kernel/config/index.ts +35 -0
- package/src/kernel/config/paths.ts +39 -0
- package/src/kernel/config/readConfig.test.ts +245 -0
- package/src/kernel/config/readConfig.ts +94 -0
- package/src/kernel/config/schema.ts +56 -0
- package/src/kernel/config/types.ts +106 -0
- package/src/kernel/config/writeConfigField.ts +82 -0
- package/src/kernel/error/PragmaError.test.ts +119 -0
- package/src/kernel/error/PragmaError.ts +182 -0
- package/src/kernel/error/constants.ts +38 -0
- package/src/kernel/error/fromTaskError.test.ts +83 -0
- package/src/kernel/error/fromTaskError.ts +80 -0
- package/src/kernel/error/index.ts +23 -0
- package/src/kernel/error/recovery.test.ts +60 -0
- package/src/kernel/error/recovery.ts +49 -0
- package/src/kernel/error/renderError.ts +101 -0
- package/src/kernel/error/serialize.ts +28 -0
- package/src/kernel/error/types.ts +62 -0
- package/src/kernel/packs/collect.test.ts +138 -0
- package/src/kernel/packs/collect.ts +108 -0
- package/src/kernel/packs/compile.test.ts +229 -0
- package/src/kernel/packs/compile.ts +315 -0
- package/src/kernel/packs/disclosure.test.ts +200 -0
- package/src/kernel/packs/disclosure.ts +98 -0
- package/src/kernel/packs/glob.ts +39 -0
- package/src/kernel/packs/graphql/buildLookupDocument.ts +397 -0
- package/src/kernel/packs/graphql/fetchGraphqlLookup.ts +217 -0
- package/src/kernel/packs/graphql/nameMap.ts +67 -0
- package/src/kernel/packs/graphqlSource.test.ts +383 -0
- package/src/kernel/packs/iri.ts +78 -0
- package/src/kernel/packs/renderPack.ts +196 -0
- package/src/kernel/packs/resolveEntity.ts +232 -0
- package/src/kernel/packs/runBodies.ts +157 -0
- package/src/kernel/packs/sample.ts +60 -0
- package/src/kernel/packs/schema.ts +328 -0
- package/src/kernel/packs/sparql/applyFilters.ts +83 -0
- package/src/kernel/packs/sparql/applySearch.ts +33 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +180 -0
- package/src/kernel/packs/sparql/escape.ts +22 -0
- package/src/kernel/packs/sparql/runSelect.test.ts +80 -0
- package/src/kernel/packs/sparql/runSelect.ts +84 -0
- package/src/kernel/packs/toolDescription.test.ts +81 -0
- package/src/kernel/packs/types.ts +337 -0
- package/src/kernel/packs/uniqueness.ts +35 -0
- package/src/kernel/project/cli/buildProgram.test.ts +387 -0
- package/src/kernel/project/cli/buildProgram.ts +280 -0
- package/src/kernel/project/cli/dispatch.test.ts +288 -0
- package/src/kernel/project/cli/dispatch.ts +334 -0
- package/src/kernel/project/cli/exitCodes.test.ts +59 -0
- package/src/kernel/project/cli/exitCodes.ts +68 -0
- package/src/kernel/project/cli/globalFlags.test.ts +99 -0
- package/src/kernel/project/cli/globalFlags.ts +149 -0
- package/src/kernel/project/cli/helpFormat.ts +58 -0
- package/src/kernel/project/cli/index.ts +21 -0
- package/src/kernel/project/cli/interactionSeam.test.ts +99 -0
- package/src/kernel/project/cli/rootHelp.ts +218 -0
- package/src/kernel/project/cli/suggest.test.ts +54 -0
- package/src/kernel/project/cli/suggest.ts +67 -0
- package/src/kernel/project/cli/suggestNames.ts +122 -0
- package/src/kernel/project/cli/verbHelp.test.ts +138 -0
- package/src/kernel/project/cli/verbHelp.ts +144 -0
- package/src/kernel/project/mcp/buildServer.ts +70 -0
- package/src/kernel/project/mcp/envelope.ts +44 -0
- package/src/kernel/project/mcp/index.ts +8 -0
- package/src/kernel/project/mcp/instructions.ts +48 -0
- package/src/kernel/project/mcp/parity.test.ts +72 -0
- package/src/kernel/project/mcp/prompts/prompts.test.ts +96 -0
- package/src/kernel/project/mcp/prompts/provider.ts +74 -0
- package/src/kernel/project/mcp/prompts/source.ts +194 -0
- package/src/kernel/project/mcp/registerVerb.test.ts +238 -0
- package/src/kernel/project/mcp/registerVerb.ts +296 -0
- package/src/kernel/project/mcp/serve.ts +34 -0
- package/src/kernel/project/mcp/toolDescriptions.test.ts +80 -0
- package/src/kernel/render/__snapshots__/renderers.test.ts.snap +127 -0
- package/src/kernel/render/compactUri.ts +25 -0
- package/src/kernel/render/contracts.ts +72 -0
- package/src/kernel/render/disclosure.ts +44 -0
- package/src/kernel/render/envelope.ts +50 -0
- package/src/kernel/render/formatters.ts +30 -0
- package/src/kernel/render/index.ts +30 -0
- package/src/kernel/render/prefixes.ts +21 -0
- package/src/kernel/render/renderers.test.ts +171 -0
- package/src/kernel/render/renderers.ts +429 -0
- package/src/kernel/render/writeStdout.test.ts +43 -0
- package/src/kernel/render/writeStdout.ts +49 -0
- package/src/kernel/runtime/boot.test.ts +69 -0
- package/src/kernel/runtime/boot.ts +59 -0
- package/src/kernel/runtime/facade.test.ts +125 -0
- package/src/kernel/runtime/facade.ts +47 -0
- package/src/kernel/runtime/graphpack/build.ts +148 -0
- package/src/kernel/runtime/graphpack/buildIndex.ts +229 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +8 -0
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +4 -0
- package/src/kernel/runtime/graphpack/embedded/sample.ttl +39 -0
- package/src/kernel/runtime/graphpack/embedded.ts +70 -0
- package/src/kernel/runtime/graphpack/graphpack.test.ts +153 -0
- package/src/kernel/runtime/graphpack/hash.ts +46 -0
- package/src/kernel/runtime/graphpack/index.ts +21 -0
- package/src/kernel/runtime/graphpack/manifest.ts +55 -0
- package/src/kernel/runtime/graphpack/read.ts +102 -0
- package/src/kernel/runtime/graphpack/types.ts +111 -0
- package/src/kernel/runtime/index.ts +15 -0
- package/src/kernel/runtime/loadSession.ts +56 -0
- package/src/kernel/runtime/lock.ts +90 -0
- package/src/kernel/runtime/paths.ts +37 -0
- package/src/kernel/runtime/probe.test.ts +16 -0
- package/src/kernel/runtime/probe.ts +39 -0
- package/src/kernel/runtime/readEntity.ts +83 -0
- package/src/kernel/runtime/refs/gitOps.ts +88 -0
- package/src/kernel/runtime/refs/parseRef.test.ts +34 -0
- package/src/kernel/runtime/refs/parseRef.ts +103 -0
- package/src/kernel/runtime/refs/resolve.ts +320 -0
- package/src/kernel/runtime/resolveSources.test.ts +154 -0
- package/src/kernel/runtime/resolveSources.ts +66 -0
- package/src/kernel/runtime/store.test.ts +94 -0
- package/src/kernel/runtime/store.ts +90 -0
- package/src/kernel/runtime/storeless.test.ts +86 -0
- package/src/kernel/runtime/types.ts +210 -0
- package/src/kernel/runtime/wasmEmbed.test.ts +142 -0
- package/src/kernel/spec/asVerb.ts +23 -0
- package/src/kernel/spec/emitSurface.test.ts +65 -0
- package/src/kernel/spec/emitSurface.ts +223 -0
- package/src/kernel/spec/index.ts +34 -0
- package/src/kernel/spec/surfaceConformance.test.ts +94 -0
- package/src/kernel/spec/surfaceConformance.ts +135 -0
- package/src/kernel/spec/types.ts +233 -0
- package/src/kernel/spec/validate.test.ts +81 -0
- package/src/kernel/spec/validate.ts +125 -0
- package/src/testing/PARITY_GAPS.test.ts +32 -0
- package/src/testing/PARITY_GAPS.ts +179 -0
- package/src/testing/behavioral/README.md +164 -0
- package/src/testing/behavioral/agentSession.mcp.test.ts +160 -0
- package/src/testing/behavioral/autoLlm.e2e.test.ts +44 -0
- package/src/testing/behavioral/completion.test.ts +132 -0
- package/src/testing/behavioral/disclosure.test.ts +103 -0
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +120 -0
- package/src/testing/behavioral/errorMatrix.storeless.test.ts +123 -0
- package/src/testing/behavioral/exitCodes.e2e.test.ts +53 -0
- package/src/testing/behavioral/firstRun.e2e.test.ts +40 -0
- package/src/testing/behavioral/harness.foundation.test.ts +136 -0
- package/src/testing/behavioral/journeys.cli.test.ts +129 -0
- package/src/testing/behavioral/liveReadSurface.ts +80 -0
- package/src/testing/behavioral/mcpServe.e2e.test.ts +21 -0
- package/src/testing/behavioral/mcpSurface.test.ts +139 -0
- package/src/testing/behavioral/parity.test.ts +224 -0
- package/src/testing/behavioral/rootCli.e2e.test.ts +62 -0
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +201 -0
- package/src/testing/eval/cases/assembly.ts +195 -0
- package/src/testing/eval/cases/effectful.ts +245 -0
- package/src/testing/eval/cases/readNouns.ts +232 -0
- package/src/testing/eval/cases/stable.ts +163 -0
- package/src/testing/eval/eval.test.ts +74 -0
- package/src/testing/eval/harness.ts +91 -0
- package/src/testing/eval/report.ts +58 -0
- package/src/testing/fixtures/blockGraph.ts +112 -0
- package/src/testing/fixtures/completionFixture.ts +239 -0
- package/src/testing/fixtures/fixtureCapability.ts +175 -0
- package/src/testing/fixtures/graph/canonical.ts +184 -0
- package/src/testing/fixtures/packs/recipe.ts +78 -0
- package/src/testing/helpers/fixtureGraph.ts +148 -0
- package/src/testing/helpers/golden.ts +45 -0
- package/src/testing/helpers/packRuntime.ts +118 -0
- package/src/testing/helpers/parity.ts +86 -0
- package/src/testing/helpers/projectCli.ts +35 -0
- package/src/testing/helpers/projectMcp.ts +145 -0
- package/src/testing/helpers/runCli.ts +128 -0
- package/src/testing/perf/budgets.test.ts +164 -0
- package/src/testing/perf/budgets.ts +37 -0
- package/src/testing/perf/globalSetup.ts +30 -0
- package/src/testing/perf/measure.ts +97 -0
- package/src/testing/setupXdgIsolation.ts +13 -12
- package/src/types.ts +42 -0
- package/README.md +0 -458
- package/src/bin.test.ts +0 -54
- package/src/compile-validation.runner.ts +0 -137
- package/src/compile-validation.ts +0 -191
- package/src/completions/computeSocketPath.test.ts +0 -26
- package/src/completions/computeSocketPath.ts +0 -16
- package/src/completions/constants.ts +0 -25
- package/src/completions/handleQuery.test.ts +0 -125
- package/src/completions/handleQuery.ts +0 -49
- package/src/completions/index.ts +0 -14
- package/src/completions/queryCompletions.test.ts +0 -105
- package/src/completions/queryCompletions.ts +0 -75
- package/src/completions/querySocket.test.ts +0 -101
- package/src/completions/querySocket.ts +0 -71
- package/src/completions/startCompletionsServer.test.ts +0 -74
- package/src/completions/startCompletionsServer.ts +0 -75
- package/src/completions/startCompletionsServer.unit.test.ts +0 -131
- package/src/completions/waitForSocket.test.ts +0 -27
- package/src/completions/waitForSocket.ts +0 -27
- package/src/config/configExists.ts +0 -14
- package/src/config/defaultConfig.test.ts +0 -33
- package/src/config/defaultConfig.ts +0 -59
- package/src/config/defaults.json +0 -17
- package/src/config/findProjectConfigPath.test.ts +0 -53
- package/src/config/findProjectConfigPath.ts +0 -36
- package/src/config/index.ts +0 -21
- package/src/config/mergeConfigFileUpdate.ts +0 -58
- package/src/config/parseConfigValues.ts +0 -217
- package/src/config/readConfig.test.ts +0 -395
- package/src/config/readConfig.ts +0 -21
- package/src/config/readConfigLayers.test.ts +0 -109
- package/src/config/readConfigLayers.ts +0 -118
- package/src/config/resolveConfigPath.test.ts +0 -20
- package/src/config/resolveConfigPath.ts +0 -11
- package/src/config/resolveGlobalConfigPath.ts +0 -13
- package/src/config/resolveWriteConfigPath.test.ts +0 -53
- package/src/config/resolveWriteConfigPath.ts +0 -31
- package/src/config/types.ts +0 -128
- package/src/config/writeConfig.ts +0 -37
- package/src/domains/block/blockConfig.ts +0 -97
- package/src/domains/block/commands/index.ts +0 -5
- package/src/domains/block/commands/list.test.ts +0 -111
- package/src/domains/block/commands/list.ts +0 -11
- package/src/domains/block/commands/lookup.test.ts +0 -187
- package/src/domains/block/commands/lookup.ts +0 -14
- package/src/domains/block/commands/sample.ts +0 -56
- package/src/domains/block/formatters/index.ts +0 -5
- package/src/domains/block/formatters/list.test.ts +0 -107
- package/src/domains/block/formatters/list.ts +0 -50
- package/src/domains/block/formatters/lookup.test.ts +0 -318
- package/src/domains/block/formatters/lookup.ts +0 -149
- package/src/domains/block/formatters/sample.ts +0 -21
- package/src/domains/block/formatters/types.ts +0 -16
- package/src/domains/block/helpers/index.ts +0 -4
- package/src/domains/block/helpers/resolveAspects.test.ts +0 -64
- package/src/domains/block/helpers/resolveAspects.ts +0 -35
- package/src/domains/block/index.ts +0 -25
- package/src/domains/block/mcp/index.ts +0 -2
- package/src/domains/block/mcp/specs.ts +0 -67
- package/src/domains/block/operations/index.ts +0 -5
- package/src/domains/block/operations/list.test.ts +0 -80
- package/src/domains/block/operations/list.ts +0 -72
- package/src/domains/block/operations/lookup.test.ts +0 -129
- package/src/domains/block/operations/lookup.ts +0 -446
- package/src/domains/block/operations/sample.ts +0 -41
- package/src/domains/block/orchestration/blockEmptyError.test.ts +0 -26
- package/src/domains/block/orchestration/blockEmptyError.ts +0 -19
- package/src/domains/block/orchestration/buildBlockFilters.ts +0 -12
- package/src/domains/block/orchestration/enrichBlocks.ts +0 -44
- package/src/domains/block/orchestration/index.ts +0 -5
- package/src/domains/block/orchestration/resolveBlockList.ts +0 -39
- package/src/domains/block/orchestration/resolveBlockLookup.ts +0 -35
- package/src/domains/block/stories.test.ts +0 -28
- package/src/domains/block/stories.ts +0 -260
- package/src/domains/block/types.ts +0 -30
- package/src/domains/config/commands/channel.test.ts +0 -128
- package/src/domains/config/commands/channel.ts +0 -99
- package/src/domains/config/commands/configScope.ts +0 -46
- package/src/domains/config/commands/framework.test.ts +0 -119
- package/src/domains/config/commands/framework.ts +0 -103
- package/src/domains/config/commands/index.ts +0 -6
- package/src/domains/config/commands/show.test.ts +0 -61
- package/src/domains/config/commands/show.ts +0 -11
- package/src/domains/config/commands/tier.test.ts +0 -102
- package/src/domains/config/commands/tier.ts +0 -97
- package/src/domains/config/commands/trace.test.ts +0 -165
- package/src/domains/config/commands/trace.ts +0 -83
- package/src/domains/config/formatters/channel.test.ts +0 -70
- package/src/domains/config/formatters/channel.ts +0 -37
- package/src/domains/config/formatters/framework.ts +0 -37
- package/src/domains/config/formatters/index.ts +0 -6
- package/src/domains/config/formatters/show.test.ts +0 -153
- package/src/domains/config/formatters/show.ts +0 -89
- package/src/domains/config/formatters/tier.test.ts +0 -86
- package/src/domains/config/formatters/tier.ts +0 -48
- package/src/domains/config/formatters/trace.ts +0 -28
- package/src/domains/config/index.ts +0 -36
- package/src/domains/config/mcp/index.ts +0 -2
- package/src/domains/config/mcp/specs.ts +0 -100
- package/src/domains/config/operations/index.ts +0 -6
- package/src/domains/config/operations/show.test.ts +0 -78
- package/src/domains/config/operations/show.ts +0 -48
- package/src/domains/config/operations/types.ts +0 -20
- package/src/domains/config/operations/validateChannel.test.ts +0 -36
- package/src/domains/config/operations/validateChannel.ts +0 -24
- package/src/domains/config/operations/validateFramework.ts +0 -24
- package/src/domains/config/operations/validateTier.test.ts +0 -65
- package/src/domains/config/operations/validateTier.ts +0 -43
- package/src/domains/config/stories.ts +0 -42
- package/src/domains/config/tasks/index.ts +0 -6
- package/src/domains/config/tasks/setChannel.ts +0 -21
- package/src/domains/config/tasks/setFramework.ts +0 -21
- package/src/domains/config/tasks/setTier.ts +0 -20
- package/src/domains/config/tasks/setTrace.ts +0 -20
- package/src/domains/config/tasks/writeConfigField.ts +0 -41
- package/src/domains/create/generatorPack/bundled.ts +0 -49
- package/src/domains/create/generatorPack/compileGeneratorPack.test.ts +0 -159
- package/src/domains/create/generatorPack/compileGeneratorPack.ts +0 -312
- package/src/domains/create/index.ts +0 -21
- package/src/domains/create/mcp/index.ts +0 -2
- package/src/domains/create/mcp/specs.ts +0 -13
- package/src/domains/create/renderGeneratorUi.test.ts +0 -103
- package/src/domains/create/renderGeneratorUi.ts +0 -65
- package/src/domains/doctor/commands/doctor.test.ts +0 -75
- package/src/domains/doctor/commands/doctor.ts +0 -43
- package/src/domains/doctor/commands/index.ts +0 -2
- package/src/domains/doctor/formatters/doctor.test.ts +0 -165
- package/src/domains/doctor/formatters/doctor.ts +0 -136
- package/src/domains/doctor/formatters/index.ts +0 -2
- package/src/domains/doctor/index.ts +0 -9
- package/src/domains/doctor/mcp/index.ts +0 -2
- package/src/domains/doctor/mcp/specs.ts +0 -41
- package/src/domains/doctor/operations/checks/checkConfigFile.ts +0 -42
- package/src/domains/doctor/operations/checks/checkKeStore.ts +0 -38
- package/src/domains/doctor/operations/checks/checkMcpCommands.ts +0 -133
- package/src/domains/doctor/operations/checks/checkMcpConfigured.ts +0 -65
- package/src/domains/doctor/operations/checks/checkNodeVersion.ts +0 -25
- package/src/domains/doctor/operations/checks/checkPackageRefs.ts +0 -76
- package/src/domains/doctor/operations/checks/checkPragmaVersion.ts +0 -20
- package/src/domains/doctor/operations/checks/checkShellCompletions.ts +0 -42
- package/src/domains/doctor/operations/checks/checkSkillsSymlinked.ts +0 -64
- package/src/domains/doctor/operations/checks/index.ts +0 -10
- package/src/domains/doctor/operations/checks.test.ts +0 -307
- package/src/domains/doctor/operations/index.ts +0 -3
- package/src/domains/doctor/operations/runChecks.test.ts +0 -176
- package/src/domains/doctor/operations/runChecks.ts +0 -78
- package/src/domains/doctor/operations/types.ts +0 -42
- package/src/domains/graph/commands/index.ts +0 -4
- package/src/domains/graph/commands/inspect.test.ts +0 -94
- package/src/domains/graph/commands/inspect.ts +0 -63
- package/src/domains/graph/commands/query.test.ts +0 -94
- package/src/domains/graph/commands/query.ts +0 -60
- package/src/domains/graph/formatters/index.ts +0 -4
- package/src/domains/graph/formatters/inspect.ts +0 -50
- package/src/domains/graph/formatters/query.test.ts +0 -87
- package/src/domains/graph/formatters/query.ts +0 -74
- package/src/domains/graph/helpers/index.ts +0 -3
- package/src/domains/graph/helpers/resolveUri.test.ts +0 -50
- package/src/domains/graph/helpers/resolveUri.ts +0 -77
- package/src/domains/graph/index.ts +0 -22
- package/src/domains/graph/mcp/index.ts +0 -2
- package/src/domains/graph/mcp/specs.ts +0 -82
- package/src/domains/graph/operations/executeQuery.test.ts +0 -68
- package/src/domains/graph/operations/executeQuery.ts +0 -32
- package/src/domains/graph/operations/index.ts +0 -4
- package/src/domains/graph/operations/inspectUri.test.ts +0 -101
- package/src/domains/graph/operations/inspectUri.ts +0 -64
- package/src/domains/graphql/commands/build.test.ts +0 -196
- package/src/domains/graphql/commands/build.ts +0 -117
- package/src/domains/graphql/commands/check.test.ts +0 -141
- package/src/domains/graphql/commands/check.ts +0 -81
- package/src/domains/graphql/commands/index.ts +0 -5
- package/src/domains/graphql/commands/serve.test.ts +0 -46
- package/src/domains/graphql/commands/serve.ts +0 -141
- package/src/domains/graphql/constants.ts +0 -10
- package/src/domains/graphql/formatters/index.ts +0 -3
- package/src/domains/graphql/formatters/report.ts +0 -78
- package/src/domains/graphql/helpers/gatherSources.test.ts +0 -92
- package/src/domains/graphql/helpers/gatherSources.ts +0 -58
- package/src/domains/graphql/helpers/index.ts +0 -6
- package/src/domains/graphql/helpers/parsePrefixes.test.ts +0 -44
- package/src/domains/graphql/helpers/parsePrefixes.ts +0 -38
- package/src/domains/graphql/helpers/resolveSourceFiles.test.ts +0 -65
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -66
- package/src/domains/graphql/helpers/routeGraphql.test.ts +0 -43
- package/src/domains/graphql/helpers/routeGraphql.ts +0 -28
- package/src/domains/graphql/index.ts +0 -24
- package/src/domains/graphql/operations/compileSchema.test.ts +0 -95
- package/src/domains/graphql/operations/compileSchema.ts +0 -107
- package/src/domains/graphql/operations/createSchemaServer.test.ts +0 -50
- package/src/domains/graphql/operations/createSchemaServer.ts +0 -75
- package/src/domains/graphql/operations/ensureSchemaArtifact.test.ts +0 -167
- package/src/domains/graphql/operations/ensureSchemaArtifact.ts +0 -178
- package/src/domains/graphql/operations/index.ts +0 -17
- package/src/domains/graphql/types.ts +0 -29
- package/src/domains/info/commands/index.ts +0 -4
- package/src/domains/info/commands/info.test.ts +0 -88
- package/src/domains/info/commands/info.ts +0 -47
- package/src/domains/info/commands/upgrade.test.ts +0 -183
- package/src/domains/info/commands/upgrade.ts +0 -153
- package/src/domains/info/constants.test.ts +0 -22
- package/src/domains/info/constants.ts +0 -15
- package/src/domains/info/formatters/index.ts +0 -8
- package/src/domains/info/formatters/info.test.ts +0 -207
- package/src/domains/info/formatters/info.ts +0 -131
- package/src/domains/info/formatters/upgrade.test.ts +0 -136
- package/src/domains/info/formatters/upgrade.ts +0 -70
- package/src/domains/info/index.ts +0 -9
- package/src/domains/info/mcp/index.ts +0 -2
- package/src/domains/info/mcp/specs.ts +0 -65
- package/src/domains/info/operations/checkRegistryVersion.test.ts +0 -124
- package/src/domains/info/operations/checkRegistryVersion.ts +0 -45
- package/src/domains/info/operations/collectEntityCounts.test.ts +0 -156
- package/src/domains/info/operations/collectEntityCounts.ts +0 -123
- package/src/domains/info/operations/collectInfo.test.ts +0 -122
- package/src/domains/info/operations/collectInfo.ts +0 -94
- package/src/domains/info/operations/collectStoreSummary.test.ts +0 -61
- package/src/domains/info/operations/collectStoreSummary.ts +0 -42
- package/src/domains/info/operations/index.ts +0 -6
- package/src/domains/info/types.test-d.ts +0 -35
- package/src/domains/info/types.ts +0 -67
- package/src/domains/llm/capabilities.test.ts +0 -111
- package/src/domains/llm/commands/capabilities.ts +0 -37
- package/src/domains/llm/commands/index.ts +0 -4
- package/src/domains/llm/commands/llm.ts +0 -41
- package/src/domains/llm/data/commandReference.ts +0 -106
- package/src/domains/llm/data/decisionTrees.ts +0 -55
- package/src/domains/llm/data/index.ts +0 -6
- package/src/domains/llm/data/toolCatalog.ts +0 -221
- package/src/domains/llm/formatters/capabilities.ts +0 -50
- package/src/domains/llm/formatters/index.ts +0 -4
- package/src/domains/llm/formatters/orientation.ts +0 -57
- package/src/domains/llm/index.ts +0 -9
- package/src/domains/llm/llmCommand.test.ts +0 -101
- package/src/domains/llm/mcp/index.ts +0 -2
- package/src/domains/llm/mcp/specs.ts +0 -93
- package/src/domains/llm/operations/collectContext.test.ts +0 -64
- package/src/domains/llm/operations/collectContext.ts +0 -37
- package/src/domains/llm/operations/index.ts +0 -3
- package/src/domains/llm/types.ts +0 -72
- package/src/domains/modifier/commands/index.ts +0 -5
- package/src/domains/modifier/commands/list.test.ts +0 -57
- package/src/domains/modifier/commands/list.ts +0 -9
- package/src/domains/modifier/commands/lookup.test.ts +0 -91
- package/src/domains/modifier/commands/lookup.ts +0 -14
- package/src/domains/modifier/commands/sample.ts +0 -54
- package/src/domains/modifier/formatters/index.ts +0 -8
- package/src/domains/modifier/formatters/list.test.ts +0 -38
- package/src/domains/modifier/formatters/list.ts +0 -22
- package/src/domains/modifier/formatters/lookup.test.ts +0 -33
- package/src/domains/modifier/formatters/lookup.ts +0 -50
- package/src/domains/modifier/formatters/sample.ts +0 -15
- package/src/domains/modifier/index.ts +0 -27
- package/src/domains/modifier/mcp/index.ts +0 -2
- package/src/domains/modifier/mcp/specs.ts +0 -65
- package/src/domains/modifier/modifierConfig.ts +0 -36
- package/src/domains/modifier/operations/index.ts +0 -5
- package/src/domains/modifier/operations/list.test.ts +0 -39
- package/src/domains/modifier/operations/list.ts +0 -41
- package/src/domains/modifier/operations/lookup.test.ts +0 -37
- package/src/domains/modifier/operations/lookup.ts +0 -69
- package/src/domains/modifier/operations/sample.ts +0 -32
- package/src/domains/modifier/orchestration/index.ts +0 -3
- package/src/domains/modifier/orchestration/modifierEmptyError.test.ts +0 -26
- package/src/domains/modifier/orchestration/modifierEmptyError.ts +0 -15
- package/src/domains/modifier/orchestration/resolveModifierList.ts +0 -16
- package/src/domains/modifier/orchestration/resolveModifierLookup.ts +0 -33
- package/src/domains/modifier/stories.test.ts +0 -20
- package/src/domains/modifier/stories.ts +0 -86
- package/src/domains/modifier/types.ts +0 -5
- package/src/domains/ontology/commands/index.ts +0 -4
- package/src/domains/ontology/commands/list.test.ts +0 -84
- package/src/domains/ontology/commands/list.ts +0 -11
- package/src/domains/ontology/commands/show.test.ts +0 -179
- package/src/domains/ontology/commands/show.ts +0 -14
- package/src/domains/ontology/formatters/index.ts +0 -5
- package/src/domains/ontology/formatters/list.ts +0 -64
- package/src/domains/ontology/formatters/show.ts +0 -396
- package/src/domains/ontology/helpers/buildClassTree.ts +0 -89
- package/src/domains/ontology/helpers/completeClassNames.ts +0 -43
- package/src/domains/ontology/helpers/expandOntologyIris.ts +0 -79
- package/src/domains/ontology/helpers/findNamespace.ts +0 -23
- package/src/domains/ontology/helpers/index.ts +0 -21
- package/src/domains/ontology/helpers/queryClasses.ts +0 -66
- package/src/domains/ontology/helpers/queryProperties.ts +0 -90
- package/src/domains/ontology/helpers/queryTboxFacts.ts +0 -160
- package/src/domains/ontology/helpers/resolvePrefix.ts +0 -45
- package/src/domains/ontology/index.ts +0 -26
- package/src/domains/ontology/mcp/index.ts +0 -2
- package/src/domains/ontology/mcp/specs.ts +0 -16
- package/src/domains/ontology/operations/index.ts +0 -5
- package/src/domains/ontology/operations/listOntologies.test.ts +0 -122
- package/src/domains/ontology/operations/listOntologies.ts +0 -197
- package/src/domains/ontology/operations/showOntology.test.ts +0 -184
- package/src/domains/ontology/operations/showOntology.ts +0 -323
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -41
- package/src/domains/ontology/operations/showOntologyRaw.ts +0 -50
- package/src/domains/ontology/stories.test.ts +0 -36
- package/src/domains/ontology/stories.ts +0 -153
- package/src/domains/refs/commands/updateRefs.ts +0 -52
- package/src/domains/refs/formatters/updateRefs.ts +0 -27
- package/src/domains/refs/index.ts +0 -27
- package/src/domains/refs/operations/gitOps.test.ts +0 -155
- package/src/domains/refs/operations/gitOps.ts +0 -92
- package/src/domains/refs/operations/index.ts +0 -10
- package/src/domains/refs/operations/parseRef.test.ts +0 -157
- package/src/domains/refs/operations/parseRef.ts +0 -114
- package/src/domains/refs/operations/paths.test.ts +0 -98
- package/src/domains/refs/operations/paths.ts +0 -91
- package/src/domains/refs/operations/readGlobalRefs.test.ts +0 -63
- package/src/domains/refs/operations/readGlobalRefs.ts +0 -37
- package/src/domains/refs/operations/updateRefs.test.ts +0 -167
- package/src/domains/refs/operations/updateRefs.ts +0 -180
- package/src/domains/setup/commands/all.ts +0 -58
- package/src/domains/setup/commands/completions.ts +0 -85
- package/src/domains/setup/commands/entrypoints.test.ts +0 -170
- package/src/domains/setup/commands/index.ts +0 -7
- package/src/domains/setup/commands/lsp.ts +0 -49
- package/src/domains/setup/commands/mcp.ts +0 -119
- package/src/domains/setup/commands/setup.ts +0 -70
- package/src/domains/setup/commands/skills.test.ts +0 -68
- package/src/domains/setup/commands/skills.ts +0 -110
- package/src/domains/setup/formatters/index.ts +0 -2
- package/src/domains/setup/formatters/skills.test.ts +0 -103
- package/src/domains/setup/formatters/skills.ts +0 -112
- package/src/domains/setup/formatters/types.ts +0 -7
- package/src/domains/setup/helpers/completionScripts.test.ts +0 -58
- package/src/domains/setup/helpers/completionScripts.ts +0 -92
- package/src/domains/setup/helpers/constants.ts +0 -2
- package/src/domains/setup/helpers/detectShell.test.ts +0 -48
- package/src/domains/setup/helpers/detectShell.ts +0 -20
- package/src/domains/setup/helpers/index.ts +0 -12
- package/src/domains/setup/helpers/runSetupTask.test.ts +0 -277
- package/src/domains/setup/helpers/runSetupTask.ts +0 -221
- package/src/domains/setup/index.ts +0 -37
- package/src/domains/setup/operations/index.ts +0 -6
- package/src/domains/setup/operations/setupAll.test.ts +0 -48
- package/src/domains/setup/operations/setupAll.ts +0 -41
- package/src/domains/setup/operations/setupCompletions.test.ts +0 -94
- package/src/domains/setup/operations/setupCompletions.ts +0 -54
- package/src/domains/setup/operations/setupLsp.test.ts +0 -30
- package/src/domains/setup/operations/setupLsp.ts +0 -22
- package/src/domains/setup/operations/setupMcp.test.ts +0 -120
- package/src/domains/setup/operations/setupMcp.ts +0 -108
- package/src/domains/setup/operations/setupSkills.test.ts +0 -191
- package/src/domains/setup/operations/setupSkills.ts +0 -160
- package/src/domains/setup/types.ts +0 -18
- package/src/domains/shared/ToolSpec.ts +0 -49
- package/src/domains/shared/bootStore.bareCore.test.ts +0 -63
- package/src/domains/shared/bootStore.test.ts +0 -82
- package/src/domains/shared/bootStore.ts +0 -171
- package/src/domains/shared/buildQuery.ts +0 -18
- package/src/domains/shared/compactUri.test.ts +0 -32
- package/src/domains/shared/compactUri.ts +0 -21
- package/src/domains/shared/context.ts +0 -16
- package/src/domains/shared/contracts.ts +0 -164
- package/src/domains/shared/createInteractivePromptSession.test.ts +0 -439
- package/src/domains/shared/createInteractivePromptSession.ts +0 -236
- package/src/domains/shared/emptyErrorRecovery.test.ts +0 -106
- package/src/domains/shared/extractLocalName.test.ts +0 -21
- package/src/domains/shared/extractLocalName.ts +0 -14
- package/src/domains/shared/filters/buildChannelFilter.test.ts +0 -52
- package/src/domains/shared/filters/buildChannelFilter.ts +0 -41
- package/src/domains/shared/filters/buildFilterConfig.ts +0 -15
- package/src/domains/shared/filters/buildFilters.test.ts +0 -33
- package/src/domains/shared/filters/buildFilters.ts +0 -30
- package/src/domains/shared/filters/buildTierFilter.test.ts +0 -78
- package/src/domains/shared/filters/buildTierFilter.ts +0 -69
- package/src/domains/shared/filters/describeFilters.ts +0 -14
- package/src/domains/shared/filters/index.ts +0 -10
- package/src/domains/shared/formatters.ts +0 -103
- package/src/domains/shared/listTiers.ts +0 -40
- package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
- package/src/domains/shared/loaders/bundledLoader.ts +0 -254
- package/src/domains/shared/loaders/gitLoader.ts +0 -30
- package/src/domains/shared/loaders/index.ts +0 -9
- package/src/domains/shared/loaders/localLoader.ts +0 -71
- package/src/domains/shared/loaders/readPackageDir.test.ts +0 -58
- package/src/domains/shared/loaders/readPackageDir.ts +0 -185
- package/src/domains/shared/loaders/storyAssetsPlugin.test.ts +0 -84
- package/src/domains/shared/loaders/storyAssetsPlugin.ts +0 -46
- package/src/domains/shared/lookupMany.test.ts +0 -135
- package/src/domains/shared/lookupMany.ts +0 -101
- package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
- package/src/domains/shared/mergeAndParseRefs.ts +0 -44
- package/src/domains/shared/namespaces.ts +0 -26
- package/src/domains/shared/packages.ts +0 -20
- package/src/domains/shared/parseSampleCount.test.ts +0 -47
- package/src/domains/shared/parseSampleCount.ts +0 -45
- package/src/domains/shared/pickRandom.ts +0 -22
- package/src/domains/shared/prefixes.test.ts +0 -211
- package/src/domains/shared/prefixes.ts +0 -204
- package/src/domains/shared/renderers.ts +0 -410
- package/src/domains/shared/resolveConfiguredGraphs.test.ts +0 -27
- package/src/domains/shared/resolveConfiguredGraphs.ts +0 -41
- package/src/domains/shared/resolveLookupExitCode.test.ts +0 -48
- package/src/domains/shared/resolveLookupExitCode.ts +0 -42
- package/src/domains/shared/runtime.ts +0 -61
- package/src/domains/shared/sampleFormatters.ts +0 -47
- package/src/domains/shared/semanticPackage.test.ts +0 -89
- package/src/domains/shared/semanticPackage.ts +0 -127
- package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
- package/src/domains/shared/stories/compileLookupCommand.ts +0 -102
- package/src/domains/shared/stories/compileLookupTool.test.ts +0 -105
- package/src/domains/shared/stories/compileLookupTool.ts +0 -96
- package/src/domains/shared/stories/compileReadCommand.test.ts +0 -121
- package/src/domains/shared/stories/compileReadCommand.ts +0 -48
- package/src/domains/shared/stories/compileReadTool.test.ts +0 -64
- package/src/domains/shared/stories/compileReadTool.ts +0 -38
- package/src/domains/shared/stories/condense.test.ts +0 -18
- package/src/domains/shared/stories/condense.ts +0 -15
- package/src/domains/shared/stories/index.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.test.ts +0 -20
- package/src/domains/shared/stories/normalizeNames.ts +0 -22
- package/src/domains/shared/stories/pack/applyPackFilters.test.ts +0 -151
- package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -111
- package/src/domains/shared/stories/pack/applyPackSearch.test.ts +0 -57
- package/src/domains/shared/stories/pack/applyPackSearch.ts +0 -41
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -81
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -154
- package/src/domains/shared/stories/pack/bundled/index.ts +0 -23
- package/src/domains/shared/stories/pack/bundled/standardPack.ts +0 -164
- package/src/domains/shared/stories/pack/bundled/tierPack.ts +0 -50
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -406
- package/src/domains/shared/stories/pack/collectPackStories.ts +0 -158
- package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -50
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -751
- package/src/domains/shared/stories/pack/compilePackStories.ts +0 -724
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -55
- package/src/domains/shared/stories/pack/index.ts +0 -42
- package/src/domains/shared/stories/pack/reservedVerbs.test.ts +0 -213
- package/src/domains/shared/stories/pack/reservedVerbs.ts +0 -170
- package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
- package/src/domains/shared/stories/pack/standardParity.test.ts +0 -381
- package/src/domains/shared/stories/pack/types.ts +0 -224
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -742
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -859
- package/src/domains/shared/stories/projectCliParameters.test.ts +0 -59
- package/src/domains/shared/stories/projectCliParameters.ts +0 -57
- package/src/domains/shared/stories/projectToolParams.test.ts +0 -50
- package/src/domains/shared/stories/projectToolParams.ts +0 -32
- package/src/domains/shared/stories/requirePragmaContext.test.ts +0 -23
- package/src/domains/shared/stories/requirePragmaContext.ts +0 -23
- package/src/domains/shared/stories/resolveLookupDetailed.test.ts +0 -57
- package/src/domains/shared/stories/resolveLookupDetailed.ts +0 -27
- package/src/domains/shared/stories/types.ts +0 -179
- package/src/domains/shared/suggestions/detectCrossDomain.test.ts +0 -43
- package/src/domains/shared/suggestions/detectCrossDomain.ts +0 -116
- package/src/domains/shared/suggestions/expandGlob.test.ts +0 -92
- package/src/domains/shared/suggestions/expandGlob.ts +0 -52
- package/src/domains/shared/suggestions/expandLookupQueries.ts +0 -57
- package/src/domains/shared/suggestions/index.ts +0 -7
- package/src/domains/shared/suggestions/listDomainNames.ts +0 -61
- package/src/domains/shared/suggestions/suggestNames.test.ts +0 -70
- package/src/domains/shared/suggestions/suggestNames.ts +0 -130
- package/src/domains/shared/types/block.ts +0 -107
- package/src/domains/shared/types/common.ts +0 -33
- package/src/domains/shared/types/graph.ts +0 -17
- package/src/domains/shared/types/index.ts +0 -46
- package/src/domains/shared/types/modifier.ts +0 -22
- package/src/domains/shared/types/ontology.ts +0 -145
- package/src/domains/shared/types/runtime.ts +0 -24
- package/src/domains/shared/types/sample.ts +0 -17
- package/src/domains/shared/types/standard.ts +0 -21
- package/src/domains/shared/types/tier.ts +0 -15
- package/src/domains/shared/types/token.ts +0 -30
- package/src/domains/skill/commands/index.ts +0 -4
- package/src/domains/skill/commands/list.test.ts +0 -115
- package/src/domains/skill/commands/list.ts +0 -11
- package/src/domains/skill/commands/lookup.test.ts +0 -118
- package/src/domains/skill/commands/lookup.ts +0 -14
- package/src/domains/skill/formatters/index.ts +0 -3
- package/src/domains/skill/formatters/list.test.ts +0 -140
- package/src/domains/skill/formatters/list.ts +0 -119
- package/src/domains/skill/formatters/lookup.test.ts +0 -46
- package/src/domains/skill/formatters/lookup.ts +0 -57
- package/src/domains/skill/formatters/types.ts +0 -8
- package/src/domains/skill/helpers/index.ts +0 -6
- package/src/domains/skill/helpers/parseFrontmatter.test.ts +0 -122
- package/src/domains/skill/helpers/parseFrontmatter.ts +0 -112
- package/src/domains/skill/helpers/resolveSkillSources.ts +0 -70
- package/src/domains/skill/index.ts +0 -23
- package/src/domains/skill/mcp/index.ts +0 -2
- package/src/domains/skill/mcp/specs.ts +0 -19
- package/src/domains/skill/operations/discover.test.ts +0 -176
- package/src/domains/skill/operations/discover.ts +0 -59
- package/src/domains/skill/operations/index.ts +0 -5
- package/src/domains/skill/operations/list.test.ts +0 -76
- package/src/domains/skill/operations/list.ts +0 -47
- package/src/domains/skill/operations/lookup.test.ts +0 -91
- package/src/domains/skill/operations/lookup.ts +0 -70
- package/src/domains/skill/stories.test.ts +0 -43
- package/src/domains/skill/stories.ts +0 -103
- package/src/domains/skill/types.ts +0 -33
- package/src/domains/token/commands/add-config.test.ts +0 -68
- package/src/domains/token/commands/add-config.ts +0 -62
- package/src/domains/token/commands/index.ts +0 -6
- package/src/domains/token/commands/list.test.ts +0 -82
- package/src/domains/token/commands/list.ts +0 -54
- package/src/domains/token/commands/lookup.test.ts +0 -133
- package/src/domains/token/commands/lookup.ts +0 -107
- package/src/domains/token/commands/sample.ts +0 -54
- package/src/domains/token/featureFlag.ts +0 -17
- package/src/domains/token/formatters/index.ts +0 -8
- package/src/domains/token/formatters/list.test.ts +0 -37
- package/src/domains/token/formatters/list.ts +0 -24
- package/src/domains/token/formatters/lookup.test.ts +0 -61
- package/src/domains/token/formatters/lookup.ts +0 -107
- package/src/domains/token/formatters/sample.ts +0 -16
- package/src/domains/token/index.ts +0 -45
- package/src/domains/token/mcp/index.ts +0 -2
- package/src/domains/token/mcp/specs.ts +0 -207
- package/src/domains/token/operations/add-config.test.ts +0 -68
- package/src/domains/token/operations/add-config.ts +0 -61
- package/src/domains/token/operations/index.ts +0 -8
- package/src/domains/token/operations/list.test.ts +0 -50
- package/src/domains/token/operations/list.ts +0 -52
- package/src/domains/token/operations/lookup.test.ts +0 -42
- package/src/domains/token/operations/lookup.ts +0 -75
- package/src/domains/token/operations/sample.ts +0 -32
- package/src/domains/token/orchestration/index.ts +0 -3
- package/src/domains/token/orchestration/resolveTokenList.ts +0 -17
- package/src/domains/token/orchestration/resolveTokenLookup.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.test.ts +0 -33
- package/src/domains/token/orchestration/tokenEmptyError.ts +0 -20
- package/src/domains/token/tokenConfig.ts +0 -38
- package/src/domains/token/types.ts +0 -6
- package/src/domains/trace/commands/clear.ts +0 -71
- package/src/domains/trace/commands/index.ts +0 -5
- package/src/domains/trace/commands/resolveTraceLimit.test.ts +0 -31
- package/src/domains/trace/commands/sessions.ts +0 -32
- package/src/domains/trace/commands/show.ts +0 -171
- package/src/domains/trace/formatters/index.ts +0 -9
- package/src/domains/trace/formatters/sessions.ts +0 -80
- package/src/domains/trace/formatters/show.ts +0 -122
- package/src/domains/trace/index.ts +0 -17
- package/src/domains/trace/operations/index.ts +0 -8
- package/src/domains/trace/operations/listSessions.test.ts +0 -55
- package/src/domains/trace/operations/listSessions.ts +0 -52
- package/src/domains/trace/operations/readTraceLog.test.ts +0 -100
- package/src/domains/trace/operations/readTraceLog.ts +0 -104
- package/src/domains/trace/tracePlugin.test.ts +0 -171
- package/src/domains/trace/tracePlugin.ts +0 -159
- package/src/domains/trace/types.ts +0 -65
- package/src/embedWasm.ts +0 -42
- package/src/error/PragmaError.test.ts +0 -121
- package/src/error/PragmaError.ts +0 -177
- package/src/error/constants.ts +0 -12
- package/src/error/index.ts +0 -4
- package/src/error/types.ts +0 -55
- package/src/mcp/createMcpServer.test.ts +0 -41
- package/src/mcp/createMcpServer.ts +0 -53
- package/src/mcp/error/buildRecovery.test.ts +0 -37
- package/src/mcp/error/buildRecovery.ts +0 -17
- package/src/mcp/error/index.ts +0 -12
- package/src/mcp/error/serializeError.test.ts +0 -121
- package/src/mcp/error/serializeError.ts +0 -31
- package/src/mcp/error/serializeErrorPayload.test.ts +0 -38
- package/src/mcp/error/serializeErrorPayload.ts +0 -34
- package/src/mcp/error/types.ts +0 -59
- package/src/mcp/index.ts +0 -15
- package/src/mcp/registerResources.test.ts +0 -566
- package/src/mcp/registerResources.ts +0 -9
- package/src/mcp/resources/buildGraphIndex.ts +0 -167
- package/src/mcp/resources/buildResourceList.test.ts +0 -97
- package/src/mcp/resources/buildResourceList.ts +0 -176
- package/src/mcp/resources/classifyEntity.test.ts +0 -40
- package/src/mcp/resources/classifyEntity.ts +0 -27
- package/src/mcp/resources/constants.ts +0 -105
- package/src/mcp/resources/displayPredicates.ts +0 -62
- package/src/mcp/resources/pickFirstValue.test.ts +0 -29
- package/src/mcp/resources/pickFirstValue.ts +0 -26
- package/src/mcp/resources/pickPrimaryType.test.ts +0 -41
- package/src/mcp/resources/pickPrimaryType.ts +0 -26
- package/src/mcp/resources/rankUriCompletions.test.ts +0 -52
- package/src/mcp/resources/rankUriCompletions.ts +0 -64
- package/src/mcp/resources/readEntity.ts +0 -169
- package/src/mcp/resources/registerResources.ts +0 -126
- package/src/mcp/resources/types.ts +0 -128
- package/src/mcp/runMcpServer.test.ts +0 -66
- package/src/mcp/runMcpServer.ts +0 -24
- package/src/mcp/tools/index.ts +0 -74
- package/src/mcp/tools/registerFromSpec.ts +0 -97
- package/src/mcp/tools/registerTools.test.ts +0 -1277
- package/src/mcp/types.ts +0 -66
- package/src/mcp/utils/estimateTokens.test.ts +0 -14
- package/src/mcp/utils/estimateTokens.ts +0 -9
- package/src/mcp/utils/index.ts +0 -11
- package/src/mcp/utils/wrapTool.test.ts +0 -109
- package/src/mcp/utils/wrapTool.ts +0 -81
- package/src/package-manager/constants.ts +0 -29
- package/src/package-manager/detectInstallSource.test.ts +0 -23
- package/src/package-manager/detectInstallSource.ts +0 -111
- package/src/package-manager/detectLocalInstall.test.ts +0 -16
- package/src/package-manager/detectLocalInstall.ts +0 -43
- package/src/package-manager/detectPackageManager.test.ts +0 -81
- package/src/package-manager/detectPackageManager.ts +0 -30
- package/src/package-manager/index.ts +0 -6
- package/src/package-manager/types.ts +0 -10
- package/src/pipeline/collectCommands.test.ts +0 -187
- package/src/pipeline/collectCommands.ts +0 -75
- package/src/pipeline/constants.ts +0 -14
- package/src/pipeline/createProgram.test.ts +0 -116
- package/src/pipeline/createProgram.ts +0 -89
- package/src/pipeline/firstRun.test.ts +0 -80
- package/src/pipeline/firstRun.ts +0 -99
- package/src/pipeline/formatTerminal.test.ts +0 -43
- package/src/pipeline/formatTerminal.ts +0 -53
- package/src/pipeline/index.ts +0 -22
- package/src/pipeline/mapExitCode.test.ts +0 -41
- package/src/pipeline/mapExitCode.ts +0 -12
- package/src/pipeline/parseGlobalFlags.test.ts +0 -193
- package/src/pipeline/parseGlobalFlags.ts +0 -135
- package/src/pipeline/renderError.test.ts +0 -151
- package/src/pipeline/renderError.ts +0 -129
- package/src/pipeline/resolveCommandKind.test.ts +0 -80
- package/src/pipeline/resolveCommandKind.ts +0 -82
- package/src/pipeline/rootHelp.test.ts +0 -87
- package/src/pipeline/rootHelp.ts +0 -265
- package/src/pipeline/runCli.orchestration.test.ts +0 -435
- package/src/pipeline/runCli.test.ts +0 -83
- package/src/pipeline/runCli.ts +0 -411
- package/src/pipeline/types.ts +0 -17
- package/src/testing/cli.ts +0 -71
- package/src/testing/createTestMcpClient.ts +0 -68
- package/src/testing/dsFixtures.ts +0 -523
- package/src/testing/fixtures/canonical-config.json +0 -4
- package/src/testing/fixtures/canonical.ttl +0 -437
- package/src/testing/fixtures/filtered-config.json +0 -4
- package/src/testing/fixtures.ts +0 -34
- package/src/testing/graphqlFixtures.ts +0 -72
- package/src/testing/helpers/assertParity.ts +0 -28
- package/src/testing/helpers/createTestMcpClient.ts +0 -40
- package/src/testing/helpers/createTestRuntime.ts +0 -67
- package/src/testing/index.ts +0 -22
- package/src/testing/integration/__snapshots__/executor-golden.test.ts.snap +0 -1207
- package/src/testing/integration/agent-session.test.ts +0 -148
- package/src/testing/integration/boot.test.ts +0 -105
- package/src/testing/integration/cli-user-stories.test.ts +0 -261
- package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
- package/src/testing/integration/edge-cases.test.ts +0 -275
- package/src/testing/integration/executor-execution.test.ts +0 -103
- package/src/testing/integration/executor-golden.test.ts +0 -145
- package/src/testing/integration/mcp-surface.test.ts +0 -605
- package/src/testing/integration/parity.test.ts +0 -596
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
- package/src/testing/standardParityFixtures.ts +0 -35
- package/src/testing/store.ts +0 -39
- package/src/testing/storyFixtures.ts +0 -63
- package/src/testing/types.ts +0 -20
- package/src/tui/components/BulletList/BulletList.tsx +0 -46
- package/src/tui/components/BulletList/index.ts +0 -2
- package/src/tui/components/BulletList/types.ts +0 -6
- package/src/tui/components/Card/Card.tsx +0 -73
- package/src/tui/components/Card/index.ts +0 -1
- package/src/tui/components/Card/types.ts +0 -12
- package/src/tui/components/CodeBlock/CodeBlock.tsx +0 -37
- package/src/tui/components/CodeBlock/index.ts +0 -2
- package/src/tui/components/CodeBlock/types.ts +0 -6
- package/src/tui/components/DataRow/DataRow.tsx +0 -80
- package/src/tui/components/DataRow/index.ts +0 -2
- package/src/tui/components/DataRow/types.ts +0 -14
- package/src/tui/components/FieldRow/FieldRow.tsx +0 -24
- package/src/tui/components/FieldRow/index.ts +0 -2
- package/src/tui/components/FieldRow/types.ts +0 -10
- package/src/tui/components/HeaderRow/HeaderRow.tsx +0 -32
- package/src/tui/components/HeaderRow/index.ts +0 -2
- package/src/tui/components/HeaderRow/types.ts +0 -8
- package/src/tui/components/MarkdownText/MarkdownText.tsx +0 -19
- package/src/tui/components/MarkdownText/index.ts +0 -2
- package/src/tui/components/MarkdownText/types.ts +0 -4
- package/src/tui/components/MiniTable/MiniTable.tsx +0 -82
- package/src/tui/components/MiniTable/index.ts +0 -2
- package/src/tui/components/MiniTable/types.ts +0 -6
- package/src/tui/components/SectionRenderer/SectionRenderer.tsx +0 -91
- package/src/tui/components/SectionRenderer/index.ts +0 -2
- package/src/tui/components/SectionRenderer/types.ts +0 -15
- package/src/tui/components/TreeView/TreeView.tsx +0 -84
- package/src/tui/components/TreeView/index.ts +0 -2
- package/src/tui/components/TreeView/types.ts +0 -6
- package/src/tui/components/index.ts +0 -19
- package/src/tui/constants.ts +0 -39
- package/src/tui/createListView.ts +0 -23
- package/src/tui/createLookupView.ts +0 -26
- package/src/tui/helpers/computeWidths.ts +0 -53
- package/src/tui/helpers/fitColumns.ts +0 -33
- package/src/tui/helpers/formatMarkdown.ts +0 -19
- package/src/tui/helpers/getTerminalSize.ts +0 -16
- package/src/tui/helpers/index.ts +0 -6
- package/src/tui/helpers/syntaxColor.ts +0 -67
- package/src/tui/helpers/truncateText.ts +0 -12
- package/src/tui/hooks/index.ts +0 -3
- package/src/tui/hooks/types.ts +0 -7
- package/src/tui/hooks/useAutoExit.ts +0 -17
- package/src/tui/hooks/useTerminalSize.ts +0 -19
- package/src/tui/index.ts +0 -15
- package/src/tui/renderInk.tsx +0 -18
- package/src/tui/types.ts +0 -12
- package/src/tui/views/ListView/ListView.tsx +0 -104
- package/src/tui/views/ListView/index.ts +0 -2
- package/src/tui/views/ListView/types.ts +0 -14
- package/src/tui/views/LookupView/LookupView.tsx +0 -244
- package/src/tui/views/LookupView/index.ts +0 -2
- package/src/tui/views/LookupView/types.ts +0 -16
- package/src/tui/views/index.ts +0 -4
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `create` verbs — `component` / `package` / `application` (path capped at
|
|
3
|
+
* two segments; the three component frameworks collapse to one verb + a
|
|
4
|
+
* `--framework` enum). Each is a mutating, interactive, storeless verb.
|
|
5
|
+
*
|
|
6
|
+
* LAZY DISPATCH (R9 + lazy-React): the params are STATIC — built by the
|
|
7
|
+
* generator→grammar adapter over static prompt MIRRORS, never the live
|
|
8
|
+
* generators (importing a generator runs a top-level `await loadTemplate`). The
|
|
9
|
+
* `run` body lazily `import()`s `pickGenerator` + summon-core, so `buildProgram`
|
|
10
|
+
* / `--help` / `__complete` / reads never load summon-core or the generators —
|
|
11
|
+
* and `create --yes` never loads React (the Ink UI is dynamic-only, and only the
|
|
12
|
+
* TTY branch even asks for it). A parity test loads the real generators and
|
|
13
|
+
* asserts the mirrors still match.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { GeneratorResult, PromptDefinition } from "@canonical/summon-core";
|
|
17
|
+
import type { Task } from "@canonical/task";
|
|
18
|
+
import { PragmaError } from "../../kernel/error/PragmaError.js";
|
|
19
|
+
import type { PragmaRuntime } from "../../kernel/runtime/types.js";
|
|
20
|
+
import type { ParamSpec, VerbSpec } from "../../kernel/spec/types.js";
|
|
21
|
+
import { createFormatters } from "./create.render.js";
|
|
22
|
+
import { generatorToParams } from "./generatorToVerbSpec.js";
|
|
23
|
+
import { assertInsideWorkspace } from "./pathJail.js";
|
|
24
|
+
import type { CreateKind } from "./types.js";
|
|
25
|
+
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// Static params (mirrors of the generators' prompts — see the module doc)
|
|
28
|
+
// =============================================================================
|
|
29
|
+
|
|
30
|
+
/** `--framework` — the three component generators collapsed to one enum. */
|
|
31
|
+
const FRAMEWORK_PARAM: ParamSpec = {
|
|
32
|
+
kind: "enum",
|
|
33
|
+
name: "framework",
|
|
34
|
+
doc: "Component framework.",
|
|
35
|
+
values: ["react", "svelte", "lit"],
|
|
36
|
+
default: "react",
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* `componentPath` — positional, and deliberately WITHOUT a ParamSpec default so
|
|
41
|
+
* the selected framework's own prompt default applies (react vs svelte/lit
|
|
42
|
+
* differ); `required: false` keeps it optional despite having no default here.
|
|
43
|
+
*/
|
|
44
|
+
const COMPONENT_PATH_PARAM: ParamSpec = {
|
|
45
|
+
kind: "string",
|
|
46
|
+
name: "componentPath",
|
|
47
|
+
doc: "Component path (its final segment is the PascalCase component name).",
|
|
48
|
+
required: false,
|
|
49
|
+
positional: true,
|
|
50
|
+
complete: { kind: "files" },
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const SHARED_COMPONENT_MIRROR: PromptDefinition[] = [
|
|
54
|
+
{
|
|
55
|
+
name: "withStyles",
|
|
56
|
+
type: "confirm",
|
|
57
|
+
message: "Include styles?",
|
|
58
|
+
default: true,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: "withStories",
|
|
62
|
+
type: "confirm",
|
|
63
|
+
message: "Include Storybook stories?",
|
|
64
|
+
default: true,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "withSsrTests",
|
|
68
|
+
type: "confirm",
|
|
69
|
+
message: "Include SSR tests?",
|
|
70
|
+
default: true,
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
const PACKAGE_MIRROR: PromptDefinition[] = [
|
|
75
|
+
{
|
|
76
|
+
name: "name",
|
|
77
|
+
type: "text",
|
|
78
|
+
message: "Package name:",
|
|
79
|
+
default: "@canonical/my-package",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "type",
|
|
83
|
+
type: "select",
|
|
84
|
+
message: "Package type:",
|
|
85
|
+
choices: [
|
|
86
|
+
{ label: "tool-ts", value: "tool-ts" },
|
|
87
|
+
{ label: "library", value: "library" },
|
|
88
|
+
{ label: "css", value: "css" },
|
|
89
|
+
],
|
|
90
|
+
default: "tool-ts",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: "description",
|
|
94
|
+
type: "text",
|
|
95
|
+
message: "Package description:",
|
|
96
|
+
default: "",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "withReact",
|
|
100
|
+
type: "confirm",
|
|
101
|
+
message: "Include React dependencies?",
|
|
102
|
+
default: false,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "withStorybook",
|
|
106
|
+
type: "confirm",
|
|
107
|
+
message: "Include Storybook setup?",
|
|
108
|
+
default: false,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: "withCli",
|
|
112
|
+
type: "confirm",
|
|
113
|
+
message: "Include a CLI binary entry point?",
|
|
114
|
+
default: false,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: "withPrTemplate",
|
|
118
|
+
type: "confirm",
|
|
119
|
+
message: "Include a PR template?",
|
|
120
|
+
default: false,
|
|
121
|
+
},
|
|
122
|
+
// Opt-in (default false): the grammar has no `--no-` form, so a default-true
|
|
123
|
+
// boolean could never be turned off. `--run-install` enables it.
|
|
124
|
+
{
|
|
125
|
+
name: "runInstall",
|
|
126
|
+
type: "confirm",
|
|
127
|
+
message: "Run the package manager install after creation?",
|
|
128
|
+
default: false,
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
const APPLICATION_MIRROR: PromptDefinition[] = [
|
|
133
|
+
{
|
|
134
|
+
name: "appPath",
|
|
135
|
+
type: "text",
|
|
136
|
+
message: "Application directory:",
|
|
137
|
+
default: "my-app",
|
|
138
|
+
positional: true,
|
|
139
|
+
},
|
|
140
|
+
{ name: "ssr", type: "confirm", message: "Include SSR?", default: true },
|
|
141
|
+
{
|
|
142
|
+
name: "router",
|
|
143
|
+
type: "confirm",
|
|
144
|
+
message: "Include router?",
|
|
145
|
+
default: true,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: "forms",
|
|
149
|
+
type: "confirm",
|
|
150
|
+
message: "Include form components?",
|
|
151
|
+
default: true,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: "relay",
|
|
155
|
+
type: "confirm",
|
|
156
|
+
message: "Include a Relay (GraphQL) data layer?",
|
|
157
|
+
default: false,
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: "runInstall",
|
|
161
|
+
type: "confirm",
|
|
162
|
+
message: "Install dependencies now?",
|
|
163
|
+
default: false,
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
const componentParams: ParamSpec[] = [
|
|
168
|
+
FRAMEWORK_PARAM,
|
|
169
|
+
COMPONENT_PATH_PARAM,
|
|
170
|
+
...generatorToParams(SHARED_COMPONENT_MIRROR),
|
|
171
|
+
];
|
|
172
|
+
const packageParams: ParamSpec[] = generatorToParams(PACKAGE_MIRROR);
|
|
173
|
+
const applicationParams: ParamSpec[] = generatorToParams(APPLICATION_MIRROR);
|
|
174
|
+
|
|
175
|
+
/** The path param each noun jails (package writes into a name-derived subdir). */
|
|
176
|
+
const PATH_PARAM: Record<CreateKind, string | undefined> = {
|
|
177
|
+
component: "componentPath",
|
|
178
|
+
package: undefined,
|
|
179
|
+
application: "appPath",
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
// =============================================================================
|
|
183
|
+
// The lazy run — the one-line summon↔pragma seam per invocation
|
|
184
|
+
// =============================================================================
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Build the `create` Task for one invocation: pick the generator, jail its
|
|
188
|
+
* output path, pre-validate flag/arg answers, pick the prompt strategy against
|
|
189
|
+
* the interaction context, wire `runtime.exec`, and return `execute`.
|
|
190
|
+
*
|
|
191
|
+
* @returns A `Promise<Task<GeneratorResult>>` (the union's third arm) the
|
|
192
|
+
* dispatcher/MCP handler awaits into a Task before interpreting.
|
|
193
|
+
*/
|
|
194
|
+
/**
|
|
195
|
+
* The standalone `bun build --compile` binary resolves every bundled module
|
|
196
|
+
* under the virtual `/$bunfs` filesystem — a marker absent from any source or
|
|
197
|
+
* `bun`-run module URL. `create component` is fully embedded and runs from the
|
|
198
|
+
* binary; `create package` / `create application` are NOT (application also
|
|
199
|
+
* copies non-`.ejs` assets), so they are gated to a source run below.
|
|
200
|
+
*/
|
|
201
|
+
const IS_COMPILED_BINARY = import.meta.url.includes("/$bunfs/");
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* True when a dynamic import failed because the module could not be RESOLVED.
|
|
205
|
+
* summon-core + the generators are now bundled into the binary, so this should
|
|
206
|
+
* not arise; {@link loadCreateRuntime} keeps it as a defensive backstop that
|
|
207
|
+
* turns a resolution failure into a clean gate rather than a raw "internal bug"
|
|
208
|
+
* report. Matched structurally across bun (`ResolveMessage`) and node
|
|
209
|
+
* (`ERR_MODULE_NOT_FOUND`) so a genuine runtime error still propagates.
|
|
210
|
+
*/
|
|
211
|
+
export function isModuleNotFound(cause: unknown): boolean {
|
|
212
|
+
if (!cause || typeof cause !== "object") return false;
|
|
213
|
+
const { code, name, message } = cause as {
|
|
214
|
+
code?: unknown;
|
|
215
|
+
name?: unknown;
|
|
216
|
+
message?: unknown;
|
|
217
|
+
};
|
|
218
|
+
return (
|
|
219
|
+
code === "ERR_MODULE_NOT_FOUND" ||
|
|
220
|
+
code === "MODULE_NOT_FOUND" ||
|
|
221
|
+
name === "ResolveMessage" ||
|
|
222
|
+
(typeof message === "string" &&
|
|
223
|
+
/cannot find (module|package)/i.test(message))
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Load the create runtime: inject the embedded template manifest, then import
|
|
229
|
+
* the generator selector + summon-core (STATIC dynamic imports, so bun's
|
|
230
|
+
* `--compile` bundler includes them — they stay behind this lazy boundary, so
|
|
231
|
+
* the fast paths and `create --yes` still load neither summon-core nor React).
|
|
232
|
+
*
|
|
233
|
+
* The manifest is injected BEFORE `pickGenerator` — importing the generator
|
|
234
|
+
* packages runs a top-level `await loadTemplate`, and the component loader
|
|
235
|
+
* consults the manifest when its disk read fails (the compiled binary). It is
|
|
236
|
+
* imported from summon-component's `loadTemplate` submodule so this does not
|
|
237
|
+
* evaluate the generator index first. In a source run the disk read wins and the
|
|
238
|
+
* manifest is inert.
|
|
239
|
+
*
|
|
240
|
+
* `create package` / `create application` are not yet embedded for the compiled
|
|
241
|
+
* binary (application also copies non-`.ejs` assets), so they are gated to a
|
|
242
|
+
* source run here. A stale resolution failure is a defensive backstop
|
|
243
|
+
* {@link isModuleNotFound} turns into the same clean gate.
|
|
244
|
+
*/
|
|
245
|
+
async function loadCreateRuntime(kind: CreateKind) {
|
|
246
|
+
if (IS_COMPILED_BINARY && kind !== "component") {
|
|
247
|
+
throw new PragmaError({
|
|
248
|
+
code: "UNSUPPORTED",
|
|
249
|
+
message: `\`create ${kind}\` is not available in the compiled pragma binary yet — only \`create component\` is embedded. Run it from a source checkout, or use the \`summon\` CLI.`,
|
|
250
|
+
recovery: {
|
|
251
|
+
message: `Run \`create ${kind}\` from a source checkout, or use \`summon\`.`,
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
try {
|
|
256
|
+
// Inject the embedded manifest before the generators evaluate.
|
|
257
|
+
const [{ setEmbeddedTemplates }, { TEMPLATES }] = await Promise.all([
|
|
258
|
+
import("@canonical/summon-component/embedded"),
|
|
259
|
+
import("./templates.embedded.generated.js"),
|
|
260
|
+
]);
|
|
261
|
+
setEmbeddedTemplates(TEMPLATES);
|
|
262
|
+
|
|
263
|
+
const [pick, summon] = await Promise.all([
|
|
264
|
+
import("./pickGenerator.js"),
|
|
265
|
+
import("@canonical/summon-core"),
|
|
266
|
+
]);
|
|
267
|
+
return { pickGenerator: pick.pickGenerator, summon };
|
|
268
|
+
} catch (cause) {
|
|
269
|
+
if (isModuleNotFound(cause)) {
|
|
270
|
+
throw new PragmaError({
|
|
271
|
+
code: "UNSUPPORTED",
|
|
272
|
+
message:
|
|
273
|
+
"`create` could not load its generator runtime. Run it from a source checkout, or use the `summon` CLI.",
|
|
274
|
+
recovery: {
|
|
275
|
+
message: "Run `create` from a source checkout, or use `summon`.",
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
throw cause;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
async function runCreate(
|
|
284
|
+
kind: CreateKind,
|
|
285
|
+
params: Record<string, unknown>,
|
|
286
|
+
rt: PragmaRuntime,
|
|
287
|
+
): Promise<Task<GeneratorResult>> {
|
|
288
|
+
// Lazy: importing these runs the generators' top-level template loads and
|
|
289
|
+
// pulls summon-core — kept off every non-create path. Now STATIC dynamic
|
|
290
|
+
// imports so `--compile` bundles them; the generators' `.ejs` are embedded and
|
|
291
|
+
// injected here. `package`/`application` stay a source-run feature in the binary.
|
|
292
|
+
const { pickGenerator, summon } = await loadCreateRuntime(kind);
|
|
293
|
+
|
|
294
|
+
const generator = pickGenerator(kind, params);
|
|
295
|
+
|
|
296
|
+
// SEC-2: reject a path escaping the workspace BEFORE any effect runs.
|
|
297
|
+
const pathParam = PATH_PARAM[kind];
|
|
298
|
+
if (pathParam) assertInsideWorkspace(pathParam, params[pathParam], rt.cwd);
|
|
299
|
+
|
|
300
|
+
// Reject a flag/arg-provided answer that fails its prompt's own constraint,
|
|
301
|
+
// with a clean INVALID_INPUT (execute re-validates as a backstop).
|
|
302
|
+
const invalid = summon.validateAnswers(generator.prompts, params);
|
|
303
|
+
if (invalid !== null) {
|
|
304
|
+
throw new PragmaError({ code: "INVALID_INPUT", message: invalid });
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const { isTTY, transport, yes, signal, abort } = rt.interaction ?? {
|
|
308
|
+
isTTY: false,
|
|
309
|
+
transport: "cli" as const,
|
|
310
|
+
yes: true,
|
|
311
|
+
};
|
|
312
|
+
const stamp = summon.createGeneratorStamp(generator);
|
|
313
|
+
|
|
314
|
+
// TTY without --yes → the embedded Ink wizard (identical #819 flow). The
|
|
315
|
+
// session both answers prompts and renders live effect progress, so its
|
|
316
|
+
// callbacks ride runtime.exec alongside the shared stamping transform.
|
|
317
|
+
if (isTTY && !yes) {
|
|
318
|
+
// `onCancel` (H2): an in-Ink Ctrl-C during execution aborts the run so the
|
|
319
|
+
// interpreter stops writing — raw mode swallows the SIGINT, so the wizard
|
|
320
|
+
// drives the abort. Shared with setup by construction.
|
|
321
|
+
const session = summon.inkPrompt(generator, { signal, onCancel: abort });
|
|
322
|
+
// Thread the per-call write root: the interpreter resolves the generator's
|
|
323
|
+
// relative output paths against `rt.cwd` — the SAME dir the SEC-2 jail
|
|
324
|
+
// validated above — so the write can never escape the checked directory.
|
|
325
|
+
rt.exec = {
|
|
326
|
+
cwd: rt.cwd,
|
|
327
|
+
promptHandler: session.promptHandler,
|
|
328
|
+
onEffectStart: summon.createStampOnEffectStart(
|
|
329
|
+
stamp,
|
|
330
|
+
session.onEffectStart,
|
|
331
|
+
),
|
|
332
|
+
onEffectComplete: session.onEffectComplete,
|
|
333
|
+
onLog: session.onLog,
|
|
334
|
+
dispose: session.dispose,
|
|
335
|
+
signal,
|
|
336
|
+
};
|
|
337
|
+
return summon.execute(generator, {
|
|
338
|
+
prompt: session.promptHandler,
|
|
339
|
+
params,
|
|
340
|
+
signal,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// Non-interactive: MCP → params-or-error; CLI/--yes/CI → flags+defaults.
|
|
345
|
+
const prompt =
|
|
346
|
+
transport === "mcp" ? summon.mcpPrompt(params) : summon.autoPrompt(params);
|
|
347
|
+
// Same per-call write root as the Ink branch: `rt.cwd` feeds both the SEC-2
|
|
348
|
+
// jail and the interpreter's effect-path base, atomically.
|
|
349
|
+
rt.exec = {
|
|
350
|
+
cwd: rt.cwd,
|
|
351
|
+
promptHandler: prompt,
|
|
352
|
+
onEffectStart: summon.createStampOnEffectStart(stamp),
|
|
353
|
+
onLog: (_level, message) => process.stderr.write(`${message}\n`),
|
|
354
|
+
signal,
|
|
355
|
+
};
|
|
356
|
+
return summon.execute(generator, { prompt, params, signal });
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* The shared capability: storeless, mutating, interactive, MCP-exposed.
|
|
361
|
+
*
|
|
362
|
+
* `destructive: false` is load-bearing (D4): create only WRITES NEW files, so it
|
|
363
|
+
* is explicitly non-destructive. Without it `annotationsFor` emits no
|
|
364
|
+
* `destructiveHint`, and MCP clients default an unset hint on a non-read-only
|
|
365
|
+
* tool to `true` — advertising create as destructive, the opposite of intent.
|
|
366
|
+
*/
|
|
367
|
+
const CREATE_CAPABILITY = {
|
|
368
|
+
needsStore: false,
|
|
369
|
+
mutates: true,
|
|
370
|
+
destructive: false,
|
|
371
|
+
interactive: true,
|
|
372
|
+
mcp: {
|
|
373
|
+
expose: true as const,
|
|
374
|
+
annotations: { readOnlyHint: false, openWorldHint: false },
|
|
375
|
+
},
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Build a create verb. `run` presents `Promise<Task<R>>` through the `Task<R>`
|
|
380
|
+
* arm by an honest cast at this one site (mirroring `sources update`): a literal
|
|
381
|
+
* `Promise<Task<R>>` arm in the union would poison async read-verb inference.
|
|
382
|
+
*/
|
|
383
|
+
function createVerb(
|
|
384
|
+
kind: CreateKind,
|
|
385
|
+
summary: string,
|
|
386
|
+
params: ParamSpec[],
|
|
387
|
+
examples: VerbSpec["examples"],
|
|
388
|
+
): VerbSpec<Record<string, unknown>, GeneratorResult> {
|
|
389
|
+
return {
|
|
390
|
+
path: ["create", kind],
|
|
391
|
+
summary,
|
|
392
|
+
params,
|
|
393
|
+
output: { formatters: createFormatters },
|
|
394
|
+
examples,
|
|
395
|
+
capability: CREATE_CAPABILITY,
|
|
396
|
+
run: (params_, rt) =>
|
|
397
|
+
runCreate(kind, params_, rt) as unknown as Task<GeneratorResult>,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export const createComponentVerb = createVerb(
|
|
402
|
+
"component",
|
|
403
|
+
"Scaffold a React, Svelte, or Lit component.",
|
|
404
|
+
componentParams,
|
|
405
|
+
[
|
|
406
|
+
{
|
|
407
|
+
cmd: "pragma create component src/components/Button --framework react",
|
|
408
|
+
note: "React component with tests, stories, and styles",
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
cmd: "pragma create component src/lib/Card --framework svelte --dry-run",
|
|
412
|
+
note: "preview the files without writing",
|
|
413
|
+
},
|
|
414
|
+
],
|
|
415
|
+
);
|
|
416
|
+
|
|
417
|
+
export const createPackageVerb = createVerb(
|
|
418
|
+
"package",
|
|
419
|
+
"Scaffold a new npm package for the monorepo.",
|
|
420
|
+
packageParams,
|
|
421
|
+
[
|
|
422
|
+
{ cmd: "pragma create package --name @canonical/my-lib --type library" },
|
|
423
|
+
{ cmd: "pragma create package --name @canonical/my-tool --run-install" },
|
|
424
|
+
],
|
|
425
|
+
);
|
|
426
|
+
|
|
427
|
+
export const createApplicationVerb = createVerb(
|
|
428
|
+
"application",
|
|
429
|
+
"Scaffold a full React application with SSR and routing.",
|
|
430
|
+
applicationParams,
|
|
431
|
+
[
|
|
432
|
+
{ cmd: "pragma create application my-app" },
|
|
433
|
+
{ cmd: "pragma create application my-app --relay" },
|
|
434
|
+
],
|
|
435
|
+
);
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PROTECTED — SEC-2 cwd/jail ATOMICITY (§9).
|
|
3
|
+
*
|
|
4
|
+
* The injected MCP-only `cwd` arg is the SINGLE per-call write root: the SEC-2
|
|
5
|
+
* jail validates the output path against it AND the interpreter resolves the
|
|
6
|
+
* generator's effect paths against it. These tests prove the two are the same
|
|
7
|
+
* value — a path that passes the jail lands under the jailed dir, and a path
|
|
8
|
+
* that escapes the jailed dir is rejected against that SAME dir — so a write
|
|
9
|
+
* directory the jail never validated can never exist (no jail bypass).
|
|
10
|
+
*
|
|
11
|
+
* Crucially, the server's runtime cwd (and `process.cwd()`) is a DIFFERENT dir
|
|
12
|
+
* than the injected `cwd`, so a passing write proves the arg drove it, not the
|
|
13
|
+
* ambient process directory.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { existsSync, mkdtempSync, readdirSync } from "node:fs";
|
|
17
|
+
import { tmpdir } from "node:os";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
20
|
+
import { projectMcp } from "../../testing/helpers/projectMcp.js";
|
|
21
|
+
import { createModule } from "./index.js";
|
|
22
|
+
|
|
23
|
+
const freshDir = (tag: string): string =>
|
|
24
|
+
mkdtempSync(join(tmpdir(), `pragma-cwdjail-${tag}-`));
|
|
25
|
+
|
|
26
|
+
const COMPONENT_ARGS = {
|
|
27
|
+
framework: "react",
|
|
28
|
+
withStyles: false,
|
|
29
|
+
withStories: false,
|
|
30
|
+
withSsrTests: false,
|
|
31
|
+
} as const;
|
|
32
|
+
|
|
33
|
+
let cleanup: (() => Promise<void>) | undefined;
|
|
34
|
+
afterEach(async () => {
|
|
35
|
+
await cleanup?.();
|
|
36
|
+
cleanup = undefined;
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
describe("create cwd/jail atomicity (PROTECTED)", () => {
|
|
40
|
+
it("writes under the injected cwd, NOT the server's launch dir", async () => {
|
|
41
|
+
const serverDir = freshDir("server");
|
|
42
|
+
const projA = freshDir("projA");
|
|
43
|
+
const mcp = await projectMcp([createModule], serverDir);
|
|
44
|
+
cleanup = mcp.cleanup;
|
|
45
|
+
|
|
46
|
+
const result = await mcp.callTool("create_component", {
|
|
47
|
+
...COMPONENT_ARGS,
|
|
48
|
+
componentPath: "src/Widget",
|
|
49
|
+
cwd: projA,
|
|
50
|
+
confirm: true,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
expect(result.ok).toBe(true);
|
|
54
|
+
// Files land under the injected cwd…
|
|
55
|
+
expect(existsSync(join(projA, "src/Widget/Widget.tsx"))).toBe(true);
|
|
56
|
+
// …and NOT under the server's launch dir.
|
|
57
|
+
expect(existsSync(join(serverDir, "src"))).toBe(false);
|
|
58
|
+
expect(readdirSync(serverDir)).toEqual([]);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("rejects an escape past the per-call cwd — validated against the SAME cwd", async () => {
|
|
62
|
+
const serverDir = freshDir("server");
|
|
63
|
+
const projA = freshDir("projA");
|
|
64
|
+
const escapeSibling = freshDir("escape");
|
|
65
|
+
const mcp = await projectMcp([createModule], serverDir);
|
|
66
|
+
cleanup = mcp.cleanup;
|
|
67
|
+
|
|
68
|
+
const result = await mcp.callTool("create_component", {
|
|
69
|
+
...COMPONENT_ARGS,
|
|
70
|
+
componentPath: "../escape/Bad",
|
|
71
|
+
cwd: projA,
|
|
72
|
+
confirm: true,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
expect(result.ok).toBe(false);
|
|
76
|
+
expect((result.error as { code: string }).code).toBe("INVALID_INPUT");
|
|
77
|
+
// Nothing was written into the sibling the path tried to escape into.
|
|
78
|
+
expect(readdirSync(escapeSibling)).toEqual([]);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("rejects a non-directory cwd with INVALID_INPUT", async () => {
|
|
82
|
+
const serverDir = freshDir("server");
|
|
83
|
+
const projA = freshDir("projA");
|
|
84
|
+
const mcp = await projectMcp([createModule], serverDir);
|
|
85
|
+
cleanup = mcp.cleanup;
|
|
86
|
+
|
|
87
|
+
const result = await mcp.callTool("create_component", {
|
|
88
|
+
...COMPONENT_ARGS,
|
|
89
|
+
componentPath: "Widget",
|
|
90
|
+
cwd: join(projA, "does-not-exist"),
|
|
91
|
+
confirm: true,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
expect(result.ok).toBe(false);
|
|
95
|
+
expect((result.error as { code: string }).code).toBe("INVALID_INPUT");
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it("rejects a relative cwd with INVALID_INPUT", async () => {
|
|
99
|
+
const serverDir = freshDir("server");
|
|
100
|
+
const mcp = await projectMcp([createModule], serverDir);
|
|
101
|
+
cleanup = mcp.cleanup;
|
|
102
|
+
|
|
103
|
+
const result = await mcp.callTool("create_component", {
|
|
104
|
+
...COMPONENT_ARGS,
|
|
105
|
+
componentPath: "Widget",
|
|
106
|
+
cwd: "relative/dir",
|
|
107
|
+
confirm: true,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
expect(result.ok).toBe(false);
|
|
111
|
+
expect((result.error as { code: string }).code).toBe("INVALID_INPUT");
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it("with no cwd arg, still writes under the server's runtime cwd", async () => {
|
|
115
|
+
// Parity: the CLI never sends `cwd`; the server default is its runtime cwd.
|
|
116
|
+
const serverDir = freshDir("server");
|
|
117
|
+
const mcp = await projectMcp([createModule], serverDir);
|
|
118
|
+
cleanup = mcp.cleanup;
|
|
119
|
+
|
|
120
|
+
const result = await mcp.callTool("create_component", {
|
|
121
|
+
...COMPONENT_ARGS,
|
|
122
|
+
componentPath: "src/Widget",
|
|
123
|
+
confirm: true,
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
expect(result.ok).toBe(true);
|
|
127
|
+
expect(existsSync(join(serverDir, "src/Widget/Widget.tsx"))).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The generator→grammar adapter: map a summon {@link PromptDefinition} onto the
|
|
3
|
+
* one grammar's {@link ParamSpec}, mirroring the v1 cli-core
|
|
4
|
+
* `convertGenerator.promptToParameter`.
|
|
5
|
+
*
|
|
6
|
+
* text → { kind: "string" } (+ positional; `complete: files` for paths)
|
|
7
|
+
* confirm → { kind: "boolean" }
|
|
8
|
+
* select → { kind: "enum", values: choices.map(value) }
|
|
9
|
+
* multiselect → { kind: "string[]", complete: values }
|
|
10
|
+
*
|
|
11
|
+
* `name→name`, `message→doc`, `default→default`, `positional→positional`;
|
|
12
|
+
* `required = default === undefined && !when`. A prompt's `validate` and a
|
|
13
|
+
* `select`'s choice set have NO ParamSpec slot: they are enforced by summon's
|
|
14
|
+
* `validateAnswers` inside `execute`, so a flag/MCP-arg run rejects the same bad
|
|
15
|
+
* input a wizard would. A `when` condition is honoured by `collectAnswers` at
|
|
16
|
+
* prompt time. `generate` is reached through the verb's `run` → `execute`.
|
|
17
|
+
*
|
|
18
|
+
* This adapter runs over STATIC prompt mirrors (see `create.verb.ts`), never the
|
|
19
|
+
* live generators — importing a generator runs a top-level `await loadTemplate`,
|
|
20
|
+
* which must stay behind `create`'s lazy dispatch (R9). A parity test loads the
|
|
21
|
+
* real generators and asserts the mirrors match.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import type { PromptDefinition } from "@canonical/summon-core";
|
|
25
|
+
import type { ParamSpec } from "../../kernel/spec/types.js";
|
|
26
|
+
|
|
27
|
+
/** A path-like text prompt gets file completion. */
|
|
28
|
+
const looksLikePath = (name: string): boolean => /(path|dir)$/i.test(name);
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Derive a declarative param `doc` from a generator prompt's `message`.
|
|
32
|
+
*
|
|
33
|
+
* A prompt `message` is a wizard QUESTION (`Include styles?`, `Package name:`),
|
|
34
|
+
* but a {@link ParamSpec.doc} is help text shown in CLI `--help` and the MCP
|
|
35
|
+
* arg schema, where every other param reads as a declarative statement. We
|
|
36
|
+
* DERIVE the doc rather than editing the mirrors' `message` — the generator
|
|
37
|
+
* parity test couples `message` to the live generators, so the question must
|
|
38
|
+
* stay verbatim for the interactive wizard while the flag/MCP doc reads well.
|
|
39
|
+
* Strip the trailing `?`/`:` and end with a period.
|
|
40
|
+
*/
|
|
41
|
+
export function declarativeDoc(message: string): string {
|
|
42
|
+
const trimmed = message
|
|
43
|
+
.trim()
|
|
44
|
+
.replace(/\s*[?:]+$/, "")
|
|
45
|
+
.trim();
|
|
46
|
+
if (trimmed === "") return trimmed;
|
|
47
|
+
return /[.!]$/.test(trimmed) ? trimmed : `${trimmed}.`;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Convert one generator prompt to a grammar param.
|
|
52
|
+
*
|
|
53
|
+
* @param prompt - The generator's prompt definition.
|
|
54
|
+
* @returns The equivalent {@link ParamSpec}.
|
|
55
|
+
*/
|
|
56
|
+
export function promptToParam(prompt: PromptDefinition): ParamSpec {
|
|
57
|
+
const required = prompt.default === undefined && !prompt.when;
|
|
58
|
+
const positional = prompt.positional === true;
|
|
59
|
+
|
|
60
|
+
switch (prompt.type) {
|
|
61
|
+
case "confirm":
|
|
62
|
+
return {
|
|
63
|
+
kind: "boolean",
|
|
64
|
+
name: prompt.name,
|
|
65
|
+
doc: declarativeDoc(prompt.message),
|
|
66
|
+
required,
|
|
67
|
+
positional,
|
|
68
|
+
...(prompt.default !== undefined
|
|
69
|
+
? { default: prompt.default as boolean }
|
|
70
|
+
: {}),
|
|
71
|
+
};
|
|
72
|
+
case "select":
|
|
73
|
+
return {
|
|
74
|
+
kind: "enum",
|
|
75
|
+
name: prompt.name,
|
|
76
|
+
doc: declarativeDoc(prompt.message),
|
|
77
|
+
values: (prompt.choices ?? []).map((choice) => choice.value),
|
|
78
|
+
required,
|
|
79
|
+
positional,
|
|
80
|
+
...(prompt.default !== undefined
|
|
81
|
+
? { default: String(prompt.default) }
|
|
82
|
+
: {}),
|
|
83
|
+
};
|
|
84
|
+
case "multiselect":
|
|
85
|
+
return {
|
|
86
|
+
kind: "string[]",
|
|
87
|
+
name: prompt.name,
|
|
88
|
+
doc: declarativeDoc(prompt.message),
|
|
89
|
+
required,
|
|
90
|
+
positional,
|
|
91
|
+
complete: { kind: "values" },
|
|
92
|
+
};
|
|
93
|
+
default:
|
|
94
|
+
return {
|
|
95
|
+
kind: "string",
|
|
96
|
+
name: prompt.name,
|
|
97
|
+
doc: declarativeDoc(prompt.message),
|
|
98
|
+
required,
|
|
99
|
+
positional,
|
|
100
|
+
...(prompt.default !== undefined ? { default: prompt.default } : {}),
|
|
101
|
+
...(looksLikePath(prompt.name) ? { complete: { kind: "files" } } : {}),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Map a generator's whole prompt list to grammar params, in order. */
|
|
107
|
+
export function generatorToParams(
|
|
108
|
+
prompts: readonly PromptDefinition[],
|
|
109
|
+
): ParamSpec[] {
|
|
110
|
+
return prompts.map(promptToParam);
|
|
111
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `create` capability barrel — component / package / application scaffolds.
|
|
3
|
+
*
|
|
4
|
+
* Importing this pulls only the verb specs (static params + formatters); every
|
|
5
|
+
* generator load and the summon-core runtime stay behind each verb's lazy
|
|
6
|
+
* `run` dispatch, so the command tree builds without touching summon-core.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { asVerb } from "../../kernel/spec/asVerb.js";
|
|
10
|
+
import type { CapabilityModule } from "../../kernel/spec/types.js";
|
|
11
|
+
import {
|
|
12
|
+
createApplicationVerb,
|
|
13
|
+
createComponentVerb,
|
|
14
|
+
createPackageVerb,
|
|
15
|
+
} from "./create.verb.js";
|
|
16
|
+
|
|
17
|
+
/** The `create` capability module. */
|
|
18
|
+
export const createModule: CapabilityModule = {
|
|
19
|
+
name: "create",
|
|
20
|
+
verbs: [
|
|
21
|
+
asVerb(createComponentVerb),
|
|
22
|
+
asVerb(createPackageVerb),
|
|
23
|
+
asVerb(createApplicationVerb),
|
|
24
|
+
],
|
|
25
|
+
};
|