@ramon-sg/issue-flow 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -4
- package/dist/config.js +1 -1
- package/dist/issue-text.d.ts +4 -3
- package/dist/issue-text.js +5 -4
- package/dist/start-place.js +1 -1
- package/dist/start-summary.js +1 -1
- package/package.json +1 -1
- package/schema.json +2 -2
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Flujo de trabajo de issue a PR para cualquier repo, en local y en las sesiones d
|
|
|
14
14
|
- **`issue-flow adapter setup|issue|archive`:** lo que corren Orca y Paseo al crear o borrar un worktree.
|
|
15
15
|
- **`issue-flow session`:** el hook `SessionStart`; en la nube llama a [`claude-cloud`](https://github.com/ramon-sg/claude-cloud).
|
|
16
16
|
- **`issue-flow hook worktree-create|worktree-remove`:** los hooks `WorktreeCreate` y `WorktreeRemove` de Claude Code, para `claude --worktree`.
|
|
17
|
-
- **Skills:** `github-issues`, `start-issue`, `close-pr`, `pr-review-comments` y `pr-worktree`.
|
|
17
|
+
- **Skills:** `github-issues`, `start-issue`, `finish-pr`, `close-pr`, `pr-review-comments` y `pr-worktree`.
|
|
18
18
|
|
|
19
19
|
## Nombre de la rama
|
|
20
20
|
|
|
@@ -44,6 +44,8 @@ La rama se arma con la plantilla del repo y el slug sale, en este orden:
|
|
|
44
44
|
|
|
45
45
|
## Empezar una issue
|
|
46
46
|
|
|
47
|
+
Las cuatro formas de empezar una issue (terminal, la skill en una sesión, la nube de Claude, Orca y Paseo), paso a paso: [docs/flujos.md](docs/flujos.md).
|
|
48
|
+
|
|
47
49
|
```sh
|
|
48
50
|
issue-flow issue start 42 # worktree en .claude/worktrees/, PR en draft y Claude
|
|
49
51
|
issue-flow issue start 42 --dry-run # el resumen, sin cambiar nada (solo hace git fetch)
|
|
@@ -220,11 +222,12 @@ Viven en `skills/` y `skills-catalog.json` las lista. Se instalan con [`skills-m
|
|
|
220
222
|
|---|---|---|---|
|
|
221
223
|
| `github-issues` | Issues | Una issue corta con cabecera de tres líneas, criterios comprobables y el slug de su rama; comprueba duplicados y el tope de palabras | — |
|
|
222
224
|
| `start-issue` | Issues | Empieza una issue desde una sesión con `issue-flow issue start`, en local, en un worktree o en la nube | — |
|
|
223
|
-
| `
|
|
225
|
+
| `finish-pr` | PRs | Auditoría, documentos al día, ready, revisión y CI, y el chequeo de que se puede mergear; se detiene antes del merge con un reporte de qué falta y cómo limpiar | `pr-review-comments` |
|
|
226
|
+
| `close-pr` | PRs | Corre `finish-pr` y, si quedó listo, mergea con merge commit y limpia la rama y el worktree | `finish-pr` |
|
|
224
227
|
| `pr-review-comments` | PRs | Verifica cada comentario y check contra el código, propone un plan, aplica lo aprobado y responde los hilos | `github-issues` |
|
|
225
228
|
| `pr-worktree` | PRs | Revisa un PR en su worktree con `issue-flow pr worktree`, sin tocar el checkout principal | `close-pr` |
|
|
226
229
|
|
|
227
|
-
`agent-kitchen` las instala con el catálogo en la tag de la versión del flujo y las mueve con él. `close-pr` y `pr-worktree` usan `code-audit`, del catálogo [`agent-skills`](https://github.com/ramon-sg/agent-skills): `agent-kitchen` ofrece los dos.
|
|
230
|
+
`agent-kitchen` las instala con el catálogo en la tag de la versión del flujo y las mueve con él. `finish-pr` (y con ella `close-pr`) y `pr-worktree` usan `code-audit`, del catálogo [`agent-skills`](https://github.com/ramon-sg/agent-skills): `agent-kitchen` ofrece los dos.
|
|
228
231
|
|
|
229
232
|
**Lo propio de cada repo va en `project.md`**, que cada skill (salvo `pr-worktree`) crea desde su plantilla al instalarse: los labels y el assignee, qué flujo sigue cada issue, qué corre sin preguntar al cerrar, qué bots revisan y qué cuenta como review aprobado. Ese archivo es del repo: `check` no lo marca y las actualizaciones lo conservan.
|
|
230
233
|
|
|
@@ -261,7 +264,7 @@ Todo es opcional; sin el archivo valen los valores por defecto. Una clave descon
|
|
|
261
264
|
| `worktrees.ports` | Apagado | `true` para bloques de 10 desde 20000, o `{ start, blockSize, blocks }` |
|
|
262
265
|
| `worktrees.dockerProjects` | Ninguno | Prefijos de los proyectos de Compose de los worktrees |
|
|
263
266
|
| `start.commitMessage` | `chore: empieza el trabajo en la issue #{number} [skip ci]` | Commit vacío inicial |
|
|
264
|
-
| `start.prBody` | `{keyword} #{number}` y "En progreso." | Cuerpo del PR en draft |
|
|
267
|
+
| `start.prBody` | `{keyword} #{number}`, la URL de la issue (`{url}`) y "En progreso." | Cuerpo del PR en draft |
|
|
265
268
|
| `start.prompt`, `start.resumePrompt` | Resumir la issue y seguir `start-issue`, o retomar desde `{plan}` | Pedido con que se abre Claude |
|
|
266
269
|
| `start.summaryPrompt`, `start.summaryPlanPrompt` | Resumir y esperar | Pedido de `--plan` |
|
|
267
270
|
| `start.cloudPrompt` | `/start-issue {number} --yes{flags}` | Lo que `--cloud` le pide a la sesión; `{flags}` es `--new` o `--resume <rama>` |
|
package/dist/config.js
CHANGED
|
@@ -34,7 +34,7 @@ export const DEFAULT_CONFIG = {
|
|
|
34
34
|
worktrees: { dir: ".claude/worktrees", setup: [], teardown: [], ports: null, dockerProjects: [] },
|
|
35
35
|
start: {
|
|
36
36
|
commitMessage: "chore: empieza el trabajo en la issue #{number} [skip ci]",
|
|
37
|
-
prBody: "{keyword} #{number}\n\nEn progreso.",
|
|
37
|
+
prBody: "{keyword} #{number}\n\nIssue: {url}\n\nEn progreso.",
|
|
38
38
|
prompt: "Issue #{number}. Lee la issue con `npx @ramon-sg/github-rest issue view {number}`, resúmela en lenguaje llano y sigue la skill start-issue para elegir el flujo.",
|
|
39
39
|
resumePrompt: "Issue #{number}. Lee la issue con `npx @ramon-sg/github-rest issue view {number}`, resúmela en lenguaje llano y retoma el trabajo según {plan}: revisa qué tareas quedan.",
|
|
40
40
|
summaryPrompt: "Issue #{number}. Lee la issue con `npx @ramon-sg/github-rest issue view {number}` y resúmela en lenguaje llano. No empieces a trabajar ni a planificar: espera mi pedido.",
|
package/dist/issue-text.d.ts
CHANGED
|
@@ -69,13 +69,14 @@ export declare function nextBranch(proposed: string, used: string[]): string;
|
|
|
69
69
|
export declare function fill(template: string, values: Record<string, string>): string;
|
|
70
70
|
/**
|
|
71
71
|
* The draft PR's body from the config's template.
|
|
72
|
-
* @param template - The template, with `{keyword}` and `{
|
|
72
|
+
* @param template - The template, with `{keyword}`, `{number}` and `{url}`.
|
|
73
73
|
* @param number - The issue.
|
|
74
74
|
* @param kind - Whether the PR closes the issue or is part of it.
|
|
75
|
+
* @param url - The issue's URL.
|
|
75
76
|
* @returns The body.
|
|
76
|
-
* @example prBody("{keyword} #{number}", 4, "part") // "Part of #4"
|
|
77
|
+
* @example prBody("{keyword} #{number}", 4, "part", url) // "Part of #4"
|
|
77
78
|
*/
|
|
78
|
-
export declare function prBody(template: string, number: number, kind: PrKind): string;
|
|
79
|
+
export declare function prBody(template: string, number: number, kind: PrKind, url: string): string;
|
|
79
80
|
/**
|
|
80
81
|
* The body of a PR with the words that close the issue (`Closes`, `Fixes`, `Resolves` and
|
|
81
82
|
* their forms, with or without `:`) changed to `Part of`, because the issue now has more
|
package/dist/issue-text.js
CHANGED
|
@@ -121,14 +121,15 @@ export function fill(template, values) {
|
|
|
121
121
|
}
|
|
122
122
|
/**
|
|
123
123
|
* The draft PR's body from the config's template.
|
|
124
|
-
* @param template - The template, with `{keyword}` and `{
|
|
124
|
+
* @param template - The template, with `{keyword}`, `{number}` and `{url}`.
|
|
125
125
|
* @param number - The issue.
|
|
126
126
|
* @param kind - Whether the PR closes the issue or is part of it.
|
|
127
|
+
* @param url - The issue's URL.
|
|
127
128
|
* @returns The body.
|
|
128
|
-
* @example prBody("{keyword} #{number}", 4, "part") // "Part of #4"
|
|
129
|
+
* @example prBody("{keyword} #{number}", 4, "part", url) // "Part of #4"
|
|
129
130
|
*/
|
|
130
|
-
export function prBody(template, number, kind) {
|
|
131
|
-
return fill(template, { keyword: kind === "part" ? "Part of" : "Closes", number: String(number) });
|
|
131
|
+
export function prBody(template, number, kind, url) {
|
|
132
|
+
return fill(template, { keyword: kind === "part" ? "Part of" : "Closes", number: String(number), url });
|
|
132
133
|
}
|
|
133
134
|
/**
|
|
134
135
|
* The body of a PR with the words that close the issue (`Closes`, `Fixes`, `Resolves` and
|
package/dist/start-place.js
CHANGED
|
@@ -142,7 +142,7 @@ export async function publish(state) {
|
|
|
142
142
|
head: branch,
|
|
143
143
|
base: state.base,
|
|
144
144
|
title: state.issue.title,
|
|
145
|
-
body: prBody(options.config.start.prBody, options.number, state.kind),
|
|
145
|
+
body: prBody(options.config.start.prBody, options.number, state.kind, state.issue.url),
|
|
146
146
|
draft: true,
|
|
147
147
|
});
|
|
148
148
|
state.out.stdout(`${created.url}\n`);
|
package/dist/start-summary.js
CHANGED
|
@@ -67,7 +67,7 @@ export function plannedActions(state) {
|
|
|
67
67
|
if (commit || !onOrigin(mainRoot, branch))
|
|
68
68
|
actions.push("push -u");
|
|
69
69
|
if (state.pr === null) {
|
|
70
|
-
const first = prBody(state.options.config.start.prBody, number, state.kind).split("\n")[0];
|
|
70
|
+
const first = prBody(state.options.config.start.prBody, number, state.kind, state.issue.url).split("\n")[0];
|
|
71
71
|
actions.push(`draft PR (${first})`);
|
|
72
72
|
const others = openPrsElsewhere(state.work.prs, branch);
|
|
73
73
|
if (state.kind === "part" && others.length > 0)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ramon-sg/issue-flow",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Issue-to-PR workflow for any repo: names each issue's branch, creates its worktree, opens the draft PR and launches Claude Code, locally and in Claude's cloud.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
package/schema.json
CHANGED
|
@@ -188,10 +188,10 @@
|
|
|
188
188
|
"default": "chore: empieza el trabajo en la issue #{number} [skip ci]"
|
|
189
189
|
},
|
|
190
190
|
"prBody": {
|
|
191
|
-
"description": "Body of the draft PR; {keyword} is Closes, or Part of when the issue has another live branch.",
|
|
191
|
+
"description": "Body of the draft PR; {keyword} is Closes, or Part of when the issue has another live branch; {number} and {url} are the issue's. The session that starts the issue changes \"En progreso.\" for a short summary.",
|
|
192
192
|
"type": "string",
|
|
193
193
|
"minLength": 1,
|
|
194
|
-
"default": "{keyword} #{number}\n\nEn progreso."
|
|
194
|
+
"default": "{keyword} #{number}\n\nIssue: {url}\n\nEn progreso."
|
|
195
195
|
},
|
|
196
196
|
"prompt": {
|
|
197
197
|
"description": "Prompt Claude opens with on a new branch; {number}, {title} (text anyone can write in the issue: better left out).",
|