@tacuchi/agent-workflow-cli 20.26.0 → 21.1.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.
Files changed (220) hide show
  1. package/README.md +2 -1
  2. package/dist/adapters/node-file-system.js +3 -0
  3. package/dist/adapters/node-file-system.js.map +1 -1
  4. package/dist/application/capability/compose.js +161 -0
  5. package/dist/application/capability/compose.js.map +1 -0
  6. package/dist/application/capability/descriptor-loader.js +109 -0
  7. package/dist/application/capability/descriptor-loader.js.map +1 -0
  8. package/dist/application/capability/design-handler.js +299 -0
  9. package/dist/application/capability/design-handler.js.map +1 -0
  10. package/dist/application/capability/dispatcher.js +312 -0
  11. package/dist/application/capability/dispatcher.js.map +1 -0
  12. package/dist/application/capability/durable-effect.js +220 -0
  13. package/dist/application/capability/durable-effect.js.map +1 -0
  14. package/dist/application/capability/installed-inventory.js +168 -0
  15. package/dist/application/capability/installed-inventory.js.map +1 -0
  16. package/dist/application/capability/readiness.js +204 -0
  17. package/dist/application/capability/readiness.js.map +1 -0
  18. package/dist/application/capability/resolution.js +264 -0
  19. package/dist/application/capability/resolution.js.map +1 -0
  20. package/dist/application/capability/wrapper.js +187 -0
  21. package/dist/application/capability/wrapper.js.map +1 -0
  22. package/dist/application/context/manifest.js +11 -5
  23. package/dist/application/context/manifest.js.map +1 -1
  24. package/dist/application/context/measure.js +5 -2
  25. package/dist/application/context/measure.js.map +1 -1
  26. package/dist/application/context/plan-service.js +6 -6
  27. package/dist/application/context/plan-service.js.map +1 -1
  28. package/dist/application/design/design-bundle-service.js +148 -0
  29. package/dist/application/design/design-bundle-service.js.map +1 -0
  30. package/dist/application/design/design-gate-service.js +246 -0
  31. package/dist/application/design/design-gate-service.js.map +1 -0
  32. package/dist/application/design/design-graph-service.js +85 -0
  33. package/dist/application/design/design-graph-service.js.map +1 -0
  34. package/dist/application/design/design-index-service.js +132 -0
  35. package/dist/application/design/design-index-service.js.map +1 -0
  36. package/dist/application/design/design-proposal-service.js +69 -0
  37. package/dist/application/design/design-proposal-service.js.map +1 -0
  38. package/dist/application/design/design-publish-service.js +756 -0
  39. package/dist/application/design/design-publish-service.js.map +1 -0
  40. package/dist/application/design/design-record-service.js +100 -0
  41. package/dist/application/design/design-record-service.js.map +1 -0
  42. package/dist/application/design/design-resolver-service.js +165 -0
  43. package/dist/application/design/design-resolver-service.js.map +1 -0
  44. package/dist/application/flow/advance.js +533 -0
  45. package/dist/application/flow/advance.js.map +1 -0
  46. package/dist/application/flow/flow-service.js +65 -0
  47. package/dist/application/flow/flow-service.js.map +1 -0
  48. package/dist/application/flow/run-projection.js +80 -0
  49. package/dist/application/flow/run-projection.js.map +1 -0
  50. package/dist/application/flow/run-state-service.js +107 -0
  51. package/dist/application/flow/run-state-service.js.map +1 -0
  52. package/dist/application/flow/submit.js +423 -0
  53. package/dist/application/flow/submit.js.map +1 -0
  54. package/dist/application/resume-service.js +46 -14
  55. package/dist/application/resume-service.js.map +1 -1
  56. package/dist/application/self/install-skill.js +11 -0
  57. package/dist/application/self/install-skill.js.map +1 -1
  58. package/dist/application/self/uninstall.js +21 -0
  59. package/dist/application/self/uninstall.js.map +1 -1
  60. package/dist/application/semantic-operation/protocol.js +18 -12
  61. package/dist/application/semantic-operation/protocol.js.map +1 -1
  62. package/dist/application/semantic-operation/publish.js +56 -9
  63. package/dist/application/semantic-operation/publish.js.map +1 -1
  64. package/dist/application/skills-resolver-service.js +27 -6
  65. package/dist/application/skills-resolver-service.js.map +1 -1
  66. package/dist/application/status-service.js +5 -1
  67. package/dist/application/status-service.js.map +1 -1
  68. package/dist/application/workline-index-service.js +6 -0
  69. package/dist/application/workline-index-service.js.map +1 -1
  70. package/dist/application/workspace-init-service.js +22 -2
  71. package/dist/application/workspace-init-service.js.map +1 -1
  72. package/dist/cli/commands/capability.js +182 -0
  73. package/dist/cli/commands/capability.js.map +1 -0
  74. package/dist/cli/commands/designs.js +110 -0
  75. package/dist/cli/commands/designs.js.map +1 -0
  76. package/dist/cli/commands/flow.js +71 -0
  77. package/dist/cli/commands/flow.js.map +1 -0
  78. package/dist/cli/commands/index.js +6 -0
  79. package/dist/cli/commands/index.js.map +1 -1
  80. package/dist/cli/commands/resume.js +8 -0
  81. package/dist/cli/commands/resume.js.map +1 -1
  82. package/dist/cli/commands/skills.js +55 -2
  83. package/dist/cli/commands/skills.js.map +1 -1
  84. package/dist/cli/commands/status.js +50 -0
  85. package/dist/cli/commands/status.js.map +1 -1
  86. package/dist/cli/help-groups.js +9 -0
  87. package/dist/cli/help-groups.js.map +1 -1
  88. package/dist/cli/parser.js +7 -0
  89. package/dist/cli/parser.js.map +1 -1
  90. package/dist/cli/tui/data/workflow-content.js +5 -0
  91. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  92. package/dist/cli/tui/tabs/workflow-tab.js +5 -1
  93. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  94. package/dist/domain/capability/descriptor.js +553 -0
  95. package/dist/domain/capability/descriptor.js.map +1 -0
  96. package/dist/domain/capability/effects.js +90 -0
  97. package/dist/domain/capability/effects.js.map +1 -0
  98. package/dist/domain/capability/protocol.js +494 -0
  99. package/dist/domain/capability/protocol.js.map +1 -0
  100. package/dist/domain/contract-reader.js +84 -0
  101. package/dist/domain/contract-reader.js.map +1 -0
  102. package/dist/domain/design/adapter.js +161 -0
  103. package/dist/domain/design/adapter.js.map +1 -0
  104. package/dist/domain/design/artifact-body.js +223 -0
  105. package/dist/domain/design/artifact-body.js.map +1 -0
  106. package/dist/domain/design/artifact.js +750 -0
  107. package/dist/domain/design/artifact.js.map +1 -0
  108. package/dist/domain/design/baseline.js +359 -0
  109. package/dist/domain/design/baseline.js.map +1 -0
  110. package/dist/domain/design/capability.js +310 -0
  111. package/dist/domain/design/capability.js.map +1 -0
  112. package/dist/domain/design/closure.js +161 -0
  113. package/dist/domain/design/closure.js.map +1 -0
  114. package/dist/domain/design/direct.js +108 -0
  115. package/dist/domain/design/direct.js.map +1 -0
  116. package/dist/domain/design/external-send.js +65 -0
  117. package/dist/domain/design/external-send.js.map +1 -0
  118. package/dist/domain/design/governance.js +298 -0
  119. package/dist/domain/design/governance.js.map +1 -0
  120. package/dist/domain/design/identity.js +145 -0
  121. package/dist/domain/design/identity.js.map +1 -0
  122. package/dist/domain/design/manifest.js +552 -0
  123. package/dist/domain/design/manifest.js.map +1 -0
  124. package/dist/domain/design/maturity.js +305 -0
  125. package/dist/domain/design/maturity.js.map +1 -0
  126. package/dist/domain/design/naming.js +117 -0
  127. package/dist/domain/design/naming.js.map +1 -0
  128. package/dist/domain/design/offline.js +92 -0
  129. package/dist/domain/design/offline.js.map +1 -0
  130. package/dist/domain/design/profiles.js +212 -0
  131. package/dist/domain/design/profiles.js.map +1 -0
  132. package/dist/domain/design/projections.js +165 -0
  133. package/dist/domain/design/projections.js.map +1 -0
  134. package/dist/domain/design/proposal.js +234 -0
  135. package/dist/domain/design/proposal.js.map +1 -0
  136. package/dist/domain/design/reference.js +234 -0
  137. package/dist/domain/design/reference.js.map +1 -0
  138. package/dist/domain/design/render-bundle.js +0 -0
  139. package/dist/domain/design/render-bundle.js.map +1 -0
  140. package/dist/domain/design/rendition.js +472 -0
  141. package/dist/domain/design/rendition.js.map +1 -0
  142. package/dist/domain/design/retired.js +61 -0
  143. package/dist/domain/design/retired.js.map +1 -0
  144. package/dist/domain/design/revision.js +219 -0
  145. package/dist/domain/design/revision.js.map +1 -0
  146. package/dist/domain/design/secrets.js +86 -0
  147. package/dist/domain/design/secrets.js.map +1 -0
  148. package/dist/domain/design/sources.js +180 -0
  149. package/dist/domain/design/sources.js.map +1 -0
  150. package/dist/domain/design/validation.js +19 -0
  151. package/dist/domain/design/validation.js.map +1 -0
  152. package/dist/domain/design/visual-evidence.js +155 -0
  153. package/dist/domain/design/visual-evidence.js.map +1 -0
  154. package/dist/domain/design/yaml-subset.js +390 -0
  155. package/dist/domain/design/yaml-subset.js.map +1 -0
  156. package/dist/domain/flow/answer.js +459 -0
  157. package/dist/domain/flow/answer.js.map +1 -0
  158. package/dist/domain/flow/authority.js +2276 -0
  159. package/dist/domain/flow/authority.js.map +1 -0
  160. package/dist/domain/flow/authorization.js +62 -0
  161. package/dist/domain/flow/authorization.js.map +1 -0
  162. package/dist/domain/flow/directive.js +421 -0
  163. package/dist/domain/flow/directive.js.map +1 -0
  164. package/dist/domain/flow/rules.js +140 -0
  165. package/dist/domain/flow/rules.js.map +1 -0
  166. package/dist/domain/flow/run-state.js +317 -0
  167. package/dist/domain/flow/run-state.js.map +1 -0
  168. package/dist/domain/harnesses.js +21 -0
  169. package/dist/domain/harnesses.js.map +1 -1
  170. package/dist/domain/safe-path.js +23 -0
  171. package/dist/domain/safe-path.js.map +1 -0
  172. package/dist/domain/skills.js +26 -3
  173. package/dist/domain/skills.js.map +1 -1
  174. package/package.json +1 -1
  175. package/skills/w/SKILL.md +15 -13
  176. package/skills/w/artifacts/README.md +3 -4
  177. package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +2 -2
  178. package/skills/w/commands/plan-exec.md +11 -5
  179. package/skills/w/commands/plan-new.md +6 -2
  180. package/skills/w/commands/plan-refine.md +6 -3
  181. package/skills/w/commands/quick.md +2 -2
  182. package/skills/w/commands/spec-new.md +2 -2
  183. package/skills/w/commands/spec-refine.md +1 -0
  184. package/skills/w/context/MANIFEST.json +57 -9
  185. package/skills/w/harness/HARNESS.md +20 -0
  186. package/skills/w/loops/CHASSIS.md +11 -20
  187. package/skills/w/loops/CODE-POLICIES.md +18 -9
  188. package/skills/w/loops/README.md +1 -1
  189. package/skills/w/loops/plan-exec-loop/LOOP.md +126 -62
  190. package/skills/w/loops/plan-new-loop/LOOP.md +71 -73
  191. package/skills/w/loops/plan-refine-loop/LOOP.md +20 -10
  192. package/skills/w/loops/quick-loop/LOOP.md +18 -26
  193. package/skills/w/loops/spec-refine-loop/LOOP.md +28 -30
  194. package/skills/w/modules/COMPACTION.md +2 -6
  195. package/skills/w/modules/DB-SCRIPTS-ONLY.md +2 -0
  196. package/skills/w/modules/DESIGN-REFERENCES.md +113 -0
  197. package/skills/w/modules/IDEATION-GATE.md +3 -3
  198. package/skills/w/modules/PERSIST-ROUTING.md +1 -0
  199. package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +65 -0
  200. package/skills/w/modules/PLAN-INPUT.md +5 -3
  201. package/skills/w/modules/PLAN-REFINE-SPLIT.md +3 -1
  202. package/skills/w/modules/PLAN-SPLIT-GATE.md +7 -5
  203. package/skills/w/modules/PROMPT-CONTINUITY.md +3 -1
  204. package/skills/w/modules/SPEC-CHANGE-SHAPE.md +4 -4
  205. package/skills/w/roles/README.md +9 -5
  206. package/skills/w/roles/design/CONTRACT.md +80 -0
  207. package/skills/w/roles/design/ROLE.md +224 -0
  208. package/skills/w/schemas/capability-descriptor.schema.json +260 -0
  209. package/skills/w/schemas/design/design-baseline.v1.schema.json +71 -0
  210. package/skills/w/schemas/design/design-manifest.v1.schema.json +322 -0
  211. package/skills/w/schemas/design/design-render-bundle.v1.schema.json +191 -0
  212. package/skills/w/schemas/design/design-rendition.v1.schema.json +232 -0
  213. package/skills/w/schemas/design/design-review.v1.schema.json +72 -0
  214. package/skills/w/schemas/design/design-revocation.v1.schema.json +54 -0
  215. package/skills/w/schemas/design/ui-flow.v1.schema.json +211 -0
  216. package/skills/w/schemas/design/ui-screen.v1.schema.json +242 -0
  217. package/skills/w/artifacts/artifacts-design/SPEC.md +0 -42
  218. package/skills/w/modules/PLAN-DESIGN-SPECS.md +0 -12
  219. package/skills/w/modules/PLAN-REFINE-DESIGN-SPECS.md +0 -7
  220. package/skills/w/roles/ui-spec/ROLE.md +0 -147
@@ -0,0 +1,182 @@
1
+ import { dispatchCapability, registeredCapabilities, } from "../../application/capability/dispatcher.js";
2
+ // Side-effect import: registering the floor is what makes `design` dispatchable.
3
+ // Without it the registry is empty and every invocation answers CAPABILITY_UNKNOWN.
4
+ import "../../application/capability/design-handler.js";
5
+ import { WORKLINE_FLOWS, composeCapability, } from "../../application/capability/compose.js";
6
+ import { runHarness } from "../../application/dev-only-services.js";
7
+ import { renderReceiptHuman } from "../../domain/capability/protocol.js";
8
+ import { readRequiredStdin } from "../context-id.js";
9
+ import { fail, failSemantic } from "../render.js";
10
+ /**
11
+ * The shared entry both routes go through.
12
+ *
13
+ * The direct wrapper's `SKILL.md` calls this, and so does a composing flow. That
14
+ * is the mechanism — not a convention — behind "the two routes share a
15
+ * contract": there is one dispatcher and neither caller can reach the handlers
16
+ * without it.
17
+ *
18
+ * The four verbs are stages, never operations. `--operation` carries the
19
+ * operation, and a capability with a sixth one adds it to its descriptor
20
+ * without touching this file.
21
+ */
22
+ const VERBS = ["prepare", "continue", "validate", "apply"];
23
+ export const capabilityCommand = {
24
+ name: "capability",
25
+ describe: "Invoca una capacidad conformante por su contrato: prepare | continue | validate | apply. " +
26
+ "La operación viaja en --operation y cada intento devuelve envelope, output y receipt. " +
27
+ "Usage: aw capability prepare --capability design --operation validate --input package=DES-001.",
28
+ async execute(args, ctx) {
29
+ const verb = args.rest[0];
30
+ if (verb === undefined || !VERBS.includes(verb)) {
31
+ return fail("ARGS_INVALID", `uso: aw capability ${VERBS.join(" | ")} --capability <nombre> --operation <op>`);
32
+ }
33
+ const capability = args.values.get("capability") ?? args.valuesMulti.get("capability")?.[0];
34
+ if (capability === undefined) {
35
+ return fail("ARGS_INVALID", `falta --capability; registradas: ${registeredCapabilities().join(", ") || "(ninguna)"}`);
36
+ }
37
+ const inputs = parseInputs(args);
38
+ if (!inputs.ok)
39
+ return fail("ARGS_INVALID", inputs.why);
40
+ // Only the two stages that carry authored content or an approval read stdin.
41
+ // A `prepare` that waited on a pipe would hang a wrapper that has nothing to
42
+ // send yet.
43
+ const raw = verb === "prepare" ? "" : await readRequiredStdin();
44
+ const carried = parseCarried(raw, verb);
45
+ if (!carried.ok)
46
+ return fail("ARGS_INVALID", carried.why);
47
+ const input = dispatchInputFrom(args, verb, capability, inputs.values, carried);
48
+ // A `--flow` invocation goes through the COMPOSED adapter, never straight to
49
+ // the dispatcher: the flow→operation map is the authorization, and a caller
50
+ // that reached the dispatcher directly would be a flow with no boundary.
51
+ const flow = args.values.get("flow");
52
+ if (flow !== undefined && !isWorklineFlow(flow)) {
53
+ return fail("ARGS_INVALID", `--flow no reconoce '${flow}'; los flows son: ${WORKLINE_FLOWS.join(", ")}`);
54
+ }
55
+ const dispatchContext = await ctx0(ctx);
56
+ const result = flow === undefined
57
+ ? await dispatchCapability(input, dispatchContext)
58
+ : await composeCapability({ ...input, flow: flow }, dispatchContext);
59
+ if (!result.ok)
60
+ return failSemantic(result.failure);
61
+ return { ok: true, data: result.attempt, exitCode: 0 };
62
+ },
63
+ renderHuman(result) {
64
+ // Derived from the same receipt the JSON carries — never a second narrative.
65
+ if (result.data === undefined)
66
+ return "";
67
+ return `${renderReceiptHuman(result.data.receipt)}\n`;
68
+ },
69
+ };
70
+ /**
71
+ * Assemble the dispatch input from flags and whatever the previous stage
72
+ * carried. Kept apart from `execute` so the command body stays about the two
73
+ * things it owns: reading the stage and reporting the attempt.
74
+ */
75
+ function dispatchInputFrom(args, verb, capability, inputs, carried) {
76
+ const operation = args.values.get("operation");
77
+ const approval = args.values.get("approval");
78
+ const flow = args.values.get("flow");
79
+ return {
80
+ verb,
81
+ capability,
82
+ ...(operation !== undefined ? { operation } : {}),
83
+ route: flow === undefined ? "direct" : "compose",
84
+ flow: flow ?? null,
85
+ inputs,
86
+ target: args.values.get("target") ?? null,
87
+ base: args.values.get("base") ?? null,
88
+ profile: args.values.get("profile") ?? null,
89
+ sensitiveSources: args.flags.has("--sensitive-sources"),
90
+ parent: carried.parent,
91
+ request: carried.request,
92
+ plan: carried.plan,
93
+ pin: carried.pin,
94
+ ...(approval !== undefined
95
+ ? { approval: { digest: approval, granted: carried.plan?.requires_approval ?? [] } }
96
+ : {}),
97
+ answer: carried.answer,
98
+ };
99
+ }
100
+ /**
101
+ * The dispatch context, assembled once from the CLI context.
102
+ *
103
+ * `workspace` is null unless this really IS a Workline workspace — the same
104
+ * rule the rest of the repo uses: `.<ns>/` present in the root. Handing the cwd
105
+ * over unconditionally made "outside a workspace" unreachable in production,
106
+ * so the explicit-root path could only ever be exercised by a test that passed
107
+ * null by hand. A smoke run from `/tmp` is what surfaced it.
108
+ */
109
+ async function ctx0(ctx) {
110
+ const inWorkspace = await ctx.fs.exists(ctx.paths.cwdRoot());
111
+ return {
112
+ fs: ctx.fs,
113
+ env: ctx.env,
114
+ paths: ctx.paths,
115
+ workspace: inWorkspace ? ctx.paths.workspaceDir() : null,
116
+ host: runHarness((k) => ctx.env.get(k)).harness,
117
+ };
118
+ }
119
+ function isWorklineFlow(value) {
120
+ return WORKLINE_FLOWS.includes(value);
121
+ }
122
+ /**
123
+ * `--input name=value`, repeatable. Provenance is `caller` because that is the
124
+ * truth: a value typed on a command line came from whoever typed it, and
125
+ * claiming a locator or a digest for it would be a verifiability nobody has.
126
+ */
127
+ function parseInputs(args) {
128
+ const raw = args.valuesMulti.get("input") ?? [];
129
+ const single = args.values.get("input");
130
+ const all = single === undefined ? raw : [...raw, single];
131
+ const values = [];
132
+ for (const entry of all) {
133
+ const eq = entry.indexOf("=");
134
+ if (eq <= 0)
135
+ return { ok: false, why: `--input espera 'nombre=valor', llegó '${entry}'` };
136
+ values.push({
137
+ name: entry.slice(0, eq),
138
+ value: entry.slice(eq + 1),
139
+ provenance: { kind: "text", origin: "caller", seal: null, sensitivity: "public" },
140
+ });
141
+ }
142
+ return { ok: true, values };
143
+ }
144
+ /**
145
+ * What a stage receives from the previous one, by stdin.
146
+ *
147
+ * `continue` needs the attempt it answers; `validate` needs the request plus the
148
+ * authored answer; `apply` needs the request and the plan. Carrying them instead
149
+ * of rebuilding is what makes the chain verifiable: the parent's digest is
150
+ * re-sealed before it is trusted.
151
+ */
152
+ function parseCarried(raw, verb) {
153
+ const empty = {
154
+ ok: true,
155
+ parent: null,
156
+ request: null,
157
+ plan: null,
158
+ pin: null,
159
+ answer: null,
160
+ };
161
+ if (raw.trim().length === 0) {
162
+ if (verb === "prepare")
163
+ return empty;
164
+ return { ok: false, why: `'${verb}' lee por stdin el estado del intento anterior` };
165
+ }
166
+ let parsed;
167
+ try {
168
+ parsed = JSON.parse(raw);
169
+ }
170
+ catch {
171
+ return { ok: false, why: "lo que llegó por stdin no es un único objeto JSON" };
172
+ }
173
+ return {
174
+ ok: true,
175
+ parent: (parsed.parent ?? null),
176
+ request: (parsed.request ?? null),
177
+ plan: (parsed.plan ?? null),
178
+ pin: (parsed.pin ?? null),
179
+ answer: parsed.answer === undefined ? null : JSON.stringify(parsed.answer),
180
+ };
181
+ }
182
+ //# sourceMappingURL=capability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.js","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { gatePlanDesign, } from "../../application/design/design-gate-service.js";
2
+ import { readDesignIndex, resolveDesignPackage, } from "../../application/design/design-index-service.js";
3
+ import { fail } from "../render.js";
4
+ export const designsCommand = {
5
+ name: "designs",
6
+ describe: "List the UI Design Packages under docs/designs/, resolve one by identity, or run " +
7
+ "the plan-exec precondition gate over a plan. Resolution goes through the manifest " +
8
+ "id, never the folder: a renamed or moved package still resolves. Usage: aw designs " +
9
+ "[--id DES-NNN] [--plan docs/plans/PPP-plan-<slug>.md] [--require-approval].",
10
+ async execute(args, ctx) {
11
+ const plan = args.values.get("plan");
12
+ if (plan !== undefined)
13
+ return gate(plan, args, ctx);
14
+ const index = await readDesignIndex(ctx.fs, ctx.paths.workspaceDir());
15
+ const id = args.values.get("id");
16
+ if (id === undefined) {
17
+ // The listing answers "what exists and where"; the whole catalog of every
18
+ // package would drown that. `--id` keeps it, because that IS the detail view.
19
+ const packages = index.packages.map((p) => ({ ...p, manifest: null }));
20
+ return { ok: true, data: { ...index, packages }, exitCode: 0 };
21
+ }
22
+ const found = resolveDesignPackage(index, id);
23
+ if (found === null) {
24
+ return fail("DESIGN_PACKAGE_NOT_FOUND", `no hay ningún package con identidad ${id}`, {
25
+ action: `revisá 'aw designs' para ver las identidades publicadas bajo ${index.root}/`,
26
+ });
27
+ }
28
+ return { ok: true, data: { package: found }, exitCode: 0 };
29
+ },
30
+ renderHuman(result, context) {
31
+ const data = result.data;
32
+ if (data !== undefined && "verdicts" in data)
33
+ return renderGate(data);
34
+ if (data === undefined || !("packages" in data))
35
+ return `${JSON.stringify(data, null, 2)}\n`;
36
+ if (data.packages.length === 0)
37
+ return `Sin packages de diseño bajo ${data.root}/.\n`;
38
+ const lines = data.packages.map((pkg) => {
39
+ const baseline = pkg.current_baseline === null ? "sin baseline" : `@r${pkg.current_baseline.revision}`;
40
+ const identity = pkg.id ?? "(sin identidad)";
41
+ const head = `${identity} ${baseline} ${pkg.path}`;
42
+ if (pkg.ok || !context.detail)
43
+ return head;
44
+ return [
45
+ head,
46
+ ...pkg.failures.map((f) => ` ✗ ${f.artifact}: ${f.message} → ${f.action}`),
47
+ ].join("\n");
48
+ });
49
+ const broken = data.packages.filter((p) => !p.ok).length;
50
+ const footer = [];
51
+ // El diagnóstico ya está arriba cuando --detail está puesto: repetir el
52
+ // consejo de usarlo sería decirle al usuario que haga lo que ya hizo.
53
+ if (broken > 0 && !context.detail)
54
+ footer.push(`${broken} package(s) sin validar — corré con --detail para el diagnóstico.`);
55
+ for (const failure of data.failures)
56
+ footer.push(`✗ ${failure.message} (${failure.artifact}) → ${failure.action}`);
57
+ const body = [...lines, ...(footer.length > 0 ? ["", ...footer] : [])].join("\n");
58
+ return `${body.trimEnd()}\n`;
59
+ },
60
+ };
61
+ /**
62
+ * The precondition gate as a command result.
63
+ *
64
+ * A blocked gate is `ok:false` on purpose: fail-closed only helps if the exit
65
+ * code says "do not implement this". The whole report travels in `data`, and
66
+ * `action` carries every blocking cause — the failure projection is the only one
67
+ * the host renders for `ok:false`, so a summary line there would drop exactly
68
+ * the artifact-and-action the gate exists to hand over.
69
+ */
70
+ async function gate(plan, args, ctx) {
71
+ const report = await gatePlanDesign(ctx.fs, ctx.paths.workspaceDir(), plan, {
72
+ requireApproval: args.flags.has("--require-approval"),
73
+ });
74
+ if (!report.blocked)
75
+ return { ok: true, data: report, exitCode: 0 };
76
+ const blocking = report.verdicts
77
+ .filter((v) => !v.ready)
78
+ .flatMap((v) => v.failures.map((f) => ({ owner: v.owner.label, failure: f })))
79
+ .concat(report.failures.map((f) => ({ owner: plan, failure: f })));
80
+ return fail(blocking[0]?.failure.code ?? "DESIGN_GATE_BLOCKED", `${plan}: ${blocking.length} referencia(s) de diseño bloquean la ejecución`, {
81
+ ...report,
82
+ action: [
83
+ ...blocking.map(({ owner, failure }) => `[${owner}] ${failure.code}: ${failure.message}\n → ${failure.action}`),
84
+ "No implementes estas tareas. plan-exec no rediseña — la corrección va a PLAN REFINE (o a SPEC REFINE si cambia comportamiento o aceptación).",
85
+ ].join("\n"),
86
+ });
87
+ }
88
+ /**
89
+ * The GREEN gate. A blocked one never reaches here — the host renders `ok:false`
90
+ * through the failure projection — so this says what a passing gate has to say:
91
+ * which references were checked, and every warning that does not stop the work.
92
+ */
93
+ function renderGate(report) {
94
+ if (report.verdicts.length === 0) {
95
+ return `${report.plan} — sin diseño referenciado: el gate no aplica.\n`;
96
+ }
97
+ const pinned = report.declared.map((d) => `${d.baseline.package}@r${d.baseline.revision}`);
98
+ const lines = [
99
+ `${report.plan} — ${report.verdicts.length} referencia(s) de tarea · declara ${pinned.join(", ") || "(ninguna)"}`,
100
+ "",
101
+ ];
102
+ for (const verdict of report.verdicts) {
103
+ lines.push(` ✓ ${verdict.owner.label} ${verdict.raw}`);
104
+ for (const notice of verdict.notices)
105
+ lines.push(` ⚠ ${notice}`);
106
+ }
107
+ lines.push("", "Todas las referencias resuelven en 'handoff': podés implementar.");
108
+ return `${lines.join("\n").trimEnd()}\n`;
109
+ }
110
+ //# sourceMappingURL=designs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designs.js","sourceRoot":"","sources":["../../../src/cli/commands/designs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { WORKLINE_FLOWS } from "../../application/capability/compose.js";
2
+ import { advanceFlow } from "../../application/flow/flow-service.js";
3
+ import { submitFlow } from "../../application/flow/submit.js";
4
+ import { renderDirectiveHuman } from "../../domain/flow/directive.js";
5
+ import { readContextId, readRequiredStdin } from "../context-id.js";
6
+ import { fail, failSemantic, failSessionResolution } from "../render.js";
7
+ /**
8
+ * The deterministic direction engine, as a public command.
9
+ *
10
+ * Sibling of `aw capability`, and for the same reason: one entry both the agent
11
+ * and a host adapter reach, so neither can re-derive a transition on its own.
12
+ * `advance` applies every consecutive transition the CLI owns and returns the
13
+ * first boundary it does not; `submit` (the second verb) brings an answer, a
14
+ * choice or an approval back and is delivered by the phases that own the
15
+ * boundaries.
16
+ *
17
+ * The directive travels with `ok: true` plus its outcome — with `ok: false` the
18
+ * host never calls `renderHuman`, and a boundary the person cannot see is a
19
+ * boundary that did not happen.
20
+ */
21
+ const VERBS = ["advance", "submit"];
22
+ export const flowCommand = {
23
+ name: "flow",
24
+ describe: `Avanza un recorrido de Workline hasta su primera frontera no determinista y devuelve su directiva. Verbos: ${VERBS.join(" | ")}. La respuesta de submit entra por stdin como JSON y la aprobación de efecto viaja aparte en --approval. Usage: aw flow advance --session <código> [--flow <flow> --adopt].`,
25
+ async execute(args, ctx) {
26
+ const verb = args.rest[0];
27
+ if (verb === undefined || !VERBS.includes(verb)) {
28
+ return fail("ARGS_INVALID", `uso: aw flow ${VERBS.join(" | ")} --session <código> [--flow <flow> --adopt] [--approval <digest>]`);
29
+ }
30
+ const flow = args.values.get("flow");
31
+ if (flow !== undefined && !WORKLINE_FLOWS.includes(flow)) {
32
+ return fail("ARGS_INVALID", `--flow no reconoce '${flow}'; los flows son: ${WORKLINE_FLOWS.join(", ")}`);
33
+ }
34
+ const code = args.values.get("session");
35
+ const contextId = readContextId(ctx.env);
36
+ const session = {
37
+ ...(code !== undefined ? { code } : {}),
38
+ ...(contextId !== undefined ? { contextId } : {}),
39
+ };
40
+ // Only `submit` reads stdin: an `advance` that waited on a pipe would hang a
41
+ // caller that has nothing to send yet — the same split `capability` makes
42
+ // between `prepare` and the stages that carry content.
43
+ if (verb === "submit") {
44
+ const approval = args.values.get("approval");
45
+ return project(await submitFlow(ctx.fs, ctx.paths, {
46
+ ...session,
47
+ raw: await readRequiredStdin(),
48
+ approval: approval ?? null,
49
+ }));
50
+ }
51
+ return project(await advanceFlow(ctx.fs, ctx.paths, {
52
+ ...session,
53
+ ...(flow !== undefined ? { flow } : {}),
54
+ adopt: args.flags.has("--adopt"),
55
+ }));
56
+ },
57
+ renderHuman(result) {
58
+ // Derived from the same directive the JSON carries — never a second narrative.
59
+ if (result.data === undefined)
60
+ return "";
61
+ return `${renderDirectiveHuman(result.data)}\n`;
62
+ },
63
+ };
64
+ function project(result) {
65
+ if (result.ok)
66
+ return { ok: true, data: result.directive, exitCode: 0 };
67
+ if ("session" in result)
68
+ return failSessionResolution(result.session);
69
+ return failSemantic(result.failure);
70
+ }
71
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../src/cli/commands/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAA0B,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAC7F,OAAO,EAAyB,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGpE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAGzE;;;;;;;;;;;;;GAaG;AAEH,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAC;AAE7C,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,8GAA8G,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,6KAA6K;IAEtT,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,GAAe;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,SAAS,IAAI,CAAE,KAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACvE,OAAO,IAAI,CACT,cAAc,EACd,gBAAgB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,mEAAmE,CACrE,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAE,cAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChF,OAAO,IAAI,CACT,cAAc,EACd,uBAAuB,IAAI,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5C,CAAC;QACpC,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG;YACd,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC;QAEF,6EAA6E;QAC7E,0EAA0E;QAC1E,uDAAuD;QACvD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7C,OAAO,OAAO,CACZ,MAAM,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE;gBAClC,GAAG,OAAO;gBACV,GAAG,EAAE,MAAM,iBAAiB,EAAE;gBAC9B,QAAQ,EAAE,QAAQ,IAAI,IAAI;aAC3B,CAAC,CACH,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CACZ,MAAM,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE;YACnC,GAAG,OAAO;YACV,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;SACjC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,MAAoC;QAC9C,+EAA+E;QAC/E,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACzC,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,CAAC;CACF,CAAC;AAEF,SAAS,OAAO,CAAC,MAA4C;IAC3D,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACxE,IAAI,SAAS,IAAI,MAAM;QACrB,OAAO,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAiC,CAAC;IAC/E,OAAO,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -4,15 +4,18 @@
4
4
  // global-help describe map is built from it, and `main.ts` registers this array
5
5
  // directly (order here = order in the grouped `--help` listing).
6
6
  import { bootstrapDsnCommand } from "./bootstrap-dsn.js";
7
+ import { capabilityCommand } from "./capability.js";
7
8
  import { checkBranchCommand } from "./check-branch.js";
8
9
  import { checkpointReadCommand } from "./checkpoint-read.js";
9
10
  import { autoCompactOnCloseCommand, checkpointWriteCommand } from "./checkpoint-write.js";
10
11
  import { codeScanCommand } from "./code-scan.js";
11
12
  import { contextBudgetCommand } from "./context-budget.js";
12
13
  import { contextPlanCommand } from "./context-plan.js";
14
+ import { designsCommand } from "./designs.js";
13
15
  import { harnessCommand, logsCommand, nextNumberCommand, profilesCommand } from "./dev-only.js";
14
16
  import { exportDiagramsCommand, exportManualsCommand, exportReportsCommand, exportScriptsCommand, } from "./export.js";
15
17
  import { fixGitCommand } from "./fix-git.js";
18
+ import { flowCommand } from "./flow.js";
16
19
  import { generateLaunchCommand } from "./generate-launch.js";
17
20
  import { gitFlowCommand } from "./git-flow.js";
18
21
  import { historyUpdateCommand } from "./history-update.js";
@@ -63,6 +66,9 @@ export const ALL_COMMANDS = [
63
66
  contextBudgetCommand,
64
67
  contextPlanCommand,
65
68
  skillsCommand,
69
+ capabilityCommand,
70
+ flowCommand,
71
+ designsCommand,
66
72
  sourcesCommand,
67
73
  generateLaunchCommand,
68
74
  setWorkingBranchCommand,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"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"}
@@ -59,10 +59,18 @@ function renderProposal(proposal, detail) {
59
59
  ` Siguiente ${proposal.next}`,
60
60
  ` Comando ${proposal.command}`,
61
61
  ];
62
+ // Shown without `--detail`: a reference that does not resolve changes WHICH
63
+ // command is next, so hiding it behind a flag would hide the actual blocker.
64
+ for (const design of proposal.design ?? []) {
65
+ lines.push(` Diseño [${design.state}] ${design.baseline}${because(design.detail)}`);
66
+ }
62
67
  if (detail)
63
68
  lines.push(` Ruta ${proposal.file}`);
64
69
  return lines.join("\n");
65
70
  }
71
+ function because(text) {
72
+ return text === null ? "" : ` — ${text}`;
73
+ }
66
74
  function renderCandidates(candidates, action, detail) {
67
75
  const lines = [action, ""];
68
76
  for (const candidate of candidates) {
@@ -1 +1 @@
1
- {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/cli/commands/resume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/cli/commands/resume.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,69 @@
1
+ import "../../application/capability/design-handler.js";
2
+ import { capabilityReadiness, } from "../../application/capability/readiness.js";
3
+ import { runHarness } from "../../application/dev-only-services.js";
1
4
  import { checkInstalledBindings, resolveSkills, } from "../../application/skills-resolver-service.js";
2
5
  export const skillsCommand = {
3
6
  name: "skills",
4
- describe: "Show resolved capability→skill bindings (skills.toml cascade).",
7
+ describe: "Show resolved capability→skill bindings (skills.toml cascade). Usage: aw skills [--detail] — " +
8
+ "con --detail agrega readiness por capacidad, exposición y operación, la instancia exacta o el " +
9
+ "floor, y la forma de invocación que el host soporta de verdad.",
5
10
  async execute(_args, ctx) {
6
11
  const resolution = await resolveSkills(ctx.fs, ctx.paths);
7
12
  const validation = await checkInstalledBindings(ctx.fs, ctx.env, resolution);
8
13
  const data = {
9
- ...resolution,
14
+ skills: resolution.skills,
15
+ sources: resolution.sources,
10
16
  bindingChecks: validation.checks,
11
17
  warnings: [...resolution.warnings, ...validation.warnings],
18
+ capabilities: await capabilityReadiness({
19
+ fs: ctx.fs,
20
+ env: ctx.env,
21
+ paths: ctx.paths,
22
+ host: runHarness((k) => ctx.env.get(k)).harness,
23
+ }),
12
24
  };
13
25
  return { ok: true, data, exitCode: 0 };
14
26
  },
27
+ /**
28
+ * The human projection of the SAME data. Nothing is re-derived: every line
29
+ * reads a field the structured form also carries, so the two cannot disagree.
30
+ */
31
+ renderHuman(result, context) {
32
+ const data = result.data;
33
+ if (data === undefined)
34
+ return "";
35
+ const lines = [];
36
+ for (const [role, resolved] of Object.entries(data.skills)) {
37
+ const bound = resolved.enabled ? resolved.skill : "off";
38
+ lines.push(`${role.padEnd(10)} ${String(bound).padEnd(14)} (${resolved.source})`);
39
+ }
40
+ for (const report of context.detail ? data.capabilities : []) {
41
+ lines.push("", ...renderReport(report));
42
+ }
43
+ for (const warning of data.warnings)
44
+ lines.push(`aviso: ${warning}`);
45
+ return `${lines.join("\n")}\n`;
46
+ },
15
47
  };
48
+ function renderReport(report) {
49
+ const lines = [`${report.capability} v${report.contract_version} — ${report.state}`];
50
+ if (report.reason !== null)
51
+ lines.push(` motivo: ${report.reason}`);
52
+ if (report.action !== null)
53
+ lines.push(` siguiente: ${report.action}`);
54
+ lines.push(` invocación (${report.invocation.host}): ${report.invocation.form ?? "no disponible"} — ${report.invocation.note}`);
55
+ lines.push(report.floor.running
56
+ ? ` ejecuta el floor incorporado (${report.floor.kind})`
57
+ : ` instancia: ${report.instance?.name ?? "—"}@${report.instance?.digest ?? "—"}`);
58
+ for (const [route, verdict] of Object.entries(report.exposures)) {
59
+ lines.push(` ${route}: ${verdict.state}${verdict.reason === null ? "" : ` — ${verdict.reason}`}`);
60
+ }
61
+ for (const op of report.operations) {
62
+ lines.push(` · ${op.operation.padEnd(9)} ${op.state.padEnd(13)} ${op.workspace} · efectos: ${op.effects.join(", ")}`);
63
+ }
64
+ for (const improvement of report.improvements) {
65
+ lines.push(` mejora ${improvement.name}: ${improvement.eligible ? "elegible" : `descartada — ${improvement.why}`}`);
66
+ }
67
+ return lines;
68
+ }
16
69
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,aAAa,GACd,MAAM,8CAA8C,CAAC;AAMtD,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,gEAAgE;IAC1E,KAAK,CAAC,OAAO,CAAC,KAAiB,EAAE,GAAe;QAC9C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG;YACX,GAAG,UAAU;YACb,aAAa,EAAE,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC;SAC3D,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,10 @@ export const statusCommand = {
24
24
  else {
25
25
  lines.push(...renderPipeline(data.pipeline));
26
26
  }
27
+ // A broken design reference is PENDING work, not history: it stays in the
28
+ // default view for the same reason an open plan does. Valid references and
29
+ // orphaned packages are inventory and wait for `--detail`.
30
+ lines.push(...renderDesignAlerts(data, lines.at(-1)));
27
31
  if (context.detail)
28
32
  lines.push("", ...renderDetail(data));
29
33
  return `${lines.join("\n").trimEnd()}\n`;
@@ -50,6 +54,46 @@ function renderPipeline(pipeline) {
50
54
  }
51
55
  return lines;
52
56
  }
57
+ /**
58
+ * Only what needs a hand: a reference that moved, and one that no longer
59
+ * resolves. `before` keeps the block one blank line away from whatever came
60
+ * before it, without stacking a second one when the pipeline already ended blank.
61
+ */
62
+ function renderDesignAlerts(data, before) {
63
+ const broken = data.designs.references.filter((r) => r.state !== "valid");
64
+ if (broken.length === 0)
65
+ return [];
66
+ const lines = before === "" ? [] : [""];
67
+ lines.push(`Diseño con referencias a reparar (${broken.length})`);
68
+ for (const reference of broken) {
69
+ lines.push(` [${reference.state}] ${reference.from} → ${reference.baseline}`);
70
+ if (reference.detail !== null)
71
+ lines.push(` ${reference.detail}`);
72
+ }
73
+ return lines;
74
+ }
75
+ function renderDesignGraph(data) {
76
+ const graph = data.designs;
77
+ if (graph.packages.length === 0 && graph.references.length === 0)
78
+ return [];
79
+ const { valid, stale, missing, orphaned } = graph.counts;
80
+ const lines = [
81
+ `Diseño: ${graph.packages.length} package(s) — ${valid} válida(s), ${stale} stale, ${missing} missing, ${orphaned} huérfano(s)`,
82
+ ];
83
+ for (const pkg of graph.packages) {
84
+ const revision = pkg.current_revision === null ? "sin baseline" : `@r${pkg.current_revision}`;
85
+ const broken = pkg.ok ? "" : " · manifest inválido";
86
+ lines.push(` · ${pkg.id ?? "(sin identidad)"} ${revision} ${pkg.path} [${pkg.state}]${broken}`);
87
+ }
88
+ for (const reference of graph.references) {
89
+ lines.push(` · ${reference.from} → ${reference.baseline} [${reference.state}]`);
90
+ // The roots ARE the graph's last hop: without them the chain stops at the
91
+ // package and nobody can see which screens a plan actually pinned.
92
+ for (const root of reference.roots)
93
+ lines.push(` ${root}`);
94
+ }
95
+ return lines;
96
+ }
53
97
  function renderDetail(data) {
54
98
  const done = data.plans.filter((p) => p.plan_state === "done");
55
99
  const lines = [
@@ -58,6 +102,11 @@ function renderDetail(data) {
58
102
  ];
59
103
  for (const session of data.sessions.active) {
60
104
  lines.push(` · ${session.folder} — ${session.summary} (${session.relative})`);
105
+ // A run stopped at a boundary is what that session is actually waiting on,
106
+ // and at an execution boundary the invocation is printed verbatim: whoever
107
+ // resumes must never have to reconstruct the command from prose.
108
+ if (session.flow !== null)
109
+ lines.push(` ${session.flow.summary}`);
61
110
  }
62
111
  if (data.discarded.length > 0) {
63
112
  lines.push(`Descartados: ${data.discarded.length}`);
@@ -69,6 +118,7 @@ function renderDetail(data) {
69
118
  if (unproven.length > 0) {
70
119
  lines.push(`Planes sin spec demostrada: ${unproven.map((p) => p.number).join(", ")}`);
71
120
  }
121
+ lines.push(...renderDesignGraph(data));
72
122
  return lines;
73
123
  }
74
124
  //# sourceMappingURL=status.js.map