@tacuchi/agent-workflow-cli 20.26.0 → 21.0.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 (110) hide show
  1. package/README.md +1 -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/design/design-gate-service.js +246 -0
  5. package/dist/application/design/design-gate-service.js.map +1 -0
  6. package/dist/application/design/design-graph-service.js +85 -0
  7. package/dist/application/design/design-graph-service.js.map +1 -0
  8. package/dist/application/design/design-index-service.js +132 -0
  9. package/dist/application/design/design-index-service.js.map +1 -0
  10. package/dist/application/design/design-publish-service.js +488 -0
  11. package/dist/application/design/design-publish-service.js.map +1 -0
  12. package/dist/application/design/design-resolver-service.js +165 -0
  13. package/dist/application/design/design-resolver-service.js.map +1 -0
  14. package/dist/application/resume-service.js +23 -4
  15. package/dist/application/resume-service.js.map +1 -1
  16. package/dist/application/semantic-operation/protocol.js +18 -12
  17. package/dist/application/semantic-operation/protocol.js.map +1 -1
  18. package/dist/application/semantic-operation/publish.js +56 -9
  19. package/dist/application/semantic-operation/publish.js.map +1 -1
  20. package/dist/application/skills-resolver-service.js +19 -4
  21. package/dist/application/skills-resolver-service.js.map +1 -1
  22. package/dist/application/status-service.js +1 -0
  23. package/dist/application/status-service.js.map +1 -1
  24. package/dist/application/workline-index-service.js +6 -0
  25. package/dist/application/workline-index-service.js.map +1 -1
  26. package/dist/application/workspace-init-service.js +9 -1
  27. package/dist/application/workspace-init-service.js.map +1 -1
  28. package/dist/cli/commands/designs.js +110 -0
  29. package/dist/cli/commands/designs.js.map +1 -0
  30. package/dist/cli/commands/index.js +2 -0
  31. package/dist/cli/commands/index.js.map +1 -1
  32. package/dist/cli/commands/resume.js +8 -0
  33. package/dist/cli/commands/resume.js.map +1 -1
  34. package/dist/cli/commands/status.js +45 -0
  35. package/dist/cli/commands/status.js.map +1 -1
  36. package/dist/cli/help-groups.js +3 -0
  37. package/dist/cli/help-groups.js.map +1 -1
  38. package/dist/cli/parser.js +1 -0
  39. package/dist/cli/parser.js.map +1 -1
  40. package/dist/domain/design/artifact-body.js +223 -0
  41. package/dist/domain/design/artifact-body.js.map +1 -0
  42. package/dist/domain/design/artifact.js +606 -0
  43. package/dist/domain/design/artifact.js.map +1 -0
  44. package/dist/domain/design/baseline.js +359 -0
  45. package/dist/domain/design/baseline.js.map +1 -0
  46. package/dist/domain/design/capability.js +51 -0
  47. package/dist/domain/design/capability.js.map +1 -0
  48. package/dist/domain/design/closure.js +161 -0
  49. package/dist/domain/design/closure.js.map +1 -0
  50. package/dist/domain/design/governance.js +298 -0
  51. package/dist/domain/design/governance.js.map +1 -0
  52. package/dist/domain/design/identity.js +145 -0
  53. package/dist/domain/design/identity.js.map +1 -0
  54. package/dist/domain/design/manifest.js +552 -0
  55. package/dist/domain/design/manifest.js.map +1 -0
  56. package/dist/domain/design/maturity.js +234 -0
  57. package/dist/domain/design/maturity.js.map +1 -0
  58. package/dist/domain/design/naming.js +117 -0
  59. package/dist/domain/design/naming.js.map +1 -0
  60. package/dist/domain/design/projections.js +165 -0
  61. package/dist/domain/design/projections.js.map +1 -0
  62. package/dist/domain/design/reference.js +234 -0
  63. package/dist/domain/design/reference.js.map +1 -0
  64. package/dist/domain/design/retired.js +61 -0
  65. package/dist/domain/design/retired.js.map +1 -0
  66. package/dist/domain/design/revision.js +219 -0
  67. package/dist/domain/design/revision.js.map +1 -0
  68. package/dist/domain/design/secrets.js +86 -0
  69. package/dist/domain/design/secrets.js.map +1 -0
  70. package/dist/domain/design/validation.js +75 -0
  71. package/dist/domain/design/validation.js.map +1 -0
  72. package/dist/domain/design/yaml-subset.js +390 -0
  73. package/dist/domain/design/yaml-subset.js.map +1 -0
  74. package/dist/domain/safe-path.js +23 -0
  75. package/dist/domain/safe-path.js.map +1 -0
  76. package/dist/domain/skills.js +27 -3
  77. package/dist/domain/skills.js.map +1 -1
  78. package/package.json +1 -1
  79. package/skills/w/SKILL.md +10 -8
  80. package/skills/w/artifacts/README.md +3 -4
  81. package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +2 -2
  82. package/skills/w/commands/plan-exec.md +11 -5
  83. package/skills/w/commands/plan-new.md +6 -2
  84. package/skills/w/commands/plan-refine.md +6 -3
  85. package/skills/w/commands/quick.md +2 -2
  86. package/skills/w/commands/spec-new.md +2 -2
  87. package/skills/w/commands/spec-refine.md +1 -0
  88. package/skills/w/context/MANIFEST.json +19 -8
  89. package/skills/w/loops/CHASSIS.md +2 -2
  90. package/skills/w/loops/CODE-POLICIES.md +22 -7
  91. package/skills/w/loops/README.md +1 -1
  92. package/skills/w/loops/plan-exec-loop/LOOP.md +127 -61
  93. package/skills/w/loops/plan-new-loop/LOOP.md +66 -70
  94. package/skills/w/loops/plan-refine-loop/LOOP.md +15 -7
  95. package/skills/w/loops/spec-refine-loop/LOOP.md +14 -12
  96. package/skills/w/modules/DESIGN-REFERENCES.md +109 -0
  97. package/skills/w/modules/PERSIST-ROUTING.md +1 -0
  98. package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +84 -0
  99. package/skills/w/roles/README.md +7 -5
  100. package/skills/w/roles/design/ROLE.md +217 -0
  101. package/skills/w/schemas/design/design-baseline.v1.schema.json +71 -0
  102. package/skills/w/schemas/design/design-manifest.v1.schema.json +322 -0
  103. package/skills/w/schemas/design/design-review.v1.schema.json +72 -0
  104. package/skills/w/schemas/design/design-revocation.v1.schema.json +54 -0
  105. package/skills/w/schemas/design/ui-flow.v1.schema.json +211 -0
  106. package/skills/w/schemas/design/ui-screen.v1.schema.json +214 -0
  107. package/skills/w/artifacts/artifacts-design/SPEC.md +0 -42
  108. package/skills/w/modules/PLAN-DESIGN-SPECS.md +0 -12
  109. package/skills/w/modules/PLAN-REFINE-DESIGN-SPECS.md +0 -7
  110. package/skills/w/roles/ui-spec/ROLE.md +0 -147
@@ -0,0 +1,75 @@
1
+ /**
2
+ * The shared machinery every design validator is built on.
3
+ *
4
+ * Three properties hold across the manifest, the flow and the screen validators,
5
+ * and they live here so no validator can quietly drop one:
6
+ *
7
+ * - **Every diagnostic names an artifact and a corrective action.** A rejection
8
+ * that only says "invalid" is a dead end for whoever has to fix it.
9
+ * - **Objects are closed.** The published JSON Schemas declare
10
+ * `additionalProperties: false`, so a key the contract does not declare is a
11
+ * typo of a real one, never an extension.
12
+ * - **Coverage is measured, not promised.** Every property read is recorded, and
13
+ * the drift guard compares that set against the published schema. A property
14
+ * declared in the schema and forgotten in the validator cannot ship.
15
+ */
16
+ export class Reader {
17
+ allowedKeys;
18
+ touched = new Set();
19
+ failures = [];
20
+ constructor(allowedKeys) {
21
+ this.allowedKeys = allowedKeys;
22
+ }
23
+ /** Read `path`'s last segment off `node`, recording the property as covered. */
24
+ read(node, path) {
25
+ this.touched.add(path);
26
+ const segments = path.split(".");
27
+ const key = segments[segments.length - 1].replace("[]", "");
28
+ return node[key];
29
+ }
30
+ fail(code, artifact, message, action) {
31
+ this.failures.push({ code, artifact, message, action });
32
+ }
33
+ invalid(artifact, message, action) {
34
+ this.fail("DESIGN_FIELD_INVALID", artifact, message, action);
35
+ }
36
+ /** Reject anything the contract does not declare at `path` (closed objects). */
37
+ closed(node, path, artifact) {
38
+ const allowed = this.allowedKeys[path];
39
+ if (allowed === undefined)
40
+ return;
41
+ for (const key of Object.keys(node)) {
42
+ if (allowed.includes(key))
43
+ continue;
44
+ this.fail("DESIGN_KEY_UNKNOWN", artifact, `${path === "" ? "el documento" : `'${path}'`} no admite la clave '${key}'`, `quitala o corregí el nombre; las claves válidas son: ${allowed.join(", ")}`);
45
+ }
46
+ }
47
+ }
48
+ /**
49
+ * Walk an array-of-objects field. Every list in the contract shares the same
50
+ * three failure modes — not an array, an item that is not an object, an item
51
+ * carrying a key the schema does not declare — so they are stated once here and
52
+ * each reader stays about ITS own fields.
53
+ */
54
+ export function* eachRecord(r, node, path, artifact, emptyMeans = "") {
55
+ const list = r.read(node, path);
56
+ if (!Array.isArray(list)) {
57
+ r.invalid(artifact, `'${path}' debe ser un array${emptyMeans}`, `escribí '${path}': []`);
58
+ return;
59
+ }
60
+ for (const entry of list) {
61
+ if (!isRecord(entry)) {
62
+ r.invalid(artifact, `cada entrada de '${path}' debe ser un objeto`, `revisá el array '${path}'`);
63
+ continue;
64
+ }
65
+ r.closed(entry, `${path}[]`, artifact);
66
+ yield entry;
67
+ }
68
+ }
69
+ export function isRecord(value) {
70
+ return typeof value === "object" && value !== null && !Array.isArray(value);
71
+ }
72
+ export function isNonEmptyString(value) {
73
+ return typeof value === "string" && value.trim().length > 0;
74
+ }
75
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/domain/design/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,390 @@
1
+ /**
2
+ * The restricted YAML subset the design artifacts are authored in.
3
+ *
4
+ * Flow and Screen Specifications carry structure a flat frontmatter parser
5
+ * cannot express — sequences of mappings (`nodes`, `edges`, `states`, `trace`),
6
+ * nested mappings (`dependencies`, `not_applicable`) and flow style (`[]`,
7
+ * `{}`) — and no YAML engine may be added to the CLI. So this is a parser for a
8
+ * closed, documented subset, not a general one.
9
+ *
10
+ * The subset is deliberately small and everything outside it is REJECTED with a
11
+ * line number, never guessed at:
12
+ *
13
+ * accepted rejected
14
+ * ──────────────────────────── ─────────────────────────────
15
+ * key: value &anchor / *alias
16
+ * key: (nested block below) !tag
17
+ * - item (block sequence) | and > (block scalars)
18
+ * - key: value (seq of mappings) <<: (merge keys)
19
+ * [a, b] / [] (flow sequence) ? (complex keys)
20
+ * {a: b} / {} (flow mapping) --- / ... (multi-document)
21
+ * "…" / '…' / plain scalars tabs in the indentation
22
+ * null / ~ / true / false / 12
23
+ *
24
+ * A rejection is a better outcome than a silent misread: the author gets told
25
+ * which line and which form to use instead.
26
+ */
27
+ const KEY = /^([A-Za-z0-9_][A-Za-z0-9_-]*):(?:\s+(.*))?$/;
28
+ /** Canonical decimal only. `007`, `+2`, `1_000` and `0x10` stay strings, so a
29
+ * field that wanted a number fails loudly instead of being coerced in silence. */
30
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: rejecting them is the point
31
+ const CONTROL_CHAR = /[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/;
32
+ const INTEGER = /^-?(0|[1-9]\d*)$/;
33
+ class Rejected extends Error {
34
+ line;
35
+ why;
36
+ constructor(line, why) {
37
+ super(why);
38
+ this.line = line;
39
+ this.why = why;
40
+ }
41
+ }
42
+ /** Guards against pathological input: a recursive parser must diagnose, not crash. */
43
+ const MAX_BYTES = 64 * 1024;
44
+ const MAX_LINES = 1500;
45
+ const MAX_DEPTH = 8;
46
+ export function parseYamlSubset(source) {
47
+ if (Buffer.byteLength(source, "utf8") > MAX_BYTES) {
48
+ return { ok: false, line: 1, why: `el frontmatter supera ${MAX_BYTES} bytes` };
49
+ }
50
+ let lines;
51
+ try {
52
+ lines = scan(source);
53
+ }
54
+ catch (err) {
55
+ if (err instanceof Rejected)
56
+ return { ok: false, line: err.line, why: err.why };
57
+ throw err;
58
+ }
59
+ if (lines.length > MAX_LINES) {
60
+ return { ok: false, line: MAX_LINES, why: `el frontmatter supera ${MAX_LINES} líneas` };
61
+ }
62
+ if (lines.length === 0)
63
+ return { ok: true, value: {} };
64
+ try {
65
+ const first = lines[0];
66
+ if (first.indent !== 0) {
67
+ throw new Rejected(first.n, "el documento arranca indentado");
68
+ }
69
+ const [value, next] = parseMapping(lines, 0, 0);
70
+ if (next < lines.length) {
71
+ throw new Rejected(lines[next].n, "indentación inesperada: la clave no cierra su bloque");
72
+ }
73
+ return { ok: true, value };
74
+ }
75
+ catch (err) {
76
+ if (err instanceof Rejected)
77
+ return { ok: false, line: err.line, why: err.why };
78
+ throw err;
79
+ }
80
+ }
81
+ /** Drop blanks and comments, measure indentation, and reject what the subset excludes. */
82
+ function scan(source) {
83
+ const out = [];
84
+ // Editors add a BOM without asking. It changes no value, so it is stripped
85
+ // rather than rejected — punishing an author for their editor helps nobody.
86
+ const raw = source.replace(/^\uFEFF/, "").split(/\r?\n/);
87
+ for (let i = 0; i < raw.length; i++) {
88
+ const line = raw[i];
89
+ const n = i + 1;
90
+ if (/^\s*$/.test(line))
91
+ continue;
92
+ if (/^\s*#/.test(line))
93
+ continue;
94
+ if (line.includes("\t"))
95
+ throw new Rejected(n, "usa tabulaciones; indentá con espacios");
96
+ // An invisible C0 character inside a normative field is bytes that look like
97
+ // one value and are another. The contract exists to remove that class of
98
+ // ambiguity, so it is a rejection, not a silent pass-through.
99
+ if (CONTROL_CHAR.test(line)) {
100
+ throw new Rejected(n, "contiene un carácter de control invisible");
101
+ }
102
+ const text = stripComment(line).trimEnd();
103
+ if (text.trim().length === 0)
104
+ continue;
105
+ const indent = text.length - text.trimStart().length;
106
+ const body = text.trimStart();
107
+ rejectUnsupported(body, n);
108
+ out.push({ n, indent, text: body });
109
+ }
110
+ return out;
111
+ }
112
+ /**
113
+ * A `#` only opens a comment at the start or after whitespace, and never inside
114
+ * quotes. `entry: DES-001/SCR-001@r2#default` has to survive intact — the state
115
+ * anchor is the single most referenced form in the whole contract.
116
+ */
117
+ function stripComment(raw) {
118
+ let single = false;
119
+ let double = false;
120
+ for (let i = 0; i < raw.length; i++) {
121
+ const c = raw[i];
122
+ // A quote only OPENS a string where a scalar could start. Otherwise `it's a
123
+ // form # nota` would look quoted from the apostrophe on, and the comment
124
+ // would survive into the value.
125
+ const opens = i === 0 || /[\s:,[{-]/.test(raw[i - 1]);
126
+ if (c === "'" && !double && (single || opens))
127
+ single = !single;
128
+ else if (c === '"' && !single && (double || opens))
129
+ double = !double;
130
+ else if (c === "#" && !single && !double && (i === 0 || /\s/.test(raw[i - 1]))) {
131
+ return raw.slice(0, i);
132
+ }
133
+ }
134
+ return raw;
135
+ }
136
+ function rejectUnsupported(body, n) {
137
+ if (body === "---" || body === "...") {
138
+ throw new Rejected(n, "el frontmatter es un único documento: no admite '---' ni '...' internos");
139
+ }
140
+ if (body.startsWith("? "))
141
+ throw new Rejected(n, "no admite claves complejas ('? ')");
142
+ if (body.startsWith("<<:"))
143
+ throw new Rejected(n, "no admite merge keys ('<<:')");
144
+ const value = KEY.exec(body)?.[2] ?? (body.startsWith("- ") ? body.slice(2).trim() : null);
145
+ if (value === null || value.length === 0)
146
+ return;
147
+ if (value === "|" || value === ">" || /^[|>][+-]?$/.test(value)) {
148
+ throw new Rejected(n, "no admite block scalars ('|', '>'): escribí el texto en una línea o en el cuerpo");
149
+ }
150
+ if (value.startsWith("&"))
151
+ throw new Rejected(n, "no admite anclas YAML ('&')");
152
+ if (value.startsWith("*"))
153
+ throw new Rejected(n, "no admite alias YAML ('*')");
154
+ if (value.startsWith("!"))
155
+ throw new Rejected(n, "no admite tags YAML ('!')");
156
+ }
157
+ /** Parse consecutive `key: …` lines at `indent`. Returns the mapping and the next index. */
158
+ function parseMapping(lines, start, indent) {
159
+ // Null prototype on purpose: with a plain object a key called `__proto__`
160
+ // would REWRITE the prototype instead of becoming a property, and
161
+ // `constructor`/`toString` would read as duplicates of something nobody wrote.
162
+ const out = Object.create(null);
163
+ let i = start;
164
+ while (i < lines.length) {
165
+ const line = lines[i];
166
+ if (line.indent < indent)
167
+ break;
168
+ if (line.indent > indent) {
169
+ throw new Rejected(line.n, "indentación inesperada dentro de un mapping");
170
+ }
171
+ const match = KEY.exec(line.text);
172
+ if (match === null) {
173
+ throw new Rejected(line.n, `se esperaba 'clave: valor' y llegó '${line.text}'`);
174
+ }
175
+ const key = match[1];
176
+ if (key in out)
177
+ throw new Rejected(line.n, `la clave '${key}' está repetida`);
178
+ const inline = (match[2] ?? "").trim();
179
+ if (inline.length > 0) {
180
+ out[key] = parseScalarOrFlow(inline, line.n);
181
+ i += 1;
182
+ continue;
183
+ }
184
+ if (indent > MAX_DEPTH * 2) {
185
+ throw new Rejected(line.n, `anidamiento mayor a ${MAX_DEPTH} niveles`);
186
+ }
187
+ const [value, next] = parseNested(lines, i + 1, indent);
188
+ out[key] = value;
189
+ i = next;
190
+ }
191
+ return [out, i];
192
+ }
193
+ /** The block that belongs to a `key:` with no inline value. */
194
+ function parseNested(lines, start, parentIndent) {
195
+ const next = lines[start];
196
+ // A key with nothing under it is an explicit null, not an error: `unknowns:`
197
+ // and `unknowns: []` have to mean the same thing to an author.
198
+ if (next === undefined || next.indent < parentIndent)
199
+ return [null, start];
200
+ // YAML lets a sequence sit at its parent key's own indentation.
201
+ if (next.text.startsWith("- ") || next.text === "-") {
202
+ return parseSequence(lines, start, next.indent);
203
+ }
204
+ // A sibling key at the same indentation means the value was simply empty.
205
+ if (next.indent === parentIndent)
206
+ return [null, start];
207
+ return parseMapping(lines, start, next.indent);
208
+ }
209
+ function parseSequence(lines, start, indent) {
210
+ const out = [];
211
+ let i = start;
212
+ while (i < lines.length) {
213
+ const line = lines[i];
214
+ if (line.indent < indent)
215
+ break;
216
+ // A sequence may sit at its own key's indentation, so the next sibling key
217
+ // arrives at exactly this column. That ENDS the sequence — it is not an
218
+ // error. Anything else at this column is.
219
+ if (!isSequenceItem(line)) {
220
+ if (line.indent === indent && KEY.test(line.text))
221
+ break;
222
+ throw new Rejected(line.n, "se esperaba un ítem de secuencia ('- …')");
223
+ }
224
+ if (line.indent > indent) {
225
+ throw new Rejected(line.n, "se esperaba un ítem de secuencia ('- …')");
226
+ }
227
+ if (line.text === "-") {
228
+ throw new Rejected(line.n, "ítem de secuencia vacío: escribí el valor en la misma línea");
229
+ }
230
+ const content = line.text.slice(2).trimStart();
231
+ const offset = line.indent + line.text.length - content.length;
232
+ if (KEY.exec(content) === null) {
233
+ out.push(parseScalarOrFlow(content, line.n));
234
+ i += 1;
235
+ continue;
236
+ }
237
+ // `- id: x` starts a mapping whose indentation is where `id` begins. Rewriting
238
+ // the dash as spaces makes it an ordinary mapping block, which is exactly
239
+ // what it is — and keeps one code path for `- k: v` and its continuation lines.
240
+ const rewritten = [...lines];
241
+ rewritten[i] = { n: line.n, indent: offset, text: content };
242
+ const [value, next] = parseMapping(rewritten, i, offset);
243
+ out.push(value);
244
+ i = next;
245
+ }
246
+ return [out, i];
247
+ }
248
+ function isSequenceItem(line) {
249
+ return line.text.startsWith("- ") || line.text === "-";
250
+ }
251
+ function parseScalarOrFlow(raw, n) {
252
+ const text = raw.trim();
253
+ if (text.startsWith("[") || text.startsWith("{")) {
254
+ const [value, rest] = parseFlow(text, n, 0);
255
+ if (rest.trim().length > 0) {
256
+ throw new Rejected(n, `sobra contenido después del valor: '${rest.trim()}'`);
257
+ }
258
+ return value;
259
+ }
260
+ return parseScalar(text, n);
261
+ }
262
+ /** Flow style — returns the value plus whatever is left of the string. */
263
+ function parseFlow(text, n, depth) {
264
+ if (depth > MAX_DEPTH) {
265
+ throw new Rejected(n, `anidamiento mayor a ${MAX_DEPTH} niveles`);
266
+ }
267
+ if (text.startsWith("["))
268
+ return parseFlowSeq(text.slice(1), n, depth + 1);
269
+ if (text.startsWith("{"))
270
+ return parseFlowMap(text.slice(1), n, depth + 1);
271
+ const [token, rest] = takeFlowToken(text, n);
272
+ return [parseScalar(token, n), rest];
273
+ }
274
+ function parseFlowSeq(input, n, depth) {
275
+ const out = [];
276
+ let rest = input.trimStart();
277
+ if (rest.startsWith("]"))
278
+ return [out, rest.slice(1)];
279
+ for (;;) {
280
+ // `[a, ]` and `[,]` used to yield a null nobody wrote. An empty slot is a
281
+ // typo, and the diagnostic belongs here — not three layers up as a type error.
282
+ if (rest.startsWith(",") || rest.startsWith("]")) {
283
+ throw new Rejected(n, "ítem vacío en una secuencia de flow style");
284
+ }
285
+ const [value, after] = parseFlow(rest.trimStart(), n, depth);
286
+ out.push(value);
287
+ rest = after.trimStart();
288
+ if (rest.startsWith(",")) {
289
+ rest = rest.slice(1).trimStart();
290
+ continue;
291
+ }
292
+ if (rest.startsWith("]"))
293
+ return [out, rest.slice(1)];
294
+ throw new Rejected(n, "secuencia en flow style sin cerrar: falta ',' o ']'");
295
+ }
296
+ }
297
+ function parseFlowMap(input, n, depth) {
298
+ const out = Object.create(null);
299
+ let rest = input.trimStart();
300
+ if (rest.startsWith("}"))
301
+ return [out, rest.slice(1)];
302
+ for (;;) {
303
+ const colon = findFlowColon(rest, n);
304
+ const key = parseScalar(rest.slice(0, colon).trim(), n);
305
+ if (typeof key !== "string" || key.length === 0) {
306
+ throw new Rejected(n, "clave de mapping en flow style vacía o no textual");
307
+ }
308
+ if (key in out)
309
+ throw new Rejected(n, `la clave '${key}' está repetida`);
310
+ const [value, after] = parseFlow(rest.slice(colon + 1).trimStart(), n, depth);
311
+ out[key] = value;
312
+ rest = after.trimStart();
313
+ if (rest.startsWith(",")) {
314
+ rest = rest.slice(1).trimStart();
315
+ continue;
316
+ }
317
+ if (rest.startsWith("}"))
318
+ return [out, rest.slice(1)];
319
+ throw new Rejected(n, "mapping en flow style sin cerrar: falta ',' o '}'");
320
+ }
321
+ }
322
+ function findFlowColon(text, n) {
323
+ let single = false;
324
+ let double = false;
325
+ for (let i = 0; i < text.length; i++) {
326
+ const c = text[i];
327
+ if (c === "'" && !double)
328
+ single = !single;
329
+ else if (c === '"' && !single)
330
+ double = !double;
331
+ else if (c === ":" && !single && !double)
332
+ return i;
333
+ }
334
+ throw new Rejected(n, "mapping en flow style sin ':' entre clave y valor");
335
+ }
336
+ /** A scalar inside flow style ends at the first unquoted `,`, `]` or `}`. */
337
+ function takeFlowToken(text, n) {
338
+ if (text.startsWith('"') || text.startsWith("'"))
339
+ return takeQuoted(text, n);
340
+ const end = text.search(/[,\]}]/);
341
+ if (end === -1)
342
+ return [text, ""];
343
+ return [text.slice(0, end), text.slice(end)];
344
+ }
345
+ /** A quoted scalar ends at its closing quote — `\"` and `''` do not close it. */
346
+ function takeQuoted(text, n) {
347
+ const quote = text[0];
348
+ for (let i = 1; i < text.length; i++) {
349
+ if (text[i] === "\\" && quote === '"') {
350
+ i += 1;
351
+ continue;
352
+ }
353
+ if (text[i] !== quote)
354
+ continue;
355
+ if (quote === "'" && text[i + 1] === "'") {
356
+ i += 1;
357
+ continue;
358
+ }
359
+ return [text.slice(0, i + 1), text.slice(i + 1)];
360
+ }
361
+ throw new Rejected(n, "comilla sin cerrar");
362
+ }
363
+ function parseScalar(text, n) {
364
+ if (text.length === 0 || text === "null" || text === "~")
365
+ return null;
366
+ // The single place every scalar passes through, so the node-level YAML
367
+ // constructs are rejected HERE — a line-level check missed them inside
368
+ // sequence items and flow style, where they read as ordinary text.
369
+ const marker = { "&": "anclas YAML ('&')", "*": "alias YAML ('*')", "!": "tags YAML ('!')" }[text[0]];
370
+ if (marker !== undefined)
371
+ throw new Rejected(n, `no admite ${marker}`);
372
+ if (text.startsWith('"')) {
373
+ if (!text.endsWith('"') || text.length < 2)
374
+ throw new Rejected(n, "comilla doble sin cerrar");
375
+ return text.slice(1, -1).replace(/\\n/g, "\n").replace(/\\"/g, '"').replace(/\\\\/g, "\\");
376
+ }
377
+ if (text.startsWith("'")) {
378
+ if (!text.endsWith("'") || text.length < 2)
379
+ throw new Rejected(n, "comilla simple sin cerrar");
380
+ return text.slice(1, -1).replace(/''/g, "'");
381
+ }
382
+ if (text === "true")
383
+ return true;
384
+ if (text === "false")
385
+ return false;
386
+ if (INTEGER.test(text))
387
+ return Number(text);
388
+ return text;
389
+ }
390
+ //# sourceMappingURL=yaml-subset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-subset.js","sourceRoot":"","sources":["../../../src/domain/design/yaml-subset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shared relative-path guard for every write boundary.
3
+ *
4
+ * A path that is empty, Windows-separated, absolute, or carries `.` / `..` /
5
+ * empty segments never reaches a filesystem call. Callers add their own
6
+ * containment rule on top of the normalized segments — comparing SEGMENTS, so
7
+ * `docs/specs-evil` never passes as `docs/specs`.
8
+ */
9
+ export function checkSafeRelativePath(raw) {
10
+ const path = raw.trim();
11
+ if (path.length === 0)
12
+ return { ok: false, why: "está vacío" };
13
+ if (path.includes("\\"))
14
+ return { ok: false, why: "usa separador de Windows" };
15
+ if (path.startsWith("/") || /^[A-Za-z]:/.test(path))
16
+ return { ok: false, why: "es absoluto" };
17
+ const segments = path.split("/");
18
+ if (segments.some((s) => s === ".." || s === "." || s.length === 0)) {
19
+ return { ok: false, why: "contiene segmentos relativos o vacíos" };
20
+ }
21
+ return { ok: true, path, segments };
22
+ }
23
+ //# sourceMappingURL=safe-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-path.js","sourceRoot":"","sources":["../../src/domain/safe-path.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;IAC/D,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,0BAA0B,EAAE,CAAC;IAC/E,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;IAE9F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,uCAAuC,EAAE,CAAC;IACrE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACtC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Capability roles for the pluggable skills model.
3
3
  *
4
- * A loop composes a CAPABILITY by its role (e.g. "ui-design"), not a concrete
4
+ * A loop composes a CAPABILITY by its role (e.g. "design"), not a concrete
5
5
  * skill. The role → skill binding is resolved from `skills.toml`
6
6
  * (cascade: built-in default → global → workspace). See skills-resolver-service.
7
7
  *
@@ -12,10 +12,10 @@
12
12
  * or binds a specific convention skill; the host surfaces any useful one that is
13
13
  * installed (e.g. from the `dev-conventions` marketplace plugin, or anywhere).
14
14
  */
15
- export const SKILL_ROLES = ["ui-design", "sql", "git", "research", "diagrams", "overview"];
15
+ export const SKILL_ROLES = ["design", "sql", "git", "research", "diagrams", "overview"];
16
16
  /** Built-in default skill name for each capability role. */
17
17
  export const BUILTIN_DEFAULT_SKILLS = {
18
- "ui-design": "ui-spec",
18
+ design: "design",
19
19
  sql: "sql",
20
20
  git: "git",
21
21
  research: "research",
@@ -26,4 +26,28 @@ const ROLE_SET = new Set(SKILL_ROLES);
26
26
  export function isSkillRole(value) {
27
27
  return ROLE_SET.has(value);
28
28
  }
29
+ /**
30
+ * Names this contract does NOT accept, and what to say instead.
31
+ *
32
+ * `ui-design` was the design role and `ui-spec` its default implementation.
33
+ * Both are retired: the public identity is `design`, and its only output is the
34
+ * UI Design Package v1. They are not aliases and not alternative implementations
35
+ * — a second name for one capability is a second contract in disguise, and the
36
+ * day the two disagree there is no way to say which one the package obeys.
37
+ *
38
+ * So a config naming either is REFUSED, not silently honored: accepting
39
+ * `design = "ui-spec"` would make `ui-spec` an accepted name, which is exactly
40
+ * what the contract forbids. The role keeps its built-in default, so refusing
41
+ * the binding never leaves the capability mute.
42
+ */
43
+ export const RETIRED_SKILL_IDENTITIES = new Map([
44
+ [
45
+ "ui-design",
46
+ "el role de diseño ahora es 'design' y su implementación por defecto también: no hay alias",
47
+ ],
48
+ [
49
+ "ui-spec",
50
+ "'ui-spec' es el render legacy y no implementa 'design', cuyo único formato es el UI Design Package v1",
51
+ ],
52
+ ]);
29
53
  //# sourceMappingURL=skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/domain/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAIpG,4DAA4D;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAA8B;IAC/D,WAAW,EAAE,SAAS;IACtB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,GAAG;CACd,CAAC;AAcF,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/domain/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAIjG,4DAA4D;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAA8B;IAC/D,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,GAAG;CACd,CAAC;AAcF,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3D,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAgC,IAAI,GAAG,CAAC;IAC3E;QACE,WAAW;QACX,2FAA2F;KAC5F;IACD;QACE,SAAS;QACT,uGAAuG;KACxG;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tacuchi/agent-workflow-cli",
3
- "version": "20.26.0",
3
+ "version": "21.0.0",
4
4
  "description": "Runtime CLI for Workline — the stages + loops + artifacts system for agent work. Bundles the universal `w` skill set under `skills/w/` (slash commands `/w:*`: spec-new/spec-refine, plan-new/plan-exec, quick, persist, workspace-init, export-*); `self install --target <host>` copies SKILL + commands + hooks into the host. Pluggable capability skills via `.workflow/skills.toml`. Multi-empresa parametrization via `profile.json` cascade. Namespace auto-detected from any `.<ns>/sessions/` dir in CWD; default `workflow`.",
5
5
  "type": "module",
6
6
  "bin": {