@testmuai/kane-cli 0.5.0 → 0.6.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 (188) hide show
  1. package/dist/ChatSurface-R55VO3VW.js +9 -0
  2. package/dist/{ChromeProfilePicker-PIWZY4WH.js → ChromeProfilePicker-BZKLIO2T.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-URXCHBZ5.js → CliFeedbackPrompt-3HYRBMXS.js} +1 -1
  4. package/dist/CliUploadProgress-OAPMO5I3.js +2 -0
  5. package/dist/{ConfigView-NWNDNTKW.js → ConfigView-YIAAISLE.js} +1 -1
  6. package/dist/EvidenceViewOffer-DBMZQ34Z.js +2 -0
  7. package/dist/FolderPicker-ILK4AIKL.js +2 -0
  8. package/dist/HelpView-HBQX64VR.js +2 -0
  9. package/dist/{InfoBox-FPAWQZGQ.js → InfoBox-DKJO73HM.js} +1 -1
  10. package/dist/{LinksBox-O5ZFYSK2.js → LinksBox-44WCVBT4.js} +1 -1
  11. package/dist/{ProfilesView-SPECXHZE.js → ProfilesView-NVEDYU3H.js} +1 -1
  12. package/dist/{ProjectPicker-ANJ6NGNY.js → ProjectPicker-COBY7TCY.js} +1 -1
  13. package/dist/{SaveSessionPrompt-W2GWELOP.js → SaveSessionPrompt-O4ENMYHP.js} +1 -1
  14. package/dist/ScrollbackTap-Q3IOKNMS.js +2 -0
  15. package/dist/SingleShotApp-NA6A2S6I.js +2 -0
  16. package/dist/{SummaryBox-DJUDYML7.js → SummaryBox-ROV7TNK4.js} +1 -1
  17. package/dist/TestMdRunView-U5YTNLY6.js +2 -0
  18. package/dist/{WhoamiView-DH25ZD4C.js → WhoamiView-4QV3DPN2.js} +1 -1
  19. package/dist/archive-committer-3NI773TP.js +2 -0
  20. package/dist/bind-RDTZZ6ZI.js +6 -0
  21. package/dist/bridge-VY2Q3HQU.js +2 -0
  22. package/dist/{changelog-RCKUVBFL.js → changelog-JMFGVNEU.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-T4PKTWZ6.js → chunk-2PDWMY2B.js} +1 -1
  27. package/dist/{chunk-I4B2KY4X.js → chunk-2T4JPBB5.js} +1 -1
  28. package/dist/{chunk-AM5WZPPY.js → chunk-37CI4EJX.js} +1 -1
  29. package/dist/chunk-427OQS2N.js +2 -0
  30. package/dist/chunk-47RNFG2V.js +23 -0
  31. package/dist/{chunk-IECUFWIZ.js → chunk-4CRKK5WV.js} +1 -1
  32. package/dist/chunk-5446YVGQ.js +4 -0
  33. package/dist/{chunk-TJWU7DOO.js → chunk-5FD6ZXB5.js} +1 -1
  34. package/dist/chunk-5ILXUQIX.js +2 -0
  35. package/dist/chunk-5UXL6RNG.js +2 -0
  36. package/dist/chunk-5Y2G4NC7.js +2 -0
  37. package/dist/chunk-6PS65QFF.js +2 -0
  38. package/dist/chunk-7DBQEOFL.js +9 -0
  39. package/dist/{chunk-R5RHRG65.js → chunk-7SUKUJO2.js} +1 -1
  40. package/dist/{chunk-LOQV5GME.js → chunk-AAWRKFE4.js} +1 -1
  41. package/dist/chunk-AD46OCZ4.js +4 -0
  42. package/dist/chunk-AE6SS34N.js +4 -0
  43. package/dist/chunk-B2PZAB7J.js +4 -0
  44. package/dist/chunk-BC7UVJJB.js +2 -0
  45. package/dist/{chunk-DTM4ZMMJ.js → chunk-BMSWIYYK.js} +1 -1
  46. package/dist/{chunk-YSIYPC4R.js → chunk-CB3TEWZJ.js} +1 -1
  47. package/dist/chunk-CE664P73.js +2 -0
  48. package/dist/chunk-CP4XCWAJ.js +5 -0
  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-HZ46P2GR.js → chunk-FAIH2K2U.js} +1 -1
  53. package/dist/chunk-FS4YJM22.js +2 -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-HGL3RM7P.js +8 -0
  59. package/dist/{chunk-HFXQU7UZ.js → chunk-HMGNPFXP.js} +1 -1
  60. package/dist/chunk-I2S6KNZW.js +2 -0
  61. package/dist/chunk-IACKIGPX.js +2 -0
  62. package/dist/{chunk-C4LYBQT3.js → chunk-IRDMEYJB.js} +2 -2
  63. package/dist/{chunk-4IOOBSNB.js → chunk-ISAE457F.js} +1 -1
  64. package/dist/{chunk-AFCEFOIK.js → chunk-J5BUMF3G.js} +1 -1
  65. package/dist/chunk-JFAFKHDX.js +4 -0
  66. package/dist/{chunk-6E5UYAEB.js → chunk-KFAYCOTB.js} +1 -1
  67. package/dist/{chunk-UOGJUJCF.js → chunk-KGP7NSXH.js} +1 -1
  68. package/dist/chunk-KHDUQ33H.js +2 -0
  69. package/dist/chunk-KHU7C6EE.js +2 -0
  70. package/dist/chunk-LMJTY32X.js +6 -0
  71. package/dist/chunk-M5JQXOCE.js +12 -0
  72. package/dist/chunk-MJFYMMX2.js +2 -0
  73. package/dist/chunk-MMI3VSCA.js +6 -0
  74. package/dist/{chunk-NLIOFVMP.js → chunk-MZ2PXBKK.js} +1 -1
  75. package/dist/chunk-N2ZW5635.js +6 -0
  76. package/dist/chunk-NNZV5RCE.js +2 -0
  77. package/dist/{chunk-7IBNOVML.js → chunk-NSSKSXCT.js} +1 -1
  78. package/dist/{chunk-PISZLYS5.js → chunk-O4O4KL6Z.js} +1 -1
  79. package/dist/{chunk-QO6PAA7Q.js → chunk-OBBXDBEE.js} +2 -2
  80. package/dist/chunk-Q4P2L7DY.js +2 -0
  81. package/dist/chunk-Q4PUOA46.js +61 -0
  82. package/dist/chunk-QPZRHAYK.js +4 -0
  83. package/dist/chunk-QZWQCHXK.js +11 -0
  84. package/dist/{chunk-7AEC572G.js → chunk-R2K2SGGE.js} +1 -1
  85. package/dist/{chunk-3FN66LTP.js → chunk-RFHMDQXZ.js} +1 -1
  86. package/dist/chunk-RGEAEAZB.js +20 -0
  87. package/dist/{chunk-GEAWRRR7.js → chunk-RH2OAIJI.js} +1 -1
  88. package/dist/chunk-RKWJG3WW.js +19 -0
  89. package/dist/{chunk-IU53F4ZV.js → chunk-ROPXE7TF.js} +1 -1
  90. package/dist/chunk-RY4OOGSC.js +14 -0
  91. package/dist/chunk-S74MQRDN.js +2 -0
  92. package/dist/{chunk-ZWAZ4QU4.js → chunk-SB6MBQKR.js} +1 -1
  93. package/dist/{chunk-XDERMCAU.js → chunk-SQJWMOJQ.js} +1 -1
  94. package/dist/{chunk-ELBPBHTE.js → chunk-SUDAFBVD.js} +2 -2
  95. package/dist/chunk-VJUIW2ES.js +4 -0
  96. package/dist/chunk-VXD5667K.js +7 -0
  97. package/dist/chunk-WAGJLR5X.js +356 -0
  98. package/dist/chunk-WGG5XURS.js +13 -0
  99. package/dist/chunk-WRHZCHZY.js +2 -0
  100. package/dist/chunk-XDW2RGIL.js +7 -0
  101. package/dist/chunk-YANCBRER.js +3 -0
  102. package/dist/{chunk-THEZSXZM.js → chunk-YJ6AQ2KP.js} +1 -1
  103. package/dist/chunk-Z56AWGVY.js +2 -0
  104. package/dist/{chunk-PTP3WS3N.js → chunk-ZA67EBYF.js} +1 -1
  105. package/dist/chunk-ZKYYZ5NO.js +6 -0
  106. package/dist/{chunk-TPG2T5GH.js → chunk-ZNANAARA.js} +1 -1
  107. package/dist/cover-cmd-Y5L4O4Q3.js +2 -0
  108. package/dist/{credentials-52QRPGET.js → credentials-L63BBW2S.js} +1 -1
  109. package/dist/descriptor-SL5A7RQE.js +2 -0
  110. package/dist/distill-cmd-EYCCCFL3.js +2 -0
  111. package/dist/evidence-UAFPTHQX.js +2 -0
  112. package/dist/evolve-cmd-2SPNVTT4.js +2 -0
  113. package/dist/{exit-manager-IUHAXFJ6.js → exit-manager-VCSIUYBR.js} +1 -1
  114. package/dist/explain-JIXUWEFJ.js +2 -0
  115. package/dist/explain-cmd-55WRDIMW.js +9 -0
  116. package/dist/explain-cmd-RIDEMDMY.js +3 -0
  117. package/dist/extract-bind-DS4UP23P.js +5 -0
  118. package/dist/extract-cmd-PMZHMMU7.js +6 -0
  119. package/dist/gaps-cmd-P2DRK6FW.js +2 -0
  120. package/dist/gate-FACZRGOC.js +2 -0
  121. package/dist/{generate-headless-WG6ZPINI.js → generate-headless-C3UZKDS5.js} +2 -2
  122. package/dist/headless-io-GXHKDPHB.js +2 -0
  123. package/dist/index.js +55 -54
  124. package/dist/ingest-4CGBXC2L.js +2 -0
  125. package/dist/ingest-cmd-FJ3SLTT4.js +3 -0
  126. package/dist/interactive-bind-SJLDJULN.js +7 -0
  127. package/dist/interrupt-guard-UREUWNRL.js +2 -0
  128. package/dist/lifecycle-cmd-56OZT4LY.js +2 -0
  129. package/dist/list-cmd-JB2ABACD.js +3 -0
  130. package/dist/list-commands-PGAX5HRB.js +2 -0
  131. package/dist/logical-ids-QRRUXV5E.js +2 -0
  132. package/dist/login-flow-4OJ34VDP.js +2 -0
  133. package/dist/maintenance-cmd-E3HEEVQW.js +2 -0
  134. package/dist/open-MQLQKFAW.js +2 -0
  135. package/dist/{persist-recorded-session-XKPZX7HW.js → persist-recorded-session-WFU4M4SQ.js} +1 -1
  136. package/dist/pipeline-EYQUM27P.js +2 -0
  137. package/dist/readmodel-MPTENJ2R.js +2 -0
  138. package/dist/reconcile-cmd-TFFYCTCY.js +8 -0
  139. package/dist/{recording-banner-2TNKQHP2.js → recording-banner-PH2NND2X.js} +1 -1
  140. package/dist/{require-project-folder-SJG5FQY6.js → require-project-folder-RD2UAB7E.js} +1 -1
  141. package/dist/revert-3TKLOYQA.js +2 -0
  142. package/dist/review-cmd-SL52N4TM.js +4 -0
  143. package/dist/run-NODOSQUL.js +2 -0
  144. package/dist/run-test-md-I6O4H7B2.js +17 -0
  145. package/dist/{scrollback-6GINSTL2.js → scrollback-JLPJR25X.js} +1 -1
  146. package/dist/sessions-cmd-STHKGDX4.js +23 -0
  147. package/dist/signals-cmd-LXHZQLXZ.js +2 -0
  148. package/dist/{skill-installer-M6AREQQW.js → skill-installer-BJLHH3DW.js} +1 -1
  149. package/dist/spawner-UDCF35OA.js +2 -0
  150. package/dist/tcg-generate-E7H4LF7Y.js +2 -0
  151. package/dist/testmd-actions-FMVUXZGX.js +2 -0
  152. package/dist/token-refresh-OGBTJGZ2.js +2 -0
  153. package/dist/turn-preflight-I5SM4UIZ.js +2 -0
  154. package/dist/ui-JEJGTURD.js +4 -0
  155. package/dist/{validate-basic-FO7C2URG.js → validate-basic-WILRWRRP.js} +1 -1
  156. package/dist/{version-check-PHZX5WS7.js → version-check-TXTCVX2N.js} +1 -1
  157. package/dist/view-cmd-QE2FS3GB.js +436 -0
  158. package/package.json +6 -6
  159. package/dist/CliUploadProgress-DMH3C3UZ.js +0 -2
  160. package/dist/EvidenceViewOffer-HEBQ7C4H.js +0 -2
  161. package/dist/FolderPicker-5S23OTSY.js +0 -2
  162. package/dist/HelpView-YYKTP4JH.js +0 -2
  163. package/dist/SingleShotApp-5TYM356H.js +0 -2
  164. package/dist/TestMdRunView-BIVXQE54.js +0 -2
  165. package/dist/chunk-54TKNWXF.js +0 -5
  166. package/dist/chunk-5MTRNUAK.js +0 -2
  167. package/dist/chunk-7KDNH6JP.js +0 -10
  168. package/dist/chunk-7YRNLGUT.js +0 -11
  169. package/dist/chunk-C6S4IEBC.js +0 -2
  170. package/dist/chunk-DJL47DYJ.js +0 -8
  171. package/dist/chunk-H6QJ4YU7.js +0 -2
  172. package/dist/chunk-J75KVNX5.js +0 -18
  173. package/dist/chunk-MUPHP5W6.js +0 -27
  174. package/dist/chunk-NAYAVVTP.js +0 -6
  175. package/dist/chunk-P5XBCJYQ.js +0 -7
  176. package/dist/chunk-Q2I65L2W.js +0 -6
  177. package/dist/chunk-QCEWUUE6.js +0 -55
  178. package/dist/chunk-V2GYBVSM.js +0 -2
  179. package/dist/chunk-Y44AETOW.js +0 -2
  180. package/dist/chunk-YCNCW4O4.js +0 -8
  181. package/dist/evidence-O4AON5FU.js +0 -2
  182. package/dist/list-commands-VJAL4J3O.js +0 -2
  183. package/dist/login-flow-VZ2MITFA.js +0 -2
  184. package/dist/pipeline-CADTHPDV.js +0 -2
  185. package/dist/run-test-md-INJKPE2I.js +0 -13
  186. package/dist/tcg-generate-VKFXR5JT.js +0 -2
  187. package/dist/testmd-actions-4QLHD74A.js +0 -2
  188. package/dist/token-refresh-2HKIYD4Y.js +0 -2
@@ -0,0 +1,9 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as z}from"./chunk-I2S6KNZW.js";import{b as H,d as Q}from"./chunk-DM2GL24Z.js";import{d as j}from"./chunk-JFAFKHDX.js";import{a as G}from"./chunk-5446YVGQ.js";import{d as U}from"./chunk-KHDUQ33H.js";import{a as B}from"./chunk-D5T4ARTB.js";import{a as I,c as O}from"./chunk-HMGNPFXP.js";import{randomBytes as Ze}from"crypto";function X(t,e){let n=Math.min(t.length,e.length),s=0,r=0,a=0;for(let o=0;o<n;o++)s+=t[o]*e[o],r+=t[o]*t[o],a+=e[o]*e[o];return r===0||a===0?0:s/(Math.sqrt(r)*Math.sqrt(a))}function K(t,e,n){return n*t+(1-n)*e}var J=.7;import{readFileSync as xe,writeFileSync as Ae,renameSync as ve,mkdirSync as ke}from"fs";import{dirname as Se,join as W}from"path";function Ee(t){return W(t,"embeddings")}function Re(t){let e=t.indexOf(":");return e>=0?t.slice(e+1):t}function Y(t,e,n){let s=Re(n);return W(Ee(t),e,s.slice(0,2),`${s.slice(2)}.f32`)}function Z(t,e,n){try{let s=xe(Y(t,e,n)),r=new Float32Array(Math.floor(s.length/4));for(let a=0;a<r.length;a++)r[a]=s.readFloatLE(a*4);return r}catch{return null}}function q(t,e,n,s){try{let r=Y(t,e,n);ke(Se(r),{recursive:!0});let a=Buffer.alloc(s.length*4);for(let d=0;d<s.length;d++)a.writeFloatLE(s[d],d*4);let o=`${r}.tmp`;Ae(o,a),ve(o,r)}catch(r){process.stderr.write(`[embed] Failed to cache vector: ${r instanceof Error?r.message:String(r)}
3
+ `)}}var $e=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar"],Ce=["source_read","source_grep"],Me=[...$e,...Ce],re=50,N=200,se=10,ie=50,ee=20,Te=200,De=50;function D(t,e,n){let s=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(s,n))}function k(t,e){let n=t[e];if(typeof n!="string"||n.length===0)throw new y(`param "${e}" must be a non-empty string`);return n}function v(t,e){let n=t[e];if(n==null)return null;if(typeof n!="string")throw new y(`param "${e}" must be a string when present`);return n}var y=class extends Error{};function P(t,e){let n=t.getNode(e);return n?{cid:e,label:n.label,content:n.content,trust:t.trust.get(e)??null,freshness:t.stale(e)}:null}function te(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function oe(t,...e){let n=te(t);if(n.size===0)return 0;let s=t.trim().toLowerCase(),r=0;for(let a of e){let o=te(a);if(o.size===0)continue;let d=0;for(let c of n)o.has(c)&&d++;let u=n.size+o.size-d,m=u===0?0:d/u;s&&a.toLowerCase().includes(s)&&(m=Math.max(m,.9)),r=Math.max(r,m)}return r}function Fe(t,e){let n=k(e,"cid"),s=v(e,"type"),r=v(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new y('param "direction" must be out|in|both');let a=D(e.limit,re,N),o=[];return(r==="out"||r==="both")&&o.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&o.push(...t.edgesInto(n)),o.filter(d=>s==null||d.type===s).slice(0,a)}function Le(t,e){let n=k(e,"source_id"),s=t.heads.get(n)??null,r=[];for(let a of t.nodeLabel.keys()){let o=t.derivesInto(a).filter(u=>u.props.source_id===n).map(u=>({source_cid:u.props.source_cid,anchor:u.props.anchor??null}));if(o.length===0)continue;let d=P(t,a);if(d&&(r.push({...d,pins:o,pinned_to_head:s!=null&&o.some(u=>u.source_cid===s)}),r.length>=N))break}return r}function Ge(t,e){let n=k(e,"label"),s=v(e,"trust"),r=v(e,"freshness"),a=D(e.limit,re,N),o=[];for(let{cid:d}of t.byLabel(n)){let u=P(t,d);if(u&&!(s!=null&&u.trust!==s)&&!(r!=null&&u.freshness!==r)&&(o.push(u),o.length>=a))break}return o}function Ne(t){return t.staleList().map(({cid:e,state:n})=>{let s=t.getNode(e);return{cid:e,state:n,label:s?.label??null,title:s?.content.title??null}})}function Pe(t,e){let n=k(e,"text"),s=v(e,"label")??"usecase",r=D(e.k,se,ie),a=[];for(let{cid:o,content:d}of t.byLabel(s)){let u=String(d.title??""),m=String(d.summary??""),c=oe(n,u,m);c<=0||a.push({cid:o,title:u,summary:m,score:Math.round(c*1e3)/1e3,trust:t.trust.get(o)??null,freshness:t.stale(o)})}return a.sort((o,d)=>d.score-o.score||o.cid.localeCompare(d.cid)),a.slice(0,r)}function ae(t,e,n){let s=t.heads.get(n);if(typeof s!="string"){let o=[...t.heads.keys()].sort().join(", ");throw new y(`unknown source_id "${n}" \u2014 known: ${o||"(none)"}`)}if(t.mediaOf(s).format==="image")throw new y(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=t.getNode(s)?.content?.blob,a=typeof r=="string"?U(e,r):null;if(a==null)throw new y(`source "${n}" blob is missing from the store`);return{head:s,lines:a.toString("utf8").replace(/\n$/,"").split(`
4
+ `)}}function Ve(t,e,n){return t.slice(e-1,n).map((s,r)=>`${String(e+r).padStart(4,"0")}| ${s}`).join(`
5
+ `)}function Ie(t,e,n){let s=k(e,"source_id"),r=v(e,"anchor"),a=e.line_range;if(r!=null&&a!=null)throw new y("give anchor OR line_range, not both");let{head:o,lines:d}=ae(t,n,s),u=d.length,m,c;if(r!=null){let f=/^L(\d+)-L(\d+)$/.exec(r);if(!f)throw new y(`anchor "${r}" is not L<a>-L<b>`);let h=Number(f[1]),b=Number(f[2]);if(h<1||b<h||b>u)throw new y(`anchor "${r}" does not resolve (source has ${u} lines)`);m=Math.max(1,h-ee),c=Math.min(u,b+ee)}else if(a!=null){if(!Array.isArray(a)||a.length!==2||!a.every(b=>Number.isInteger(b)))throw new y('param "line_range" must be [from_line, to_line]');let[f,h]=a;if(f<1||h<f)throw new y('param "line_range" must be 1-based with from \u2264 to');if(f>u)throw new y(`line_range starts past the end (source has ${u} lines)`);m=f,c=Math.min(h,u)}else m=1,c=u;return c=Math.min(c,m+Te-1),{window:Ve(d,m,c),from_line:m,to_line:c,source_cid:o}}function Oe(t,e,n){let s=k(e,"pattern"),r=v(e,"source_id"),a;try{a=new RegExp(s,"u")}catch(m){throw new y(`invalid pattern: ${m instanceof Error?m.message:String(m)}`)}let o=r!=null?[r]:[...t.heads.keys()].sort(),d=[],u=!1;e:for(let m of o){if(r==null){let f=t.heads.get(m);if(typeof f!="string"||t.mediaOf(f).format==="image")continue}let{lines:c}=ae(t,n,m);for(let f=0;f<c.length;f++)if(a.test(c[f])){if(d.length>=De){u=!0;break e}d.push({source_id:m,line:f+1,text:c[f]})}}return{matches:d,truncated:u}}function Be(t,e,n,s){try{switch(e){case"get_node":return{ok:!0,result:P(t,k(n,"cid"))};case"get_edges":return{ok:!0,result:Fe(t,n)};case"find_by_provenance":return{ok:!0,result:Le(t,n)};case"match_by_type":return{ok:!0,result:Ge(t,n)};case"stale_nodes":return{ok:!0,result:Ne(t)};case"search_similar":return{ok:!0,result:Pe(t,n)};case"source_read":case"source_grep":{if(s==null)throw new y("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?Ie:Oe)(t,n,s)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${Me.join(", ")}`}}}catch(r){return r instanceof y?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}}var ne="assurance.sim";function Ue(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
6
+ `)}async function je(t,e,n){let s=k(e,"text"),r=v(e,"label")??"usecase",a=D(e.k,se,ie),o=[];for(let{cid:u,content:m}of t.byLabel(r)){if(t.superseded.has(u))continue;let c=String(m.title??""),f=String(m.summary??""),h=String(m.description??"");o.push({cid:u,title:c,summary:f,description:h,lex:oe(s,c,f,h)})}let d=u=>{let m=[];for(let c of o){let f=u(c);f.score<=0||m.push({cid:c.cid,title:c.title,summary:c.summary,score:Math.round(f.score*1e3)/1e3,trust:t.trust.get(c.cid)??null,freshness:t.stale(c.cid),...f.dense!==void 0?{dense_score:Math.round(f.dense*1e3)/1e3,lexical_score:Math.round(c.lex*1e3)/1e3}:{}})}return m.sort((c,f)=>f.score-c.score||c.cid.localeCompare(f.cid)),m.slice(0,a)};try{let u=n.readVector??Z,m=n.writeVector??q,c=n.alpha??J,{alias:f}=await n.resolveAlias(ne),h=new Map,b=[],R=[];for(let _ of o){let x=u(n.contextDir,f,_.cid);x?h.set(_.cid,x):(b.push(_.cid),R.push(Ue(_)))}let{vectors:S}=await n.embed(ne,[s,...R]),$=Float32Array.from(S[0]);for(let _=0;_<b.length;_++){let x=Float32Array.from(S[_+1]);h.set(b[_],x),m(n.contextDir,f,b[_],x)}return d(_=>{let x=h.get(_.cid),w=x?X($,x):0;return{score:K(w,_.lex,c),dense:w}})}catch{return d(u=>({score:u.lex}))}}async function ce(t,e,n,s){if(e==="search_similar"&&s)try{return{ok:!0,result:await je(t,n,s)}}catch(r){return r instanceof y?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}return Be(t,e,n,s?.contextDir)}import{readFileSync as He,writeFileSync as Qe,renameSync as ze,mkdirSync as Xe}from"fs";import{dirname as Ke,join as Je}from"path";var V=1,We=720*60*1e3;function F(t){return Je(O,"embeddings",`alias-${t}.json`)}function le(t,e=Date.now()){return t!==null&&e-t.fetchedAt<We}function ue(t){try{let e=JSON.parse(He(t,"utf-8"));return e.wrapperVersion!==V||typeof e.purposes!="object"||e.purposes===null?null:{wrapperVersion:V,writtenByVersion:String(e.writtenByVersion??""),purposes:e.purposes}}catch{return null}}function de(t,e,n=F(t)){let r=ue(n)?.purposes?.[e];return!r||typeof r.alias!="string"||typeof r.dims!="number"||typeof r.fetchedAt!="number"?null:{alias:r.alias,dims:r.dims,fetchedAt:r.fetchedAt}}function me(t,e,n,s=F(t)){try{Xe(Ke(s),{recursive:!0});let a=ue(s)?.purposes??{};a[e]={alias:n.alias,dims:n.dims,fetchedAt:Date.now()};let o={wrapperVersion:V,writtenByVersion:I,purposes:a},d=`${s}.tmp`;Qe(d,JSON.stringify(o,null,2)+`
7
+ `),ze(d,s)}catch(r){process.stderr.write(`[embed] Failed to save alias cache: ${r instanceof Error?r.message:String(r)}
8
+ `)}}function Ye(t){return t.TESTMUAI_ENV==="stage"?"stage":"prod"}function fe(t){let e=t.env??process.env,n=t.auth?.TESTMUAI_BASIC_AUTH||e.TESTMUAI_BASIC_AUTH;if(n)return{authorization:`Basic ${n}`};let s=t.auth?.TESTMUAI_API_KEY||e.TESTMUAI_API_KEY;return s?{authorization:`Bearer ${s}`}:{}}async function ge(t,e={}){let n=e.env??process.env,s=Ye(n),r=e.aliasCacheFile??F(s),a=e.now??Date.now,o=de(s,t,r);if(le(o,a()))return{alias:o.alias,dims:o.dims};let u=`${G(n)}/assurance/embed/alias?purpose=${encodeURIComponent(t)}`,m=await(e.fetchImpl??fetch)(u,{method:"GET",headers:fe(e)});if(!m.ok)throw new Error(`embed alias resolve failed: ${m.status}`);let c=await m.json();return me(s,t,{alias:c.alias,dims:c.dims},r),{alias:c.alias,dims:c.dims}}async function pe(t,e,n={}){let s=n.env??process.env,r=G(s),a=await(n.fetchImpl??fetch)(`${r}/assurance/embed`,{method:"POST",headers:{...fe(n),"content-type":"application/json"},body:JSON.stringify({purpose:t,input:e})});if(!a.ok)throw new Error(`embed failed: ${a.status}`);return await a.json()}var qe=2,he=10,et=2;function _e(t,e,n){return t.map(s=>{let r=e.find(a=>a.id===s.id);return r&&r.selected_index!=null&&r.selected_index>=0&&r.selected_index<s.options.length?{id:s.id,resolution:"answered",selected_index:r.selected_index,free_text:null}:r&&r.free_text!=null&&s.allow_free_text?{id:s.id,resolution:"answered",selected_index:-1,free_text:r.free_text}:n.explicitAcceptDefaults?{id:s.id,resolution:"assumed-default",selected_index:s.recommended_index,flagged:!0}:{id:s.id,resolution:"deferred",selected_index:null}})}async function At(t,e,n,s,r=()=>{},a){let o=(i,l)=>r(i,l,t.session_id),d=(process.env.ASSURANCE_LOG_LEVEL??"info").toLowerCase()==="debug",u={contextDir:e.contextDir,resolveAlias:i=>ge(i,{env:process.env,auth:e.auth}),embed:(i,l)=>pe(i,l,{env:process.env,auth:e.auth})},m=0,c=e.agent(t,{auth:e.auth,onWarn:i=>{o("warn",i),e.out(i)},onStderr:i=>o("agent_stderr",i)}),f=null,h=null,b;e.chat?.attachSender?.(i=>c.send(i)),e.initialMessage&&(c.send({type:"user_message",message_id:`msg-${t.session_id}-${Ze(3).toString("hex")}`,text:e.initialMessage}),o("user_message_sent",{chars:e.initialMessage.length,...d?{text:e.initialMessage}:{}}),e.emit?.({type:"message_sent",sid:t.session_id,chars:e.initialMessage.length}),e.chat?.note(`delivered your message to the agent: "${e.initialMessage}"`));let R,S=0,$=0,_=0,x,w=H(),C=e.progress??e.out;try{for await(let i of c.events){try{e.chat?.onAgentEvent(i)}catch(l){o("chat_mirror_error",{event_type:i.type,message:l instanceof Error?l.message:String(l)})}if(i.type==="reasoning_delta"?(m+=i.text.length,process.env.KANE_TRACE_REASONING&&o("reasoning_delta",i.text)):o(i.type,i),i.type==="reasoning_done"&&o("reasoning_chars",m),i.type==="progress")C(`\u2026 ${i.stage}${i.n?` #${i.n}`:""}`),e.emit?.({type:"agent_activity",kind:"progress",label:`${i.stage}${i.n?` #${i.n}`:""}`});else if(i.type==="reasoning_delta"||i.type==="reasoning_done"||i.type==="tool_activity"||i.type==="decision_activity"){e.onStreamEvent?.(i);let l=w;if(w=Q(w,i),w===l)continue;i.type==="reasoning_delta"?w.liveThinking===i.text&&C("\u2237 thinking\u2026"):i.type==="reasoning_done"?i.present&&(C(`thought for ${(i.took_ms/1e3).toFixed(1)}s`),e.emit?.({type:"agent_activity",kind:"thinking_done",label:`thought for ${(i.took_ms/1e3).toFixed(1)}s`})):i.type==="tool_activity"?i.status!=="done"&&(C(w.activity[w.activity.length-1].label),e.emit?.({type:"agent_activity",kind:"tool",label:w.activity[w.activity.length-1].label})):(C(`\xB7 ${w.activity[w.activity.length-1].label}`),e.emit?.({type:"agent_activity",kind:"decision",label:w.activity[w.activity.length-1].label}))}else if(i.type==="usage")x=i.total_credits,e.emit?.({type:"usage",credits:i.credits,total_credits:i.total_credits});else if(i.type==="graph_query"){let l=await ce(e.graphSlot?.current??s,i.method,i.params??{},u),A=l.ok?{type:"graph_result",id:i.id,ok:!0,result:l.result}:{type:"graph_result",id:i.id,ok:!1,error:l.error};o("graph_result",d?{id:i.id,method:i.method,ok:l.ok,result:l.ok?l.result:l.error}:{id:i.id,method:i.method,ok:l.ok}),c.send(A)}else if(i.type==="session_paused")b=i;else if(i.type==="ask_user"){i.text&&(e.chat?e.chat.ledger({kind:"agent",text:i.text}):e.out(i.text));let l=t.mode;if(l!=="interactive"){let g=i.questions.filter(p=>p.risk==="high");if(l==="ci"&&g.length>0){R=g,c.kill();break}if(l==="agent"&&g.length>0){o("pause_requested",{high:g.map(p=>p.id)}),c.send({type:"pause"});continue}let E=_e(i.questions,[],{explicitAcceptDefaults:!0});S+=E.length;for(let p of E)o("assumed_default",{id:p.id,resolution:p.resolution}),e.emit?.({type:"assumed_default",id:p.id,selected_index:p.selected_index,risk:i.questions.find(T=>T.id===p.id)?.risk});let M={type:"user_response",answers:E.map(p=>({id:p.id,selected_index:p.resolution==="deferred"?null:p.selected_index,free_text:null}))};c.send(M);continue}let A=await e.ask(i.questions),ye=_e(i.questions,A,{explicitAcceptDefaults:!1}),we={type:"user_response",answers:i.questions.map(g=>{let E=A.find(p=>p.id===g.id);if(E?.free_text!=null){let p=n.get(g.id)??0;if(!g.allow_free_text||p>=qe){let T=g.options[g.recommended_index]?.label??"recommended option";if(S+=1,e.emit?.({type:"assumed_default",id:g.id,selected_index:g.recommended_index,risk:g.risk}),e.chat?.noteCoercion)e.chat.noteCoercion(g,T);else{let L=g.text.replace(/\?+\s*$/,""),be=L.length<=36?L:`${L.slice(0,33)}\u2026`;e.out(`note: couldn't use a typed answer for "${be}" \u2014 kept the recommended option (${T})`)}return{id:g.id,selected_index:g.recommended_index,free_text:null}}return n.set(g.id,p+1),{id:g.id,selected_index:null,free_text:E.free_text}}let M=ye.find(p=>p.id===g.id);return M.resolution==="deferred"?{id:g.id,selected_index:null,free_text:null}:{id:g.id,selected_index:M.selected_index,free_text:null}})};c.send(we)}else if(i.type==="chat_ops"&&!e.chat){let l=i.chat_ops??i,A=Array.isArray(l.ops)?l.ops.length:0;if(A===0)l.text&&e.out(l.text),c.send({type:"session_complete"}),o("headless_zero_op_chat_turn_complete",{chars:l.text?.length??0});else if(_<et)_+=1,c.send({type:"user_message",message_id:`nochat-${t.session_id}-${_}`,text:"[auto-repair] chat ops are unavailable in this mode \u2014 commit through finalize_design, or finish if nothing remains."}),o("headless_chat_ops_nudge",{n:_,ops:A});else{h="agent kept sending chat ops in a mode with no chat plane",e.out("error: agent kept sending chat ops in a mode with no chat plane \u2014 closing the session"),o("headless_chat_ops_terminal",{ops:A}),c.kill();break}}else if(i.type===(a.terminalEventType??"proposal")){let l=await a.onProposalEvent(i[i.type]);if(f=l.proposal,l.error&&(h=l.error),l.receipt)e.emit?.(l.receipt.event),t.mode!=="interactive"?($+=1,l.sessionComplete||$>=he?(l.sessionComplete||(e.out(`warning: ${he} commits without completion \u2014 closing the session (runaway guard)`),o("receipt_runaway_cap",{commits:$})),c.send({type:"session_complete"}),o("session_complete_sent",{commit_n:l.receipt.event.commit_n,runaway:!l.sessionComplete})):(c.send({type:"user_message",message_id:`receipt-${t.session_id}-${String(l.receipt.event.commit_n??0)}`,text:l.receipt.text}),o("receipt_sent",{commit_n:l.receipt.event.commit_n,chars:l.receipt.text.length}))):e.chat?.holdReceipt&&(e.chat.holdReceipt(l.receipt.text),o("receipt_held",{commit_n:l.receipt.event.commit_n}));else if(l.error&&t.mode!=="interactive"){e.out("error: commit failed with no repair channel \u2014 closing the session"),o("headless_commit_error_terminal",{error:l.error}),c.kill();break}}else if(i.type==="error"){h=i.message;let l=i.failed_proposal;l&&o("failed_proposal",l)}}}finally{c.kill()}return{proposal:f,error:h,paused:b,highRisk:R,...S>0?{assumedDefaults:S}:{},...x!==void 0?{creditsTotal:x}:{}}}var tt={kind:"system",id:"distiller"};function Rt(t,e=n=>process.stderr.write(n+`
9
+ `)){try{let n=B(t),{watermark:s}=j(t),r=z({contextDir:t,graph:n,watermark:s,by:tt});if(r.errors){let a=r.errors.map(o=>`${o.code}: ${o.detail}`).join("; ");return e(`warning: style-note distill skipped \u2014 ${a}`),{minted:0,error:a}}return{minted:r.minted,error:null}}catch(n){let s=n instanceof Error?n.message:String(n);return e(`warning: style-note distill skipped \u2014 ${s}`),{minted:0,error:s}}}export{ce as a,ge as b,pe as c,qe as d,_e as e,At as f,Rt as g};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as l}from"./chunk-TJWU7DOO.js";import{a as m}from"./chunk-UOGJUJCF.js";import{a as p}from"./chunk-RZ4F3BHX.js";import{a as f}from"./chunk-IECUFWIZ.js";import{a as c,c as s,h as a,w as u}from"./chunk-HFXQU7UZ.js";var v="/public/skills/kane-cli";function C(){try{let n=new f().getDefaultEnv();if(n in u)return n}catch{}return"prod"}function k(){return`${m(C()).controllerBaseUrl}${v}`}import{readFileSync as S,writeFileSync as E,mkdirSync as g}from"fs";import{join as d}from"path";var h=d(s,"skill-check.json"),y=3600*1e3;function V(){try{let n=JSON.parse(S(h,"utf-8"));if(Date.now()-n.checkedAt<y)return n}catch{}return null}function A(n){try{g(s,{recursive:!0}),E(h,JSON.stringify({map:n,checkedAt:Date.now()}))}catch{}}function I(){for(let{dir:n}of a)try{let t=S(d(n,"VERSION"),"utf-8").trim();if(t)return t}catch{}return null}function M(n,t){let i=Object.keys(n.versions??{});if(i.length===0)return null;let o=i.slice().sort((r,e)=>l(r,e));for(let r of o){let e=n.versions[r]?.kaneCliMinVersion;if(!e||l(t,e)<=0)return r}return null}async function U(){try{let n=V()?.map;if(!n){let o=new AbortController,r=setTimeout(()=>o.abort(),5e3),e=await p(k(),{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(r),!e.ok)return null;n=await e.json(),A(n)}let t=M(n,c);if(!t)return null;let i=I();return i===null?{current:null,latestCompatible:t}:l(i,t)>0?{current:i,latestCompatible:t}:null}catch{return null}}export{k as a,M as b,U as c};
2
+ import{b as l}from"./chunk-5FD6ZXB5.js";import{a as m}from"./chunk-KGP7NSXH.js";import{a as p}from"./chunk-RZ4F3BHX.js";import{a as f}from"./chunk-4CRKK5WV.js";import{a as c,c as s,h as a,w as u}from"./chunk-HMGNPFXP.js";var v="/public/skills/kane-cli";function C(){try{let n=new f().getDefaultEnv();if(n in u)return n}catch{}return"prod"}function k(){return`${m(C()).controllerBaseUrl}${v}`}import{readFileSync as S,writeFileSync as E,mkdirSync as g}from"fs";import{join as d}from"path";var h=d(s,"skill-check.json"),y=3600*1e3;function V(){try{let n=JSON.parse(S(h,"utf-8"));if(Date.now()-n.checkedAt<y)return n}catch{}return null}function A(n){try{g(s,{recursive:!0}),E(h,JSON.stringify({map:n,checkedAt:Date.now()}))}catch{}}function I(){for(let{dir:n}of a)try{let t=S(d(n,"VERSION"),"utf-8").trim();if(t)return t}catch{}return null}function M(n,t){let i=Object.keys(n.versions??{});if(i.length===0)return null;let o=i.slice().sort((r,e)=>l(r,e));for(let r of o){let e=n.versions[r]?.kaneCliMinVersion;if(!e||l(t,e)<=0)return r}return null}async function U(){try{let n=V()?.map;if(!n){let o=new AbortController,r=setTimeout(()=>o.abort(),5e3),e=await p(k(),{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(r),!e.ok)return null;n=await e.json(),A(n)}let t=M(n,c);if(!t)return null;let i=I();return i===null?{current:null,latestCompatible:t}:l(i,t)>0?{current:i,latestCompatible:t}:null}catch{return null}}export{k as a,M as b,U as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as B}from"./chunk-S3DAAAE5.js";import{a as g}from"./chunk-ZWAZ4QU4.js";import{x as s}from"./chunk-HFXQU7UZ.js";import{a as w}from"./chunk-HCBYKLMW.js";import{a as x,b as t,c as h,i as P,j as S}from"./chunk-C44QQJR4.js";import{a as C}from"./chunk-6YGTRKDT.js";import{e as T}from"./chunk-UR6MHSHU.js";var o=T(C(),1);var e=T(w(),1);function D({defaultName:i,onSubmit:c}){let[d,p]=(0,o.useState)("confirm"),[f,a]=(0,o.useState)(""),[m,u]=(0,o.useState)(null),l=(0,o.useMemo)(()=>f.trim()||i,[f,i]);return P((n,r)=>{if(d==="confirm"){if(n==="y"||n==="Y"){a(i),p("name");return}if(n==="n"||n==="N"||r.escape||r.ctrl&&n==="c"){c(null);return}if(r.return){c(i);return}return}if(r.return){if(!B(l)){u(`name "${l}" is invalid; allowed: letters, digits, underscore, hyphen`);return}c(l);return}if(r.escape||r.ctrl&&n==="c"){c(null);return}if(r.backspace||r.delete){a(v=>v.slice(0,-1)),u(null);return}n&&!r.ctrl&&!r.meta&&(a(v=>v+n),u(null))}),d==="confirm"?(0,e.jsx)(g,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsx)(t,{color:s.orange,children:i})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[(0,e.jsx)(t,{color:s.dim,children:"enter \u2014 save with this name"}),(0,e.jsx)(t,{color:s.dim,children:"Y \u2014 edit name"}),(0,e.jsx)(t,{color:s.dim,children:"N/esc \u2014 discard session"})]})}):(0,e.jsx)(g,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsxs)(x,{children:[(0,e.jsx)(t,{color:s.orange,children:f}),(0,e.jsx)(t,{inverse:!0,children:" "})]})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[m&&(0,e.jsx)(t,{color:s.red,children:m}),(0,e.jsx)(t,{color:s.dim,children:"enter \u2014 save \xB7 esc \u2014 discard"})]})})}function V(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}async function Y(i){return new Promise(c=>{function d(){let{exit:a}=S(),[m,u]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{if(m){let l=setTimeout(()=>a(),50);return()=>clearTimeout(l)}},[m,a]),(0,e.jsx)(D,{defaultName:i,onSubmit:l=>{c(l),u(!0)}})}let{waitUntilExit:p,unmount:f}=h((0,e.jsx)(d,{}),{stdout:process.stderr,exitOnCtrlC:!1});p().then(()=>{try{f()}catch{}})})}export{D as a,V as b,Y as c};
2
+ import{b as B}from"./chunk-S3DAAAE5.js";import{a as g}from"./chunk-SB6MBQKR.js";import{x as s}from"./chunk-HMGNPFXP.js";import{a as w}from"./chunk-HCBYKLMW.js";import{a as x,b as t,c as h,i as P,j as S}from"./chunk-C44QQJR4.js";import{a as C}from"./chunk-6YGTRKDT.js";import{e as T}from"./chunk-UR6MHSHU.js";var o=T(C(),1);var e=T(w(),1);function D({defaultName:i,onSubmit:c}){let[d,p]=(0,o.useState)("confirm"),[f,a]=(0,o.useState)(""),[m,u]=(0,o.useState)(null),l=(0,o.useMemo)(()=>f.trim()||i,[f,i]);return P((n,r)=>{if(d==="confirm"){if(n==="y"||n==="Y"){a(i),p("name");return}if(n==="n"||n==="N"||r.escape||r.ctrl&&n==="c"){c(null);return}if(r.return){c(i);return}return}if(r.return){if(!B(l)){u(`name "${l}" is invalid; allowed: letters, digits, underscore, hyphen`);return}c(l);return}if(r.escape||r.ctrl&&n==="c"){c(null);return}if(r.backspace||r.delete){a(v=>v.slice(0,-1)),u(null);return}n&&!r.ctrl&&!r.meta&&(a(v=>v+n),u(null))}),d==="confirm"?(0,e.jsx)(g,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsx)(t,{color:s.orange,children:i})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[(0,e.jsx)(t,{color:s.dim,children:"enter \u2014 save with this name"}),(0,e.jsx)(t,{color:s.dim,children:"Y \u2014 edit name"}),(0,e.jsx)(t,{color:s.dim,children:"N/esc \u2014 discard session"})]})}):(0,e.jsx)(g,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsxs)(x,{children:[(0,e.jsx)(t,{color:s.orange,children:f}),(0,e.jsx)(t,{inverse:!0,children:" "})]})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[m&&(0,e.jsx)(t,{color:s.red,children:m}),(0,e.jsx)(t,{color:s.dim,children:"enter \u2014 save \xB7 esc \u2014 discard"})]})})}function V(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}async function Y(i){return new Promise(c=>{function d(){let{exit:a}=S(),[m,u]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{if(m){let l=setTimeout(()=>a(),50);return()=>clearTimeout(l)}},[m,a]),(0,e.jsx)(D,{defaultName:i,onSubmit:l=>{c(l),u(!0)}})}let{waitUntilExit:p,unmount:f}=h((0,e.jsx)(d,{}),{stdout:process.stderr,exitOnCtrlC:!1});p().then(()=>{try{f()}catch{}})})}export{D as a,V as b,Y as c};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{c as o}from"./chunk-ZKYYZ5NO.js";import{a as n}from"./chunk-BC7UVJJB.js";import{existsSync as c}from"fs";function s(t,r){(t.err??t.out)(`error: ${r}`)}function a(t,r){let e=n(t);return c(e)?e:(s(r,"no context store here (run `kane-cli context ingest <files>` first)"),null)}async function p(t,r,e){return e?!0:t.isTTY?t.confirm(`${r}?`):(s(t,`refusing to ${r} without --yes (no TTY to confirm)`),!1)}function d(){return{out:t=>process.stdout.write(t+`
3
+ `),err:t=>process.stderr.write(t+`
4
+ `),isTTY:o(),confirm:async t=>{let{createInterface:r}=await import("readline/promises"),e=r({input:process.stdin,output:process.stdout});try{let i=await e.question(`${t} [y/N] `);return/^y(es)?$/i.test(i.trim())}finally{e.close()}},ask:async t=>{let{createInterface:r}=await import("readline/promises"),e=r({input:process.stdin,output:process.stdout});try{return await e.question(t)}finally{e.close()}}}}export{s as a,a as b,p as c,d};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as j}from"./chunk-GIRXJOJI.js";import{c as m,d as _,f as L}from"./chunk-B2PZAB7J.js";import{a as w,e as N,f as k,g as O,h as I}from"./chunk-IACKIGPX.js";import{existsSync as v,mkdirSync as M,readFileSync as S,renameSync as T,rmSync as P,writeFileSync as J}from"fs";import{dirname as W,join as b}from"path";var $=s=>b(s,"derived"),q=s=>b($(s),"index.json");function x(s,n){let t=n.startsWith("sha256:")?n.slice(7):n;return b($(s),"nodes",t.slice(0,2),t.slice(2)+".json")}function A(){return{applied:{seq:0,hash:null},heads:{},trust:{},nodeLabel:{},forward:{},extracted:[],design_of:{},exec:{},superseded:{},names:{},archivedReason:{},appliedEvents:[],conv:{},media:{}}}function D(s){let n=q(s);if(!v(n))return null;try{let t=JSON.parse(S(n,"utf8"));return t.superseded===void 0||t.names===void 0||t.archivedReason===void 0||t.appliedEvents===void 0||t.conv===void 0||t.media===void 0||t.exec===void 0||t.reverse!==void 0?null:t}catch{return null}}function U(s,n){M(W(s),{recursive:!0});let t=`${s}.tmp-${process.pid}`;J(t,n),T(t,s)}function y(s,n,t,l,a={}){let p=a.writeNodeFiles!==!1,g=new Set(n.extracted),h=new Set(n.appliedEvents);t.forEach((i,o)=>{for(let e of i.nodes){let r=x(s,e.cid);p&&!v(r)&&U(r,JSON.stringify({label:e.label,content:e.content})+`
3
+ `),!(e.cid in n.trust)&&e.content.derived===!0&&(n.trust[e.cid]="derived"),n.nodeLabel[e.cid]=e.label}i.proposal_id!=null&&typeof i.extraction_of=="string"&&g.add(i.extraction_of),i.design_of&&((n.design_of??={})[i.design_of.uc_cid]={engine:i.design_of.engine,seq:i.seq});for(let e of i.executions??[])((n.exec??={})[e.about]??=[]).push(e);for(let e of i.edges){let{quote:r,...d}=e.props,c=n.forward[e.src]??=[];c.some(u=>u.ecid===e.ecid)||c.push({...e,props:d}),i.proposal_id!=null&&e.type===N.DERIVES&&typeof e.props.source_cid=="string"&&g.add(e.props.source_cid)}for(let e of i.review)e.resolution==="approved"||e.resolution==="edited"?(n.trust[e.id]="trusted",delete n.archivedReason[e.id]):e.resolution==="rejected"?(n.trust[e.id]="archived",e.reason?n.archivedReason[e.id]=e.reason:delete n.archivedReason[e.id]):e.resolution==="reset"&&(n.trust[e.id]="derived",delete n.archivedReason[e.id]);for(let e of i.supersessions)e.kind==="node"?e.new===e.old?delete n.superseded[e.old]:n.superseded[e.old]=e.new:n.superseded[e.ecid]=null;for(let e of i.names??[])n.names[e.slug]=e.cid;for(let[e,r]of Object.entries(i.source_head_moves))n.heads[e]=r;for(let e of i.event_ids??[])h.add(e);if(i.media)for(let[e,r]of Object.entries(i.media)){let d=i.source_head_moves[e];typeof d=="string"&&(n.media[d]=r)}if(i.conv){let e=i.source_head_moves[i.conv.source_id];if(typeof e=="string"){let r=n.conv[i.conv.source_id],d=r&&r.chain.length>0?r.chain[r.chain.length-1]:null;i.conv.append_of===d?n.conv[i.conv.source_id]={turns:i.conv.turn,chain:[...r?.chain??[],e]}:n.conv[i.conv.source_id]={turns:i.conv.turn,chain:[e]}}}for(let[e,r]of Object.entries(i.source_head_moves))i.conv?.source_id!==e&&n.conv[e]!==void 0&&(n.conv[e]=typeof r=="string"?{turns:n.conv[e].turns,chain:[r]}:{turns:n.conv[e].turns,chain:[]});n.applied={seq:i.seq,hash:l[o]}}),n.extracted=[...g].sort(),n.appliedEvents=[...h].sort()}function F(s,n){U(q(s),JSON.stringify(n)+`
4
+ `)}function K(s){let n=b(s,"meta.json");if(v(n))try{let t=JSON.parse(S(n,"utf8"));if(t.schema!==w||t.canonicalizer!=="v1")throw new m(`schema fence: store is ${t.schema}/${t.canonicalizer}, this build is ${w}/${"v1"} \u2014 migrate explicitly (kane-cli context rebuild after upgrading)`)}catch(t){throw t instanceof m?t:new m(`corrupt meta.json in ${s} \u2014 fix or remove it`)}}function V(s){K(s);let n=D(s);if(n===null){n=A();let{records:a,hashes:p}=_(s);return y(s,n,a,p),F(s,n),n}let{records:t,hashes:l}=L(s,n.applied.seq,n.applied.hash);return t.length>0&&(y(s,n,t,l),F(s,n)),n}function Z(s){return P($(s),{recursive:!0,force:!0}),V(s)}function Q(s){let n=[],t=[],l=[];try{({records:t,hashes:l}=_(s))}catch(o){return{ok:!1,issues:[o instanceof m?o.message:String(o)],records:0}}let a=A();y(s,a,t,l,{writeNodeFiles:!1});let p=D(s);if(p===null)n.push("derived/index.json missing or corrupt (run kane-cli context rebuild)");else{let o=e=>JSON.stringify(R(e));for(let e of["applied","heads","trust","nodeLabel","forward","extracted","superseded","names","archivedReason","appliedEvents","conv","media","design_of","exec"])o(a[e])!==o(p[e])&&n.push(`derived drift in index.${e} (run kane-cli context rebuild)`)}let g=new Set;for(let o of Object.values(a.forward))for(let e of o)g.add(e.ecid);let h=new Set;for(let o of t)for(let e of o.supersessions)e.kind==="node"?(e.old in a.nodeLabel||n.push(`SUPERSEDE_UNKNOWN_OLD: ${e.old} (record ${o.seq})`),e.new!==null&&e.new!==e.old&&!(e.new in a.nodeLabel)&&n.push(`SUPERSEDE_UNKNOWN_NEW: ${String(e.new)} (record ${o.seq})`),e.new===e.old?h.delete(e.old):(h.has(e.old)&&n.push(`DOUBLE_SUPERSEDE: ${e.old} re-superseded while live (record ${o.seq})`),h.add(e.old))):g.has(e.ecid)||n.push(`SUPERSEDE_UNKNOWN_ECID: ${e.ecid} (record ${o.seq})`);for(let o of Object.keys(a.superseded)){let e=new Set,r=o;for(;r!==null&&r in a.superseded;){if(e.has(r)){n.push(`SUPERSEDE_CYCLE: chain from ${o} revisits ${r}`);break}e.add(r),r=a.superseded[r]}}for(let[o,e]of Object.entries(a.names))e in a.nodeLabel||n.push(`NAME_UNKNOWN_TARGET: slug ${o} \u2192 ${e} not in the graph`);for(let o of t)for(let e of o.edges){let r=a.nodeLabel[e.src]??"(unknown)",d=a.nodeLabel[e.dst]??"(unknown)";for(let c of I(e.type,r,d,e.props))n.push(`${c.code}: ${e.ecid} ${c.detail}`)}let i=new Map;for(let o of Object.values(a.forward))for(let e of o){if(e.ecid in a.superseded)continue;let r=i.get(e.type)??[];r.push(e),i.set(e.type,r)}for(let[o,e]of i){let r=O(o);if(r?.acyclic){let d=new Map;for(let f of e)d.set(f.src,[...d.get(f.src)??[],f.dst]);let c=new Map,u=f=>{c.set(f,1);for(let E of d.get(f)??[])if(c.get(E)===1||c.get(E)===void 0&&u(E))return!0;return c.set(f,2),!1};for(let f of d.keys())if(c.get(f)===void 0&&u(f)){n.push(`EDGE_CYCLE: live ${o} edges form a cycle reachable from ${f}`);break}}if(r?.cardinality==="one-live-per-src"||r?.cardinality==="one-live-per-src-and-dst"){let d=new Map;for(let c of e)c.dst in a.superseded||d.set(c.src,(d.get(c.src)??0)+1);for(let[c,u]of d)u>1&&n.push(`CARDINALITY_VIOLATION: ${u} live ${o} edges from ${c} (one-live-per-src)`)}if(r?.cardinality==="one-live-per-src-and-dst"){let d=new Map;for(let c of e)c.src in a.superseded||c.dst in a.superseded||d.set(c.dst,(d.get(c.dst)??0)+1);for(let[c,u]of d)u>1&&n.push(`CARDINALITY_VIOLATION: ${u} live ${o} edges onto ${c} (one-live-per-dst)`)}}for(let[o,e]of Object.entries(a.nodeLabel)){let r=x(s,o);if(!v(r)){n.push(`missing node file for ${o} (run kane-cli context rebuild)`);continue}try{let d=JSON.parse(S(r,"utf8"));(d.label!==e||j(d.label,d.content)!==o)&&n.push(`node file content mismatch for ${o} (run kane-cli context rebuild)`);for(let c of k(d.label,d.content))n.push(`${c.code}: ${o} ${c.detail}`)}catch{n.push(`corrupt node file for ${o} (run kane-cli context rebuild)`)}}return{ok:n.length===0,issues:n,records:t.length}}function R(s){return Array.isArray(s)?s.map(R):s&&typeof s=="object"?Object.fromEntries(Object.entries(s).sort(([n],[t])=>n<t?-1:1).map(([n,t])=>[n,R(t)])):s}export{x as a,V as b,Z as c,Q as d};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as g}from"./chunk-IACKIGPX.js";import{createHash as E}from"crypto";function w(e){if(e===null)return"null";let r=typeof e;if(r==="string")return JSON.stringify(e.normalize("NFC"));if(r==="boolean")return e?"true":"false";if(r==="number"){if(!Number.isFinite(e))throw new Error("non-finite number is not canonicalizable");return JSON.stringify(e)}if(Array.isArray(e))return"["+e.map(n=>n===void 0?"null":w(n)).join(",")+"]";if(r==="object"){let n=e,s=new Map;for(let t of Object.keys(n)){if(n[t]===void 0)continue;let c=t.normalize("NFC");if(s.has(c))throw new Error(`canonicalization collision: NFC-equivalent duplicate key ${JSON.stringify(c)}`);s.set(c,n[t])}return"{"+[...s.keys()].sort((t,c)=>Buffer.compare(Buffer.from(t,"utf8"),Buffer.from(c,"utf8"))).map(t=>JSON.stringify(t)+":"+w(s.get(t))).join(",")+"}"}throw new Error("unsupported type for canonicalization: "+r)}function k(e){return E("sha256").update(e).digest("hex")}import{closeSync as $,existsSync as O,fsyncSync as x,mkdirSync as b,openSync as S,readFileSync as R,readdirSync as j,renameSync as F,rmSync as J,writeFileSync as _}from"fs";import{join as f}from"path";var a=class extends Error{};function v(e,r){if(e.schema_version!==void 0&&e.schema_version!==g)throw new a(`record ${r} is stamped ${e.schema_version}, this build reads ${g} \u2014 migrate explicitly`);if(e.parents!==void 0&&!(e.prev_hash===null?e.parents.length===0:e.parents.length===1&&e.parents[0]===e.prev_hash))throw new a(`record ${r}: parents does not mirror prev_hash \u2014 multi-parent records need a DAG-aware reader`)}function z(e){b(e,{recursive:!0});let r=f(e,".lock"),n=Date.now()+2e3;for(;;)try{let s=S(r,"wx");return _(s,`${process.pid}
3
+ `),$(s),()=>{try{J(r)}catch{}}}catch(s){if(s.code!=="EEXIST")throw s;if(Date.now()>n)throw new a(`.context is locked by another process \u2014 remove ${r} if that process is gone`);Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,25)}}var A=/^\d{6}-[0-9a-f]{12}\.json$/,p=e=>f(e,"commits");function y(e){return"sha256:"+k(Buffer.from(w(e),"utf8"))}function q(e){let r=p(e);return O(r)?j(r).filter(n=>A.test(n)).sort():[]}function T(e){let r=q(e),n=[],s=[],i=null;return r.forEach((t,c)=>{let d=R(f(p(e),t),"utf8"),o;try{o=JSON.parse(d)}catch(l){throw new a(`corrupt commit record ${t}: ${String(l)}`)}if(o.seq!==c+1)throw new a(`sequence gap: expected seq ${c+1}, ${t} has ${o.seq}`);if(o.prev_hash!==i)throw new a(`broken chain at ${t}: prev_hash ${String(o.prev_hash)} != ${String(i)}`);v(o,t);let m=y(o),h=t.slice(7,19);if(!m.slice(7).startsWith(h))throw new a(`tampered record ${t}: content hash ${m} does not match filename`);n.push(o),s.push(m),i=m}),{records:n,hashes:s}}function N(e){let r=q(e);if(r.length===0)return null;let n=r[r.length-1],s=R(f(p(e),n),"utf8"),i;try{i=JSON.parse(s)}catch(c){throw new a(`corrupt tail record ${n}: ${String(c)}`)}v(i,n);let t=y(i);if(!t.slice(7).startsWith(n.slice(7,19)))throw new a(`tampered tail record ${n}: content hash ${t} does not match filename`);if(i.seq!==r.length)throw new a(`sequence gap at tail: ${r.length} record files but tail seq is ${i.seq}`);return{seq:i.seq,hash:t}}function G(e){return N(e)?.hash??null}function V(e,r,n){let s=q(e);if(s.length<r)throw new a(`derived state is ahead of the record log (applied seq ${r}, ${s.length} records) \u2014 run kane-cli context rebuild`);let i=[],t=[],c=n;for(let d=r;d<s.length;d++){let o=s[d],m=R(f(p(e),o),"utf8"),h;try{h=JSON.parse(m)}catch(u){throw new a(`corrupt commit record ${o}: ${String(u)}`)}if(h.seq!==d+1)throw new a(`sequence gap: expected seq ${d+1}, ${o} has ${h.seq}`);if(h.prev_hash!==c)throw new a(`broken chain at ${o}: prev_hash ${String(h.prev_hash)} != ${String(c)}`);v(h,o);let l=y(h);if(!l.slice(7).startsWith(o.slice(7,19)))throw new a(`tampered record ${o}: content hash ${l} does not match filename`);i.push(h),t.push(l),c=l}return{records:i,hashes:t}}function X(e,r,n={}){let s=z(e);try{return B(e,r,n)}finally{s()}}function B(e,r,n){let s=N(e),i=(s?.seq??0)+1,t=s?.hash??null;if(n.expectPrev!==void 0&&n.expectPrev!==t)throw new a(`concurrent append detected: validated against ${String(n.expectPrev)} but the chain head is ${String(t)} \u2014 re-open and retry`);let c={seq:i,prev_hash:t,...r,schema_version:g,parents:t===null?[]:[t]},d=y(c),o=p(e);b(o,{recursive:!0});let m=`${String(i).padStart(6,"0")}-${d.slice(7,19)}.json`,h=f(o,m),l=h+".tmp",u=S(l,"w");try{_(u,JSON.stringify(c)+`
4
+ `),x(u)}finally{$(u)}F(l,h);try{let C=S(o,"r");x(C),$(C)}catch{}return{seq:i,hash:d,file:h,record:c}}export{w as a,k as b,a as c,T as d,G as e,V as f,X as g};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{join as o}from"path";var r=t=>o(t,".context");export{r as a};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as k}from"./chunk-3FN66LTP.js";import{a as b}from"./chunk-GEAWRRR7.js";import{a as C}from"./chunk-IECUFWIZ.js";import{p as m,q as u,r as f,s as x,t as y}from"./chunk-HFXQU7UZ.js";import{createServer as S}from"http";import{randomBytes as A}from"crypto";import{URL as L}from"url";var P=class{profile;environment;creds;oauth;constructor(r="default",o="prod",e){this.profile=r,this.environment=o,this.creds=e??new C,this.oauth=new b(o)}async login(){let{server:r,port:o}=await this.startCallbackServer(),e=y(o);try{let t=this.creds.loadClient(this.profile,this.environment),i=t?.redirect_uris;(!t||!i?.includes(e))&&(t=await this.oauth.registerClient(e),this.creds.saveClient(this.profile,this.environment,t));let c=t.client_id,[h,d]=b.generatePkce(),a=A(32).toString("hex"),n=this.oauth.buildAuthorizationUrl(c,d,a,e),l=await this.waitForCallback(r,o,n,a);if(!l)throw new Error("Login cancelled or timed out");let p=await this.oauth.exchangeCode(l,c,h,e),g={access_token:p.access_token,refresh_token:p.refresh_token,expires_at:Math.floor(Date.now()/1e3)+p.expires_in,scope:p.scope??"*"};return this.creds.saveCredentials(this.profile,this.environment,g),this.creds.setActiveProfile(this.profile),g}catch(t){throw r.close(),t}}startCallbackServer(){return new Promise((r,o)=>{let e=u,t=()=>{let i=S();i.on("error",c=>{c.code==="EADDRINUSE"&&e<f?(e++,t()):o(new Error(`Failed to start callback server: ${c.message}. Ports ${u}-${f} are all in use.`))}),i.listen(e,m,()=>{r({server:i,port:e})})};t()})}waitForCallback(r,o,e,t){return new Promise(i=>{let c=!1,h=setTimeout(()=>d(null),12e4),d=a=>{c||(c=!0,clearTimeout(h),r.close(),i(a))};r.on("request",(a,n)=>{let l=new L(a.url??"/",`http://${m}:${o}`);if(l.pathname!==x){n.writeHead(404),n.end();return}let p=l.searchParams.get("state"),g=l.searchParams.get("code");if(l.searchParams.get("error")){n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"error",title:"Login failed",message:"We couldn't complete the sign-in. You can close this tab and try again from your terminal."})),d(null);return}if(p!==t){n.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"error",title:"Invalid state",message:"The sign-in response didn't match this session. Please return to your terminal and try again."})),d(null);return}n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"success",title:"You're signed in",message:"Head back to your terminal \u2014 KaneAI is ready when you are.",autoClose:!0})),d(g)}),k(e).catch(a=>{let n=a instanceof Error?a.message:String(a);process.stderr.write(`[auth] Could not open browser: ${n}
2
+ import{c as k}from"./chunk-RFHMDQXZ.js";import{a as b}from"./chunk-RH2OAIJI.js";import{a as C}from"./chunk-4CRKK5WV.js";import{p as m,q as u,r as f,s as x,t as y}from"./chunk-HMGNPFXP.js";import{createServer as S}from"http";import{randomBytes as A}from"crypto";import{URL as L}from"url";var P=class{profile;environment;creds;oauth;constructor(r="default",o="prod",e){this.profile=r,this.environment=o,this.creds=e??new C,this.oauth=new b(o)}async login(){let{server:r,port:o}=await this.startCallbackServer(),e=y(o);try{let t=this.creds.loadClient(this.profile,this.environment),i=t?.redirect_uris;(!t||!i?.includes(e))&&(t=await this.oauth.registerClient(e),this.creds.saveClient(this.profile,this.environment,t));let c=t.client_id,[h,d]=b.generatePkce(),a=A(32).toString("hex"),n=this.oauth.buildAuthorizationUrl(c,d,a,e),l=await this.waitForCallback(r,o,n,a);if(!l)throw new Error("Login cancelled or timed out");let p=await this.oauth.exchangeCode(l,c,h,e),g={access_token:p.access_token,refresh_token:p.refresh_token,expires_at:Math.floor(Date.now()/1e3)+p.expires_in,scope:p.scope??"*"};return this.creds.saveCredentials(this.profile,this.environment,g),this.creds.setActiveProfile(this.profile),g}catch(t){throw r.close(),t}}startCallbackServer(){return new Promise((r,o)=>{let e=u,t=()=>{let i=S();i.on("error",c=>{c.code==="EADDRINUSE"&&e<f?(e++,t()):o(new Error(`Failed to start callback server: ${c.message}. Ports ${u}-${f} are all in use.`))}),i.listen(e,m,()=>{r({server:i,port:e})})};t()})}waitForCallback(r,o,e,t){return new Promise(i=>{let c=!1,h=setTimeout(()=>d(null),12e4),d=a=>{c||(c=!0,clearTimeout(h),r.close(),i(a))};r.on("request",(a,n)=>{let l=new L(a.url??"/",`http://${m}:${o}`);if(l.pathname!==x){n.writeHead(404),n.end();return}let p=l.searchParams.get("state"),g=l.searchParams.get("code");if(l.searchParams.get("error")){n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"error",title:"Login failed",message:"We couldn't complete the sign-in. You can close this tab and try again from your terminal."})),d(null);return}if(p!==t){n.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"error",title:"Invalid state",message:"The sign-in response didn't match this session. Please return to your terminal and try again."})),d(null);return}n.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),n.end(v({state:"success",title:"You're signed in",message:"Head back to your terminal \u2014 KaneAI is ready when you are.",autoClose:!0})),d(g)}),k(e).catch(a=>{let n=a instanceof Error?a.message:String(a);process.stderr.write(`[auth] Could not open browser: ${n}
3
3
  Please open this URL manually: ${e}
4
4
  `)})})}};function v(s){let r=s.state==="success",o=r?"#22c55e":"#ef4444",e=r?"rgba(34, 197, 94, 0.12)":"rgba(239, 68, 68, 0.12)",t=r?'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7"/></svg>':'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>',i=s.autoClose?"<script>setTimeout(function(){try{window.close();}catch(e){}}, 1500);</script>":"";return`<!doctype html>
5
5
  <html lang="en">
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{x as n}from"./chunk-HFXQU7UZ.js";import{a as s}from"./chunk-HCBYKLMW.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
2
+ import{x as n}from"./chunk-HMGNPFXP.js";import{a as s}from"./chunk-HCBYKLMW.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d,e as f}from"./chunk-IACKIGPX.js";var G={high:3,med:2,low:1},R={create:0,evolve:1,"reuse-candidate":2},_=.75;function a(e,n){return!e.superseded.has(n)&&e.trust.get(n)!=="archived"}function m(e,n="med"){let t=e.risk;return t==="high"||t==="med"||t==="low"?t:n}function l(e,n){return e.nameOf.get(n)??n}function y(e,n){return`kane-cli design tests --use-case ${l(e,n)}`}function b(e,n){let t=e.edgesFrom(n).find(i=>i.type===f.SCOPED_TO&&a(e,i.dst));if(!t)return null;let s=e.nodeLabel.get(t.dst);if(s===d.USECASE)return t.dst;if(s===d.SCENARIO){let i=e.edgesFrom(t.dst).find(r=>r.type===f.BELONGS_TO&&a(e,r.dst));return i?i.dst:null}return null}function v(e,n){let t=b(e,n);return t?y(e,t):w(e,n)}function w(e,n){return`kane-cli design explain ${l(e,n)}`}function E(e,n){let t=e.edgesFrom(n).find(i=>i.type===f.AUTOMATES&&a(e,i.dst));if(!t)return null;let s=e.edgesFrom(t.dst).find(i=>i.type===f.BELONGS_TO&&a(e,i.dst));return s?s.dst:null}function S(e){let n=[];for(let{cid:t,content:s}of e.byLabel(d.AC))!a(e,t)||e.edgesInto(t).filter(r=>r.type===f.VERIFIES&&a(e,r.src)).length>0||n.push({ref:l(e,t),kind:"no-verifies",why:"no live test verifies this acceptance criterion",risk:m(s),stage:"design",tag:"create",ready_command:v(e,t)});return n}function h(e){let n=[];for(let{cid:t,content:s}of e.byLabel(d.USECASE)){if(!a(e,t))continue;let i=e.edgesInto(t).filter(o=>o.type===f.BELONGS_TO&&a(e,o.src));if(i.length===0){n.push({ref:l(e,t),kind:"zero-scenario",why:"use-case has no scenarios",risk:m(s),stage:"design",tag:"create",ready_command:y(e,t)});continue}i.every(o=>e.getNode(o.src)?.content.case_type==="happy")&&n.push({ref:l(e,t),kind:"happy-only",why:"use-case is exercised by happy-path scenarios only",risk:m(s),stage:"design",tag:"create",ready_command:y(e,t)})}return n}function x(e){let n=[];for(let{cid:t,content:s}of e.byLabel(d.GAP)){if(!a(e,t))continue;let i=s.ref,r=typeof i=="string"?e.resolve(i):null,o=r&&a(e,r.tip)?r.tip:null,u=o?e.nodeLabel.get(o):null,p=u===d.USECASE?y(e,o):u===d.AC?v(e,o):w(e,t),c=s.question&&typeof s.question=="object"?s.question:void 0,k=typeof s.text=="string"&&s.text||(c&&typeof c.header=="string"?c.header:"")||"design gap";n.push({ref:l(e,t),kind:String(s.kind),why:k,risk:m(s),stage:"design",tag:"create",ready_command:p,...typeof s.risk_rationale=="string"?{risk_rationale:s.risk_rationale}:{},...c?{question:c}:{}})}return n}function L(e){let n=[];for(let{cid:t,content:s}of e.byLabel(d.AC)){if(!a(e,t))continue;let i=e.stale(t);i==="fresh"||i==="superseded"||n.push({ref:l(e,t),kind:"stale-ac",why:`acceptance criterion is ${i} \u2014 its source moved since this was authored`,risk:m(s),stage:"design",tag:"evolve",ready_command:v(e,t)})}for(let{cid:t,content:s}of e.byLabel(d.TEST)){if(!a(e,t))continue;let i=e.stale(t);if(i==="fresh"||i==="superseded")continue;let r=e.edgesFrom(t).filter(g=>g.type===f.VERIFIES&&a(e,g.dst)),o=r.map(g=>m(e.getNode(g.dst)?.content??{})),u=o.includes("high")?"high":o.includes("med")?"med":o.includes("low")?"low":"med",p=r[0]?.dst??null,c=p?null:E(e,t),k=p?v(e,p):c?y(e,c):w(e,t);n.push({ref:l(e,t),kind:"stale-test",why:`test is ${i} \u2014 its source moved since this was authored`,risk:u,stage:"design",tag:"evolve",ready_command:k})}return n}async function C(e,n,t){for(let s of e)if(s.tag==="create"){if(!t){s.meta={embed_arm:"skipped"};continue}try{let i=n.resolve(s.ref),r=i?n.getNode(i.tip):null,o=r&&(String(r.content.title??"")||String(r.content.text??""))||s.why,u=r?.label===d.USECASE?"scenario":"test",c=(await t.searchSimilar(o,{label:u,k:1}))[0];c&&c.score>=_?(s.tag="reuse-candidate",s.meta={embed_arm:"used",near_hit:{ref:l(n,c.cid),score:c.score}}):s.meta={embed_arm:"used",near_hit:null}}catch{s.meta={embed_arm:"skipped"}}}}function O(e,n){let t=G[n.risk]-G[e.risk];if(t!==0)return t;let s=R[e.tag]-R[n.tag];return s!==0?s:e.ref<n.ref?-1:e.ref>n.ref?1:0}function A(e,n){let t=[],s=r=>{let o=e.resolve(r);return o&&!o.superseded?m(e.getNode(o.tip)?.content??{}):"med"},i=r=>{let o=e.resolve(r),u=o&&!o.superseded?b(e,o.tip):null;return u?l(e,u):r};for(let r of n.usecases??[])for(let o of r.acceptance_criteria??[])(o.covered_by??[]).length>0&&(o.execution==="failed"?t.push({ref:o.id,kind:"execution-failed",stage:"cover",tag:"evolve",risk:s(o.id),why:`covering test failed against this AC (tests: ${(o.covered_by??[]).join(", ")})`,ready_command:`kane-cli maintain evolve ${i(o.id)}`}):o.execution==="blocked"?t.push({ref:o.id,kind:"execution-blocked",stage:"cover",tag:"reuse-candidate",risk:s(o.id),why:"the oracle could not run (infrastructure) \u2014 the covering test exists and is reusable",ready_command:"kane-cli testrun run"}):o.execution==="not-run"&&t.push({ref:o.id,kind:"covered-not-run",stage:"cover",tag:"reuse-candidate",risk:s(o.id),why:"a covering test exists but never joined this pack \u2014 run it",ready_command:"kane-cli testrun run"}));return t}async function I(e,n,t,s){if(n!=="design"&&!s)throw new Error(`gaps-engine: stage "${n}" requires a pack's usecases doc`);let i=[];return(n==="design"||n==="all")&&i.push(...S(e),...h(e),...x(e),...L(e)),(n==="cover"||n==="all")&&i.push(...A(e,s)),await C(i,e,t),i.sort(O),i}export{I as a};
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as D}from"./chunk-NNZV5RCE.js";import{a as p,b as U,d as G}from"./chunk-AD46OCZ4.js";import{a as _}from"./chunk-JFAFKHDX.js";import{a as x}from"./chunk-QPZRHAYK.js";import{d as w}from"./chunk-KHDUQ33H.js";import{a as O,b as C}from"./chunk-D5T4ARTB.js";import{d as f,e as m}from"./chunk-IACKIGPX.js";var y=(e,t)=>e.nameOf.get(t)??t;function B(e,t){let n=[];for(let{cid:o}of e.byLabel(f.SCENARIO))e.superseded.has(o)||e.edgesFrom(o).some(s=>s.type===m.BELONGS_TO&&e.tipOf(s.dst)===t)&&n.push(o);return n}function P(e,t){let n=[],o=[],s=[],c=B(e,t),i=new Set(c);for(let r of c){let d=e.getNode(r)?.content??{};n.push({ref:y(e,r),title:String(d.title??""),case_type:String(d.case_type??""),intent:String(d.intent??"")});for(let u of e.edgesInto(r)){if(u.type!==m.AUTOMATES||e.superseded.has(u.src))continue;let g=e.getNode(u.src)?.content??{},a=e.edgesFrom(u.src).filter(l=>l.type===m.VERIFIES&&!e.superseded.has(l.dst)).map(l=>y(e,l.dst));o.push({ref:y(e,u.src),title:String(g.title??""),check:g.check,verifies:a})}}for(let{cid:r}of e.byLabel(f.AC)){if(e.superseded.has(r))continue;let d=e.edgesFrom(r).find(l=>l.type===m.SCOPED_TO);if(!d)continue;let u=e.tipOf(d.dst);if(!(u===t||i.has(u)))continue;let a=e.getNode(r)?.content??{};s.push({ref:y(e,r),text:String(a.text??""),kind:String(a.kind??""),scope:u===t?"use-case":y(e,u)})}return{scenarios:n,tests:o,acs:s}}function A(e,t,n){let o=t.getNode(n)?.content.blob;if(typeof o!="string")return null;let s=w(e,o);return s===null?null:s.toString("utf8")}function M(e,t){let n=t.split(`
3
+ `).map(s=>s.replace(/^\d+\| /,"")),o=[];for(let s of e.split(`
4
+ `)){let c=s.trim();if(c.length===0)continue;let i=n.find(r=>r.includes(c));i!==void 0&&!o.includes(i.trim())&&o.push(i.trim())}return o.length>0?o.join(`
5
+ `):{removed:!0}}function j(e,t,n,o){if(o!==void 0&&o.trim().length>0)return{kind:"user-directive",text:o.trim()};let s=[n,...P(t,n).acs.map(r=>t.resolve(r.ref)?.cid??"")].filter(Boolean),c=[],i=new Set;for(let r of s){let d=new Map;for(let u of t.derivesInto(r))d.set(String(u.props.source_id),u);for(let[u,g]of d){let a=t.heads.get(u);if(a==null||a===g.props.source_cid)continue;let l=String(g.props.anchor),h=`${u}\0${l}`;if(i.has(h)||l==="img#whole")continue;i.add(h);let b=A(e,t,String(g.props.source_cid)),E=b===null?null:x(b,l);if(E===null)continue;let T=A(e,t,a);c.push({source_id:u,anchor:l,old_anchor_text:E,new_anchor_text:T===null?{removed:!0}:M(E,T)})}}return{kind:"source-change",changes:c}}function L(e,t,n,o){let s=P(t,n);if(s.scenarios.length===0&&s.tests.length===0&&s.acs.length===0)return;let c=j(e,t,n,o);if(!(c.kind==="source-change"&&c.changes.length===0))return{prior_design:s,change_delta:c}}var $=new Set([f.USECASE,f.SCENARIO,f.AC,f.TEST]);function v(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function S(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function k(e,t,n){if(n===f.USECASE)return t;if(n===f.SCENARIO)return S(e,t,m.BELONGS_TO);if(n===f.AC){let o=S(e,t,m.SCOPED_TO);return o?e.nodeLabel.get(o)===f.USECASE?o:S(e,o,m.BELONGS_TO):null}if(n===f.TEST){let o=S(e,t,m.AUTOMATES);return o?S(e,o,m.BELONGS_TO):null}return null}function F(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function N(e,t){return{ucTip:t,display:F(e,t),seamRef:e.nameOf.get(t)??t}}function V(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!$.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let c=k(e,o,s);return!c||e.nodeLabel.get(c)!==f.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(c)?{ok:!1,message:`use-case ${F(e,c)} was removed \u2014 nothing to evolve`}:{ok:!0,target:N(e,c)}}function R(e,t){let n=[];for(let{cid:s}of e.byLabel(f.SCENARIO)){if(!v(e,s)||!e.edgesFrom(s).some(i=>i.type===m.BELONGS_TO&&e.tipOf(i.dst)===t))continue;let c=e.edgesInto(s).filter(i=>i.type===m.AUTOMATES&&v(e,i.src));if(c.length===0)n.push({scenario:s,test:null});else for(let i of c)n.push({scenario:s,test:i.src})}let o=new Map;for(let{cid:s}of e.byLabel(f.AC)){if(!v(e,s)||k(e,s,f.AC)!==t)continue;let c=e.edgesInto(s).filter(i=>i.type===m.VERIFIES&&v(e,i.src)).map(i=>i.src).sort();o.set(s,c)}return{pairs:n,verifies:o}}function q(e,t){let n=i=>`${i.scenario}\0${i.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),c=[];for(let[i,r]of e.verifies){let d=t.verifies.get(i);d&&(r.length===d.length&&r.every((u,g)=>u===d[g])||c.push({ac:i,before:r,after:d}))}return{superseded:e.pairs.filter(i=>!s.has(n(i))),minted:t.pairs.filter(i=>!o.has(n(i))),retained:t.pairs.filter(i=>o.has(n(i))),moves:c}}function Y(e,t,n,o,s){let c=r=>t.nameOf.get(r)??r,i=r=>` - ${c(r.scenario)} \xB7 ${r.test?c(r.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let r of s.superseded)e.out(i(r));e.out(`minted: ${s.minted.length} pair(s)`);for(let r of s.minted)e.out(i(r));e.out(`retained: ${s.retained.length} pair(s)`);for(let r of s.retained)e.out(i(r));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let r of s.moves){let d=u=>u.length>0?u.map(c).join(" + "):"(none)";e.out(` - ${c(r.ac)}: ${d(r.before)} \u2192 ${d(r.after)}`)}}}async function I(e,t,n,o,s,c){let i=O(e),r=D(i,t.ucTip);if(!r)return c==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(p(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let d=R(i,t.ucTip),u=`evolve re-designs the parent use-case ${t.display}; ${d.pairs.length} pair(s) affected`;if(n.yes)o.out(u);else if(!await o.confirm(`${u} \u2014 proceed?`))return o.out(c==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let g=L(e,i,t.ucTip,n.because),a=await s(t.seamRef,{yes:!!n.yes,...n.because?{because:n.because}:{},...g!==void 0?{changeDelta:g.change_delta,priorDesign:g.prior_design}:{}});if(a===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:a,outcome:"paused"};if(a!==0)return p(o,`design run for ${t.display} ended with exit code ${a} \u2014 no diff to report`),{code:a,outcome:"failed"};let l=O(e),h=l.tipOf(t.ucTip),b=D(l,h)?.seq;return Y(o,l,t.display,{before:r.seq,after:b??"?"},q(d,R(l,h))),{code:0,outcome:"evolved"}}function H(e){let t=new Map,n=0;for(let{cid:s,state:c}of e.staleList()){if(c==="superseded")continue;let i=e.nodeLabel.get(s);if(!i||!$.has(i)||!v(e,s)||!C(e,s))continue;let r=k(e,s,i);!r||e.nodeLabel.get(r)!==f.USECASE||e.superseded.has(r)||(n++,t.has(r)||t.set(r,N(e,r)))}return{targets:[...t.values()].sort((s,c)=>s.display<c.display?-1:s.display>c.display?1:0),staleCount:n}}function z(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!$.has(s)||!v(e,n))&&C(e,n)&&k(e,n,s)===t)return!0}return!1}async function J(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return p(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return p(n,"evolve needs a <ref> or --from-stale"),2;let c=U(s,n);if(!c)return 2;let i=o.runDesignForUc??K;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let r=O(c),d,u=null;if(e){let a=V(r,e);if(!a.ok)return p(n,a.message),2;if(!t.because&&D(r,a.target.ucTip)&&!z(r,a.target.ucTip))return p(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;d=[a.target]}else{let{targets:a,staleCount:l}=H(r);if(a.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;u=`from-stale: ${l} stale node(s) \u2192 ${a.length} use-case(s)`,d=a}if(!t.yes&&!n.isTTY)return p(n,"refusing to evolve without --yes (no TTY to confirm)"),2;if(u&&n.out(u),e){let a=await I(c,d[0],t,n,i,"single");return a.outcome==="evolved"&&t.because&&_(c,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),a.code}let g=0;for(let a of d){let{code:l}=await I(c,a,t,n,i,"batch");l!==0&&g===0&&(g=l)}return g}var K=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-RDTZZ6ZI.js");return n({useCase:e,force:!0,...t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}})};async function ie(e,t){return J(e,t,G(),{})}export{V as a,I as b,J as c,K as d,ie as e};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as L,b as N}from"./chunk-AE6SS34N.js";import{c as G}from"./chunk-B2PZAB7J.js";import{e as _,g as v}from"./chunk-IACKIGPX.js";import{existsSync as k,readFileSync as q}from"fs";function J(a){let s=N(a),u=new Map(Object.entries(s.heads)),d=new Map(Object.entries(s.trust)),r=new Map(Object.entries(s.nodeLabel)),i=new Map(Object.entries(s.superseded)),g=new Map(Object.entries(s.names)),R=new Map(Object.entries(s.archivedReason)),I=new Set(s.appliedEvents),S=new Map(Object.entries(s.conv)),T=e=>s.media[e]??{format:"text",media_type:"text/plain",anchors_supported:["L-L"]},M=new Map;for(let[e,t]of g)M.set(t,e);let h=new Map,E=e=>{if(h.has(e))return h.get(e);if(!r.has(e))return h.set(e,null),null;let t=L(a,e);if(!k(t))throw new G(`derived node file missing for ${e} \u2014 run kane-cli context rebuild`);let n=JSON.parse(q(t,"utf8"));return h.set(e,n),n},m=e=>{let t=e,n=new Set;for(;i.has(t)&&!n.has(t);){n.add(t);let o=i.get(t);if(typeof o!="string")break;t=o}return t},x=e=>{let t=u.get(e),n=r.has(e)?e:g.get(e)??(typeof t=="string"?t:void 0);if(n===void 0||!r.has(n))return null;let o=m(n);return{cid:n,tip:o,superseded:i.has(n)||i.has(o)}},b=new Map;for(let e of Object.values(s.forward))for(let t of e){let n=b.get(t.dst);n?n.push(t):b.set(t.dst,[t])}let w=e=>(e??[]).filter(t=>!i.has(t.ecid)),C=e=>w(b.get(e)),O=e=>C(e).filter(t=>t.type===_.DERIVES),y=e=>w(s.forward[e]).some(t=>v(t.type)?.pin?.comparesTo==="dst_tip"&&i.has(t.dst)),F=e=>{if(i.has(e))return"superseded";let t=O(e);if(t.length===0)return y(e)?"stale":"fresh";let n=new Map;for(let p of t)n.set(p.props.source_id,p);let o=!1,f=!1;for(let[p,c]of n){let l=u.get(p);if(l!=null&&(o=!0,l!==c.props.source_cid)){let j=S.get(p)?.chain;(!j||!j.includes(c.props.source_cid))&&(f=!0)}}return o?f||y(e)?"stale":"fresh":"orphaned"};return{heads:u,trust:d,nodeLabel:r,superseded:i,names:g,nameOf:M,archivedReason:R,appliedEvents:I,convChains:S,mediaOf:T,extractedSourceCids:new Set(s.extracted),designOf:new Map(Object.entries(s.design_of??{})),latestHash:s.applied.hash,lastSeq:s.applied.seq,hasNode:e=>r.has(e),getNode:E,byLabel:e=>[...r.entries()].filter(([,t])=>t===e).map(([t])=>({cid:t,content:E(t)?.content??{}})),edgesFrom:e=>w(s.forward[e]),edgesInto:C,derivesInto:O,resolve:x,tipOf:m,stale:F,staleList:()=>[...r.keys()].map(e=>({cid:e,state:F(e)})).filter(e=>e.state!=="fresh"),execHistory:e=>{let t=x(e);if(!t)return[];let n=m(t.cid),o=new Set([n]),f=!0;for(;f;){f=!1;for(let[c,l]of i)l!==null&&o.has(l)&&!o.has(c)&&(o.add(c),f=!0)}let p=[];for(let c of Object.entries(s.exec??{}))o.has(c[0])&&p.push(...c[1]);return p.sort((c,l)=>c.started_at<l.started_at?-1:1)}}}function V(a,s){if(a.stale(s)!=="stale")return!1;let u=new Map;for(let d of a.derivesInto(s))u.set(d.props.source_id,d);for(let[d,r]of u){let i=a.heads.get(d);if(i==null||i===r.props.source_cid)continue;let g=a.convChains.get(d)?.chain;if(!g||!g.includes(r.props.source_cid))return!0}for(let d of a.edgesFrom(s)){if(v(d.type)?.pin?.comparesTo!=="dst_tip"||!a.superseded.has(d.dst))continue;let r=a.tipOf(d.dst);if(a.superseded.has(r)||a.nodeLabel.get(r)==="usecase")return!0}return!1}export{J as a,V as b};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as R}from"./chunk-HCBYKLMW.js";import{a as h,d as k}from"./chunk-C44QQJR4.js";import{a as A}from"./chunk-6YGTRKDT.js";import{e as p}from"./chunk-UR6MHSHU.js";var e=p(A(),1);var a=p(R(),1),g=(0,e.createContext)(null),T=250;function C({children:d}){let[s,x]=(0,e.useState)([]),m=(0,e.useRef)(0),f=(0,e.useRef)([]),c=(0,e.useRef)(null),u=(0,e.useRef)(new Map),b=(0,e.useRef)(0),S=(0,e.useRef)(0);(0,e.useEffect)(()=>{for(let r=S.current;r<s.length;r++){let i=s[r];b.current=i.seq;let t=u.current.get(i.seq);if(t){u.current.delete(i.seq);for(let n of t)n()}}S.current=s.length},[s]),(0,e.useEffect)(()=>()=>{c.current&&clearTimeout(c.current)},[]);let P=(0,e.useMemo)(()=>{let r=()=>{c.current&&(clearTimeout(c.current),c.current=null);let t=f.current;t.length!==0&&(f.current=[],x(n=>[...n,...t]))},i=()=>{c.current||(c.current=setTimeout(()=>{c.current=null,r()},0))};return{append:(t,n)=>{let o=++m.current;if(n){let l=u.current.get(o)??[];l.push(n),u.current.set(o,l)}f.current.push({id:`sb-${o}`,seq:o,content:t}),i()},flush:()=>{r();let t=m.current;return t===0||b.current>=t?Promise.resolve():new Promise(n=>{let o=!1,l=()=>{o||(o=!0,clearTimeout(q),n())},q=setTimeout(l,T),v=u.current.get(t)??[];v.push(l),u.current.set(t,v)})}}},[]);return(0,a.jsxs)(g.Provider,{value:P,children:[s.length>0&&(0,a.jsx)(k,{items:s,children:r=>(0,a.jsx)(h,{children:r.content},r.id)}),d]})}function I(){let d=(0,e.useContext)(g);if(!d)throw new Error("useScrollback must be used within a ScrollbackProvider. Wrap this Ink render() root in <ScrollbackProvider>. Never render <Static> directly \u2014 push via append().");return d}export{C as a,I as b};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as u}from"./chunk-6PS65QFF.js";function g(t,e){return t.byLabel(e).filter(({cid:n})=>!t.superseded.has(n)&&t.trust.get(n)!=="archived")}function f(t,e,n){for(let[a,c]of t.names)if(c===e&&!t.superseded.has(c))return a;return String(n.title??n.text??e)}function v(t,e){let n=g(t,"scenario");if(e){let i=t.resolve(e);if(i){let s=new Set([i.cid,i.tip,t.tipOf(i.cid)]);n=n.filter(({cid:o})=>t.edgesFrom(o).some(d=>d.type==="belongs_to"&&(s.has(d.dst)||s.has(t.tipOf(d.dst)))))}}let a=new Set;for(let{cid:i}of n)a.add(i),a.add(t.tipOf(i));let c=g(t,"test").filter(({cid:i})=>!e||t.edgesFrom(i).some(s=>s.type==="automates"&&(a.has(s.dst)||a.has(t.tipOf(s.dst))))),r=new Set;for(let i of c)for(let s of t.edgesFrom(i.cid))s.type==="automates"&&r.add(t.tipOf(s.dst));let m=n.filter(({cid:i})=>!r.has(i)&&!r.has(t.tipOf(i))).map(({cid:i,content:s})=>f(t,i,s));return{live_scenarios:n.length,live_tests:c.length,missing:m}}function l(t){return t.length<=12?t.join(", "):`${t.slice(0,12).join(", ")} +${t.length-12} more`}function b(t,e){let n=t.committed.length===0?"committed: nothing new":`committed: ${l(t.committed.map(o=>o.temp_ref?`${o.temp_ref} \u2192 ${o.logical_id??o.cid}`:o.logical_id??o.cid))}`,a=[];t.reused&&a.push(`reused: ${t.reused}`),t.rejected?.length&&a.push(`rejected: ${l(t.rejected.map(o=>`${o.ref} (${o.reason})`))}`),t.warnings?.length&&a.push(`warnings: ${l(t.warnings)}`);let c=[`RECEIPT (commit ${t.commitN}, ${t.phase})`,n,...a],r,m;if(t.verb==="design")r=v(e,t.ucRef),c.push(`parity: ${r.live_scenarios} scenario(s) live \xB7 ${r.live_tests} test(s) live`+(r.missing.length?` \xB7 missing tests: ${l(r.missing)}`:"")),m=r.missing.length>0?`next: emit tests for the ${r.missing.length} scenario(s) listed \u2014 1:1, strict. Never re-emit committed items; reference them by the ids above.`:"next: every live scenario has a test. Address open gaps, or finish.";else{let o=g(e,"usecase").length;c.push(`parity: ${o} use-case(s) live`),m="next: refine via chat ops using the ids above. Never re-emit committed items."}c.push(m);let i=c.join(`
3
+ `);for(;Buffer.byteLength(i,"utf8")>6e3;)i=i.slice(0,Math.floor(i.length*.9))+"\u2026";let s={type:"receipt",verb:t.verb,commit_n:t.commitN,phase:t.phase,committed:t.committed,reused:t.reused??0,rejected:t.rejected??[],warnings:t.warnings??[],...r?{parity:{live_scenarios:r.live_scenarios,live_tests:r.live_tests,missing:r.missing}}:{},next:m};return{text:i,event:s}}function A(){return{currentAttempt:null,liveThinking:"",thinkingLog:[],activity:[]}}var p={dedup_candidate:"checking a possible duplicate",ambiguity:"asking to resolve an ambiguity",validation_repair:"repairing a validation failure",finalize:"finalizing the proposal"};function h(t){return p[t.reason_code]??t.reason_code.replace(/_/g," ")}function y(t){let e=u({name:t.name});return t.status==="started"?`\u2192 ${e}\u2026`:t.status==="error"||t.status==="aborted"?`\u2717 ${e}`:`\u2713 ${e}`}function _(t,e){return e.turn_id!==t.turn_id?e.turn_id<t.turn_id:e.attempt<t.attempt}function x(t,e){let n=t.currentAttempt;if(n===null||n.turn_id!==e.turn_id||n.attempt!==e.attempt){if(n!==null&&_(n,e))return t;t={...t,currentAttempt:{turn_id:e.turn_id,attempt:e.attempt},liveThinking:""}}switch(e.type){case"reasoning_delta":return{...t,liveThinking:t.liveThinking+e.text};case"reasoning_done":return e.present?{...t,thinkingLog:[...t.thinkingLog,{text:t.liveThinking,tookMs:e.took_ms}],liveThinking:""}:{...t,liveThinking:""};case"tool_activity":return{...t,activity:[...t.activity,{name:e.name,status:e.status,label:y(e)}]};case"decision_activity":return{...t,activity:[...t.activity,{name:e.action,status:"decision",label:h(e)}]}}}export{b as a,A as b,h as c,x as d};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as h}from"./chunk-YSIYPC4R.js";import{x as l}from"./chunk-HFXQU7UZ.js";import{a as A}from"./chunk-HCBYKLMW.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(B(),1);var n=x(A(),1);function S(r,d,s,u,m){let p=s==="basic"&&u?`basic (${u})`:s,i=20,a=`${r} [${d}]`,g="\xB7".repeat(Math.max(2,i-a.length+3));return{label:`${a} ${g} ${p}`,profile:r,env:d,isActive:m}}function M({creds:r,onSwitch:d,onCancel:s}){let u=r.listProfiles(),m=r.getActiveProfile(),p=r.getDefaultEnv(),i=u.map(e=>{let o=r.loadBasicAuth(e.profile,e.env),t=r.loadCredentials(e.profile,e.env)!==null,v=o?"basic":t?"oauth":"none",b=o?o.username:null,w=e.profile===m&&e.env===p;return S(e.profile,e.env,v,b,w)}),[a,g]=(0,L.useState)(()=>{let e=i.findIndex(o=>o.isActive);return e>=0?e:0});return P((e,o)=>{if(o.escape){s();return}if(o.upArrow){g(t=>Math.max(0,t-1));return}if(o.downArrow){g(t=>Math.min(i.length-1,t+1));return}if(o.return&&i[a]){let t=i[a];t.isActive||d(t.profile,t.env),s();return}}),i.length===0?(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{marginTop:1,children:(0,n.jsx)(f,{color:l.dim,children:"No profiles \u2014 use Login to create one"})}),(0,n.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{flexDirection:"column",marginTop:1,children:i.map((e,o)=>{let t=o===a,v=t?"\u276F ":" ",b=e.isActive?l.green:t?l.orange:void 0;return(0,n.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,n.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{S as a,M as b};
2
+ import{a as h}from"./chunk-CB3TEWZJ.js";import{x as l}from"./chunk-HMGNPFXP.js";import{a as A}from"./chunk-HCBYKLMW.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(B(),1);var n=x(A(),1);function S(r,d,s,u,m){let p=s==="basic"&&u?`basic (${u})`:s,i=20,a=`${r} [${d}]`,g="\xB7".repeat(Math.max(2,i-a.length+3));return{label:`${a} ${g} ${p}`,profile:r,env:d,isActive:m}}function M({creds:r,onSwitch:d,onCancel:s}){let u=r.listProfiles(),m=r.getActiveProfile(),p=r.getDefaultEnv(),i=u.map(e=>{let o=r.loadBasicAuth(e.profile,e.env),t=r.loadCredentials(e.profile,e.env)!==null,v=o?"basic":t?"oauth":"none",b=o?o.username:null,w=e.profile===m&&e.env===p;return S(e.profile,e.env,v,b,w)}),[a,g]=(0,L.useState)(()=>{let e=i.findIndex(o=>o.isActive);return e>=0?e:0});return P((e,o)=>{if(o.escape){s();return}if(o.upArrow){g(t=>Math.max(0,t-1));return}if(o.downArrow){g(t=>Math.min(i.length-1,t+1));return}if(o.return&&i[a]){let t=i[a];t.isActive||d(t.profile,t.env),s();return}}),i.length===0?(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{marginTop:1,children:(0,n.jsx)(f,{color:l.dim,children:"No profiles \u2014 use Login to create one"})}),(0,n.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{flexDirection:"column",marginTop:1,children:i.map((e,o)=>{let t=o===a,v=t?"\u276F ":" ",b=e.isActive?l.green:t?l.orange:void 0;return(0,n.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,n.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{S as a,M as b};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-5Y2G4NC7.js";import{x as o}from"./chunk-HMGNPFXP.js";import{a as n}from"./chunk-HCBYKLMW.js";import{b as t}from"./chunk-C44QQJR4.js";import{a as s}from"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var l=r(s(),1);var m=r(n(),1),i=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function b({active:e=!0}){let[p,c]=(0,l.useState)(0);return a(()=>{c(f=>(f+1)%i.length)},e?80:null),(0,m.jsx)(t,{color:o.orange,children:e?i[p]:"\u25CF"})}export{b as a};
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{existsSync as f,mkdirSync as C,readFileSync as S,readdirSync as T,renameSync as y,rmSync as m,writeFileSync as P,openSync as H,closeSync as F}from"fs";import{randomBytes as K}from"crypto";import{join as w}from"path";var d=class extends Error{constructor(t,r){super(`${t}: ${r}`);this.code=t}},D=1440*60*1e3,J=/^[A-Za-z0-9][A-Za-z0-9._-]*$/,v=e=>w(e,"sessions"),h=(e,n)=>w(v(e),n),l=(e,n)=>w(h(e,n),"state.json"),_=(e,n)=>w(h(e,n),".lock"),N=e=>(e?.now??(()=>new Date))();function L(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(n){return n.code==="EPERM"}}function E(e,n){let t=`${e}.tmp-${process.pid}`;P(t,n,{mode:384}),y(t,e)}function b(e,n,t,r=0){if(r>20)throw new d("SESSION_LOCKED",`${n}: lock contention did not settle`);let o=_(e,n),s=K(8).toString("hex"),a=JSON.stringify({pid:process.pid,ts:t.toISOString(),nonce:s})+`
3
+ `;try{let i=H(o,"wx",384);return P(i,a),F(i),s}catch(i){if(i.code!=="EEXIST")throw i;let p=!1,u;try{let c=JSON.parse(S(o,"utf8")),O=t.getTime()-new Date(c.ts).getTime();p=!L(c.pid)||O>=D,u=c.nonce}catch{p=!0}if(!p)throw new d("SESSION_LOCKED",`${n} is held by another live process`);let g=`${o}.break-${s}`;try{y(o,g);let c;try{c=JSON.parse(S(g,"utf8"))}catch{c=null}if(c===null||c.nonce===u)m(g,{force:!0});else try{y(g,o)}catch{m(g,{force:!0})}}catch(c){if(c.code!=="ENOENT")throw c}return b(e,n,t,r+1)}}function A(e,n,t,r,o){let s=()=>{try{if(JSON.parse(S(_(e,n),"utf8")).nonce!==r)throw new d("SESSION_LOCK_LOST",`${n} lock was taken over`)}catch(i){throw i instanceof d?i:new d("SESSION_LOCK_LOST",`${n} lock file unreadable/gone`)}},a=()=>E(l(e,n),JSON.stringify(t)+`
4
+ `);return{get state(){return t},isApplied:i=>t.applied_events.includes(i),markApplied(i){s(),t={...t,applied_events:[...new Set([...t.applied_events,...i])].sort()},a()},save(i){s();let{agent_state:p,pending:u,assumed:g,read_basis:c,corpus_cursor:O,expires_at:x,force:k,conv_source:I,held_receipts:R,force_scope:$}=i;t={...t,...p!==void 0?{agent_state:p}:{},...u!==void 0?{pending:u}:{},...g!==void 0?{assumed:g}:{},...c!==void 0?{read_basis:c}:{},...O!==void 0?{corpus_cursor:O}:{},...x!==void 0?{expires_at:x}:{},...k!==void 0?{force:k}:{},...I!==void 0?{conv_source:I}:{},...R!==void 0?{held_receipts:R}:{},...$!==void 0?{force_scope:$}:{}},a()},complete(){s(),m(h(e,n),{recursive:!0,force:!0})},release(){try{s(),m(_(e,n),{force:!0})}catch(i){if(i instanceof d||i.code==="ENOENT")return;throw i}}}}function X(e,n,t){if(!J.test(n.sid))throw new d("SESSION_MISSING",`bad sid ${JSON.stringify(n.sid)}`);let r=N(t);if(f(l(e,n.sid)))throw new d("SESSION_LOCKED",`${n.sid} already exists \u2014 resume it`);C(h(e,n.sid),{recursive:!0,mode:448});let o=b(e,n.sid,r),s={schema:1,applied_events:[],...n};return E(l(e,n.sid),JSON.stringify(s)+`
5
+ `),A(e,n.sid,s,o,t)}function Q(e,n,t){if(!J.test(n)||!f(l(e,n)))throw new d("SESSION_MISSING",`no session ${n}`);let r=N(t),o=b(e,n,r),s=JSON.parse(S(l(e,n),"utf8"));if(new Date(s.expires_at).getTime()<=r.getTime())throw m(_(e,n),{force:!0}),new d("SESSION_EXPIRED",`${n} expired at ${s.expires_at}`);let a={...s,expires_at:new Date(r.getTime()+D).toISOString()};return E(l(e,n),JSON.stringify(a)+`
6
+ `),A(e,n,a,o,t)}function z(e,n){let t=l(e,n);return f(t)?JSON.parse(S(t,"utf8")):null}function Z(e){let n=v(e);if(!f(n))return[];let t=[];for(let r of T(n)){let o=l(e,r);if(f(o))try{let s=JSON.parse(S(o,"utf8"));t.push({sid:s.sid,mode:s.mode,created_at:s.created_at,expires_at:s.expires_at,pendingCount:s.pending.questions.length+s.pending.proposals.length,verb:s.verb,use_case:s.use_case})}catch{t.push({sid:r,mode:"?",created_at:"",expires_at:"",pendingCount:0,corrupt:!0})}}return t.sort((r,o)=>r.created_at<o.created_at?-1:1)}function W(e,n){let t=N(n),r=[],o=[],s=v(e);if(!f(s))return{removed:r,skipped:o};for(let a of T(s)){if(n?.sid&&a!==n.sid)continue;let i=!1,p=!1;try{let u=JSON.parse(S(l(e,a),"utf8"));i=new Date(u.expires_at).getTime()<=t.getTime()}catch{p=!0}if(n?.sid||n?.all||i||p&&n?.all){try{let u=JSON.parse(S(_(e,a),"utf8"));if(L(u.pid)&&u.pid!==process.pid){o.push({sid:a,reason:`in use by live pid ${u.pid}`});continue}}catch{}m(h(e,a),{recursive:!0,force:!0}),r.push(a)}}return{removed:r,skipped:o}}function Y(e){return{id:e.id,text:e.question,risk:["high","med","low"].includes(e.risk)?e.risk:"med",rationale:e.rationale,options:e.options.map(n=>({label:n.label,detail:n.description??""})),recommended_index:e.recommendedOptionIndex,allow_free_text:e.allowFreeText,kind:e.kind,consequence:e.consequence,evidence_count:e.evidence_count,multi_select:e.multiSelect}}function j(e){return{id:e.id,header:e.kind??"question",question:e.text,kind:e.kind??"clarify",multiSelect:e.multi_select??!1,options:e.options.map((n,t)=>({id:`o${t}`,label:n.label,description:n.detail||void 0})),recommendedOptionIndex:e.recommended_index,risk:e.risk,rationale:e.rationale,consequence:e.consequence??"",evidence_count:e.evidence_count,allowFreeText:e.allow_free_text}}function q(e,n){e.save({agent_state:n.agent_state,pending:{questions:n.pending.questions.map(j),proposals:n.pending.proposals??[]},assumed:n.assumed.map(t=>({questionId:t.question_id,optionId:t.option_id,flagged:!0,eventId:`assumed:${n.sid}:${t.question_id}`}))}),e.release()}function ee(e,n,t){let r=Q(e,n),o=[];for(let[a,i]of Object.entries(r.state.read_basis))(t.heads.get(a)??null)!==i&&o.push(a);let s=r.state.pending.questions.filter(a=>!r.isApplied(`resolveq:${n}:${a.id}`)&&!r.isApplied(`assumed:${n}:${a.id}`));return{handle:r,represent:[...r.state.pending.proposals],questions:s,staleBasis:o}}export{d as a,X as b,z as c,Z as d,W as e,Y as f,q as g,ee as h};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{c as h}from"./chunk-NFOBDHZK.js";import{a as y,b as v}from"./chunk-L5LI2JF4.js";import{randomUUID as k,randomBytes as D}from"crypto";import{promises as i}from"fs";import{join as c}from"path";function p(t=process.cwd()){return c(t,".testmuai","evidence")}function b(t,e=process.cwd()){return c(p(e),`${t}.evidence`)}function W(){return k()}var S=/\.evidence\.tmp-(\d+)-[0-9a-f]+$/;async function _(t,e,r=process.cwd()){let n=p(r);await i.mkdir(n,{recursive:!0});let o=b(e,r),a=c(n,`${e}.evidence.tmp-${process.pid}-${D(6).toString("hex")}`);return await i.copyFile(t,a),await i.rename(a,o),o}async function I(t=process.cwd()){let e=p(t),r;try{r=await i.readdir(e)}catch{return[]}return r.filter(n=>n.endsWith(".evidence")).sort().map(n=>c(e,n))}async function L(t,e=process.cwd()){if(await P(t))return t;let r=b(t,e);return await P(r)?r:null}async function P(t){try{return await i.stat(t),!0}catch{return!1}}function E(t){try{return process.kill(t,0),!0}catch(e){return e?.code==="EPERM"}}async function M(t=process.cwd(),e=E){let r=p(t);await h(r).catch(()=>({restored:[],removed:[]}));let n=[],o=[],a;try{a=await i.readdir(r,{withFileTypes:!0})}catch{return{aborted:n,removed:o}}for(let u of a){let d=u.name.match(S);if(d){let g=Number(d[1]);if(Number.isFinite(g)&&e(g))continue;let w=c(r,u.name);await i.rm(w,{force:!0}),o.push(w);continue}if(!u.isDirectory()||!u.name.endsWith(".evidence"))continue;let m=c(r,u.name),f=c(m,"run.yaml"),s;try{s=y(await i.readFile(f,"utf8"))}catch{continue}if(s?.status!=="running")continue;let l=s?.environment?.pid;if(typeof l=="number"&&e(l))continue;let x=s?.environment?.saved===!0;s?.environment?.origin==="inline"&&!x?(await i.rm(m,{recursive:!0,force:!0}),o.push(m)):(s.status="aborted",await i.writeFile(f,v(s,{lineWidth:-1})),n.push(m))}return{aborted:n,removed:o}}export{p as a,b,W as c,_ as d,I as e,L as f,M as g};
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as F,b as z,c as ne,d as R}from"./chunk-2YQ6TW77.js";import{a as D}from"./chunk-WAOCHXJ5.js";import{b as U}from"./chunk-FYOCF7DY.js";import{a as j}from"./chunk-2WVKOZ6W.js";import{a as C}from"./chunk-NLCCBXXV.js";import{a as O}from"./chunk-RZ4F3BHX.js";import{e as te}from"./chunk-UR6MHSHU.js";import{readFileSync as Z,existsSync as w,readdirSync as Ee,mkdirSync as T,writeFileSync as x}from"fs";import{readFile as ee,unlink as be}from"fs/promises";import{join as E}from"path";import{randomUUID as P}from"crypto";function V(t){return t?t.includes(`
3
+ `)?t.split(`
4
+ `).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function L(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(s,n)=>{let o=e[n];return o?o.value:s}).replace(/\$\{(.+?)\}/g,(s,n)=>{let o=e[n];return o?o.value:s})}var ie={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD"},q={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},se=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD","VISION_QUERY","DRAG_DROP","SELECT"]);function $(t,e){if(t==="analyze"){let n=e?.action_params?.analyzer_type??"";return q[n]}let s=ie[t];return s||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),s??t.toUpperCase()}function K(t,e){if(!t||!e)return"";try{let s=new Date(t);return isNaN(s.getTime())?"":new Date(s.getTime()+e).toISOString()}catch{return""}}function G(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function oe(t){let e=t.output_variable??"";if(!e)return"[]";let n={...G(t)};return delete n.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||P().replace(/-/g,"").slice(0,8),value:n,variable_description:"API Response"}])}function re(t,e,s){let n=t.action_params??{},o=se.has(e)?"Vision Agent":"Operation Agent",l={operation_type:e};e==="OPEN"&&(l.url=n.url??""),e==="SET_VARIABLE"&&(l.variable_name=t.output_variable??n.key??"",l.variable_value=t.output_value??"");let i={},r={},a=t.action_instruction??"",u=n.text??"",d=n.url??"",g=[["intent",a],["value",u],["url",d]];for(let[h,m]of Object.entries(s)){let b=String(m);if(h.startsWith("secrets."))for(let[I,v]of g)v.includes(b)&&(r[I]=h);for(let[I,v]of g)v.includes(b)&&!(I in i)&&(i[I]=v)}let _=t.action_type,c={operation:t.action_instruction??"",agent:o,operation_dict:l,reasoning:_==="analyze"?n.query??"":t.intent??t.action_instruction??"",variable:i,secrets:r,params:{}};_==="analyze"&&typeof n.code=="string"&&n.code&&(c.code=n.code),_==="analyze"&&typeof n.code_js=="string"&&n.code_js&&(c.code_js=n.code_js),_==="analyze"&&typeof n.condition_expression=="string"&&n.condition_expression&&(c.condition_expression=n.condition_expression),n.uses_websocket===!0&&(c.uses_websocket=!0),n.uses_sse===!0&&(c.uses_sse=!0),_==="analyze"&&n.analyzer_type==="textual_visual"&&(typeof n.wrapped_js=="string"&&(c.wrapped_js=n.wrapped_js),Array.isArray(n.locators)&&(c.locators=n.locators),typeof n.operator=="string"&&(c.operator=n.operator),Array.isArray(n.transforms)&&(c.transforms=n.transforms),typeof n.query=="string"&&(c.query=n.query),typeof n.expected_value=="string"&&(c.expected_value=n.expected_value),typeof n.needs_unit_conversion=="boolean"&&(c.needs_unit_conversion=n.needs_unit_conversion));let f={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[_];return f&&n[f]!==void 0&&(c[f]=n[f]),_==="set_clipboard"&&typeof n.html=="string"&&n.html&&(c.html=n.html),c}function ae(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let s=e.sub_results??[];return s.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?s.some(o=>o.passed===!0):s.every(o=>o.passed===!0)}function X(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function le(t){let e=t.assertion_tree??{},s=e.sub_results??[],n=X(s);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:s,sub_checks:n,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function ce(t){let s=(t.action_params??{}).assertion_tree??{},n=s.sub_results??[],o=X(n);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:n,sub_checks:o,composite_operator:s.composite_operator??"and",verification:"",claim:s.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function ue(t,e,s,n){let o=t.visual_data;if(!o||o.x==null||o.y==null)return null;let l=e?`${e}/test_screenshots`:"";return{x:o.x,y:o.y,confidence:0,bbox:o.bbox??null,bbox_source:o.bbox?"accessibility_tree":"fallback",viewport_width:o.viewport_width??1280,viewport_height:o.viewport_height??800,scale_factor:null,raw_image_url:l?`${l}/untagged_screenshot/${s}.${n?.get(s)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function B(t,e={},s="",n){let o=t.action_type,l=$(o,t),i=t.action_params??{},r=t.coordinates??null,a=t.selectors??null,u=!!(a&&a.length>0),d=t.timestamp??"",g=t.duration_ms??0,_=t.variables_used??{},c=t.action_id??P(),p=P(),f=K(d,g),h="",m="";o==="navigate"?(m=i.url??"",h=m):o==="type"||o==="fill"?h=i.text??"":o==="press_key"?h=i.key??"":o==="wait"?h=String(i.ms??i.timeout_ms??""):o==="evaluate_js"?h=i.script??"":o==="analyze"&&l==="SET_VARIABLE"&&(h=t.output_value??"");let b="";o==="go_back"?b="back":o==="go_forward"&&(b="forward");let I=L(h,e),v=L(m,e),A=L(t.action_instruction??"",e),y=re(t,l,_);return{operation_id:c,instruction_id:p,instruction:A,intent:A,operation_start:d,operation_end:f,status:t.status??"",command:l,name:"",target:"",value:I,message:"",operation_dict:"",frame:t.frame_info?JSON.stringify(t.frame_info):"",error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(y),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:s?`${s}/test_screenshots/untagged_screenshot/${c}.${n?.get(c)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:v,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:l==="ASSERTION"?ae(i):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(i.tab_index??""),tab_identifier:String(i.tab_identifier??""),scroll_value:i.amount??1,scroll_direction:i.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:o==="evaluate_js"?i.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:!1,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:r!==null&&!u,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:u?null:r?.x??null,y_coord:u?null:r?.y??null,target_x_coord:i.target_x??null,target_y_coord:i.target_y??null,source_description:i.source_description??null,target_description:i.target_description??null,use_coordinates:r!==null&&!u,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:u?a.map(k=>({type:k.isXPath?"xpath":"css",...k})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:l==="ASSERTION"?le(i):i.expression_tree??{},assertion_tree:i.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:l==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:i.source_coordinates?{x:i.source_coordinates[0],y:i.source_coordinates[1]}:{},end_coordinates:i.target_coordinates?{x:i.target_coordinates[0],y:i.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:o==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:o==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:ue(t,s,c,n),reasoning:o==="analyze"?i.query??"":t.intent??t.action_instruction??""}}function M(t,e,s={}){let n=t.action_type,o=$(n,t),l=t.timestamp??"",i=t.duration_ms??0,r=K(l,i),a=o==="ASSERTION"||o==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:L(t.action_instruction??"",s),command:o,error:null,parent_instruction_id:"",classification_layer_resp:o==="ASSERTION"?ce(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:l,end_timestamp:r,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:n==="api"?"api":n==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":n==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:n==="evaluate_js"?t.action_params?.script??"":"",user_variables:n==="api"?oe(t):"[]",api_data:n==="api"?{request:t.action_params?.api_data?.request??{},response:G(t)}:{},params_used:!1,hard_assertion:o==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:n==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function de(t,e=[]){let s=t.action_params??{},n=s.branches??[],o=s.winning_index??-1,l=s.sub_results??[],i={};for(let a of l){let u=a.sub_results;if(u)for(let d of u){let g=d.store_key;g&&(i[g]=d)}}let r=n.map((a,u)=>{let d=u===o,g=(a.sub_checks??[]).map(_=>{let c=i[_.store_key];return{description:_.description,store_key:_.store_key,expected_value:_.expected_value,stored_value:c?.extracted_value??_.stored_value,operator:_.operator??c?.operator??"equals",transforms:_.transforms??c?.transforms??[]}});if(g.length===0&&a.condition&&l.length>0){let c=l.find(p=>p.branch_index===u)?.sub_results??[];c.length>0&&(g=c.map(p=>({description:p.description??a.condition,store_key:p.store_key??"",expected_value:p.expected??"true",stored_value:p.extracted_value??void 0,operator:p.operator??"equals",transforms:p.transforms??[]})))}return{branch_index:u,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:d,sub_objective:null,custom_event:a.custom_event??null,children:d?e:[],sub_checks:a.condition?g:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${P().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:o,branches:r,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Y(t,e,s){for(let n of t)n.content_type==="instruction"&&"generative_id"in n&&(n.generative_id=e,n.generative_objective=s)}function N(t,e={},s="",n,o){let l=[],i=0;for(;i<t.length;){let r=t[i],a=r.action_type;if(!o?.keepFailedActions&&r.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(r.until_condition&&!r.error)){i+=1;continue}if(a==="analyze"&&!q[r.action_params?.analyzer_type??""]){i+=1;continue}if(a==="child_agent_start"){let u=r.action_params?.child_id??"",d=r.action_params?.objective??"",g=[];i+=1;let _=1,c="error",p;for(;i<t.length&&_>0;){let y=t[i],k=y.action_type;if(k==="child_agent_start")_+=1;else if(k==="child_agent_end"&&(_-=1,_===0)){c=y.status??"success",p=y,i+=1;break}_>0&&g.push(y),i+=1}let f=N(g,e,s,n);Y(f,u,d);let h=p?.action_params?.result_code??null,m=p?.action_params?.reason_code??null,b=p?.action_params?.error_message??null,I=p?.action_params?.summary??null,v=p?.action_params?.one_liner??null,A=c==="error";l.push({content_type:"generative_block",instruction_id:`generative_block_${u}`,generative_id:u,objective:d,status:c,children:f,error_message:A?b??null:null,error_code:A?m??null:null,result_code:h??null,bifurcation_context:[],approach_reason:V(I),one_liner:v??null});continue}else if(a==="child_agent_end"){i+=1;continue}else if(a==="if_else"){i+=1;let u=[];for(;i<t.length&&t[i].action_type==="child_agent_start";){let d=t[i],g=d.action_params?.child_id??"",_=d.action_params?.objective??"",c=[];i+=1;let p=1,f="error";for(;i<t.length&&p>0;){let m=t[i];if(m.action_type==="child_agent_start")p+=1;else if(m.action_type==="child_agent_end"&&(p-=1,p===0)){f=m.status??"success",i+=1;break}p>0&&c.push(m),i+=1}let h=N(c,e,s,n);u.push(...h)}l.push(de(r,u));continue}else if(a==="query_tool"){i+=1;continue}else if(r.until_condition){let u=B(r,e,s,n),d=M(r,u,e),g=typeof r.until_condition_met=="boolean"?r.until_condition_met:r.status==="success";l.push({content_type:"until_block",instruction_id:`until_${P().slice(0,8)}`,condition:r.until_condition,max_retries:r.until_max_retries??10,settle_ms:r.until_settle_ms??500,current_count:0,condition_met:g,children:[d],generative_id:"",generative_objective:"",variables_used:{},status:r.status??"success"})}else{let u=B(r,e,s,n),d=M(r,u,e);l.push(d)}i+=1}return l}function S(t,e={},s="",n,o){let l=[];for(let i of t){let r=N(i.records,e,s,n,o);if(r.length===0)continue;let a=P().replace(/-/g,"");Y(r,a,i.objective);let u=r.some(c=>"status"in c&&typeof c.status=="string"?c.status==="error"||c.status==="failed":!1),d=i.resultCode?parseInt(i.resultCode,10):null,g=d!==null&&!isNaN(d)&&d>=200,_=u||g?"error":"success";l.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:i.objective,status:_,children:r,error_message:_==="error"?i.errorMessage??null:null,error_code:_==="error"?i.reasonCode??null:null,result_code:i.resultCode??null,bifurcation_context:[],approach_reason:V(i.summary),one_liner:i.oneLiner??null})}return{instructions:l}}var H=te(ne(),1);import{createWriteStream as _e}from"fs";import{readFile as pe}from"fs/promises";import{join as ge,basename as fe}from"path";import{tmpdir as he}from"os";var me=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function W(t){let e=ge(he(),`${fe(t)}_artifacts.zip`);return new Promise((s,n)=>{let o=_e(e),l=(0,H.default)("zip",{zlib:{level:6}});o.on("close",()=>s(e)),l.on("error",n),l.pipe(o),l.glob("**/*",{cwd:t,ignore:me}),l.finalize()})}async function J(t){return pe(t)}async function Ie(t,e){return ee(U(t,e))}function ve(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var Q=class{config;controller;testId;constructor(e){this.config=e,this.controller=new D(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,s,n,o){this.config.log?.(e,s,n,o)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let s=this.config.evidence,n=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let r=this.collectNdjsonPerRun(),a=r.reduce((f,h)=>f+h.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:r.length});let u=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(u)});let{instructions:d}=r.length>0?S(r,u,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:d.length});let g=this.buildExecutionEnvelope(d),_=Buffer.from(JSON.stringify(g));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(_.length/1024).toFixed(1)});let c=E(this.config.sessionDir,"execution.json");x(c,JSON.stringify(g,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:c});let p=s?.packTestDir??this.config.evidenceRead?.packTestDir;if(p){let f=E(p,"auteur");T(f,{recursive:!0}),x(E(f,"execution.json"),JSON.stringify(g,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(f,"execution.json")})}if(e("convert","done"),s)n=_;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let f=null,h;try{f=await W(this.config.sessionDir),h=await J(f),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(h.length/1024/1024).toFixed(1),path:f}),e("zip","done",`${(h.length/1024/1024).toFixed(1)}MB`)}finally{f&&await be(f).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let m=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:m.urls.artifacts?.blob_url,blob_url:m.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(h.length/1024/1024).toFixed(1),blob_size_kb:+(_.length/1024).toFixed(1)}),await Promise.all([R(m.urls.artifacts.upload_url,h,"application/zip"),R(m.urls.blob.upload_url,_,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let r=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:u}=r.length>0?S(r,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},d=this.buildExecutionEnvelope(u),g=E(this.config.sessionDir,"execution.json");x(g,JSON.stringify(d,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:g});let _=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(_){let c=E(_,"auteur");T(c,{recursive:!0});let p=this.readAuthoredExecution();x(E(c,"execution.json"),p??JSON.stringify(d,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(c,"execution.json"),source:p?"authored":"run_envelope"})}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(r){let a=r instanceof Error?r.message:String(r);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),r}}else e("atomic_replace","skipped");let o,l;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let r=await this.config.onCommitLock();if(r.ok)o=r.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:o??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:r.reason,message:r.message}),e("commit_lock","failed",`${r.reason??"unknown"}: ${r.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${r.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let r=new j(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(o=(await r.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:o??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(o)}catch(d){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(d)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(o&&this.config.shareApiBaseUrl)try{l=await this.generateShareLink(o),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:l})}catch(r){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(r)})}if(s&&n){let r=null;e("zip","running");try{await s.sealFn({testcaseId:o,shareId:l}),r=s.sealedPackPath?await ee(s.sealedPackPath):await Ie(s.executionId,s.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:s.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(r.length/1024/1024).toFixed(1)})}catch(a){let u=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:s.executionId,error:u})}if(r){e("zip","done",`${(r.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[ve(s.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(r.length/1024/1024).toFixed(1),blob_size_kb:+(n.length/1024).toFixed(1)}),await Promise.all([R(a.urls.artifacts.upload_url,r,"application/zip"),R(a.urls.blob.upload_url,n,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(n.length/1024).toFixed(1)}),await R(a.urls.blob.upload_url,n,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let i;if(this.config.codeExport?.enabled&&o){let r=!1;try{await this.triggerCodeExport(o),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),r=!0}catch(a){let u=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:u}),e("code_export","failed",`trigger failed: ${u}`)}if(r){e("code_export","running","Waiting for code generation\u2026");try{i=await this.pollAndDownloadCode(o,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:i}),e("code_export","done",i)}catch(a){let u=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:u}),e("code_export","failed",u)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:o,shareId:l,codeExportDir:i}}catch(s){return{success:!1,testId:this.testId,error:s instanceof Error?s.message:String(s)}}}async runCodeExport(e,s){let n=s??this.config.onProgress,o=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),o=!0}catch(l){let i=l instanceof Error?l.message:String(l);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:i}),n("code_export","failed",`trigger failed: ${i}`)}if(o){n("code_export","running","Waiting for code generation\u2026");try{let l=await this.pollAndDownloadCode(e,n);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:l}),n("code_export","done",l),l}catch(l){let i=l instanceof Error?l.message:String(l);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:i}),n("code_export","failed",i);return}}}collectNdjsonPerRun(){let e=[],s=this.config.runObjectives??[],n=this.config.runMetadata??[],o=this.config.evidence??this.config.evidenceRead;for(let l=0;l<this.config.runDirs.length;l++){let i=this.config.runDirs[l],r=s[l]||this.config.firstObjective,a=n[l],u=o?this.readNdjsonFromFile(E(o.packTestDir,"logs",`${o.runIndices?.[l]??l}-actions.ndjson`)):this.readNdjsonFromDir(i);u.length>0&&e.push({objective:r,records:u,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let l=E(this.config.sessionDir,"runs");if(w(l))try{let r=Ee(l,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of r){let u=E(l,a),d=this.readNdjsonFromDir(u);d.length>0&&e.push({objective:this.config.firstObjective,records:d})}}catch{}}return e}readNdjsonFromDir(e){let s=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let n of s)if(w(n))return this.readNdjsonFromFile(n);return[]}readNdjsonFromFile(e){let s=[];if(!w(e))return s;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let n=Z(e,"utf-8");for(let o of n.split(`
5
+ `)){let l=o.trim();if(l)try{s.push(JSON.parse(l))}catch{}}return s}async generateShareLink(e){let s=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:s,testcase_id:e});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},o=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:o,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let l=o?await this.config.authResolver.fetch(s,n):await O(s,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!l.ok)throw new Error(`Share link API failed: ${l.status} ${await l.text()}`);let i=await l.json();if(!i.shareId)throw new Error("Share link API returned no shareId");return i.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:s,body:n}=F({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:s});let o={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(n)},l=this.config.authResolver?await this.config.authResolver.fetch(s,o):await O(s,{...o,headers:{...o.headers,Authorization:this.buildAuthHeader()}});if(!l.ok)throw new Error(`Code export failed: ${l.status} ${await l.text()}`)}async pollAndDownloadCode(e,s){let n=z({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),o=this.config.exitTimeoutMs??3e5,l=5e3,i=Date.now()+o;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:n,timeout_ms:o});let r=(a,u)=>this.config.authResolver?this.config.authResolver.fetch(a,u):O(a,{...u,headers:{...u?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<i;){let a=await r(n,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let c=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:c.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let d=(await a.json()).data?.find(c=>c.code_name==="kane-cli-trigger");if(!d){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),s("code_export","running","Waiting for code generation\u2026"),await this.sleep(l);continue}let g=d.status.toLowerCase();if(g==="in progress"||g==="in_progress"||g==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:d.status}),s("code_export","running","Generating code\u2026"),await this.sleep(l);continue}if(!d.url||d.url.length===0)throw new Error(`Code export status=${d.status} but no files returned`);let _=this.config.codeExportDir??E(this.config.sessionDir,"code-export");T(_,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:d.url.length,dir:_}),s("code_export","running",`Downloading ${d.url.length} files\u2026`);for(let c of d.url){let p=E(_,c.file_name),f=await O(c.file_url);if(!f.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:c.file_name,status:f.status});continue}let h=await f.text();x(p,h,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:c.file_name,size_bytes:h.length})}return _}throw new Error("Code export timed out")}sleep(e){return new Promise(s=>setTimeout(s,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:C(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let s=Z(e,"utf8");return JSON.parse(s),s}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let s=this.config.runStatuses.every(i=>i==="passed")?"success":"error",n=this.config.variableIds??{},o=[];if(this.config.variables)for(let[i,r]of Object.entries(this.config.variables)){if(r.secret)continue;let a=i.startsWith("global.")?i.slice(7):i;o.push({id:n[a]??0,name:a,value:r.value,session_value:r.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let l=[];for(let i of this.collectNdjsonPerRun())for(let r of i.records)r.output_variable&&r.output_value!=null&&l.push({name:r.output_variable,value:String(r.output_value),value_type:"test_level",variable_description:"ANALYZE result"});return{test_id:this.testId,version:"v4",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:s,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:[],test_params:[],test_level_variables:JSON.stringify(l),test_global_variables:o,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{Ie as a,ve as b,Q as c};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as t,b as i}from"./chunk-B2PZAB7J.js";import{i as s,j as e}from"./chunk-IACKIGPX.js";function a(r,n){return"sha256:"+i(Buffer.from("assurance."+r+"\0"+t(s(r,n)),"utf8"))}function f(r,n,o,u){return"sha256:"+i(Buffer.from("assurance.edge\0"+t({type:r,src:n,dst:o,props:e(r,u)}),"utf8"))}function d(r,n){return{source_id:r,blob:n}}function p(r){return{...r,derived:!0}}export{a,f as b,d as c,p as d};
@@ -0,0 +1,8 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as s,j as l}from"./chunk-HMGNPFXP.js";import{readFileSync as g,writeFileSync as o,mkdirSync as i,existsSync as p}from"fs";import{dirname as a}from"path";var n={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:l,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0},c=class{constructor(r=s){this.path=r}exists(){return p(this.path)}load(){try{let r=g(this.path,"utf-8"),e=JSON.parse(r);return{...n,...e,code_export:{...n.code_export,...e.code_export??{}},generate:{...n.generate,...e.generate??{}}}}catch{return{...n,code_export:{...n.code_export},generate:{...n.generate}}}}set(r,e){try{let t=this.load();t[r]=e,i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
3
+ `)}catch(t){let d=t instanceof Error?t.message:String(t);process.stderr.write(`[config] Failed to save config: ${d}
4
+ `)}}save(r){try{let t={...this.load(),...r};i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
5
+ `)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[config] Failed to save config: ${t}
6
+ `)}}writeRaw(r){try{i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(r,null,2)+`
7
+ `)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[config] Failed to save config: ${t}
8
+ `)}}};export{c as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{homedir as e}from"os";import{join as t}from"path";var m="0.5.0",d="kane-cli",a=t(e(),".testmuai","kaneai"),g=t(a,"profiles"),h=t(a,"tui-config.json"),_="https://registry.npmjs.org/@testmuai/kane-cli",L="https://api.github.com/repos/LambdaTest/kane-cli/releases",n="@testmuai/kane-cli-skill",x=`https://registry.npmjs.org/${n}`,r="kane-cli",A=[{dir:t(e(),".claude","skills",r),agent:"Claude Code"},{dir:t(e(),".agents","skills",r),agent:"Codex CLI"},{dir:t(e(),".gemini","skills",r),agent:"Gemini CLI"}],u="https://dd-proxy.lambdatest.com/intake/kane-cli",U="https://kaneai-playground.lambdatest.io",b=9222,R=9230,I=t(a,"chrome-profiles"),o=t(a,"hints"),C=t(o,"state.json");function E(s){return t(o,`catalog-${s}.json`)}var i="127.0.0.1",T=18392,S=18400,c="/callback";function N(s){return`http://${i}:${s}${c}`}var P="KANE CLI",B="*",O={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",testGeneratorBaseUrl:"https://test-manager-api.lambdatest.com",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server",evidenceViewerUrl:"https://evidence.lambdatest.com"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",testGeneratorBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server",evidenceViewerUrl:"https://stage-evidence.lambdatestinternal.com"}},k={orange:"#ff9500",generateAccent:"#0d9488",purple:"#b388ff",secondary:"#888888",dim:"#666666",muted:"#444444",green:"#4ade80",red:"#ef4444"};export{m as a,d as b,a as c,h as d,_ as e,L as f,n as g,A as h,u as i,U as j,b as k,R as l,I as m,C as n,E as o,i as p,T as q,S as r,c as s,N as t,P as u,B as v,O as w,k as x};
2
+ import{homedir as e}from"os";import{join as t}from"path";var m="0.6.1",d="kane-cli",a=t(e(),".testmuai","kaneai"),g=t(a,"profiles"),h=t(a,"tui-config.json"),_="https://registry.npmjs.org/@testmuai/kane-cli",L="https://api.github.com/repos/LambdaTest/kane-cli/releases",n="@testmuai/kane-cli-skill",x=`https://registry.npmjs.org/${n}`,r="kane-cli",A=[{dir:t(e(),".claude","skills",r),agent:"Claude Code"},{dir:t(e(),".agents","skills",r),agent:"Codex CLI"},{dir:t(e(),".gemini","skills",r),agent:"Gemini CLI"}],u="https://dd-proxy.lambdatest.com/intake/kane-cli",U="https://kaneai-playground.lambdatest.io",b=9222,R=9230,I=t(a,"chrome-profiles"),o=t(a,"hints"),C=t(o,"state.json");function E(s){return t(o,`catalog-${s}.json`)}var i="127.0.0.1",T=18392,S=18400,c="/callback";function N(s){return`http://${i}:${s}${c}`}var P="KANE CLI",B="*",O={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",testGeneratorBaseUrl:"https://test-manager-api.lambdatest.com",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server",evidenceViewerUrl:"https://evidence.lambdatest.com"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",testGeneratorBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server",evidenceViewerUrl:"https://stage-evidence.lambdatestinternal.com"}},k={orange:"#ff9500",generateAccent:"#0d9488",purple:"#b388ff",secondary:"#888888",dim:"#666666",muted:"#444444",green:"#4ade80",red:"#ef4444"};export{m as a,d as b,a as c,h as d,_ as e,L as f,n as g,A as h,u as i,U as j,b as k,R as l,I as m,C as n,E as o,i as p,T as q,S as r,c as s,N as t,P as u,B as v,O as w,k as x};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as f}from"./chunk-JFAFKHDX.js";import{a as v}from"./chunk-GIRXJOJI.js";import{g}from"./chunk-B2PZAB7J.js";import{d as m,f as u}from"./chunk-IACKIGPX.js";var w=3,S={edit:"edit",reject:"mistake",dedup_dropped:"mistake",approve:"usage",enhance:"directed-edit",add:"directed-edit",default_accepted:"usage",default_overridden:"edit",gap_resolution:"usage",dedup_kept:"usage"};function T(y){let{contextDir:i,graph:o,watermark:_,by:N}=y,{signals:$}=f(i,_),h=$.filter(e=>e.event_id===void 0||o.appliedEvents.has(e.event_id)),s=new Map;for(let e of h){let t=e.event_id??`${e.ts}|${e.id}|${e.verdict}|${e.polarity}`;s.has(`${t}|${e.polarity}|${e.verdict}`)||s.set(`${t}|${e.polarity}|${e.verdict}`,e)}let k=[...s.values()].sort((e,t)=>(e.event_id??e.ts)<(t.event_id??t.ts)?-1:1),n=new Map;for(let e of k){let t=`${e.verdict}|${e.tag??""}`,r=n.get(t)??{verdict:e.verdict,tag:e.tag,events:new Set};r.events.add(e.event_id??e.ts),n.set(t,r)}let d=[],a=0;for(let[,e]of[...n.entries()].sort(([t],[r])=>t<r?-1:1)){if(e.events.size<w)continue;let r={derived:!0,statement:`${e.verdict}${e.tag?`/${e.tag}`:""} recurs (${e.events.size} distinct events) \u2014 bias future proposals ${e.verdict==="approve"?"toward":"away from"} this pattern`,learned_from_kind:S[e.verdict]??"usage",learned_from:[...e.events].sort()},c=u("stylenote",r);if(c.length>0)return{record:null,errors:c.map(l=>({code:l.code,detail:l.detail})),minted:0};let p=v("stylenote",r);o.hasNode(p)||(d.push({cid:p,label:m.STYLENOTE,content:r}),a+=1)}return d.length===0?{record:null,errors:null,minted:0}:{record:g(i,{ts:new Date().toISOString(),proposal_id:null,nodes:d,edges:[],review:[],supersessions:[],source_head_moves:{}},{expectPrev:o.latestHash}).record,errors:null,minted:a}}export{T as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var l="assurance/context@1";var u={source:{hashed:["blob","source_id"],required:["blob","source_id"],enums:{}},usecase:{hashed:["actors","criteria","derived","description","risk","summary","title","value"],required:["derived","risk","title"],enums:{risk:["high","med","low"]}},scenario:{hashed:["case_type","derived","description","intent","parameters","tags","technique_notes","title"],required:["case_type","derived","intent","title"],enums:{case_type:["happy","negative","boundary","edge","security","a11y","perf","i18n"]}},ac:{hashed:["derived","expected_answer","kind","measurable","risk","text"],required:["derived","risk","text"],enums:{risk:["high","med","low"],kind:["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"]}},test:{hashed:["check","config","definitionId","derived","objectives_blob","surface_required","test_md_blob","title"],required:["definitionId","derived","title"],enums:{}},gap:{hashed:["derived","kind","question","ref","risk","risk_rationale","text","uc"],required:["derived","kind"],enums:{kind:["ambiguous","incomplete","contradictory","unmeasurable","missing-expected-result","budget-evicted","invariant-unexercised"],risk:["high","med","low"]}},stylenote:{hashed:["derived","learned_from_kind","statement","tags","text"],unhashed:["learned_from"],required:["derived","learned_from_kind","statement"],enums:{learned_from_kind:["edit","directed-edit","mistake","usage"]}}},f={DERIVES:{src:["source"],dst:["usecase","ac","scenario","test"],salient:["anchor","source_cid","source_id"],props:["anchor","quote","source_cid","source_id"],pin:{comparesTo:"source_head"},cardinality:"many",acyclic:!1},belongs_to:{src:["scenario"],dst:["usecase"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"one-live-per-src",acyclic:!1},scoped_to:{src:["ac"],dst:["scenario","usecase"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"one-live-per-src",acyclic:!1},exercises:{src:["scenario"],dst:["ac"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!1},verifies:{src:["test"],dst:["ac"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!1},automates:{src:["test"],dst:["scenario"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"one-live-per-src-and-dst",acyclic:!1},depends_on:{src:["usecase","scenario"],dst:["usecase","scenario"],salient:[],props:["reason"],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!0},reuses:{src:["test"],dst:["test"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!0},annotates:{src:["gap","stylenote"],dst:["source","usecase","scenario","ac","test"],salient:[],props:["reason"],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!1}},E=["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"];var g={presence:{operators:["exists","forall"],baseline:"null",requires:[]},"forbidden-presence":{operators:["exists","forall"],baseline:"null",requires:[]},count:{operators:["equals","gte","lte"],baseline:"null",requires:[],operand_forms:["literal","derived"]},delta:{operators:["changed-by"],baseline:"required",requires:[]},"state-transition":{operators:["changed-by","equals"],baseline:"required",requires:[]},absolute:{operators:["equals","contains","gte","lte"],baseline:"null",requires:[]},bound:{operators:["gte","lte"],baseline:"null",requires:[]},propagation:{operators:["exists","equals"],baseline:"null",requires:[]},latency:{operators:["lte"],baseline:"null",requires:["within"]},graded:{operators:["gte"],baseline:"null",requires:["metric","threshold"]}},y=Object.freeze({SOURCE:"source",USECASE:"usecase",SCENARIO:"scenario",AC:"ac",TEST:"test",GAP:"gap",STYLENOTE:"stylenote"}),h=Object.freeze({DERIVES:"DERIVES",BELONGS_TO:"belongs_to",SCOPED_TO:"scoped_to",EXERCISES:"exercises",VERIFIES:"verifies",AUTOMATES:"automates",DEPENDS_ON:"depends_on",REUSES:"reuses",ANNOTATES:"annotates"});function c(r,s,t){let n=[],e=g[r];if(!e)return n.push({code:"BAD_CHECK",detail:`${t}.kind ${JSON.stringify(r)} not in ${E.join("|")}`}),n;let o=s.operator;o!==void 0&&!e.operators.includes(o)&&n.push({code:"BAD_CHECK",detail:`${t}: operator ${JSON.stringify(o)} illegal for kind "${String(r)}" (legal: ${e.operators.join("|")})`});for(let a of e.requires)(s[a]===void 0||s[a]===null||s[a]==="")&&n.push({code:"BAD_CHECK",detail:`${t}: kind "${String(r)}" requires "${a}"`});e.baseline==="null"&&s.baseline!==void 0&&s.baseline!==null&&n.push({code:"BAD_CHECK",detail:`${t}: kind "${String(r)}" must carry baseline null (only delta/state-transition have one)`});let i=s.operand;if(i!==null&&typeof i=="object"&&!Array.isArray(i)){let a=Object.keys(i),d=i.derived;(!(e.operand_forms?.includes("derived")??!1)||a.length!==1||a[0]!=="derived"||typeof d!="string"||!d.trim())&&n.push({code:"BAD_CHECK",detail:`${t}: object operand is only the count derivation form {derived: "<how the runtime value is computed>"}`})}return n}function m(r,s){let t=u[r];if(!t)return[{code:"UNKNOWN_LABEL",detail:`unknown node label ${JSON.stringify(r)}`}];let n=[];for(let e of Object.keys(s))s[e]!==void 0&&!t.hashed.includes(e)&&!(t.unhashed??[]).includes(e)&&n.push({code:"UNKNOWN_FIELD",detail:`${r}.${e} is not in the ${l} schema`});for(let e of t.required)(s[e]===void 0||s[e]===null)&&n.push({code:"MISSING_FIELD",detail:`${r}.${e} is required`});for(let[e,o]of Object.entries(t.enums)){let i=s[e];i!==void 0&&!o.includes(i)&&n.push({code:"BAD_ENUM",detail:`${r}.${e} ${JSON.stringify(i)} not in ${o.join("|")}`})}if(r==="test"&&s.check&&typeof s.check=="object"){let e=s.check;n.push(...c(e.kind,e,"test.check"))}if(r==="ac"&&s.expected_answer&&typeof s.expected_answer=="object"){let e=s.expected_answer;n.push(...c(s.kind??e.kind,e,"ac.expected_answer"))}return n}function p(r){return f[r]}function S(r,s,t,n){let e=p(r);if(!e)return[{code:"UNKNOWN_EDGE_TYPE",detail:`unknown edge type ${JSON.stringify(r)}`}];let o=[];e.src.includes(s)||o.push({code:"ILLEGAL_EDGE",detail:`${r} src must be ${e.src.join("|")}, got ${s}`}),e.dst.includes(t)||o.push({code:"ILLEGAL_EDGE",detail:`${r} dst must be ${e.dst.join("|")}, got ${t}`}),r==="depends_on"&&s!==t&&o.push({code:"ILLEGAL_EDGE",detail:`depends_on links same-label nodes only, got ${s}\u2192${t}`});for(let i of e.salient)(n[i]===void 0||n[i]===null)&&o.push({code:"MISSING_SALIENT",detail:`${r}.props.${i} is salient (inside the ecid) and required`});for(let i of Object.keys(n))n[i]!==void 0&&(e.props.includes(i)||o.push({code:"UNKNOWN_EDGE_PROP",detail:`${r}.props.${i} is not in the ${l} schema`}));return o}function k(r,s){let t=u[r];if(!t)return s;let n={};for(let e of t.hashed)s[e]!==void 0&&(n[e]=s[e]);return n}function N(r,s){let t=p(r);if(!t)return s;let n={};for(let e of t.salient)s[e]!==void 0&&(n[e]=s[e]);return n}export{l as a,u as b,f as c,y as d,h as e,m as f,p as g,S as h,k as i,N as j};
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as k}from"./chunk-FPFOW6BS.js";import{h as a}from"./chunk-7KDNH6JP.js";import{a as m}from"./chunk-2WVKOZ6W.js";import{a as y}from"./chunk-UOGJUJCF.js";import{a as h}from"./chunk-IECUFWIZ.js";var $=10,u=200,N=1e4,S=1e6;function T(t,e,r="streaming"){let n=r==="full-fetch"?S:N,o=$,i=0;if(t!==void 0){let s=Number(t);if(!Number.isInteger(s)||s<1||s>u)return{error:`--limit must be an integer in [1, ${u}] (got "${t}")`};o=s}if(e!==void 0){let s=Number(e);if(!Number.isInteger(s)||s<0||s>n)return{error:`--offset must be an integer in [0, ${n}] (got "${e}")`};i=s}return{limit:o,offset:i}}function C(t,e){if(!e)return t;let r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r))}function j(t,{limit:e,offset:r}){let n=t.slice(r,r+e),o=t.length>r+e;return{slice:n,hasMore:o}}function v(t,e,r=n=>process.stdout.write(`${n}
2
+ import{a as k}from"./chunk-FPFOW6BS.js";import{h as a}from"./chunk-M5JQXOCE.js";import{a as m}from"./chunk-2WVKOZ6W.js";import{a as y}from"./chunk-KGP7NSXH.js";import{a as h}from"./chunk-4CRKK5WV.js";var $=10,u=200,N=1e4,S=1e6;function T(t,e,r="streaming"){let n=r==="full-fetch"?S:N,o=$,i=0;if(t!==void 0){let s=Number(t);if(!Number.isInteger(s)||s<1||s>u)return{error:`--limit must be an integer in [1, ${u}] (got "${t}")`};o=s}if(e!==void 0){let s=Number(e);if(!Number.isInteger(s)||s<0||s>n)return{error:`--offset must be an integer in [0, ${n}] (got "${e}")`};i=s}return{limit:o,offset:i}}function C(t,e){if(!e)return t;let r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r))}function j(t,{limit:e,offset:r}){let n=t.slice(r,r+e),o=t.length>r+e;return{slice:n,hasMore:o}}function v(t,e,r=n=>process.stdout.write(`${n}
3
3
  `)){for(let n of t)r(JSON.stringify(n));r(JSON.stringify({_meta:"page",limit:e.limit,offset:e.offset,returned:t.length,has_more:e.has_more}))}function b(t,e,r=n=>process.stdout.write(`${n}
4
- `)){if(t.length===0){r("(no results)");return}let n=Math.max(2,...t.map(s=>s.id.length)),o=`${"ID".padEnd(n)} NAME`;r(o),r(`${"-".repeat(n)} ----`);for(let s of t)r(`${s.id.padEnd(n)} ${s.name}`);r("");let i=e.offset+t.length;if(e.hasMore){let s=e.totalIsLowerBound?`${e.total}+`:`${e.total}`;r(`${i} of ${s} \u2014 next: --offset ${e.offset+e.limit}`)}else r(`${t.length} shown (${e.total} total)`)}async function B(t,e,r){if(r.username&&r.accessKey)return{ok:!0,creds:{username:r.username,access_key:r.accessKey}};let n=new h,o=n.loadBasicAuth(t,e);if(o)return{ok:!0,creds:{username:o.username,access_key:o.access_key}};let i=n.loadCredentials(t,e);if(!i)return{ok:!1,reason:"no_credentials"};let s=i.access_token;try{let{refreshOAuthToken:d}=await import("./token-refresh-2HKIYD4Y.js"),w=await d({creds:n,profile:t,env:e,credentials:i});w&&(s=w.accessToken)}catch(d){return{ok:!1,reason:"refresh_failed",detail:d instanceof Error?d.message:String(d)}}let c=y(e),f=await new k(c.controllerBaseUrl,async()=>s,null).resolve();return f?{ok:!0,creds:{username:f.username,access_key:f.access_key}}:{ok:!1,reason:"exchange_failed"}}function E(t,e,r){switch(r.reason){case"no_credentials":return{message:`error: no credentials for profile "${t}" [${e}]. Run \`kane-cli login\` or pass --username/--access-key.
4
+ `)){if(t.length===0){r("(no results)");return}let n=Math.max(2,...t.map(s=>s.id.length)),o=`${"ID".padEnd(n)} NAME`;r(o),r(`${"-".repeat(n)} ----`);for(let s of t)r(`${s.id.padEnd(n)} ${s.name}`);r("");let i=e.offset+t.length;if(e.hasMore){let s=e.totalIsLowerBound?`${e.total}+`:`${e.total}`;r(`${i} of ${s} \u2014 next: --offset ${e.offset+e.limit}`)}else r(`${t.length} shown (${e.total} total)`)}async function B(t,e,r){if(r.username&&r.accessKey)return{ok:!0,creds:{username:r.username,access_key:r.accessKey}};let n=new h,o=n.loadBasicAuth(t,e);if(o)return{ok:!0,creds:{username:o.username,access_key:o.access_key}};let i=n.loadCredentials(t,e);if(!i)return{ok:!1,reason:"no_credentials"};let s=i.access_token;try{let{refreshOAuthToken:d}=await import("./token-refresh-OGBTJGZ2.js"),w=await d({creds:n,profile:t,env:e,credentials:i});w&&(s=w.accessToken)}catch(d){return{ok:!1,reason:"refresh_failed",detail:d instanceof Error?d.message:String(d)}}let c=y(e),f=await new k(c.controllerBaseUrl,async()=>s,null).resolve();return f?{ok:!0,creds:{username:f.username,access_key:f.access_key}}:{ok:!1,reason:"exchange_failed"}}function E(t,e,r){switch(r.reason){case"no_credentials":return{message:`error: no credentials for profile "${t}" [${e}]. Run \`kane-cli login\` or pass --username/--access-key.
5
5
  `,exitCode:2};case"refresh_failed":return{message:`error: OAuth token refresh failed for profile "${t}" [${e}]${r.detail?`: ${r.detail}`:""}. Run \`kane-cli login\` to re-auth.
6
6
  `,exitCode:2};case"exchange_failed":return{message:`error: TMS credential exchange failed for profile "${t}" [${e}]. Token may be revoked \u2014 try \`kane-cli login\`; if the problem persists, TMS may be down.
7
7
  `,exitCode:2}}}function O(t){return{id:t.project_id,name:t.name}}function M(t){return{id:t.id,name:t.name}}async function P(t,e,r,n){let o=r+n+1,i=[],s=!0;for await(let c of t.listProjectsStream({name:e})){if(i.push(...c.projects),c.done){s=!0;break}if(i.length>=o){s=!1;break}}return{items:i,doneStreaming:s}}function g(t){return!!t.agent||!process.stdin.isTTY||!process.stdout.isTTY}function _(t,e=r=>process.stdout.write(`${r}
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as t}from"./chunk-GEAWRRR7.js";async function l(e){let o=e.credentials.expires_at,i=e.thresholdSeconds??300;if(o-Date.now()/1e3>=i)return null;let r=e.creds.loadClient(e.profile,e.env);if(!r)return null;let n=await new t(e.env).refreshToken(e.credentials.refresh_token,r.client_id),s=Math.floor(Date.now()/1e3)+n.expires_in;return e.creds.saveCredentials(e.profile,e.env,{access_token:n.access_token,refresh_token:n.refresh_token,expires_at:s,scope:n.scope}),{accessToken:n.access_token,refreshToken:n.refresh_token,expiresAt:s,scope:n.scope}}export{l as a};
2
+ import{a as t}from"./chunk-RH2OAIJI.js";async function l(e){let o=e.credentials.expires_at,i=e.thresholdSeconds??300;if(o-Date.now()/1e3>=i)return null;let r=e.creds.loadClient(e.profile,e.env);if(!r)return null;let n=await new t(e.env).refreshToken(e.credentials.refresh_token,r.client_id),s=Math.floor(Date.now()/1e3)+n.expires_in;return e.creds.saveCredentials(e.profile,e.env,{access_token:n.access_token,refresh_token:n.refresh_token,expires_at:s,scope:n.scope}),{accessToken:n.access_token,refreshToken:n.refresh_token,expiresAt:s,scope:n.scope}}export{l as a};