@tacuchi/agent-workflow-cli 12.4.0 → 12.6.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 (77) hide show
  1. package/dist/adapters/git-cli.d.ts +1 -0
  2. package/dist/adapters/git-cli.d.ts.map +1 -1
  3. package/dist/adapters/git-cli.js +21 -0
  4. package/dist/adapters/git-cli.js.map +1 -1
  5. package/dist/application/humanize-es.d.ts +18 -0
  6. package/dist/application/humanize-es.d.ts.map +1 -0
  7. package/dist/application/humanize-es.js +71 -0
  8. package/dist/application/humanize-es.js.map +1 -0
  9. package/dist/application/merge-state-service.d.ts +37 -0
  10. package/dist/application/merge-state-service.d.ts.map +1 -0
  11. package/dist/application/merge-state-service.js +89 -0
  12. package/dist/application/merge-state-service.js.map +1 -0
  13. package/dist/application/session-close-service.d.ts.map +1 -1
  14. package/dist/application/session-close-service.js +4 -1
  15. package/dist/application/session-close-service.js.map +1 -1
  16. package/dist/application/status-service.d.ts +74 -0
  17. package/dist/application/status-service.d.ts.map +1 -0
  18. package/dist/application/status-service.js +336 -0
  19. package/dist/application/status-service.js.map +1 -0
  20. package/dist/application/templates/session.d.ts +4 -2
  21. package/dist/application/templates/session.d.ts.map +1 -1
  22. package/dist/application/templates/session.js +15 -11
  23. package/dist/application/templates/session.js.map +1 -1
  24. package/dist/cli/commands/merge-state.d.ts +3 -0
  25. package/dist/cli/commands/merge-state.d.ts.map +1 -0
  26. package/dist/cli/commands/merge-state.js +28 -0
  27. package/dist/cli/commands/merge-state.js.map +1 -0
  28. package/dist/cli/commands/status.d.ts +3 -0
  29. package/dist/cli/commands/status.d.ts.map +1 -0
  30. package/dist/cli/commands/status.js +10 -0
  31. package/dist/cli/commands/status.js.map +1 -0
  32. package/dist/cli/help-groups.d.ts.map +1 -1
  33. package/dist/cli/help-groups.js +2 -1
  34. package/dist/cli/help-groups.js.map +1 -1
  35. package/dist/cli/main.js +4 -0
  36. package/dist/cli/main.js.map +1 -1
  37. package/dist/cli/tui/data/workflow-content.d.ts.map +1 -1
  38. package/dist/cli/tui/data/workflow-content.js +2 -1
  39. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  40. package/dist/ports/git.d.ts +5 -0
  41. package/dist/ports/git.d.ts.map +1 -1
  42. package/package.json +1 -1
  43. package/skills/w/README.md +6 -3
  44. package/skills/w/SKILL.md +25 -9
  45. package/skills/w/artifacts/README.md +10 -9
  46. package/skills/w/artifacts/artifacts-core/BACKLOG.md +5 -8
  47. package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +14 -13
  48. package/skills/w/artifacts/artifacts-core/SESSION.md +10 -11
  49. package/skills/w/artifacts/artifacts-core/TASKS.md +5 -5
  50. package/skills/w/artifacts/{artifacts-dev → artifacts-exec}/DECISION.md +3 -3
  51. package/skills/w/artifacts/{artifacts-dev → artifacts-exec}/TECHNICAL-NOTE.md +15 -15
  52. package/skills/w/artifacts/artifacts-research/ANALYSIS-FILE.md +14 -27
  53. package/skills/w/artifacts/artifacts-research/CONCLUSIONS.md +10 -13
  54. package/skills/w/commands/README.md +16 -10
  55. package/skills/w/commands/fix-git.md +33 -0
  56. package/skills/w/commands/plan-exec.md +4 -4
  57. package/skills/w/commands/plan-new.md +9 -7
  58. package/skills/w/commands/quick.md +1 -1
  59. package/skills/w/commands/spec-new.md +19 -15
  60. package/skills/w/commands/spec-refine.md +7 -5
  61. package/skills/w/commands/status.md +50 -0
  62. package/skills/w/exports/README.md +2 -2
  63. package/skills/w/exports/export-diagrams/SKILL.md +1 -1
  64. package/skills/w/exports/export-manuals/SKILL.md +2 -2
  65. package/skills/w/exports/export-reports/SKILL.md +1 -1
  66. package/skills/w/exports/export-scripts/SKILL.md +1 -1
  67. package/skills/w/harness/SKILL.md +85 -0
  68. package/skills/w/loops/README.md +22 -21
  69. package/skills/w/loops/plan-exec-loop/SKILL.md +60 -58
  70. package/skills/w/loops/plan-new-loop/SKILL.md +47 -41
  71. package/skills/w/loops/quick-loop/SKILL.md +23 -20
  72. package/skills/w/loops/spec-refine-loop/SKILL.md +116 -82
  73. package/skills/w/roles/README.md +2 -2
  74. package/skills/w/roles/git/SKILL.md +28 -7
  75. package/skills/w/roles/research/SKILL.md +22 -82
  76. package/skills/w/roles/testing/SKILL.md +2 -2
  77. package/skills/w/roles/ui-spec/SKILL.md +58 -48
@@ -28,10 +28,10 @@ Dar a los loops la capacidad de razonar sobre tests: qué nivel aplicar, con qu
28
28
 
29
29
  ### Execution rule
30
30
 
31
- Por defecto, **no ejecutar pruebas automáticamente**. Antes de correr cualquier test runner:
31
+ Por defecto, **no ejecutar pruebas automáticamente**. Antes de correr cualquier test runner, preguntar al humano vía *structured-choice* (capacidad del arnés — ver `../../harness/SKILL.md`). En **Claude Code** es `AskUserQuestion` (máx 4 preguntas/llamada → **≤3 preguntas de contenido + 1 control `flow`**); en un arnés sin elección estructurada, degrada a **markdown numerado**.
32
32
 
33
33
  ```
34
- AskUserQuestion:
34
+ structured-choice:
35
35
  "¿Correr los tests?"
36
36
  [a] Sí, el loop los ejecuta
37
37
  [b] Los corro yo manualmente
@@ -2,12 +2,12 @@
2
2
  name: ui-spec
3
3
  description: >-
4
4
  UI spec authoring — built-in default for the `ui-design` capability. Given a UI
5
- requirement, author a structured, framework-agnostic screen specification (the
6
- universal `Screen` model in JSON) plus its readable Markdown render. Knows the
7
- `Screen` schema, the kind/region vocabulary, the authoring rules, design-system /
8
- theme / variant handling, and the exact Markdown render format. Use when a loop is
9
- refining a spec that involves screens, forms, dashboards, modals or any UI surface
10
- — primarily `spec-refine-loop`. Recycled from the `ui-spec-generator` service.
5
+ requirement, author a structured, framework-agnostic screen specification as
6
+ **Markdown** (single output format). Knows the conceptual screen structure, the
7
+ kind/region vocabulary, the authoring rules, design-system / theme / variant
8
+ handling, and the exact Markdown render format. Use when a loop is refining a spec
9
+ that involves screens, forms, dashboards, modals or any UI surface — primarily
10
+ `spec-refine-loop`. Recycled from the `ui-spec-generator` service.
11
11
  ---
12
12
 
13
13
  # ui-spec — UI spec authoring
@@ -18,37 +18,31 @@ description: >-
18
18
 
19
19
  ## Purpose
20
20
 
21
- Dado un requerimiento de UI, autorar una **especificación de pantalla estructurada** — un modelo universal, agnóstico de framework más su render Markdown legible. **Reemplaza** al servicio single-shot `ui-spec-generator`: ahora la IA la autora **nativamente**, guiada por esta skill. No hay endpoint que llamar; el saber del servicio vive aquí.
21
+ Dado un requerimiento de UI, autorar una **descripción estructurada en Markdown** de las pantallas y sus componentes descriptiva (qué hay y para qué) y estructurada (regiones componentes, con vocabulario consistente), agnóstica de framework. **Reemplaza** al servicio single-shot `ui-spec-generator`: ahora la IA la autora **nativamente**, guiada por esta skill. No hay endpoint que llamar; el saber del servicio vive aquí. **Salida en un solo formato: Markdown** (sin representación JSON paralela).
22
22
 
23
23
  ## Composed by
24
24
 
25
- La carga el **`spec-refine-loop`** (ver `../../loops/spec-refine-loop.md`) cuando el requerimiento involucra UI. El loop aporta lo que el servicio viejo no tenía:
25
+ La carga el **`spec-refine-loop`** (ver `../../loops/spec-refine-loop/SKILL.md`) al resolver el gap **UI sin especificar** (cuando el requerimiento involucra UI). El loop aporta lo que el servicio viejo no tenía:
26
26
 
27
- - **Pregunta al humano** (design-system, tema, ambigüedades de pantalla) vía `AskUserQuestion`.
27
+ - **Pregunta al humano** (design-system, tema, ambigüedades de pantalla) vía *structured-choice* (capacidad del arnés — ver `../../harness/SKILL.md`). En **Claude Code** es `AskUserQuestion` (máx 4 preguntas/llamada → **≤3 preguntas de contenido + 1 control `flow`**); en un arnés sin elección estructurada, degrada a **markdown numerado**.
28
28
  - **Itera** gap-driven hasta converger.
29
29
  - Ofrece **variantes** y **cura** el resultado.
30
30
 
31
- Cualquier loop podría componerla; el caso primario es SPEC. El `Screen` y su Markdown aterrizan como una sección dentro del documento spec (`docs/specs/NNN-spec.md`) — nunca como artefacto suelto (invariante 3: el spec es un documento).
31
+ Cualquier loop podría componerla; el caso primario es SPEC. La descripción Markdown aterriza como una sección dentro del documento spec (`docs/specs/NNN-spec-<slug>.md`) — nunca como artefacto suelto (invariante 3: el spec es un documento).
32
32
 
33
33
  ## Knowledge
34
34
 
35
- ### Schema (modelo `Screen` — universal, recursivo)
35
+ ### Estructura conceptual (universal, recursiva)
36
36
 
37
- ```
38
- Screen {
39
- name: string # nombre de la pantalla
40
- purpose: string # "tipo" semántico: auth, dashboard, form, list, detail, error, ...
41
- platform: string # web (default), mobile, ...
42
- description?: string
43
- regions?: Region[] # pantallas complejas
44
- components?: Component[] # pantallas simples
45
- } # usar regions O components, no ambos
46
- Region { type: string, components: Component[] }
47
- Component { kind: string, role?: string, label?: string, children?: Component[] } # recursive
48
- ```
37
+ Una **pantalla** tiene: `nombre`, `tipo` (propósito semántico: auth, dashboard, form, list, detail, error, …), `plataforma` (web por default, mobile, …), `descripción` opcional, y **o bien regiones** (pantalla compleja) **o bien componentes** directos (pantalla simple) — **no ambos**.
38
+
39
+ - Una **región** agrupa componentes y tiene un `type`.
40
+ - Un **componente** tiene un `kind`, y opcionalmente `role`, `label` y `children` (anidables, recursivos).
49
41
 
50
- - `type` (region) `header · main · footer · sidebar · filters · summary`
51
- - `kind` (component) por categoría:
42
+ Es un modelo conceptual para guiar la autoría; **no se serializa a JSON** la única salida es el render Markdown (ver Output).
43
+
44
+ - `type` (región) ∈ `header · main · footer · sidebar · filters · summary`
45
+ - `kind` (componente) por categoría:
52
46
  - **Contenedores**: `card · panel · modal`
53
47
  - **Datos**: `table · list · grid`
54
48
  - **Visualización**: `chart · metric · badge · image`
@@ -57,8 +51,6 @@ Component { kind: string, role?: string, label?: string, children?: Component[]
57
51
  - **Navegación**: `navBar · tabs · breadcrumb`
58
52
  - **Feedback**: `alert · progress`
59
53
 
60
- JSON serializado en **camelCase**, **claves null omitidas** (no emitir `"description": null`).
61
-
62
54
  ### Rules
63
55
 
64
56
  1. **Conciso** — solo lo esencial. Nada de relleno ni componentes especulativos.
@@ -66,11 +58,11 @@ JSON serializado en **camelCase**, **claves null omitidas** (no emitir `"descrip
66
58
  3. Pantalla compleja (dashboard, mantenimiento CRUD) → `regions` para organizar.
67
59
  4. `role` es **opcional** — solo si aporta claridad (`role:"logo"`, `role:"primary"`).
68
60
  5. Límites: **≤100 componentes**, **≤5 niveles** de anidación.
69
- 6. Un solo `Screen` por sección; si el requerimiento son varias pantallas, una sección por pantalla.
61
+ 6. Una sola pantalla por bloque `#`; si el requerimiento son varias pantallas, se listan una tras otra (cada una con su `#`).
70
62
 
71
63
  ### Design options (las pregunta el loop al humano)
72
64
 
73
- Estas opciones **guían contenido/labels**; el modelo `Screen` es **agnóstico** de design-system y NO las lleva como campos. Se **anotan en el spec** (encabezado de la sección), no en el JSON:
65
+ Estas opciones **guían contenido/labels**; la estructura de la pantalla es **agnóstica** de design-system y NO las lleva como parte del modelo. Se **anotan en el spec** (encabezado de la sección):
74
66
 
75
67
  - **Design system**: `material3 · bootstrap5 · tailwind3 · antDesign · chakraUI · custom`.
76
68
  - **Tema**: `light · dark · auto`.
@@ -80,11 +72,11 @@ Estas opciones **guían contenido/labels**; el modelo `Screen` es **agnóstico**
80
72
 
81
73
  ### Variants
82
74
 
83
- Cuando el requerimiento admite más de un layout razonable (ej. tabla vs. grid de cards; tabs vs. acordeón), ofrecer **2-3 variantes** como `Screen` alternativos y pedir al humano que elija. Una sola variante se cura y queda; las descartadas no se persisten.
75
+ Cuando el requerimiento admite más de un layout razonable (ej. tabla vs. grid de cards; tabs vs. acordeón), ofrecer **2-3 variantes** como pantallas Markdown alternativas y pedir al humano que elija. Una sola variante se cura y queda; las descartadas no se persisten.
84
76
 
85
77
  ### Disambiguation
86
78
 
87
- Antes de autorar, resolver ambigüedades con `AskUserQuestion` (lo dispara el loop):
79
+ Antes de autorar, resolver ambigüedades con *structured-choice* (lo dispara el loop; ver `../../harness/SKILL.md`):
88
80
 
89
81
  - Pantalla simple o compleja (¿necesita `regions`?).
90
82
  - Qué acciones primarias/secundarias existen.
@@ -95,27 +87,45 @@ Si el humano no responde, asumir el caso más simple coherente con la descripci
95
87
 
96
88
  ### Examples (few-shot)
97
89
 
98
- ```json
99
- // Simple (sin regions)
100
- {"name":"Recuperar Contraseña","purpose":"auth","platform":"web","components":[{"kind":"image","role":"logo"},{"kind":"textInput","label":"Correo electrónico"},{"kind":"button","label":"Enviar enlace"},{"kind":"link","label":"Volver al login"}]}
90
+ **Simple (sin regiones)** — "Recuperar Contraseña" (auth, web):
101
91
 
102
- // Complejo (con regions)
103
- {"name":"Dashboard","purpose":"dashboard","platform":"web","regions":[{"type":"summary","components":[{"kind":"metric","label":"Total"},{"kind":"metric","label":"Pendientes"}]},{"type":"main","components":[{"kind":"table","label":"Registros"}]}]}
92
+ ```markdown
93
+ # Recuperar Contraseña
94
+ **Tipo**: auth | **Plataforma**: web
95
+
96
+ ## Componentes
97
+ - **logo** (image)
98
+ - **Correo electrónico** (textInput)
99
+ - **Enviar enlace** (button)
100
+ - **Volver al login** (link)
101
+ ```
102
+
103
+ **Complejo (con regiones)** — "Dashboard" (web):
104
+
105
+ ```markdown
106
+ # Dashboard
107
+ **Tipo**: dashboard | **Plataforma**: web
108
+
109
+ ## Summary
110
+ - **Total** (metric)
111
+ - **Pendientes** (metric)
112
+
113
+ ## Main
114
+ - **Registros** (table)
104
115
  ```
105
116
 
106
- ## Output — sección `## UI spec` dentro del spec (`docs/specs/NNN-spec.md`)
117
+ ## Output — sección `## UI spec` dentro del spec (`docs/specs/NNN-spec-<slug>.md`)
107
118
 
108
- La escribe el loop (no esta skill por sí sola). Encabezar la sección con las opciones de diseño elegidas (design system, tema, idioma) en una línea. Luego dos representaciones:
119
+ **Salida en un solo formato: Markdown.** La escribe el loop (no esta skill por sí sola). Encabezar la sección con las opciones de diseño elegidas (design system, tema, idioma) en una línea. Luego el render Markdown, con estas reglas exactas (recicladas del `MarkdownFormatter`):
109
120
 
110
- 1. **`Screen` (JSON)** — camelCase, claves null omitidas, en bloque ```json.
111
- 2. **Markdown** render legible (reglas exactas, recicladas del `MarkdownFormatter`):
112
- - `# {name}`
113
- - `**Tipo**: {purpose} | **Plataforma**: {platform}`
114
- - `description` como párrafo aparte (solo si existe).
115
- - Con `regions`: un `## {Type capitalizado}` por región (capitalizar la primera letra del `type`).
116
- - Sin `regions`: un `## Componentes`.
117
- - Cada componente: `- **{label || role || kind}**`, seguido de ` ({kind})` **solo si** había `label` o `role`.
118
- - `children` indentados **2 espacios por nivel**.
121
+ - `# {nombre}`
122
+ - `**Tipo**: {tipo} | **Plataforma**: {plataforma}`
123
+ - `descripción` como párrafo aparte (solo si existe).
124
+ - Con regiones: un `## {Type capitalizado}` por región (capitalizar la primera letra del `type`).
125
+ - Sin regiones: un único `## Componentes`.
126
+ - Cada componente: `- **{label || role || kind}**`, seguido de ` ({kind})` **solo si** había `label` o `role`.
127
+ - `children` indentados **2 espacios por nivel**.
128
+ - Si hay varias pantallas, se listan una tras otra (cada una con su `#`).
119
129
 
120
130
  Ejemplo de render para el dashboard de arriba:
121
131
 
@@ -133,4 +143,4 @@ Ejemplo de render para el dashboard de arriba:
133
143
 
134
144
  ## Source
135
145
 
136
- Reciclada de `ui-spec-generator` (Spring Boot/Kotlin). Se **conservan**: el prompt de sistema (vocabulario, kinds, reglas), el esquema `Screen`/`Region`/`Component`, los pocos-shot, el enum de design systems, los constraints (theme/density/maxWidth) y las reglas exactas del `MarkdownFormatter`. Se **descarta**: el transporte HTTP, OpenRouter/Gemini y el modo single-shot — los reemplaza la iteración del `spec-refine-loop`. El endpoint del servicio deja de usarse. También absorbe los principios UX de la vieja skill `standards/frontend-design/` cuando el spec describe mantenimientos CRUD (formularios, listados, modales, navegación, feedback).
146
+ Reciclada de `ui-spec-generator` (Spring Boot/Kotlin). Se **conservan**: el prompt de sistema (vocabulario, kinds, reglas), la estructura conceptual pantalla/región/componente, los pocos-shot (ahora en Markdown), el enum de design systems, los constraints (theme/density/maxWidth) y las reglas exactas del `MarkdownFormatter` (su render era exactamente este). Se **descarta**: la **serialización JSON `Screen`** (segunda representación, ahora innecesaria), el transporte HTTP, OpenRouter/Gemini y el modo single-shot — los reemplaza la iteración del `spec-refine-loop`. El endpoint del servicio deja de usarse. También absorbe los principios UX de la vieja skill `standards/frontend-design/` cuando el spec describe mantenimientos CRUD (formularios, listados, modales, navegación, feedback).