issue-flow 0.10.0 → 0.11.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 +1 -1
- package/dist/{analyze-UZYJAWAP.js → analyze-XV3K25K3.js} +15 -9
- package/dist/analyze-XV3K25K3.js.map +1 -0
- package/dist/apply-WUJHDD7A.js +788 -0
- package/dist/apply-WUJHDD7A.js.map +1 -0
- package/dist/{chunk-2Z7OEZZT.js → chunk-34WNTK3K.js} +14 -9
- package/dist/chunk-34WNTK3K.js.map +1 -0
- package/dist/{chunk-UUY4PCWW.js → chunk-3BOHTH4V.js} +2 -2
- package/dist/chunk-3D4A4B46.js +2 -0
- package/dist/{policy-NP4ZAVF6.js → chunk-47VIN33V.js} +82 -112
- package/dist/chunk-47VIN33V.js.map +1 -0
- package/dist/{chunk-67ZO5ROQ.js → chunk-6N7LZZ5U.js} +19 -13
- package/dist/chunk-6N7LZZ5U.js.map +1 -0
- package/dist/{chunk-S67Q4I2O.js → chunk-AAY6KM7N.js} +6 -3
- package/dist/chunk-AAY6KM7N.js.map +1 -0
- package/dist/{chunk-2LNQL4XH.js → chunk-BXCPXRBR.js} +17 -12
- package/dist/chunk-BXCPXRBR.js.map +1 -0
- package/dist/{chunk-MXTGCD5C.js → chunk-EWDJENFW.js} +30 -9
- package/dist/chunk-EWDJENFW.js.map +1 -0
- package/dist/{chunk-SP7DD4ID.js → chunk-EY6WMHV2.js} +17 -12
- package/dist/chunk-EY6WMHV2.js.map +1 -0
- package/dist/{chunk-652DJBCN.js → chunk-GANSDJV7.js} +4 -4
- package/dist/{chunk-V5OHFSW4.js → chunk-HC2MT7BX.js} +23 -3
- package/dist/chunk-HC2MT7BX.js.map +1 -0
- package/dist/chunk-HQYXVIH6.js +110 -0
- package/dist/chunk-HQYXVIH6.js.map +1 -0
- package/dist/{chunk-UH4KAJBJ.js → chunk-IVHZEYAX.js} +17 -12
- package/dist/chunk-IVHZEYAX.js.map +1 -0
- package/dist/{chunk-EWA3OGCM.js → chunk-KQ4JQN7T.js} +14 -9
- package/dist/chunk-KQ4JQN7T.js.map +1 -0
- package/dist/{chunk-VOKNTBOO.js → chunk-LVKQ2AKT.js} +3 -3
- package/dist/chunk-OBLVLIUS.js +285 -0
- package/dist/chunk-OBLVLIUS.js.map +1 -0
- package/dist/chunk-RKTEV6EG.js +246 -0
- package/dist/chunk-RKTEV6EG.js.map +1 -0
- package/dist/{chunk-VYFKOUUR.js → chunk-VQ5VN7DF.js} +9 -5
- package/dist/chunk-VQ5VN7DF.js.map +1 -0
- package/dist/cli.js +26 -22
- package/dist/cli.js.map +1 -1
- package/dist/{config-YCF3HIKR.js → config-4THHOXNN.js} +3 -3
- package/dist/execute-5OEKLM5X.js +15 -0
- package/dist/{generate-TW6QKSW5.js → generate-TBVTLMOP.js} +101 -13
- package/dist/generate-TBVTLMOP.js.map +1 -0
- package/dist/init-PRMOTQ7N.js +9 -0
- package/dist/plan-Y2BYZD24.js +17 -0
- package/dist/policy-XQW5NUIE.js +117 -0
- package/dist/policy-XQW5NUIE.js.map +1 -0
- package/dist/pr-H6GLOSXF.js +21 -0
- package/dist/pr-review-CK5FR6WX.js +17 -0
- package/dist/prd-4PWLCGH5.js +17 -0
- package/dist/review-QGVAHEZF.js +15 -0
- package/dist/review-QGVAHEZF.js.map +1 -0
- package/dist/{run-DIBC3YKX.js → run-DBF2VWUN.js} +26 -25
- package/dist/{run-DIBC3YKX.js.map → run-DBF2VWUN.js.map} +1 -1
- package/dist/{web-O2FVOYZW.js → web-ANQQTTRD.js} +5 -5
- package/package.json +1 -1
- package/prompts/analyze.md +24 -0
- package/prompts/execute.md +29 -1
- package/prompts/generate.md +61 -7
- package/prompts/plan.md +24 -1
- package/prompts/pr-review.md +65 -4
- package/prompts/pr.md +37 -3
- package/prompts/prd.md +17 -0
- package/prompts/review.md +40 -0
- package/dist/analyze-UZYJAWAP.js.map +0 -1
- package/dist/chunk-2LNQL4XH.js.map +0 -1
- package/dist/chunk-2Z7OEZZT.js.map +0 -1
- package/dist/chunk-67ZO5ROQ.js.map +0 -1
- package/dist/chunk-EWA3OGCM.js.map +0 -1
- package/dist/chunk-EZMOEBLU.js +0 -135
- package/dist/chunk-EZMOEBLU.js.map +0 -1
- package/dist/chunk-MXTGCD5C.js.map +0 -1
- package/dist/chunk-PPLIXZI5.js +0 -101
- package/dist/chunk-PPLIXZI5.js.map +0 -1
- package/dist/chunk-S67Q4I2O.js.map +0 -1
- package/dist/chunk-SLHZPB3C.js +0 -50
- package/dist/chunk-SLHZPB3C.js.map +0 -1
- package/dist/chunk-SP7DD4ID.js.map +0 -1
- package/dist/chunk-UH4KAJBJ.js.map +0 -1
- package/dist/chunk-V5OHFSW4.js.map +0 -1
- package/dist/chunk-VYFKOUUR.js.map +0 -1
- package/dist/execute-QYXA225W.js +0 -14
- package/dist/generate-TW6QKSW5.js.map +0 -1
- package/dist/init-G57UXKDG.js +0 -9
- package/dist/plan-YJLGBYBQ.js +0 -16
- package/dist/policy-NP4ZAVF6.js.map +0 -1
- package/dist/pr-V5H65MRW.js +0 -20
- package/dist/pr-review-RCMXKXVP.js +0 -16
- package/dist/prd-3XR5KYJS.js +0 -16
- package/dist/review-ZZG3CSUO.js +0 -14
- /package/dist/{chunk-UUY4PCWW.js.map → chunk-3BOHTH4V.js.map} +0 -0
- /package/dist/{config-YCF3HIKR.js.map → chunk-3D4A4B46.js.map} +0 -0
- /package/dist/{chunk-652DJBCN.js.map → chunk-GANSDJV7.js.map} +0 -0
- /package/dist/{chunk-VOKNTBOO.js.map → chunk-LVKQ2AKT.js.map} +0 -0
- /package/dist/{execute-QYXA225W.js.map → config-4THHOXNN.js.map} +0 -0
- /package/dist/{init-G57UXKDG.js.map → execute-5OEKLM5X.js.map} +0 -0
- /package/dist/{plan-YJLGBYBQ.js.map → init-PRMOTQ7N.js.map} +0 -0
- /package/dist/{pr-V5H65MRW.js.map → plan-Y2BYZD24.js.map} +0 -0
- /package/dist/{pr-review-RCMXKXVP.js.map → pr-H6GLOSXF.js.map} +0 -0
- /package/dist/{prd-3XR5KYJS.js.map → pr-review-CK5FR6WX.js.map} +0 -0
- /package/dist/{review-ZZG3CSUO.js.map → prd-4PWLCGH5.js.map} +0 -0
- /package/dist/{web-O2FVOYZW.js.map → web-ANQQTTRD.js.map} +0 -0
- /package/web/{CLAUDE.md → AGENTS.md} +0 -0
package/README.md
CHANGED
|
@@ -67,7 +67,7 @@ npx issue-flow run 42 --timeout 0
|
|
|
67
67
|
npx issue-flow analyze 42 -v -t 600
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
Every phase that invokes Claude once (`analyze`, `prd`, `plan`, `review`, `pr`, `pr-review`, `generate`) shares a default limit of **15 minutes** per invocation; `execute` has no limit, since its iteration budget is what bounds it. Use `--timeout` to raise it on a large issue, or `--timeout 0` to remove it. When an invocation is cut short the phase reports it as a timeout and retries with backoff, so the limit is the first thing to raise if a phase keeps dying at the same elapsed time.
|
|
71
71
|
|
|
72
72
|
## Commands
|
|
73
73
|
|
|
@@ -2,20 +2,23 @@
|
|
|
2
2
|
import {
|
|
3
3
|
issuePlaceholders,
|
|
4
4
|
resolveCommandIssue
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-AAY6KM7N.js";
|
|
6
6
|
import {
|
|
7
|
+
DEFAULT_HEADLESS_TIMEOUT_MS,
|
|
7
8
|
runHeadless
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-EWDJENFW.js";
|
|
9
10
|
import {
|
|
10
|
-
publishPhaseMetrics
|
|
11
|
-
|
|
11
|
+
publishPhaseMetrics,
|
|
12
|
+
resolvePolicyPlaceholders
|
|
13
|
+
} from "./chunk-OBLVLIUS.js";
|
|
12
14
|
import {
|
|
13
15
|
applyPlaceholders,
|
|
14
16
|
loadPrompt
|
|
15
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-HQYXVIH6.js";
|
|
18
|
+
import "./chunk-47VIN33V.js";
|
|
16
19
|
import {
|
|
17
20
|
resolveIssuePaths
|
|
18
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-VQ5VN7DF.js";
|
|
19
22
|
import {
|
|
20
23
|
getGlobalTimeout,
|
|
21
24
|
loadTaskPlan,
|
|
@@ -23,7 +26,7 @@ import {
|
|
|
23
26
|
printInfo,
|
|
24
27
|
printSuccess,
|
|
25
28
|
saveTaskPlan
|
|
26
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-HC2MT7BX.js";
|
|
27
30
|
|
|
28
31
|
// src/commands/analyze.ts
|
|
29
32
|
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
@@ -38,6 +41,9 @@ async function runAnalyze(issue, resolvedIssue) {
|
|
|
38
41
|
await mkdir(paths.issueDir, { recursive: true });
|
|
39
42
|
const template = await loadPrompt("analyze");
|
|
40
43
|
const prompt = applyPlaceholders(template, {
|
|
44
|
+
// The repository's own conventions. Empty when it declares none, which is
|
|
45
|
+
// what keeps the rendered prompt identical to the pre-policy one.
|
|
46
|
+
...await resolvePolicyPlaceholders(),
|
|
41
47
|
__ISSUE_NUMBER__: issueNumber,
|
|
42
48
|
__ANALYSIS_PATH__: analysisPath,
|
|
43
49
|
// Last: the Issue content is substituted in but never scanned again, so a
|
|
@@ -48,7 +54,7 @@ async function runAnalyze(issue, resolvedIssue) {
|
|
|
48
54
|
const result = await runHeadless({
|
|
49
55
|
prompt,
|
|
50
56
|
maxTurns: 30,
|
|
51
|
-
timeout: getGlobalTimeout() ??
|
|
57
|
+
timeout: getGlobalTimeout() ?? DEFAULT_HEADLESS_TIMEOUT_MS,
|
|
52
58
|
// json (not text) so the CLI reports usage: the envelope's `result` field
|
|
53
59
|
// carries the same assistant text this phase already consumed.
|
|
54
60
|
outputFormat: "json",
|
|
@@ -84,4 +90,4 @@ async function runAnalyze(issue, resolvedIssue) {
|
|
|
84
90
|
export {
|
|
85
91
|
runAnalyze
|
|
86
92
|
};
|
|
87
|
-
//# sourceMappingURL=analyze-
|
|
93
|
+
//# sourceMappingURL=analyze-XV3K25K3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/analyze.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { DEFAULT_HEADLESS_TIMEOUT_MS, runHeadless } from '../core/headless.js';\nimport { applyPlaceholders, loadPrompt } from '../core/prompt-resolver.js';\nimport { publishPhaseMetrics } from '../core/session-metrics.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 { resolvePolicyPlaceholders } from '../policy/placeholders.js';\nimport { resolveIssuePaths } from '../storage/resolve.js';\nimport { printError, printInfo, printSuccess } from '../ui/logger.js';\n\nexport async function runAnalyze(issue: string, resolvedIssue?: ResolvedIssue): Promise<number> {\n const issueNumber = issue.replace(/^#/, '');\n const paths = await resolveIssuePaths(issueNumber);\n const analysisPath = paths.analysisFile;\n\n const resolution = await resolveCommandIssue(issueNumber, resolvedIssue);\n if (!resolution.ok) {\n return resolution.code;\n }\n\n await mkdir(paths.issueDir, { recursive: true });\n\n const template = await loadPrompt('analyze');\n const prompt = applyPlaceholders(template, {\n // The repository's own conventions. Empty when it declares none, which is\n // what keeps the rendered prompt identical to the pre-policy one.\n ...(await resolvePolicyPlaceholders()),\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 startedAtMs = Date.now();\n const result = await runHeadless({\n prompt,\n maxTurns: 30,\n timeout: getGlobalTimeout() ?? DEFAULT_HEADLESS_TIMEOUT_MS,\n // json (not text) so the CLI reports usage: the envelope's `result` field\n // carries the same assistant text this phase already consumed.\n outputFormat: 'json',\n allowedTools: ['Bash', 'Read', 'Glob', 'Grep', 'Write'],\n addDirs: [paths.issueDir],\n statusMessage: `Analyzing issue #${issueNumber}...`,\n });\n // Before the success check: the tokens were spent either way.\n publishPhaseMetrics('analyze', result.cost, startedAtMs);\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 = paths.tasksFile;\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;AAY3C,eAAsB,WAAW,OAAe,eAAgD;AAC9F,QAAM,cAAc,MAAM,QAAQ,MAAM,EAAE;AAC1C,QAAM,QAAQ,MAAM,kBAAkB,WAAW;AACjD,QAAM,eAAe,MAAM;AAE3B,QAAM,aAAa,MAAM,oBAAoB,aAAa,aAAa;AACvE,MAAI,CAAC,WAAW,IAAI;AAClB,WAAO,WAAW;AAAA,EACpB;AAEA,QAAM,MAAM,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAE/C,QAAM,WAAW,MAAM,WAAW,SAAS;AAC3C,QAAM,SAAS,kBAAkB,UAAU;AAAA;AAAA;AAAA,IAGzC,GAAI,MAAM,0BAA0B;AAAA,IACpC,kBAAkB;AAAA,IAClB,mBAAmB;AAAA;AAAA;AAAA,IAGnB,GAAG,kBAAkB,WAAW,QAAQ;AAAA,EAC1C,CAAC;AAED,QAAM,cAAc,KAAK,IAAI;AAC7B,QAAM,SAAS,MAAM,YAAY;AAAA,IAC/B;AAAA,IACA,UAAU;AAAA,IACV,SAAS,iBAAiB,KAAK;AAAA;AAAA;AAAA,IAG/B,cAAc;AAAA,IACd,cAAc,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,OAAO;AAAA,IACtD,SAAS,CAAC,MAAM,QAAQ;AAAA,IACxB,eAAe,oBAAoB,WAAW;AAAA,EAChD,CAAC;AAED,sBAAoB,WAAW,OAAO,MAAM,WAAW;AAEvD,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,MAAM;AACxB,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":[]}
|