@testmuai/kane-cli 0.4.10 → 0.6.0

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 (198) hide show
  1. package/dist/ChatSurface-I6PFL3OE.js +9 -0
  2. package/dist/{ChromeProfilePicker-EFEVOCWS.js → ChromeProfilePicker-YG7TKHM5.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-PPGJMKHQ.js → CliFeedbackPrompt-5RUIP4KA.js} +1 -1
  4. package/dist/CliUploadProgress-YQYPZNEV.js +2 -0
  5. package/dist/{ConfigView-Y7E4Q647.js → ConfigView-HZ7MFCAJ.js} +1 -1
  6. package/dist/EvidenceViewOffer-N4UED7VY.js +2 -0
  7. package/dist/FolderPicker-NAFYP7ES.js +2 -0
  8. package/dist/HelpView-BLWTCQ6T.js +2 -0
  9. package/dist/{InfoBox-BQ2QOIUP.js → InfoBox-7ZZGMYHY.js} +1 -1
  10. package/dist/{LinksBox-DX6BJAX5.js → LinksBox-63Q5YS5X.js} +1 -1
  11. package/dist/{ProfilesView-X35WWM4L.js → ProfilesView-AVYB43ES.js} +1 -1
  12. package/dist/{ProjectPicker-Y4A4UVHA.js → ProjectPicker-EINNALUG.js} +1 -1
  13. package/dist/{SaveSessionPrompt-IS6HZSF4.js → SaveSessionPrompt-C3LCI2KZ.js} +1 -1
  14. package/dist/ScrollbackTap-Q3IOKNMS.js +2 -0
  15. package/dist/SingleShotApp-PS42WWT7.js +2 -0
  16. package/dist/{SummaryBox-47MHU37V.js → SummaryBox-NRPQ2AMW.js} +1 -1
  17. package/dist/TestMdRunView-5FVCEQZI.js +2 -0
  18. package/dist/{WhoamiView-KVIQCGRC.js → WhoamiView-YLMIEJQN.js} +1 -1
  19. package/dist/archive-committer-3NI773TP.js +2 -0
  20. package/dist/bind-QYQ5IT4S.js +6 -0
  21. package/dist/bridge-QENVIWWC.js +2 -0
  22. package/dist/{changelog-S4ZLEQLC.js → changelog-4RSI7UIO.js} +1 -1
  23. package/dist/chat-committer-RTJCKQMM.js +2 -0
  24. package/dist/chat-controller-OTBYHB4Y.js +3 -0
  25. package/dist/chunk-22A2ECA2.js +2 -0
  26. package/dist/{chunk-OHT5RY5E.js → chunk-25YSMNUP.js} +1 -1
  27. package/dist/{chunk-LPUQ4HWQ.js → chunk-2WVKOZ6W.js} +1 -1
  28. package/dist/chunk-2YQ6TW77.js +82 -0
  29. package/dist/{chunk-FKAXPYV7.js → chunk-3SK5GXQM.js} +1 -1
  30. package/dist/chunk-427OQS2N.js +2 -0
  31. package/dist/chunk-5446YVGQ.js +4 -0
  32. package/dist/chunk-5ILXUQIX.js +2 -0
  33. package/dist/chunk-5Q46BEG7.js +2 -0
  34. package/dist/chunk-5U3GOEGG.js +7 -0
  35. package/dist/chunk-5Y2G4NC7.js +2 -0
  36. package/dist/chunk-6BQD2BXI.js +3 -0
  37. package/dist/chunk-6PS65QFF.js +2 -0
  38. package/dist/chunk-ABSEKYIB.js +13 -0
  39. package/dist/chunk-AD46OCZ4.js +4 -0
  40. package/dist/chunk-AE6SS34N.js +4 -0
  41. package/dist/chunk-B2OAEEKI.js +14 -0
  42. package/dist/chunk-B2PZAB7J.js +4 -0
  43. package/dist/chunk-BC7UVJJB.js +2 -0
  44. package/dist/chunk-BV3EARZO.js +17 -0
  45. package/dist/{chunk-QSXYNJOW.js → chunk-C5NNT7Y3.js} +1 -1
  46. package/dist/{chunk-GSKA5DKJ.js → chunk-CBIW5DTU.js} +1 -1
  47. package/dist/chunk-CE664P73.js +2 -0
  48. package/dist/{chunk-IGZPQQFP.js → chunk-D5SHVZGD.js} +1 -1
  49. package/dist/chunk-D5T4ARTB.js +2 -0
  50. package/dist/chunk-DFS4RMVP.js +2 -0
  51. package/dist/chunk-DM2GL24Z.js +3 -0
  52. package/dist/chunk-FAXRERS6.js +6 -0
  53. package/dist/chunk-FPGOV4AQ.js +17 -0
  54. package/dist/chunk-FXPPQL4D.js +6 -0
  55. package/dist/chunk-FYOCF7DY.js +2 -0
  56. package/dist/chunk-GIGD4M7V.js +5 -0
  57. package/dist/chunk-GIRXJOJI.js +2 -0
  58. package/dist/{chunk-AKLIPQVR.js → chunk-GNGGFK7C.js} +1 -1
  59. package/dist/{chunk-RQZCGHG7.js → chunk-H7ZQ4AWL.js} +1 -1
  60. package/dist/{chunk-HUAOH2JK.js → chunk-HYW5VDEC.js} +1 -1
  61. package/dist/chunk-I2S6KNZW.js +2 -0
  62. package/dist/chunk-IACKIGPX.js +2 -0
  63. package/dist/chunk-IF2R3AR4.js +6 -0
  64. package/dist/{chunk-KKIFXAJY.js → chunk-INP7FG6V.js} +1 -1
  65. package/dist/{chunk-G3PWEKD7.js → chunk-IPCC3P6T.js} +2 -2
  66. package/dist/chunk-JFAFKHDX.js +4 -0
  67. package/dist/chunk-KHDUQ33H.js +2 -0
  68. package/dist/chunk-KHU7C6EE.js +2 -0
  69. package/dist/chunk-LBBPMEO2.js +2 -0
  70. package/dist/chunk-LKXVYWKG.js +356 -0
  71. package/dist/chunk-LMJTY32X.js +6 -0
  72. package/dist/chunk-M5JQXOCE.js +12 -0
  73. package/dist/chunk-ME3GYVBV.js +2 -0
  74. package/dist/{chunk-QC73LMAN.js → chunk-MESFNOY3.js} +1 -1
  75. package/dist/chunk-MKD3KZPM.js +2 -0
  76. package/dist/{chunk-NUGGT2XH.js → chunk-MQ7DJ2XC.js} +1 -1
  77. package/dist/{chunk-IT66S24L.js → chunk-N2BUF6YU.js} +1 -1
  78. package/dist/chunk-NFOBDHZK.js +147 -0
  79. package/dist/chunk-NNZV5RCE.js +2 -0
  80. package/dist/{chunk-GF44B552.js → chunk-NOOHQBUD.js} +1 -1
  81. package/dist/chunk-NTJDMMLC.js +61 -0
  82. package/dist/chunk-NWZTYAJB.js +9 -0
  83. package/dist/{chunk-RB2YKN77.js → chunk-OXARXMMD.js} +1 -1
  84. package/dist/chunk-PGEMGGBS.js +26 -0
  85. package/dist/{chunk-JKLKZCJS.js → chunk-QI6WZ56Y.js} +1 -1
  86. package/dist/{chunk-6ATKQYAL.js → chunk-QK6KZMYG.js} +1 -1
  87. package/dist/chunk-QPZRHAYK.js +4 -0
  88. package/dist/chunk-RFHMDQXZ.js +3 -0
  89. package/dist/chunk-RGEAEAZB.js +20 -0
  90. package/dist/chunk-RKWJG3WW.js +19 -0
  91. package/dist/chunk-RTWWPEQ7.js +8 -0
  92. package/dist/chunk-TZVURR5H.js +5 -0
  93. package/dist/chunk-VJUIW2ES.js +4 -0
  94. package/dist/chunk-VK7RF53I.js +2 -0
  95. package/dist/{chunk-VLWWDXBN.js → chunk-VXS23M67.js} +1 -1
  96. package/dist/{chunk-KJLOYIWT.js → chunk-WFAMF4SG.js} +1 -1
  97. package/dist/chunk-WFSQZG26.js +11 -0
  98. package/dist/chunk-WG3BBXJF.js +7 -0
  99. package/dist/chunk-WUMNIGPR.js +2 -0
  100. package/dist/chunk-WUNN5OCH.js +4 -0
  101. package/dist/chunk-XQDDUVD3.js +4 -0
  102. package/dist/chunk-Y2S3PW7N.js +102 -0
  103. package/dist/chunk-YANCBRER.js +3 -0
  104. package/dist/{chunk-YAOWO2GE.js → chunk-YWWKKKXY.js} +1 -1
  105. package/dist/chunk-Z56AWGVY.js +2 -0
  106. package/dist/chunk-ZKYYZ5NO.js +6 -0
  107. package/dist/{chunk-EQC7WE2O.js → chunk-ZO7ROBPR.js} +1 -1
  108. package/dist/chunk-ZXDA4K6G.js +2 -0
  109. package/dist/chunk-ZZOSDBYN.js +23 -0
  110. package/dist/cover-cmd-Y5L4O4Q3.js +2 -0
  111. package/dist/credentials-WUEKK7FI.js +2 -0
  112. package/dist/descriptor-SL5A7RQE.js +2 -0
  113. package/dist/distill-cmd-EYCCCFL3.js +2 -0
  114. package/dist/evidence-4BSNTVND.js +2 -0
  115. package/dist/evolve-cmd-VUWLH3CO.js +2 -0
  116. package/dist/exit-manager-VCSIUYBR.js +2 -0
  117. package/dist/explain-JIXUWEFJ.js +2 -0
  118. package/dist/explain-cmd-55WRDIMW.js +9 -0
  119. package/dist/explain-cmd-RIDEMDMY.js +3 -0
  120. package/dist/extract-bind-T7SUAID6.js +5 -0
  121. package/dist/extract-cmd-LZW7CRT3.js +6 -0
  122. package/dist/gaps-cmd-P2DRK6FW.js +2 -0
  123. package/dist/gate-FACZRGOC.js +2 -0
  124. package/dist/{generate-headless-ODYT3HT7.js → generate-headless-C55T3GGR.js} +2 -2
  125. package/dist/headless-io-GXHKDPHB.js +2 -0
  126. package/dist/index.js +76 -39
  127. package/dist/ingest-4CGBXC2L.js +2 -0
  128. package/dist/ingest-cmd-FJ3SLTT4.js +3 -0
  129. package/dist/interactive-bind-P6AGLUMM.js +7 -0
  130. package/dist/interrupt-guard-UREUWNRL.js +2 -0
  131. package/dist/lifecycle-cmd-56OZT4LY.js +2 -0
  132. package/dist/list-cmd-JB2ABACD.js +3 -0
  133. package/dist/list-commands-M34USUNO.js +2 -0
  134. package/dist/logical-ids-QRRUXV5E.js +2 -0
  135. package/dist/login-flow-GMLHK6JT.js +2 -0
  136. package/dist/maintenance-cmd-E3HEEVQW.js +2 -0
  137. package/dist/open-MQLQKFAW.js +2 -0
  138. package/dist/persist-recorded-session-L2KAY37H.js +3 -0
  139. package/dist/pipeline-FJXQIFW7.js +2 -0
  140. package/dist/readmodel-MPTENJ2R.js +2 -0
  141. package/dist/reconcile-cmd-KTCH4KZQ.js +8 -0
  142. package/dist/{recording-banner-3XTXU2VL.js → recording-banner-2KIVZAXY.js} +1 -1
  143. package/dist/require-project-folder-NOGEHZTS.js +2 -0
  144. package/dist/revert-3TKLOYQA.js +2 -0
  145. package/dist/review-cmd-SL52N4TM.js +4 -0
  146. package/dist/run-P4CHG2VH.js +2 -0
  147. package/dist/run-test-md-ICLG4OPX.js +17 -0
  148. package/dist/{scrollback-6GINSTL2.js → scrollback-JLPJR25X.js} +1 -1
  149. package/dist/sessions-cmd-STHKGDX4.js +23 -0
  150. package/dist/signals-cmd-LXHZQLXZ.js +2 -0
  151. package/dist/{skill-installer-GYYMVNE4.js → skill-installer-KGPXQRCE.js} +1 -1
  152. package/dist/spawner-DDD3ICOX.js +2 -0
  153. package/dist/tcg-generate-KBXZIIHB.js +2 -0
  154. package/dist/testmd-actions-45BY3YFO.js +2 -0
  155. package/dist/{tms-client-NNYXLXZK.js → tms-client-VD3B3SMU.js} +1 -1
  156. package/dist/token-refresh-OCFALJ7U.js +2 -0
  157. package/dist/turn-preflight-I5SM4UIZ.js +2 -0
  158. package/dist/ui-JEJGTURD.js +4 -0
  159. package/dist/{validate-basic-4YMRWYLS.js → validate-basic-QCD4VN37.js} +1 -1
  160. package/dist/{version-check-GU2LS6NM.js → version-check-55YZMQUI.js} +1 -1
  161. package/dist/view-cmd-QE2FS3GB.js +436 -0
  162. package/package.json +8 -6
  163. package/dist/CliUploadProgress-3GGOTLPQ.js +0 -2
  164. package/dist/FolderPicker-LI5JKG2S.js +0 -2
  165. package/dist/HelpView-KHQYGSD2.js +0 -2
  166. package/dist/SingleShotApp-RO25ZX2E.js +0 -2
  167. package/dist/TestMdRunView-OXVWHOV3.js +0 -2
  168. package/dist/chunk-53O3GMZR.js +0 -8
  169. package/dist/chunk-7GOX44H7.js +0 -103
  170. package/dist/chunk-AH4AXJML.js +0 -2
  171. package/dist/chunk-AT45XB6X.js +0 -60
  172. package/dist/chunk-BH6EP2LD.js +0 -85
  173. package/dist/chunk-BQACGLXW.js +0 -5
  174. package/dist/chunk-C6S4IEBC.js +0 -2
  175. package/dist/chunk-DMG5QABA.js +0 -2
  176. package/dist/chunk-G2GQ67DP.js +0 -11
  177. package/dist/chunk-HPZREZKG.js +0 -2
  178. package/dist/chunk-IS62CNJW.js +0 -20
  179. package/dist/chunk-LOIRZFV3.js +0 -10
  180. package/dist/chunk-LRKWPAGK.js +0 -2
  181. package/dist/chunk-MDBXYXSC.js +0 -2
  182. package/dist/chunk-NAAPNSZD.js +0 -17
  183. package/dist/chunk-PUU7A26K.js +0 -11
  184. package/dist/chunk-SQOIKS77.js +0 -6
  185. package/dist/chunk-UAYCLUUZ.js +0 -27
  186. package/dist/chunk-UBN6J3ZA.js +0 -2
  187. package/dist/chunk-XCOU6AYD.js +0 -6
  188. package/dist/chunk-XCYCX4TU.js +0 -17
  189. package/dist/exit-manager-V2NW7A7U.js +0 -2
  190. package/dist/list-commands-PNYMVI6X.js +0 -2
  191. package/dist/login-flow-FIYH6K4A.js +0 -2
  192. package/dist/persist-recorded-session-OJPXI4HP.js +0 -3
  193. package/dist/pipeline-34CX3UBO.js +0 -2
  194. package/dist/require-project-folder-CFX6U6BZ.js +0 -2
  195. package/dist/run-test-md-YWKVMQDJ.js +0 -14
  196. package/dist/tcg-generate-KLY7QZY2.js +0 -2
  197. package/dist/testmd-actions-OUY5BOAV.js +0 -2
  198. package/dist/token-refresh-QCHKMPCM.js +0 -2
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as a,c as b}from"./chunk-YANCBRER.js";import"./chunk-KHDUQ33H.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";export{b as ingestFile,a as slugFromFilename};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{c as f}from"./chunk-ZKYYZ5NO.js";import{c as l}from"./chunk-YANCBRER.js";import{a as d}from"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import{a as u}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";async function g(i,a,t,o=process.cwd()){let s=d(o);for(let n of i){let e;try{e=await l({contextDir:s,filePath:n,asId:a.as,confirmSameSource:t.isTTY?r=>t.confirm(`identical bytes already ingested as ${r} \u2014 treat as the same source?`):void 0})}catch(r){return t.out(`error: ${n}: ${r instanceof Error?r.message:String(r)}`),1}if(t.out(`${e.status} ${e.source_id} source ${e.cid} blob ${e.blob}`),!t.isTTY&&e.status==="created"){let r=u(s);for(let[c,m]of r.heads.entries())if(!(c===e.source_id||m==null)&&r.getNode(m)?.content.blob===e.blob){t.out(`hint: identical bytes already ingested as ${c} \u2014 merged later via review`);break}}}return 0}async function $(i,a){let{createInterface:t}=await import("readline/promises");return g(i,a,{out:o=>process.stdout.write(o+`
3
+ `),isTTY:f(),confirm:async o=>{let s=t({input:process.stdin,output:process.stdout});try{let n=await s.question(`${o} [Y/n] `);return!/^n(o)?$/i.test(n.trim())}finally{s.close()}}})}export{$ as ingestCommand,g as runIngestCommand};
@@ -0,0 +1,7 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as y}from"./chunk-LKXVYWKG.js";import"./chunk-KHU7C6EE.js";import"./chunk-NNZV5RCE.js";import"./chunk-NWZTYAJB.js";import"./chunk-I2S6KNZW.js";import"./chunk-DM2GL24Z.js";import"./chunk-JFAFKHDX.js";import"./chunk-5ILXUQIX.js";import"./chunk-QPZRHAYK.js";import"./chunk-VJUIW2ES.js";import"./chunk-FXPPQL4D.js";import"./chunk-5446YVGQ.js";import"./chunk-Z56AWGVY.js";import"./chunk-427OQS2N.js";import"./chunk-6PS65QFF.js";import{c as k}from"./chunk-ZKYYZ5NO.js";import"./chunk-RGEAEAZB.js";import{a as v}from"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";async function j(t){let[{render:u},o,{QuestionBatchPrompt:p}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),i=o.default??o;return new Promise(e=>{let m=u(i.createElement(p,{questions:t,onSubmit:a=>{m.unmount(),e(a)}}))})}async function q(t){let[{resolveAgentAuthEnv:u},{runAgent:o},{preflightTurn:p}]=await Promise.all([import("./spawner-DDD3ICOX.js"),import("./bridge-QENVIWWC.js"),import("./turn-preflight-I5SM4UIZ.js")]),i=await u(),e=v(process.cwd()),{baseUrlAdvisory:m}=await import("./turn-preflight-I5SM4UIZ.js"),a=m();a&&process.stderr.write(a+`
3
+ `);let d=await p(i);if(!d.ok)return process.stderr.write((d.message??"error: turn-endpoint preflight failed")+`
4
+ `),2;let T=async()=>d;if(t.plan)return y(t,{contextDir:e,agent:o,preflightTurn:T,ask:j,out:r=>process.stdout.write(r+`
5
+ `),progress:r=>process.stderr.write(r+`
6
+ `),isTTY:k(),auth:i});if(!t.resume){let[{openGraph:r},{designGate:s}]=await Promise.all([import("./readmodel-MPTENJ2R.js"),import("./gate-FACZRGOC.js")]),w=s(r(e),t.useCase,!!t.force);if(!w.ok)return process.stderr.write(`design: ${w.message}
7
+ `),w.code}let[{render:C},b,{ScrollbackProvider:A},{ChatSurface:D},{ScrollbackTap:E},{makeChatController:R},{setInkExit:S},G]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-I6PFL3OE.js"),import("./ScrollbackTap-Q3IOKNMS.js"),import("./chat-controller-OTBYHB4Y.js"),import("./exit-manager-VCSIUYBR.js"),Promise.all([import("./chat-committer-RTJCKQMM.js"),import("./descriptor-SL5A7RQE.js"),import("./explain-JIXUWEFJ.js"),import("./readmodel-MPTENJ2R.js")])]),[{commitChatTurn:I},{topologyDescriptor:O},{explain:Q},{openGraph:x}]=G,f=b.default??b,n=R({commitChatTurn:I,descriptor:O("design"),contextDir:e,refreshGraph:()=>x(e),graph:x(e),explain:Q,by:{kind:"human",id:"owner"}}),g={current:null},P=0,h=null,c=!1,Y=()=>{if(P+=1,P>=2){try{l.unmount()}catch{}process.exit(130)}n.requestPause(),h=setTimeout(()=>{c||(c=!0,(async()=>{n.ledger({kind:"interrupted",detail:"the agent did not confirm the pause within 5s"}),await g.current?.flush();try{l.unmount()}catch{}process.exit(130)})())},5e3)},l=C(f.createElement(A,null,f.createElement(E,{into:g}),f.createElement(D,{controller:n,verb:"design",onCtrlC:Y})),{exitOnCtrlC:!1});S(()=>l.unmount()),n.ledger({kind:"banner",text:`kane-cli design \xB7 ${t.useCase??t.resume??""}`});try{let r=y(t,{contextDir:e,agent:o,preflightTurn:T,ask:s=>n.ask(s),out:s=>n.note(s),progress:()=>{},isTTY:k(),auth:i,chat:n});return r.finally(()=>{c=!0}),await r}finally{c=!0,h&&clearTimeout(h),await g.current?.flush();try{l.unmount()}catch{}}}export{q as bindDesignInteractive};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import"./chunk-UR6MHSHU.js";function S(d,p,c=5e3){let u=process.listeners("SIGINT");process.removeAllListeners("SIGINT");let s=!1,r=!1,o=!1,n=new Set,i=[],a=e=>{try{e.send({type:"pause"})}catch{}let t=setTimeout(()=>{try{e.kill()}catch{}},c);t.unref?.(),i.push(t)},l=()=>{if(!s){s=!0,p(n.size>0?"interrupt \u2014 asking the agent to pause and save the session (Ctrl+C again to kill)":"interrupt \u2014 finishing the current step (Ctrl+C again to exit now)");for(let e of n)a(e);return}r=!0,n.size===0&&process.exit(130);for(let e of n)try{e.kill()}catch{}};return process.on("SIGINT",l),{agent:((...e)=>{let t=d(...e);if(n.add(t),Promise.resolve(t.exited).catch(()=>{}).finally(()=>n.delete(t)),r)try{t.kill()}catch{}else s&&a(t);return t}),interrupted:()=>s,dispose:()=>{if(!o){o=!0;for(let e of i)clearTimeout(e);process.removeListener("SIGINT",l);for(let e of u)process.on("SIGINT",e)}}}}export{S as makeInterruptGuard};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as b,b as a,c as f,d as m}from"./chunk-AD46OCZ4.js";import{h as p,i as y}from"./chunk-5ILXUQIX.js";import"./chunk-QPZRHAYK.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import{a as c}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";var g={kind:"human",id:process.env.USER??"operator"},$=/^(UNKNOWN_|BAD_|INVALID_|MALFORMED_|NOT_|SLUG_TAKEN|ALREADY_|SUPERSEDED_)/;function h(e){return e.every(r=>$.test(r.code))?2:1}function l(e,r){for(let n of r)b(e,`${n.code}: ${n.detail}`);return h(r)}async function w(e,r,n,t=process.cwd()){let s=a(t,n);if(!s||!await f(n,`retire source ${e} (head \u2192 null + tombstone record)`,r.yes))return 2;let i=c(s),o=y({contextDir:s,graph:i,sourceId:e,reason:r.reason,by:g});return o.errors?l(n,o.errors):(n.out(`retired ${e} (record ${o.record.seq}) \u2014 its use-cases stay until no live source evidences them`),0)}async function x(e,r,n,t=process.cwd()){let s=a(t,n);if(!s)return 2;let i=c(s),o=p({contextDir:s,graph:i,assignments:[{ref:e,slug:r}],by:g});return o.errors?l(n,o.errors):(n.out(`named ${o.record.names[0].cid} as "${r}" (record ${o.record.seq})`),0)}async function O(e,r,n,t=process.cwd()){let s=a(t,n);if(!s)return 2;let i=Number(e);if(!await f(n,`revert record ${i} via a compensation record`,r.yes))return 2;let o=c(s),{commitRevert:v}=await import("./revert-3TKLOYQA.js"),d=v({contextDir:s,graph:o,seq:i,reason:r.reason,by:g});for(let C of d.warnings)n.out(`note: ${C}`);if(d.errors)return l(n,d.errors);let u=d.record;return n.out(`reverted record ${i} via compensation record ${u.seq}: ${u.supersessions.length} supersession(s), ${u.review.length} trust restoration(s), ${Object.keys(u.source_head_moves).length} head move(s) \u2014 history unchanged, effects inverted`),0}async function A(e,r){return w(e,r,m())}async function P(e,r){return x(e,r,m())}async function I(e={},r=process.cwd()){return D(e,m(),r)}async function D(e,r,n=process.cwd()){let t=a(n,r);if(!t||!await f(r,"assign logical ids to every live unnamed node (one commit record)",e.yes))return 2;let{backfillLogicalIds:s}=await import("./logical-ids-QRRUXV5E.js"),i=c(t),o=s(t,i);return o.errors?l(r,o.errors):(r.out(o.assigned===0?"backfill: every live node already has a logical id":`backfill: assigned ${o.assigned} logical id(s) (record ${o.record.seq})`),0)}async function R(e,r){return O(e,r,m())}export{I as nameBackfillCommand,P as nameCommand,A as retireCommand,R as revertCommand,D as runNameBackfillCommand,x as runNameCommand,w as runRetireCommand,O as runRevertCommand};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as m}from"./chunk-AD46OCZ4.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import{a as g}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import{d as o}from"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";var p=[o.SOURCE,o.USECASE,o.SCENARIO,o.AC,o.TEST,o.GAP];function h(n,e){if(n===o.SOURCE)return String(e.source_id??"");let i=e.question?.header,l=e.title??e.text??i??e.kind??"";return String(l)}function E(n,e){if(n.length<=e)return n;let i=n.slice(0,e-1),l=i.lastIndexOf(" ");return`${(l>e*.6?i.slice(0,l):i).trimEnd()}\u2026`}var b=58;async function O(n,e,i=process.cwd()){let l=m(i,e);if(!l)return 2;let a=g(l),s=[...a.nodeLabel.entries()].filter(([t])=>n.all||!a.superseded.has(t)).map(([t,r])=>{let u=a.getNode(t)?.content??{},f=a.trust.get(t)??(r===o.SOURCE?"-":"derived");return{id:r===o.SOURCE?String(u.source_id??""):a.nameOf.get(t)??t.slice(0,19),cid:t,label:r,title:h(r,u),trust:f,fresh:f==="archived"?"-":a.stale(t)}});if(n.type&&(s=s.filter(t=>t.label===n.type)),n.inferred&&(s=s.filter(t=>t.trust==="derived")),n.stale&&(s=s.filter(t=>t.fresh!=="fresh")),!n.all){let t=new Map;for(let r of s)t.set(`${r.label}:${r.id}`,r);s=[...t.values()]}let d=t=>{let r=p.indexOf(t);return r===-1?p.length:r};if(s.sort((t,r)=>d(t.label)-d(r.label)||t.title.localeCompare(r.title)),n.json){for(let t of s)e.out(JSON.stringify(t));return 0}if(s.length===0)return e.out("(no matching nodes)"),0;e.out("trust \xB7 fresh \xB7 title \xB7 id");let c=null;for(let t of s){if(t.label!==c){c=t.label;let u=s.filter(f=>f.label===t.label).length;e.out(""),e.out(`\u2500\u2500 ${t.label} \xB7 ${u} \u2500\u2500`)}let r=E(t.title||"(untitled)",b);e.out(` ${t.trust.padEnd(8)} ${t.fresh.padEnd(6)} ${r.padEnd(b)} ${t.id}`)}return 0}async function R(n){return O(n,{out:e=>process.stdout.write(e+`
3
+ `),confirm:async()=>!1,isTTY:!!process.stdout.isTTY})}export{E as capWord,R as listCommand,O as runListCommand,h as titleOf};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c,d,e,f,g,h,i}from"./chunk-IPCC3P6T.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-M5JQXOCE.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-INP7FG6V.js";import"./chunk-RZ4F3BHX.js";import"./chunk-OXARXMMD.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";export{d as emitNdjson,b as filterByName,g as formatAuthResolutionError,c as paginate,a as parsePagination,i as registerListCommands,e as renderTable,f as resolveTmsBasicAuth,h as validateCreateName};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as d,b as f,h as m}from"./chunk-5ILXUQIX.js";import"./chunk-QPZRHAYK.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";var y=Object.keys(d).filter(n=>n!=="source");function b(n,t,u={kind:"system",id:"logical-id-backfill"}){let l=new Set(t.names.keys()),r=[];for(let c of y)for(let{cid:s,content:e}of t.byLabel(c)){if(t.superseded.has(s)||t.nameOf.has(s))continue;let a=typeof e.title=="string"&&e.title||typeof e.intent=="string"&&e.intent||typeof e.statement=="string"&&e.statement||typeof e.text=="string"&&e.text||"",i=a?f(c,a,g=>l.has(g)):null;i&&(l.add(i),r.push({ref:s,slug:i}))}if(r.length===0)return{record:null,errors:null,assigned:0};let o=m({contextDir:n,graph:t,assignments:r,by:u});return o.errors?{record:null,errors:o.errors,assigned:0}:{record:o.record,errors:null,assigned:r.length}}export{b as backfillLogicalIds};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-Y2S3PW7N.js";import"./chunk-RFHMDQXZ.js";import"./chunk-D5SHVZGD.js";import"./chunk-INP7FG6V.js";import"./chunk-RZ4F3BHX.js";import"./chunk-OXARXMMD.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as i,c,d as s}from"./chunk-AD46OCZ4.js";import"./chunk-ZKYYZ5NO.js";import{a as t}from"./chunk-BC7UVJJB.js";import{c as m,d as u}from"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";async function d(e,r=process.cwd()){if(!i(r,e))return 2;let o=u(t(r));if(o.ok)return e.out(`ok: ${o.records} record(s) verified, derived projection in parity`),0;for(let n of o.issues)e.out(`issue: ${n}`);return 1}async function f(e,r,o=process.cwd()){if(!i(o,r)||!await c(r,"wipe .context/derived and rebuild it from the verified commit chain",e.yes))return 2;let n=m(t(o));return r.out(`rebuilt: ${n.applied.seq} record(s) replayed, ${Object.keys(n.nodeLabel).length} node(s) projected`),0}async function l(){return d(s())}async function y(e={}){return f(e,s())}export{l as fsckCommand,y as rebuildCommand,d as runFsckCommand,f as runRebuildCommand};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c}from"./chunk-RFHMDQXZ.js";import"./chunk-UR6MHSHU.js";export{b as apps,c as default,a as openApp};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{g as h}from"./chunk-LMJTY32X.js";import{a as m,b as I,k as S,s as _}from"./chunk-RKWJG3WW.js";import{a as f}from"./chunk-RTWWPEQ7.js";import"./chunk-NFOBDHZK.js";import"./chunk-L5LI2JF4.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";async function v(e,s={}){e.flushRecorder();let o=e.recorder?.lastWrittenPath??null;if(!o)return e.log("info","PERSIST_SKIPPED","No recorded path \u2014 recorder.flush no-op",{reason:e.sessionName?"recorder_flush_failed":"no_session_name",session_name:e.sessionName}),null;let p;try{p=_(o)}catch(t){throw e.log("error","PERSIST_RESOLVE_FAILED","resolveTestMd threw",{error:t.message,recorded_path:o}),t}let i=e.getRunsAsStepRecords(),u=e.getFlows(),a=[],c=0;for(let t=0;t<i.length;t++){let r=i[t],l=u.slice(c,c+r.totalRunDirs);c+=r.totalRunDirs;let g=l.find(n=>n.status==="failed"||n.status==="error"),T=g?"failed":l.length===0?"skipped":"passed";a.push({rootStepIndex:t+1,status:T,duration_s:l.reduce((n,E)=>n+(E.duration??0),0),reason:g?.reason})}let P=a.some(t=>t.status==="failed")?"failed":"passed",D=new f().load().code_export?.language==="javascript"?"javascript":"python",d=I(o);e.log("info","PERSIST_START","Building staging dir",{recorded_path:o,output_dir:d,session_dir:e.sessionDir,step_count:i.length,flow_count:u.length});try{await h({resolvedTest:p,sessionDir:e.sessionDir,stepRunRecords:i,outcomes:a,overallStatus:P,startedISO:e.startedAt,durationS:a.reduce((t,r)=>t+(r.duration_s??0),0),sessionId:e.sessionId,commitId:e.sessionId,tmsIds:{testId:e.testId??void 0,testcaseId:s.testcaseId,projectId:s.projectId,folderId:s.folderId,orgId:s.orgId??e.orgId??void 0,sessionName:e.sessionName??m(o)},codeExportDir:s.codeExportDir,codeExportLanguage:D,packTestDir:s.packTestDir}),e.log("info","PERSIST_STAGING_OK","Staging dir built",{output_dir:d}),S(d),e.log("info","PERSIST_OK","Persist complete",{output_dir:d})}catch(t){let r=t;e.log("error","PERSIST_FAILED","staging build / atomic replace failed",{error:r.message,stack:r.stack,output_dir:d}),process.stderr.write(`[persist] staging build / atomic replace failed: ${r.message}
3
+ `)}return{recordedTestPath:o,outputDir:d}}export{v as persistRecordedSession};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c}from"./chunk-GIGD4M7V.js";import"./chunk-2YQ6TW77.js";import"./chunk-WAOCHXJ5.js";import"./chunk-ABSEKYIB.js";import"./chunk-FYOCF7DY.js";import"./chunk-RGEAEAZB.js";import"./chunk-BC7UVJJB.js";import"./chunk-NFOBDHZK.js";import"./chunk-KHDUQ33H.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-INP7FG6V.js";import"./chunk-RZ4F3BHX.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";export{c as UploadPipeline,b as packPresignEntry,a as readPackForUpload};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";export{a as openGraph,b as staleForEvolve};
@@ -0,0 +1,8 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as re}from"./chunk-CE664P73.js";import{a as te,b as j,d as B}from"./chunk-TZVURR5H.js";import"./chunk-NNZV5RCE.js";import{a as R,b as ee,d as ne}from"./chunk-AD46OCZ4.js";import{a as Z}from"./chunk-JFAFKHDX.js";import{a as Q}from"./chunk-QPZRHAYK.js";import"./chunk-ZKYYZ5NO.js";import{a as X,b as M}from"./chunk-YANCBRER.js";import"./chunk-BC7UVJJB.js";import{d as z}from"./chunk-KHDUQ33H.js";import{a as E}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import{e as G}from"./chunk-B2PZAB7J.js";import{d as v,e as P,g as H}from"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";import{existsSync as Ae,lstatSync as Le,readdirSync as Te,statSync as Ie}from"fs";import{basename as J,join as Ne,relative as Fe,resolve as ye}from"path";var oe="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",Re="suite untouched; graph updated";function W(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function O(e,t){return e.nameOf.get(t)??t}function A(e){return String(e).slice(0,19)}function C(e,t,r){let n=e.edgesFrom(t).find(o=>o.type===r);return n?e.tipOf(n.dst):null}function se(e,t){let r=e.nodeLabel.get(t);if(r===v.USECASE)return t;if(r===v.SCENARIO)return C(e,t,P.BELONGS_TO);if(r===v.AC){let n=C(e,t,P.SCOPED_TO);return n?e.nodeLabel.get(n)===v.USECASE?n:C(e,n,P.BELONGS_TO):null}if(r===v.TEST){let n=C(e,t,P.AUTOMATES);return n?C(e,n,P.BELONGS_TO):null}return null}function ie(e,t){let r=[],n=new Map;for(let o of e.derivesInto(t))n.set(String(o.props.source_id),o);for(let[o,c]of n){let s=e.heads.get(o);if(s==null){r.push(`DERIVES pin ${o} @ ${A(c.props.source_cid)} \u2014 source retired`);continue}if(s!==c.props.source_cid){let d=e.convChains.get(o)?.chain;if(d&&d.includes(String(c.props.source_cid)))continue;r.push(`DERIVES pin ${o} @ ${A(c.props.source_cid)} \u2014 source head moved to ${A(s)}`)}}for(let o of e.edgesFrom(t))H(o.type)?.pin?.comparesTo==="dst_tip"&&e.superseded.has(o.dst)&&r.push(`${o.type} pin \u2192 ${O(e,o.dst)} \u2014 target superseded`);return r.join("; ")||"structural pin broken"}var ke=new Set([v.USECASE,v.SCENARIO,v.AC,v.TEST]);function F(e,t){return e.ref<t.ref?-1:e.ref>t.ref?1:0}function ae(e,t,r){let n=t.getNode(r)?.content.blob;if(typeof n!="string")return null;let o=z(e,n);return o===null?null:o.toString("utf8")}function Se(e,t,r,n,o){let c=r.props.quote;if(typeof c=="string"&&c.length>0)return n.includes(c);let s=String(r.props.source_cid);o.has(s)||o.set(s,ae(e,t,s));let d=o.get(s);if(d===null)return!1;let i=Q(d,String(r.props.anchor));return i===null?!1:i.split(`
3
+ `).some(g=>g.trim().length>0&&n.includes(g.trim()))}function Ee(e,t,r){let n=e.getNode(t)?.content??{},o=e.getNode(r)?.content??{},s=[...new Set([...Object.keys(n),...Object.keys(o)])].sort().filter(d=>JSON.stringify(n[d])!==JSON.stringify(o[d]));return s.length>0?`updated: ${s.join(", ")}`:"updated"}function be(e,t,r,n,o,c){let s=[];for(let[p,u]of r.superseded)u===null||p===u||t.superseded.has(p)||r.nodeLabel.get(p)===v.USECASE&&s.push({kind:"MODIFIED",ref:O(r,p),old_cid:p,new_cid:u,summary:Ee(r,p,u)});let d=c.map(p=>({kind:"ADDED",ref:O(r,p),cid:p})),i=[],g=ae(e,r,o),f=new Map;for(let{cid:p}of r.byLabel(v.USECASE)){if(!W(r,p))continue;let u=r.derivesInto(p),m=u.filter(a=>String(a.props.source_id)===n);m.length===0||m.some(a=>a.props.source_cid===o)||g!==null&&m.some(a=>String(a.props.anchor)!=="img#whole"&&Se(e,r,a,g,f))||u.some(a=>{let l=String(a.props.source_id);if(l===n)return!1;let $=r.heads.get(l);return $!=null})||i.push({kind:"DROPPED",ref:O(r,p),cid:p,why:`evidence decayed: no quote from ${n} relocates into @${A(o)}, no other live source, no fresh evidence this run`})}let h=(p,u)=>p.ref<u.ref?-1:p.ref>u.ref?1:0;return[...s.sort(h),...d.sort(h),...i.sort(h)]}async function ce(e,t,r){let n=E(e),o=n.heads.get(t)??null,c=new Set(n.staleList().filter(a=>a.state==="stale").map(a=>a.cid)),s=await r.reingest(t);if(s.status==="unchanged")return{source_id:t,changed:!1,head:{status:s.status,before:o,after:s.cid},note:`nothing to reconcile \u2014 ${t} is unchanged`,skipped_arms:oe,changeset:[],rows:[]};let d=await r.reextract(t),i=E(e),g=d.minted.map(a=>{let l=O(i,a);return{kind:"ADD",ref:l,reason:`new use-case extracted from ${t}`,provenance:`extraction commit \u2014 DERIVES ${t} @ ${A(s.cid)}`,action:`kane-cli design tests --use-case ${l}`}}),f=i.staleList().filter(a=>a.state==="stale"&&!c.has(a.cid)&&W(i,a.cid)).map(a=>a.cid),h=f.map(a=>{let l=O(i,a),$=ke.has(i.nodeLabel.get(a)??"");return{kind:"ENHANCE",ref:l,reason:"stale (structural)",provenance:ie(i,a),action:$?`kane-cli maintain evolve ${l}`:`kane-cli design explain ${l}`}}),p=new Set;for(let a of[...d.minted,...d.matched])p.add(i.tipOf(a));for(let a of f){let l=se(i,i.tipOf(a));l&&i.nodeLabel.get(l)===v.USECASE&&p.add(i.tipOf(l))}let u=[];for(let a of await re(i,"design")){if(a.kind!=="no-verifies")continue;let l=i.resolve(a.ref);if(!l)continue;let $=se(i,l.tip);!$||!p.has(i.tipOf($))||u.push({kind:"ADD",ref:a.ref,reason:a.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${O(i,$)}`,action:a.ready_command})}let m=[];for(let{cid:a}of i.byLabel(v.USECASE))W(i,a)&&i.stale(a)==="orphaned"&&m.push({kind:"REMOVE",ref:O(i,a),reason:"orphaned \u2014 no live source evidences this use-case",provenance:ie(i,a),action:"plan-only \u2014 REMOVE is not executed in this release"});let w=new Set,b=[...g.sort(F),...u.sort(F),...h.sort(F),...m.sort(F)].filter(a=>{let l=`${a.kind}\0${a.ref}`;return w.has(l)?!1:(w.add(l),!0)});return{source_id:t,changed:!0,head:{status:s.status,before:o,after:s.cid},note:Re,skipped_arms:oe,changeset:be(e,n,i,t,s.cid,d.minted),rows:b}}function de(e,t){return async r=>{let{ingestFile:n}=await import("./ingest-4CGBXC2L.js"),o=await n({contextDir:e,filePath:t,asId:r});return{status:o.status,cid:o.cid}}}function le(e){return async t=>{let[{runExtract:r},{resolveAgentAuthEnv:n},{runAgent:o},{preflightTurn:c}]=await Promise.all([import("./run-P4CHG2VH.js"),import("./spawner-DDD3ICOX.js"),import("./bridge-QENVIWWC.js"),import("./turn-preflight-I5SM4UIZ.js")]),s=await n(),d=new Set(E(e).byLabel(v.USECASE).map(m=>m.cid)),i=0,g=await r({mode:"override"},{contextDir:e,agent:o,preflightTurn:()=>c(s),ask:async()=>[],review:async m=>new Map(m.map(w=>[w.temp_ref,{resolution:w.matches_existing&&w.changed?"edited":"skipped"}])),confirmStale:async()=>!1,out:m=>process.stderr.write(m+`
4
+ `),progress:m=>process.stderr.write(m+`
5
+ `),emit:m=>{m.type==="commit"&&typeof m.assumed=="number"&&(i+=m.assumed)},isTTY:!1,auth:s});if(g!==0)throw new Error(`reconcile: re-extract of ${t} failed (exit ${g})`);let f=E(e),h=f.heads.get(t),p=[],u=[];if(typeof h=="string"){let m=new Set;for(let w of f.edgesFrom(h))w.type!==P.DERIVES||f.nodeLabel.get(w.dst)!==v.USECASE||m.has(w.dst)||(m.add(w.dst),(d.has(w.dst)?u:p).push(w.dst))}return{minted:p,matched:u,defaultsTaken:i}}}import{closeSync as Oe,existsSync as Pe,mkdirSync as pe,openSync as De,readFileSync as V,readdirSync as _e,renameSync as xe,rmSync as ue,writeFileSync as fe}from"fs";import{join as L}from"path";var D=class extends Error{constructor(r,n){super(`${r}: ${n}`);this.code=r}},K=e=>L(e,"reconcile","plans");function ge(e,t){let r=`${e}.tmp-${process.pid}`;fe(r,t,{mode:384}),xe(r,e)}function me(e,t){let r=K(e);pe(r,{recursive:!0});let n=L(r,`${t.created}-${t.source_id}.json`);return ge(n,JSON.stringify(t,null,2)+`
6
+ `),n}function Y(e,t){let r=t;if(r===void 0){let s=K(e),d=[];try{d=_e(s).filter(i=>i.endsWith(".json")).sort()}catch{}if(d.length===0)return{error:`no stored plans under ${s} \u2014 run reconcile --plan first`};r=L(s,d[d.length-1])}if(!Pe(r))return{error:`no such plan file: ${r}`};let n;try{n=V(r,"utf8")}catch(s){return{error:`cannot read plan ${r}: ${s instanceof Error?s.message:String(s)}`}}let o;try{o=JSON.parse(n)}catch(s){return{error:`corrupted plan ${r}: ${s instanceof Error?s.message:String(s)}`}}let c=o?.version;return c!==1?{error:`unsupported plan version ${String(c)} in ${r} (expected 1)`}:Array.isArray(o.rows)?{plan:o,path:r}:{error:`not a reconcile plan \u2014 ${r} has no rows[] (hand-edited?)`}}function q(e,t,r){let n;try{n=JSON.parse(V(e,"utf8"))}catch(c){throw new D("PLAN_UNREADABLE",`${e}: ${c instanceof Error?c.message:String(c)}`)}let o=n.rows?.[t];if(!o)throw new D("ROW_MISSING",`${e} has no row ${t}`);if(o.applied)throw new D("ROW_ALREADY_APPLIED",`row ${t} of ${e} was already applied (${o.applied.outcome} at ${o.applied.at})`);o.applied={at:new Date().toISOString(),outcome:r},ge(e,JSON.stringify(n,null,2)+`
7
+ `)}function he(e){let t=K(e);pe(t,{recursive:!0});let r=L(t,".walk-lock");for(let n=0;n<2;n++)try{let o=De(r,"wx");return fe(o,`${process.pid}
8
+ `),Oe(o),()=>{try{ue(r)}catch{}}}catch(o){if(o.code!=="EEXIST")throw o;let c=NaN;try{c=parseInt(V(r,"utf8").trim(),10)}catch{}if(Number.isFinite(c)&&Ce(c))throw new D("WALK_LOCKED",`another reconcile walk is running (pid ${c}) \u2014 remove ${r} if that process is gone`);try{ue(r)}catch{}}throw new D("WALK_LOCKED",`could not take the walk lock at ${L(t,".walk-lock")}`)}function Ce(e){try{return process.kill(e,0),!0}catch{return!1}}function Ue(e,t){let r=[],n=o=>{let c;try{c=Te(o).sort()}catch{return}for(let s of c){if(s.startsWith(".")||s==="node_modules")continue;let d=Ne(o,s),i;try{i=Le(d)}catch{continue}if(i.isDirectory()){n(d);continue}if(!(!i.isFile()||!X(d).ok))try{M(d)===t&&r.push(d)}catch{}}};return n(e),r}function Ge(e,t,r){let n=E(e);if(n.heads.has(r)){if(n.heads.get(r)==null)return{error:`source '${r}' is retired \u2014 pass the file path to --from to re-ingest it`};let c=Ue(t,r);if(c.length===1)return{sourceId:r,filePath:c[0]};if(c.length===0)return{error:`cannot find a file backing source '${r}' under ${t} \u2014 pass the file path to --from instead`};let s=c.map(d=>Fe(t,d)).join(", ");return{error:`source '${r}' is backed by ${c.length} candidate files (${s}) \u2014 pass the file path to --from instead`}}let o=ye(t,r);if(Ae(o)&&Ie(o).isFile())try{return{sourceId:M(o),filePath:o}}catch(c){return{error:c instanceof Error?c.message:String(c)}}return{error:`--from '${r}' is neither a known source-id nor a file path`}}function x(e){return e==null?"(none)":e.slice(0,19)}function Me(e,t,r){if(e.out(`reconcile ${t.source_id}: head ${t.head.status} \u2014 ${x(t.head.before)} \u2192 ${x(t.head.after)}`),e.out(`note: ${t.note}`),e.out(`skipped arms: ${t.skipped_arms}`),t.changed&&e.out(`extract ran in override mode; ${r?.defaultsTaken??0} default(s) auto-taken; matched-but-changed proposals auto-committed as edits`),t.changed){let n=t.changeset??[];e.out(`changeset: ${n.length} item(s)`);for(let o of n)o.kind==="MODIFIED"?e.out(` [MODIFIED] ${o.ref} \u2014 ${o.summary} (${x(o.old_cid)} \u2192 ${x(o.new_cid)})`):o.kind==="ADDED"?e.out(` [ADDED] ${o.ref}`):e.out(` [DROPPED] ${o.ref} \u2014 ${o.why}`)}e.out(`plan: ${t.rows.length} row(s)`);for(let n of t.rows)e.out(` [${n.kind}] ${n.ref} \u2014 ${n.reason}`),e.out(` provenance: ${n.provenance}`),e.out(` action: ${n.action}`)}async function we(e,t){let r=e.ask,n=t?"[r]etire / [s]kip / [d]efer":"[a]pprove / [e]dit / [s]kip / [d]efer";for(;;){let o=(await r(`${n}? `)).trim().toLowerCase();if(!t&&(o==="a"||o==="approve"))return{v:"approve"};if(o==="s"||o==="skip")return{v:"skip"};if(o==="d"||o==="defer")return{v:"defer"};if(t&&(o==="r"||o==="retire"))return{v:"retire"};if(!t&&(o==="e"||o==="edit")){let c=(await r("steering (one line): ")).trim();if(c.length>0)return{v:"edit",steering:c};e.out("empty steering \u2014 pick a verdict again");continue}e.out(`unrecognized '${o}' \u2014 ${n}`)}}async function T(e,t,r,n,o,c,s=[]){let d;try{d=he(e)}catch(i){return R(n,i instanceof Error?i.message:String(i)),1}try{return await je(e,t,r,n,o,c,s)}finally{d()}}var $e={kind:"human",id:process.env.USER??"operator"};function _(e,t,r,n){Z(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:t,verdict:r,polarity:"preference",by:$e,target:t,...n!==void 0?{reason:n}:{}})}async function je(e,t,r,n,o,c,s=[]){let d=0,i=0,g=0,f=0,h=0,p=0,u=0,m=!r;if(m&&!n.ask)return R(n,"the interactive walk needs a prompt channel \u2014 pass --yes or run in a TTY"),2;let w=new Set;for(let[a,l]of t.entries()){if(l.applied){n.out(`skipped ${l.ref} \u2014 already applied (${l.applied.outcome} at ${l.applied.at})`),i++;continue}let $=y=>{try{c?.(a,y)}catch(U){R(n,`could not record applied state for ${l.ref}: ${U instanceof Error?U.message:String(U)}`)}};if(l.kind==="REMOVE"){n.out(`REMOVE ${l.ref} \u2014 plan-only in this release (not executed)`),f++;continue}let I=E(e),N=te(I,l.ref);if(!N.ok){n.out(`skipped ${l.ref} \u2014 ${N.message}`),i++;continue}let k=N.target;if(w.has(k.ucTip)){n.out(`skipped ${l.ref} \u2014 use-case ${k.display} already handled in this walk`),i++;continue}let S={v:"approve"};if(m&&(n.out(`[${l.kind}] ${l.ref} \u2014 ${l.reason}`),n.out(` provenance: ${l.provenance}`),n.out(` action: ${l.action}`),S=await we(n,!1)),S.v==="skip"){n.out(`skipped ${l.ref}`),$("skipped"),_(e,l.ref,"gap-dismissed"),i++;continue}if(S.v==="defer"){n.out(`deferred ${l.ref} \u2014 the plan artifact keeps it`),g++;continue}if(S.v==="edit"){let y=await j(e,k,{yes:!0,because:S.steering},n,o,"batch");y.outcome==="evolved"?(w.add(k.ucTip),d++,$("approved"),_(e,l.ref,"gap-resolved-evolve",S.steering)):y.outcome==="paused"?(p++,u===0&&(u=y.code)):y.outcome==="failed"?(h++,u===0&&(u=y.code)):i++;continue}if(l.kind==="ADD"){let y=await o(k.seamRef,{yes:r});if(y===3){n.out(`design session for ${k.display} paused \u2014 resume with "kane-cli design tests --resume"; this row lands when that session completes`),p++,u===0&&(u=3);continue}if(y!==0){R(n,`design run for ${k.display} ended with exit code ${y}`),h++,u===0&&(u=y);continue}w.add(k.ucTip),d++,$("approved"),_(e,l.ref,"gap-resolved-create")}else{let y=await j(e,k,{yes:!0},n,o,"batch");y.outcome==="evolved"?(w.add(k.ucTip),d++,$("approved"),_(e,l.ref,"gap-resolved-evolve")):y.outcome==="paused"?(p++,u===0&&(u=y.code)):y.outcome==="failed"?(h++,u===0&&(u=y.code)):i++}}let b=0;for(let a of s){if(a.kind!=="DROPPED")continue;if(n.out(`[DROPPED] ${a.ref} \u2014 ${a.why}`),!m){n.out(" plan-only \u2014 retire is interactive-only (never under --yes)"),f++;continue}let l=E(e),$=l.resolve(a.ref);if($&&l.superseded.has(l.tipOf($.cid))){n.out(" already retired \u2014 nothing to do"),i++;continue}let I=await we(n,!0);if(I.v==="skip"){n.out(`skipped ${a.ref}`),_(e,a.ref,"gap-dismissed"),i++;continue}if(I.v==="defer"){n.out(`deferred ${a.ref} \u2014 the plan artifact keeps it`),g++;continue}if(!await n.confirm(`retire ${a.ref}? ${a.why} \u2014 tombstones the node (restore: kane-cli context revert)`)){n.out(`skipped ${a.ref}`),i++;continue}let{commitArchive:k}=await import("./archive-committer-3NI773TP.js"),S=k(e,E(e),{ref:a.ref,reason:`reconcile retire: ${a.why}`,by:$e});if(S.errors){R(n,`retire ${a.ref} failed: ${S.errors.map(y=>`${y.code}: ${y.detail}`).join("; ")}`),h++,u===0&&(u=1);continue}n.out(`retired ${a.ref} \u2014 tombstone committed (record ${S.record.seq})`),_(e,a.ref,"gap-resolved-archive",a.why),b++}return n.out(`reconcile walk: ${d} applied, ${i} skipped, ${g} deferred, ${f} plan-only`+(b>0?`, ${b} retired`:"")+(h>0?`, ${h} failed`:"")+(p>0?`, ${p} paused`:"")),u}async function ve(e,t,r,n,o){let c=o.seams??{reingest:de(e,r),reextract:le(e)},s=null,d={reingest:c.reingest,reextract:async g=>s=await c.reextract(g)},i;try{n.out(`reconciling ${t}: re-reading the source and comparing against the graph\u2026`),i=await(o.buildPlan??ce)(e,t,d)}catch(g){return R(n,`reconcile failed: ${g instanceof Error?g.message:String(g)}`),null}return Me(n,i,s),i}async function Be(e,t,r,n,o){let c=Y(e,t);if("error"in c)return R(n,c.error),2;let{plan:s,path:d}=c;if(t===void 0&&!r&&n.isTTY&&!await n.confirm(`apply plan ${J(d)} for ${s.source_id} (created ${s.created})?`))return n.out(`not applying ${J(d)}`),0;let i=o.runDesignForUc??B,g=G(e);if(g===s.head_pin)return n.out(`applying stored plan ${J(d)} for ${s.source_id} (${s.rows.length} row(s))`),T(e,s.rows,r,n,i,(h,p)=>q(d,h,p),s.changeset??[]);n.out(`graph moved since this plan (${x(s.head_pin)} \u2192 ${x(g)}) \u2014 recomputing`);let f=await ve(e,s.source_id,s.backing_path,n,o);return f?f.changed?T(e,f.rows,r,n,i,void 0,f.changeset):0:1}async function We(e,t,r={},n=process.cwd()){let o=e.apply!==void 0&&e.apply!==!1,c=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&o)return R(t,"pass --plan OR --apply, not both"),2;if(!e.from&&!o)return R(t,"reconcile needs --from <source-id|path>"),2;if(e.from&&c!==void 0)return R(t,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let s=ee(n,t);if(!s)return 2;let d=!!e.yes;if(o&&!d&&!t.isTTY)return R(t,"refusing to apply without --yes (no TTY to confirm)"),2;let i=!e.plan&&!o;if(i&&e.from&&!d&&!t.isTTY)return R(t,"refusing to walk without --yes (no TTY) \u2014 use --plan for a preview"),2;if(o&&!e.from)return Be(s,c===void 0?void 0:ye(n,c),d,t,r);let g=Ge(s,n,e.from);if("error"in g)return R(t,g.error),2;let f=await ve(s,g.sourceId,g.filePath,t,r);if(!f)return 1;let h=r.runDesignForUc??B;if(o)return f.changed?T(s,f.rows,d,t,h,void 0,f.changeset):0;if(!f.changed)return 0;let p=G(s),u=null;if(p!=null?u=me(s,{version:1,source_id:f.source_id,backing_path:g.filePath,head_pin:p,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:f.skipped_arms,note:f.note,changeset:f.changeset,rows:f.rows}):R(t,"no chain head after extract \u2014 plan not stored"),!i)return u&&t.out(`plan stored: ${u}`),0;if(u){t.out(`plan stored: ${u}`);let m=u;return T(s,Ve(s,m)??f.rows,d,t,h,(w,b)=>q(m,w,b),f.changeset)}return T(s,f.rows,d,t,h,void 0,f.changeset)}function Ve(e,t){let r=Y(e,t);return"error"in r?null:r.plan.rows}async function pn(e){return We(e,ne(),{})}export{pn as reconcileCommand,Ge as resolveFromArg,We as runReconcileCommand};
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
2
  import{a as n}from"./chunk-3MSXQU2C.js";import"./chunk-UR6MHSHU.js";function p(t){let s=t.sessionName!==null,e={type:"recording_state",enabled:!0,session_id:t.sessionId,persist:s};return t.sessionName&&(e.session_name=t.sessionName),t.testPath&&(e.test_path=t.testPath),t.outputPath&&(e.output_path=t.outputPath),e}async function g(t){if(t.isAgent){process.stdout.write(JSON.stringify(p(t))+`
3
- `);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-BQ2QOIUP.js"),u=t.sessionName?[{label:"session",value:t.sessionName},{label:"test",value:n(t.testPath??"")},{label:"output",value:n(t.outputPath??"")}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];function l(){let{exit:i}=a();return o(()=>{let c=setTimeout(()=>i(),50);return()=>clearTimeout(c)},[i]),s.createElement(r,{title:"Recording",titleColor:"#ff9500",rows:u})}await e(s.createElement(l),{stdout:process.stderr}).waitUntilExit()}export{p as buildRecordingStateEvent,g as printRecordingBanner};
3
+ `);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-7ZZGMYHY.js"),u=t.sessionName?[{label:"session",value:t.sessionName},{label:"test",value:n(t.testPath??"")},{label:"output",value:n(t.outputPath??"")}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];function l(){let{exit:i}=a();return o(()=>{let c=setTimeout(()=>i(),50);return()=>clearTimeout(c)},[i]),s.createElement(r,{title:"Recording",titleColor:"#ff9500",rows:u})}await e(s.createElement(l),{stdout:process.stderr}).waitUntilExit()}export{p as buildRecordingStateEvent,g as printRecordingBanner};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as a,c as b,d as c,e as d,f as e,g as f,h as g}from"./chunk-FPGOV4AQ.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-VE3SUJMA.js";import"./chunk-INP7FG6V.js";import"./chunk-RZ4F3BHX.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";export{d as buildAutoDefaultAnnouncement,f as buildAutoDefaultedEvent,e as buildAutoDefaultedNdjson,c as buildRemediationMessage,b as decideGateAction,a as loadCachedIds,g as requireProjectFolder};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as _,g as k}from"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";function j(w){let{contextDir:v,graph:y,seq:r,by:d}=w,{records:l,hashes:$}=_(v);if(!Number.isInteger(r)||r<1||r>l.length)return{record:null,warnings:[],errors:[{code:"UNKNOWN_SEQ",detail:`no record ${r} (chain has ${l.length})`}]};let i=l[r-1],p=l.slice(0,r-1),c=w.reason??`revert of record ${r}`,t=[],u=[],f=[],g=[],m={},b=new Set(i.nodes.map(e=>e.cid));for(let e of i.nodes){if(y.superseded.has(e.cid)){t.push(`${e.cid} was already superseded after record ${r} \u2014 left as is`);continue}u.push({kind:"node",old:e.cid,new:null,reason:c,by:d})}for(let e of i.supersessions){if(e.kind==="edge"){t.push(`edge retraction ${e.ecid} cannot be auto-restored \u2014 re-extract to re-evidence`);continue}if(l.slice(r).some(n=>n.supersessions.some(s=>s.kind==="node"&&s.old===e.old))){t.push(`supersession of ${e.old.slice(0,19)} was changed again after record ${r} \u2014 later state kept`);continue}let o;for(let n of p)for(let s of n.supersessions)s.kind==="node"&&s.old===e.old&&(o=s.new===s.old?void 0:s.new);o===void 0?u.push({kind:"node",old:e.old,new:e.old,reason:c,by:d}):u.push({kind:"node",old:e.old,new:o,reason:c,by:d})}let h=l.slice(r);for(let e of Object.keys(i.source_head_moves)){if(h.some(n=>e in n.source_head_moves)){t.push(`head of ${e} was moved again after record ${r} \u2014 later state kept`);continue}let o=null;for(let n of p)e in n.source_head_moves&&(o=n.source_head_moves[e]);m[e]=o}let R=new Set;for(let e of i.review){if(R.has(e.id)||b.has(e.id))continue;if(R.add(e.id),h.some(s=>s.review.some(a=>a.id===e.id))){t.push(`trust of ${e.id.slice(0,19)} was reviewed again after record ${r} \u2014 later state kept`);continue}let o=null,n=null;for(let s of p)for(let a of s.review)a.id===e.id&&(o=a.resolution==="reset"?null:a.resolution,n=a.reason);o==="approved"||o==="edited"?f.push({id:e.id,kind:"review-item",resolution:"approved",edit:null,reason:c,by:d}):o==="rejected"?f.push({id:e.id,kind:"review-item",resolution:"rejected",edit:null,reason:n??c,by:d}):f.push({id:e.id,kind:"review-item",resolution:"reset",edit:null,reason:c,by:d})}for(let e of i.names??[]){if(h.some(n=>(n.names??[]).some(s=>s.slug===e.slug))){t.push(`slug "${e.slug}" was reassigned after record ${r} \u2014 later state kept`);continue}let o;for(let n of p)for(let s of n.names??[])s.slug===e.slug&&(o=s.cid);o!==void 0?g.push({cid:o,slug:e.slug,by:d}):t.push(`slug "${e.slug}" was first assigned by record ${r} \u2014 unassignment unsupported, reassign manually`)}return u.length===0&&f.length===0&&g.length===0&&Object.keys(m).length===0?{record:null,warnings:t,errors:[{code:"NOTHING_TO_REVERT",detail:`record ${r} left no compensable facts`}]}:(i.extraction_of&&t.push(`extraction cache for ${i.extraction_of.slice(0,19)} stays \u2014 re-extract with --force`),{record:k(v,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:f,supersessions:u,...g.length>0?{names:g}:{},source_head_moves:m},{expectPrev:$[$.length-1]??null}).record,warnings:t,errors:null})}export{j as commitRevert};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as j}from"./chunk-AD46OCZ4.js";import{g as b}from"./chunk-5ILXUQIX.js";import"./chunk-QPZRHAYK.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import{a as _}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import{d as V}from"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";import{readFileSync as E}from"fs";var O=new Set(["derived","skipped","archived","drift"]),q={kind:"human",id:process.env.USER??"operator"};function R(d,r){return d.nameOf.get(r)??r.slice(0,19)}function N(d,r){let n=d.getNode(r)?.content??{},a=d.derivesInto(r)[0]?.props.anchor;return{cid:r,uc:{temp_ref:r,title:String(n.title??n.text??""),summary:n.summary!==void 0?String(n.summary):void 0,risk:String(n.risk??"med"),cite:{anchor:typeof a=="string"?a:"\u2014",quote:""},depends_on_hint:[],matches_existing:null}}}function T(d,r){let n=new Set,{records:a}=V(d);for(let s of a){if(s.proposal_id==null)continue;let u=new Set(s.review.map(e=>e.id));for(let e of s.nodes)u.has(e.cid)||n.add(e.cid)}for(let s of[...n])(r.trust.get(s)!=="derived"||r.superseded.has(s))&&n.delete(s);return n}var x=new Set(["approved","edited","rejected","skipped","supersede"]);function C(d){let r;try{r=JSON.parse(d)}catch(s){return{errors:[`not valid JSON: ${s instanceof Error?s.message:String(s)}`]}}if(!Array.isArray(r))return{errors:['expected a top-level array of {"ref", "resolution", ...} entries']};let n=[],a=[];return r.forEach((s,u)=>{if(s==null||typeof s!="object"||Array.isArray(s)){n.push(`[${u}]: not an object`);return}let e=s;(typeof e.ref!="string"||!e.ref.trim())&&n.push(`[${u}]: "ref" (slug or cid) is required`),(typeof e.resolution!="string"||!x.has(e.resolution))&&n.push(`[${u}]: "resolution" must be one of approved | edited | rejected | skipped | supersede`),e.resolution==="supersede"&&(typeof e.supersede_target!="string"||!e.supersede_target.trim())&&n.push(`[${u}]: resolution "supersede" requires "supersede_target" (slug or cid)`),e.edit!==void 0&&(e.edit==null||typeof e.edit!="object"||Array.isArray(e.edit))&&n.push(`[${u}]: "edit" must be an object ({title?, summary?, risk?})`),n.length===0&&a.push(e)}),n.length>0?{errors:n}:{entries:a}}async function I(d,r,n,a=process.cwd()){let s=d.queue??"derived";if(!O.has(s))return r.out(`unknown queue ${s} \u2014 one of: derived | skipped | archived | drift`),2;let u=j(a,r);if(!u)return 2;let e=_(u);if(d.verdicts){let i=t=>(r.err??r.out)(t),o;try{o=E(d.verdicts,"utf8")}catch{return i(`error: cannot read verdicts file ${d.verdicts}`),2}let l=C(o);if("errors"in l){for(let t of l.errors)i(`error: --verdicts ${d.verdicts}: ${t}`);return 2}let c=new Set([...e.trust.entries()].filter(([t,p])=>(p==="derived"||p==="archived")&&!e.superseded.has(t)).map(([t])=>t)),f=new Map,y=[];for(let t of l.entries){let p=e.resolve(t.ref),m=p&&!e.superseded.has(p.tip)?p.tip:null;if(!m){y.push(`${t.ref}: names nothing in the graph`);continue}if(!c.has(m)){y.push(`${t.ref}: not in a review queue (trust: ${e.trust.get(m)??"?"})`);continue}if(f.has(m)){y.push(`${t.ref}: duplicate \u2014 an earlier entry already resolves to this node (${R(e,m)})`);continue}f.set(m,{resolution:t.resolution,...t.reason?{reason:t.reason}:{},...t.edit?{edit:t.edit}:{},...t.supersede_target?{supersedeTarget:t.supersede_target}:{}})}if(y.length>0){for(let t of y)i(`error: --verdicts: ${t}`);return i("error: nothing committed (the verdicts file is atomic \u2014 fix every offender and re-run)"),2}let k=b({contextDir:u,graph:e,verdicts:f,by:q});if(k.errors){if(k.errors[0]?.code==="NO_VERDICTS")return i("nothing changed \u2014 every item was skipped"),0;for(let t of k.errors)i(`${t.code}: ${t.detail}`);return 1}let S=new Map;for(let t of f.values())S.set(t.resolution,(S.get(t.resolution)??0)+1);if(d.json)for(let[t,p]of f.entries())r.out(JSON.stringify({ref:R(e,t),cid:t,resolution:p.resolution}));else{let t=[...S.entries()].map(([p,m])=>`${m} ${p}`).join(", ");r.out(`review: committed record ${k.record.seq} \u2014 ${t}`)}return 0}if(s==="drift"){let i=e.staleList().filter(({state:o})=>o!=="superseded").map(({cid:o,state:l})=>({ref:R(e,o),cid:o,state:l,title:String(e.getNode(o)?.content.title??e.getNode(o)?.content.source_id??""),pinned_sources:[...new Set(e.derivesInto(o).map(c=>String(c.props.source_id)))]}));if(d.json){for(let o of i)r.out(JSON.stringify(o));return 0}if(i.length===0)return r.out("drift queue is empty \u2014 every node's evidence matches the current source snapshots"),0;r.out(`${i.length} node(s) with drifting evidence (re-extract the source to re-bless):`);for(let o of i)r.out(` [${o.state}] ${o.ref} \xB7 ${o.title} \xB7 sources: ${o.pinned_sources.join(", ")||"\u2014"}`);return 0}if(!r.isTTY)return r.out("review: verdict queues need a TTY (drift listing works anywhere, or pass --verdicts <file.json>)"),2;let g,h;if(s==="archived")g=[...e.trust.entries()].filter(([i,o])=>o==="archived"&&!e.superseded.has(i)).map(([i])=>N(e,i)),h="skipped";else{let i=T(u,e),o=[...e.trust.entries()].filter(([c,f])=>f==="derived"&&!e.superseded.has(c)).map(([c])=>c),l=s==="skipped"?o.filter(c=>i.has(c)):o;l.sort((c,f)=>Number(i.has(f))-Number(i.has(c))),g=l.map(c=>N(e,c)),h="skipped"}if(g.length===0)return r.out(`${s} queue is empty`),0;r.out(`${g.length} node(s) in the ${s} queue \u2014 approve promotes, reject ${s==="archived"?"re-archives":"archives"}, edit mints a new version, skip leaves it for later`);let v=await n(g,e,h),w=b({contextDir:u,graph:e,verdicts:v,by:q});if(w.errors){if(w.errors[0]?.code==="NO_VERDICTS")return r.out("nothing changed \u2014 every item was skipped"),0;for(let i of w.errors)r.out(`${i.code}: ${i.detail}`);return 1}let $=w.record;return r.out(`committed record ${$.seq}: ${$.review.length} review fact(s), ${$.supersessions.length} supersession(s), ${$.nodes.length} new version(s)`),0}async function P(d,r,n){let[{render:a},s,{ReviewChecklist:u}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),e=s.default??s;return new Promise(g=>{let h=a(e.createElement(u,{items:d.map(v=>({uc:v.uc})),defaultResolution:n,onSubmit:v=>{h.unmount(),g(v)}}))})}async function D(d){let{bothTTY:r}=await import("./headless-io-GXHKDPHB.js");return I(d,{out:n=>process.stdout.write(n+`
3
+ `),err:n=>process.stderr.write(n+`
4
+ `),confirm:async()=>!1,isTTY:r()},P)}export{C as parseVerdictsFile,D as reviewCommand,I as runReviewCommand};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as b,b as c,c as d}from"./chunk-B2OAEEKI.js";import{e as a}from"./chunk-NWZTYAJB.js";import"./chunk-I2S6KNZW.js";import"./chunk-DM2GL24Z.js";import"./chunk-JFAFKHDX.js";import"./chunk-5ILXUQIX.js";import"./chunk-QPZRHAYK.js";import"./chunk-VJUIW2ES.js";import"./chunk-FXPPQL4D.js";import"./chunk-5446YVGQ.js";import"./chunk-Z56AWGVY.js";import"./chunk-427OQS2N.js";import"./chunk-6PS65QFF.js";import"./chunk-KHDUQ33H.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";export{c as dedupPreFlags,a as resolveAnswers,d as runExtract,b as sessionSourceRef};
@@ -0,0 +1,17 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as A}from"./chunk-6BQD2BXI.js";import{E as M,F as P,G as K,H,I as U}from"./chunk-NTJDMMLC.js";import{a as _,b as E}from"./chunk-WG3BBXJF.js";import{a as h,b as k}from"./chunk-GNGGFK7C.js";import"./chunk-LMJTY32X.js";import{s as L}from"./chunk-RKWJG3WW.js";import{c as R}from"./chunk-BV3EARZO.js";import"./chunk-XQDDUVD3.js";import"./chunk-5U3GOEGG.js";import{a as x}from"./chunk-RTWWPEQ7.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-GIGD4M7V.js";import"./chunk-2YQ6TW77.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-ABSEKYIB.js";import"./chunk-FYOCF7DY.js";import"./chunk-RGEAEAZB.js";import"./chunk-BC7UVJJB.js";import"./chunk-NFOBDHZK.js";import"./chunk-KHDUQ33H.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import{e as b,f as S,g as T}from"./chunk-M5JQXOCE.js";import"./chunk-FPGOV4AQ.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-VE3SUJMA.js";import"./chunk-QI6WZ56Y.js";import"./chunk-D5SHVZGD.js";import{a as C}from"./chunk-INP7FG6V.js";import"./chunk-RZ4F3BHX.js";import"./chunk-E47GFYXA.js";import{a as v}from"./chunk-OXARXMMD.js";import"./chunk-MKD3KZPM.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";import{resolve as Y}from"path";import{existsSync as D}from"fs";function O(){return{register:(n,r)=>b(n,r),deregister:n=>S(n),cleanup:(n,r)=>T(n,r),remoteLogger:null}}async function le(n,r){let t=Y(n);if(!D(t))return process.stderr.write(`error: file not found: ${t}
3
+ `),2;if(r.finalValidation!==void 0&&r.finalValidation!=="on"&&r.finalValidation!=="off")return process.stderr.write(`error: --final-validation must be 'on' or 'off'
4
+ `),2;if(!t.endsWith("_test.md"))return process.stderr.write(`error: not a *_test.md file: ${t}
5
+ helpers are import-only \u2014 run a test that @imports it.
6
+ `),2;_(t);let a=!process.stdin.isTTY||!!r.agent,c=O(),s;try{s=L(t)}catch(e){return process.stderr.write(`error: ${e.message}
7
+ `),2}for(let e of s.warnings)process.stderr.write(`warn: ${e}
8
+ `);if(s.steps.length===0)return process.stderr.write(`info: no steps in ${t}; nothing to run.
9
+ `),0;let i;try{i=G(r)}catch(e){if(e instanceof m)return process.stderr.write(e.message),e.exitCode;throw e}let o=new v,l=new x,u=!!(r.username&&r.accessKey);await E({isInteractive:!!process.stdin.isTTY&&!r.agent&&!u,creds:o,config:l});let I=o.getActiveProfile()??"default",f=r.env??void 0??o.getDefaultEnv()??"prod",N=C(f),$="v16-alpha",p;try{p=await k({creds:o,env:f,usernameFlag:r.username,accessKeyFlag:r.accessKey,log:()=>{}})}catch(e){return e instanceof h&&e.code==="not_authenticated"?process.stderr.write(`error: Not authenticated. Choose one:
10
+ \u2022 Pass credentials inline: --username <user> --access-key <key>
11
+ \u2022 Run 'kane-cli login --oauth' (browser-based)
12
+ \u2022 Run 'kane-cli login --username <user> --access-key <key>'
13
+ `):e instanceof h&&e.code==="refresh_failed"?process.stderr.write(`error: Token refresh failed. Run 'kane-cli login' to re-authenticate.
14
+ `):process.stderr.write(`error: auth resolution failed: ${e.message}
15
+ `),2}let y=String(p.resolvedCreds?.org_id??"");if(!y)return process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),2;{let{readMetaIfExists:e,assertOrgMatchOrExit:g}=await import("./testmd-actions-45BY3YFO.js"),d=g(e(t),y);if(d!==null)return d}let w=new R,j=A({isAgent:a,log:(e,g,d,V)=>w.log(e,g,d,V)}),F={path:t,cwd:process.cwd(),opts:r,isAgent:a,disableAskUser:!0,resolved:s,resolvedAuth:p,cliOverrides:i,environment:f,envConfig:N,profile:I,model:$,creds:o,configStore:l,session:w};try{return(await M(F,j,c)).exitCode}catch(e){return process.stderr.write(`error: ${e.message}
16
+ `),2}}var m=class extends Error{constructor(t,a){super(t);this.exitCode=a;this.name="CliArgError"}};function G(n){let r={mode:"mode",assertionMode:"assertion_mode",finalValidation:"final_validation",maxSteps:"max_steps",timeout:"timeout",globalContext:"global_context",localContext:"local_context",codeExport:"code_export",codeLanguage:"code_language",headless:"headless",cdpEndpoint:"cdp_endpoint",wsEndpoint:"ws_endpoint"},t=new Set(["max_steps","timeout"]),a={};for(let[c,s]of Object.entries(r)){let i=n[c];if(i===void 0||i==="")continue;let o=i;if(t.has(s)&&(o=Number(i),Number.isNaN(o))){let l="--"+c.replace(/[A-Z]/g,u=>"-"+u.toLowerCase());throw new m(`error: ${l} must be a number
17
+ `,2)}a[s]=o}return a}export{U as applyCliStepConfig,K as buildStepRunVariables,P as buildTestLevelVariables,G as optsToOverrides,H as replayVariablesForStep,le as runTestMdFile};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-C6S4IEBC.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as ScrollbackProvider,b as useScrollback};
2
+ import{a,b}from"./chunk-DFS4RMVP.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as ScrollbackProvider,b as useScrollback};
@@ -0,0 +1,23 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{c as l,d as g,e as $,f}from"./chunk-FXPPQL4D.js";import{a as m}from"./chunk-BC7UVJJB.js";import"./chunk-UR6MHSHU.js";function w(t,o=new Date){let n=new Date(t).getTime()-o.getTime();if(Number.isNaN(n))return"unknown";if(n<=0)return"EXPIRED";let e=Math.floor(n/36e5),r=Math.round(n%36e5/6e4);return e>0?`${e}h ${r}m`:`${r}m`}function p(t){return t.verb==="design"?`kane-cli design tests --resume ${t.sid} --mode ${t.mode==="agent"?"agent":"interactive"}`:`kane-cli context extract --resume ${t.sid}${t.mode==="agent"?" --mode agent":""}`}function _(t,o,n){let e,r,s;try{if(e=l(t,o),!e)return process.stderr.write(`error: no session ${o} (kane-cli context sessions lists them)
3
+ `),2;r=e.pending.questions.map(f),s=p(e)}catch{return process.stderr.write(`error: session ${o} has a corrupt state.json \u2014 remove with: kane-cli context sessions clean ${o}
4
+ `),2}let i=new Date(e.expires_at).getTime()<=Date.now();if(n)return process.stdout.write(JSON.stringify({sid:e.sid,verb:e.verb??"extract",use_case:e.use_case,mode:e.mode,created_at:e.created_at,expires_at:e.expires_at,...i?{expired:!0}:{resume:s},pending_questions:r,pending_proposals:e.pending.proposals.length,assumed:e.assumed,...e.force?{force:!0}:{}})+`
5
+ `),0;let c=e.verb==="design"?e.use_case??"?":"extract corpus";process.stdout.write(`${e.sid} ${e.verb??"extract"} \xB7 ${c} \xB7 ${e.mode} \xB7 expires in ${w(e.expires_at)}
6
+ `),i?process.stdout.write(` expired at ${e.expires_at} \u2014 not resumable; discard with: kane-cli context sessions clean ${e.sid}
7
+ `):(process.stdout.write(` resume: ${s}
8
+ `),process.stdout.write(` answer in words: ${s} --message "<your statement>"
9
+ `)),r.length===0&&process.stdout.write(` pending questions: none
10
+ `);for(let[a,d]of r.entries())process.stdout.write(` q${a+1} [${d.risk}] ${d.text}
11
+ `),d.options.forEach((u,x)=>{let h=x===d.recommended_index?" (recommended)":"";process.stdout.write(` - ${u.label}${h}${u.detail?` \u2014 ${u.detail}`:""}
12
+ `)});return e.assumed.length>0&&process.stdout.write(` assumed while away: ${e.assumed.map(a=>`${a.questionId}\u2192${a.optionId}`).join(", ")}
13
+ `),0}async function S(t,o,n){let e=m(process.cwd());if(t==="show")return n?_(e,n,!!o.json):(process.stderr.write(`error: sessions show needs a <sid> (kane-cli context sessions lists them)
14
+ `),2);if(t==="clean"){let{removed:s,skipped:i}=$(e,{all:o.all,sid:n});for(let c of i)process.stderr.write(`error: session ${c.sid} not removed \u2014 ${c.reason}
15
+ `);return n&&s.length===0?(i.length>0||process.stderr.write(`error: no session ${n}
16
+ `),2):(process.stdout.write(s.length?`removed: ${s.join(", ")}
17
+ `:`nothing to clean
18
+ `),i.length>0?2:0)}let r=g(e);if(o.json){for(let s of r)process.stdout.write(JSON.stringify(s.corrupt?s:{...s,resume:p(s)})+`
19
+ `);return 0}if(r.length===0)return process.stdout.write(`no sessions
20
+ `),0;for(let s of r){if(s.corrupt){process.stdout.write(`${s.sid} CORRUPT state.json \u2014 remove with: kane-cli context sessions clean ${s.sid}
21
+ `);continue}let i=s.verb==="design"?s.use_case??"?":"extract corpus";process.stdout.write(`${s.sid} ${s.verb??"extract"} \xB7 ${i} \xB7 pending ${s.pendingCount} \xB7 expires in ${w(s.expires_at)}
22
+ resume: ${p(s)}
23
+ `)}return 0}export{p as resumeCommandFor,S as sessionsCommand};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as a,d}from"./chunk-AD46OCZ4.js";import{d as s}from"./chunk-JFAFKHDX.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import"./chunk-UR6MHSHU.js";var u=new Set(["preference","mistake","correction"]);async function c(r,e,m=process.cwd()){if(r.kind!==void 0&&!u.has(r.kind))return(e.err??e.out)(`error: unknown kind ${r.kind} \u2014 one of: preference | mistake | correction`),2;let i=a(m,e);if(!i)return 2;let{signals:o}=s(i),t=r.kind?o.filter(n=>n.polarity===r.kind):o;if(r.show!==void 0){let n=Number(r.show);return!Number.isInteger(n)||n<0||n>=t.length?((e.err??e.out)(`error: --show ${r.show} out of range (0..${t.length-1})`),2):(e.out(JSON.stringify(t[n],null,2)),0)}if(r.json)return e.out(JSON.stringify(t)),0;if(t.length===0)return e.out("(no signals)"),0;e.out("when \xB7 command \xB7 verdict \xB7 polarity \xB7 target");for(let n of t)e.out(`${n.ts} \xB7 ${n.command} \xB7 ${n.verdict} \xB7 ${n.polarity} \xB7 ${n.target??n.id}`);return 0}async function l(r){return c(r,d())}export{c as runSignalsCommand,l as signalsCommand};
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as p,b as g}from"./chunk-FKAXPYV7.js";import{b as m}from"./chunk-HUAOH2JK.js";import"./chunk-RB2YKN77.js";import"./chunk-KKIFXAJY.js";import{a as d}from"./chunk-RZ4F3BHX.js";import{a as f,g as a,h as u}from"./chunk-LRKWPAGK.js";import"./chunk-UR6MHSHU.js";import{mkdirSync as y,writeFileSync as w,readFileSync as S,rmSync as c,cpSync as v,createWriteStream as T,existsSync as b}from"fs";import{join as s}from"path";import{tmpdir as k}from"os";import{spawn as h}from"child_process";import{Readable as I}from"stream";import{pipeline as $}from"stream/promises";function E(t){try{return S(s(t,"VERSION"),"utf-8").trim()||null}catch{return null}}function L(t,r,l){return l?t!==r:t===null||m(t,r)>0}function C(t){let r=a.split("/").pop()??a;return`https://registry.npmjs.org/${a}/-/${r}-${t}.tgz`}var R=5e3,A=6e4;async function x(){let t=new AbortController,r=setTimeout(()=>t.abort(),R);try{let l=await d(p(),{headers:{Accept:"application/json"},signal:t.signal});if(!l.ok)throw new Error(`Controller returned ${l.status} fetching skill version map`);let i=await l.json(),n=g(i,f);if(!n)throw new Error("No compatible skill version found for this kane-cli build");return n}finally{clearTimeout(r)}}async function _(t){let r=C(t),l=new AbortController,i=setTimeout(()=>l.abort(),A);try{let n=await d(r,{headers:{Accept:"application/octet-stream"},signal:l.signal});if(!n.ok||!n.body)throw new Error(`Failed to download skill tarball (${n.status})`);let e=s(k(),`kane-cli-skill-${t}-${process.pid}.tgz`);return await $(I.fromWeb(n.body),T(e)),e}finally{clearTimeout(i)}}function M(t,r){return new Promise((l,i)=>{y(r,{recursive:!0});let n=h("tar",["-xzf",t,"-C",r,"--strip-components=2","package/skills"],{stdio:["ignore","ignore","pipe"]}),e="";n.stderr?.on("data",o=>{e+=o.toString()}),n.on("error",o=>i(o)),n.on("close",o=>{o===0?l():i(new Error(`tar exited ${o}${e?`: ${e.trim()}`:""}`))})})}async function W(t){let r;try{r=t??await x()}catch(e){return{status:"failed",version:t??"unknown",installedTargets:0,error:e instanceof Error?e.message:String(e)}}let l=u.filter(({dir:e})=>L(E(e),r,!!t));if(l.length===0)return{status:"already-installed",version:r,installedTargets:0};let i=null,n=null;try{if(n=await _(r),i=s(k(),`kane-cli-skill-${r}-stage-${process.pid}`),c(i,{recursive:!0,force:!0}),await M(n,i),!b(s(i,"SKILL.md")))throw new Error(`Unexpected skill tarball layout for v${r}: SKILL.md not at package/skills/ root`);let e=0;for(let{dir:o}of l)try{c(o,{recursive:!0,force:!0}),y(o,{recursive:!0}),v(i,o,{recursive:!0,force:!0}),w(s(o,"VERSION"),r+`
2
+ import{a as p,b as g}from"./chunk-3SK5GXQM.js";import{b as m}from"./chunk-HYW5VDEC.js";import"./chunk-INP7FG6V.js";import{a as d}from"./chunk-RZ4F3BHX.js";import"./chunk-OXARXMMD.js";import{a as f,g as a,h as u}from"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";import{mkdirSync as y,writeFileSync as w,readFileSync as S,rmSync as c,cpSync as v,createWriteStream as T,existsSync as b}from"fs";import{join as s}from"path";import{tmpdir as k}from"os";import{spawn as h}from"child_process";import{Readable as I}from"stream";import{pipeline as $}from"stream/promises";function E(t){try{return S(s(t,"VERSION"),"utf-8").trim()||null}catch{return null}}function L(t,r,l){return l?t!==r:t===null||m(t,r)>0}function C(t){let r=a.split("/").pop()??a;return`https://registry.npmjs.org/${a}/-/${r}-${t}.tgz`}var R=5e3,A=6e4;async function x(){let t=new AbortController,r=setTimeout(()=>t.abort(),R);try{let l=await d(p(),{headers:{Accept:"application/json"},signal:t.signal});if(!l.ok)throw new Error(`Controller returned ${l.status} fetching skill version map`);let i=await l.json(),n=g(i,f);if(!n)throw new Error("No compatible skill version found for this kane-cli build");return n}finally{clearTimeout(r)}}async function _(t){let r=C(t),l=new AbortController,i=setTimeout(()=>l.abort(),A);try{let n=await d(r,{headers:{Accept:"application/octet-stream"},signal:l.signal});if(!n.ok||!n.body)throw new Error(`Failed to download skill tarball (${n.status})`);let e=s(k(),`kane-cli-skill-${t}-${process.pid}.tgz`);return await $(I.fromWeb(n.body),T(e)),e}finally{clearTimeout(i)}}function M(t,r){return new Promise((l,i)=>{y(r,{recursive:!0});let n=h("tar",["-xzf",t,"-C",r,"--strip-components=2","package/skills"],{stdio:["ignore","ignore","pipe"]}),e="";n.stderr?.on("data",o=>{e+=o.toString()}),n.on("error",o=>i(o)),n.on("close",o=>{o===0?l():i(new Error(`tar exited ${o}${e?`: ${e.trim()}`:""}`))})})}async function W(t){let r;try{r=t??await x()}catch(e){return{status:"failed",version:t??"unknown",installedTargets:0,error:e instanceof Error?e.message:String(e)}}let l=u.filter(({dir:e})=>L(E(e),r,!!t));if(l.length===0)return{status:"already-installed",version:r,installedTargets:0};let i=null,n=null;try{if(n=await _(r),i=s(k(),`kane-cli-skill-${r}-stage-${process.pid}`),c(i,{recursive:!0,force:!0}),await M(n,i),!b(s(i,"SKILL.md")))throw new Error(`Unexpected skill tarball layout for v${r}: SKILL.md not at package/skills/ root`);let e=0;for(let{dir:o}of l)try{c(o,{recursive:!0,force:!0}),y(o,{recursive:!0}),v(i,o,{recursive:!0,force:!0}),w(s(o,"VERSION"),r+`
3
3
  `),e++}catch{}return e===0?{status:"failed",version:r,installedTargets:0,error:"Could not write to any agent skill directory"}:{status:"installed",version:r,installedTargets:e}}catch(e){return{status:"failed",version:r,installedTargets:0,error:e instanceof Error?e.message:String(e)}}finally{if(n)try{c(n,{force:!0})}catch{}if(i)try{c(i,{recursive:!0,force:!0})}catch{}}}function D(t){switch(t.status){case"installed":return`Installed kane-cli skill v${t.version} (${t.installedTargets}/${u.length} agent dirs). Restart your AI agent (Claude Code / Codex CLI / Gemini CLI) to load it.`;case"already-installed":return`kane-cli skill v${t.version} already installed.`;case"failed":return`Failed to install kane-cli skill: ${t.error??"unknown error"}`}}export{D as formatInstallResult,W as installSkill,L as targetNeedsInstall};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c,d}from"./chunk-WUMNIGPR.js";import"./chunk-UR6MHSHU.js";export{c as buildAgentEnv,b as findAssuranceAgent,a as platformPackageName,d as resolveAgentAuthEnv};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as a}from"./chunk-ZZOSDBYN.js";import"./chunk-ZO7ROBPR.js";import"./chunk-MESFNOY3.js";import"./chunk-3MSXQU2C.js";import"./chunk-FAXRERS6.js";import"./chunk-NTJDMMLC.js";import"./chunk-PGEMGGBS.js";import"./chunk-WG3BBXJF.js";import"./chunk-GNGGFK7C.js";import"./chunk-MQ7DJ2XC.js";import"./chunk-LMJTY32X.js";import"./chunk-RKWJG3WW.js";import"./chunk-ZXDA4K6G.js";import"./chunk-WFSQZG26.js";import"./chunk-BV3EARZO.js";import"./chunk-WUNN5OCH.js";import"./chunk-XQDDUVD3.js";import"./chunk-5U3GOEGG.js";import"./chunk-RTWWPEQ7.js";import"./chunk-H7ZQ4AWL.js";import"./chunk-5Q46BEG7.js";import"./chunk-5Y2G4NC7.js";import"./chunk-LBBPMEO2.js";import"./chunk-CBIW5DTU.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-GIGD4M7V.js";import"./chunk-2YQ6TW77.js";import"./chunk-Y2S3PW7N.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-ME3GYVBV.js";import"./chunk-RFHMDQXZ.js";import"./chunk-ABSEKYIB.js";import"./chunk-FYOCF7DY.js";import"./chunk-RGEAEAZB.js";import"./chunk-BC7UVJJB.js";import"./chunk-NFOBDHZK.js";import"./chunk-KHDUQ33H.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-WFAMF4SG.js";import"./chunk-25YSMNUP.js";import"./chunk-VXS23M67.js";import"./chunk-YCCUBQY4.js";import"./chunk-YWWKKKXY.js";import"./chunk-M5JQXOCE.js";import"./chunk-FPGOV4AQ.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-VE3SUJMA.js";import"./chunk-QI6WZ56Y.js";import"./chunk-D5SHVZGD.js";import"./chunk-INP7FG6V.js";import"./chunk-RZ4F3BHX.js";import"./chunk-E47GFYXA.js";import"./chunk-OXARXMMD.js";import"./chunk-QK6KZMYG.js";import"./chunk-C5NNT7Y3.js";import{a as o}from"./chunk-DFS4RMVP.js";import"./chunk-NOOHQBUD.js";import"./chunk-N2BUF6YU.js";import"./chunk-MKD3KZPM.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{e as a,f as b,g as c,h as d,i as e,j as f,k as g,l as h,m as i,n as j,o as k,p as l,q as m}from"./chunk-PGEMGGBS.js";import"./chunk-WG3BBXJF.js";import"./chunk-GNGGFK7C.js";import"./chunk-RKWJG3WW.js";import"./chunk-RTWWPEQ7.js";import"./chunk-2YQ6TW77.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-L5LI2JF4.js";import"./chunk-YWWKKKXY.js";import"./chunk-M5JQXOCE.js";import"./chunk-NLCCBXXV.js";import"./chunk-QI6WZ56Y.js";import"./chunk-D5SHVZGD.js";import"./chunk-INP7FG6V.js";import"./chunk-RZ4F3BHX.js";import"./chunk-OXARXMMD.js";import"./chunk-N2BUF6YU.js";import"./chunk-MKD3KZPM.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{i as ExportError,c as assertOrgMatchOrExit,j as exportTestmd,b as metaMatchesOrg,a as readMetaIfExists,d as resolveCurrentOrgId,l as resolveSyncAuth,h as runDeleteAction,k as runExportAction,e as runListAction,f as runListTui,g as runStatusAction,m as runSyncAction};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-LPUQ4HWQ.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-UR6MHSHU.js";export{a as TmsClient};
2
+ import{a}from"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-UR6MHSHU.js";export{a as TmsClient};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-QI6WZ56Y.js";import"./chunk-D5SHVZGD.js";import"./chunk-INP7FG6V.js";import"./chunk-RZ4F3BHX.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c}from"./chunk-5446YVGQ.js";import"./chunk-UR6MHSHU.js";export{b as baseUrlAdvisory,c as preflightTurn,a as resolveTurnBase};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as k}from"./chunk-YCCUBQY4.js";import{a as F}from"./chunk-HCBYKLMW.js";import{a as T,b as c,i as A}from"./chunk-C44QQJR4.js";import{a as j}from"./chunk-6YGTRKDT.js";import{e as _}from"./chunk-UR6MHSHU.js";var p=_(j(),1);var t=_(F(),1),I={high:0,med:1,low:2},P={high:"red",med:"yellow",low:"green"};function N({questions:d,onSubmit:S}){let x=(0,p.useMemo)(()=>[...d].sort((r,i)=>(I[r.risk]??3)-(I[i.risk]??3)),[d]),[o,R]=(0,p.useState)(0),[h,w]=(0,p.useState)(x.map(r=>r.recommended_index)),[v,M]=(0,p.useState)(x.map(()=>null)),[f,y]=(0,p.useState)(null),a=()=>{S(x.map((r,i)=>({id:r.id,selected_index:v[i]!=null?null:h[i],free_text:v[i]})))};return A((r,i)=>{if(i.return||r===`
3
+ `)return a();if(i.upArrow)return R(m=>Math.max(0,m-1));if(i.downArrow)return R(m=>Math.min(x.length-1,m+1));let u=x[o],g=m=>{w(b=>b.map((E,e)=>e===o?m:E)),M(b=>b.map((E,e)=>e===o?null:E))};if(i.leftArrow)return g(Math.max(0,h[o]-1));if(i.rightArrow)return g(Math.min(u.options.length-1,h[o]+1));if(/^[1-9]$/.test(r)){let m=Number(r)-1;m<u.options.length&&g(m);return}r==="f"&&u.allow_free_text&&y("")},{isActive:f===null}),(0,t.jsxs)(T,{flexDirection:"column",children:[(0,t.jsxs)(c,{bold:!0,children:["The agent needs ",x.length===1?"one answer":`${x.length} answers`," (Enter = accept defaults)"]}),x.map((r,i)=>(0,t.jsxs)(T,{flexDirection:"column",marginTop:1,children:[(0,t.jsxs)(c,{children:[(0,t.jsxs)(c,{color:P[r.risk],children:["[",r.risk,"]"]})," ",i===o?"\u203A ":" ",r.text]}),(0,t.jsxs)(c,{dimColor:!0,children:[" ",r.rationale]}),(0,t.jsxs)(c,{children:[" ",r.options.map((u,g)=>(0,t.jsx)(c,{inverse:i===o&&g===h[i]&&v[i]==null,children:g===r.recommended_index?` \u2605${u.label} `:` ${u.label} `},u.label)),v[i]!=null?(0,t.jsxs)(c,{color:"cyan",children:[" \u270E ",v[i]]}):null,r.allow_free_text?(0,t.jsx)(c,{dimColor:!0,children:" (f = free text)"}):null]}),i===o&&f!==null?(0,t.jsx)(T,{marginLeft:2,children:(0,t.jsx)(k,{value:f,onChange:y,placeholder:"type a free-text answer",onSubmit:u=>{M(g=>g.map((m,b)=>b===o?u.trim()?u:null:m)),y(null)},onCancel:()=>y(null)})}):null]},r.id))]})}var B=["approved","edited","rejected","skipped","supersede"],D={approved:"approve",edited:"edit",rejected:"reject",skipped:"queued",supersede:"edit\u21D2replaces"};function L(d){return d.uc.conflicts_with?.[0]??d.uc.matches_existing?.cid??d.dedupWith??d.archivedMatch?.cid}function W({items:d,onSubmit:S,defaultResolution:x}){let[o,R]=(0,p.useState)(0),[h,w]=(0,p.useState)(d.map(e=>e.archivedMatch?"rejected":x??"approved")),[v,M]=(0,p.useState)(d.map(()=>{})),[f,y]=(0,p.useState)(d.map(e=>L(e))),[a,r]=(0,p.useState)(null),[i,u]=(0,p.useState)(null),[g,m]=(0,p.useState)(null),b=()=>{let e=h.findIndex((n,s)=>n==="supersede"&&!f[s]?.trim());if(e>=0){R(e),u(f[e]??"");return}let l=new Map;d.forEach((n,s)=>{l.set(n.uc.temp_ref,{resolution:h[s],edit:v[s],...h[s]==="supersede"?{supersedeTarget:f[s].trim()}:{}})}),S(l)};A((e,l)=>{if(l.return||e===`
4
+ `)return b();if(l.upArrow)return R(n=>Math.max(0,n-1));if(l.downArrow)return R(n=>Math.min(d.length-1,n+1));if(e===" "){let n=B[(B.indexOf(h[o])+1)%B.length];w(s=>s.map((C,V)=>V===o?n:C)),n==="supersede"&&!f[o]?.trim()&&u("");return}if(e==="s"){w(n=>n.map((s,C)=>C===o?"supersede":s)),u(f[o]??"");return}if(e==="e"){let n=d[o].uc,s=v[o];r({field:0,title:s?.title??n.title,summary:s?.summary??n.summary??"",risk:s?.risk??n.risk}),m(null)}},{isActive:a===null&&i===null});let E=e=>{if(!e.title.trim()){m("title must not be empty"),r({...e,field:0});return}if(!["high","med","low"].includes(e.risk)){m("risk must be high | med | low"),r({...e,field:2});return}M(l=>l.map((n,s)=>s===o?{title:e.title,summary:e.summary,risk:e.risk}:n)),w(l=>l.map((n,s)=>s===o?"edited":n)),r(null),m(null)};return(0,t.jsxs)(T,{flexDirection:"column",children:[(0,t.jsxs)(c,{bold:!0,children:["Review ",d.length," proposed use-case(s) \u2014 space cycles the verdict, e edits, s supersedes, Enter commits"]}),d.map((e,l)=>(0,t.jsx)(T,{flexDirection:"column",children:(0,t.jsxs)(c,{children:[l===o?"\u203A ":" ",(0,t.jsxs)(c,{inverse:l===o,children:["[",D[h[l]],"]"]})," ",(0,t.jsx)(c,{color:P[e.uc.risk],children:v[l]?.risk??e.uc.risk})," ",v[l]?.title??e.uc.title,(0,t.jsxs)(c,{dimColor:!0,children:[" \xB7 cite ",e.uc.cite.anchor]}),e.dedupWith?(0,t.jsxs)(c,{color:"magenta",children:[" \u2248 matches ",e.dedupWith.slice(0,19)]}):null,e.archivedMatch?(0,t.jsxs)(c,{color:"yellow",children:[" ","\u2248 matches ARCHIVED ",e.archivedMatch.cid.slice(0,19),e.archivedMatch.reason?` \u2014 previously rejected: "${e.archivedMatch.reason}"`:" \u2014 previously rejected"]}):null,h[l]==="supersede"?(0,t.jsxs)(c,{color:"magenta",children:[" \u21D2 replaces ",f[l]?.trim()?f[l].slice(0,24):"(target?)"]}):null]})},e.uc.temp_ref)),i!==null?(0,t.jsxs)(T,{flexDirection:"column",marginTop:1,borderStyle:"round",paddingX:1,children:[(0,t.jsx)(c,{bold:!0,children:"supersede target \u2014 slug or cid of the node this one replaces (Esc cancels)"}),(0,t.jsx)(k,{value:i,onChange:u,placeholder:"refund-uc or sha256:\u2026",onSubmit:e=>{let l=e.trim();l?y(n=>n.map((s,C)=>C===o?l:s)):w(n=>n.map((s,C)=>C===o?"approved":s)),u(null)},onCancel:()=>{w(e=>e.map((l,n)=>n===o?"approved":l)),u(null)}})]}):null,a?(0,t.jsxs)(T,{flexDirection:"column",marginTop:1,borderStyle:"round",paddingX:1,children:[(0,t.jsxs)(c,{bold:!0,children:["edit \u2014 tab-less: submit each field with Enter (",["title","summary","risk"][a.field],")"]}),g?(0,t.jsx)(c,{color:"red",children:g}):null,a.field===0?(0,t.jsx)(k,{value:a.title,onChange:e=>r({...a,title:e}),onSubmit:()=>r({...a,field:1}),onCancel:()=>r(null),placeholder:"title"}):a.field===1?(0,t.jsx)(k,{value:a.summary,onChange:e=>r({...a,summary:e}),onSubmit:()=>r({...a,field:2}),onCancel:()=>r(null),placeholder:"summary"}):(0,t.jsx)(k,{value:a.risk,onChange:e=>r({...a,risk:e}),onSubmit:()=>E(a),onCancel:()=>r(null),placeholder:"risk (high|med|low)"})]}):null]})}export{N as QuestionBatchPrompt,W as ReviewChecklist};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as t}from"./chunk-KKIFXAJY.js";import"./chunk-LRKWPAGK.js";import"./chunk-UR6MHSHU.js";async function l(n,o,r){let{ControllerClient:e}=await import("./controller-client-RD2YEMAH.js");await new e(t(n).controllerBaseUrl,{username:o,accessKey:r}).getTmsCredentials()}export{l as validateBasicAuth};
2
+ import{a as t}from"./chunk-INP7FG6V.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";async function l(n,o,r){let{ControllerClient:e}=await import("./controller-client-RD2YEMAH.js");await new e(t(n).controllerBaseUrl,{username:o,accessKey:r}).getTmsCredentials()}export{l as validateBasicAuth};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d}from"./chunk-HUAOH2JK.js";import"./chunk-RZ4F3BHX.js";import"./chunk-LRKWPAGK.js";import"./chunk-UR6MHSHU.js";export{d as checkForUpdate,b as compareVersions,c as getSeverity,a as getUpdateCommand};
2
+ import{a,b,c,d}from"./chunk-HYW5VDEC.js";import"./chunk-RZ4F3BHX.js";import"./chunk-MKD3KZPM.js";import"./chunk-UR6MHSHU.js";export{d as checkForUpdate,b as compareVersions,c as getSeverity,a as getUpdateCommand};