@tacuchi/agent-workflow-cli 21.0.0 → 21.3.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 (170) hide show
  1. package/README.md +3 -2
  2. package/dist/adapters/git-cli.js +12 -7
  3. package/dist/adapters/git-cli.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 +195 -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-proposal-service.js +69 -0
  31. package/dist/application/design/design-proposal-service.js.map +1 -0
  32. package/dist/application/design/design-publish-service.js +275 -7
  33. package/dist/application/design/design-publish-service.js.map +1 -1
  34. package/dist/application/design/design-record-service.js +100 -0
  35. package/dist/application/design/design-record-service.js.map +1 -0
  36. package/dist/application/flow/advance.js +533 -0
  37. package/dist/application/flow/advance.js.map +1 -0
  38. package/dist/application/flow/flow-service.js +65 -0
  39. package/dist/application/flow/flow-service.js.map +1 -0
  40. package/dist/application/flow/run-projection.js +80 -0
  41. package/dist/application/flow/run-projection.js.map +1 -0
  42. package/dist/application/flow/run-state-service.js +107 -0
  43. package/dist/application/flow/run-state-service.js.map +1 -0
  44. package/dist/application/flow/submit.js +423 -0
  45. package/dist/application/flow/submit.js.map +1 -0
  46. package/dist/application/markdown.js +16 -2
  47. package/dist/application/markdown.js.map +1 -1
  48. package/dist/application/resume-service.js +23 -10
  49. package/dist/application/resume-service.js.map +1 -1
  50. package/dist/application/self/hooks-toml.js +137 -17
  51. package/dist/application/self/hooks-toml.js.map +1 -1
  52. package/dist/application/self/host-states.js +87 -1
  53. package/dist/application/self/host-states.js.map +1 -1
  54. package/dist/application/self/install-hooks.js +62 -6
  55. package/dist/application/self/install-hooks.js.map +1 -1
  56. package/dist/application/self/install-skill.js +37 -6
  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/skills-resolver-service.js +8 -2
  61. package/dist/application/skills-resolver-service.js.map +1 -1
  62. package/dist/application/status-service.js +4 -1
  63. package/dist/application/status-service.js.map +1 -1
  64. package/dist/application/workline-index-service.js +15 -2
  65. package/dist/application/workline-index-service.js.map +1 -1
  66. package/dist/application/workspace-init-service.js +13 -1
  67. package/dist/application/workspace-init-service.js.map +1 -1
  68. package/dist/cli/commands/capability.js +182 -0
  69. package/dist/cli/commands/capability.js.map +1 -0
  70. package/dist/cli/commands/flow.js +71 -0
  71. package/dist/cli/commands/flow.js.map +1 -0
  72. package/dist/cli/commands/index.js +4 -0
  73. package/dist/cli/commands/index.js.map +1 -1
  74. package/dist/cli/commands/skills.js +55 -2
  75. package/dist/cli/commands/skills.js.map +1 -1
  76. package/dist/cli/commands/status.js +5 -0
  77. package/dist/cli/commands/status.js.map +1 -1
  78. package/dist/cli/help-groups.js +6 -0
  79. package/dist/cli/help-groups.js.map +1 -1
  80. package/dist/cli/parser.js +6 -0
  81. package/dist/cli/parser.js.map +1 -1
  82. package/dist/cli/tui/components/host-admin-section.js +14 -2
  83. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  84. package/dist/cli/tui/data/workflow-content.js +13 -1
  85. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  86. package/dist/cli/tui/tabs/workflow-tab.js +8 -1
  87. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  88. package/dist/domain/capability/descriptor.js +553 -0
  89. package/dist/domain/capability/descriptor.js.map +1 -0
  90. package/dist/domain/capability/effects.js +90 -0
  91. package/dist/domain/capability/effects.js.map +1 -0
  92. package/dist/domain/capability/protocol.js +494 -0
  93. package/dist/domain/capability/protocol.js.map +1 -0
  94. package/dist/domain/contract-reader.js +84 -0
  95. package/dist/domain/contract-reader.js.map +1 -0
  96. package/dist/domain/design/adapter.js +161 -0
  97. package/dist/domain/design/adapter.js.map +1 -0
  98. package/dist/domain/design/artifact.js +148 -4
  99. package/dist/domain/design/artifact.js.map +1 -1
  100. package/dist/domain/design/capability.js +263 -4
  101. package/dist/domain/design/capability.js.map +1 -1
  102. package/dist/domain/design/direct.js +108 -0
  103. package/dist/domain/design/direct.js.map +1 -0
  104. package/dist/domain/design/external-send.js +65 -0
  105. package/dist/domain/design/external-send.js.map +1 -0
  106. package/dist/domain/design/maturity.js +71 -0
  107. package/dist/domain/design/maturity.js.map +1 -1
  108. package/dist/domain/design/offline.js +92 -0
  109. package/dist/domain/design/offline.js.map +1 -0
  110. package/dist/domain/design/profiles.js +212 -0
  111. package/dist/domain/design/profiles.js.map +1 -0
  112. package/dist/domain/design/proposal.js +234 -0
  113. package/dist/domain/design/proposal.js.map +1 -0
  114. package/dist/domain/design/render-bundle.js +0 -0
  115. package/dist/domain/design/render-bundle.js.map +1 -0
  116. package/dist/domain/design/rendition.js +472 -0
  117. package/dist/domain/design/rendition.js.map +1 -0
  118. package/dist/domain/design/sources.js +180 -0
  119. package/dist/domain/design/sources.js.map +1 -0
  120. package/dist/domain/design/validation.js +12 -68
  121. package/dist/domain/design/validation.js.map +1 -1
  122. package/dist/domain/design/visual-evidence.js +155 -0
  123. package/dist/domain/design/visual-evidence.js.map +1 -0
  124. package/dist/domain/flow/answer.js +459 -0
  125. package/dist/domain/flow/answer.js.map +1 -0
  126. package/dist/domain/flow/authority.js +2338 -0
  127. package/dist/domain/flow/authority.js.map +1 -0
  128. package/dist/domain/flow/authorization.js +62 -0
  129. package/dist/domain/flow/authorization.js.map +1 -0
  130. package/dist/domain/flow/directive.js +421 -0
  131. package/dist/domain/flow/directive.js.map +1 -0
  132. package/dist/domain/flow/rules.js +140 -0
  133. package/dist/domain/flow/rules.js.map +1 -0
  134. package/dist/domain/flow/run-state.js +317 -0
  135. package/dist/domain/flow/run-state.js.map +1 -0
  136. package/dist/domain/harnesses.js +124 -4
  137. package/dist/domain/harnesses.js.map +1 -1
  138. package/dist/domain/host-verification.js +8 -8
  139. package/dist/domain/skills.js +13 -14
  140. package/dist/domain/skills.js.map +1 -1
  141. package/dist/domain/structured-choice-stamp.js +106 -0
  142. package/dist/domain/structured-choice-stamp.js.map +1 -0
  143. package/package.json +1 -1
  144. package/skills/w/SKILL.md +5 -5
  145. package/skills/w/context/MANIFEST.json +42 -1
  146. package/skills/w/harness/HARNESS.md +30 -4
  147. package/skills/w/loops/CHASSIS.md +11 -20
  148. package/skills/w/loops/CODE-POLICIES.md +9 -15
  149. package/skills/w/loops/plan-exec-loop/LOOP.md +11 -13
  150. package/skills/w/loops/plan-new-loop/LOOP.md +6 -4
  151. package/skills/w/loops/plan-refine-loop/LOOP.md +5 -3
  152. package/skills/w/loops/quick-loop/LOOP.md +18 -26
  153. package/skills/w/loops/spec-refine-loop/LOOP.md +14 -18
  154. package/skills/w/modules/COMPACTION.md +2 -6
  155. package/skills/w/modules/DB-SCRIPTS-ONLY.md +2 -0
  156. package/skills/w/modules/DESIGN-REFERENCES.md +15 -11
  157. package/skills/w/modules/IDEATION-GATE.md +3 -3
  158. package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +17 -36
  159. package/skills/w/modules/PLAN-INPUT.md +5 -3
  160. package/skills/w/modules/PLAN-REFINE-SPLIT.md +3 -1
  161. package/skills/w/modules/PLAN-SPLIT-GATE.md +7 -5
  162. package/skills/w/modules/PROMPT-CONTINUITY.md +3 -1
  163. package/skills/w/modules/SPEC-CHANGE-SHAPE.md +4 -4
  164. package/skills/w/roles/README.md +2 -0
  165. package/skills/w/roles/design/CONTRACT.md +80 -0
  166. package/skills/w/roles/design/ROLE.md +7 -0
  167. package/skills/w/schemas/capability-descriptor.schema.json +260 -0
  168. package/skills/w/schemas/design/design-render-bundle.v1.schema.json +191 -0
  169. package/skills/w/schemas/design/design-rendition.v1.schema.json +232 -0
  170. package/skills/w/schemas/design/ui-screen.v1.schema.json +29 -1
@@ -0,0 +1,472 @@
1
+ import { createHash } from "node:crypto";
2
+ import { canonicalJson } from "../../application/semantic-operation/protocol.js";
3
+ import { checkSafeRelativePath } from "../safe-path.js";
4
+ import { CANONICAL_SCHEMAS } from "./capability.js";
5
+ import { GRAMMAR, isDigest, isRevision, parseArtifactId, parseArtifactRef } from "./identity.js";
6
+ import { secretFailures } from "./secrets.js";
7
+ import { Reader, eachRecord, isNonEmptyString, isRecord, } from "./validation.js";
8
+ /**
9
+ * `renditions/VIS-NNN-rNNN-<slug>/rendition.json` — what a picture of a design
10
+ * knows about itself.
11
+ *
12
+ * v21.0.0 already reserved the place and the name; what was missing is the only
13
+ * part that makes a rendition trustworthy: **which revision it came out of**.
14
+ * Without it a package accumulates images that look current forever, and the
15
+ * oldest screenshot in the folder is indistinguishable from the newest.
16
+ *
17
+ * So the contract is built around three separations that must never collapse:
18
+ *
19
+ * - **Fidelity is not maturity.** `high` says the picture is polished; it says
20
+ * nothing about whether the screen is implementable. Raising one must never
21
+ * move the other, and they live in different documents for that reason.
22
+ * - **Staleness against the SOURCE is derived; sync with the PROVIDER is not.**
23
+ * `source_digest` is computed from the bytes of the revisions this rendition
24
+ * was cut from, so anybody can recompute it and see that the screen moved on.
25
+ * Whether Figma's copy still matches cannot be derived from here at all — it is
26
+ * a claim, and it lives inside `provider` where it is obviously one.
27
+ * - **A locator locates; it never identifies.** `file_key`, `node_id`,
28
+ * `artifact` — none of them replace the Workline id, revision or digest, and
29
+ * none of them may carry a credential.
30
+ */
31
+ export const DESIGN_RENDITION_SCHEMA_ID = CANONICAL_SCHEMAS.rendition;
32
+ const MEDIA = [
33
+ "static_image",
34
+ "document",
35
+ "interactive_html",
36
+ "prototype",
37
+ "storyboard",
38
+ ];
39
+ /** The two media that can show a trigger, a transition and an outcome. */
40
+ const INTERACTIVE_MEDIA = ["prototype", "storyboard"];
41
+ const FIDELITIES = ["low", "medium", "high"];
42
+ const FORMATS = ["svg", "png", "jpeg", "webp", "pdf", "html"];
43
+ /** Accepted file extensions per format — `format` must match what is on disk. */
44
+ const EXTENSIONS = {
45
+ svg: [".svg"],
46
+ png: [".png"],
47
+ jpeg: [".jpg", ".jpeg"],
48
+ webp: [".webp"],
49
+ pdf: [".pdf"],
50
+ html: [".html"],
51
+ };
52
+ const ACCESS = [
53
+ "local_only",
54
+ "public",
55
+ "link_shared",
56
+ "team",
57
+ "private",
58
+ ];
59
+ const SYNCS = ["in_sync", "diverged", "unknown"];
60
+ export const ALLOWED_KEYS = {
61
+ "": [
62
+ "schema",
63
+ "id",
64
+ "revision",
65
+ "supersedes",
66
+ "purpose",
67
+ "medium",
68
+ "fidelity",
69
+ "tool",
70
+ "format",
71
+ "context",
72
+ "sources",
73
+ "source_digest",
74
+ "coverage",
75
+ "files",
76
+ "provider",
77
+ "access",
78
+ "interaction_evidence",
79
+ "data_classification",
80
+ ],
81
+ context: ["platform", "viewport", "theme", "locale", "variants"],
82
+ "sources[]": ["ref", "sha256"],
83
+ coverage: ["criteria", "states"],
84
+ "files[]": ["path", "sha256"],
85
+ provider: ["name", "locator", "version", "sync"],
86
+ interaction_evidence: ["trigger", "transition", "outcome"],
87
+ };
88
+ const ANCHOR_RE = new RegExp(`^${GRAMMAR.anchor}$`);
89
+ const CRITERION_RE = /^S\d{3}\/AC-(?:[A-Z]+-)?\d+$/;
90
+ const DATA_CLASSIFICATIONS = ["synthetic", "redacted", "real"];
91
+ /**
92
+ * The staleness token: one digest over every source this rendition saw.
93
+ *
94
+ * Sorted and canonicalized so the same set of sources always produces the same
95
+ * token, and computed over the pairs rather than over the refs alone — a
96
+ * rendition of `SCR-001@r2` is stale when the BYTES of r2 changed, not only when
97
+ * somebody published r3.
98
+ */
99
+ export function computeSourceDigest(sources) {
100
+ const sorted = [...sources].sort((a, b) => (a.ref < b.ref ? -1 : a.ref > b.ref ? 1 : 0));
101
+ const input = canonicalJson(sorted.map((s) => ({ ref: s.ref, sha256: s.sha256 })));
102
+ return `sha256:${createHash("sha256").update(input, "utf8").digest("hex")}`;
103
+ }
104
+ /**
105
+ * Did the content this was cut from move?
106
+ *
107
+ * Generic over the subject because a rendition and an external proposal ask the
108
+ * exact same question: I recorded these revisions with these bytes — are they
109
+ * still those bytes? `current` is the package as it is RIGHT NOW; comparing a
110
+ * record against itself would always pass, which is the failure mode this exists
111
+ * to prevent.
112
+ */
113
+ export function checkSourcesStale(subject, sources, sourceDigest, current) {
114
+ const rebuilt = sources.map((s) => ({ ref: s.ref, sha256: current.get(s.ref) ?? "" }));
115
+ const actual = computeSourceDigest(rebuilt);
116
+ if (actual === sourceDigest)
117
+ return null;
118
+ return {
119
+ subject,
120
+ expected: sourceDigest,
121
+ actual,
122
+ moved: sources
123
+ .filter((s) => current.get(s.ref) !== s.sha256)
124
+ .map((s) => s.ref)
125
+ .sort(),
126
+ };
127
+ }
128
+ /** Is this rendition still a picture of what it claims to be? */
129
+ export function checkStale(rendition, current) {
130
+ return checkSourcesStale(`${rendition.id}@r${rendition.revision}`, rendition.sources, rendition.source_digest, current);
131
+ }
132
+ /** The stale verdict as a failure, for a caller that must refuse to go on. */
133
+ export function staleFailure(verdict, artifact) {
134
+ return {
135
+ code: "DESIGN_RENDITION_STALE",
136
+ artifact,
137
+ message: `${verdict.subject} se generó desde un contenido que ya cambió (${verdict.moved.join(", ") || "sus fuentes"})`,
138
+ action: "regenerá la rendition sobre la revisión vigente, o registrala contra la revisión de la que realmente salió",
139
+ };
140
+ }
141
+ export function validateDesignRendition(raw, artifact) {
142
+ const r = new Reader(ALLOWED_KEYS);
143
+ if (!isRecord(raw)) {
144
+ r.fail("DESIGN_RENDITION_NOT_OBJECT", artifact, "la rendition no es un objeto JSON", `reescribí '${artifact}' como un único objeto JSON conforme a ${DESIGN_RENDITION_SCHEMA_ID}`);
145
+ return done(r, null);
146
+ }
147
+ const schema = r.read(raw, "schema");
148
+ if (schema !== DESIGN_RENDITION_SCHEMA_ID) {
149
+ r.fail("DESIGN_SCHEMA_UNKNOWN", artifact, `versión de formato no soportada: ${JSON.stringify(schema)}`, `este Workline entiende ${DESIGN_RENDITION_SCHEMA_ID}`);
150
+ return done(r, null);
151
+ }
152
+ r.closed(raw, "", artifact);
153
+ const rawId = r.read(raw, "id");
154
+ const parsedId = parseArtifactId(rawId);
155
+ if (parsedId === null || !parsedId.artifact.startsWith("VIS-")) {
156
+ r.invalid(artifact, `'id' debe ser DES-NNN/VIS-NNN y llegó ${JSON.stringify(rawId)}`, "escribí la identidad completa, por ejemplo DES-001/VIS-001");
157
+ }
158
+ const revision = r.read(raw, "revision");
159
+ if (!isRevision(revision)) {
160
+ r.invalid(artifact, "'revision' debe ser un entero >= 1", "las revisiones son lógicas y empiezan en 1");
161
+ }
162
+ const supersedes = readSupersedes(r, raw, artifact, rawId, revision);
163
+ const purpose = r.read(raw, "purpose");
164
+ if (!isNonEmptyString(purpose)) {
165
+ r.invalid(artifact, "'purpose' es obligatorio y no admite vacío", "escribí para qué existe esta rendition");
166
+ }
167
+ const tool = r.read(raw, "tool");
168
+ if (!isNonEmptyString(tool)) {
169
+ r.invalid(artifact, "'tool' es obligatorio", "nombrá la herramienta que la produjo");
170
+ }
171
+ const medium = readEnum(r, raw, artifact, "medium", MEDIA, "declará qué clase de artefacto es");
172
+ const fidelity = readEnum(r, raw, artifact, "fidelity", FIDELITIES, "la fidelidad es una propiedad de la IMAGEN y no mueve la madurez de la screen");
173
+ const format = readEnum(r, raw, artifact, "format", FORMATS, "declará el formato del archivo de preview");
174
+ const access = readEnum(r, raw, artifact, "access", ACCESS, "registrá la CLASE de acceso, nunca la credencial");
175
+ const classification = readEnum(r, raw, artifact, "data_classification", DATA_CLASSIFICATIONS, "el default es 'synthetic': material real exige declararlo");
176
+ const context = readContext(r, raw, artifact);
177
+ const sources = readSources(r, raw, artifact);
178
+ const coverage = readCoverage(r, raw, artifact);
179
+ const files = readFiles(r, raw, artifact, format);
180
+ const provider = readProvider(r, raw, artifact);
181
+ const evidence = readInteractionEvidence(r, raw, artifact, medium);
182
+ const sourceDigest = r.read(raw, "source_digest");
183
+ if (!isDigest(sourceDigest)) {
184
+ r.invalid(artifact, "'source_digest' debe ser 'sha256:' + 64 hex", "calculalo sobre la lista canónica de 'sources'");
185
+ }
186
+ else if (sources.length > 0 && sourceDigest !== computeSourceDigest(sources)) {
187
+ // Un token que no es el de sus propias fuentes no detecta nada: la detección
188
+ // de obsolescencia entera cuelga de que este digest sea recomputable.
189
+ r.fail("DESIGN_DIGEST_MISMATCH", artifact, `'source_digest' no es el de las fuentes declaradas (declara ${sourceDigest}, calcula ${computeSourceDigest(sources)})`, "recalculalo sobre 'sources', o corregí las fuentes que esta rendition realmente usó");
190
+ }
191
+ // Una rendition apunta a un objeto de un tercero: es el lugar más probable de
192
+ // todo el package para que se cuele un token de acceso.
193
+ for (const failure of secretFailures(raw, artifact))
194
+ r.failures.push(failure);
195
+ if (r.failures.length > 0)
196
+ return done(r, null);
197
+ return done(r, {
198
+ schema: DESIGN_RENDITION_SCHEMA_ID,
199
+ id: rawId,
200
+ revision: revision,
201
+ supersedes,
202
+ purpose: purpose,
203
+ medium: medium,
204
+ fidelity: fidelity,
205
+ tool: tool,
206
+ format: format,
207
+ context,
208
+ sources,
209
+ source_digest: sourceDigest,
210
+ coverage,
211
+ files,
212
+ provider,
213
+ access: access,
214
+ interaction_evidence: evidence,
215
+ data_classification: classification,
216
+ });
217
+ }
218
+ /** A closed vocabulary field, read and reported once. */
219
+ function readEnum(r, raw, artifact, field, allowed, action) {
220
+ const value = r.read(raw, field);
221
+ if (allowed.includes(value))
222
+ return value;
223
+ r.invalid(artifact, `'${field}' debe ser uno de ${allowed.join(", ")} y llegó ${JSON.stringify(value)}`, action);
224
+ return null;
225
+ }
226
+ function readSupersedes(r, raw, artifact, id, revision) {
227
+ const value = r.read(raw, "supersedes");
228
+ if (value === null || value === undefined) {
229
+ if (value === undefined) {
230
+ r.invalid(artifact, "'supersedes' es obligatorio", "usá null cuando esta es la primera revisión de la rendition");
231
+ }
232
+ return null;
233
+ }
234
+ const ref = parseArtifactRef(value);
235
+ if (ref === null || `${ref.package}/${ref.artifact}` !== id) {
236
+ r.invalid(artifact, `'supersedes' debe ser una revisión anterior de ${String(id)} y llegó ${JSON.stringify(value)}`, "una rendition supersede a sí misma o a nada");
237
+ return null;
238
+ }
239
+ if (isRevision(revision) && ref.revision >= revision) {
240
+ r.fail("DESIGN_RELATION_BROKEN", artifact, `'supersedes' apunta a r${ref.revision} y esta revisión es r${revision}`, "solo se supersede una revisión anterior");
241
+ return null;
242
+ }
243
+ return value;
244
+ }
245
+ function readContext(r, raw, artifact) {
246
+ const empty = {
247
+ platform: "",
248
+ viewport: "",
249
+ theme: "",
250
+ locale: "",
251
+ variants: [],
252
+ };
253
+ const node = r.read(raw, "context");
254
+ if (!isRecord(node)) {
255
+ r.invalid(artifact, "'context' debe ser un objeto con platform, viewport, theme, locale y variants", "el mismo diseño se ve distinto según el contexto: declaralo");
256
+ return empty;
257
+ }
258
+ r.closed(node, "context", artifact);
259
+ const out = { ...empty };
260
+ for (const field of ["platform", "viewport", "theme", "locale"]) {
261
+ const value = r.read(node, `context.${field}`);
262
+ if (!isNonEmptyString(value)) {
263
+ r.invalid(artifact, `'context.${field}' es obligatorio y no admite vacío`, `declará el ${field} en el que se produjo la rendition`);
264
+ continue;
265
+ }
266
+ out[field] = value;
267
+ }
268
+ const variants = r.read(node, "context.variants");
269
+ if (!Array.isArray(variants)) {
270
+ r.invalid(artifact, "'context.variants' debe ser un array", "usá [] si no hay variantes");
271
+ return out;
272
+ }
273
+ for (const variant of variants) {
274
+ if (!isNonEmptyString(variant)) {
275
+ r.invalid(artifact, `'context.variants' trae una variante vacía: ${JSON.stringify(variant)}`, "nombrá cada variante, o dejá el array vacío");
276
+ continue;
277
+ }
278
+ out.variants.push(variant);
279
+ }
280
+ return out;
281
+ }
282
+ /**
283
+ * The revisions this rendition came out of, anchored or whole.
284
+ *
285
+ * An anchor is allowed and meaningful here: a preview of one state IS a preview
286
+ * of one state, and recording the whole screen instead would claim coverage of
287
+ * every state the screen has.
288
+ */
289
+ function readSources(r, raw, artifact) {
290
+ const out = [];
291
+ const seen = new Set();
292
+ for (const entry of eachRecord(r, raw, "sources", artifact, " de revisiones fuente")) {
293
+ const ref = r.read(entry, "sources[].ref");
294
+ const sha256 = r.read(entry, "sources[].sha256");
295
+ const parsed = parseArtifactRef(ref);
296
+ if (parsed === null || parsed.artifact.startsWith("VIS-")) {
297
+ r.invalid(artifact, `'sources[].ref' debe ser una revisión de flow, screen, rule o token y llegó ${JSON.stringify(ref)}`, "una rendition sale del diseño, no de otra rendition");
298
+ continue;
299
+ }
300
+ if (seen.has(ref)) {
301
+ r.fail("DESIGN_ID_DUPLICATE", artifact, `'sources' repite ${ref}`, "dejá una sola aparición");
302
+ continue;
303
+ }
304
+ seen.add(ref);
305
+ if (!isDigest(sha256)) {
306
+ r.invalid(artifact, `sources['${ref}']: 'sha256' debe ser 'sha256:' + 64 hex`, "hasheá los bytes del documento fuente");
307
+ continue;
308
+ }
309
+ out.push({ ref: ref, sha256 });
310
+ }
311
+ if (out.length === 0 && r.failures.length === 0) {
312
+ r.invalid(artifact, "'sources' está vacío y una rendition siempre sale de algo", "declará la revisión de la que se generó: sin fuente no hay obsolescencia detectable");
313
+ }
314
+ return out;
315
+ }
316
+ function readCoverage(r, raw, artifact) {
317
+ const out = { criteria: [], states: [] };
318
+ const node = r.read(raw, "coverage");
319
+ if (!isRecord(node)) {
320
+ r.invalid(artifact, "'coverage' debe ser un objeto con 'criteria' y 'states'", "declará qué criterios y qué estados demuestra esta rendition");
321
+ return out;
322
+ }
323
+ r.closed(node, "coverage", artifact);
324
+ out.criteria = readClosedList(r, artifact, "coverage.criteria", r.read(node, "coverage.criteria"), CRITERION_RE, "citá el criterio como lo escribe Workline, por ejemplo S013/AC-REN-01");
325
+ out.states = readClosedList(r, artifact, "coverage.states", r.read(node, "coverage.states"), ANCHOR_RE, "nombrá el anchor del estado, sin '#'");
326
+ return out;
327
+ }
328
+ /**
329
+ * A list whose items all have to match one closed grammar, deduplicated. The two
330
+ * halves of `coverage` differ only in that grammar, so they share this.
331
+ */
332
+ function readClosedList(r, artifact, path, raw, grammar, action) {
333
+ if (!Array.isArray(raw)) {
334
+ r.invalid(artifact, `'${path}' debe ser un array`, `usá '${path}': [] si no cubre ninguno`);
335
+ return [];
336
+ }
337
+ const out = [];
338
+ for (const value of raw) {
339
+ if (typeof value !== "string" || !grammar.test(value)) {
340
+ r.invalid(artifact, `'${path}' trae un valor inválido: ${JSON.stringify(value)}`, action);
341
+ continue;
342
+ }
343
+ if (!out.includes(value))
344
+ out.push(value);
345
+ }
346
+ return out;
347
+ }
348
+ /**
349
+ * The local files. Paths are relative to the rendition's OWN directory, so a
350
+ * rendition can never claim a file that belongs to another one.
351
+ */
352
+ function readFiles(r, raw, artifact, format) {
353
+ const out = [];
354
+ const seen = new Set();
355
+ for (const entry of eachRecord(r, raw, "files", artifact, " de archivos locales")) {
356
+ const path = r.read(entry, "files[].path");
357
+ const sha256 = r.read(entry, "files[].sha256");
358
+ if (typeof path !== "string" || path.length === 0) {
359
+ r.invalid(artifact, "cada entrada de 'files' necesita 'path'", "escribí el path relativo a la carpeta de la rendition, por ejemplo preview.svg");
360
+ continue;
361
+ }
362
+ const safe = checkSafeRelativePath(path);
363
+ if (!safe.ok) {
364
+ r.fail("DESIGN_PATH_UNSAFE", artifact, `files: '${path}' ${safe.why}`, "los archivos de una rendition viven dentro de su propia carpeta");
365
+ continue;
366
+ }
367
+ if (seen.has(safe.path)) {
368
+ r.fail("DESIGN_ID_DUPLICATE", artifact, `'${safe.path}' está declarado dos veces`, "nombrá cada archivo una vez");
369
+ continue;
370
+ }
371
+ seen.add(safe.path);
372
+ if (!isDigest(sha256)) {
373
+ r.invalid(artifact, `files['${safe.path}']: 'sha256' debe ser 'sha256:' + 64 hex`, "hasheá los bytes del archivo");
374
+ continue;
375
+ }
376
+ out.push({ path: safe.path, sha256 });
377
+ }
378
+ if (out.length === 0) {
379
+ // Una rendition sin archivo local es exactamente la evidencia que desaparece
380
+ // cuando el proveedor no está: es el caso que AC-REN-07 existe para impedir.
381
+ r.fail("DESIGN_EVIDENCE_INSUFFICIENT", artifact, "'files' está vacío: la rendition no conserva ninguna evidencia local", "guardá la preview dentro de la carpeta de la rendition y declarala en 'files'");
382
+ return out;
383
+ }
384
+ if (format !== null && !out.some((f) => EXTENSIONS[format].some((e) => f.path.endsWith(e)))) {
385
+ r.invalid(artifact, `declara 'format': ${format} y ninguno de sus archivos termina en ${EXTENSIONS[format].join(" o ")}`, "corregí el formato declarado, o agregá el archivo que lo respalda");
386
+ }
387
+ return out;
388
+ }
389
+ function readProvider(r, raw, artifact) {
390
+ const node = r.read(raw, "provider");
391
+ if (node === null || node === undefined) {
392
+ if (node === undefined) {
393
+ r.invalid(artifact, "'provider' es obligatorio", "usá null cuando la rendition es puramente local");
394
+ }
395
+ return null;
396
+ }
397
+ if (!isRecord(node)) {
398
+ r.invalid(artifact, "'provider' debe ser null o un objeto con name, locator, version y sync", "una rendición local declara provider: null");
399
+ return null;
400
+ }
401
+ r.closed(node, "provider", artifact);
402
+ const name = r.read(node, "provider.name");
403
+ if (!isNonEmptyString(name)) {
404
+ r.invalid(artifact, "'provider.name' es obligatorio", "nombrá el proveedor, por ejemplo figma");
405
+ }
406
+ const pairs = readLocator(r, artifact, r.read(node, "provider.locator"));
407
+ const version = r.read(node, "provider.version");
408
+ if (version !== null && version !== undefined && !isNonEmptyString(version)) {
409
+ r.invalid(artifact, `'provider.version' debe ser un texto o null y llegó ${JSON.stringify(version)}`, "usá null cuando el proveedor no expone una versión estable");
410
+ }
411
+ const sync = readEnum(r, node, artifact, "provider.sync", SYNCS, "la sincronía con el proveedor es una AFIRMACIÓN: 'unknown' es la respuesta honesta sin consultarlo");
412
+ return {
413
+ name: isNonEmptyString(name) ? name : "",
414
+ locator: pairs,
415
+ version: typeof version === "string" ? version : null,
416
+ sync: sync ?? "unknown",
417
+ };
418
+ }
419
+ /**
420
+ * The provider-shaped keys. Which keys they are is the adapter profile's business,
421
+ * so this only insists that there is at least one and that each one locates
422
+ * something — an empty value is worse than an absent locator, because it reads as
423
+ * a registered fact.
424
+ */
425
+ function readLocator(r, artifact, locator) {
426
+ const pairs = {};
427
+ if (!isRecord(locator) || Object.keys(locator).length === 0) {
428
+ r.invalid(artifact, "'provider.locator' debe ser un objeto con al menos una clave", "declará el locator mínimo del proveedor, por ejemplo file_key y node_id");
429
+ return pairs;
430
+ }
431
+ for (const [key, value] of Object.entries(locator)) {
432
+ if (!isNonEmptyString(value)) {
433
+ r.invalid(artifact, `'provider.locator.${key}' no admite vacío`, "un locator que no localiza nada es peor que ninguno: quitalo o completalo");
434
+ continue;
435
+ }
436
+ pairs[key] = value;
437
+ }
438
+ return pairs;
439
+ }
440
+ function readInteractionEvidence(r, raw, artifact, medium) {
441
+ const node = r.read(raw, "interaction_evidence");
442
+ if (node === null || node === undefined) {
443
+ if (node === undefined) {
444
+ r.invalid(artifact, "'interaction_evidence' es obligatorio", "usá null cuando la rendition no demuestra una interacción");
445
+ }
446
+ return null;
447
+ }
448
+ if (!isRecord(node)) {
449
+ r.invalid(artifact, "'interaction_evidence' debe ser null o un objeto con trigger, transition y outcome", "una rendition estática declara interaction_evidence: null");
450
+ return null;
451
+ }
452
+ r.closed(node, "interaction_evidence", artifact);
453
+ // Un PNG no muestra una transición. Aceptar la evidencia sobre un medio que no
454
+ // puede sostenerla es dejar que una afirmación pase por una demostración.
455
+ if (medium !== null && !INTERACTIVE_MEDIA.includes(medium)) {
456
+ r.fail("DESIGN_EVIDENCE_INSUFFICIENT", artifact, `declara evidencia de interacción sobre un medio '${medium}'`, `una interacción se evidencia con ${INTERACTIVE_MEDIA.join(" o ")}: cambiá el medio, o poné interaction_evidence en null`);
457
+ }
458
+ const out = { trigger: "", transition: "", outcome: "" };
459
+ for (const field of ["trigger", "transition", "outcome"]) {
460
+ const value = r.read(node, `interaction_evidence.${field}`);
461
+ if (!isNonEmptyString(value)) {
462
+ r.invalid(artifact, `'interaction_evidence.${field}' es obligatorio y no admite vacío`, "una interacción se demuestra con las tres cosas: qué la dispara, qué transición produce y en qué termina");
463
+ continue;
464
+ }
465
+ out[field] = value;
466
+ }
467
+ return out;
468
+ }
469
+ function done(r, value) {
470
+ return { ok: value !== null, value, failures: r.failures, touched: r.touched };
471
+ }
472
+ //# sourceMappingURL=rendition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rendition.js","sourceRoot":"","sources":["../../../src/domain/design/rendition.ts"],"names":[],"mappings":"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"}