@tacuchi/agent-workflow-cli 12.3.0 → 12.4.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/dist/application/session-create-service.d.ts +2 -0
- package/dist/application/session-create-service.d.ts.map +1 -1
- package/dist/application/session-create-service.js +26 -3
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/cli/main.js +0 -0
- package/package.json +1 -1
- package/skills/w/commands/export-diagrams.md +2 -6
- package/skills/w/commands/export-manuals.md +2 -6
- package/skills/w/commands/export-reports.md +2 -6
- package/skills/w/commands/export-scripts.md +2 -6
- package/skills/w/commands/plan-exec.md +7 -6
- package/skills/w/commands/plan-new.md +7 -6
- package/skills/w/commands/quick.md +7 -6
- package/skills/w/commands/spec-new.md +12 -2
- package/skills/w/commands/spec-refine.md +7 -6
- package/skills/w/loops/README.md +1 -1
- package/skills/w/loops/plan-exec-loop/SKILL.md +8 -6
- package/skills/w/loops/plan-new-loop/SKILL.md +2 -2
- package/skills/w/loops/quick-loop/SKILL.md +3 -3
- package/skills/w/loops/spec-refine-loop/SKILL.md +13 -7
|
@@ -12,6 +12,8 @@ export interface SessionCreateInput {
|
|
|
12
12
|
export interface SessionCreateRecordOutput {
|
|
13
13
|
type: SessionType;
|
|
14
14
|
name: string;
|
|
15
|
+
/** Global sequential number assigned by the CLI (zero-padded, e.g. "003"). */
|
|
16
|
+
number: string;
|
|
15
17
|
folder: string;
|
|
16
18
|
path: string;
|
|
17
19
|
session_path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-create-service.d.ts","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,yBAAyB,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"session-create-service.d.ts","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,yBAAyB,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,CAgCvD"}
|
|
@@ -22,6 +22,7 @@ export async function runSessionCreate(fs, _env, paths, input) {
|
|
|
22
22
|
const record = {
|
|
23
23
|
type,
|
|
24
24
|
name,
|
|
25
|
+
number: folderInfo.number,
|
|
25
26
|
folder: folderInfo.folder,
|
|
26
27
|
path: sessionPath,
|
|
27
28
|
session_path: sessionFilePath,
|
|
@@ -55,13 +56,35 @@ function validateInput(input) {
|
|
|
55
56
|
async function prepareSessionFolder(fs, paths, name) {
|
|
56
57
|
const sessionsDir = paths.cwdSessionsDir();
|
|
57
58
|
await fs.mkdirp(sessionsDir);
|
|
58
|
-
//
|
|
59
|
-
|
|
59
|
+
// The CLI owns the session number: a single global, sequential counter across
|
|
60
|
+
// ALL sessions in `.workflow/sessions/` (any type), so numbering never resets
|
|
61
|
+
// per type nor collides. Callers pass only the descriptor via `--name`; the
|
|
62
|
+
// `NNN-` prefix is assigned here. A descriptor that already carries a leading
|
|
63
|
+
// `NNN-` is normalized away first so the prefix can't double up.
|
|
64
|
+
const descriptor = name.replace(/^\d{3}-/, "");
|
|
65
|
+
const number = await nextSessionNumber(fs, sessionsDir);
|
|
66
|
+
const folder = `${number}-${descriptor}`;
|
|
60
67
|
const sessionPath = join(sessionsDir, folder);
|
|
61
68
|
if (await fs.exists(sessionPath)) {
|
|
62
69
|
return { error: `Ya existe ${sessionPath}` };
|
|
63
70
|
}
|
|
64
71
|
await fs.mkdirp(sessionPath);
|
|
65
|
-
return { folder, sessionPath, sessionsDir };
|
|
72
|
+
return { folder, number, sessionPath, sessionsDir };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Next global session number: scan `.workflow/sessions/` for any entry whose name
|
|
76
|
+
* starts with a 3-digit code and return max+1, zero-padded. Type-agnostic — one
|
|
77
|
+
* sequence for every session regardless of kind. Legacy `sessionNNN-…` folders
|
|
78
|
+
* (no leading digit) don't match and are ignored, so the new sequence starts fresh.
|
|
79
|
+
*/
|
|
80
|
+
async function nextSessionNumber(fs, sessionsDir) {
|
|
81
|
+
const entries = await fs.list(sessionsDir);
|
|
82
|
+
let max = 0;
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
const m = entry.name.match(/^(\d{3})/);
|
|
85
|
+
if (m?.[1])
|
|
86
|
+
max = Math.max(max, Number.parseInt(m[1], 10));
|
|
87
|
+
}
|
|
88
|
+
return String(max + 1).padStart(3, "0");
|
|
66
89
|
}
|
|
67
90
|
//# sourceMappingURL=session-create-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-create-service.js","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"session-create-service.js","sourceRoot":"","sources":["../../src/application/session-create-service.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/main.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tacuchi/agent-workflow-cli",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.4.0",
|
|
4
4
|
"description": "Agnostic runtime CLI for AI development workflows — a stages + loops + artifacts harness. Bundles the universal `w` skill set under `skills/w/` (slash commands `/w:*`: spec-new/spec-refine, plan-new/plan-exec, quick, 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": {
|
|
@@ -6,18 +6,14 @@ allowed-tools:
|
|
|
6
6
|
"Bash",
|
|
7
7
|
"Read",
|
|
8
8
|
"Write",
|
|
9
|
-
"Skill",
|
|
10
9
|
]
|
|
11
10
|
---
|
|
12
11
|
|
|
13
12
|
# export-diagrams — exportar diagramas
|
|
14
13
|
|
|
15
|
-
Lee el código de las fuentes del workspace + el plan-doc (secciones `AS-IS`/`TO-BE`) y genera diagramas C4 / mermaid en `docs/diagrams/`. Single-pass, read-only sobre sesiones.
|
|
14
|
+
Lee el código de las fuentes del workspace + el plan-doc (secciones `AS-IS`/`TO-BE`) y genera diagramas C4 / mermaid en `docs/diagrams/`. Single-pass, read-only sobre sesiones.
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
Skill: export-diagrams
|
|
19
|
-
args: $ARGUMENTS
|
|
20
|
-
```
|
|
16
|
+
Para ejecutar: **leé** `../exports/export-diagrams/SKILL.md` y **seguí** sus instrucciones con `$ARGUMENTS` como input. No intentes `Skill: export-diagrams` (no está registrada por nombre); el SKILL.md hermano es el cuerpo de este export.
|
|
21
17
|
|
|
22
18
|
## Qué produce
|
|
23
19
|
|
|
@@ -6,18 +6,14 @@ allowed-tools:
|
|
|
6
6
|
"Bash",
|
|
7
7
|
"Read",
|
|
8
8
|
"Write",
|
|
9
|
-
"Skill",
|
|
10
9
|
]
|
|
11
10
|
---
|
|
12
11
|
|
|
13
12
|
# export-manuals — exportar manuales
|
|
14
13
|
|
|
15
|
-
Consolida sesiones + artefactos `DECISION` + plan-doc (`Final behavior`) + código fuente y genera documentación de usuario/operación en `docs/manuals/`. Single-pass, read-only sobre sesiones.
|
|
14
|
+
Consolida sesiones + artefactos `DECISION` + plan-doc (`Final behavior`) + código fuente y genera documentación de usuario/operación en `docs/manuals/`. Single-pass, read-only sobre sesiones.
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
Skill: export-manuals
|
|
19
|
-
args: $ARGUMENTS
|
|
20
|
-
```
|
|
16
|
+
Para ejecutar: **leé** `../exports/export-manuals/SKILL.md` y **seguí** sus instrucciones con `$ARGUMENTS` como input. No intentes `Skill: export-manuals` (no está registrada por nombre); el SKILL.md hermano es el cuerpo de este export.
|
|
21
17
|
|
|
22
18
|
## Qué produce
|
|
23
19
|
|
|
@@ -6,18 +6,14 @@ allowed-tools:
|
|
|
6
6
|
"Bash",
|
|
7
7
|
"Read",
|
|
8
8
|
"Write",
|
|
9
|
-
"Skill",
|
|
10
9
|
]
|
|
11
10
|
---
|
|
12
11
|
|
|
13
12
|
# export-reports — exportar informes
|
|
14
13
|
|
|
15
|
-
Consolida el corpus completo de sesiones (`CONCLUSIONS`, `DECISION`, spec) + plan-doc (estado) + `docs/` y genera un informe ejecutivo o funcional en `docs/reports/`. Single-pass, read-only sobre sesiones.
|
|
14
|
+
Consolida el corpus completo de sesiones (`CONCLUSIONS`, `DECISION`, spec) + plan-doc (estado) + `docs/` y genera un informe ejecutivo o funcional en `docs/reports/`. Single-pass, read-only sobre sesiones.
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
Skill: export-reports
|
|
19
|
-
args: $ARGUMENTS
|
|
20
|
-
```
|
|
16
|
+
Para ejecutar: **leé** `../exports/export-reports/SKILL.md` y **seguí** sus instrucciones con `$ARGUMENTS` como input. No intentes `Skill: export-reports` (no está registrada por nombre); el SKILL.md hermano es el cuerpo de este export.
|
|
21
17
|
|
|
22
18
|
## Qué produce
|
|
23
19
|
|
|
@@ -6,18 +6,14 @@ allowed-tools:
|
|
|
6
6
|
"Bash",
|
|
7
7
|
"Read",
|
|
8
8
|
"Write",
|
|
9
|
-
"Skill",
|
|
10
9
|
]
|
|
11
10
|
---
|
|
12
11
|
|
|
13
12
|
# export-scripts — exportar scripts de BD
|
|
14
13
|
|
|
15
|
-
Promueve los artefactos `SCRIPTS.sql` (tipo B — migraciones) de N sesiones de `.workflow/sessions/` a `docs/scripts/`. Single-pass, read-only sobre sesiones.
|
|
14
|
+
Promueve los artefactos `SCRIPTS.sql` (tipo B — migraciones) de N sesiones de `.workflow/sessions/` a `docs/scripts/`. Single-pass, read-only sobre sesiones.
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
Skill: export-scripts
|
|
19
|
-
args: $ARGUMENTS
|
|
20
|
-
```
|
|
16
|
+
Para ejecutar: **leé** `../exports/export-scripts/SKILL.md` y **seguí** sus instrucciones con `$ARGUMENTS` como input. No intentes `Skill: export-scripts` (no está registrada por nombre); el SKILL.md hermano es el cuerpo de este export.
|
|
21
17
|
|
|
22
18
|
## Qué produce
|
|
23
19
|
|
|
@@ -7,7 +7,6 @@ allowed-tools:
|
|
|
7
7
|
"Read",
|
|
8
8
|
"Write",
|
|
9
9
|
"Edit",
|
|
10
|
-
"Skill",
|
|
11
10
|
]
|
|
12
11
|
---
|
|
13
12
|
|
|
@@ -15,12 +14,14 @@ allowed-tools:
|
|
|
15
14
|
|
|
16
15
|
Arranca o retoma `plan-exec-loop` (Layer 2), que ejecuta el trabajo real fase por fase. El plan (`docs/plans/PPP-plan.md`) es un documento vivo que el loop mantiene actualizado (estado de fases y tareas).
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
## Ejecutar el loop
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
`plan-exec-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
|
|
20
|
+
|
|
21
|
+
1. **Leé** `../loops/plan-exec-loop/SKILL.md` (ruta relativa a este archivo).
|
|
22
|
+
2. **Seguí** sus instrucciones tomando `$ARGUMENTS` como input: detecta CHECKPOINT/resume, ejecuta fase por fase (git-safe, BD solo-scripts), mantiene el plan vivo y reporta.
|
|
23
|
+
|
|
24
|
+
> No intentes `Skill: plan-exec-loop` — no está registrada como skill. El comando **es** la entrada; el loop es su cuerpo.
|
|
24
25
|
|
|
25
26
|
## Qué hace el loop (resumen)
|
|
26
27
|
|
|
@@ -7,7 +7,6 @@ allowed-tools:
|
|
|
7
7
|
"Read",
|
|
8
8
|
"Write",
|
|
9
9
|
"Edit",
|
|
10
|
-
"Skill",
|
|
11
10
|
]
|
|
12
11
|
---
|
|
13
12
|
|
|
@@ -23,12 +22,14 @@ El skill evalúa `$ARGUMENTS`:
|
|
|
23
22
|
2. **`docs/specs/NNN-spec.md`** (borrador sin refinar) → propone correr `/w:spec-refine` primero; planificar sobre un spec sólido produce mejores planes.
|
|
24
23
|
3. **prompt** (sin spec referenciado) → propone usar el flujo SPEC; **por default lanza `/w:spec-new`** con ese prompt para crear el borrador, y desde ahí continúa el flujo natural.
|
|
25
24
|
|
|
26
|
-
|
|
25
|
+
## Ejecutar el loop
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
`plan-new-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
|
|
28
|
+
|
|
29
|
+
1. **Leé** `../loops/plan-new-loop/SKILL.md` (ruta relativa a este archivo).
|
|
30
|
+
2. **Seguí** sus instrucciones tomando `$ARGUMENTS` como input (resuelto según las 3 reglas de arriba): detecta estado/resume, corre el motor gap-driven, crea y maneja sessions, converge y reporta.
|
|
31
|
+
|
|
32
|
+
> No intentes `Skill: plan-new-loop` — no está registrada como skill. El comando **es** la entrada; el loop es su cuerpo.
|
|
32
33
|
|
|
33
34
|
## Notas de numeración
|
|
34
35
|
|
|
@@ -7,7 +7,6 @@ allowed-tools:
|
|
|
7
7
|
"Read",
|
|
8
8
|
"Write",
|
|
9
9
|
"Edit",
|
|
10
|
-
"Skill",
|
|
11
10
|
]
|
|
12
11
|
---
|
|
13
12
|
|
|
@@ -15,12 +14,14 @@ allowed-tools:
|
|
|
15
14
|
|
|
16
15
|
Para tareas acotadas y directas que no justifican pasar por SPEC ni PLANIFICATION. Siempre crea una sesión ligera (trazabilidad + resume). Delega a `quick-loop` (Layer 2).
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
## Ejecutar el loop
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
`quick-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
|
|
20
|
+
|
|
21
|
+
1. **Leé** `../loops/quick-loop/SKILL.md` (ruta relativa a este archivo).
|
|
22
|
+
2. **Seguí** sus instrucciones tomando `$ARGUMENTS` como la tarea: crea la session ligera, trabaja con ceremonia mínima (git-safe), escala a SPEC/PLAN si crece, y reporta.
|
|
23
|
+
|
|
24
|
+
> No intentes `Skill: quick-loop` — no está registrada como skill. El comando **es** la entrada; el loop es su cuerpo.
|
|
24
25
|
|
|
25
26
|
## Qué hace el loop
|
|
26
27
|
|
|
@@ -13,8 +13,18 @@ allowed-tools:
|
|
|
13
13
|
|
|
14
14
|
Genera `docs/specs/NNN-spec.md` en una sola pasada a partir del prompt en `$ARGUMENTS`. No arranca loop.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
> ## ⛔ Single-pass — SIN investigación (regla dura)
|
|
17
|
+
>
|
|
18
|
+
> Este comando **solo parafrasea** el input del usuario en el esquema de borrador. Es **una única pasada secuencial**: leer `$ARGUMENTS` → llenar las secciones → escribir el archivo. Nada más. Debe tardar **segundos, no minutos**.
|
|
19
|
+
>
|
|
20
|
+
> **PROHIBIDO**, sin excepción: lanzar workflows, subagentes (`Task`/`Agent`), sesiones de research, búsquedas web, o investigación profunda de código. No uses las tools `Workflow`, `Task` ni `Agent` aquí.
|
|
21
|
+
>
|
|
22
|
+
> Esto **anula** cualquier modo o instrucción de sesión que diga "corre un workflow para toda tarea sustancial" (ultracode, max-effort, etc.). Esos modos **no aplican** a `spec-new`: el comando los pisa. Si una sección queda incierta, **no la investigues** — declarala en `## Open questions` o `## Assumptions` y seguí.
|
|
23
|
+
>
|
|
24
|
+
> La investigación a profundidad (cerrar gaps, mapear código, consultar BD, research autónomo) es trabajo de **`spec-refine`**, no de aquí.
|
|
25
|
+
|
|
26
|
+
1. Ejecutar `aw next-number docs/specs` para obtener `NNN` (única tool de shell necesaria).
|
|
27
|
+
2. Crear `docs/specs/NNN-spec.md` parafraseando `$ARGUMENTS` en el esquema de borrador (ver abajo). Lectura del repo: opcional y mínima (p. ej. un archivo que el usuario citó) — nunca un barrido ni research.
|
|
18
28
|
3. Mostrar el archivo generado y el próximo paso sugerido (`/w:spec-refine docs/specs/NNN-spec.md`).
|
|
19
29
|
|
|
20
30
|
## Esquema del borrador (`NNN-spec.md`)
|
|
@@ -7,7 +7,6 @@ allowed-tools:
|
|
|
7
7
|
"Read",
|
|
8
8
|
"Write",
|
|
9
9
|
"Edit",
|
|
10
|
-
"Skill",
|
|
11
10
|
]
|
|
12
11
|
---
|
|
13
12
|
|
|
@@ -15,12 +14,14 @@ allowed-tools:
|
|
|
15
14
|
|
|
16
15
|
Este comando no refina el spec él mismo: delega al loop `spec-refine-loop` (Layer 2), que es quien itera, cierra gaps y produce el spec refinado.
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
## Ejecutar el loop
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
`spec-refine-loop` **no** es una skill invocable por nombre — es el manual de operación de este comando (un doc hermano del bundle). **Cargalo y ejecutalo de punta a punta**:
|
|
20
|
+
|
|
21
|
+
1. **Leé** `../loops/spec-refine-loop/SKILL.md` (ruta relativa a este archivo).
|
|
22
|
+
2. **Seguí** sus instrucciones tomando `$ARGUMENTS` como input: detecta estado/resume, corre el motor gap-driven, crea y maneja sessions, converge y reporta.
|
|
23
|
+
|
|
24
|
+
> No intentes `Skill: spec-refine-loop` — no está registrada como skill. El comando **es** la entrada; el loop es su cuerpo.
|
|
24
25
|
|
|
25
26
|
## Resolución de estado (resumable)
|
|
26
27
|
|
package/skills/w/loops/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## What a loop is
|
|
10
10
|
|
|
11
|
-
Un loop es una **skill** que le enseña a la IA *cómo iterar* hasta producir un entregable.
|
|
11
|
+
Un loop es una **skill** que le enseña a la IA *cómo iterar* hasta producir un entregable. **No es invocable por nombre** con el tool `Skill` (no se registra como skill suelta): es el cuerpo de su comando `/w:…`, que lo **carga leyendo `<loop>/SKILL.md`** y lo ejecuta inline. La IA lo corre de punta a punta: detecta huecos, los resuelve (preguntando al humano o investigando), integra y repite hasta converger.
|
|
12
12
|
|
|
13
13
|
Propiedades comunes a **los 4 loops**:
|
|
14
14
|
|
|
@@ -59,14 +59,16 @@ Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
|
|
|
59
59
|
|
|
60
60
|
## Internal sessions (managed)
|
|
61
61
|
|
|
62
|
-
- **control session**
|
|
63
|
-
- **exec session por fase**
|
|
64
|
-
- **research session**
|
|
62
|
+
- **control session** descriptor `plan-exec` → `NNN-plan-exec`: dueña del run (`SESSION` + `CHECKPOINT` + `BACKLOG` al cerrar; Type = `control`).
|
|
63
|
+
- **exec session por fase** descriptor `plan-exec-phase-<N>` → `NNN-plan-exec-phase-<N>`: `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (Type = `exec`).
|
|
64
|
+
- **research session** descriptor `plan-exec-research-*` → `NNN-plan-exec-research-*`: on-demand (run-and-close), igual que el chasis.
|
|
65
|
+
|
|
66
|
+
> **Numeración**: el caller pasa solo el descriptor; el CLI antepone el `NNN` global y secuencial sobre `.workflow/sessions/` (ver chasis). No reinicia por tipo ni por fase.
|
|
65
67
|
|
|
66
68
|
## Delta 1 — **One exec session per phase** (+ resume intra-fase)
|
|
67
69
|
|
|
68
70
|
- Recorre las `Phases` del plan en orden (respeta deps).
|
|
69
|
-
- Por cada Phase no completada → `create_or_resume(
|
|
71
|
+
- Por cada Phase no completada → `create_or_resume("plan-exec-phase-<N>")` (**reusa** la session si la fase quedó a medias; no crea una segunda; el CLI antepone el `NNN` global).
|
|
70
72
|
- Ejecuta las `Tasks` de la fase; **salta** las ya marcadas `- [x]` en el plan (el plan-doc es la fuente de verdad por tarea). Marca `- [x]` + estado **en el plan** (living doc; no en un `TASKS` aparte).
|
|
71
73
|
- Registra `DECISION` solo lo **no obvio**.
|
|
72
74
|
|
|
@@ -102,11 +104,11 @@ Distinción por **ejecución**, no por archivo (ver el esquema `SCRIPTS.sql`):
|
|
|
102
104
|
|
|
103
105
|
```
|
|
104
106
|
plan-exec-loop(PPP-plan.md):
|
|
105
|
-
control = create_or_resume(
|
|
107
|
+
control = create_or_resume("plan-exec") # CLI antepone NNN global; CHECKPOINT, resume
|
|
106
108
|
plan = read(PPP-plan.md)
|
|
107
109
|
para cada Phase en plan (en orden, respeta deps):
|
|
108
110
|
si Phase done: skip
|
|
109
|
-
es = create_or_resume(
|
|
111
|
+
es = create_or_resume("plan-exec-phase-<N>") # reusa si quedó a medias
|
|
110
112
|
para cada Task de la Phase:
|
|
111
113
|
si Task - [x] en el plan: skip # resume intra-fase
|
|
112
114
|
verificar rama esperada por fuente (branch-check)
|
|
@@ -39,11 +39,11 @@ PLANIFICATION
|
|
|
39
39
|
Del chasis [`spec-refine-loop`](../spec-refine-loop/SKILL.md), sin cambios:
|
|
40
40
|
|
|
41
41
|
- Motor **gap-driven convergente** (`detect_gaps` → resolver → integrar → repetir; gaps agotados con límite `MAX` no se re-disparan).
|
|
42
|
-
- **Sessions internas**: `control` (
|
|
42
|
+
- **Sessions internas**: `control` (descriptor `plan-new` → `NNN-plan-new`: `SESSION` + `CHECKPOINT`, + `BACKLOG` al cerrar; Type = `refine`/`control`) + `research` on-demand (run-and-close, puede cerrar inconclusa).
|
|
43
43
|
- **AskUserQuestion**: ≤3 tabs de contenido + 1 tab `flow` (`Compactar`/`Cerrar`) siempre.
|
|
44
44
|
- **Ask-vs-research rule** + **research autónomo** + **regla BD** (pregunta MCP si >1 sin default → queries a `SCRIPTS.sql` → ejecuta read-only, `sql-mutation-guard`) + manejo de research **inconclusa** (degrada a humano / difiere a `Open questions` + límite `MAX`).
|
|
45
45
|
- **Compact / resume** (4 casos) y **`Cerrar` persiste** `CHECKPOINT` + `BACKLOG`.
|
|
46
|
-
- **Naming** `<run>`
|
|
46
|
+
- **Naming + numeración global** del chasis: `<run>` = descriptor `plan-new`; hijas `--name plan-new-research-<gap>`. El CLI antepone el `NNN` global y secuencial (sin reiniciar por tipo); el caller pasa solo el descriptor.
|
|
47
47
|
|
|
48
48
|
## Delta 1 — Deliverable: PLAN RICO (`PPP-plan.md`)
|
|
49
49
|
|
|
@@ -39,7 +39,7 @@ QUICK
|
|
|
39
39
|
|
|
40
40
|
## Internal session
|
|
41
41
|
|
|
42
|
-
- **SIEMPRE** crea una session ligera `<slug>-quick` (Type = `quick`, ≈ `exec`): `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (+ `BACKLOG` al cerrar). Una sola session (no exec-por-fase).
|
|
42
|
+
- **SIEMPRE** crea una session ligera con descriptor `<slug>-quick` → `NNN-<slug>-quick` (Type = `quick`, ≈ `exec`): `SESSION` · `DECISION` · `SCRIPTS.sql` · `CHECKPOINT` (+ `BACKLOG` al cerrar). Una sola session (no exec-por-fase). El caller pasa solo el descriptor; el CLI antepone el `NNN` global y secuencial (ver chasis).
|
|
43
43
|
|
|
44
44
|
## Inherits
|
|
45
45
|
|
|
@@ -64,7 +64,7 @@ QUICK
|
|
|
64
64
|
|
|
65
65
|
```
|
|
66
66
|
quick-loop(prompt):
|
|
67
|
-
s = create_or_resume(<slug>-quick)
|
|
67
|
+
s = create_or_resume("<slug>-quick") # CLI antepone NNN global; siempre session ligera
|
|
68
68
|
trabajar la tarea (loop mínimo):
|
|
69
69
|
verificar rama esperada por fuente (branch-check); si no → pausar + resolver
|
|
70
70
|
editar código (cambio mínimo)
|
|
@@ -82,7 +82,7 @@ finalize: CHECKPOINT + BACKLOG (si queda algo) + cerrar session + reportar
|
|
|
82
82
|
|
|
83
83
|
```mermaid
|
|
84
84
|
flowchart TD
|
|
85
|
-
S["create_or_resume session
|
|
85
|
+
S["create_or_resume session NNN-<slug>-quick"] --> G["branch-check por fuente"]
|
|
86
86
|
G -->|ok| DO["editar código · BD→SCRIPTS.sql · DECISION<br/>(duda→research/AskUserQuestion)"]
|
|
87
87
|
G -->|rama ≠| PA["pausar + resolver"]
|
|
88
88
|
PA --> G
|
|
@@ -44,16 +44,22 @@ El loop crea y maneja sus sessions en `.workflow/sessions/`. El usuario nunca la
|
|
|
44
44
|
|
|
45
45
|
| Session | When | Artifacts | Role |
|
|
46
46
|
|---|---|---|---|
|
|
47
|
-
| **refine session**
|
|
48
|
-
| **research session**
|
|
47
|
+
| **refine session** `NNN-spec-refine/` | al arrancar el loop (o se reanuda) | `SESSION.md` · `CHECKPOINT.md` (· `BACKLOG.md` al cerrar) | Dueña del run. Guarda el avance al `Compactar` y al `Cerrar`; habilita el resume. Type = `refine`. |
|
|
48
|
+
| **research session** `MMM-spec-refine-research-*/` | on-demand, por cada gap factual | `SESSION.md` · `ANALYSIS-FILE.md` → `CONCLUSIONS.md` (+ `SCRIPTS.sql` si consulta BD) | Investiga, concluye, **cierra y reporta**. Puede cerrar **inconclusa**. Type = `research`; on-demand, **no reanudable** (run-and-close, sin `CHECKPOINT`/`BACKLOG` propios). |
|
|
49
49
|
|
|
50
50
|
> El spec **nunca** entra en una session; vive en `docs/specs/`.
|
|
51
|
+
|
|
52
|
+
### Numeración de sessions (regla dura, heredada por todos los loops)
|
|
53
|
+
|
|
54
|
+
El **CLI es dueño del número**: `aw session-create` antepone un `NNN` **global y secuencial** escaneando **todas** las sessions de `.workflow/sessions/` (cualquier tipo). El caller pasa **solo el descriptor** vía `--name` — **nunca** un número. Así la numeración no se reinicia por tipo ni colisiona (ej.: `001-spec-refine`, `002-spec-refine-research-x`, `003-plan-new`, …).
|
|
55
|
+
|
|
56
|
+
> `<run>` = el **descriptor** (sin número) de la control session que prefija sus sessions hijas: `spec-refine`, `plan-new`, `plan-exec`, `quick`. La research session pasa `--name <run>-research-<gap>` y el CLI le pone su propio `NNN`. **No** embebas el número del padre en el descriptor del hijo (lo agrega el CLI; embeberlo lo duplicaría).
|
|
51
57
|
>
|
|
52
|
-
>
|
|
58
|
+
> **Resume**: localiza la session existente **escaneando** `.workflow/sessions/` por descriptor + `## Origin` (qué spec/plan), **no** reconstruyendo el número (que ahora es global, no derivable del artefacto). `aw session-resume --code <NNN | folder>` resuelve ambas formas.
|
|
53
59
|
|
|
54
|
-
**CLI
|
|
55
|
-
- `aw session-create --type refine --name
|
|
56
|
-
- `aw session-create --type research --name <run>-research-<gap>`
|
|
60
|
+
**CLI**:
|
|
61
|
+
- `aw session-create --type refine --name spec-refine` → crea `NNN-spec-refine` / `aw session-resume --code <…>` (detecta `CHECKPOINT`).
|
|
62
|
+
- `aw session-create --type research --name <run>-research-<gap>` por cada gap factual → crea `MMM-<run>-research-<gap>`.
|
|
57
63
|
- `aw checkpoint-write` / `aw checkpoint-read` para el resume.
|
|
58
64
|
- `aw session-close` al cerrar (con razón); `aw session-artifacts` para inspeccionar.
|
|
59
65
|
|
|
@@ -140,7 +146,7 @@ Para cada gap, una sola pregunta decide el resolutor:
|
|
|
140
146
|
```
|
|
141
147
|
spec-refine-loop(spec):
|
|
142
148
|
input = exists(NNN-spec-refined.md) ? NNN-spec-refined.md : NNN-spec.md # (#2 resume)
|
|
143
|
-
refine_session = create_or_resume(
|
|
149
|
+
refine_session = create_or_resume("spec-refine") # CLI antepone NNN global; resume localiza por descriptor/origin
|
|
144
150
|
work = read(input) (+ aplicar avance del checkpoint si reanuda)
|
|
145
151
|
attempts = {} # anti-relanzamiento por gap
|
|
146
152
|
repeat:
|