@canonical/pragma-cli 0.30.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 -40
- 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 -68
- package/src/index.ts +27 -134
- 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 +17 -5
- package/src/types.ts +42 -0
- package/README.md +0 -429
- 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 -18
- package/src/completions/handleQuery.test.ts +0 -93
- package/src/completions/handleQuery.ts +0 -30
- package/src/completions/index.ts +0 -14
- package/src/completions/queryCompletions.test.ts +0 -100
- package/src/completions/queryCompletions.ts +0 -61
- package/src/completions/querySocket.test.ts +0 -70
- package/src/completions/querySocket.ts +0 -44
- 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 -215
- package/src/config/readConfig.test.ts +0 -395
- package/src/config/readConfig.ts +0 -21
- package/src/config/readConfigLayers.test.ts +0 -107
- package/src/config/readConfigLayers.ts +0 -115
- 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 -121
- 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 -55
- 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 -41
- 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 -254
- package/src/domains/block/types.ts +0 -30
- package/src/domains/config/commands/channel.test.ts +0 -112
- package/src/domains/config/commands/channel.ts +0 -86
- package/src/domains/config/commands/configScope.ts +0 -46
- package/src/domains/config/commands/framework.test.ts +0 -105
- package/src/domains/config/commands/framework.ts +0 -91
- 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 -95
- package/src/domains/config/commands/tier.ts +0 -84
- 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 -56
- package/src/domains/config/operations/validateTier.ts +0 -35
- 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/commands/component.test.ts +0 -166
- package/src/domains/create/commands/component.ts +0 -123
- package/src/domains/create/commands/index.ts +0 -3
- package/src/domains/create/commands/package.test.ts +0 -35
- package/src/domains/create/commands/package.ts +0 -21
- package/src/domains/create/generators.ts +0 -8
- package/src/domains/create/index.ts +0 -15
- package/src/domains/create/mcp/index.ts +0 -2
- package/src/domains/create/mcp/specs.ts +0 -168
- 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 -117
- package/src/domains/doctor/formatters/doctor.ts +0 -84
- 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 -130
- 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 -58
- 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 -305
- 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 -20
- 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 -92
- 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.ts +0 -37
- 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 -40
- package/src/domains/graphql/commands/serve.ts +0 -131
- 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 -56
- package/src/domains/graphql/helpers/resolveSourceFiles.ts +0 -45
- 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/index.ts +0 -12
- 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 -133
- package/src/domains/info/formatters/upgrade.ts +0 -68
- 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/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 -5
- package/src/domains/info/types.test-d.ts +0 -35
- package/src/domains/info/types.ts +0 -54
- package/src/domains/llm/capabilities.test.ts +0 -91
- package/src/domains/llm/commands/capabilities.ts +0 -28
- package/src/domains/llm/commands/index.ts +0 -4
- package/src/domains/llm/commands/llm.ts +0 -37
- package/src/domains/llm/data/commandReference.ts +0 -97
- package/src/domains/llm/data/decisionTrees.ts +0 -50
- package/src/domains/llm/data/index.ts +0 -6
- package/src/domains/llm/data/toolCatalog.ts +0 -190
- 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 -53
- package/src/domains/llm/index.ts +0 -9
- package/src/domains/llm/llmCommand.test.ts +0 -93
- package/src/domains/llm/mcp/index.ts +0 -2
- package/src/domains/llm/mcp/specs.ts +0 -94
- package/src/domains/llm/operations/collectContext.ts +0 -47
- 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 -53
- 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 -67
- 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 -77
- 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 -82
- package/src/domains/ontology/commands/list.ts +0 -11
- package/src/domains/ontology/commands/show.test.ts +0 -103
- package/src/domains/ontology/commands/show.ts +0 -14
- package/src/domains/ontology/formatters/index.ts +0 -4
- package/src/domains/ontology/formatters/list.ts +0 -39
- package/src/domains/ontology/formatters/show.ts +0 -105
- package/src/domains/ontology/helpers/findNamespace.ts +0 -23
- package/src/domains/ontology/helpers/index.ts +0 -7
- package/src/domains/ontology/helpers/queryClasses.ts +0 -50
- package/src/domains/ontology/helpers/queryProperties.ts +0 -57
- 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 -45
- package/src/domains/ontology/operations/listOntologies.ts +0 -101
- package/src/domains/ontology/operations/showOntology.test.ts +0 -65
- package/src/domains/ontology/operations/showOntology.ts +0 -41
- package/src/domains/ontology/operations/showOntologyRaw.test.ts +0 -39
- 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 -108
- 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 -181
- 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 -6
- package/src/domains/setup/commands/lsp.ts +0 -49
- package/src/domains/setup/commands/mcp.ts +0 -119
- 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 -33
- 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 -29
- package/src/domains/setup/operations/setupLsp.ts +0 -17
- 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.ts +0 -135
- 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 -109
- 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 -82
- package/src/domains/shared/loaders/bundledLoader.test.ts +0 -248
- package/src/domains/shared/loaders/bundledLoader.ts +0 -206
- package/src/domains/shared/loaders/gitLoader.ts +0 -31
- package/src/domains/shared/loaders/index.ts +0 -9
- package/src/domains/shared/loaders/localLoader.ts +0 -87
- package/src/domains/shared/loaders/readPackageDir.ts +0 -147
- 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 -120
- package/src/domains/shared/lookupMany.ts +0 -85
- package/src/domains/shared/mergeAndParseRefs.test.ts +0 -89
- package/src/domains/shared/mergeAndParseRefs.ts +0 -44
- package/src/domains/shared/namespaces.ts +0 -18
- package/src/domains/shared/packages.ts +0 -20
- package/src/domains/shared/pickRandom.ts +0 -22
- package/src/domains/shared/prefixes.ts +0 -37
- 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/runtime.ts +0 -61
- package/src/domains/shared/sampleFormatters.ts +0 -47
- package/src/domains/shared/semanticPackage.ts +0 -112
- package/src/domains/shared/stories/compileLookupCommand.test.ts +0 -145
- package/src/domains/shared/stories/compileLookupCommand.ts +0 -100
- 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 -102
- package/src/domains/shared/stories/pack/applyPackFilters.ts +0 -76
- package/src/domains/shared/stories/pack/buildLookupQuery.test.ts +0 -51
- package/src/domains/shared/stories/pack/buildLookupQuery.ts +0 -80
- package/src/domains/shared/stories/pack/collectPackStories.test.ts +0 -108
- package/src/domains/shared/stories/pack/collectPackStories.ts +0 -76
- package/src/domains/shared/stories/pack/compilePackCommands.ts +0 -40
- package/src/domains/shared/stories/pack/compilePackStories.test.ts +0 -146
- package/src/domains/shared/stories/pack/compilePackStories.ts +0 -253
- package/src/domains/shared/stories/pack/compilePackToolSpecs.ts +0 -43
- package/src/domains/shared/stories/pack/index.ts +0 -28
- package/src/domains/shared/stories/pack/runSelectQuery.ts +0 -31
- package/src/domains/shared/stories/pack/standardParity.test.ts +0 -308
- package/src/domains/shared/stories/pack/types.ts +0 -104
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.test.ts +0 -240
- package/src/domains/shared/stories/pack/validateStoryPackDefinition.ts +0 -408
- 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 -171
- 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 -50
- package/src/domains/shared/types/modifier.ts +0 -22
- package/src/domains/shared/types/ontology.ts +0 -50
- 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 -64
- 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/standard/commands/categories.test.ts +0 -70
- package/src/domains/standard/commands/categories.ts +0 -48
- package/src/domains/standard/commands/index.ts +0 -6
- package/src/domains/standard/commands/list.test.ts +0 -105
- package/src/domains/standard/commands/list.ts +0 -11
- package/src/domains/standard/commands/lookup.test.ts +0 -135
- package/src/domains/standard/commands/lookup.ts +0 -14
- package/src/domains/standard/commands/sample.ts +0 -57
- package/src/domains/standard/formatters/categories.test.ts +0 -44
- package/src/domains/standard/formatters/categories.ts +0 -38
- package/src/domains/standard/formatters/index.ts +0 -10
- package/src/domains/standard/formatters/list.test.ts +0 -169
- package/src/domains/standard/formatters/list.ts +0 -184
- package/src/domains/standard/formatters/lookup.test.ts +0 -95
- package/src/domains/standard/formatters/lookup.ts +0 -101
- package/src/domains/standard/formatters/sample.ts +0 -15
- package/src/domains/standard/formatters/types.ts +0 -31
- package/src/domains/standard/index.ts +0 -40
- package/src/domains/standard/mcp/index.ts +0 -2
- package/src/domains/standard/mcp/specs.ts +0 -89
- package/src/domains/standard/operations/categories.test.ts +0 -61
- package/src/domains/standard/operations/categories.ts +0 -38
- package/src/domains/standard/operations/index.ts +0 -6
- package/src/domains/standard/operations/list.test.ts +0 -75
- package/src/domains/standard/operations/list.ts +0 -64
- package/src/domains/standard/operations/lookup.test.ts +0 -58
- package/src/domains/standard/operations/lookup.ts +0 -151
- package/src/domains/standard/operations/sample.ts +0 -35
- package/src/domains/standard/orchestration/buildStandardFilters.ts +0 -11
- package/src/domains/standard/orchestration/index.ts +0 -4
- package/src/domains/standard/orchestration/resolveStandardList.ts +0 -45
- package/src/domains/standard/orchestration/resolveStandardLookup.ts +0 -33
- package/src/domains/standard/orchestration/standardEmptyError.test.ts +0 -33
- package/src/domains/standard/orchestration/standardEmptyError.ts +0 -29
- package/src/domains/standard/standardConfig.ts +0 -42
- package/src/domains/standard/stories.test.ts +0 -24
- package/src/domains/standard/stories.ts +0 -151
- package/src/domains/standard/types.ts +0 -15
- package/src/domains/tier/commands/index.ts +0 -3
- package/src/domains/tier/commands/list.test.ts +0 -67
- package/src/domains/tier/commands/list.ts +0 -9
- package/src/domains/tier/formatters/index.ts +0 -3
- package/src/domains/tier/formatters/list.test.ts +0 -33
- package/src/domains/tier/formatters/list.ts +0 -45
- package/src/domains/tier/index.ts +0 -17
- package/src/domains/tier/mcp/index.ts +0 -2
- package/src/domains/tier/mcp/specs.ts +0 -12
- package/src/domains/tier/operations/index.ts +0 -3
- package/src/domains/tier/operations/list.test.ts +0 -32
- package/src/domains/tier/operations/list.ts +0 -33
- package/src/domains/tier/stories.test.ts +0 -22
- package/src/domains/tier/stories.ts +0 -52
- 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 -125
- package/src/domains/token/commands/lookup.ts +0 -95
- package/src/domains/token/commands/sample.ts +0 -53
- 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 -40
- package/src/domains/token/mcp/index.ts +0 -2
- package/src/domains/token/mcp/specs.ts +0 -195
- 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/sessions.ts +0 -32
- package/src/domains/trace/commands/show.ts +0 -145
- 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 -66
- package/src/mcp/tools/registerFromSpec.ts +0 -97
- package/src/mcp/tools/registerTools.test.ts +0 -1201
- 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 -37
- package/src/pipeline/collectCommands.ts +0 -60
- package/src/pipeline/constants.ts +0 -14
- package/src/pipeline/createProgram.test.ts +0 -112
- package/src/pipeline/createProgram.ts +0 -89
- 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 -92
- package/src/pipeline/parseGlobalFlags.ts +0 -46
- package/src/pipeline/renderError.test.ts +0 -151
- package/src/pipeline/renderError.ts +0 -129
- package/src/pipeline/resolveCommandKind.test.ts +0 -68
- package/src/pipeline/resolveCommandKind.ts +0 -78
- package/src/pipeline/runCli.orchestration.test.ts +0 -419
- package/src/pipeline/runCli.test.ts +0 -70
- package/src/pipeline/runCli.ts +0 -268
- package/src/pipeline/types.ts +0 -17
- package/src/testing/cli.ts +0 -43
- package/src/testing/createTestMcpClient.ts +0 -68
- package/src/testing/dsFixtures.ts +0 -506
- 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 -25
- 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 -198
- package/src/testing/integration/cross-binary-byte-equality.test.ts +0 -129
- package/src/testing/integration/edge-cases.test.ts +0 -263
- package/src/testing/integration/executor-execution.test.ts +0 -101
- package/src/testing/integration/executor-golden.test.ts +0 -145
- package/src/testing/integration/mcp-surface.test.ts +0 -580
- package/src/testing/integration/parity.test.ts +0 -547
- package/src/testing/regression/0001-skill-discovery-granularity.test.ts +0 -71
- package/src/testing/standardParityFixtures.ts +0 -92
- 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,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate the ONE GraphQL document a `source: "graphql"` pack lookup executes
|
|
3
|
+
* after its SPARQL name→URI resolve.
|
|
4
|
+
*
|
|
5
|
+
* The compiler — not the pack author — writes the GraphQL: pack declarations
|
|
6
|
+
* name RDF properties, and this module maps each onto the OWL-derived schema
|
|
7
|
+
* using the same naming rules the ke-graphql compiler applied (strip `has`/`is`,
|
|
8
|
+
* pluralize for multi-valued fields — see {@link ./nameMap}).
|
|
9
|
+
*
|
|
10
|
+
* Missing-name semantics mirror the SPARQL path's OPTIONAL clauses: a DERIVED
|
|
11
|
+
* name that maps onto no schema field anywhere simply drops out of the document
|
|
12
|
+
* (ontology drift degrades to emptiness, not failure). An EXPLICIT `graphqlField`
|
|
13
|
+
* override that names no field is a fail-fast error, as are cardinality
|
|
14
|
+
* mismatches. A property on only some concrete classes under an interface
|
|
15
|
+
* fragment resolves through subtype-scoped `... on <Subtype>` fragments.
|
|
16
|
+
*
|
|
17
|
+
* Injection safety: the document text is composed ONLY from validated pack terms
|
|
18
|
+
* and names read from the compiled schema; the entity IRI travels via
|
|
19
|
+
* `variableValues.uri`, never string interpolation.
|
|
20
|
+
*
|
|
21
|
+
* Ported from #856; retargeted onto graphql-js `GraphQLSchema` (referenced as an
|
|
22
|
+
* inline type — this module has no runtime `graphql`/`ke-graphql` import, so it
|
|
23
|
+
* stays off the storeless fast path).
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { PragmaError } from "../../error/PragmaError.js";
|
|
27
|
+
import { activeExpands, activeFields } from "./../sparql/buildLookupQuery.js";
|
|
28
|
+
import type {
|
|
29
|
+
PackExpand,
|
|
30
|
+
PackField,
|
|
31
|
+
PackLookup,
|
|
32
|
+
PackNestedExpand,
|
|
33
|
+
} from "../types.js";
|
|
34
|
+
import { isNestedExpand } from "../types.js";
|
|
35
|
+
import { MAX_PAGE_SIZE, pluralize, stripVerbPrefix } from "./nameMap.js";
|
|
36
|
+
|
|
37
|
+
type GraphQLSchema = import("graphql").GraphQLSchema;
|
|
38
|
+
|
|
39
|
+
/** Local name of an IRI (`…#Thing`/`…/Thing` → `Thing`). */
|
|
40
|
+
function extractLocalName(uri: string): string {
|
|
41
|
+
const hash = uri.lastIndexOf("#");
|
|
42
|
+
if (hash !== -1) return uri.slice(hash + 1);
|
|
43
|
+
const slash = uri.lastIndexOf("/");
|
|
44
|
+
if (slash !== -1) return uri.slice(slash + 1);
|
|
45
|
+
return uri;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** How one selected key unwraps back into the flat pack entity shape. */
|
|
49
|
+
export type FieldProjection =
|
|
50
|
+
| { readonly kind: "scalar"; readonly name: string }
|
|
51
|
+
| { readonly kind: "entity"; readonly name: string }
|
|
52
|
+
| { readonly kind: "iri"; readonly name: string }
|
|
53
|
+
| {
|
|
54
|
+
readonly kind: "collection";
|
|
55
|
+
readonly name: string;
|
|
56
|
+
readonly connection: boolean;
|
|
57
|
+
readonly children: readonly FieldProjection[];
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/** A generated lookup document with its unwrap plan. */
|
|
61
|
+
export interface LookupDocumentPlan {
|
|
62
|
+
/** GraphQL document text, `$uri: ID!` as its only variable. */
|
|
63
|
+
readonly source: string;
|
|
64
|
+
/** One projection per selected key under the fragment. */
|
|
65
|
+
readonly projections: readonly FieldProjection[];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** The subset of graphql-js type structure the generator inspects. */
|
|
69
|
+
interface CompositeTypeLike {
|
|
70
|
+
readonly name: string;
|
|
71
|
+
getFields(): Record<string, { readonly type: unknown }>;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Does a schema type expose fields (object or interface)? */
|
|
75
|
+
function isComposite(type: unknown): type is CompositeTypeLike {
|
|
76
|
+
return (
|
|
77
|
+
typeof type === "object" &&
|
|
78
|
+
type !== null &&
|
|
79
|
+
"getFields" in type &&
|
|
80
|
+
typeof (type as CompositeTypeLike).getFields === "function"
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Unwrap NonNull/List wrappers to the named type underneath. */
|
|
85
|
+
function namedType(type: unknown): unknown {
|
|
86
|
+
let current = type;
|
|
87
|
+
while (
|
|
88
|
+
typeof current === "object" &&
|
|
89
|
+
current !== null &&
|
|
90
|
+
"ofType" in current &&
|
|
91
|
+
(current as { ofType?: unknown }).ofType
|
|
92
|
+
) {
|
|
93
|
+
current = (current as { ofType: unknown }).ofType;
|
|
94
|
+
}
|
|
95
|
+
return current;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Is the field type a GraphQL list? Detected from the type's string form. */
|
|
99
|
+
function isListType(type: unknown): boolean {
|
|
100
|
+
return String(type).includes("[");
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Is the named type a generated Relay connection envelope? */
|
|
104
|
+
function isConnection(type: unknown): type is CompositeTypeLike {
|
|
105
|
+
return (
|
|
106
|
+
isComposite(type) &&
|
|
107
|
+
type.name.endsWith("Connection") &&
|
|
108
|
+
"edges" in type.getFields()
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Local name of a validated pack term (`ds:Component` → `Component`). */
|
|
113
|
+
function termLocalName(term: string): string {
|
|
114
|
+
if (term.includes("://")) return extractLocalName(term);
|
|
115
|
+
const colon = term.indexOf(":");
|
|
116
|
+
return colon === -1 ? term : term.slice(colon + 1);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function buildDocumentError(source: string, message: string): PragmaError {
|
|
120
|
+
return PragmaError.configError(`Invalid story in ${source}: ${message}`);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Resolve a pack term to the GraphQL field it maps to on a container type. With
|
|
125
|
+
* an explicit `graphqlField` the name is only checked for existence (a miss
|
|
126
|
+
* throws). Otherwise the derivation applies; a derived miss returns `undefined`.
|
|
127
|
+
*/
|
|
128
|
+
function resolveGraphqlField(
|
|
129
|
+
container: CompositeTypeLike,
|
|
130
|
+
term: string,
|
|
131
|
+
override: string | undefined,
|
|
132
|
+
preferPlural: boolean,
|
|
133
|
+
where: string,
|
|
134
|
+
source: string,
|
|
135
|
+
): { fieldName: string; type: unknown } | undefined {
|
|
136
|
+
const fields = container.getFields();
|
|
137
|
+
if (override) {
|
|
138
|
+
const match = fields[override];
|
|
139
|
+
if (!match) {
|
|
140
|
+
throw buildDocumentError(
|
|
141
|
+
source,
|
|
142
|
+
`"${where}.graphqlField" "${override}" is not a field of GraphQL type "${container.name}".`,
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
return { fieldName: override, type: match.type };
|
|
146
|
+
}
|
|
147
|
+
if (term.includes("/") && !term.includes("://")) {
|
|
148
|
+
throw buildDocumentError(
|
|
149
|
+
source,
|
|
150
|
+
`"${where}" uses a property path ("${term}"), which the GraphQL source cannot express — set "graphqlField" or use source "sparql".`,
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
const base = stripVerbPrefix(termLocalName(term));
|
|
154
|
+
const forms = preferPlural
|
|
155
|
+
? [pluralize(base), base]
|
|
156
|
+
: [base, pluralize(base)];
|
|
157
|
+
for (const candidate of [...new Set(forms)]) {
|
|
158
|
+
const match = fields[candidate];
|
|
159
|
+
if (match) return { fieldName: candidate, type: match.type };
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** A selection line plus how to unwrap its key. */
|
|
165
|
+
interface Selection {
|
|
166
|
+
readonly text: string;
|
|
167
|
+
readonly projection: FieldProjection;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Alias a selection only when the output name differs from the field. */
|
|
171
|
+
function aliased(name: string, fieldName: string): string {
|
|
172
|
+
return name === fieldName ? name : `${name}: ${fieldName}`;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Build the selection for one flat value (field or section): scalars select
|
|
177
|
+
* bare, singular entity references select `{ uri }`. Multi-valued fields are
|
|
178
|
+
* rejected. `undefined` when the derived name maps onto no field.
|
|
179
|
+
*/
|
|
180
|
+
function buildValueSelection(
|
|
181
|
+
container: CompositeTypeLike,
|
|
182
|
+
value: { name: string; property: string; graphqlField?: string },
|
|
183
|
+
where: string,
|
|
184
|
+
source: string,
|
|
185
|
+
): Selection | undefined {
|
|
186
|
+
const resolved = resolveGraphqlField(
|
|
187
|
+
container,
|
|
188
|
+
value.property,
|
|
189
|
+
value.graphqlField,
|
|
190
|
+
false,
|
|
191
|
+
where,
|
|
192
|
+
source,
|
|
193
|
+
);
|
|
194
|
+
if (!resolved) return undefined;
|
|
195
|
+
const { fieldName, type } = resolved;
|
|
196
|
+
const named = namedType(type);
|
|
197
|
+
if (isConnection(named) || isListType(type)) {
|
|
198
|
+
throw buildDocumentError(
|
|
199
|
+
source,
|
|
200
|
+
`"${where}" property "${value.property}" resolves to multi-valued GraphQL field "${container.name}.${fieldName}" — declare it as an expand.`,
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
if (isComposite(named)) {
|
|
204
|
+
return {
|
|
205
|
+
text: `${aliased(value.name, fieldName)} { uri }`,
|
|
206
|
+
projection: { kind: "entity", name: value.name },
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
if (fieldName === "uri") {
|
|
210
|
+
return {
|
|
211
|
+
text: aliased(value.name, fieldName),
|
|
212
|
+
projection: { kind: "iri", name: value.name },
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
text: aliased(value.name, fieldName),
|
|
217
|
+
projection: { kind: "scalar", name: value.name },
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Build the selection for a multi-valued projection (an expand or nested
|
|
223
|
+
* expand): Relay connections select through `edges { node }`; embedded lists
|
|
224
|
+
* select children directly. `undefined` when the relation maps onto no field or
|
|
225
|
+
* every child selection was omitted.
|
|
226
|
+
*/
|
|
227
|
+
function buildCollectionSelection(
|
|
228
|
+
container: CompositeTypeLike,
|
|
229
|
+
expand: PackExpand | PackNestedExpand,
|
|
230
|
+
where: string,
|
|
231
|
+
source: string,
|
|
232
|
+
): Selection | undefined {
|
|
233
|
+
const resolved = resolveGraphqlField(
|
|
234
|
+
container,
|
|
235
|
+
expand.relation,
|
|
236
|
+
expand.graphqlField,
|
|
237
|
+
true,
|
|
238
|
+
where,
|
|
239
|
+
source,
|
|
240
|
+
);
|
|
241
|
+
if (!resolved) return undefined;
|
|
242
|
+
const { fieldName, type } = resolved;
|
|
243
|
+
const named = namedType(type);
|
|
244
|
+
const connection = isConnection(named);
|
|
245
|
+
if (!connection && !isListType(type)) {
|
|
246
|
+
throw buildDocumentError(
|
|
247
|
+
source,
|
|
248
|
+
`"${where}" relation "${expand.relation}" resolves to singular GraphQL field "${container.name}.${fieldName}" — declare it as a field.`,
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
const childType = connection
|
|
252
|
+
? namedType(named.getFields().edges?.type)
|
|
253
|
+
: named;
|
|
254
|
+
const nodeType =
|
|
255
|
+
connection && isComposite(childType)
|
|
256
|
+
? namedType(childType.getFields().node?.type)
|
|
257
|
+
: childType;
|
|
258
|
+
if (!isComposite(nodeType)) {
|
|
259
|
+
throw buildDocumentError(
|
|
260
|
+
source,
|
|
261
|
+
`"${where}" relation "${expand.relation}" resolves to a list of scalars on "${container.name}" — declare it as a field or fix the relation.`,
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const children: Selection[] = expand.select
|
|
266
|
+
.map((entry, index) => {
|
|
267
|
+
const childWhere = `${where}.select[${index}]`;
|
|
268
|
+
if (isNestedExpand(entry)) {
|
|
269
|
+
return buildCollectionSelection(nodeType, entry, childWhere, source);
|
|
270
|
+
}
|
|
271
|
+
return buildValueSelection(nodeType, entry, childWhere, source);
|
|
272
|
+
})
|
|
273
|
+
.filter((child): child is Selection => child !== undefined);
|
|
274
|
+
if (children.length === 0) return undefined;
|
|
275
|
+
const childText = children.map((child) => child.text).join(" ");
|
|
276
|
+
const body = connection
|
|
277
|
+
? `(first: ${MAX_PAGE_SIZE}) { edges { node { ${childText} } } }`
|
|
278
|
+
: ` { ${childText} }`;
|
|
279
|
+
return {
|
|
280
|
+
text: `${aliased(expand.name, fieldName)}${body}`,
|
|
281
|
+
projection: {
|
|
282
|
+
kind: "collection",
|
|
283
|
+
name: expand.name,
|
|
284
|
+
connection,
|
|
285
|
+
children: children.map((child) => child.projection),
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** The concrete object types under an interface fragment (empty for object types). */
|
|
291
|
+
function possibleSubtypes(
|
|
292
|
+
schema: GraphQLSchema,
|
|
293
|
+
fragmentType: CompositeTypeLike,
|
|
294
|
+
): CompositeTypeLike[] {
|
|
295
|
+
const lookup = (
|
|
296
|
+
schema as unknown as {
|
|
297
|
+
getPossibleTypes(type: unknown): readonly unknown[];
|
|
298
|
+
}
|
|
299
|
+
).getPossibleTypes;
|
|
300
|
+
return lookup.call(schema, fragmentType).filter(isComposite);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Build one top-level selection, falling back to subtype scoping: a term that
|
|
305
|
+
* does not resolve on the fragment type is tried on each concrete class under it
|
|
306
|
+
* and selected inside `... on <Subtype>` fragments. `undefined` when the term
|
|
307
|
+
* resolves nowhere (omitted, mirroring an unbound OPTIONAL).
|
|
308
|
+
*/
|
|
309
|
+
function buildScopedSelection(
|
|
310
|
+
schema: GraphQLSchema,
|
|
311
|
+
fragmentType: CompositeTypeLike,
|
|
312
|
+
build: (container: CompositeTypeLike) => Selection | undefined,
|
|
313
|
+
): Selection | undefined {
|
|
314
|
+
const direct = build(fragmentType);
|
|
315
|
+
if (direct) return direct;
|
|
316
|
+
const scoped = possibleSubtypes(schema, fragmentType)
|
|
317
|
+
.map((subtype) => {
|
|
318
|
+
const selection = build(subtype);
|
|
319
|
+
return selection === undefined
|
|
320
|
+
? undefined
|
|
321
|
+
: {
|
|
322
|
+
...selection,
|
|
323
|
+
text: `... on ${subtype.name} { ${selection.text} }`,
|
|
324
|
+
};
|
|
325
|
+
})
|
|
326
|
+
.filter((selection): selection is Selection => selection !== undefined);
|
|
327
|
+
if (scoped.length === 0) return undefined;
|
|
328
|
+
return {
|
|
329
|
+
text: scoped.map((selection) => selection.text).join(" "),
|
|
330
|
+
projection: (scoped[0] as Selection).projection,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Generate the lookup document for a pack lookup at a canonical level.
|
|
336
|
+
*
|
|
337
|
+
* @param lookup - A validated graphql-sourced lookup declaration.
|
|
338
|
+
* @param schema - The runtime's compiled OWL-derived schema.
|
|
339
|
+
* @param source - Pack source, for error attribution.
|
|
340
|
+
* @param level - Active canonical level (undefined: everything included).
|
|
341
|
+
* @returns The document text and its unwrap plan.
|
|
342
|
+
* @throws PragmaError CONFIG_ERROR when a declaration does not map onto the schema.
|
|
343
|
+
*/
|
|
344
|
+
export function buildLookupDocument(
|
|
345
|
+
lookup: PackLookup,
|
|
346
|
+
schema: GraphQLSchema,
|
|
347
|
+
source: string,
|
|
348
|
+
level?: string,
|
|
349
|
+
): LookupDocumentPlan {
|
|
350
|
+
const typeName = lookup.graphqlType ?? termLocalName(lookup.type ?? "");
|
|
351
|
+
const fragmentType = schema.getType(typeName);
|
|
352
|
+
if (!isComposite(fragmentType)) {
|
|
353
|
+
throw buildDocumentError(
|
|
354
|
+
source,
|
|
355
|
+
`lookup.graphqlType "${typeName}" is not an object or interface type in the compiled GraphQL schema.`,
|
|
356
|
+
);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
const selections: Selection[] = [
|
|
360
|
+
...activeFields(lookup, level).map((field: PackField, index) =>
|
|
361
|
+
buildScopedSelection(schema, fragmentType, (container) =>
|
|
362
|
+
buildValueSelection(
|
|
363
|
+
container,
|
|
364
|
+
field,
|
|
365
|
+
`lookup.fields/sections[${index}]`,
|
|
366
|
+
source,
|
|
367
|
+
),
|
|
368
|
+
),
|
|
369
|
+
),
|
|
370
|
+
...activeExpands(lookup, level).map((expand, index) =>
|
|
371
|
+
buildScopedSelection(schema, fragmentType, (container) =>
|
|
372
|
+
buildCollectionSelection(
|
|
373
|
+
container,
|
|
374
|
+
expand,
|
|
375
|
+
`lookup.expand[${index}]`,
|
|
376
|
+
source,
|
|
377
|
+
),
|
|
378
|
+
),
|
|
379
|
+
),
|
|
380
|
+
].filter((selection): selection is Selection => selection !== undefined);
|
|
381
|
+
|
|
382
|
+
const body = selections.map((selection) => ` ${selection.text}`);
|
|
383
|
+
const text = [
|
|
384
|
+
"query PackLookup($uri: ID!) {",
|
|
385
|
+
" node(id: $uri) {",
|
|
386
|
+
` ... on ${fragmentType.name} {`,
|
|
387
|
+
...(body.length > 0 ? body : [" uri"]),
|
|
388
|
+
" }",
|
|
389
|
+
" }",
|
|
390
|
+
"}",
|
|
391
|
+
].join("\n");
|
|
392
|
+
|
|
393
|
+
return {
|
|
394
|
+
source: text,
|
|
395
|
+
projections: selections.map((selection) => selection.projection),
|
|
396
|
+
};
|
|
397
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execute a `source: "graphql"` pack lookup's generated document and unwrap the
|
|
3
|
+
* result to the flat pack entity shape.
|
|
4
|
+
*
|
|
5
|
+
* Retargeted onto the PR2 facade: the compiled schema comes from the booted
|
|
6
|
+
* `StoreSession` (`rt.store.get()`), and the document runs through
|
|
7
|
+
* `rt.query.graphql` (ke-graphql's in-process `executeLocal` — no server, no
|
|
8
|
+
* HTTP). Relay envelopes are unwrapped here (connections → arrays, entity
|
|
9
|
+
* references → IRI strings, prefixed URIs → full IRIs), so the resolved entity
|
|
10
|
+
* is shape-identical to the SPARQL path.
|
|
11
|
+
*
|
|
12
|
+
* Injection safety: the resolved entity IRI enters execution EXCLUSIVELY via
|
|
13
|
+
* `variableValues.uri` — never interpolated into the document text, which is
|
|
14
|
+
* composed only from validated pack terms and compiled schema names.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { PragmaError } from "../../error/PragmaError.js";
|
|
18
|
+
import type { PragmaRuntime } from "../../runtime/types.js";
|
|
19
|
+
import type { PackChildRow, PackEntity, PackLookup } from "../types.js";
|
|
20
|
+
import {
|
|
21
|
+
buildLookupDocument,
|
|
22
|
+
type FieldProjection,
|
|
23
|
+
} from "./buildLookupDocument.js";
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @param rt - The runtime (lazy store + query facade).
|
|
27
|
+
* @param lookup - The validated lookup declaration.
|
|
28
|
+
* @param entityUri - IRI resolved by the SPARQL name→URI query (store output).
|
|
29
|
+
* @param entityName - The entity's canonical stored name.
|
|
30
|
+
* @param source - Pack source, for error attribution.
|
|
31
|
+
* @param prefixes - The runtime's merged prefix map (prefixed→full expansion).
|
|
32
|
+
* @param level - Active canonical level (gates fields/expands at fetch).
|
|
33
|
+
* @returns The unwrapped pack entity.
|
|
34
|
+
* @throws PragmaError STORE_UNAVAILABLE when execution reports errors,
|
|
35
|
+
* ENTITY_NOT_FOUND when a resolved IRI has no typed node in the schema.
|
|
36
|
+
* @note Impure — reads the compiled schema and queries the store.
|
|
37
|
+
*/
|
|
38
|
+
export async function fetchGraphqlLookup(
|
|
39
|
+
rt: Pick<PragmaRuntime, "store" | "query">,
|
|
40
|
+
lookup: PackLookup,
|
|
41
|
+
entityUri: string,
|
|
42
|
+
entityName: string,
|
|
43
|
+
source: string,
|
|
44
|
+
prefixes: Readonly<Record<string, string>>,
|
|
45
|
+
level?: string,
|
|
46
|
+
): Promise<PackEntity> {
|
|
47
|
+
const session = await rt.store.get();
|
|
48
|
+
const plan = buildLookupDocument(lookup, session.schema, source, level);
|
|
49
|
+
|
|
50
|
+
const result = await rt.query.graphql(plan.source, { uri: entityUri });
|
|
51
|
+
|
|
52
|
+
if (result.errors && result.errors.length > 0) {
|
|
53
|
+
const messages = result.errors
|
|
54
|
+
.slice(0, 3)
|
|
55
|
+
.map((error) => error.message)
|
|
56
|
+
.join("; ");
|
|
57
|
+
throw PragmaError.storeUnavailable(`GraphQL lookup failed: ${messages}`, {
|
|
58
|
+
recovery: {
|
|
59
|
+
message: "Check the loaded ontology and namespaces.",
|
|
60
|
+
// `graph inspect` needs a <uri>; `ontology list` is runnable as-is.
|
|
61
|
+
cli: "pragma ontology list",
|
|
62
|
+
mcp: { tool: "ontology_list" },
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const node = (result.data as { node?: unknown } | null | undefined)?.node;
|
|
68
|
+
if (node === null || node === undefined || typeof node !== "object") {
|
|
69
|
+
// The name→URI resolve DID find this IRI, so the store is available — the
|
|
70
|
+
// entity simply has no typed node (its rdf:type is missing from the loaded
|
|
71
|
+
// ontology). That is a runtime not-found, not an unavailable store (exit 3).
|
|
72
|
+
throw new PragmaError({
|
|
73
|
+
code: "ENTITY_NOT_FOUND",
|
|
74
|
+
message: `Could not resolve <${entityUri}> — its rdf:type may be missing from the ontology.`,
|
|
75
|
+
recovery: {
|
|
76
|
+
message: "Inspect the entity's triples to check its rdf:type.",
|
|
77
|
+
cli: `pragma graph inspect ${entityUri}`,
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const entity: PackEntity = { uri: entityUri, name: entityName };
|
|
83
|
+
const record = node as Record<string, unknown>;
|
|
84
|
+
for (const projection of plan.projections) {
|
|
85
|
+
const value = unwrapProjection(
|
|
86
|
+
record[projection.name],
|
|
87
|
+
projection,
|
|
88
|
+
prefixes,
|
|
89
|
+
);
|
|
90
|
+
if (value !== undefined) entity[projection.name] = value;
|
|
91
|
+
}
|
|
92
|
+
return entity;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Unwrap one projected key to the flat pack shape (absent → omitted). */
|
|
96
|
+
function unwrapProjection(
|
|
97
|
+
value: unknown,
|
|
98
|
+
projection: FieldProjection,
|
|
99
|
+
prefixes: Readonly<Record<string, string>>,
|
|
100
|
+
): string | readonly PackChildRow[] | undefined {
|
|
101
|
+
switch (projection.kind) {
|
|
102
|
+
case "scalar":
|
|
103
|
+
return value === null || value === undefined ? undefined : String(value);
|
|
104
|
+
case "iri":
|
|
105
|
+
return value === null || value === undefined
|
|
106
|
+
? undefined
|
|
107
|
+
: expandPrefixed(String(value), prefixes);
|
|
108
|
+
case "entity":
|
|
109
|
+
return unwrapEntityRef(value, prefixes);
|
|
110
|
+
case "collection": {
|
|
111
|
+
const nodes = collectionNodes(value, projection.connection);
|
|
112
|
+
return nodes.map((node) =>
|
|
113
|
+
unwrapChildRow(node, projection.children, prefixes),
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Unwrap `{ uri }` to the full IRI string (the identity field is prefixed). */
|
|
120
|
+
function unwrapEntityRef(
|
|
121
|
+
value: unknown,
|
|
122
|
+
prefixes: Readonly<Record<string, string>>,
|
|
123
|
+
): string | undefined {
|
|
124
|
+
const uri = (value as { uri?: unknown } | null | undefined)?.uri;
|
|
125
|
+
return typeof uri === "string" ? expandPrefixed(uri, prefixes) : undefined;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Strip the Relay envelope (or pass a plain list through) to node records. */
|
|
129
|
+
function collectionNodes(
|
|
130
|
+
value: unknown,
|
|
131
|
+
connection: boolean,
|
|
132
|
+
): Record<string, unknown>[] {
|
|
133
|
+
if (connection) {
|
|
134
|
+
const edges = (value as { edges?: unknown } | null | undefined)?.edges;
|
|
135
|
+
if (!Array.isArray(edges)) return [];
|
|
136
|
+
return edges
|
|
137
|
+
.map((edge) => (edge as { node?: unknown }).node)
|
|
138
|
+
.filter(
|
|
139
|
+
(node): node is Record<string, unknown> =>
|
|
140
|
+
typeof node === "object" && node !== null,
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
if (!Array.isArray(value)) return [];
|
|
144
|
+
return value.filter(
|
|
145
|
+
(node): node is Record<string, unknown> =>
|
|
146
|
+
typeof node === "object" && node !== null,
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Unwrap one child row. A nested expand with a single scalar select collapses
|
|
152
|
+
* each grandchild to that value (so `values: ["Dense", "Comfortable"]`); a
|
|
153
|
+
* multi-field select keeps one record per grandchild.
|
|
154
|
+
*/
|
|
155
|
+
function unwrapChildRow(
|
|
156
|
+
node: Record<string, unknown>,
|
|
157
|
+
children: readonly FieldProjection[],
|
|
158
|
+
prefixes: Readonly<Record<string, string>>,
|
|
159
|
+
): PackChildRow {
|
|
160
|
+
const row: PackChildRow = {};
|
|
161
|
+
for (const child of children) {
|
|
162
|
+
const value = node[child.name];
|
|
163
|
+
if (child.kind === "collection") {
|
|
164
|
+
const grandchildren = collectionNodes(value, child.connection);
|
|
165
|
+
const single =
|
|
166
|
+
child.children.length === 1 && child.children[0]?.kind === "scalar"
|
|
167
|
+
? child.children[0]
|
|
168
|
+
: undefined;
|
|
169
|
+
row[child.name] = single
|
|
170
|
+
? grandchildren
|
|
171
|
+
.map((grandchild) => grandchild[single.name])
|
|
172
|
+
.filter((v): v is string => v !== null && v !== undefined)
|
|
173
|
+
.map(String)
|
|
174
|
+
: grandchildren.map((grandchild) => {
|
|
175
|
+
const record: Record<string, string> = {};
|
|
176
|
+
for (const leaf of child.children) {
|
|
177
|
+
const leafValue = unwrapLeaf(
|
|
178
|
+
grandchild[leaf.name],
|
|
179
|
+
leaf,
|
|
180
|
+
prefixes,
|
|
181
|
+
);
|
|
182
|
+
if (leafValue !== undefined) record[leaf.name] = leafValue;
|
|
183
|
+
}
|
|
184
|
+
return record;
|
|
185
|
+
});
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
const unwrapped = unwrapLeaf(value, child, prefixes);
|
|
189
|
+
if (unwrapped !== undefined) row[child.name] = unwrapped;
|
|
190
|
+
}
|
|
191
|
+
return row;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** Unwrap one non-collection leaf value (entity refs and `uri` → full IRIs). */
|
|
195
|
+
function unwrapLeaf(
|
|
196
|
+
value: unknown,
|
|
197
|
+
leaf: FieldProjection,
|
|
198
|
+
prefixes: Readonly<Record<string, string>>,
|
|
199
|
+
): string | undefined {
|
|
200
|
+
if (leaf.kind === "entity") return unwrapEntityRef(value, prefixes);
|
|
201
|
+
if (value === null || value === undefined) return undefined;
|
|
202
|
+
return leaf.kind === "iri"
|
|
203
|
+
? expandPrefixed(String(value), prefixes)
|
|
204
|
+
: String(value);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** Expand a prefixed URI (`ds:global`) to its full IRI via the merged prefixes. */
|
|
208
|
+
function expandPrefixed(
|
|
209
|
+
uri: string,
|
|
210
|
+
prefixes: Readonly<Record<string, string>>,
|
|
211
|
+
): string {
|
|
212
|
+
if (uri.includes("://")) return uri;
|
|
213
|
+
const colon = uri.indexOf(":");
|
|
214
|
+
if (colon === -1) return uri;
|
|
215
|
+
const namespace = prefixes[uri.slice(0, colon)];
|
|
216
|
+
return namespace ? `${namespace}${uri.slice(colon + 1)}` : uri;
|
|
217
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The GraphQL naming rules the pack document generator needs — ported verbatim
|
|
3
|
+
* from ke-graphql's internal `compiler/nameMap` (Pass 4). ke-graphql does not
|
|
4
|
+
* re-export these helpers from its public entry, so they are reimplemented here
|
|
5
|
+
* with the SAME logic to guarantee the derived field names match the names the
|
|
6
|
+
* compiler actually generated. Keeping the port faithful is load-bearing: a
|
|
7
|
+
* divergence would derive a field the schema does not expose.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** Irregular plurals the suffix rules cannot produce. */
|
|
11
|
+
const IRREGULAR_PLURALS: Record<string, string> = {
|
|
12
|
+
child: "children",
|
|
13
|
+
person: "people",
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Pluralize a camelCase field name (matching ke-graphql):
|
|
18
|
+
* a. irregulars (child → children), preserving a camelCase prefix
|
|
19
|
+
* b. already ends in 's' → unchanged
|
|
20
|
+
* c. consonant + 'y' → 'ies'
|
|
21
|
+
* d. x/z/ch/sh → '+es'
|
|
22
|
+
* e. default → '+s'
|
|
23
|
+
*/
|
|
24
|
+
export function pluralize(name: string): string {
|
|
25
|
+
for (const [singular, plural] of Object.entries(IRREGULAR_PLURALS)) {
|
|
26
|
+
if (name.toLowerCase() === singular) {
|
|
27
|
+
return name[0] === name[0]?.toUpperCase()
|
|
28
|
+
? plural.charAt(0).toUpperCase() + plural.slice(1)
|
|
29
|
+
: plural;
|
|
30
|
+
}
|
|
31
|
+
const suffix = singular.charAt(0).toUpperCase() + singular.slice(1);
|
|
32
|
+
if (name.endsWith(suffix)) {
|
|
33
|
+
return (
|
|
34
|
+
name.slice(0, -suffix.length) +
|
|
35
|
+
plural.charAt(0).toUpperCase() +
|
|
36
|
+
plural.slice(1)
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (name.endsWith("s")) return name;
|
|
41
|
+
if (/[^aeiou]y$/i.test(name)) return `${name.slice(0, -1)}ies`;
|
|
42
|
+
if (/(x|z|ch|sh)$/i.test(name)) return `${name}es`;
|
|
43
|
+
return `${name}s`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Strip a leading `has`/`is` verb from a field name (matching ke-graphql). */
|
|
47
|
+
export function stripVerbPrefix(name: string): string {
|
|
48
|
+
for (const prefix of ["has", "is"]) {
|
|
49
|
+
if (
|
|
50
|
+
name.startsWith(prefix) &&
|
|
51
|
+
name.length > prefix.length &&
|
|
52
|
+
name[prefix.length] === name[prefix.length]?.toUpperCase()
|
|
53
|
+
) {
|
|
54
|
+
const stripped = name.slice(prefix.length);
|
|
55
|
+
return stripped.charAt(0).toLowerCase() + stripped.slice(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return name;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The schema's page-size clamp for Relay connections. ke-graphql's
|
|
63
|
+
* `MAX_PAGE_SIZE`; stated explicitly on generated connection selections to make
|
|
64
|
+
* the fetched window visible. The schema clamps regardless, so an inlined value
|
|
65
|
+
* only affects the stated bound, never correctness.
|
|
66
|
+
*/
|
|
67
|
+
export const MAX_PAGE_SIZE = 100;
|