@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.
- package/README.md +2 -1
- package/dist/adapters/node-file-system.js +3 -0
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/capability/compose.js +161 -0
- package/dist/application/capability/compose.js.map +1 -0
- package/dist/application/capability/descriptor-loader.js +109 -0
- package/dist/application/capability/descriptor-loader.js.map +1 -0
- package/dist/application/capability/design-handler.js +299 -0
- package/dist/application/capability/design-handler.js.map +1 -0
- package/dist/application/capability/dispatcher.js +312 -0
- package/dist/application/capability/dispatcher.js.map +1 -0
- package/dist/application/capability/durable-effect.js +220 -0
- package/dist/application/capability/durable-effect.js.map +1 -0
- package/dist/application/capability/installed-inventory.js +168 -0
- package/dist/application/capability/installed-inventory.js.map +1 -0
- package/dist/application/capability/readiness.js +204 -0
- package/dist/application/capability/readiness.js.map +1 -0
- package/dist/application/capability/resolution.js +264 -0
- package/dist/application/capability/resolution.js.map +1 -0
- package/dist/application/capability/wrapper.js +187 -0
- package/dist/application/capability/wrapper.js.map +1 -0
- package/dist/application/context/manifest.js +11 -5
- package/dist/application/context/manifest.js.map +1 -1
- package/dist/application/context/measure.js +5 -2
- package/dist/application/context/measure.js.map +1 -1
- package/dist/application/context/plan-service.js +6 -6
- package/dist/application/context/plan-service.js.map +1 -1
- package/dist/application/design/design-bundle-service.js +148 -0
- package/dist/application/design/design-bundle-service.js.map +1 -0
- package/dist/application/design/design-gate-service.js +246 -0
- package/dist/application/design/design-gate-service.js.map +1 -0
- package/dist/application/design/design-graph-service.js +85 -0
- package/dist/application/design/design-graph-service.js.map +1 -0
- package/dist/application/design/design-index-service.js +132 -0
- package/dist/application/design/design-index-service.js.map +1 -0
- package/dist/application/design/design-proposal-service.js +69 -0
- package/dist/application/design/design-proposal-service.js.map +1 -0
- package/dist/application/design/design-publish-service.js +756 -0
- package/dist/application/design/design-publish-service.js.map +1 -0
- package/dist/application/design/design-record-service.js +100 -0
- package/dist/application/design/design-record-service.js.map +1 -0
- package/dist/application/design/design-resolver-service.js +165 -0
- package/dist/application/design/design-resolver-service.js.map +1 -0
- package/dist/application/flow/advance.js +533 -0
- package/dist/application/flow/advance.js.map +1 -0
- package/dist/application/flow/flow-service.js +65 -0
- package/dist/application/flow/flow-service.js.map +1 -0
- package/dist/application/flow/run-projection.js +80 -0
- package/dist/application/flow/run-projection.js.map +1 -0
- package/dist/application/flow/run-state-service.js +107 -0
- package/dist/application/flow/run-state-service.js.map +1 -0
- package/dist/application/flow/submit.js +423 -0
- package/dist/application/flow/submit.js.map +1 -0
- package/dist/application/resume-service.js +46 -14
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/self/install-skill.js +11 -0
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/uninstall.js +21 -0
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/semantic-operation/protocol.js +18 -12
- package/dist/application/semantic-operation/protocol.js.map +1 -1
- package/dist/application/semantic-operation/publish.js +56 -9
- package/dist/application/semantic-operation/publish.js.map +1 -1
- package/dist/application/skills-resolver-service.js +27 -6
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/status-service.js +5 -1
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/workline-index-service.js +6 -0
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +22 -2
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/capability.js +182 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/designs.js +110 -0
- package/dist/cli/commands/designs.js.map +1 -0
- package/dist/cli/commands/flow.js +71 -0
- package/dist/cli/commands/flow.js.map +1 -0
- package/dist/cli/commands/index.js +6 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/resume.js +8 -0
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/skills.js +55 -2
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/status.js +50 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/help-groups.js +9 -0
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/parser.js +7 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +5 -0
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js +5 -1
- package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
- package/dist/domain/capability/descriptor.js +553 -0
- package/dist/domain/capability/descriptor.js.map +1 -0
- package/dist/domain/capability/effects.js +90 -0
- package/dist/domain/capability/effects.js.map +1 -0
- package/dist/domain/capability/protocol.js +494 -0
- package/dist/domain/capability/protocol.js.map +1 -0
- package/dist/domain/contract-reader.js +84 -0
- package/dist/domain/contract-reader.js.map +1 -0
- package/dist/domain/design/adapter.js +161 -0
- package/dist/domain/design/adapter.js.map +1 -0
- package/dist/domain/design/artifact-body.js +223 -0
- package/dist/domain/design/artifact-body.js.map +1 -0
- package/dist/domain/design/artifact.js +750 -0
- package/dist/domain/design/artifact.js.map +1 -0
- package/dist/domain/design/baseline.js +359 -0
- package/dist/domain/design/baseline.js.map +1 -0
- package/dist/domain/design/capability.js +310 -0
- package/dist/domain/design/capability.js.map +1 -0
- package/dist/domain/design/closure.js +161 -0
- package/dist/domain/design/closure.js.map +1 -0
- package/dist/domain/design/direct.js +108 -0
- package/dist/domain/design/direct.js.map +1 -0
- package/dist/domain/design/external-send.js +65 -0
- package/dist/domain/design/external-send.js.map +1 -0
- package/dist/domain/design/governance.js +298 -0
- package/dist/domain/design/governance.js.map +1 -0
- package/dist/domain/design/identity.js +145 -0
- package/dist/domain/design/identity.js.map +1 -0
- package/dist/domain/design/manifest.js +552 -0
- package/dist/domain/design/manifest.js.map +1 -0
- package/dist/domain/design/maturity.js +305 -0
- package/dist/domain/design/maturity.js.map +1 -0
- package/dist/domain/design/naming.js +117 -0
- package/dist/domain/design/naming.js.map +1 -0
- package/dist/domain/design/offline.js +92 -0
- package/dist/domain/design/offline.js.map +1 -0
- package/dist/domain/design/profiles.js +212 -0
- package/dist/domain/design/profiles.js.map +1 -0
- package/dist/domain/design/projections.js +165 -0
- package/dist/domain/design/projections.js.map +1 -0
- package/dist/domain/design/proposal.js +234 -0
- package/dist/domain/design/proposal.js.map +1 -0
- package/dist/domain/design/reference.js +234 -0
- package/dist/domain/design/reference.js.map +1 -0
- package/dist/domain/design/render-bundle.js +0 -0
- package/dist/domain/design/render-bundle.js.map +1 -0
- package/dist/domain/design/rendition.js +472 -0
- package/dist/domain/design/rendition.js.map +1 -0
- package/dist/domain/design/retired.js +61 -0
- package/dist/domain/design/retired.js.map +1 -0
- package/dist/domain/design/revision.js +219 -0
- package/dist/domain/design/revision.js.map +1 -0
- package/dist/domain/design/secrets.js +86 -0
- package/dist/domain/design/secrets.js.map +1 -0
- package/dist/domain/design/sources.js +180 -0
- package/dist/domain/design/sources.js.map +1 -0
- package/dist/domain/design/validation.js +19 -0
- package/dist/domain/design/validation.js.map +1 -0
- package/dist/domain/design/visual-evidence.js +155 -0
- package/dist/domain/design/visual-evidence.js.map +1 -0
- package/dist/domain/design/yaml-subset.js +390 -0
- package/dist/domain/design/yaml-subset.js.map +1 -0
- package/dist/domain/flow/answer.js +459 -0
- package/dist/domain/flow/answer.js.map +1 -0
- package/dist/domain/flow/authority.js +2276 -0
- package/dist/domain/flow/authority.js.map +1 -0
- package/dist/domain/flow/authorization.js +62 -0
- package/dist/domain/flow/authorization.js.map +1 -0
- package/dist/domain/flow/directive.js +421 -0
- package/dist/domain/flow/directive.js.map +1 -0
- package/dist/domain/flow/rules.js +140 -0
- package/dist/domain/flow/rules.js.map +1 -0
- package/dist/domain/flow/run-state.js +317 -0
- package/dist/domain/flow/run-state.js.map +1 -0
- package/dist/domain/harnesses.js +21 -0
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/safe-path.js +23 -0
- package/dist/domain/safe-path.js.map +1 -0
- package/dist/domain/skills.js +26 -3
- package/dist/domain/skills.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/SKILL.md +15 -13
- package/skills/w/artifacts/README.md +3 -4
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +2 -2
- package/skills/w/commands/plan-exec.md +11 -5
- package/skills/w/commands/plan-new.md +6 -2
- package/skills/w/commands/plan-refine.md +6 -3
- package/skills/w/commands/quick.md +2 -2
- package/skills/w/commands/spec-new.md +2 -2
- package/skills/w/commands/spec-refine.md +1 -0
- package/skills/w/context/MANIFEST.json +57 -9
- package/skills/w/harness/HARNESS.md +20 -0
- package/skills/w/loops/CHASSIS.md +11 -20
- package/skills/w/loops/CODE-POLICIES.md +18 -9
- package/skills/w/loops/README.md +1 -1
- package/skills/w/loops/plan-exec-loop/LOOP.md +126 -62
- package/skills/w/loops/plan-new-loop/LOOP.md +71 -73
- package/skills/w/loops/plan-refine-loop/LOOP.md +20 -10
- package/skills/w/loops/quick-loop/LOOP.md +18 -26
- package/skills/w/loops/spec-refine-loop/LOOP.md +28 -30
- package/skills/w/modules/COMPACTION.md +2 -6
- package/skills/w/modules/DB-SCRIPTS-ONLY.md +2 -0
- package/skills/w/modules/DESIGN-REFERENCES.md +113 -0
- package/skills/w/modules/IDEATION-GATE.md +3 -3
- package/skills/w/modules/PERSIST-ROUTING.md +1 -0
- package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +65 -0
- package/skills/w/modules/PLAN-INPUT.md +5 -3
- package/skills/w/modules/PLAN-REFINE-SPLIT.md +3 -1
- package/skills/w/modules/PLAN-SPLIT-GATE.md +7 -5
- package/skills/w/modules/PROMPT-CONTINUITY.md +3 -1
- package/skills/w/modules/SPEC-CHANGE-SHAPE.md +4 -4
- package/skills/w/roles/README.md +9 -5
- package/skills/w/roles/design/CONTRACT.md +80 -0
- package/skills/w/roles/design/ROLE.md +224 -0
- package/skills/w/schemas/capability-descriptor.schema.json +260 -0
- package/skills/w/schemas/design/design-baseline.v1.schema.json +71 -0
- package/skills/w/schemas/design/design-manifest.v1.schema.json +322 -0
- package/skills/w/schemas/design/design-render-bundle.v1.schema.json +191 -0
- package/skills/w/schemas/design/design-rendition.v1.schema.json +232 -0
- package/skills/w/schemas/design/design-review.v1.schema.json +72 -0
- package/skills/w/schemas/design/design-revocation.v1.schema.json +54 -0
- package/skills/w/schemas/design/ui-flow.v1.schema.json +211 -0
- package/skills/w/schemas/design/ui-screen.v1.schema.json +242 -0
- package/skills/w/artifacts/artifacts-design/SPEC.md +0 -42
- package/skills/w/modules/PLAN-DESIGN-SPECS.md +0 -12
- package/skills/w/modules/PLAN-REFINE-DESIGN-SPECS.md +0 -7
- 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
|
-
|
|
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;
|
|
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
|