@canonical/pragma-cli 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/bundled-skills/add-standard/SKILL.md +338 -0
- package/bundled-skills/adoption-a1-styles/SKILL.md +269 -0
- package/bundled-skills/adoption-a2-components/SKILL.md +291 -0
- package/bundled-skills/adoption-a3-forms/SKILL.md +260 -0
- package/bundled-skills/anatomy-author/ANATOMY_DSL_SPEC.md +406 -0
- package/bundled-skills/anatomy-author/SKILL.md +1226 -0
- package/bundled-skills/design-auditor/SKILL.md +455 -0
- package/bundled-skills/implement-component/SKILL.md +333 -0
- package/bundled-skills/specify-component/SKILL.md +331 -0
- package/bundled-skills/specify-pattern/SKILL.md +292 -0
- package/dist/package.json +24 -20
- package/dist/pragma.conf.js +266 -34
- package/dist/pragma.conf.js.map +1 -1
- package/dist/src/bin.js +1 -1
- package/dist/src/bin.js.map +1 -1
- package/dist/src/capabilities/capabilities/hints.js +1 -1
- package/dist/src/capabilities/capabilities/hints.js.map +1 -1
- package/dist/src/capabilities/colophon/colophon.render.js +1 -1
- package/dist/src/capabilities/colophon/colophon.render.js.map +1 -1
- package/dist/src/capabilities/create/create.verb.js +2 -1
- package/dist/src/capabilities/create/create.verb.js.map +1 -1
- package/dist/src/capabilities/create/createSurface.generated.js +23 -1
- package/dist/src/capabilities/create/createSurface.generated.js.map +1 -1
- package/dist/src/capabilities/create/mount.js +4 -3
- package/dist/src/capabilities/create/mount.js.map +1 -1
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js +11 -6
- package/dist/src/capabilities/doctor/checks/checkNodeVersion.js.map +1 -1
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js +60 -4
- package/dist/src/capabilities/doctor/checks/checkPackageRefs.js.map +1 -1
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js +8 -8
- package/dist/src/capabilities/doctor/checks/checkShellCompletions.js.map +1 -1
- package/dist/src/capabilities/doctor/checks/harnessInventory.js +195 -0
- package/dist/src/capabilities/doctor/checks/harnessInventory.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/index.js +6 -6
- package/dist/src/capabilities/doctor/checks/isSupportedNodeVersion.js +38 -0
- package/dist/src/capabilities/doctor/checks/isSupportedNodeVersion.js.map +1 -0
- package/dist/src/capabilities/doctor/checks/targetHealth.js +194 -50
- package/dist/src/capabilities/doctor/checks/targetHealth.js.map +1 -1
- package/dist/src/capabilities/doctor/doctor.render.js +43 -64
- package/dist/src/capabilities/doctor/doctor.render.js.map +1 -1
- package/dist/src/capabilities/doctor/doctor.verb.js +6 -2
- package/dist/src/capabilities/doctor/doctor.verb.js.map +1 -1
- package/dist/src/capabilities/doctor/runChecks.js +14 -11
- package/dist/src/capabilities/doctor/runChecks.js.map +1 -1
- package/dist/src/capabilities/graph/query.render.js +2 -2
- package/dist/src/capabilities/graph/query.render.js.map +1 -1
- package/dist/src/capabilities/info/collectInfo.js +8 -2
- package/dist/src/capabilities/info/collectInfo.js.map +1 -1
- package/dist/src/capabilities/info/info.render.js +6 -2
- package/dist/src/capabilities/info/info.render.js.map +1 -1
- package/dist/src/capabilities/prompt/prompt.render.js +2 -2
- package/dist/src/capabilities/prompt/prompt.render.js.map +1 -1
- package/dist/src/capabilities/setup/buildPlan.js +43 -39
- package/dist/src/capabilities/setup/buildPlan.js.map +1 -1
- package/dist/src/capabilities/setup/mode.js +2 -2
- package/dist/src/capabilities/setup/operations/index.js +4 -4
- package/dist/src/capabilities/setup/operations/index.js.map +1 -1
- package/dist/src/capabilities/setup/operations/setupCompletions.js +6 -2
- package/dist/src/capabilities/setup/operations/setupCompletions.js.map +1 -1
- package/dist/src/capabilities/setup/operations/setupConfig.js +4 -2
- package/dist/src/capabilities/setup/operations/setupConfig.js.map +1 -1
- package/dist/src/capabilities/setup/operations/setupGenerator.js +156 -58
- package/dist/src/capabilities/setup/operations/setupGenerator.js.map +1 -1
- package/dist/src/capabilities/setup/operations/setupLsp.js +136 -38
- package/dist/src/capabilities/setup/operations/setupLsp.js.map +1 -1
- package/dist/src/capabilities/setup/operations/setupMcp.js +101 -52
- package/dist/src/capabilities/setup/operations/setupMcp.js.map +1 -1
- package/dist/src/capabilities/setup/operations/setupSkills.js +329 -49
- package/dist/src/capabilities/setup/operations/setupSkills.js.map +1 -1
- package/dist/src/capabilities/setup/plan.js.map +1 -1
- package/dist/src/capabilities/setup/plan.render.js +144 -66
- package/dist/src/capabilities/setup/plan.render.js.map +1 -1
- package/dist/src/capabilities/setup/setup.render.js +1 -1
- package/dist/src/capabilities/setup/setup.verb.js +165 -63
- package/dist/src/capabilities/setup/setup.verb.js.map +1 -1
- package/dist/src/capabilities/setup/targets.js +122 -51
- package/dist/src/capabilities/setup/targets.js.map +1 -1
- package/dist/src/capabilities/shared/index.js +7 -6
- package/dist/src/capabilities/shared/index.js.map +1 -1
- package/dist/src/capabilities/shared/packageManager.js +300 -54
- package/dist/src/capabilities/shared/packageManager.js.map +1 -1
- package/dist/src/capabilities/skill/discover.js +97 -11
- package/dist/src/capabilities/skill/discover.js.map +1 -1
- package/dist/src/capabilities/skill/render.js +2 -2
- package/dist/src/capabilities/skill/render.js.map +1 -1
- package/dist/src/capabilities/sources/installSkills.js +145 -3
- package/dist/src/capabilities/sources/installSkills.js.map +1 -1
- package/dist/src/capabilities/sources/runUpdate.js +68 -2
- package/dist/src/capabilities/sources/runUpdate.js.map +1 -1
- package/dist/src/capabilities/sources/update.verb.js +3 -3
- package/dist/src/capabilities/sources/update.verb.js.map +1 -1
- package/dist/src/capabilities/upgrade/runUpgrade.js +43 -7
- package/dist/src/capabilities/upgrade/runUpgrade.js.map +1 -1
- package/dist/src/capabilities/upgrade/upgrade.render.js +10 -2
- package/dist/src/capabilities/upgrade/upgrade.render.js.map +1 -1
- package/dist/src/constants.js +13 -2
- package/dist/src/constants.js.map +1 -1
- package/dist/src/kernel/index.js +11 -2
- package/dist/src/kernel/index.js.map +1 -1
- package/dist/src/kernel/interactivity.js +68 -0
- package/dist/src/kernel/interactivity.js.map +1 -0
- package/dist/src/kernel/packs/renderPack.js +3 -3
- package/dist/src/kernel/packs/renderPack.js.map +1 -1
- package/dist/src/kernel/packs/resolveEntity.js +63 -12
- package/dist/src/kernel/packs/resolveEntity.js.map +1 -1
- package/dist/src/kernel/packs/runBodies.js +57 -4
- package/dist/src/kernel/packs/runBodies.js.map +1 -1
- package/dist/src/kernel/packs/schema.js +54 -2
- package/dist/src/kernel/packs/schema.js.map +1 -1
- package/dist/src/kernel/packs/sparql/applyFilters.js +104 -5
- package/dist/src/kernel/packs/sparql/applyFilters.js.map +1 -1
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js +310 -43
- package/dist/src/kernel/packs/sparql/buildLookupQuery.js.map +1 -1
- package/dist/src/kernel/packs/types.js.map +1 -1
- package/dist/src/kernel/project/cli/buildProgram.js +1 -1
- package/dist/src/kernel/project/cli/buildProgram.js.map +1 -1
- package/dist/src/kernel/project/cli/dispatch.js +46 -24
- package/dist/src/kernel/project/cli/dispatch.js.map +1 -1
- package/dist/src/kernel/project/cli/globalFlags.js +4 -1
- package/dist/src/kernel/project/cli/globalFlags.js.map +1 -1
- package/dist/src/kernel/project/cli/helpFormat.js +1 -2
- package/dist/src/kernel/project/cli/helpFormat.js.map +1 -1
- package/dist/src/kernel/project/cli/rootHelp.js +42 -9
- package/dist/src/kernel/project/cli/rootHelp.js.map +1 -1
- package/dist/src/kernel/project/mcp/registerVerb.js +16 -1
- package/dist/src/kernel/project/mcp/registerVerb.js.map +1 -1
- package/dist/src/kernel/render/renderers.js +1 -1
- package/dist/src/kernel/render/style.js +29 -9
- package/dist/src/kernel/render/style.js.map +1 -1
- package/dist/src/kernel/render/vocabulary.js +174 -0
- package/dist/src/kernel/render/vocabulary.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js +2 -3
- package/dist/src/kernel/runtime/graphpack/embedded/pack.generated.js.map +1 -1
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js +1 -1
- package/dist/src/kernel/runtime/graphpack/embedded/pack.index.generated.js.map +1 -1
- package/dist/src/kernel/runtime/graphpack/embedded/pack.manifest.generated.js +4 -0
- package/dist/src/kernel/runtime/graphpack/embedded/pack.manifest.generated.js.map +1 -0
- package/dist/src/kernel/runtime/graphpack/embedded.js +13 -6
- package/dist/src/kernel/runtime/graphpack/embedded.js.map +1 -1
- package/dist/src/kernel/runtime/graphpack/read.js +14 -9
- package/dist/src/kernel/runtime/graphpack/read.js.map +1 -1
- package/dist/src/kernel/runtime/loadSession.js +3 -1
- package/dist/src/kernel/runtime/loadSession.js.map +1 -1
- package/dist/src/kernel/runtime/probe.js +1 -1
- package/dist/src/kernel/runtime/probe.js.map +1 -1
- package/dist/src/kernel/runtime/refs/parseRef.js +17 -1
- package/dist/src/kernel/runtime/refs/parseRef.js.map +1 -1
- package/dist/src/kernel/runtime/refs/resolve.js +9 -3
- package/dist/src/kernel/runtime/refs/resolve.js.map +1 -1
- package/dist/src/kernel/spec/emitReference.js +1 -1
- package/dist/src/kernel/spec/emitReference.js.map +1 -1
- package/package.json +24 -20
- package/pragma.conf.ts +272 -34
- package/src/bin.ts +8 -1
- package/src/capabilities/block.parity.test.ts +25 -11
- package/src/capabilities/block.shipped.exec.test.ts +282 -0
- package/src/capabilities/block.tierRank.exec.test.ts +300 -0
- package/src/capabilities/capabilities/hints.ts +1 -1
- package/src/capabilities/colophon/colophon.render.ts +1 -2
- package/src/capabilities/colophon/colophon.test.ts +2 -2
- package/src/capabilities/config/collectConfigShow.test.ts +1 -0
- package/src/capabilities/create/byteEquality.test.ts +28 -1
- package/src/capabilities/create/create.test.ts +1 -0
- package/src/capabilities/create/create.verb.ts +2 -1
- package/src/capabilities/create/createGrammar.test.ts +5 -2
- package/src/capabilities/create/createSurface.generated.ts +23 -1
- package/src/capabilities/create/crossCli.subprocess.test.ts +10 -3
- package/src/capabilities/create/mount.ts +3 -3
- package/src/capabilities/distribution.parity.test.ts +4 -0
- package/src/capabilities/doctor/checks/checkNodeVersion.test.ts +49 -0
- package/src/capabilities/doctor/checks/checkNodeVersion.ts +11 -7
- package/src/capabilities/doctor/checks/checkPackageRefs.ts +69 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.test.ts +6 -4
- package/src/capabilities/doctor/checks/checkShellCompletions.ts +8 -8
- package/src/capabilities/doctor/checks/harnessInventory.test.ts +219 -0
- package/src/capabilities/doctor/checks/harnessInventory.ts +298 -0
- package/src/capabilities/doctor/checks/index.ts +6 -6
- package/src/capabilities/doctor/checks/isSupportedNodeVersion.test.ts +111 -0
- package/src/capabilities/doctor/checks/isSupportedNodeVersion.ts +34 -0
- package/src/capabilities/doctor/checks/mcpCommand.test.ts +7 -1
- package/src/capabilities/doctor/checks/targetHealth.ts +229 -59
- package/src/capabilities/doctor/doctor.render.test.ts +108 -32
- package/src/capabilities/doctor/doctor.render.ts +56 -80
- package/src/capabilities/doctor/doctor.test.ts +247 -35
- package/src/capabilities/doctor/doctor.verb.ts +7 -2
- package/src/capabilities/doctor/runChecks.ts +14 -11
- package/src/capabilities/doctor/types.ts +15 -24
- package/src/capabilities/emptyRecovery.test.ts +10 -2
- package/src/capabilities/graph/query.render.ts +2 -2
- package/src/capabilities/info/collectInfo.ts +8 -1
- package/src/capabilities/info/info.render.ts +6 -2
- package/src/capabilities/info/info.test.ts +37 -1
- package/src/capabilities/info/types.ts +10 -2
- package/src/capabilities/lazy.test.ts +26 -2
- package/src/capabilities/listLookup.shipped.exec.test.ts +340 -0
- package/src/capabilities/prompt/prompt.render.ts +2 -2
- package/src/capabilities/renderVocabularySync.test.ts +82 -0
- package/src/capabilities/resources/resources.test.ts +38 -2
- package/src/capabilities/scopeTypeSync.test.ts +29 -15
- package/src/capabilities/setup/buildPlan.ts +45 -41
- package/src/capabilities/setup/index.ts +1 -1
- package/src/capabilities/setup/mode.ts +2 -2
- package/src/capabilities/setup/operations/index.ts +6 -1
- package/src/capabilities/setup/operations/setupCompletions.ts +9 -2
- package/src/capabilities/setup/operations/setupConfig.ts +7 -2
- package/src/capabilities/setup/operations/setupGenerator.ts +227 -84
- package/src/capabilities/setup/operations/setupLsp.ts +203 -38
- package/src/capabilities/setup/operations/setupMcp.ts +139 -62
- package/src/capabilities/setup/operations/setupSkills.ts +399 -60
- package/src/capabilities/setup/plan.render.ts +171 -76
- package/src/capabilities/setup/plan.ts +17 -12
- package/src/capabilities/setup/setup.mcp.correctness.test.ts +9 -9
- package/src/capabilities/setup/setup.render.test.ts +50 -36
- package/src/capabilities/setup/setup.render.ts +1 -1
- package/src/capabilities/setup/setup.test.ts +1126 -50
- package/src/capabilities/setup/setup.verb.ts +174 -68
- package/src/capabilities/setup/targets.ts +138 -60
- package/src/capabilities/setup/types.ts +10 -18
- package/src/capabilities/shared/index.ts +18 -6
- package/src/capabilities/shared/packageManager.test.ts +421 -6
- package/src/capabilities/shared/packageManager.ts +394 -59
- package/src/capabilities/skill/bundledSkills.test.ts +347 -0
- package/src/capabilities/skill/discover.ts +100 -11
- package/src/capabilities/skill/render.ts +2 -2
- package/src/capabilities/skill/skill.test.ts +17 -4
- package/src/capabilities/sources/installSkills.ts +181 -3
- package/src/capabilities/sources/runUpdate.ts +78 -2
- package/src/capabilities/sources/sources.test.ts +228 -0
- package/src/capabilities/sources/update.verb.ts +3 -3
- package/src/capabilities/surface.test.ts +14 -6
- package/src/capabilities/upgrade/runUpgrade.ts +45 -6
- package/src/capabilities/upgrade/types.ts +10 -2
- package/src/capabilities/upgrade/upgrade.render.ts +9 -2
- package/src/capabilities/upgrade/upgrade.test.ts +72 -0
- package/src/constants.ts +14 -1
- package/src/identity.test.ts +18 -5
- package/src/kernel/completion/entitySource.test.ts +15 -2
- package/src/kernel/completion/safety.test.ts +16 -9
- package/src/kernel/config/defaults.test.ts +19 -3
- package/src/kernel/config/readConfig.test.ts +1 -1
- package/src/kernel/index.ts +11 -2
- package/src/kernel/interactivity.test.ts +76 -0
- package/src/kernel/interactivity.ts +69 -0
- package/src/kernel/packs/compile.test.ts +92 -0
- package/src/kernel/packs/renderPack.ts +3 -3
- package/src/kernel/packs/resolveEntity.test.ts +75 -14
- package/src/kernel/packs/resolveEntity.ts +88 -24
- package/src/kernel/packs/runBodies.ts +84 -19
- package/src/kernel/packs/schema.ts +60 -4
- package/src/kernel/packs/sparql/applyFilters.ts +125 -4
- package/src/kernel/packs/sparql/buildLookupQuery.test.ts +290 -0
- package/src/kernel/packs/sparql/buildLookupQuery.ts +327 -45
- package/src/kernel/packs/toolDescription.test.ts +35 -1
- package/src/kernel/packs/types.ts +125 -2
- package/src/kernel/project/cli/buildProgram.test.ts +73 -2
- package/src/kernel/project/cli/buildProgram.ts +8 -1
- package/src/kernel/project/cli/dispatch.test.ts +5 -4
- package/src/kernel/project/cli/dispatch.ts +48 -25
- package/src/kernel/project/cli/globalFlags.ts +4 -1
- package/src/kernel/project/cli/helpFormat.ts +1 -2
- package/src/kernel/project/cli/rootHelp.ts +44 -8
- package/src/kernel/project/mcp/registerVerb.ts +20 -1
- package/src/kernel/render/prefixes.test.ts +2 -0
- package/src/kernel/render/renderers.ts +1 -1
- package/src/kernel/render/style.ts +32 -9
- package/src/kernel/render/vocabulary.ts +276 -0
- package/src/kernel/runtime/graphpack/embedded/pack.generated.ts +2 -3
- package/src/kernel/runtime/graphpack/embedded/pack.index.generated.ts +1 -1
- package/src/kernel/runtime/graphpack/embedded/pack.manifest.generated.ts +3 -0
- package/src/kernel/runtime/graphpack/embedded.ts +14 -6
- package/src/kernel/runtime/graphpack/graphpack.test.ts +31 -5
- package/src/kernel/runtime/graphpack/read.ts +14 -12
- package/src/kernel/runtime/loadSession.ts +3 -1
- package/src/kernel/runtime/probe.ts +1 -1
- package/src/kernel/runtime/refs/parseRef.test.ts +49 -1
- package/src/kernel/runtime/refs/parseRef.ts +25 -1
- package/src/kernel/runtime/refs/resolve.ts +9 -3
- package/src/kernel/runtime/types.ts +17 -0
- package/src/kernel/spec/emitReference.ts +1 -1
- package/src/kernel/spec/types.ts +35 -6
- package/src/testing/PARITY_GAPS.ts +9 -3
- package/src/testing/behavioral/docExamples.test.ts +4 -2
- package/src/testing/behavioral/errorMatrix.mcp.test.ts +110 -7
- package/src/testing/behavioral/journeys.firstInstall.test.ts +7 -2
- package/src/testing/behavioral/journeys.packageStories.test.ts +6 -3
- package/src/testing/eval/__snapshots__/eval.test.ts.snap +26 -1
- package/src/testing/eval/cases/readNouns.ts +245 -9
- package/src/testing/fixtures/blockGraph.ts +28 -13
- package/src/testing/fixtures/graph/canonical.ts +95 -12
- package/src/testing/helpers/runCli.test.ts +44 -0
- package/src/testing/helpers/runCli.ts +27 -3
- package/dist/src/capabilities/shared/bands.js +0 -16
- package/dist/src/capabilities/shared/bands.js.map +0 -1
- package/src/capabilities/shared/bands.ts +0 -16
|
@@ -12,73 +12,95 @@
|
|
|
12
12
|
* aligned whether it holds one row or seven. Colour rides the shared TTY seam —
|
|
13
13
|
* a piped run renders byte-for-byte plain.
|
|
14
14
|
*/
|
|
15
|
-
import chalk from "chalk";
|
|
16
15
|
import { BIN_NAME } from "../../constants.js";
|
|
17
16
|
import { defaultStyle } from "../../kernel/render/style.js";
|
|
18
|
-
import {
|
|
17
|
+
import { NOT_RUN_GLYPH, OUTCOME_GLYPHS, outcomeRemedyWord, SCOPE_LABELS, SCOPE_PHRASES, } from "../../kernel/render/vocabulary.js";
|
|
19
18
|
import { planTally, shortenPath, } from "./plan.js";
|
|
20
|
-
/** The
|
|
21
|
-
const
|
|
22
|
-
done: "✓",
|
|
23
|
-
noop: "✓",
|
|
24
|
-
removed: "✓",
|
|
25
|
-
kept: "○",
|
|
26
|
-
skipped: "○",
|
|
27
|
-
failed: "✗",
|
|
28
|
-
};
|
|
29
|
-
/**
|
|
30
|
-
* The marker for a row that carries NO outcome — one the user deselected, so it
|
|
31
|
-
* was neither done nor skipped-for-cause. It must not be a ✓: a green check
|
|
32
|
-
* against work that never ran is the same lie the old recap told when it
|
|
33
|
-
* reported "Setup complete" over a target it had dropped.
|
|
34
|
-
*/
|
|
35
|
-
const NOT_RUN_GLYPH = "·";
|
|
19
|
+
/** The header's scope phrase: `global`, `local project`, or both of them. */
|
|
20
|
+
const scopePhrase = (scope) => SCOPE_PHRASES[scope];
|
|
36
21
|
/**
|
|
37
|
-
*
|
|
38
|
-
* a failure tint appears only on a colour-capable TTY. Mirrors `doctor`'s own
|
|
39
|
-
* styler, which is deliberate: a failed setup row and a failed doctor row are
|
|
40
|
-
* the same finding seen twice, and they are tinted alike.
|
|
41
|
-
*
|
|
42
|
-
* @param style - The shared styler.
|
|
43
|
-
* @returns The styler plus `red`.
|
|
44
|
-
*/
|
|
45
|
-
const withRed = (style) => ({
|
|
46
|
-
...style,
|
|
47
|
-
red: style.enabled ? (text) => chalk.red(text) : (text) => text,
|
|
48
|
-
});
|
|
49
|
-
/** The header's band phrase: `global band`, `project band`, or `both bands`. */
|
|
50
|
-
const scopePhrase = (scope) => scope === "both" ? "both bands" : `${scope} band`;
|
|
51
|
-
/**
|
|
52
|
-
* The header line. It names the band and BOTH roots exactly once, which is what
|
|
22
|
+
* The header line. It names the scope and BOTH roots exactly once, which is what
|
|
53
23
|
* frees every row below to render its paths root-relative instead of repeating
|
|
54
|
-
* a 120-character prefix per line.
|
|
24
|
+
* a 120-character prefix per line. The roots are LABELLED (`home:`, `project:`)
|
|
25
|
+
* because the `~` and `.` markers the rows use are only legible once something
|
|
26
|
+
* has said what they stand for.
|
|
55
27
|
*/
|
|
56
28
|
function header(plan, lead) {
|
|
57
29
|
const project = shortenPath(plan.roots.project, {
|
|
58
30
|
global: plan.roots.global,
|
|
59
31
|
project: "",
|
|
60
32
|
});
|
|
61
|
-
return `${lead} — ${scopePhrase(plan.scope)} (~ · project: ${project})`;
|
|
33
|
+
return `${lead} — ${scopePhrase(plan.scope)} (home: ~ · project: ${project})`;
|
|
62
34
|
}
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
35
|
+
/**
|
|
36
|
+
* The plain verb each action reads as. The middle column is a column of VERBS:
|
|
37
|
+
* what this row will do. It used to render the raw {@link PlanAction} token, so
|
|
38
|
+
* it read as a column of status codes — and `none` was the worst of them,
|
|
39
|
+
* standing equally for "already correct" and "nothing found here". The two are
|
|
40
|
+
* now told apart by the pair: the word says nothing will happen, the detail
|
|
41
|
+
* beside it says what was found.
|
|
42
|
+
*
|
|
43
|
+
* `none` and `skip` are worded direction-neutrally on purpose. The SAME renderer
|
|
44
|
+
* draws the `--undo` plan, where a target-specific negation ("nothing to create"
|
|
45
|
+
* on the `config` row) would be plainly false — there the row is not creating
|
|
46
|
+
* anything, it is declining to delete.
|
|
47
|
+
*
|
|
48
|
+
* The token itself is untouched: `action` is the machine field `--format json`
|
|
49
|
+
* publishes, and this is the display layer over it.
|
|
50
|
+
*/
|
|
51
|
+
const ACTION_WORDS = {
|
|
52
|
+
install: "install",
|
|
53
|
+
update: "update",
|
|
54
|
+
link: "link",
|
|
55
|
+
remove: "remove",
|
|
56
|
+
none: "no change",
|
|
57
|
+
skip: "nothing to do",
|
|
58
|
+
};
|
|
59
|
+
/** The distinct actions a row's children carry (empty when it has none). */
|
|
60
|
+
const childActions = (row) => new Set((row.children ?? []).map((child) => child.action));
|
|
61
|
+
/**
|
|
62
|
+
* The middle column.
|
|
63
|
+
*
|
|
64
|
+
* A row with children takes its word from THEM when they agree, because the
|
|
65
|
+
* row-level token can disagree with every one of its own files: registering the
|
|
66
|
+
* MCP server in three files that have never held it plans as `update` (the
|
|
67
|
+
* table's word for "this row has work that is not a fresh install"), and
|
|
68
|
+
* printing `update` over three `(add)` children described the opposite of what
|
|
69
|
+
* the run would do. Before this the cell held the row's DETAIL instead — `3
|
|
70
|
+
* files`, which is a count, not an action, and left the plan with no column
|
|
71
|
+
* that said what would happen.
|
|
72
|
+
*/
|
|
73
|
+
function actionCell(row) {
|
|
74
|
+
const kinds = childActions(row);
|
|
75
|
+
if (row.action === "update" && kinds.size === 1 && kinds.has("add")) {
|
|
76
|
+
return ACTION_WORDS.install;
|
|
77
|
+
}
|
|
78
|
+
return ACTION_WORDS[row.action];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* One child rendered inline. The per-child action is printed only when the
|
|
82
|
+
* children DISAGREE — when they all do the same thing the row's own verb has
|
|
83
|
+
* just said it, and `lsp no change codium — VSCodium (unchanged)` said
|
|
84
|
+
* "nothing happens here" twice in two columns.
|
|
85
|
+
*/
|
|
86
|
+
const childCell = (row, child) => childActions(row).size === 1
|
|
87
|
+
? child.label
|
|
88
|
+
: `${child.label} (${child.action})`;
|
|
67
89
|
/** The right column: the children joined, or the row's own detail. */
|
|
68
90
|
const detailCell = (row) => row.children && row.children.length > 0
|
|
69
|
-
? row.children.map(childCell).join(" · ")
|
|
91
|
+
? row.children.map((child) => childCell(row, child)).join(" · ")
|
|
70
92
|
: row.action === "skip"
|
|
71
93
|
? (row.reason ?? row.detail)
|
|
72
94
|
: row.detail;
|
|
73
95
|
/** Pad every id to the widest, so the three columns line up. */
|
|
74
96
|
const widthOf = (rows, pick) => Math.max(0, ...rows.map((row) => pick(row).length));
|
|
75
|
-
/** Group rows by
|
|
76
|
-
function
|
|
77
|
-
const
|
|
78
|
-
return
|
|
79
|
-
.map((
|
|
80
|
-
|
|
81
|
-
plan.rows.filter((row) => row.
|
|
97
|
+
/** Group rows by scope, in the plan's own scope order. */
|
|
98
|
+
function byScope(plan) {
|
|
99
|
+
const scopes = ["global", "project"];
|
|
100
|
+
return scopes
|
|
101
|
+
.map((scope) => [
|
|
102
|
+
scope,
|
|
103
|
+
plan.rows.filter((row) => row.scope === scope),
|
|
82
104
|
])
|
|
83
105
|
.filter(([, rows]) => rows.length > 0);
|
|
84
106
|
}
|
|
@@ -95,10 +117,10 @@ export function renderPlanTable(plan, options = { lead: "Setup plan" }, style =
|
|
|
95
117
|
const idWidth = widthOf(plan.rows, (row) => row.target);
|
|
96
118
|
const actionWidth = widthOf(plan.rows, actionCell);
|
|
97
119
|
const lines = [style.bold(header(plan, options.lead)), ""];
|
|
98
|
-
const groups =
|
|
99
|
-
for (const [
|
|
120
|
+
const groups = byScope(plan);
|
|
121
|
+
for (const [scope, rows] of groups) {
|
|
100
122
|
if (plan.scope === "both")
|
|
101
|
-
lines.push(style.bold(
|
|
123
|
+
lines.push(style.bold(SCOPE_LABELS[scope]));
|
|
102
124
|
for (const row of rows) {
|
|
103
125
|
lines.push(` ${row.target.padEnd(idWidth)} ${actionCell(row).padEnd(actionWidth)} ${style.dim(detailCell(row))}`);
|
|
104
126
|
}
|
|
@@ -107,6 +129,55 @@ export function renderPlanTable(plan, options = { lead: "Setup plan" }, style =
|
|
|
107
129
|
lines.push("", options.hint);
|
|
108
130
|
return lines.join("\n");
|
|
109
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* What was DETECTED, rendered before anything is asked.
|
|
134
|
+
*
|
|
135
|
+
* The gap this closes is a rendering one, not an ordering one: detection is
|
|
136
|
+
* complete before the prompt array is even constructed (`buildSetupRun` does
|
|
137
|
+
* resolveRoots → detectTargets → buildPlan, and only then builds `prompts`), and
|
|
138
|
+
* the Ink view mounts no React until the FIRST prompt effect. So the facts were
|
|
139
|
+
* sitting in `run.plan` the whole time with nothing rendering them — the wizard
|
|
140
|
+
* leaked detection only through prompt-label suffixes, and `renderPlanTable` is
|
|
141
|
+
* reached only by `--dry-run` or the non-interactive preview. A wizard run
|
|
142
|
+
* never rendered it at all, and the confirm gate shows an EFFECTS summary, not
|
|
143
|
+
* a detection one.
|
|
144
|
+
*
|
|
145
|
+
* It is a plain-string formatter on purpose. It rides `rt.report` — the non-Ink
|
|
146
|
+
* stderr seam, `--quiet`-aware and a no-op over MCP — because pragma contains no
|
|
147
|
+
* React and no Ink, and three PROTECTED tests exist to keep it that way.
|
|
148
|
+
*
|
|
149
|
+
* The default lists DETECTED rows only; `--verbose` lists everything. "Detected"
|
|
150
|
+
* is `action !== "skip"`, which is not a new partition: it is exactly the
|
|
151
|
+
* predicate the row multiselect already uses to build its choices, so the
|
|
152
|
+
* summary and the question that follows it describe the same set.
|
|
153
|
+
*
|
|
154
|
+
* @param plan - The plan as detected (no outcomes yet).
|
|
155
|
+
* @param options - `verbose` widens detected-only to the whole table.
|
|
156
|
+
* @param style - Injected for tests; defaults to the shared TTY seam.
|
|
157
|
+
* @returns The rendered block, or `undefined` when there is nothing to say.
|
|
158
|
+
*/
|
|
159
|
+
export function renderDetectionSummary(plan, options = {}, style = defaultStyle()) {
|
|
160
|
+
const shown = options.verbose
|
|
161
|
+
? plan.rows
|
|
162
|
+
: plan.rows.filter((row) => row.action !== "skip");
|
|
163
|
+
if (shown.length === 0)
|
|
164
|
+
return undefined;
|
|
165
|
+
const hidden = plan.rows.length - shown.length;
|
|
166
|
+
const idWidth = widthOf(shown, (row) => row.target);
|
|
167
|
+
const actionWidth = widthOf(shown, actionCell);
|
|
168
|
+
const lines = [style.bold(header(plan, "Detected")), ""];
|
|
169
|
+
for (const [scope, rows] of byScope({ ...plan, rows: shown })) {
|
|
170
|
+
if (plan.scope === "both")
|
|
171
|
+
lines.push(style.bold(SCOPE_LABELS[scope]));
|
|
172
|
+
for (const row of rows) {
|
|
173
|
+
lines.push(` ${row.target.padEnd(idWidth)} ${actionCell(row).padEnd(actionWidth)} ${style.dim(detailCell(row))}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (hidden > 0) {
|
|
177
|
+
lines.push("", style.dim(`${hidden} target${hidden === 1 ? "" : "s"} not detected here — --verbose lists them`));
|
|
178
|
+
}
|
|
179
|
+
return lines.join("\n");
|
|
180
|
+
}
|
|
110
181
|
/**
|
|
111
182
|
* One progress line, emitted as a row's outcome lands. Same columns as the
|
|
112
183
|
* recap, so a reader watching the run and a reader reading the recap afterwards
|
|
@@ -118,23 +189,26 @@ export function renderPlanTable(plan, options = { lead: "Setup plan" }, style =
|
|
|
118
189
|
* @returns The line.
|
|
119
190
|
*/
|
|
120
191
|
export function renderProgressLine(row, idWidth, style = defaultStyle()) {
|
|
121
|
-
const painted = withRed(style);
|
|
122
192
|
const outcome = row.outcome;
|
|
123
193
|
// No outcome at all: the row was offered and left unselected. It is neither a
|
|
124
194
|
// success nor a skip-for-cause, and painting it green would claim work that
|
|
125
195
|
// never happened, so it gets a neutral marker and says plainly what it is.
|
|
126
196
|
if (outcome === undefined) {
|
|
127
|
-
return `${
|
|
197
|
+
return `${style.dim(NOT_RUN_GLYPH)} ${row.target.padEnd(idWidth)} ${style.dim(`${row.detail} — not selected`)}`;
|
|
128
198
|
}
|
|
129
|
-
const glyph =
|
|
199
|
+
const glyph = OUTCOME_GLYPHS[outcome.status];
|
|
130
200
|
const tinted = outcome.status === "failed"
|
|
131
|
-
?
|
|
201
|
+
? style.red(glyph)
|
|
132
202
|
: outcome.status === "skipped" || outcome.status === "kept"
|
|
133
|
-
?
|
|
134
|
-
:
|
|
203
|
+
? style.yellow(glyph)
|
|
204
|
+
: style.green(glyph);
|
|
135
205
|
const note = outcome.note;
|
|
136
206
|
const body = outcome.status === "skipped"
|
|
137
|
-
?
|
|
207
|
+
? // A colon, not a dash: the reasons carry their own em-dash clause
|
|
208
|
+
// ("no skills installed yet — pack skills arrive with …"), and two
|
|
209
|
+
// dashes in one line read as one run-on sentence rather than a label
|
|
210
|
+
// in front of a reason.
|
|
211
|
+
`skipped: ${row.reason ?? row.detail}`
|
|
138
212
|
: note
|
|
139
213
|
? `${row.detail} — ${note}`
|
|
140
214
|
: row.detail;
|
|
@@ -158,9 +232,9 @@ export function renderRecap(plan, lead = "Setup", style = defaultStyle()) {
|
|
|
158
232
|
const lines = [
|
|
159
233
|
style.bold(`${lead}: ${configured} of ${accountable} targets configured — ${scopePhrase(plan.scope)}`),
|
|
160
234
|
];
|
|
161
|
-
for (const [
|
|
235
|
+
for (const [scope, rows] of byScope(plan)) {
|
|
162
236
|
if (plan.scope === "both")
|
|
163
|
-
lines.push(style.bold(` ${
|
|
237
|
+
lines.push(style.bold(` ${SCOPE_LABELS[scope]}`));
|
|
164
238
|
for (const row of rows) {
|
|
165
239
|
lines.push(` ${renderProgressLine(row, idWidth, style)}`);
|
|
166
240
|
const remedy = row.outcome?.remedy;
|
|
@@ -168,7 +242,7 @@ export function renderRecap(plan, lead = "Setup", style = defaultStyle()) {
|
|
|
168
242
|
lines.push(` ${style.dim(remedy)}`);
|
|
169
243
|
}
|
|
170
244
|
}
|
|
171
|
-
lines.push("", style.dim(`
|
|
245
|
+
lines.push("", style.dim(`Check this again any time with \`${BIN_NAME} doctor\`.`));
|
|
172
246
|
return lines.join("\n");
|
|
173
247
|
}
|
|
174
248
|
/** The condensed Markdown form — the same rows, one bullet each. */
|
|
@@ -179,14 +253,18 @@ export function renderPlanLlm(plan, lead = "Setup") {
|
|
|
179
253
|
// Before a run there is no outcome to report, so the row shows its ACTION
|
|
180
254
|
// behind a neutral marker. Reusing the `noop` glyph here painted every row
|
|
181
255
|
// of an unapplied plan — skips included — with a green check.
|
|
182
|
-
const glyph = status === undefined ? NOT_RUN_GLYPH :
|
|
256
|
+
const glyph = status === undefined ? NOT_RUN_GLYPH : OUTCOME_GLYPHS[status];
|
|
183
257
|
const state = status ?? row.action;
|
|
184
|
-
lines.push(`- ${glyph} **${row.target}** (${row.
|
|
258
|
+
lines.push(`- ${glyph} **${row.target}** (${row.scope}): ${state} — ${detailCell(row)}`);
|
|
185
259
|
for (const child of row.children ?? []) {
|
|
186
|
-
lines.push(` - ${childCell(child)}`);
|
|
260
|
+
lines.push(` - ${childCell(row, child)}`);
|
|
261
|
+
}
|
|
262
|
+
// `fix:` for a row that failed, `next:` for one that skipped — a skip is
|
|
263
|
+
// not a fault, and labelling its instruction as a repair is what teaches a
|
|
264
|
+
// reader to treat skips as failures.
|
|
265
|
+
if (row.outcome?.remedy) {
|
|
266
|
+
lines.push(` - _${outcomeRemedyWord(row.outcome.status)}:_ ${row.outcome.remedy}`);
|
|
187
267
|
}
|
|
188
|
-
if (row.outcome?.remedy)
|
|
189
|
-
lines.push(` - _fix:_ ${row.outcome.remedy}`);
|
|
190
268
|
}
|
|
191
269
|
return lines.join("\n");
|
|
192
270
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.render.js","sourceRoot":"","sources":["../../../../src/capabilities/setup/plan.render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"plan.render.js","sourceRoot":"","sources":["../../../../src/capabilities/setup/plan.render.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The plan REPLACED a tagged result union with one member per sub-verb, each
|
|
6
6
|
* rendering its own sentence in its own vocabulary. That union could not
|
|
7
|
-
* describe a run that touched several targets in two
|
|
7
|
+
* describe a run that touched several targets in two scopes, so the run-all
|
|
8
8
|
* reported a list of step names and nothing about what any of them did. One
|
|
9
9
|
* structure with one renderer is what makes the preview, the progress lines and
|
|
10
10
|
* the recap agree by construction rather than by review.
|