issue-flow 0.6.0 → 0.7.1
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 +3 -1
- package/dist/{analyze-VVG7UABS.js → analyze-R25HDGBJ.js} +10 -6
- package/dist/analyze-R25HDGBJ.js.map +1 -0
- package/dist/chunk-23WOEBGN.js +725 -0
- package/dist/chunk-23WOEBGN.js.map +1 -0
- package/dist/{chunk-4HT4EVYV.js → chunk-2AVZZAC6.js} +181 -13
- package/dist/chunk-2AVZZAC6.js.map +1 -0
- package/dist/{chunk-FPGHTTVV.js → chunk-ASMCLXQ2.js} +12 -7
- package/dist/chunk-ASMCLXQ2.js.map +1 -0
- package/dist/{chunk-2CSHLHYP.js → chunk-EHVKXFFN.js} +2 -2
- package/dist/{chunk-JTSAL3TI.js → chunk-EM43T462.js} +18 -5
- package/dist/chunk-EM43T462.js.map +1 -0
- package/dist/{chunk-KWGRBNUG.js → chunk-HJ7JT777.js} +26 -7
- package/dist/chunk-HJ7JT777.js.map +1 -0
- package/dist/{chunk-WZDCTAWZ.js → chunk-JNEHVQH5.js} +39 -2
- package/dist/chunk-JNEHVQH5.js.map +1 -0
- package/dist/{chunk-SVOWWZQJ.js → chunk-RN2FAMUU.js} +5 -280
- package/dist/chunk-RN2FAMUU.js.map +1 -0
- package/dist/chunk-TCOS2KFB.js +283 -0
- package/dist/chunk-TCOS2KFB.js.map +1 -0
- package/dist/chunk-WHIBTNYI.js +72 -0
- package/dist/chunk-WHIBTNYI.js.map +1 -0
- package/dist/{chunk-7W5VGYXW.js → chunk-YGEWIEAI.js} +45 -69
- package/dist/chunk-YGEWIEAI.js.map +1 -0
- package/dist/{chunk-YM3G5BLR.js → chunk-YLXPLHEL.js} +2 -2
- package/dist/{chunk-EHX4J5G5.js → chunk-ZAEBDO3Q.js} +12 -7
- package/dist/chunk-ZAEBDO3Q.js.map +1 -0
- package/dist/cli.js +65 -20
- package/dist/cli.js.map +1 -1
- package/dist/{config-B564P45C.js → config-SJAQMFWB.js} +11 -3
- package/dist/execute-VZ7SHLP4.js +13 -0
- package/dist/{generate-IN62ARBS.js → generate-LUK3XTIP.js} +7 -5
- package/dist/{generate-IN62ARBS.js.map → generate-LUK3XTIP.js.map} +1 -1
- package/dist/init-5KXCG36P.js +9 -0
- package/dist/plan-R34SAWRK.js +15 -0
- package/dist/pr-P4BDQXUQ.js +15 -0
- package/dist/pr-review-TOSBE6ZS.js +15 -0
- package/dist/prd-RYLULM75.js +15 -0
- package/dist/review-ZSC5ELQA.js +13 -0
- package/dist/review-ZSC5ELQA.js.map +1 -0
- package/dist/{run-GPBICAD6.js → run-SDRQDMSZ.js} +150 -55
- package/dist/run-SDRQDMSZ.js.map +1 -0
- package/package.json +1 -1
- package/prompts/execute.md +17 -5
- package/prompts/plan.md +1 -0
- package/prompts/pr-review.md +144 -0
- package/prompts/review.md +2 -0
- package/dist/analyze-VVG7UABS.js.map +0 -1
- package/dist/chunk-4HT4EVYV.js.map +0 -1
- package/dist/chunk-7W5VGYXW.js.map +0 -1
- package/dist/chunk-EHX4J5G5.js.map +0 -1
- package/dist/chunk-FPGHTTVV.js.map +0 -1
- package/dist/chunk-JTSAL3TI.js.map +0 -1
- package/dist/chunk-KWGRBNUG.js.map +0 -1
- package/dist/chunk-SVOWWZQJ.js.map +0 -1
- package/dist/chunk-WZDCTAWZ.js.map +0 -1
- package/dist/execute-PNOFNLZG.js +0 -12
- package/dist/init-5242XSYC.js +0 -9
- package/dist/plan-6KLONWPR.js +0 -14
- package/dist/pr-JLJLMFN3.js +0 -14
- package/dist/prd-TVJDYZXH.js +0 -14
- package/dist/review-FRV4ZMS2.js +0 -12
- package/dist/run-GPBICAD6.js.map +0 -1
- /package/dist/{chunk-2CSHLHYP.js.map → chunk-EHVKXFFN.js.map} +0 -0
- /package/dist/{chunk-YM3G5BLR.js.map → chunk-YLXPLHEL.js.map} +0 -0
- /package/dist/{config-B564P45C.js.map → config-SJAQMFWB.js.map} +0 -0
- /package/dist/{execute-PNOFNLZG.js.map → execute-VZ7SHLP4.js.map} +0 -0
- /package/dist/{init-5242XSYC.js.map → init-5KXCG36P.js.map} +0 -0
- /package/dist/{plan-6KLONWPR.js.map → plan-R34SAWRK.js.map} +0 -0
- /package/dist/{pr-JLJLMFN3.js.map → pr-P4BDQXUQ.js.map} +0 -0
- /package/dist/{prd-TVJDYZXH.js.map → pr-review-TOSBE6ZS.js.map} +0 -0
- /package/dist/{review-FRV4ZMS2.js.map → prd-RYLULM75.js.map} +0 -0
package/README.md
CHANGED
|
@@ -87,7 +87,7 @@ npx issue-flow run 42 --mode manual
|
|
|
87
87
|
npx issue-flow run 42 --web
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
Executes all phases in order: **init** → **analyze** → **prd** → **plan** → **execute** → **review** → **pr**. Automatically resumes from the last incomplete phase if pipeline state exists. On review failure,
|
|
90
|
+
Executes all phases in order: **init** → **analyze** → **prd** → **plan** → **execute** → **review** → **pr**. Automatically resumes from the last incomplete phase if pipeline state exists. On review failure, its findings are saved verbatim to `lastReviewFindings` in `tasks.json`, and a correction cycle (re-execute + re-review) runs up to `maxCorrectionCycles`. The re-execute step reads `lastReviewFindings` and treats the issue as unresolved even if every user story already has `passes: true`, until the findings are addressed and the field is cleared back to `null`.
|
|
91
91
|
|
|
92
92
|
### `init` -- Check prerequisites
|
|
93
93
|
|
|
@@ -216,6 +216,8 @@ The `pipeline` field tracks which phases have completed, enabling resume from an
|
|
|
216
216
|
}
|
|
217
217
|
```
|
|
218
218
|
|
|
219
|
+
The top-level `lastReviewFindings` field (`string | null`) holds the verbatim findings of the most recent failed `review` phase. Non-null overrides the "issue already complete" check even when every user story has `passes: true`, so a correction cycle's re-execute step is guaranteed to run instead of exiting immediately — see `core/engine.ts`.
|
|
220
|
+
|
|
219
221
|
## Architecture
|
|
220
222
|
|
|
221
223
|
```
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
issuePlaceholders,
|
|
4
|
-
resolveCommandIssue
|
|
4
|
+
resolveCommandIssue
|
|
5
|
+
} from "./chunk-RN2FAMUU.js";
|
|
6
|
+
import {
|
|
5
7
|
runHeadless
|
|
6
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TCOS2KFB.js";
|
|
7
9
|
import {
|
|
8
10
|
applyPlaceholders,
|
|
9
11
|
loadPrompt
|
|
10
12
|
} from "./chunk-SLHZPB3C.js";
|
|
11
|
-
import
|
|
13
|
+
import {
|
|
14
|
+
getIssueDir
|
|
15
|
+
} from "./chunk-2AVZZAC6.js";
|
|
12
16
|
import {
|
|
13
17
|
getGlobalTimeout,
|
|
14
18
|
loadTaskPlan,
|
|
@@ -16,14 +20,14 @@ import {
|
|
|
16
20
|
printInfo,
|
|
17
21
|
printSuccess,
|
|
18
22
|
saveTaskPlan
|
|
19
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-JNEHVQH5.js";
|
|
20
24
|
|
|
21
25
|
// src/commands/analyze.ts
|
|
22
26
|
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
23
27
|
import { join } from "path";
|
|
24
28
|
async function runAnalyze(issue, resolvedIssue) {
|
|
25
29
|
const issueNumber = issue.replace(/^#/, "");
|
|
26
|
-
const issueDir =
|
|
30
|
+
const issueDir = await getIssueDir(issueNumber);
|
|
27
31
|
const analysisPath = join(issueDir, "analysis.md");
|
|
28
32
|
const resolution = await resolveCommandIssue(issueNumber, resolvedIssue);
|
|
29
33
|
if (!resolution.ok) {
|
|
@@ -73,4 +77,4 @@ async function runAnalyze(issue, resolvedIssue) {
|
|
|
73
77
|
export {
|
|
74
78
|
runAnalyze
|
|
75
79
|
};
|
|
76
|
-
//# sourceMappingURL=analyze-
|
|
80
|
+
//# sourceMappingURL=analyze-R25HDGBJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/analyze.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { runHeadless } from '../core/headless.js';\nimport { applyPlaceholders, loadPrompt } from '../core/prompt-resolver.js';\nimport { loadTaskPlan, saveTaskPlan } from '../core/state-manager.js';\nimport { getGlobalTimeout } from '../core/verbose.js';\nimport { issuePlaceholders, resolveCommandIssue } from '../issues/context.js';\nimport type { ResolvedIssue } from '../issues/types.js';\nimport { printError, printInfo, printSuccess } from '../ui/logger.js';\nimport { getIssueDir } from '../utils/git.js';\n\nexport async function runAnalyze(issue: string, resolvedIssue?: ResolvedIssue): Promise<number> {\n const issueNumber = issue.replace(/^#/, '');\n const issueDir = await getIssueDir(issueNumber);\n const analysisPath = join(issueDir, 'analysis.md');\n\n const resolution = await resolveCommandIssue(issueNumber, resolvedIssue);\n if (!resolution.ok) {\n return resolution.code;\n }\n\n await mkdir(issueDir, { recursive: true });\n\n const template = await loadPrompt('analyze');\n const prompt = applyPlaceholders(template, {\n __ISSUE_NUMBER__: issueNumber,\n __ANALYSIS_PATH__: analysisPath,\n // Last: the Issue content is substituted in but never scanned again, so a\n // body that happens to contain a placeholder is left untouched.\n ...issuePlaceholders(resolution.resolved),\n });\n\n const result = await runHeadless({\n prompt,\n maxTurns: 30,\n timeout: getGlobalTimeout() ?? 300_000,\n outputFormat: 'text',\n allowedTools: ['Bash', 'Read', 'Glob', 'Grep', 'Write'],\n statusMessage: `Analyzing issue #${issueNumber}...`,\n });\n\n if (!result.success) {\n printError(`Analysis failed: ${result.error}`);\n return 1;\n }\n\n // Verify the file was created\n try {\n const content = await readFile(analysisPath, 'utf-8');\n if (content.length < 10) {\n printError('Analysis file was created but appears empty');\n return 1;\n }\n } catch {\n // File wasn't created by headless — save the result as analysis\n printInfo('Headless did not create analysis file; saving output directly');\n await writeFile(analysisPath, result.result, 'utf-8');\n }\n\n // Update pipeline state\n const tasksPath = join(issueDir, 'tasks.json');\n try {\n const plan = await loadTaskPlan(tasksPath);\n plan.pipeline.analyzeCompleted = true;\n await saveTaskPlan(tasksPath, plan);\n } catch {\n // tasks.json may not exist yet — that's OK for standalone analyze\n }\n\n printSuccess(`Analysis saved to ${analysisPath}`);\n return 0;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,OAAO,UAAU,iBAAiB;AAC3C,SAAS,YAAY;AAUrB,eAAsB,WAAW,OAAe,eAAgD;AAC9F,QAAM,cAAc,MAAM,QAAQ,MAAM,EAAE;AAC1C,QAAM,WAAW,MAAM,YAAY,WAAW;AAC9C,QAAM,eAAe,KAAK,UAAU,aAAa;AAEjD,QAAM,aAAa,MAAM,oBAAoB,aAAa,aAAa;AACvE,MAAI,CAAC,WAAW,IAAI;AAClB,WAAO,WAAW;AAAA,EACpB;AAEA,QAAM,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAEzC,QAAM,WAAW,MAAM,WAAW,SAAS;AAC3C,QAAM,SAAS,kBAAkB,UAAU;AAAA,IACzC,kBAAkB;AAAA,IAClB,mBAAmB;AAAA;AAAA;AAAA,IAGnB,GAAG,kBAAkB,WAAW,QAAQ;AAAA,EAC1C,CAAC;AAED,QAAM,SAAS,MAAM,YAAY;AAAA,IAC/B;AAAA,IACA,UAAU;AAAA,IACV,SAAS,iBAAiB,KAAK;AAAA,IAC/B,cAAc;AAAA,IACd,cAAc,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,OAAO;AAAA,IACtD,eAAe,oBAAoB,WAAW;AAAA,EAChD,CAAC;AAED,MAAI,CAAC,OAAO,SAAS;AACnB,eAAW,oBAAoB,OAAO,KAAK,EAAE;AAC7C,WAAO;AAAA,EACT;AAGA,MAAI;AACF,UAAM,UAAU,MAAM,SAAS,cAAc,OAAO;AACpD,QAAI,QAAQ,SAAS,IAAI;AACvB,iBAAW,6CAA6C;AACxD,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAEN,cAAU,+DAA+D;AACzE,UAAM,UAAU,cAAc,OAAO,QAAQ,OAAO;AAAA,EACtD;AAGA,QAAM,YAAY,KAAK,UAAU,YAAY;AAC7C,MAAI;AACF,UAAM,OAAO,MAAM,aAAa,SAAS;AACzC,SAAK,SAAS,mBAAmB;AACjC,UAAM,aAAa,WAAW,IAAI;AAAA,EACpC,QAAQ;AAAA,EAER;AAEA,eAAa,qBAAqB,YAAY,EAAE;AAChD,SAAO;AACT;","names":[]}
|