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.
Files changed (233) hide show
  1. package/README.md +34 -100
  2. package/dist/agent-EWKA7357.js +32 -0
  3. package/dist/{analyze-Q4ONIWRZ.js → analyze-Z7ODC27F.js} +42 -41
  4. package/dist/analyze-Z7ODC27F.js.map +1 -0
  5. package/dist/{apply-EEFPY2W4.js → apply-VNSWQS6O.js} +22 -24
  6. package/dist/apply-VNSWQS6O.js.map +1 -0
  7. package/dist/artifacts-AMJQJFFV.js +82 -0
  8. package/dist/artifacts-AMJQJFFV.js.map +1 -0
  9. package/dist/{bench-WWWXLTFH.js → bench-ZJEIACUK.js} +42 -42
  10. package/dist/{chunk-RYOUZ6EK.js → chunk-23VHVVKW.js} +3 -3
  11. package/dist/chunk-2EYLOS5I.js +99 -0
  12. package/dist/chunk-2EYLOS5I.js.map +1 -0
  13. package/dist/{chunk-XUEMATVY.js → chunk-2EZW4X57.js} +28 -25
  14. package/dist/chunk-2EZW4X57.js.map +1 -0
  15. package/dist/{chunk-LGHND47K.js → chunk-2Q6PG3MT.js} +15 -15
  16. package/dist/chunk-2Q6PG3MT.js.map +1 -0
  17. package/dist/{chunk-C5TL7T4V.js → chunk-2YM2VH6R.js} +2 -2
  18. package/dist/{chunk-OODXFCQV.js → chunk-2YYP7AE6.js} +14 -16
  19. package/dist/{chunk-OODXFCQV.js.map → chunk-2YYP7AE6.js.map} +1 -1
  20. package/dist/chunk-3JD25HHJ.js +278 -0
  21. package/dist/chunk-3JD25HHJ.js.map +1 -0
  22. package/dist/{chunk-PMLE7KAQ.js → chunk-46S7APLQ.js} +30 -14
  23. package/dist/chunk-46S7APLQ.js.map +1 -0
  24. package/dist/chunk-6AOZCWN2.js +21 -0
  25. package/dist/chunk-6AOZCWN2.js.map +1 -0
  26. package/dist/{chunk-QPGEFLMY.js → chunk-7CMVL4X6.js} +7 -7
  27. package/dist/chunk-7MJGYPHF.js +1571 -0
  28. package/dist/chunk-7MJGYPHF.js.map +1 -0
  29. package/dist/chunk-7ZZUSMBJ.js +35 -0
  30. package/dist/chunk-7ZZUSMBJ.js.map +1 -0
  31. package/dist/{chunk-DUS5ZNKL.js → chunk-DIMDAYZS.js} +7 -6
  32. package/dist/{chunk-DGRTJD5R.js → chunk-DXH4TQRB.js} +7 -7
  33. package/dist/{chunk-CRGIQFUQ.js → chunk-E2H3JV2E.js} +3 -1
  34. package/dist/chunk-E2H3JV2E.js.map +1 -0
  35. package/dist/{chunk-YUNBOUQH.js → chunk-ERAG5IQB.js} +8 -8
  36. package/dist/{chunk-ZVZMWNCG.js → chunk-F2NFJ27Z.js} +2 -2
  37. package/dist/{chunk-SOM4QA6C.js → chunk-GD7JZMSJ.js} +93 -18
  38. package/dist/chunk-GD7JZMSJ.js.map +1 -0
  39. package/dist/{chunk-6K2LCFG6.js → chunk-HEHHQU4G.js} +70 -81
  40. package/dist/chunk-HEHHQU4G.js.map +1 -0
  41. package/dist/{chunk-34OCSKOB.js → chunk-HHXWAWU6.js} +159 -114
  42. package/dist/chunk-HHXWAWU6.js.map +1 -0
  43. package/dist/{chunk-E4I6MMHD.js → chunk-HWWB22HC.js} +152 -100
  44. package/dist/chunk-HWWB22HC.js.map +1 -0
  45. package/dist/chunk-IMB6FA2F.js +673 -0
  46. package/dist/chunk-IMB6FA2F.js.map +1 -0
  47. package/dist/{chunk-ECU7YO7S.js → chunk-IQYXXFRC.js} +22 -6
  48. package/dist/chunk-IQYXXFRC.js.map +1 -0
  49. package/dist/chunk-J6VJ5M2U.js +1201 -0
  50. package/dist/chunk-J6VJ5M2U.js.map +1 -0
  51. package/dist/{chunk-QJ44VG5G.js → chunk-KDQRNVBZ.js} +3 -3
  52. package/dist/{chunk-7UMMFOL2.js → chunk-LRWIP7QS.js} +39 -24
  53. package/dist/chunk-LRWIP7QS.js.map +1 -0
  54. package/dist/{chunk-LI35PIIS.js → chunk-LYC57OXF.js} +20 -117
  55. package/dist/chunk-LYC57OXF.js.map +1 -0
  56. package/dist/{chunk-HAKDLR6N.js → chunk-MAJ6QDRL.js} +65 -78
  57. package/dist/chunk-MAJ6QDRL.js.map +1 -0
  58. package/dist/{chunk-CWSQVHVV.js → chunk-MHA7Q3KU.js} +248 -102
  59. package/dist/chunk-MHA7Q3KU.js.map +1 -0
  60. package/dist/{chunk-TZYINKCC.js → chunk-MQTVMB7W.js} +33 -28
  61. package/dist/chunk-MQTVMB7W.js.map +1 -0
  62. package/dist/chunk-NP47HRX2.js +136 -0
  63. package/dist/chunk-NP47HRX2.js.map +1 -0
  64. package/dist/{chunk-EG2MGDP5.js → chunk-NYDAHE3Y.js} +52 -46
  65. package/dist/chunk-NYDAHE3Y.js.map +1 -0
  66. package/dist/{chunk-45WZ6GMI.js → chunk-P7ZYOC23.js} +16 -16
  67. package/dist/{chunk-3R27MJ5R.js → chunk-PFWHHYEO.js} +3 -3
  68. package/dist/{chunk-NEWNXZ65.js → chunk-PHPAK2L6.js} +28 -26
  69. package/dist/{chunk-NEWNXZ65.js.map → chunk-PHPAK2L6.js.map} +1 -1
  70. package/dist/{chunk-PPZ3K4YM.js → chunk-PRGPSNGA.js} +2 -2
  71. package/dist/{chunk-V7QOIQYC.js → chunk-RGFMQFX7.js} +9 -23
  72. package/dist/{chunk-V7QOIQYC.js.map → chunk-RGFMQFX7.js.map} +1 -1
  73. package/dist/{chunk-YVPZUN6X.js → chunk-TJVX42KY.js} +335 -38
  74. package/dist/chunk-TJVX42KY.js.map +1 -0
  75. package/dist/{chunk-HOAHMERN.js → chunk-UDRAD7MF.js} +21 -21
  76. package/dist/{chunk-QF7VEL3M.js → chunk-UHDXXLYH.js} +39 -127
  77. package/dist/chunk-UHDXXLYH.js.map +1 -0
  78. package/dist/{chunk-RNFUVKC3.js → chunk-UPAAZU4W.js} +30 -13
  79. package/dist/chunk-UPAAZU4W.js.map +1 -0
  80. package/dist/{chunk-L6HSKTQE.js → chunk-W7LZLJAF.js} +4 -4
  81. package/dist/{chunk-KMCS76ZW.js → chunk-WB2FVIUS.js} +44 -12
  82. package/dist/chunk-WB2FVIUS.js.map +1 -0
  83. package/dist/{chunk-SA6HXL4Y.js → chunk-WPHC6JBR.js} +9 -9
  84. package/dist/chunk-WPHC6JBR.js.map +1 -0
  85. package/dist/{chunk-KRAGAUKD.js → chunk-XHCP6ZNO.js} +201 -64
  86. package/dist/chunk-XHCP6ZNO.js.map +1 -0
  87. package/dist/{chunk-7F7LGMVO.js → chunk-XKR3VD2Z.js} +12 -12
  88. package/dist/{chunk-7F7LGMVO.js.map → chunk-XKR3VD2Z.js.map} +1 -1
  89. package/dist/{chunk-ICM463EO.js → chunk-XNK5UN2D.js} +5 -649
  90. package/dist/chunk-XNK5UN2D.js.map +1 -0
  91. package/dist/{chunk-LTH6XYZ3.js → chunk-XQLNZW7I.js} +40 -30
  92. package/dist/chunk-XQLNZW7I.js.map +1 -0
  93. package/dist/{chunk-62GVVZQO.js → chunk-ZAYATXJD.js} +32 -316
  94. package/dist/chunk-ZAYATXJD.js.map +1 -0
  95. package/dist/cli.js +127 -59
  96. package/dist/cli.js.map +1 -1
  97. package/dist/compat-YPDZB34U.js +24 -0
  98. package/dist/{config-LEBZZCJP.js → config-56B4OHZE.js} +20 -17
  99. package/dist/{contract-JH2WBIO6.js → contract-HWLFFL3F.js} +2 -2
  100. package/dist/{conventions-XOT6YW5L.js → conventions-DW2CM5I3.js} +20 -16
  101. package/dist/{conventions-XOT6YW5L.js.map → conventions-DW2CM5I3.js.map} +1 -1
  102. package/dist/db-5NU77PJA.js +264 -0
  103. package/dist/db-5NU77PJA.js.map +1 -0
  104. package/dist/diagnostics-UCTS2VUF.js +25 -0
  105. package/dist/execute-R7AVOLNG.js +38 -0
  106. package/dist/{generate-JGW5JSKB.js → generate-O7GUXLN4.js} +46 -43
  107. package/dist/generate-O7GUXLN4.js.map +1 -0
  108. package/dist/{git-A2IP32PQ.js → git-LCG45YXD.js} +2 -3
  109. package/dist/history-6GSURU3H.js +101 -0
  110. package/dist/history-6GSURU3H.js.map +1 -0
  111. package/dist/init-DD6DBRC5.js +28 -0
  112. package/dist/{operations-O4FORFIH.js → operations-HU5ZFEBA.js} +78 -52
  113. package/dist/operations-HU5ZFEBA.js.map +1 -0
  114. package/dist/{permissions-G4XCAESF.js → permissions-NNNSRC4P.js} +5 -6
  115. package/dist/plan-XR6B7EM3.js +38 -0
  116. package/dist/{policy-U5NBFAO5.js → policy-RFJOJQL6.js} +17 -15
  117. package/dist/{policy-U5NBFAO5.js.map → policy-RFJOJQL6.js.map} +1 -1
  118. package/dist/pr-OSCNJCOO.js +42 -0
  119. package/dist/pr-review-IKIYHFBO.js +33 -0
  120. package/dist/prd-HFDZJJQR.js +37 -0
  121. package/dist/{ps-76L6ZAZL.js → ps-AKRHGPSR.js} +26 -15
  122. package/dist/ps-AKRHGPSR.js.map +1 -0
  123. package/dist/{recorder-2BAKPBRA.js → recorder-T7426CKV.js} +11 -7
  124. package/dist/registry-DWRKD65A.js +17 -0
  125. package/dist/repository-TABBRW2C.js +80 -0
  126. package/dist/resume-GDXKK5XP.js +278 -0
  127. package/dist/resume-GDXKK5XP.js.map +1 -0
  128. package/dist/review-JJHMQA2O.js +38 -0
  129. package/dist/routing-FPNUVE7T.js +35 -0
  130. package/dist/run-RLCURLLL.js +61 -0
  131. package/dist/{session-publisher-KAJQRHNZ.js → session-publisher-Q5TNEZPX.js} +3 -3
  132. package/dist/session-publisher-Q5TNEZPX.js.map +1 -0
  133. package/dist/{state-manager-UPHO2EA2.js → state-manager-IGNTD4AB.js} +9 -4
  134. package/dist/state-manager-IGNTD4AB.js.map +1 -0
  135. package/dist/{usage-KTMYXAPF.js → usage-XW27AL5K.js} +69 -63
  136. package/dist/usage-XW27AL5K.js.map +1 -0
  137. package/dist/web-NCDBVZ5Y.js +205 -0
  138. package/dist/web-NCDBVZ5Y.js.map +1 -0
  139. package/package.json +20 -7
  140. package/prompts/analyze.md +16 -19
  141. package/prompts/execute.md +73 -144
  142. package/prompts/generate.md +23 -10
  143. package/prompts/plan.md +32 -60
  144. package/prompts/pr-review.md +58 -40
  145. package/prompts/pr.md +50 -16
  146. package/prompts/prd.md +26 -19
  147. package/prompts/review.md +41 -18
  148. package/web/public/app.js +109 -110
  149. package/dist/agent-HMZTXCRT.js +0 -30
  150. package/dist/analyze-Q4ONIWRZ.js.map +0 -1
  151. package/dist/apply-EEFPY2W4.js.map +0 -1
  152. package/dist/chunk-34OCSKOB.js.map +0 -1
  153. package/dist/chunk-62GVVZQO.js.map +0 -1
  154. package/dist/chunk-6K2LCFG6.js.map +0 -1
  155. package/dist/chunk-7UMMFOL2.js.map +0 -1
  156. package/dist/chunk-CRGIQFUQ.js.map +0 -1
  157. package/dist/chunk-CWSQVHVV.js.map +0 -1
  158. package/dist/chunk-E4I6MMHD.js.map +0 -1
  159. package/dist/chunk-ECU7YO7S.js.map +0 -1
  160. package/dist/chunk-EG2MGDP5.js.map +0 -1
  161. package/dist/chunk-HAKDLR6N.js.map +0 -1
  162. package/dist/chunk-ICM463EO.js.map +0 -1
  163. package/dist/chunk-KMCS76ZW.js.map +0 -1
  164. package/dist/chunk-KRAGAUKD.js.map +0 -1
  165. package/dist/chunk-LGHND47K.js.map +0 -1
  166. package/dist/chunk-LI35PIIS.js.map +0 -1
  167. package/dist/chunk-LTH6XYZ3.js.map +0 -1
  168. package/dist/chunk-PMLE7KAQ.js.map +0 -1
  169. package/dist/chunk-QF7VEL3M.js.map +0 -1
  170. package/dist/chunk-RNFUVKC3.js.map +0 -1
  171. package/dist/chunk-SA6HXL4Y.js.map +0 -1
  172. package/dist/chunk-SOM4QA6C.js.map +0 -1
  173. package/dist/chunk-TZYINKCC.js.map +0 -1
  174. package/dist/chunk-WCCZJL7W.js +0 -141
  175. package/dist/chunk-WCCZJL7W.js.map +0 -1
  176. package/dist/chunk-XEYH6ZZI.js +0 -289
  177. package/dist/chunk-XEYH6ZZI.js.map +0 -1
  178. package/dist/chunk-XUEMATVY.js.map +0 -1
  179. package/dist/chunk-XZUEFTUP.js +0 -243
  180. package/dist/chunk-XZUEFTUP.js.map +0 -1
  181. package/dist/chunk-YVPZUN6X.js.map +0 -1
  182. package/dist/diagnostics-HTCWF7F4.js +0 -23
  183. package/dist/execute-LELOSR5T.js +0 -37
  184. package/dist/generate-JGW5JSKB.js.map +0 -1
  185. package/dist/init-TO6MUXO4.js +0 -26
  186. package/dist/operations-O4FORFIH.js.map +0 -1
  187. package/dist/plan-OXAT344Q.js +0 -34
  188. package/dist/pr-UZHNKKZC.js +0 -39
  189. package/dist/pr-review-Q4ACAWDM.js +0 -32
  190. package/dist/prd-6CYEMLDY.js +0 -33
  191. package/dist/ps-76L6ZAZL.js.map +0 -1
  192. package/dist/registry-XLHHYLTR.js +0 -15
  193. package/dist/resume-URCU6CIJ.js +0 -244
  194. package/dist/resume-URCU6CIJ.js.map +0 -1
  195. package/dist/review-LVZT2TMW.js +0 -35
  196. package/dist/routing-EK6RBZM4.js +0 -33
  197. package/dist/run-2RXJCJKT.js +0 -56
  198. package/dist/usage-KTMYXAPF.js.map +0 -1
  199. package/dist/web-B5UPHHR5.js +0 -172
  200. package/dist/web-B5UPHHR5.js.map +0 -1
  201. /package/dist/{agent-HMZTXCRT.js.map → agent-EWKA7357.js.map} +0 -0
  202. /package/dist/{bench-WWWXLTFH.js.map → bench-ZJEIACUK.js.map} +0 -0
  203. /package/dist/{chunk-RYOUZ6EK.js.map → chunk-23VHVVKW.js.map} +0 -0
  204. /package/dist/{chunk-C5TL7T4V.js.map → chunk-2YM2VH6R.js.map} +0 -0
  205. /package/dist/{chunk-QPGEFLMY.js.map → chunk-7CMVL4X6.js.map} +0 -0
  206. /package/dist/{chunk-DUS5ZNKL.js.map → chunk-DIMDAYZS.js.map} +0 -0
  207. /package/dist/{chunk-DGRTJD5R.js.map → chunk-DXH4TQRB.js.map} +0 -0
  208. /package/dist/{chunk-YUNBOUQH.js.map → chunk-ERAG5IQB.js.map} +0 -0
  209. /package/dist/{chunk-ZVZMWNCG.js.map → chunk-F2NFJ27Z.js.map} +0 -0
  210. /package/dist/{chunk-QJ44VG5G.js.map → chunk-KDQRNVBZ.js.map} +0 -0
  211. /package/dist/{chunk-45WZ6GMI.js.map → chunk-P7ZYOC23.js.map} +0 -0
  212. /package/dist/{chunk-3R27MJ5R.js.map → chunk-PFWHHYEO.js.map} +0 -0
  213. /package/dist/{chunk-PPZ3K4YM.js.map → chunk-PRGPSNGA.js.map} +0 -0
  214. /package/dist/{chunk-HOAHMERN.js.map → chunk-UDRAD7MF.js.map} +0 -0
  215. /package/dist/{chunk-L6HSKTQE.js.map → chunk-W7LZLJAF.js.map} +0 -0
  216. /package/dist/{config-LEBZZCJP.js.map → compat-YPDZB34U.js.map} +0 -0
  217. /package/dist/{contract-JH2WBIO6.js.map → config-56B4OHZE.js.map} +0 -0
  218. /package/dist/{diagnostics-HTCWF7F4.js.map → contract-HWLFFL3F.js.map} +0 -0
  219. /package/dist/{execute-LELOSR5T.js.map → diagnostics-UCTS2VUF.js.map} +0 -0
  220. /package/dist/{git-A2IP32PQ.js.map → execute-R7AVOLNG.js.map} +0 -0
  221. /package/dist/{init-TO6MUXO4.js.map → git-LCG45YXD.js.map} +0 -0
  222. /package/dist/{permissions-G4XCAESF.js.map → init-DD6DBRC5.js.map} +0 -0
  223. /package/dist/{plan-OXAT344Q.js.map → permissions-NNNSRC4P.js.map} +0 -0
  224. /package/dist/{pr-UZHNKKZC.js.map → plan-XR6B7EM3.js.map} +0 -0
  225. /package/dist/{pr-review-Q4ACAWDM.js.map → pr-OSCNJCOO.js.map} +0 -0
  226. /package/dist/{prd-6CYEMLDY.js.map → pr-review-IKIYHFBO.js.map} +0 -0
  227. /package/dist/{recorder-2BAKPBRA.js.map → prd-HFDZJJQR.js.map} +0 -0
  228. /package/dist/{registry-XLHHYLTR.js.map → recorder-T7426CKV.js.map} +0 -0
  229. /package/dist/{review-LVZT2TMW.js.map → registry-DWRKD65A.js.map} +0 -0
  230. /package/dist/{routing-EK6RBZM4.js.map → repository-TABBRW2C.js.map} +0 -0
  231. /package/dist/{run-2RXJCJKT.js.map → review-JJHMQA2O.js.map} +0 -0
  232. /package/dist/{session-publisher-KAJQRHNZ.js.map → routing-FPNUVE7T.js.map} +0 -0
  233. /package/dist/{state-manager-UPHO2EA2.js.map → run-RLCURLLL.js.map} +0 -0
@@ -3,60 +3,54 @@ import {
3
3
  applyAcceptanceToPlan,
4
4
  formatVerificationLine,
5
5
  runAcceptanceGate
6
- } from "./chunk-ECU7YO7S.js";
6
+ } from "./chunk-IQYXXFRC.js";
7
7
  import {
8
8
  issuePlaceholders,
9
9
  resolveCommandIssue
10
- } from "./chunk-SA6HXL4Y.js";
10
+ } from "./chunk-WPHC6JBR.js";
11
11
  import {
12
12
  publishPhaseMetrics,
13
13
  resolvePolicyPlaceholders
14
- } from "./chunk-KMCS76ZW.js";
14
+ } from "./chunk-WB2FVIUS.js";
15
15
  import {
16
16
  applyPlaceholders,
17
17
  loadPrompt
18
- } from "./chunk-7F7LGMVO.js";
18
+ } from "./chunk-XKR3VD2Z.js";
19
19
  import {
20
20
  DEFAULT_HEADLESS_TIMEOUT_MS,
21
21
  runHeadless
22
- } from "./chunk-TZYINKCC.js";
23
- import {
24
- resolveIssuePaths
25
- } from "./chunk-LI35PIIS.js";
22
+ } from "./chunk-MQTVMB7W.js";
26
23
  import {
27
24
  getGlobalTimeout,
28
25
  printError,
29
26
  printSuccess,
30
- printWarning
31
- } from "./chunk-XZUEFTUP.js";
27
+ printWarning,
28
+ resolveIssuePaths
29
+ } from "./chunk-J6VJ5M2U.js";
32
30
  import {
33
31
  loadTaskPlan,
34
32
  saveTaskPlan
35
- } from "./chunk-SOM4QA6C.js";
33
+ } from "./chunk-GD7JZMSJ.js";
36
34
 
37
- // src/commands/review.ts
38
- function parseReviewResult(output) {
39
- const match = output.match(/<review-result>([\s\S]*?)<\/review-result>/);
40
- if (!match) {
41
- if (/STATUS:\s*PASS/i.test(output)) {
42
- return { status: "PASS" };
43
- }
44
- if (/STATUS:\s*FAIL/i.test(output)) {
45
- const findingsMatch2 = output.match(/FINDINGS:([\s\S]*?)(?:$|<\/)/);
46
- return { status: "FAIL", findings: findingsMatch2?.[1]?.trim() ?? "Unknown findings" };
47
- }
48
- return { status: "PASS" };
35
+ // src/verify/review-result.ts
36
+ function parseIssueReviewResult(output) {
37
+ const blocks = [...output.matchAll(/<review-result>([\s\S]*?)<\/review-result>/g)];
38
+ if (blocks.length !== 1 || (output.match(/<\/?review-result>/g)?.length ?? 0) !== 2 || !output.trimEnd().endsWith("</review-result>")) {
39
+ return { ok: false, error: "Expected exactly one final <review-result> block." };
49
40
  }
50
- const block = match[1];
51
- if (/STATUS:\s*PASS/i.test(block)) {
52
- return { status: "PASS" };
41
+ const body = blocks[0][1].trim();
42
+ if (body === "STATUS: PASS") return { ok: true, status: "PASS" };
43
+ const failure = body.match(/^STATUS: FAIL\s*\r?\nFINDINGS:\s*\r?\n([\s\S]+)$/);
44
+ if (failure && !/^STATUS:/m.test(failure[1])) {
45
+ const lines = failure[1].trim().split(/\r?\n/);
46
+ if (lines.every((line) => /^-\s+\S/.test(line))) {
47
+ return { ok: true, status: "FAIL", findings: lines.join("\n") };
48
+ }
53
49
  }
54
- const findingsMatch = block.match(/FINDINGS:([\s\S]*)/);
55
- return {
56
- status: "FAIL",
57
- findings: findingsMatch?.[1]?.trim() ?? "Unknown findings"
58
- };
50
+ return { ok: false, error: "Invalid review status or findings; no approval inferred." };
59
51
  }
52
+
53
+ // src/commands/review.ts
60
54
  async function runReview(issue, resolvedIssue) {
61
55
  const issueNumber = issue.replace(/^#/, "");
62
56
  const paths = await resolveIssuePaths(issueNumber);
@@ -84,25 +78,16 @@ async function runReview(issue, resolvedIssue) {
84
78
  } else {
85
79
  printSuccess(formatVerificationLine(acceptance.verdict, acceptance.level));
86
80
  }
87
- if (acceptance.review?.status === "failed") {
88
- printError("Independent review failed");
89
- try {
90
- const plan = await loadTaskPlan(tasksPath);
91
- plan.pipeline.reviewCompleted = false;
92
- plan.lastReviewFindings = acceptance.review.findings.map((finding) => finding.claim).join("\n");
93
- await saveTaskPlan(tasksPath, plan);
94
- } catch {
95
- }
96
- return 1;
97
- }
98
81
  const template = await loadPrompt("review");
99
82
  const prompt = applyPlaceholders(template, {
100
83
  // The repository's own conventions. Empty when it declares none, which is
101
84
  // what keeps the rendered prompt identical to the pre-policy one.
102
- ...await resolvePolicyPlaceholders(),
85
+ ...await resolvePolicyPlaceholders({ phase: "review" }),
103
86
  __ISSUE_NUMBER__: issueNumber,
104
87
  __TASKS_PATH__: tasksPath,
105
- ...issuePlaceholders(resolution.resolved)
88
+ __PROGRESS_FILE__: paths.progressFile,
89
+ __VERIFY_PATH__: paths.verifyFile,
90
+ ...issuePlaceholders(resolution.resolved, paths.issueFile)
106
91
  });
107
92
  const startedAtMs = Date.now();
108
93
  let reviewContext;
@@ -134,10 +119,28 @@ async function runReview(issue, resolvedIssue) {
134
119
  printError(`Review failed: ${result.error}`);
135
120
  return 1;
136
121
  }
137
- const review = parseReviewResult(result.result);
122
+ const review = parseIssueReviewResult(result.result);
123
+ if (!review.ok) {
124
+ printError(`Invalid review result: ${review.error}`);
125
+ try {
126
+ const plan = await loadTaskPlan(tasksPath);
127
+ plan.pipeline.reviewCompleted = false;
128
+ plan.issueStatus = "in_progress";
129
+ plan.completedAt = null;
130
+ plan.lastError = {
131
+ category: "review_protocol",
132
+ message: review.error,
133
+ at: (/* @__PURE__ */ new Date()).toISOString()
134
+ };
135
+ await saveTaskPlan(tasksPath, plan);
136
+ } catch {
137
+ }
138
+ return 1;
139
+ }
138
140
  if (review.status === "PASS") {
139
141
  try {
140
142
  const plan = await loadTaskPlan(tasksPath);
143
+ if (plan.lastError?.category === "review_protocol") plan.lastError = null;
141
144
  plan.pipeline.reviewCompleted = true;
142
145
  plan.lastReviewFindings = null;
143
146
  await saveTaskPlan(tasksPath, plan);
@@ -153,6 +156,9 @@ async function runReview(issue, resolvedIssue) {
153
156
  try {
154
157
  const plan = await loadTaskPlan(tasksPath);
155
158
  plan.pipeline.reviewCompleted = false;
159
+ if (plan.lastError?.category === "review_protocol") plan.lastError = null;
160
+ plan.issueStatus = "in_progress";
161
+ plan.completedAt = null;
156
162
  plan.lastReviewFindings = review.findings ?? "Unknown findings";
157
163
  await saveTaskPlan(tasksPath, plan);
158
164
  } catch {
@@ -163,4 +169,4 @@ async function runReview(issue, resolvedIssue) {
163
169
  export {
164
170
  runReview
165
171
  };
166
- //# sourceMappingURL=chunk-EG2MGDP5.js.map
172
+ //# sourceMappingURL=chunk-NYDAHE3Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/verify/review-result.ts","../src/commands/review.ts"],"sourcesContent":["/** Portable issue-review protocol. No host, filesystem or orchestration dependencies. */\nexport type IssueReviewParse =\n | { ok: true; status: 'PASS' | 'FAIL'; findings?: string }\n | { ok: false; error: string };\n\nexport function parseIssueReviewResult(output: string): IssueReviewParse {\n const blocks = [...output.matchAll(/<review-result>([\\s\\S]*?)<\\/review-result>/g)];\n if (\n blocks.length !== 1 ||\n (output.match(/<\\/?review-result>/g)?.length ?? 0) !== 2 ||\n !output.trimEnd().endsWith('</review-result>')\n ) {\n return { ok: false, error: 'Expected exactly one final <review-result> block.' };\n }\n const body = blocks[0][1].trim();\n if (body === 'STATUS: PASS') return { ok: true, status: 'PASS' };\n const failure = body.match(/^STATUS: FAIL\\s*\\r?\\nFINDINGS:\\s*\\r?\\n([\\s\\S]+)$/);\n if (failure && !/^STATUS:/m.test(failure[1])) {\n const lines = failure[1].trim().split(/\\r?\\n/);\n if (lines.every((line) => /^-\\s+\\S/.test(line))) {\n return { ok: true, status: 'FAIL', findings: lines.join('\\n') };\n }\n }\n return { ok: false, error: 'Invalid review status or findings; no approval inferred.' };\n}\n","import { 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, printSuccess, printWarning } from '../ui/logger.js';\nimport { applyAcceptanceToPlan, runAcceptanceGate } from '../verify/gate.js';\nimport { formatVerificationLine } from '../verify/present.js';\nimport { parseIssueReviewResult } from '../verify/review-result.js';\n\nexport async function runReview(issue: string, resolvedIssue?: ResolvedIssue): Promise<number> {\n const issueNumber = issue.replace(/^#/, '');\n const paths = await resolveIssuePaths(issueNumber);\n const tasksPath = paths.tasksFile;\n\n const resolution = await resolveCommandIssue(issueNumber, resolvedIssue);\n if (!resolution.ok) {\n return resolution.code;\n }\n\n const acceptance = await runAcceptanceGate({\n issueDir: paths.issueDir,\n addDirs: [paths.issueDir],\n });\n if (acceptance.verdict === 'failed') {\n try {\n const plan = await loadTaskPlan(tasksPath);\n const applied = applyAcceptanceToPlan(plan, acceptance);\n await saveTaskPlan(tasksPath, applied.plan);\n } catch {\n printError(formatVerificationLine(acceptance.verdict, acceptance.level));\n }\n return 1;\n }\n if (acceptance.verdict === 'unverified') {\n printWarning(formatVerificationLine(acceptance.verdict, acceptance.level));\n } else {\n printSuccess(formatVerificationLine(acceptance.verdict, acceptance.level));\n }\n const template = await loadPrompt('review');\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: 'review' })),\n __ISSUE_NUMBER__: issueNumber,\n __TASKS_PATH__: tasksPath,\n __PROGRESS_FILE__: paths.progressFile,\n __VERIFY_PATH__: paths.verifyFile,\n ...issuePlaceholders(resolution.resolved, paths.issueFile),\n });\n\n const startedAtMs = Date.now();\n let reviewContext: { storyIds: string[]; correctionCycle: number } | undefined;\n try {\n const plan = await loadTaskPlan(tasksPath);\n reviewContext = {\n storyIds: plan.userStories.map((story) => story.id),\n correctionCycle: plan.correctionCycle,\n };\n } catch {\n reviewContext = undefined;\n }\n const result = await runHeadless({\n prompt,\n maxTurns: 25,\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 parseReviewResult() already consumed.\n outputFormat: 'json',\n allowedTools: ['Bash', 'Read', 'Glob', 'Grep'],\n addDirs: [paths.issueDir],\n statusMessage: `Reviewing issue #${issueNumber} resolution...`,\n phase: 'review',\n permission: 'read-only',\n ...(reviewContext ?? {}),\n });\n // Before the success check: the tokens were spent either way. A correction\n // cycle calls runReview() again and the reducer sums both invocations.\n publishPhaseMetrics('review', result.cost, startedAtMs, result.agent?.provider);\n\n if (!result.success) {\n printError(`Review failed: ${result.error}`);\n return 1;\n }\n\n const review = parseIssueReviewResult(result.result);\n if (!review.ok) {\n printError(`Invalid review result: ${review.error}`);\n try {\n const plan = await loadTaskPlan(tasksPath);\n plan.pipeline.reviewCompleted = false;\n plan.issueStatus = 'in_progress';\n plan.completedAt = null;\n plan.lastError = {\n category: 'review_protocol',\n message: review.error,\n at: new Date().toISOString(),\n };\n await saveTaskPlan(tasksPath, plan);\n } catch {\n /* Standalone review may have no task plan. */\n }\n return 1;\n }\n\n if (review.status === 'PASS') {\n // Update pipeline state\n try {\n const plan = await loadTaskPlan(tasksPath);\n if (plan.lastError?.category === 'review_protocol') plan.lastError = null;\n plan.pipeline.reviewCompleted = true;\n plan.lastReviewFindings = null;\n await saveTaskPlan(tasksPath, plan);\n } catch {\n // tasks.json may not exist\n }\n\n printSuccess('Review PASSED — implementation meets acceptance criteria');\n return 0;\n }\n\n printError('Review FAILED — issues found:');\n if (review.findings) {\n console.log(review.findings);\n }\n\n // Persist the findings so a correction cycle can act on them: without this,\n // a re-run of execute sees every userStories[].passes already true and\n // exits immediately without attempting any fix (see engine.ts's\n // \"already complete\" guards).\n try {\n const plan = await loadTaskPlan(tasksPath);\n plan.pipeline.reviewCompleted = false;\n if (plan.lastError?.category === 'review_protocol') plan.lastError = null;\n plan.issueStatus = 'in_progress';\n plan.completedAt = null;\n plan.lastReviewFindings = review.findings ?? 'Unknown findings';\n await saveTaskPlan(tasksPath, plan);\n } catch {\n // tasks.json may not exist\n }\n\n return 1;\n}\n"],"mappings":"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","names":[]}
@@ -1,34 +1,34 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- GLOBAL_CONFIG_FILENAME,
4
- PROJECT_CONFIG_FILENAME,
5
3
  describeRunAgents,
6
4
  loadAgentConfig,
7
5
  probeReadinessInventory
8
- } from "./chunk-QF7VEL3M.js";
6
+ } from "./chunk-UHDXXLYH.js";
9
7
  import {
8
+ GLOBAL_CONFIG_FILENAME,
9
+ PROJECT_CONFIG_FILENAME,
10
10
  printError,
11
11
  printSuccess
12
- } from "./chunk-XZUEFTUP.js";
13
- import {
14
- getGlobalRoot
15
- } from "./chunk-HAKDLR6N.js";
16
- import {
17
- getProjectRoot
18
- } from "./chunk-YVPZUN6X.js";
12
+ } from "./chunk-J6VJ5M2U.js";
19
13
  import {
20
14
  AGENT_PHASES,
21
15
  AGENT_SCHEMA_VERSION,
22
16
  isAgentPhase,
23
17
  isAgentProviderId
24
- } from "./chunk-ICM463EO.js";
18
+ } from "./chunk-IMB6FA2F.js";
19
+ import {
20
+ getGlobalRoot
21
+ } from "./chunk-MAJ6QDRL.js";
22
+ import {
23
+ getProjectRoot
24
+ } from "./chunk-TJVX42KY.js";
25
25
  import {
26
26
  writeFileAtomic
27
- } from "./chunk-3R27MJ5R.js";
27
+ } from "./chunk-PFWHHYEO.js";
28
28
 
29
29
  // src/commands/agent.ts
30
- import { mkdir, readFile } from "fs/promises";
31
- import { dirname, join } from "path";
30
+ import { mkdir, readFile } from "node:fs/promises";
31
+ import { dirname, join } from "node:path";
32
32
  var AGENT_COMMAND_SCHEMA_VERSION = AGENT_SCHEMA_VERSION;
33
33
  function originLabel(origin) {
34
34
  switch (origin) {
@@ -200,7 +200,7 @@ async function writeAgentPreference(input) {
200
200
  await writeFileAtomic(path, `${JSON.stringify(existing, null, 2)}
201
201
  `);
202
202
  if (input.provider === "cursor") {
203
- const { ensureCursorStorageGrant } = await import("./permissions-G4XCAESF.js");
203
+ const { ensureCursorStorageGrant } = await import("./permissions-NNNSRC4P.js");
204
204
  await ensureCursorStorageGrant({
205
205
  mode: input.target === "project" ? "project" : "global",
206
206
  ...input.projectRoot === void 0 ? {} : { projectRoot: input.projectRoot }
@@ -219,4 +219,4 @@ export {
219
219
  writeAgentPreference,
220
220
  persistFirstAgentChoice
221
221
  };
222
- //# sourceMappingURL=chunk-45WZ6GMI.js.map
222
+ //# sourceMappingURL=chunk-P7ZYOC23.js.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/utils/fs.ts
4
- import * as fsp from "fs/promises";
5
- import { dirname } from "path";
4
+ import * as fsp from "node:fs/promises";
5
+ import { dirname } from "node:path";
6
6
  async function writeFileAtomic(path, content, fs = fsp) {
7
7
  await fs.mkdir(dirname(path), { recursive: true });
8
8
  const tmpFile = `${path}.tmp`;
@@ -22,4 +22,4 @@ async function writeFileAtomic(path, content, fs = fsp) {
22
22
  export {
23
23
  writeFileAtomic
24
24
  };
25
- //# sourceMappingURL=chunk-3R27MJ5R.js.map
25
+ //# sourceMappingURL=chunk-PFWHHYEO.js.map
@@ -1,60 +1,62 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  writeAgentPreference
4
- } from "./chunk-45WZ6GMI.js";
5
- import {
6
- writeRoutingPreference
7
- } from "./chunk-HOAHMERN.js";
4
+ } from "./chunk-P7ZYOC23.js";
8
5
  import {
9
6
  resolvePackageDir
10
- } from "./chunk-7F7LGMVO.js";
7
+ } from "./chunk-XKR3VD2Z.js";
8
+ import {
9
+ writeRoutingPreference
10
+ } from "./chunk-UDRAD7MF.js";
11
11
  import {
12
12
  MODEL_CATALOG
13
- } from "./chunk-ZVZMWNCG.js";
13
+ } from "./chunk-F2NFJ27Z.js";
14
14
  import {
15
15
  getPackageVersion
16
- } from "./chunk-C5TL7T4V.js";
16
+ } from "./chunk-2YM2VH6R.js";
17
17
  import {
18
18
  loadRoutingConfig,
19
19
  probeAgent
20
- } from "./chunk-QF7VEL3M.js";
20
+ } from "./chunk-UHDXXLYH.js";
21
21
  import {
22
22
  printInfo,
23
23
  printWarning
24
- } from "./chunk-XZUEFTUP.js";
24
+ } from "./chunk-J6VJ5M2U.js";
25
25
  import {
26
26
  readDiagnostics
27
- } from "./chunk-QPGEFLMY.js";
28
- import {
29
- getGlobalRoot
30
- } from "./chunk-HAKDLR6N.js";
27
+ } from "./chunk-7CMVL4X6.js";
31
28
  import {
32
29
  NullPublisher
33
- } from "./chunk-DUS5ZNKL.js";
30
+ } from "./chunk-DIMDAYZS.js";
34
31
  import {
35
32
  isoNow
36
- } from "./chunk-SOM4QA6C.js";
33
+ } from "./chunk-GD7JZMSJ.js";
37
34
  import {
38
35
  isAgentPhase,
39
36
  isAgentProviderId,
40
37
  isProcessAlive,
41
- routingConfigInputSchema,
42
38
  webLockSchema
43
- } from "./chunk-ICM463EO.js";
39
+ } from "./chunk-IMB6FA2F.js";
40
+ import {
41
+ routingConfigInputSchema
42
+ } from "./chunk-XNK5UN2D.js";
43
+ import {
44
+ getGlobalRoot
45
+ } from "./chunk-MAJ6QDRL.js";
44
46
 
45
47
  // src/web/lock.ts
46
- import { spawn as nodeSpawn } from "child_process";
47
- import { randomUUID as randomUUID2 } from "crypto";
48
- import { mkdir, readFile as readFile2, rm, writeFile } from "fs/promises";
49
- import { join as join2 } from "path";
48
+ import { spawn as nodeSpawn } from "node:child_process";
49
+ import { randomUUID as randomUUID2 } from "node:crypto";
50
+ import { mkdir, readFile as readFile2, rm, writeFile } from "node:fs/promises";
51
+ import { join as join2 } from "node:path";
50
52
  import chalk2 from "chalk";
51
53
  import { execa } from "execa";
52
54
 
53
55
  // src/web/server.ts
54
- import { createHash, randomUUID } from "crypto";
55
- import { readFile } from "fs/promises";
56
- import { createServer } from "http";
57
- import { join } from "path";
56
+ import { createHash, randomUUID } from "node:crypto";
57
+ import { readFile } from "node:fs/promises";
58
+ import { createServer } from "node:http";
59
+ import { join } from "node:path";
58
60
  import chalk from "chalk";
59
61
  var SESSION_LIST_DESCRIPTION_MAX = 280;
60
62
  function truncateSessionDescription(text, max = SESSION_LIST_DESCRIPTION_MAX) {
@@ -939,4 +941,4 @@ export {
939
941
  stopWebMonitor,
940
942
  ensureWebMonitor
941
943
  };
942
- //# sourceMappingURL=chunk-NEWNXZ65.js.map
944
+ //# sourceMappingURL=chunk-PHPAK2L6.js.map