issue-flow 0.18.0 → 0.19.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 +34 -100
- package/dist/agent-EWKA7357.js +32 -0
- package/dist/{analyze-Q4ONIWRZ.js → analyze-Z7ODC27F.js} +42 -41
- package/dist/analyze-Z7ODC27F.js.map +1 -0
- package/dist/{apply-EEFPY2W4.js → apply-VNSWQS6O.js} +22 -24
- package/dist/apply-VNSWQS6O.js.map +1 -0
- package/dist/artifacts-AMJQJFFV.js +82 -0
- package/dist/artifacts-AMJQJFFV.js.map +1 -0
- package/dist/{bench-WWWXLTFH.js → bench-ZJEIACUK.js} +42 -42
- package/dist/{chunk-RYOUZ6EK.js → chunk-23VHVVKW.js} +3 -3
- package/dist/chunk-2EYLOS5I.js +99 -0
- package/dist/chunk-2EYLOS5I.js.map +1 -0
- package/dist/{chunk-XUEMATVY.js → chunk-2EZW4X57.js} +28 -25
- package/dist/chunk-2EZW4X57.js.map +1 -0
- package/dist/{chunk-LGHND47K.js → chunk-2Q6PG3MT.js} +15 -15
- package/dist/chunk-2Q6PG3MT.js.map +1 -0
- package/dist/{chunk-C5TL7T4V.js → chunk-2YM2VH6R.js} +2 -2
- package/dist/{chunk-OODXFCQV.js → chunk-2YYP7AE6.js} +14 -16
- package/dist/{chunk-OODXFCQV.js.map → chunk-2YYP7AE6.js.map} +1 -1
- package/dist/chunk-3JD25HHJ.js +278 -0
- package/dist/chunk-3JD25HHJ.js.map +1 -0
- package/dist/{chunk-PMLE7KAQ.js → chunk-46S7APLQ.js} +30 -14
- package/dist/chunk-46S7APLQ.js.map +1 -0
- package/dist/chunk-6AOZCWN2.js +21 -0
- package/dist/chunk-6AOZCWN2.js.map +1 -0
- package/dist/{chunk-QPGEFLMY.js → chunk-7CMVL4X6.js} +7 -7
- package/dist/chunk-7MJGYPHF.js +1571 -0
- package/dist/chunk-7MJGYPHF.js.map +1 -0
- package/dist/chunk-7ZZUSMBJ.js +35 -0
- package/dist/chunk-7ZZUSMBJ.js.map +1 -0
- package/dist/{chunk-DUS5ZNKL.js → chunk-DIMDAYZS.js} +7 -6
- package/dist/{chunk-DGRTJD5R.js → chunk-DXH4TQRB.js} +7 -7
- package/dist/{chunk-CRGIQFUQ.js → chunk-E2H3JV2E.js} +3 -1
- package/dist/chunk-E2H3JV2E.js.map +1 -0
- package/dist/{chunk-YUNBOUQH.js → chunk-ERAG5IQB.js} +8 -8
- package/dist/{chunk-ZVZMWNCG.js → chunk-F2NFJ27Z.js} +2 -2
- package/dist/{chunk-SOM4QA6C.js → chunk-GD7JZMSJ.js} +93 -18
- package/dist/chunk-GD7JZMSJ.js.map +1 -0
- package/dist/{chunk-6K2LCFG6.js → chunk-HEHHQU4G.js} +70 -81
- package/dist/chunk-HEHHQU4G.js.map +1 -0
- package/dist/{chunk-34OCSKOB.js → chunk-HHXWAWU6.js} +159 -114
- package/dist/chunk-HHXWAWU6.js.map +1 -0
- package/dist/{chunk-E4I6MMHD.js → chunk-HWWB22HC.js} +152 -100
- package/dist/chunk-HWWB22HC.js.map +1 -0
- package/dist/chunk-IMB6FA2F.js +673 -0
- package/dist/chunk-IMB6FA2F.js.map +1 -0
- package/dist/{chunk-ECU7YO7S.js → chunk-IQYXXFRC.js} +22 -6
- package/dist/chunk-IQYXXFRC.js.map +1 -0
- package/dist/chunk-J6VJ5M2U.js +1201 -0
- package/dist/chunk-J6VJ5M2U.js.map +1 -0
- package/dist/{chunk-QJ44VG5G.js → chunk-KDQRNVBZ.js} +3 -3
- package/dist/{chunk-7UMMFOL2.js → chunk-LRWIP7QS.js} +39 -24
- package/dist/chunk-LRWIP7QS.js.map +1 -0
- package/dist/{chunk-LI35PIIS.js → chunk-LYC57OXF.js} +20 -117
- package/dist/chunk-LYC57OXF.js.map +1 -0
- package/dist/{chunk-HAKDLR6N.js → chunk-MAJ6QDRL.js} +65 -78
- package/dist/chunk-MAJ6QDRL.js.map +1 -0
- package/dist/{chunk-CWSQVHVV.js → chunk-MHA7Q3KU.js} +248 -102
- package/dist/chunk-MHA7Q3KU.js.map +1 -0
- package/dist/{chunk-TZYINKCC.js → chunk-MQTVMB7W.js} +33 -28
- package/dist/chunk-MQTVMB7W.js.map +1 -0
- package/dist/chunk-NP47HRX2.js +136 -0
- package/dist/chunk-NP47HRX2.js.map +1 -0
- package/dist/{chunk-EG2MGDP5.js → chunk-NYDAHE3Y.js} +52 -46
- package/dist/chunk-NYDAHE3Y.js.map +1 -0
- package/dist/{chunk-45WZ6GMI.js → chunk-P7ZYOC23.js} +16 -16
- package/dist/{chunk-3R27MJ5R.js → chunk-PFWHHYEO.js} +3 -3
- package/dist/{chunk-NEWNXZ65.js → chunk-PHPAK2L6.js} +28 -26
- package/dist/{chunk-NEWNXZ65.js.map → chunk-PHPAK2L6.js.map} +1 -1
- package/dist/{chunk-PPZ3K4YM.js → chunk-PRGPSNGA.js} +2 -2
- package/dist/{chunk-V7QOIQYC.js → chunk-RGFMQFX7.js} +9 -23
- package/dist/{chunk-V7QOIQYC.js.map → chunk-RGFMQFX7.js.map} +1 -1
- package/dist/{chunk-YVPZUN6X.js → chunk-TJVX42KY.js} +335 -38
- package/dist/chunk-TJVX42KY.js.map +1 -0
- package/dist/{chunk-HOAHMERN.js → chunk-UDRAD7MF.js} +21 -21
- package/dist/{chunk-QF7VEL3M.js → chunk-UHDXXLYH.js} +39 -127
- package/dist/chunk-UHDXXLYH.js.map +1 -0
- package/dist/{chunk-RNFUVKC3.js → chunk-UPAAZU4W.js} +30 -13
- package/dist/chunk-UPAAZU4W.js.map +1 -0
- package/dist/{chunk-L6HSKTQE.js → chunk-W7LZLJAF.js} +4 -4
- package/dist/{chunk-KMCS76ZW.js → chunk-WB2FVIUS.js} +44 -12
- package/dist/chunk-WB2FVIUS.js.map +1 -0
- package/dist/{chunk-SA6HXL4Y.js → chunk-WPHC6JBR.js} +9 -9
- package/dist/chunk-WPHC6JBR.js.map +1 -0
- package/dist/{chunk-KRAGAUKD.js → chunk-XHCP6ZNO.js} +201 -64
- package/dist/chunk-XHCP6ZNO.js.map +1 -0
- package/dist/{chunk-7F7LGMVO.js → chunk-XKR3VD2Z.js} +12 -12
- package/dist/{chunk-7F7LGMVO.js.map → chunk-XKR3VD2Z.js.map} +1 -1
- package/dist/{chunk-ICM463EO.js → chunk-XNK5UN2D.js} +5 -649
- package/dist/chunk-XNK5UN2D.js.map +1 -0
- package/dist/{chunk-LTH6XYZ3.js → chunk-XQLNZW7I.js} +40 -30
- package/dist/chunk-XQLNZW7I.js.map +1 -0
- package/dist/{chunk-62GVVZQO.js → chunk-ZAYATXJD.js} +32 -316
- package/dist/chunk-ZAYATXJD.js.map +1 -0
- package/dist/cli.js +127 -59
- package/dist/cli.js.map +1 -1
- package/dist/compat-YPDZB34U.js +24 -0
- package/dist/{config-LEBZZCJP.js → config-56B4OHZE.js} +20 -17
- package/dist/{contract-JH2WBIO6.js → contract-HWLFFL3F.js} +2 -2
- package/dist/{conventions-XOT6YW5L.js → conventions-DW2CM5I3.js} +20 -16
- package/dist/{conventions-XOT6YW5L.js.map → conventions-DW2CM5I3.js.map} +1 -1
- package/dist/db-5NU77PJA.js +264 -0
- package/dist/db-5NU77PJA.js.map +1 -0
- package/dist/diagnostics-UCTS2VUF.js +25 -0
- package/dist/execute-R7AVOLNG.js +38 -0
- package/dist/{generate-JGW5JSKB.js → generate-O7GUXLN4.js} +46 -43
- package/dist/generate-O7GUXLN4.js.map +1 -0
- package/dist/{git-A2IP32PQ.js → git-LCG45YXD.js} +2 -3
- package/dist/history-6GSURU3H.js +101 -0
- package/dist/history-6GSURU3H.js.map +1 -0
- package/dist/init-DD6DBRC5.js +28 -0
- package/dist/{operations-O4FORFIH.js → operations-HU5ZFEBA.js} +78 -52
- package/dist/operations-HU5ZFEBA.js.map +1 -0
- package/dist/{permissions-G4XCAESF.js → permissions-NNNSRC4P.js} +5 -6
- package/dist/plan-XR6B7EM3.js +38 -0
- package/dist/{policy-U5NBFAO5.js → policy-RFJOJQL6.js} +17 -15
- package/dist/{policy-U5NBFAO5.js.map → policy-RFJOJQL6.js.map} +1 -1
- package/dist/pr-OSCNJCOO.js +42 -0
- package/dist/pr-review-IKIYHFBO.js +33 -0
- package/dist/prd-HFDZJJQR.js +37 -0
- package/dist/{ps-76L6ZAZL.js → ps-AKRHGPSR.js} +26 -15
- package/dist/ps-AKRHGPSR.js.map +1 -0
- package/dist/{recorder-2BAKPBRA.js → recorder-T7426CKV.js} +11 -7
- package/dist/registry-DWRKD65A.js +17 -0
- package/dist/repository-TABBRW2C.js +80 -0
- package/dist/resume-GDXKK5XP.js +278 -0
- package/dist/resume-GDXKK5XP.js.map +1 -0
- package/dist/review-JJHMQA2O.js +38 -0
- package/dist/routing-FPNUVE7T.js +35 -0
- package/dist/run-RLCURLLL.js +61 -0
- package/dist/{session-publisher-KAJQRHNZ.js → session-publisher-Q5TNEZPX.js} +3 -3
- package/dist/session-publisher-Q5TNEZPX.js.map +1 -0
- package/dist/{state-manager-UPHO2EA2.js → state-manager-IGNTD4AB.js} +9 -4
- package/dist/state-manager-IGNTD4AB.js.map +1 -0
- package/dist/{usage-KTMYXAPF.js → usage-XW27AL5K.js} +69 -63
- package/dist/usage-XW27AL5K.js.map +1 -0
- package/dist/web-NCDBVZ5Y.js +205 -0
- package/dist/web-NCDBVZ5Y.js.map +1 -0
- package/package.json +20 -7
- package/prompts/analyze.md +16 -19
- package/prompts/execute.md +73 -144
- package/prompts/generate.md +23 -10
- package/prompts/plan.md +32 -60
- package/prompts/pr-review.md +58 -40
- package/prompts/pr.md +50 -16
- package/prompts/prd.md +26 -19
- package/prompts/review.md +41 -18
- package/web/public/app.js +109 -110
- package/dist/agent-HMZTXCRT.js +0 -30
- package/dist/analyze-Q4ONIWRZ.js.map +0 -1
- package/dist/apply-EEFPY2W4.js.map +0 -1
- package/dist/chunk-34OCSKOB.js.map +0 -1
- package/dist/chunk-62GVVZQO.js.map +0 -1
- package/dist/chunk-6K2LCFG6.js.map +0 -1
- package/dist/chunk-7UMMFOL2.js.map +0 -1
- package/dist/chunk-CRGIQFUQ.js.map +0 -1
- package/dist/chunk-CWSQVHVV.js.map +0 -1
- package/dist/chunk-E4I6MMHD.js.map +0 -1
- package/dist/chunk-ECU7YO7S.js.map +0 -1
- package/dist/chunk-EG2MGDP5.js.map +0 -1
- package/dist/chunk-HAKDLR6N.js.map +0 -1
- package/dist/chunk-ICM463EO.js.map +0 -1
- package/dist/chunk-KMCS76ZW.js.map +0 -1
- package/dist/chunk-KRAGAUKD.js.map +0 -1
- package/dist/chunk-LGHND47K.js.map +0 -1
- package/dist/chunk-LI35PIIS.js.map +0 -1
- package/dist/chunk-LTH6XYZ3.js.map +0 -1
- package/dist/chunk-PMLE7KAQ.js.map +0 -1
- package/dist/chunk-QF7VEL3M.js.map +0 -1
- package/dist/chunk-RNFUVKC3.js.map +0 -1
- package/dist/chunk-SA6HXL4Y.js.map +0 -1
- package/dist/chunk-SOM4QA6C.js.map +0 -1
- package/dist/chunk-TZYINKCC.js.map +0 -1
- package/dist/chunk-WCCZJL7W.js +0 -141
- package/dist/chunk-WCCZJL7W.js.map +0 -1
- package/dist/chunk-XEYH6ZZI.js +0 -289
- package/dist/chunk-XEYH6ZZI.js.map +0 -1
- package/dist/chunk-XUEMATVY.js.map +0 -1
- package/dist/chunk-XZUEFTUP.js +0 -243
- package/dist/chunk-XZUEFTUP.js.map +0 -1
- package/dist/chunk-YVPZUN6X.js.map +0 -1
- package/dist/diagnostics-HTCWF7F4.js +0 -23
- package/dist/execute-LELOSR5T.js +0 -37
- package/dist/generate-JGW5JSKB.js.map +0 -1
- package/dist/init-TO6MUXO4.js +0 -26
- package/dist/operations-O4FORFIH.js.map +0 -1
- package/dist/plan-OXAT344Q.js +0 -34
- package/dist/pr-UZHNKKZC.js +0 -39
- package/dist/pr-review-Q4ACAWDM.js +0 -32
- package/dist/prd-6CYEMLDY.js +0 -33
- package/dist/ps-76L6ZAZL.js.map +0 -1
- package/dist/registry-XLHHYLTR.js +0 -15
- package/dist/resume-URCU6CIJ.js +0 -244
- package/dist/resume-URCU6CIJ.js.map +0 -1
- package/dist/review-LVZT2TMW.js +0 -35
- package/dist/routing-EK6RBZM4.js +0 -33
- package/dist/run-2RXJCJKT.js +0 -56
- package/dist/usage-KTMYXAPF.js.map +0 -1
- package/dist/web-B5UPHHR5.js +0 -172
- package/dist/web-B5UPHHR5.js.map +0 -1
- /package/dist/{agent-HMZTXCRT.js.map → agent-EWKA7357.js.map} +0 -0
- /package/dist/{bench-WWWXLTFH.js.map → bench-ZJEIACUK.js.map} +0 -0
- /package/dist/{chunk-RYOUZ6EK.js.map → chunk-23VHVVKW.js.map} +0 -0
- /package/dist/{chunk-C5TL7T4V.js.map → chunk-2YM2VH6R.js.map} +0 -0
- /package/dist/{chunk-QPGEFLMY.js.map → chunk-7CMVL4X6.js.map} +0 -0
- /package/dist/{chunk-DUS5ZNKL.js.map → chunk-DIMDAYZS.js.map} +0 -0
- /package/dist/{chunk-DGRTJD5R.js.map → chunk-DXH4TQRB.js.map} +0 -0
- /package/dist/{chunk-YUNBOUQH.js.map → chunk-ERAG5IQB.js.map} +0 -0
- /package/dist/{chunk-ZVZMWNCG.js.map → chunk-F2NFJ27Z.js.map} +0 -0
- /package/dist/{chunk-QJ44VG5G.js.map → chunk-KDQRNVBZ.js.map} +0 -0
- /package/dist/{chunk-45WZ6GMI.js.map → chunk-P7ZYOC23.js.map} +0 -0
- /package/dist/{chunk-3R27MJ5R.js.map → chunk-PFWHHYEO.js.map} +0 -0
- /package/dist/{chunk-PPZ3K4YM.js.map → chunk-PRGPSNGA.js.map} +0 -0
- /package/dist/{chunk-HOAHMERN.js.map → chunk-UDRAD7MF.js.map} +0 -0
- /package/dist/{chunk-L6HSKTQE.js.map → chunk-W7LZLJAF.js.map} +0 -0
- /package/dist/{config-LEBZZCJP.js.map → compat-YPDZB34U.js.map} +0 -0
- /package/dist/{contract-JH2WBIO6.js.map → config-56B4OHZE.js.map} +0 -0
- /package/dist/{diagnostics-HTCWF7F4.js.map → contract-HWLFFL3F.js.map} +0 -0
- /package/dist/{execute-LELOSR5T.js.map → diagnostics-UCTS2VUF.js.map} +0 -0
- /package/dist/{git-A2IP32PQ.js.map → execute-R7AVOLNG.js.map} +0 -0
- /package/dist/{init-TO6MUXO4.js.map → git-LCG45YXD.js.map} +0 -0
- /package/dist/{permissions-G4XCAESF.js.map → init-DD6DBRC5.js.map} +0 -0
- /package/dist/{plan-OXAT344Q.js.map → permissions-NNNSRC4P.js.map} +0 -0
- /package/dist/{pr-UZHNKKZC.js.map → plan-XR6B7EM3.js.map} +0 -0
- /package/dist/{pr-review-Q4ACAWDM.js.map → pr-OSCNJCOO.js.map} +0 -0
- /package/dist/{prd-6CYEMLDY.js.map → pr-review-IKIYHFBO.js.map} +0 -0
- /package/dist/{recorder-2BAKPBRA.js.map → prd-HFDZJJQR.js.map} +0 -0
- /package/dist/{registry-XLHHYLTR.js.map → recorder-T7426CKV.js.map} +0 -0
- /package/dist/{review-LVZT2TMW.js.map → registry-DWRKD65A.js.map} +0 -0
- /package/dist/{routing-EK6RBZM4.js.map → repository-TABBRW2C.js.map} +0 -0
- /package/dist/{run-2RXJCJKT.js.map → review-JJHMQA2O.js.map} +0 -0
- /package/dist/{session-publisher-KAJQRHNZ.js.map → routing-FPNUVE7T.js.map} +0 -0
- /package/dist/{state-manager-UPHO2EA2.js.map → run-RLCURLLL.js.map} +0 -0
|
@@ -1,62 +1,62 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
summarizePhaseTiming
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KDQRNVBZ.js";
|
|
5
5
|
import {
|
|
6
6
|
runAcceptance
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-HWWB22HC.js";
|
|
8
|
+
import "./chunk-W7LZLJAF.js";
|
|
9
9
|
import {
|
|
10
10
|
evaluateCeilings,
|
|
11
11
|
spendFromCost
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-ZVZMWNCG.js";
|
|
12
|
+
} from "./chunk-MQTVMB7W.js";
|
|
13
|
+
import "./chunk-DXH4TQRB.js";
|
|
14
|
+
import "./chunk-F2NFJ27Z.js";
|
|
16
15
|
import {
|
|
17
16
|
ensureHarnessVersion,
|
|
18
17
|
setIssuesCliOverrides
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import {
|
|
21
|
-
resetStorageResolutionCache,
|
|
22
|
-
resolveIssuePaths
|
|
23
|
-
} from "./chunk-LI35PIIS.js";
|
|
18
|
+
} from "./chunk-UHDXXLYH.js";
|
|
24
19
|
import {
|
|
25
20
|
printError,
|
|
26
21
|
printInfo,
|
|
27
|
-
printWarning
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
ISSUES_DIR_NAME,
|
|
33
|
-
getGlobalRoot
|
|
34
|
-
} from "./chunk-HAKDLR6N.js";
|
|
35
|
-
import {
|
|
36
|
-
run
|
|
37
|
-
} from "./chunk-YVPZUN6X.js";
|
|
22
|
+
printWarning,
|
|
23
|
+
resetStorageResolutionCache,
|
|
24
|
+
resolveIssuePaths
|
|
25
|
+
} from "./chunk-J6VJ5M2U.js";
|
|
26
|
+
import "./chunk-7CMVL4X6.js";
|
|
38
27
|
import {
|
|
39
28
|
createInitialSnapshot,
|
|
40
29
|
reduceSessionEvent
|
|
41
|
-
} from "./chunk-
|
|
42
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-DIMDAYZS.js";
|
|
31
|
+
import "./chunk-HEHHQU4G.js";
|
|
43
32
|
import {
|
|
44
33
|
redactSecrets
|
|
45
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-PRGPSNGA.js";
|
|
35
|
+
import "./chunk-P3LRUNC6.js";
|
|
36
|
+
import "./chunk-LYC57OXF.js";
|
|
46
37
|
import {
|
|
47
38
|
loadTaskPlan
|
|
48
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-GD7JZMSJ.js";
|
|
40
|
+
import "./chunk-NP47HRX2.js";
|
|
41
|
+
import "./chunk-IMB6FA2F.js";
|
|
42
|
+
import "./chunk-7MJGYPHF.js";
|
|
49
43
|
import {
|
|
50
44
|
sessionSnapshotSchema
|
|
51
|
-
} from "./chunk-
|
|
52
|
-
import
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
} from "./chunk-XNK5UN2D.js";
|
|
46
|
+
import {
|
|
47
|
+
GLOBAL_ROOT_ENV,
|
|
48
|
+
ISSUES_DIR_NAME,
|
|
49
|
+
getGlobalRoot
|
|
50
|
+
} from "./chunk-MAJ6QDRL.js";
|
|
51
|
+
import {
|
|
52
|
+
run
|
|
53
|
+
} from "./chunk-TJVX42KY.js";
|
|
54
|
+
import "./chunk-PFWHHYEO.js";
|
|
55
55
|
|
|
56
56
|
// src/commands/bench.ts
|
|
57
|
-
import { mkdir as mkdir3, writeFile as writeFile2 } from "fs/promises";
|
|
58
|
-
import { dirname as dirname2 } from "path";
|
|
59
|
-
import { createInterface } from "readline";
|
|
57
|
+
import { mkdir as mkdir3, writeFile as writeFile2 } from "node:fs/promises";
|
|
58
|
+
import { dirname as dirname2 } from "node:path";
|
|
59
|
+
import { createInterface } from "node:readline";
|
|
60
60
|
|
|
61
61
|
// src/benchmark/corpus.ts
|
|
62
62
|
var TASK_CLASSES = ["trivial", "small", "medium", "analysis"];
|
|
@@ -154,13 +154,13 @@ function createLiveRepeatRunner(deps) {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
// src/benchmark/real.ts
|
|
157
|
-
import { mkdir as mkdir2 } from "fs/promises";
|
|
158
|
-
import { join as join2 } from "path";
|
|
157
|
+
import { mkdir as mkdir2 } from "node:fs/promises";
|
|
158
|
+
import { join as join2 } from "node:path";
|
|
159
159
|
|
|
160
160
|
// src/benchmark/fixtures/materialize.ts
|
|
161
|
-
import { mkdir, mkdtemp, rm, writeFile } from "fs/promises";
|
|
162
|
-
import { tmpdir } from "os";
|
|
163
|
-
import { dirname, join } from "path";
|
|
161
|
+
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
162
|
+
import { tmpdir } from "node:os";
|
|
163
|
+
import { dirname, join } from "node:path";
|
|
164
164
|
|
|
165
165
|
// src/benchmark/fixtures/templates.ts
|
|
166
166
|
function withSeed(content, seed) {
|
|
@@ -577,7 +577,7 @@ async function runRealCorpus(options) {
|
|
|
577
577
|
}
|
|
578
578
|
|
|
579
579
|
// src/benchmark/report.ts
|
|
580
|
-
import { hostname } from "os";
|
|
580
|
+
import { hostname } from "node:os";
|
|
581
581
|
function formatMs(value) {
|
|
582
582
|
return value === null ? "\u2014" : `${Math.round(value)}`;
|
|
583
583
|
}
|
|
@@ -858,7 +858,7 @@ async function runBench(options = {}) {
|
|
|
858
858
|
const harnessVersion = options.harnessVersion ?? await collectHarnessVersion("claude");
|
|
859
859
|
const runner = options.runner ?? createLiveRepeatRunner({
|
|
860
860
|
runPipeline: options.runPipeline ?? (async (issue) => {
|
|
861
|
-
const { runPipeline } = await import("./run-
|
|
861
|
+
const { runPipeline } = await import("./run-RLCURLLL.js");
|
|
862
862
|
return runPipeline(issue, "auto", void 0, true, false, { yes: true, only: true });
|
|
863
863
|
})
|
|
864
864
|
});
|
|
@@ -907,4 +907,4 @@ export {
|
|
|
907
907
|
estimateCampaignUsd,
|
|
908
908
|
runBench
|
|
909
909
|
};
|
|
910
|
-
//# sourceMappingURL=bench-
|
|
910
|
+
//# sourceMappingURL=bench-ZJEIACUK.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
sessionSnapshotSchema
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-XNK5UN2D.js";
|
|
5
5
|
|
|
6
6
|
// src/storage/session-file.ts
|
|
7
|
-
import { readFile, stat as statFile } from "fs/promises";
|
|
7
|
+
import { readFile, stat as statFile } from "node:fs/promises";
|
|
8
8
|
async function readSessionFile(filePath) {
|
|
9
9
|
let raw;
|
|
10
10
|
let mtimeMs;
|
|
@@ -27,4 +27,4 @@ async function readSessionFile(filePath) {
|
|
|
27
27
|
export {
|
|
28
28
|
readSessionFile
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
30
|
+
//# sourceMappingURL=chunk-23VHVVKW.js.map
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
databaseOptionsForProject,
|
|
4
|
+
openIssueFlowDatabase
|
|
5
|
+
} from "./chunk-7MJGYPHF.js";
|
|
6
|
+
|
|
7
|
+
// src/storage/db/queries.ts
|
|
8
|
+
async function query(work, options = {}) {
|
|
9
|
+
const database = await openIssueFlowDatabase(options);
|
|
10
|
+
try {
|
|
11
|
+
return work(database);
|
|
12
|
+
} finally {
|
|
13
|
+
database.close();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async function listStoredIssueIds(input) {
|
|
17
|
+
return query(
|
|
18
|
+
(database) => database.prepare(
|
|
19
|
+
`SELECT issue_id FROM pipelines WHERE project_id = ?
|
|
20
|
+
ORDER BY COALESCE(last_attempt_at, updated_at) DESC, issue_id`
|
|
21
|
+
).all(input.projectId).map((row) => row.issue_id),
|
|
22
|
+
input.databaseOptions ?? databaseOptionsForProject(input.projectId)
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
async function latestStoredIssueSnapshot(input) {
|
|
26
|
+
return query((database) => {
|
|
27
|
+
const row = database.prepare(
|
|
28
|
+
`SELECT snapshot.payload_json FROM snapshots AS snapshot
|
|
29
|
+
WHERE snapshot.project_id = ? AND snapshot.issue_id = ?
|
|
30
|
+
ORDER BY snapshot.updated_at DESC, snapshot.rowid DESC LIMIT 1`
|
|
31
|
+
).get(input.projectId, input.issueId);
|
|
32
|
+
return row === void 0 ? null : JSON.parse(row.payload_json);
|
|
33
|
+
}, input.databaseOptions ?? databaseOptionsForProject(input.projectId));
|
|
34
|
+
}
|
|
35
|
+
async function listStoredQueues(input) {
|
|
36
|
+
return query(
|
|
37
|
+
(database) => database.prepare("SELECT payload_json FROM queues WHERE project_id = ? ORDER BY updated_at DESC").all(input.projectId).map((row) => JSON.parse(row.payload_json)),
|
|
38
|
+
input.databaseOptions ?? databaseOptionsForProject(input.projectId)
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
async function listStoredIssueEvents(input) {
|
|
42
|
+
return query(
|
|
43
|
+
(database) => database.prepare(
|
|
44
|
+
`SELECT event.payload_json FROM events AS event
|
|
45
|
+
JOIN runs AS run ON run.id = event.run_id
|
|
46
|
+
WHERE event.project_id = ? AND run.issue_id = ?
|
|
47
|
+
ORDER BY run.started_at, event.sequence, event.rowid`
|
|
48
|
+
).all(input.projectId, input.issueId).map((row, index) => {
|
|
49
|
+
const parsed = JSON.parse(row.payload_json);
|
|
50
|
+
if (typeof parsed === "object" && parsed !== null && "event" in parsed && typeof parsed.event === "object" && parsed.event !== null) {
|
|
51
|
+
const entry = parsed;
|
|
52
|
+
return { seq: index + 1, event: entry.event };
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
seq: index + 1,
|
|
56
|
+
event: parsed
|
|
57
|
+
};
|
|
58
|
+
}),
|
|
59
|
+
input.databaseOptions ?? databaseOptionsForProject(input.projectId)
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
async function getStoredIssueHistory(input) {
|
|
63
|
+
return query((database) => {
|
|
64
|
+
const runs = database.prepare(
|
|
65
|
+
`SELECT id, status, started_at, finished_at, heartbeat_at
|
|
66
|
+
FROM runs WHERE project_id = ? AND issue_id = ? ORDER BY started_at`
|
|
67
|
+
).all(input.projectId, input.issueId);
|
|
68
|
+
const phases = database.prepare(
|
|
69
|
+
`SELECT phase.run_id, phase.name, phase.status, phase.started_at, phase.finished_at,
|
|
70
|
+
phase.duration_ms, phase.input_tokens, phase.output_tokens, phase.cost_status,
|
|
71
|
+
phase.cost_amount
|
|
72
|
+
FROM phases AS phase JOIN runs AS run ON run.id = phase.run_id
|
|
73
|
+
WHERE run.project_id = ? AND run.issue_id = ? ORDER BY run.started_at, phase.started_at`
|
|
74
|
+
).all(input.projectId, input.issueId);
|
|
75
|
+
const executions = database.prepare(
|
|
76
|
+
`SELECT payload_json FROM executions WHERE project_id = ? AND issue_id = ?
|
|
77
|
+
ORDER BY started_at, rowid`
|
|
78
|
+
).all(input.projectId, input.issueId).map((row) => JSON.parse(row.payload_json));
|
|
79
|
+
const verifications = database.prepare(
|
|
80
|
+
`SELECT payload_json FROM verifications WHERE project_id = ? AND issue_id = ?
|
|
81
|
+
ORDER BY created_at, rowid`
|
|
82
|
+
).all(input.projectId, input.issueId).map((row) => JSON.parse(row.payload_json));
|
|
83
|
+
const reviews = database.prepare(
|
|
84
|
+
`SELECT review.payload_json FROM reviews AS review
|
|
85
|
+
JOIN pull_requests AS pull ON pull.id = review.pull_request_id
|
|
86
|
+
WHERE pull.project_id = ? AND pull.issue_id = ? ORDER BY review.created_at, review.rowid`
|
|
87
|
+
).all(input.projectId, input.issueId).map((row) => JSON.parse(row.payload_json));
|
|
88
|
+
return { issueId: input.issueId, runs, phases, executions, verifications, reviews };
|
|
89
|
+
}, input.databaseOptions ?? databaseOptionsForProject(input.projectId));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export {
|
|
93
|
+
listStoredIssueIds,
|
|
94
|
+
latestStoredIssueSnapshot,
|
|
95
|
+
listStoredQueues,
|
|
96
|
+
listStoredIssueEvents,
|
|
97
|
+
getStoredIssueHistory
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=chunk-2EYLOS5I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/db/queries.ts"],"sourcesContent":["import type { SessionSnapshot } from '../../core/session-state.js';\nimport type { ExecutionPlan } from '../../execution/types.js';\nimport type { ExecutionRecord } from '../../telemetry/types.js';\nimport {\n databaseOptionsForProject,\n type OpenIssueFlowDatabaseOptions,\n openIssueFlowDatabase,\n} from './index.js';\n\nasync function query<T>(\n work: (database: Awaited<ReturnType<typeof openIssueFlowDatabase>>) => T,\n options: OpenIssueFlowDatabaseOptions = {},\n): Promise<T> {\n const database = await openIssueFlowDatabase(options);\n try {\n return work(database);\n } finally {\n database.close();\n }\n}\n\n/** Canonical issue identities for a project, ordered by their last plan update. */\nexport async function listStoredIssueIds(input: {\n projectId: string;\n databaseOptions?: OpenIssueFlowDatabaseOptions;\n}): Promise<string[]> {\n return query(\n (database) =>\n database\n .prepare(\n `SELECT issue_id FROM pipelines WHERE project_id = ?\n ORDER BY COALESCE(last_attempt_at, updated_at) DESC, issue_id`,\n )\n .all<{ issue_id: string }>(input.projectId)\n .map((row) => row.issue_id),\n input.databaseOptions ?? databaseOptionsForProject(input.projectId),\n );\n}\n\n/** Latest durable snapshot for one issue, whether the run is active or finished. */\nexport async function latestStoredIssueSnapshot(input: {\n projectId: string;\n issueId: string;\n databaseOptions?: OpenIssueFlowDatabaseOptions;\n}): Promise<SessionSnapshot | null> {\n return query((database) => {\n const row = database\n .prepare(\n `SELECT snapshot.payload_json FROM snapshots AS snapshot\n WHERE snapshot.project_id = ? AND snapshot.issue_id = ?\n ORDER BY snapshot.updated_at DESC, snapshot.rowid DESC LIMIT 1`,\n )\n .get<{ payload_json: string }>(input.projectId, input.issueId);\n return row === undefined ? null : (JSON.parse(row.payload_json) as SessionSnapshot);\n }, input.databaseOptions ?? databaseOptionsForProject(input.projectId));\n}\n\n/** Canonical queue plans for one project. */\nexport async function listStoredQueues(input: {\n projectId: string;\n databaseOptions?: OpenIssueFlowDatabaseOptions;\n}): Promise<ExecutionPlan[]> {\n return query(\n (database) =>\n database\n .prepare('SELECT payload_json FROM queues WHERE project_id = ? ORDER BY updated_at DESC')\n .all<{ payload_json: string }>(input.projectId)\n .map((row) => JSON.parse(row.payload_json) as ExecutionPlan),\n input.databaseOptions ?? databaseOptionsForProject(input.projectId),\n );\n}\n\nexport interface StoredIssueEvent {\n seq: number;\n event: Record<string, unknown> & { type: string; at: string };\n}\n\n/** Ordered canonical journal for one issue across all of its runs. */\nexport async function listStoredIssueEvents(input: {\n projectId: string;\n issueId: string;\n databaseOptions?: OpenIssueFlowDatabaseOptions;\n}): Promise<StoredIssueEvent[]> {\n return query(\n (database) =>\n database\n .prepare(\n `SELECT event.payload_json FROM events AS event\n JOIN runs AS run ON run.id = event.run_id\n WHERE event.project_id = ? AND run.issue_id = ?\n ORDER BY run.started_at, event.sequence, event.rowid`,\n )\n .all<{ payload_json: string }>(input.projectId, input.issueId)\n .map((row, index) => {\n const parsed = JSON.parse(row.payload_json) as unknown;\n if (\n typeof parsed === 'object' &&\n parsed !== null &&\n 'event' in parsed &&\n typeof parsed.event === 'object' &&\n parsed.event !== null\n ) {\n const entry = parsed as StoredIssueEvent;\n return { seq: index + 1, event: entry.event };\n }\n return {\n seq: index + 1,\n event: parsed as StoredIssueEvent['event'],\n };\n }),\n input.databaseOptions ?? databaseOptionsForProject(input.projectId),\n );\n}\n\nexport interface StoredIssueHistory {\n issueId: string;\n runs: Array<Record<string, unknown>>;\n phases: Array<Record<string, unknown>>;\n executions: ExecutionRecord[];\n verifications: Array<Record<string, unknown>>;\n reviews: Array<Record<string, unknown>>;\n}\n\n/** Full relational history used by `issue-flow history`. */\nexport async function getStoredIssueHistory(input: {\n projectId: string;\n issueId: string;\n databaseOptions?: OpenIssueFlowDatabaseOptions;\n}): Promise<StoredIssueHistory> {\n return query((database) => {\n const runs = database\n .prepare(\n `SELECT id, status, started_at, finished_at, heartbeat_at\n FROM runs WHERE project_id = ? AND issue_id = ? ORDER BY started_at`,\n )\n .all<Record<string, unknown>>(input.projectId, input.issueId);\n const phases = database\n .prepare(\n `SELECT phase.run_id, phase.name, phase.status, phase.started_at, phase.finished_at,\n phase.duration_ms, phase.input_tokens, phase.output_tokens, phase.cost_status,\n phase.cost_amount\n FROM phases AS phase JOIN runs AS run ON run.id = phase.run_id\n WHERE run.project_id = ? AND run.issue_id = ? ORDER BY run.started_at, phase.started_at`,\n )\n .all<Record<string, unknown>>(input.projectId, input.issueId);\n const executions = database\n .prepare(\n `SELECT payload_json FROM executions WHERE project_id = ? AND issue_id = ?\n ORDER BY started_at, rowid`,\n )\n .all<{ payload_json: string }>(input.projectId, input.issueId)\n .map((row) => JSON.parse(row.payload_json) as ExecutionRecord);\n const verifications = database\n .prepare(\n `SELECT payload_json FROM verifications WHERE project_id = ? AND issue_id = ?\n ORDER BY created_at, rowid`,\n )\n .all<{ payload_json: string }>(input.projectId, input.issueId)\n .map((row) => JSON.parse(row.payload_json) as Record<string, unknown>);\n const reviews = database\n .prepare(\n `SELECT review.payload_json FROM reviews AS review\n JOIN pull_requests AS pull ON pull.id = review.pull_request_id\n WHERE pull.project_id = ? AND pull.issue_id = ? ORDER BY review.created_at, review.rowid`,\n )\n .all<{ payload_json: string }>(input.projectId, input.issueId)\n .map((row) => JSON.parse(row.payload_json) as Record<string, unknown>);\n return { issueId: input.issueId, runs, phases, executions, verifications, reviews };\n }, input.databaseOptions ?? databaseOptionsForProject(input.projectId));\n}\n"],"mappings":";;;;;;;AASA,eAAe,MACb,MACA,UAAwC,CAAC,GAC7B;AACZ,QAAM,WAAW,MAAM,sBAAsB,OAAO;AACpD,MAAI;AACF,WAAO,KAAK,QAAQ;AAAA,EACtB,UAAE;AACA,aAAS,MAAM;AAAA,EACjB;AACF;AAGA,eAAsB,mBAAmB,OAGnB;AACpB,SAAO;AAAA,IACL,CAAC,aACC,SACG;AAAA,MACC;AAAA;AAAA,IAEF,EACC,IAA0B,MAAM,SAAS,EACzC,IAAI,CAAC,QAAQ,IAAI,QAAQ;AAAA,IAC9B,MAAM,mBAAmB,0BAA0B,MAAM,SAAS;AAAA,EACpE;AACF;AAGA,eAAsB,0BAA0B,OAIZ;AAClC,SAAO,MAAM,CAAC,aAAa;AACzB,UAAM,MAAM,SACT;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAA8B,MAAM,WAAW,MAAM,OAAO;AAC/D,WAAO,QAAQ,SAAY,OAAQ,KAAK,MAAM,IAAI,YAAY;AAAA,EAChE,GAAG,MAAM,mBAAmB,0BAA0B,MAAM,SAAS,CAAC;AACxE;AAGA,eAAsB,iBAAiB,OAGV;AAC3B,SAAO;AAAA,IACL,CAAC,aACC,SACG,QAAQ,+EAA+E,EACvF,IAA8B,MAAM,SAAS,EAC7C,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,YAAY,CAAkB;AAAA,IAC/D,MAAM,mBAAmB,0BAA0B,MAAM,SAAS;AAAA,EACpE;AACF;AAQA,eAAsB,sBAAsB,OAIZ;AAC9B,SAAO;AAAA,IACL,CAAC,aACC,SACG;AAAA,MACC;AAAA;AAAA;AAAA;AAAA,IAIF,EACC,IAA8B,MAAM,WAAW,MAAM,OAAO,EAC5D,IAAI,CAAC,KAAK,UAAU;AACnB,YAAM,SAAS,KAAK,MAAM,IAAI,YAAY;AAC1C,UACE,OAAO,WAAW,YAClB,WAAW,QACX,WAAW,UACX,OAAO,OAAO,UAAU,YACxB,OAAO,UAAU,MACjB;AACA,cAAM,QAAQ;AACd,eAAO,EAAE,KAAK,QAAQ,GAAG,OAAO,MAAM,MAAM;AAAA,MAC9C;AACA,aAAO;AAAA,QACL,KAAK,QAAQ;AAAA,QACb,OAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,IACL,MAAM,mBAAmB,0BAA0B,MAAM,SAAS;AAAA,EACpE;AACF;AAYA,eAAsB,sBAAsB,OAIZ;AAC9B,SAAO,MAAM,CAAC,aAAa;AACzB,UAAM,OAAO,SACV;AAAA,MACC;AAAA;AAAA,IAEF,EACC,IAA6B,MAAM,WAAW,MAAM,OAAO;AAC9D,UAAM,SAAS,SACZ;AAAA,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKF,EACC,IAA6B,MAAM,WAAW,MAAM,OAAO;AAC9D,UAAM,aAAa,SAChB;AAAA,MACC;AAAA;AAAA,IAEF,EACC,IAA8B,MAAM,WAAW,MAAM,OAAO,EAC5D,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,YAAY,CAAoB;AAC/D,UAAM,gBAAgB,SACnB;AAAA,MACC;AAAA;AAAA,IAEF,EACC,IAA8B,MAAM,WAAW,MAAM,OAAO,EAC5D,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,YAAY,CAA4B;AACvE,UAAM,UAAU,SACb;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAA8B,MAAM,WAAW,MAAM,OAAO,EAC5D,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,YAAY,CAA4B;AACvE,WAAO,EAAE,SAAS,MAAM,SAAS,MAAM,QAAQ,YAAY,eAAe,QAAQ;AAAA,EACpF,GAAG,MAAM,mBAAmB,0BAA0B,MAAM,SAAS,CAAC;AACxE;","names":[]}
|
|
@@ -1,40 +1,43 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
parseDocumentResult
|
|
4
|
+
} from "./chunk-6AOZCWN2.js";
|
|
2
5
|
import {
|
|
3
6
|
isTransientFailure,
|
|
4
|
-
readFileWithGrace,
|
|
5
7
|
runPhaseWithRetry
|
|
6
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-RGFMQFX7.js";
|
|
7
9
|
import {
|
|
8
10
|
issuePlaceholders,
|
|
9
11
|
resolveCommandIssue
|
|
10
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WPHC6JBR.js";
|
|
11
13
|
import {
|
|
12
14
|
publishPhaseMetrics,
|
|
13
15
|
resolvePolicyPlaceholders
|
|
14
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-WB2FVIUS.js";
|
|
15
17
|
import {
|
|
16
18
|
applyPlaceholders,
|
|
17
19
|
loadPrompt
|
|
18
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-XKR3VD2Z.js";
|
|
19
21
|
import {
|
|
20
22
|
DEFAULT_HEADLESS_TIMEOUT_MS,
|
|
21
23
|
runHeadless
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import {
|
|
24
|
-
resolveIssuePaths
|
|
25
|
-
} from "./chunk-LI35PIIS.js";
|
|
24
|
+
} from "./chunk-MQTVMB7W.js";
|
|
26
25
|
import {
|
|
27
26
|
getGlobalTimeout,
|
|
28
27
|
printError,
|
|
29
|
-
printSuccess
|
|
30
|
-
|
|
28
|
+
printSuccess,
|
|
29
|
+
resolveIssuePaths
|
|
30
|
+
} from "./chunk-J6VJ5M2U.js";
|
|
31
31
|
import {
|
|
32
32
|
loadTaskPlan,
|
|
33
33
|
saveTaskPlan
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-GD7JZMSJ.js";
|
|
35
|
+
import {
|
|
36
|
+
writeFileAtomic
|
|
37
|
+
} from "./chunk-PFWHHYEO.js";
|
|
35
38
|
|
|
36
39
|
// src/commands/prd.ts
|
|
37
|
-
import { mkdir } from "fs/promises";
|
|
40
|
+
import { mkdir } from "node:fs/promises";
|
|
38
41
|
async function runPrd(issue, resolvedIssue) {
|
|
39
42
|
const issueNumber = issue.replace(/^#/, "");
|
|
40
43
|
const paths = await resolveIssuePaths(issueNumber);
|
|
@@ -48,13 +51,12 @@ async function runPrd(issue, resolvedIssue) {
|
|
|
48
51
|
const prompt = applyPlaceholders(template, {
|
|
49
52
|
// The repository's own conventions. Empty when it declares none, which is
|
|
50
53
|
// what keeps the rendered prompt identical to the pre-policy one.
|
|
51
|
-
...await resolvePolicyPlaceholders(),
|
|
54
|
+
...await resolvePolicyPlaceholders({ phase: "prd" }),
|
|
52
55
|
__ISSUE_NUMBER__: issueNumber,
|
|
53
|
-
__PRD_PATH__: prdPath,
|
|
54
56
|
// Absolute: the analysis lives in the global storage, outside the working
|
|
55
57
|
// directory the agent is started in.
|
|
56
58
|
__ANALYSIS_PATH__: paths.analysisFile,
|
|
57
|
-
...issuePlaceholders(resolution.resolved)
|
|
59
|
+
...issuePlaceholders(resolution.resolved, paths.issueFile)
|
|
58
60
|
});
|
|
59
61
|
const outcome = await runPhaseWithRetry({
|
|
60
62
|
phase: "prd",
|
|
@@ -71,11 +73,11 @@ async function runPrd(issue, resolvedIssue) {
|
|
|
71
73
|
// json (not text) so the CLI reports usage: the envelope's `result`
|
|
72
74
|
// field carries the same assistant text this phase already consumed.
|
|
73
75
|
outputFormat: "json",
|
|
74
|
-
allowedTools: ["Bash", "Read", "Glob", "Grep"
|
|
76
|
+
allowedTools: ["Bash", "Read", "Glob", "Grep"],
|
|
75
77
|
addDirs: [paths.issueDir],
|
|
76
78
|
statusMessage: `Generating PRD for issue #${issueNumber}...`,
|
|
77
79
|
phase: "prd",
|
|
78
|
-
permission: "
|
|
80
|
+
permission: "read-only"
|
|
79
81
|
});
|
|
80
82
|
publishPhaseMetrics("prd", result.cost, startedAtMs, result.agent?.provider);
|
|
81
83
|
if (!result.success) {
|
|
@@ -86,12 +88,13 @@ async function runPrd(issue, resolvedIssue) {
|
|
|
86
88
|
};
|
|
87
89
|
}
|
|
88
90
|
try {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
91
|
+
await writeFileAtomic(prdPath, parseDocumentResult(result.result, "prd"));
|
|
92
|
+
} catch (error) {
|
|
93
|
+
return {
|
|
94
|
+
ok: false,
|
|
95
|
+
transient: true,
|
|
96
|
+
error: `Invalid PRD output: ${error.message}`
|
|
97
|
+
};
|
|
95
98
|
}
|
|
96
99
|
return { ok: true };
|
|
97
100
|
}
|
|
@@ -114,4 +117,4 @@ async function runPrd(issue, resolvedIssue) {
|
|
|
114
117
|
export {
|
|
115
118
|
runPrd
|
|
116
119
|
};
|
|
117
|
-
//# sourceMappingURL=chunk-
|
|
120
|
+
//# sourceMappingURL=chunk-2EZW4X57.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/prd.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { parseDocumentResult } from '../core/document-result.js';\nimport { DEFAULT_HEADLESS_TIMEOUT_MS, runHeadless } from '../core/headless.js';\nimport { runPhaseWithRetry } from '../core/phase-runner.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, printSuccess } from '../ui/logger.js';\nimport { writeFileAtomic } from '../utils/fs.js';\nimport { isTransientFailure } from '../utils/retry.js';\n\nexport async function runPrd(issue: string, resolvedIssue?: ResolvedIssue): Promise<number> {\n const issueNumber = issue.replace(/^#/, '');\n const paths = await resolveIssuePaths(issueNumber);\n const prdPath = paths.prdFile;\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('prd');\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({ phase: 'prd' })),\n __ISSUE_NUMBER__: issueNumber,\n // Absolute: the analysis lives in the global storage, outside the working\n // directory the agent is started in.\n __ANALYSIS_PATH__: paths.analysisFile,\n ...issuePlaceholders(resolution.resolved, paths.issueFile),\n });\n\n const outcome = await runPhaseWithRetry({\n phase: 'prd',\n attempt: async () => {\n const startedAtMs = Date.now();\n const result = await runHeadless({\n prompt,\n maxTurns: 25,\n timeout: getGlobalTimeout() ?? DEFAULT_HEADLESS_TIMEOUT_MS,\n timeoutHistory: {\n phase: 'prd',\n journalFiles: [paths.rotatedEventsFile, paths.eventsFile],\n },\n // json (not text) so the CLI reports usage: the envelope's `result`\n // field carries the same assistant text this phase already consumed.\n outputFormat: 'json',\n allowedTools: ['Bash', 'Read', 'Glob', 'Grep'],\n addDirs: [paths.issueDir],\n statusMessage: `Generating PRD for issue #${issueNumber}...`,\n phase: 'prd',\n permission: 'read-only',\n });\n // One event per attempt; the reducer sums them into the phase total.\n publishPhaseMetrics('prd', result.cost, startedAtMs, result.agent?.provider);\n\n if (!result.success) {\n return {\n ok: false,\n transient: result.retryExhausted !== true && isTransientFailure(1, result.error ?? ''),\n error: `PRD generation failed: ${result.error}`,\n };\n }\n\n try {\n await writeFileAtomic(prdPath, parseDocumentResult(result.result, 'prd'));\n } catch (error) {\n return {\n ok: false,\n transient: true,\n error: `Invalid PRD output: ${(error as Error).message}`,\n };\n }\n\n return { ok: true };\n },\n });\n\n if (!outcome.ok) {\n printError(outcome.error ?? `PRD generation failed for issue #${issueNumber}`);\n return 1;\n }\n\n // Update pipeline state\n const tasksPath = paths.tasksFile;\n try {\n const plan = await loadTaskPlan(tasksPath);\n plan.pipeline.prdCompleted = true;\n await saveTaskPlan(tasksPath, plan);\n } catch {\n // tasks.json may not exist yet\n }\n\n printSuccess(`PRD saved to ${prdPath}`);\n return 0;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa;AAgBtB,eAAsB,OAAO,OAAe,eAAgD;AAC1F,QAAM,cAAc,MAAM,QAAQ,MAAM,EAAE;AAC1C,QAAM,QAAQ,MAAM,kBAAkB,WAAW;AACjD,QAAM,UAAU,MAAM;AAEtB,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,KAAK;AACvC,QAAM,SAAS,kBAAkB,UAAU;AAAA;AAAA;AAAA,IAGzC,GAAI,MAAM,0BAA0B,EAAE,OAAO,MAAM,CAAC;AAAA,IACpD,kBAAkB;AAAA;AAAA;AAAA,IAGlB,mBAAmB,MAAM;AAAA,IACzB,GAAG,kBAAkB,WAAW,UAAU,MAAM,SAAS;AAAA,EAC3D,CAAC;AAED,QAAM,UAAU,MAAM,kBAAkB;AAAA,IACtC,OAAO;AAAA,IACP,SAAS,YAAY;AACnB,YAAM,cAAc,KAAK,IAAI;AAC7B,YAAM,SAAS,MAAM,YAAY;AAAA,QAC/B;AAAA,QACA,UAAU;AAAA,QACV,SAAS,iBAAiB,KAAK;AAAA,QAC/B,gBAAgB;AAAA,UACd,OAAO;AAAA,UACP,cAAc,CAAC,MAAM,mBAAmB,MAAM,UAAU;AAAA,QAC1D;AAAA;AAAA;AAAA,QAGA,cAAc;AAAA,QACd,cAAc,CAAC,QAAQ,QAAQ,QAAQ,MAAM;AAAA,QAC7C,SAAS,CAAC,MAAM,QAAQ;AAAA,QACxB,eAAe,6BAA6B,WAAW;AAAA,QACvD,OAAO;AAAA,QACP,YAAY;AAAA,MACd,CAAC;AAED,0BAAoB,OAAO,OAAO,MAAM,aAAa,OAAO,OAAO,QAAQ;AAE3E,UAAI,CAAC,OAAO,SAAS;AACnB,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,WAAW,OAAO,mBAAmB,QAAQ,mBAAmB,GAAG,OAAO,SAAS,EAAE;AAAA,UACrF,OAAO,0BAA0B,OAAO,KAAK;AAAA,QAC/C;AAAA,MACF;AAEA,UAAI;AACF,cAAM,gBAAgB,SAAS,oBAAoB,OAAO,QAAQ,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO;AACd,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,WAAW;AAAA,UACX,OAAO,uBAAwB,MAAgB,OAAO;AAAA,QACxD;AAAA,MACF;AAEA,aAAO,EAAE,IAAI,KAAK;AAAA,IACpB;AAAA,EACF,CAAC;AAED,MAAI,CAAC,QAAQ,IAAI;AACf,eAAW,QAAQ,SAAS,oCAAoC,WAAW,EAAE;AAC7E,WAAO;AAAA,EACT;AAGA,QAAM,YAAY,MAAM;AACxB,MAAI;AACF,UAAM,OAAO,MAAM,aAAa,SAAS;AACzC,SAAK,SAAS,eAAe;AAC7B,UAAM,aAAa,WAAW,IAAI;AAAA,EACpC,QAAQ;AAAA,EAER;AAEA,eAAa,gBAAgB,OAAO,EAAE;AACtC,SAAO;AACT;","names":[]}
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
import {
|
|
3
3
|
loadPolicyConfig,
|
|
4
4
|
mergeConfigLayers
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-UHDXXLYH.js";
|
|
6
6
|
import {
|
|
7
7
|
printWarning
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-J6VJ5M2U.js";
|
|
9
9
|
import {
|
|
10
10
|
getProjectRoot,
|
|
11
11
|
run
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-TJVX42KY.js";
|
|
13
13
|
|
|
14
14
|
// src/conventions/git/types.ts
|
|
15
15
|
var CHANGE_TYPES = [
|
|
@@ -351,14 +351,14 @@ function issueReferenceLines(input) {
|
|
|
351
351
|
}
|
|
352
352
|
|
|
353
353
|
// src/policy/resolve.ts
|
|
354
|
-
import { isAbsolute, normalize, sep as sep2 } from "path";
|
|
354
|
+
import { isAbsolute, normalize, sep as sep2 } from "node:path";
|
|
355
355
|
|
|
356
356
|
// src/policy/discovery.ts
|
|
357
|
-
import { readdir, readFile, stat } from "fs/promises";
|
|
358
|
-
import { join, relative, sep } from "path";
|
|
357
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
358
|
+
import { join, relative, sep } from "node:path";
|
|
359
359
|
|
|
360
360
|
// src/policy/parsers/docs.ts
|
|
361
|
-
import { posix } from "path";
|
|
361
|
+
import { posix } from "node:path";
|
|
362
362
|
function classifyDocument(fileName) {
|
|
363
363
|
switch (fileName.toLowerCase()) {
|
|
364
364
|
case "agents.md":
|
|
@@ -543,7 +543,7 @@ function parseIssueTypes(payload) {
|
|
|
543
543
|
}
|
|
544
544
|
|
|
545
545
|
// src/policy/parsers/templates.ts
|
|
546
|
-
import { basename, extname } from "path";
|
|
546
|
+
import { basename, extname } from "node:path";
|
|
547
547
|
|
|
548
548
|
// src/policy/parsers/issue-forms.ts
|
|
549
549
|
function emptyTemplateMetadata() {
|
|
@@ -1417,14 +1417,14 @@ async function resolvePolicy(root, scope, options) {
|
|
|
1417
1417
|
discoverGitConventions(root)
|
|
1418
1418
|
]
|
|
1419
1419
|
);
|
|
1420
|
-
const wantsOrgTemplates = toggles.issueTemplates && templateDiscovery.templates.length === 0;
|
|
1420
|
+
const wantsOrgTemplates = options.remote !== false && toggles.issueTemplates && templateDiscovery.templates.length === 0;
|
|
1421
1421
|
const [baseBranch, slug] = await Promise.all([
|
|
1422
|
-
discoverBaseBranch(root, options.exec),
|
|
1423
|
-
toggles.issueTypes || wantsOrgTemplates ? discoverGitHubSlug(root, options.exec) : Promise.resolve(null)
|
|
1422
|
+
options.remote === false ? Promise.resolve({ baseBranch: null, sources: [] }) : discoverBaseBranch(root, options.exec),
|
|
1423
|
+
options.remote !== false && toggles.issueTypes || wantsOrgTemplates ? discoverGitHubSlug(root, options.exec) : Promise.resolve(null)
|
|
1424
1424
|
]);
|
|
1425
1425
|
const [labels, issueTypes, orgTemplates, orgForms] = await Promise.all([
|
|
1426
|
-
toggles.labels ? discoverLabels(root, options.exec) : Promise.resolve({ labels: [], sources: [disabledSource("labels")] }),
|
|
1427
|
-
toggles.issueTypes ? discoverIssueTypes(root, slug?.owner ?? null, options.exec) : Promise.resolve({ types: [], sources: [disabledSource("issue-types")] }),
|
|
1426
|
+
options.remote !== false && toggles.labels ? discoverLabels(root, options.exec) : Promise.resolve({ labels: [], sources: [disabledSource("labels")] }),
|
|
1427
|
+
options.remote !== false && toggles.issueTypes ? discoverIssueTypes(root, slug?.owner ?? null, options.exec) : Promise.resolve({ types: [], sources: [disabledSource("issue-types")] }),
|
|
1428
1428
|
wantsOrgTemplates ? discoverOrganizationTemplates(root, slug, options.exec) : Promise.resolve({ templates: [], sources: [] }),
|
|
1429
1429
|
// Two calls, because GitHub answers the two kinds of organization default
|
|
1430
1430
|
// through different surfaces: `issueTemplates` covers markdown templates and
|
|
@@ -1533,7 +1533,7 @@ async function loadRepositoryPolicy(options = {}) {
|
|
|
1533
1533
|
if (options.cache === false) {
|
|
1534
1534
|
return resolvePolicy(root, scope, options);
|
|
1535
1535
|
}
|
|
1536
|
-
const key = `${root}\0${scope ?? ""}`;
|
|
1536
|
+
const key = `${root}\0${scope ?? ""}\0${options.remote !== false}`;
|
|
1537
1537
|
const cached = cache.get(key);
|
|
1538
1538
|
if (cached !== void 0) {
|
|
1539
1539
|
return cached;
|
|
@@ -1559,4 +1559,4 @@ export {
|
|
|
1559
1559
|
issueReferenceLines,
|
|
1560
1560
|
loadRepositoryPolicy
|
|
1561
1561
|
};
|
|
1562
|
-
//# sourceMappingURL=chunk-
|
|
1562
|
+
//# sourceMappingURL=chunk-2Q6PG3MT.js.map
|