@testmuai/kane-cli 0.6.7 → 0.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChatSurface-B2QJYKV4.js +8 -0
- package/dist/{ChromeProfilePicker-IW3K43VC.js → ChromeProfilePicker-FSZB4SZR.js} +1 -1
- package/dist/{CliFeedbackPrompt-ZJ4LZGPK.js → CliFeedbackPrompt-WNMDCIHZ.js} +1 -1
- package/dist/{CliUploadProgress-SMPVN7Q6.js → CliUploadProgress-H4265KXU.js} +1 -1
- package/dist/{ConfigView-RTAGKZH4.js → ConfigView-XCUZ44SP.js} +1 -1
- package/dist/EvidenceViewOffer-5TJCRM2T.js +2 -0
- package/dist/{FolderPicker-QUY7LNVZ.js → FolderPicker-S2XVCPYN.js} +1 -1
- package/dist/{HelpView-47J2NZWJ.js → HelpView-OPKRGNNM.js} +1 -1
- package/dist/{InfoBox-G63WZAMH.js → InfoBox-TW2PGJK5.js} +1 -1
- package/dist/{LinksBox-2HIHDT5K.js → LinksBox-66M7XP5Y.js} +1 -1
- package/dist/{ProfilesView-TUXQXPXJ.js → ProfilesView-T2CFQPR5.js} +1 -1
- package/dist/{ProjectPicker-VUABWG2P.js → ProjectPicker-7ALN52CY.js} +1 -1
- package/dist/{SaveSessionPrompt-PNVGNLGO.js → SaveSessionPrompt-HM3F6QML.js} +1 -1
- package/dist/SingleShotApp-YQYS6HTB.js +2 -0
- package/dist/{SummaryBox-36MDDDYQ.js → SummaryBox-BQZEGOIV.js} +1 -1
- package/dist/TestMdRunView-7CL3PM3J.js +2 -0
- package/dist/{WhoamiView-LHU6RGIY.js → WhoamiView-722MBPSG.js} +1 -1
- package/dist/{bind-E67W2DXG.js → bind-HNI5LCNK.js} +2 -2
- package/dist/{bridge-WVFTWHKP.js → bridge-V4FF5QPK.js} +1 -1
- package/dist/{changelog-D4Y5QJIZ.js → changelog-KMYZW5MI.js} +1 -1
- package/dist/chat-committer-MWZ4JQMM.js +2 -0
- package/dist/chat-controller-YX5A7R52.js +2 -0
- package/dist/{chunk-GAD6IBZ6.js → chunk-2Z5MSC23.js} +8 -8
- package/dist/{chunk-UQVKNUYO.js → chunk-345PY4SZ.js} +1 -1
- package/dist/{chunk-KVAALPTA.js → chunk-3YI4QRXF.js} +1 -1
- package/dist/{chunk-NEHF4C6X.js → chunk-4BAL4OGF.js} +1 -1
- package/dist/chunk-4CKZAGBD.js +2 -0
- package/dist/{chunk-7ZMYAXES.js → chunk-4FH2KFRT.js} +1 -1
- package/dist/{chunk-UZWOHCFX.js → chunk-4GXOBABK.js} +1 -1
- package/dist/{chunk-GLVDOR5G.js → chunk-7BCZLDNX.js} +1 -1
- package/dist/{chunk-AASBJJCU.js → chunk-AU7WQ2O5.js} +2 -2
- package/dist/{chunk-3CY3DZDH.js → chunk-CLYG26XV.js} +2 -2
- package/dist/{chunk-TADJIOHV.js → chunk-DKERZJYF.js} +1 -1
- package/dist/{chunk-Z34XRBKQ.js → chunk-DPOES6G3.js} +1 -1
- package/dist/{chunk-EDM6YACR.js → chunk-EASTDHNW.js} +1 -1
- package/dist/{chunk-G5CYSC23.js → chunk-EWLLPUP4.js} +1 -1
- package/dist/{chunk-WFQUDSKY.js → chunk-F42YVALT.js} +1 -1
- package/dist/chunk-FCMLIK7P.js +2 -0
- package/dist/{chunk-RBLZUDMZ.js → chunk-FFHBQK5N.js} +2 -2
- package/dist/{chunk-FYSWQ4K7.js → chunk-FT4G3QGO.js} +1 -1
- package/dist/{chunk-QYTMD6NM.js → chunk-FVM7TWKT.js} +1 -1
- package/dist/{chunk-BBZBXSTP.js → chunk-G6F2BOFT.js} +1 -1
- package/dist/{chunk-LVWB6TB2.js → chunk-GBYH35H5.js} +1 -1
- package/dist/chunk-GG43HSU2.js +3 -0
- package/dist/{chunk-MTG2LRGV.js → chunk-GNNMHYWE.js} +1 -1
- package/dist/{chunk-A2AZQ4PQ.js → chunk-IWBPV3VS.js} +1 -1
- package/dist/{chunk-XUHVQ5VL.js → chunk-JHAGEBKE.js} +1 -1
- package/dist/chunk-L3HG5ONB.js +4 -0
- package/dist/chunk-LEA6IHXC.js +2 -0
- package/dist/{chunk-5J3HQZNU.js → chunk-LMMOR7CR.js} +1 -1
- package/dist/{chunk-QG6LJCZG.js → chunk-LRA3V5GY.js} +1 -1
- package/dist/chunk-MXLXKHW4.js +2 -0
- package/dist/{chunk-RWIHSR4H.js → chunk-NIKA2V6B.js} +1 -1
- package/dist/chunk-O4HWPV67.js +13 -0
- package/dist/{chunk-77PBBYRZ.js → chunk-OAEZKYYQ.js} +2 -2
- package/dist/{chunk-IX34JIXK.js → chunk-OV2W7KBC.js} +1 -1
- package/dist/{chunk-JR37W7IJ.js → chunk-P4SE6YON.js} +1 -1
- package/dist/{chunk-X47VFBIV.js → chunk-QB4IOM3X.js} +1 -1
- package/dist/chunk-QM3XF5TW.js +11 -0
- package/dist/chunk-QM4S2APK.js +2 -0
- package/dist/{chunk-RGQIBS32.js → chunk-QTHITA73.js} +1 -1
- package/dist/{chunk-3NR6OTHL.js → chunk-QZJID3OZ.js} +1 -1
- package/dist/{chunk-QVJ7C4GW.js → chunk-QZNUTCSD.js} +1 -1
- package/dist/{chunk-SK2GVMTJ.js → chunk-R65HNFRB.js} +1 -1
- package/dist/{chunk-YB54MHKU.js → chunk-RLICAFFQ.js} +1 -1
- package/dist/chunk-RQM3DUSB.js +9 -0
- package/dist/chunk-SHAA6FOD.js +11 -0
- package/dist/chunk-SORKKW7B.js +6 -0
- package/dist/{chunk-TTJ4XMWP.js → chunk-T2ULEJK7.js} +1 -1
- package/dist/{chunk-OPDJD7WS.js → chunk-T4WZWKIU.js} +2 -2
- package/dist/{chunk-TSWGQKUK.js → chunk-TACPTX64.js} +2 -2
- package/dist/chunk-TFVMSEIA.js +2 -0
- package/dist/{chunk-DL5CXC64.js → chunk-U5QTE3WX.js} +1 -1
- package/dist/{chunk-6EC54ZHT.js → chunk-U6TLLYRG.js} +1 -1
- package/dist/{chunk-NMKZHHB6.js → chunk-VCYVSKPM.js} +1 -1
- package/dist/chunk-VXLOEM2U.js +347 -0
- package/dist/{chunk-I37UOX73.js → chunk-XTO236AL.js} +3 -3
- package/dist/chunk-XWIN3S7O.js +4 -0
- package/dist/{chunk-3GOZ7R4G.js → chunk-YY6WPFMT.js} +3 -3
- package/dist/{chunk-WJG4ZPUH.js → chunk-ZA4GR5R7.js} +1 -1
- package/dist/{config-BZ7C5NU5.js → config-Z4OS3HEE.js} +1 -1
- package/dist/cover-cmd-L2HSVDLH.js +2 -0
- package/dist/{credentials-BPJL6YIZ.js → credentials-TNEVAUHI.js} +1 -1
- package/dist/dossier-ZHSHATVU.js +3 -0
- package/dist/evidence-MA3LDBWG.js +2 -0
- package/dist/evolve-cmd-DTW4EOXM.js +2 -0
- package/dist/{explain-cmd-AG6ZDXV6.js → explain-cmd-327F6ESA.js} +1 -1
- package/dist/{explain-cmd-NZPC6537.js → explain-cmd-E366QTAD.js} +1 -1
- package/dist/extract-bind-DZLG4GUE.js +5 -0
- package/dist/{extract-cmd-4PGUDJMU.js → extract-cmd-LFVMG6UE.js} +1 -1
- package/dist/gaps-cmd-IAEXXESW.js +2 -0
- package/dist/{generate-headless-NZUDYIKJ.js → generate-headless-TYQRYQKJ.js} +2 -2
- package/dist/index.js +12 -12
- package/dist/ingest-CBQAXVH6.js +2 -0
- package/dist/ingest-cmd-JN6PLDE3.js +3 -0
- package/dist/interactive-bind-QEBWUJCN.js +7 -0
- package/dist/lifecycle-cmd-KZOC4WDW.js +2 -0
- package/dist/list-cmd-6X5U46RD.js +3 -0
- package/dist/{list-commands-55RCFEOL.js → list-commands-BU2MSYRH.js} +1 -1
- package/dist/logical-ids-RFGWBVML.js +2 -0
- package/dist/login-flow-4L62GWLT.js +2 -0
- package/dist/{persist-recorded-session-HK7JUONC.js → persist-recorded-session-RAL7UCQT.js} +1 -1
- package/dist/pipeline-PLI5WQKX.js +2 -0
- package/dist/readmodel-V3DVL6NP.js +2 -0
- package/dist/reconcile-cmd-UXY36ROJ.js +2 -0
- package/dist/{recording-banner-5IYX2KBV.js → recording-banner-MBR3Q7VD.js} +1 -1
- package/dist/{require-project-folder-J4Q4FRQ4.js → require-project-folder-KE7XOOFN.js} +1 -1
- package/dist/review-cmd-XVWPSWU2.js +4 -0
- package/dist/run-5DQSL5KH.js +2 -0
- package/dist/run-B7BRNC3X.js +2 -0
- package/dist/{run-test-md-WN6BH3PC.js → run-test-md-ZCAWNP35.js} +2 -2
- package/dist/{skill-installer-4HYPUBNB.js → skill-installer-H5DPJJFW.js} +1 -1
- package/dist/{spawner-VD6YFZ43.js → spawner-C6B5J73J.js} +1 -1
- package/dist/tcg-generate-DIMZXAV3.js +2 -0
- package/dist/{testmd-actions-LT5FNIR6.js → testmd-actions-X6XCV53D.js} +1 -1
- package/dist/token-refresh-7PAPCMQK.js +2 -0
- package/dist/{validate-basic-XWGKC5VF.js → validate-basic-VBPGGHES.js} +1 -1
- package/dist/{version-check-6FDTS6MK.js → version-check-YPRCQJ7E.js} +1 -1
- package/dist/{view-cmd-PCDG3FIC.js → view-cmd-G4PGJRQH.js} +3 -3
- package/dist/walk-session-GWOP27TX.js +2 -0
- package/package.json +6 -6
- package/dist/ChatSurface-Y2M6HB2R.js +0 -8
- package/dist/EvidenceViewOffer-LHPIZUGQ.js +0 -2
- package/dist/SingleShotApp-BZV5CULT.js +0 -2
- package/dist/TestMdRunView-A655PMEY.js +0 -2
- package/dist/chat-committer-WOTCC7L3.js +0 -2
- package/dist/chat-controller-MONWZKS7.js +0 -4
- package/dist/chunk-64LC36AF.js +0 -2
- package/dist/chunk-6PS65QFF.js +0 -2
- package/dist/chunk-CIFVUX3B.js +0 -4
- package/dist/chunk-DCWCANNS.js +0 -6
- package/dist/chunk-GBBVP2JW.js +0 -2
- package/dist/chunk-IYTHPCQ2.js +0 -356
- package/dist/chunk-NMZATEKQ.js +0 -9
- package/dist/chunk-QHFUDBQH.js +0 -2
- package/dist/chunk-R7NNIQMH.js +0 -11
- package/dist/chunk-RE3BZVGE.js +0 -3
- package/dist/chunk-VLC24QVT.js +0 -2
- package/dist/chunk-Y6HPW2OQ.js +0 -2
- package/dist/chunk-YTZUYCFZ.js +0 -2
- package/dist/chunk-YZBLBPOE.js +0 -13
- package/dist/cover-cmd-DN5D6A3S.js +0 -2
- package/dist/evidence-E5B24ZO6.js +0 -2
- package/dist/evolve-cmd-V7H4PLCX.js +0 -2
- package/dist/extract-bind-3QBBCWYE.js +0 -5
- package/dist/gaps-cmd-42LPHWFP.js +0 -2
- package/dist/ingest-GOKIMEP4.js +0 -2
- package/dist/ingest-cmd-BTYHVJ33.js +0 -3
- package/dist/interactive-bind-TKRWAPJU.js +0 -7
- package/dist/lifecycle-cmd-E6AXODQD.js +0 -2
- package/dist/list-cmd-RJVLH2GR.js +0 -3
- package/dist/logical-ids-QZQRQ3TV.js +0 -2
- package/dist/login-flow-WNIHDQXF.js +0 -2
- package/dist/pipeline-FTLXJQRT.js +0 -2
- package/dist/readmodel-KTNI6QDC.js +0 -2
- package/dist/reconcile-cmd-5XC4AUSJ.js +0 -2
- package/dist/review-cmd-XB2DCTMZ.js +0 -4
- package/dist/run-2RFR2ASQ.js +0 -2
- package/dist/run-3ZYJQBBC.js +0 -2
- package/dist/tcg-generate-77QKMB63.js +0 -2
- package/dist/token-refresh-PCOAZBKK.js +0 -2
- package/dist/walk-session-YS62CWX5.js +0 -2
package/dist/chunk-DCWCANNS.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as b}from"./chunk-KVAALPTA.js";import{y as l}from"./chunk-NMKZHHB6.js";import{a as f}from"./chunk-HCBYKLMW.js";import{a as m,b as s}from"./chunk-C44QQJR4.js";import{e as p}from"./chunk-UR6MHSHU.js";var u=p(f(),1),T=5;function _({thinking:t,expanded:e,thinkingDone:o,maxLines:i=T}){if(!e)return(0,u.jsxs)(m,{paddingX:1,children:[(0,u.jsx)(s,{color:l.dim,children:o?"\u2237 thinking complete ":"\u2237 thinking\u2026 "}),(0,u.jsx)(s,{color:l.muted,children:o?"(ctrl+t to view)":"(ctrl+t to show)"})]});let g=t.split(`
|
|
3
|
-
`),n=Math.max(0,g.length-i),a=n>0?g.slice(-i).join(`
|
|
4
|
-
`):t;return(0,u.jsxs)(b,{variant:"default",paddingX:1,children:[n>0&&(0,u.jsxs)(s,{color:l.muted,children:["\u22EE (",n," earlier line",n===1?"":"s"," hidden)"]}),(0,u.jsx)(s,{color:l.dim,children:a}),o&&(0,u.jsx)(s,{color:l.muted,children:"\u2014 thinking complete"})]})}function k(t){let e=t;return e=e.replace(/@TS\{([^}]+)\}/g,"@S{$1}"),e=e.replace(/@TS-(\d+)/g,(o,i)=>`@S${parseInt(i,10)}.C1`),e=e.replace(/@TS(\d+)/g,(o,i)=>`@S${parseInt(i,10)}`),e=e.replace(/\\n/g,`
|
|
5
|
-
`),e}var c=p(f(),1),B=t=>t!==void 0&&/[A-Za-z0-9]/.test(t);function x(t){let e=[],o="",i=()=>{o&&(e.push({text:o}),o="")},g=(a,d,r)=>(a===0||!B(t[a-1]))&&(d+r>=t.length||!B(t[d+r])),n=0;for(;n<t.length;){let a=t.slice(n,n+2),d=t[n];if(a==="**"||a==="__"){let r=t.indexOf(a,n+2);if(r!==-1&&r>n+2&&(a==="**"||g(n,r,2))){i(),e.push({text:t.slice(n+2,r),bold:!0}),n=r+2;continue}}if(d==="`"){let r=t.indexOf("`",n+1);if(r!==-1&&r>n+1){i(),e.push({text:t.slice(n+1,r),code:!0}),n=r+1;continue}}if(d==="*"||d==="_"){let r=t.indexOf(d,n+1);if(r!==-1&&r>n+1&&(d==="*"||g(n,r,1))){i(),e.push({text:t.slice(n+1,r),italic:!0}),n=r+1;continue}}o+=d,n+=1}return i(),e.length===0&&e.push({text:""}),e}function h(t){return t.map((e,o)=>(0,c.jsx)(s,{bold:e.bold,italic:e.italic,color:e.code?l.dim:void 0,children:e.text},o))}function S(t){return t.split(`
|
|
6
|
-
`).map(e=>{if(e.trim()==="")return{kind:"blank"};let o=e.match(/^\s*[-*+]\s+(.*)$/);if(o)return{kind:"bullet",segs:x(o[1])};let i=e.match(/^\s*(\d+)\.\s+(.*)$/);if(i)return{kind:"numbered",n:i[1],segs:x(i[2])};let g=e.match(/^#{1,6}\s+(.*)$/);return g?{kind:"heading",segs:x(g[1])}:{kind:"para",segs:x(e)}})}function R(t,e,o=""){switch(t.kind){case"blank":return(0,c.jsx)(s,{children:o||" "},e);case"heading":return(0,c.jsxs)(s,{bold:!0,children:[o,h(t.segs)]},e);case"bullet":return(0,c.jsx)(m,{marginLeft:1,children:(0,c.jsxs)(s,{children:[o,"\u2022 ",h(t.segs)]})},e);case"numbered":return(0,c.jsx)(m,{marginLeft:1,children:(0,c.jsxs)(s,{children:[o,`${t.n}. `,h(t.segs)]})},e);default:return(0,c.jsxs)(s,{children:[o,h(t.segs)]},e)}}function E({text:t}){let e=S(k(t));return(0,c.jsxs)(m,{marginBottom:1,children:[(0,c.jsx)(s,{color:l.generateAccent,children:"\u2503 "}),(0,c.jsx)(m,{flexDirection:"column",children:e.map((o,i)=>R(o,i))})]})}export{E as a,_ as b};
|
package/dist/chunk-GBBVP2JW.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d,e as f}from"./chunk-5YPBPZUR.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};
|
package/dist/chunk-IYTHPCQ2.js
DELETED
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as Ue}from"./chunk-KHU7C6EE.js";import{a as Me,b as Ge}from"./chunk-3C5GMAM4.js";import{a as me,b as Te,c as Oe,d as Ie,g as Ne,h as je}from"./chunk-NMZATEKQ.js";import{a as qe,b as Fe,g as Be,h as Pe}from"./chunk-FXPPQL4D.js";import{a as Ae}from"./chunk-RE3BZVGE.js";import{b as Re,c as De}from"./chunk-VLC24QVT.js";import{c as Ce}from"./chunk-OSALXGD4.js";import{a as Le}from"./chunk-CVOGP253.js";import{b as _e,c as be,d as ye,e as ee,f as J,g as re,h as ve,i as le}from"./chunk-ZPDM6FO7.js";import{a as de}from"./chunk-L5LI2JF4.js";import{a as Y}from"./chunk-QHFUDBQH.js";import{a as xe,b as ue}from"./chunk-L4JIMNKW.js";import{c as $e,e as Ee}from"./chunk-MBXWXBDM.js";import{d as S,e as E,f as we,g as Se,h as ke}from"./chunk-5YPBPZUR.js";import{mkdirSync as Et,appendFileSync as Rt}from"fs";import{randomBytes as Dt}from"crypto";import{join as ct}from"path";import{existsSync as ge,readFileSync as pe,readdirSync as dt}from"fs";import{join as te}from"path";var ze=`
|
|
3
|
-
version: 1
|
|
4
|
-
techniques:
|
|
5
|
-
- id: eqp
|
|
6
|
-
name: "Equivalence partitioning"
|
|
7
|
-
applies_hint: "any constrained input"
|
|
8
|
-
emits: [absolute, forbidden-presence]
|
|
9
|
-
- id: bva
|
|
10
|
-
name: "Boundary value analysis"
|
|
11
|
-
applies_hint: "input has an ordered range or length"
|
|
12
|
-
emits: [absolute, forbidden-presence]
|
|
13
|
-
- id: negative
|
|
14
|
-
name: "Negative / error"
|
|
15
|
-
applies_hint: "any input or action that can fail"
|
|
16
|
-
emits: [forbidden-presence]
|
|
17
|
-
- id: state_flow
|
|
18
|
-
name: "State / flow"
|
|
19
|
-
applies_hint: "the AC sits in a multi-step flow"
|
|
20
|
-
emits: [state-transition]
|
|
21
|
-
- id: crud
|
|
22
|
-
name: "CRUD round-trip"
|
|
23
|
-
applies_hint: "AC touches a persisted resource"
|
|
24
|
-
emits: [delta, presence, forbidden-presence]
|
|
25
|
-
- id: auth
|
|
26
|
-
name: "Auth / permission"
|
|
27
|
-
applies_hint: "AC is behind a gate or role"
|
|
28
|
-
emits: [forbidden-presence, presence]
|
|
29
|
-
- id: api_contract
|
|
30
|
-
name: "API-contract"
|
|
31
|
-
applies_hint: "surface is REST/GraphQL"
|
|
32
|
-
emits: [absolute]
|
|
33
|
-
- id: concurrency
|
|
34
|
-
name: "Concurrency / race"
|
|
35
|
-
applies_hint: "high-risk (money / data-loss) or shared-resource AC"
|
|
36
|
-
emits: [state-transition, forbidden-presence]
|
|
37
|
-
- id: idempotency
|
|
38
|
-
name: "Idempotency / retry"
|
|
39
|
-
applies_hint: "money or write operations"
|
|
40
|
-
emits: [delta]
|
|
41
|
-
- id: i18n
|
|
42
|
-
name: "i18n / l10n"
|
|
43
|
-
applies_hint: "AC renders user text or formats numbers/dates/currency"
|
|
44
|
-
emits: [presence, absolute]
|
|
45
|
-
- id: a11y
|
|
46
|
-
name: "a11y"
|
|
47
|
-
applies_hint: "any rendered surface"
|
|
48
|
-
emits: [presence, absolute]
|
|
49
|
-
- id: responsiveness
|
|
50
|
-
name: "Responsiveness / layout"
|
|
51
|
-
applies_hint: "rendered surface"
|
|
52
|
-
emits: [presence, forbidden-presence]
|
|
53
|
-
- id: empty_state
|
|
54
|
-
name: "Empty / null / zero state"
|
|
55
|
-
applies_hint: "list / search / collection AC"
|
|
56
|
-
emits: [presence]
|
|
57
|
-
- id: overflow_underflow
|
|
58
|
-
name: "Overflow / underflow"
|
|
59
|
-
applies_hint: "numeric or quantity AC (R9: explicit underflow/overflow)"
|
|
60
|
-
emits: [forbidden-presence]
|
|
61
|
-
- id: persistence
|
|
62
|
-
name: "Persistence / refresh"
|
|
63
|
-
applies_hint: "AC asserts durable state"
|
|
64
|
-
emits: [absolute]
|
|
65
|
-
- id: temporal
|
|
66
|
-
name: "Time / timezone / expiry"
|
|
67
|
-
applies_hint: "AC involves dates, TTLs, schedules"
|
|
68
|
-
emits: [state-transition, forbidden-presence]
|
|
69
|
-
- id: currency
|
|
70
|
-
name: "Currency / rounding"
|
|
71
|
-
applies_hint: "money AC"
|
|
72
|
-
emits: [absolute]
|
|
73
|
-
- id: pagination
|
|
74
|
-
name: "Pagination / sort / filter"
|
|
75
|
-
applies_hint: "list / search AC"
|
|
76
|
-
emits: [absolute, presence]
|
|
77
|
-
- id: file_media
|
|
78
|
-
name: "File / media"
|
|
79
|
-
applies_hint: "upload surface"
|
|
80
|
-
emits: [forbidden-presence]
|
|
81
|
-
- id: notification
|
|
82
|
-
name: "Notification / async-effect"
|
|
83
|
-
applies_hint: "AC produces an out-of-band effect (email/SMS/push)"
|
|
84
|
-
emits: [presence, delta]
|
|
85
|
-
`;var He={"web-form":`
|
|
86
|
-
id: web-form
|
|
87
|
-
name: "Web form"
|
|
88
|
-
version: 1
|
|
89
|
-
applies_when: >
|
|
90
|
-
The AC concerns a data-entry form: input fields, required fields, submit,
|
|
91
|
-
validation messages.
|
|
92
|
-
candidate_checks:
|
|
93
|
-
- id: field-validation
|
|
94
|
-
family: negative
|
|
95
|
-
measurable_example: "Enter 'abc' in a numeric quantity field \u2192 inline error 'must be a number', value not accepted"
|
|
96
|
-
emits: forbidden-presence
|
|
97
|
-
- id: required-fields
|
|
98
|
-
family: negative
|
|
99
|
-
measurable_example: "Submit with a required field empty \u2192 submit blocked, field flagged"
|
|
100
|
-
emits: forbidden-presence
|
|
101
|
-
- id: formats
|
|
102
|
-
family: negative
|
|
103
|
-
measurable_example: "Email without @ rejected; valid accepted"
|
|
104
|
-
emits: forbidden-presence
|
|
105
|
-
- id: empty-state
|
|
106
|
-
family: empty_state
|
|
107
|
-
measurable_example: "First load: no stale values, placeholders shown"
|
|
108
|
-
emits: presence
|
|
109
|
-
- id: error-messages
|
|
110
|
-
family: negative
|
|
111
|
-
measurable_example: "Each error is specific and tied to its field"
|
|
112
|
-
emits: presence
|
|
113
|
-
- id: a11y
|
|
114
|
-
family: a11y
|
|
115
|
-
measurable_example: "Every input has a programmatic label; keyboard-only submit works"
|
|
116
|
-
emits: presence
|
|
117
|
-
- id: responsiveness
|
|
118
|
-
family: responsiveness
|
|
119
|
-
measurable_example: "No field overlap at 1280/768/375 px"
|
|
120
|
-
emits: forbidden-presence
|
|
121
|
-
`,"rest-graphql-api":`
|
|
122
|
-
id: rest-graphql-api
|
|
123
|
-
name: "REST / GraphQL API"
|
|
124
|
-
version: 1
|
|
125
|
-
applies_when: >
|
|
126
|
-
The surface is an HTTP/GraphQL endpoint.
|
|
127
|
-
candidate_checks:
|
|
128
|
-
- id: response-shape
|
|
129
|
-
family: api_contract
|
|
130
|
-
measurable_example: "Body validates against the declared schema"
|
|
131
|
-
emits: absolute
|
|
132
|
-
- id: status-codes
|
|
133
|
-
family: api_contract
|
|
134
|
-
measurable_example: "GET 200, POST 201, missing 404, bad 400, unauth 401"
|
|
135
|
-
emits: absolute
|
|
136
|
-
- id: verbs
|
|
137
|
-
family: idempotency
|
|
138
|
-
measurable_example: "PUT is idempotent, POST is not"
|
|
139
|
-
emits: delta
|
|
140
|
-
- id: bad-payloads
|
|
141
|
-
family: negative
|
|
142
|
-
measurable_example: "Malformed JSON \u2192 400, never 500"
|
|
143
|
-
emits: absolute
|
|
144
|
-
- id: idempotency
|
|
145
|
-
family: idempotency
|
|
146
|
-
measurable_example: "Same POST with idempotency-key twice \u2192 one effect"
|
|
147
|
-
emits: delta
|
|
148
|
-
- id: pagination
|
|
149
|
-
family: pagination
|
|
150
|
-
measurable_example: "Page beyond last \u2192 empty list, not error; cursor stable"
|
|
151
|
-
emits: absolute
|
|
152
|
-
- id: versioning
|
|
153
|
-
family: api_contract
|
|
154
|
-
measurable_example: "v1 contract unchanged after v2 ships"
|
|
155
|
-
emits: absolute
|
|
156
|
-
- id: rate-limits
|
|
157
|
-
family: api_contract
|
|
158
|
-
measurable_example: "Over the limit \u2192 429 with retry-after"
|
|
159
|
-
emits: absolute
|
|
160
|
-
`,"mobile-native":`
|
|
161
|
-
id: mobile-native
|
|
162
|
-
name: "Mobile native"
|
|
163
|
-
version: 1
|
|
164
|
-
applies_when: >
|
|
165
|
-
iOS/Android native surface.
|
|
166
|
-
candidate_checks:
|
|
167
|
-
- id: interruptions
|
|
168
|
-
family: state_flow
|
|
169
|
-
measurable_example: "Incoming call mid-flow \u2192 state preserved on return"
|
|
170
|
-
emits: state-transition
|
|
171
|
-
- id: network-transitions
|
|
172
|
-
family: state_flow
|
|
173
|
-
measurable_example: "wifi\u2192cellular\u21924G drop: no data loss, graceful retry"
|
|
174
|
-
emits: state-transition
|
|
175
|
-
- id: permissions
|
|
176
|
-
family: negative
|
|
177
|
-
measurable_example: "Deny camera \u2192 feature degrades, no crash"
|
|
178
|
-
emits: forbidden-presence
|
|
179
|
-
- id: orientation
|
|
180
|
-
family: persistence
|
|
181
|
-
measurable_example: "Rotate mid-form \u2192 input preserved"
|
|
182
|
-
emits: absolute
|
|
183
|
-
- id: deep-links
|
|
184
|
-
family: state_flow
|
|
185
|
-
measurable_example: "Cold-start deep link lands on the right screen with auth"
|
|
186
|
-
emits: state-transition
|
|
187
|
-
- id: state-persistence
|
|
188
|
-
family: persistence
|
|
189
|
-
measurable_example: "Kill + relaunch \u2192 resume where left off"
|
|
190
|
-
emits: absolute
|
|
191
|
-
- id: localization
|
|
192
|
-
family: i18n
|
|
193
|
-
measurable_example: "Device locale switch reformats and re-translates"
|
|
194
|
-
emits: presence
|
|
195
|
-
`,"stateful-flow":`
|
|
196
|
-
id: stateful-flow
|
|
197
|
-
name: "Stateful flow"
|
|
198
|
-
version: 1
|
|
199
|
-
applies_when: >
|
|
200
|
-
Multi-step wizard / checkout / onboarding.
|
|
201
|
-
candidate_checks:
|
|
202
|
-
- id: valid-transitions
|
|
203
|
-
family: state_flow
|
|
204
|
-
measurable_example: "Each step advances only when its precondition is met"
|
|
205
|
-
emits: state-transition
|
|
206
|
-
- id: invalid-transitions
|
|
207
|
-
family: state_flow
|
|
208
|
-
measurable_example: "Can't jump to step 3 with step 2 incomplete"
|
|
209
|
-
emits: forbidden-presence
|
|
210
|
-
- id: back-and-abandon
|
|
211
|
-
family: state_flow
|
|
212
|
-
measurable_example: "Back from step 3, then abandon \u2192 no partial commit"
|
|
213
|
-
emits: forbidden-presence
|
|
214
|
-
- id: refresh-persistence
|
|
215
|
-
family: persistence
|
|
216
|
-
measurable_example: "Reload at step 2 \u2192 still at step 2 with data"
|
|
217
|
-
emits: absolute
|
|
218
|
-
- id: resume
|
|
219
|
-
family: persistence
|
|
220
|
-
measurable_example: "Return later \u2192 resume the saved flow"
|
|
221
|
-
emits: absolute
|
|
222
|
-
- id: double-submission
|
|
223
|
-
family: idempotency
|
|
224
|
-
measurable_example: "Double-click submit \u2192 exactly one submission"
|
|
225
|
-
emits: delta
|
|
226
|
-
`,"data-crud":`
|
|
227
|
-
id: data-crud
|
|
228
|
-
name: "Data CRUD"
|
|
229
|
-
version: 1
|
|
230
|
-
applies_when: >
|
|
231
|
-
A persisted record.
|
|
232
|
-
candidate_checks:
|
|
233
|
-
- id: crud-round-trip
|
|
234
|
-
family: crud
|
|
235
|
-
measurable_example: "Create \u2192 read shows it \u2192 update \u2192 read shows the change \u2192 delete \u2192 read 404"
|
|
236
|
-
emits: state-transition
|
|
237
|
-
- id: retry-safety
|
|
238
|
-
family: idempotency
|
|
239
|
-
measurable_example: "Retried create with same key \u2192 one row"
|
|
240
|
-
emits: delta
|
|
241
|
-
- id: concurrency-lost-update
|
|
242
|
-
family: concurrency
|
|
243
|
-
measurable_example: "Two writers, last must not silently clobber \u2192 conflict surfaced"
|
|
244
|
-
emits: forbidden-presence
|
|
245
|
-
- id: delete-cascade
|
|
246
|
-
family: crud
|
|
247
|
-
measurable_example: "Delete parent \u2192 children handled per rule"
|
|
248
|
-
emits: state-transition
|
|
249
|
-
- id: referential-consistency
|
|
250
|
-
family: crud
|
|
251
|
-
measurable_example: "Can't create a child for a missing parent"
|
|
252
|
-
emits: forbidden-presence
|
|
253
|
-
`,"auth-gated":`
|
|
254
|
-
id: auth-gated
|
|
255
|
-
name: "Auth gated"
|
|
256
|
-
version: 1
|
|
257
|
-
applies_when: >
|
|
258
|
-
Behind login/role.
|
|
259
|
-
candidate_checks:
|
|
260
|
-
- id: login-gate
|
|
261
|
-
family: auth
|
|
262
|
-
measurable_example: "Anonymous \u2192 redirected to login, not the resource"
|
|
263
|
-
emits: forbidden-presence
|
|
264
|
-
- id: role-permission-matrix
|
|
265
|
-
family: auth
|
|
266
|
-
measurable_example: "For each role \xD7 action: allowed/denied as specified"
|
|
267
|
-
emits: absolute
|
|
268
|
-
- id: cross-user-record
|
|
269
|
-
family: auth
|
|
270
|
-
measurable_example: "User A cannot read/edit user B's record by id"
|
|
271
|
-
emits: forbidden-presence
|
|
272
|
-
- id: token-session-expiry
|
|
273
|
-
family: auth
|
|
274
|
-
measurable_example: "Expired token \u2192 401/redirect, no stale access"
|
|
275
|
-
emits: forbidden-presence
|
|
276
|
-
- id: privilege-escalation
|
|
277
|
-
family: auth
|
|
278
|
-
measurable_example: "Non-admin cannot reach an admin action by direct URL/API"
|
|
279
|
-
emits: forbidden-presence
|
|
280
|
-
`,"search-list":`
|
|
281
|
-
id: search-list
|
|
282
|
-
name: "Search / list"
|
|
283
|
-
version: 1
|
|
284
|
-
applies_when: >
|
|
285
|
-
Search results / list views.
|
|
286
|
-
candidate_checks:
|
|
287
|
-
- id: pagination
|
|
288
|
-
family: pagination
|
|
289
|
-
measurable_example: "First/last/empty page correct; total accurate"
|
|
290
|
-
emits: absolute
|
|
291
|
-
- id: sorting
|
|
292
|
-
family: pagination
|
|
293
|
-
measurable_example: "Sort asc/desc actually orders; ties stable"
|
|
294
|
-
emits: absolute
|
|
295
|
-
- id: filtering
|
|
296
|
-
family: pagination
|
|
297
|
-
measurable_example: "Each filter narrows correctly; combined filters AND"
|
|
298
|
-
emits: absolute
|
|
299
|
-
- id: empty-state
|
|
300
|
-
family: empty_state
|
|
301
|
-
measurable_example: "No results \u2192 friendly empty state, not blank/error"
|
|
302
|
-
emits: presence
|
|
303
|
-
- id: invalid-input
|
|
304
|
-
family: negative
|
|
305
|
-
measurable_example: "Garbage query \u2192 no crash, sane result"
|
|
306
|
-
emits: forbidden-presence
|
|
307
|
-
- id: length-limits
|
|
308
|
-
family: bva
|
|
309
|
-
measurable_example: "Max-length query handled"
|
|
310
|
-
emits: absolute
|
|
311
|
-
- id: locale
|
|
312
|
-
family: i18n
|
|
313
|
-
measurable_example: "Locale-correct collation/casing"
|
|
314
|
-
emits: presence
|
|
315
|
-
`};var We=`
|
|
316
|
-
version: 1
|
|
317
|
-
principles:
|
|
318
|
-
- "Each step is one complete OBJECTIVE the browser agent achieves autonomously \u2014 state the goal and the path, never low-level actions (the agent emits its own actions)."
|
|
319
|
-
- "One objective (or tightly-related items of one goal) per step; unrelated goals split."
|
|
320
|
-
- "Verbose path: name site, page, section, panel, control, state \u2014 'On the search results page for Noida, in the filter panel's Budget section, set min to 50L and max to 1Cr'."
|
|
321
|
-
- "Self-contained: concrete values inline; never 'as defined in the scenario' \u2014 the agent cannot see the graph."
|
|
322
|
-
- "Browser-only: the agent authors/runs BROWSER tests. Direct API calls and the page's own network traffic ARE in scope; native-app-only behavior, out-of-band email/SMS, backend state with no browser surface are NOT."
|
|
323
|
-
verification:
|
|
324
|
-
- "Phrase checks against the analyzer that observes them:"
|
|
325
|
-
- "Visual \u2014 visible text, labels, counts, prices ('verify the price is 29.99', 'the Sold out label is shown')."
|
|
326
|
-
- "Textual/DOM \u2014 element states/attributes ('the Add button is disabled', 'the placeholder of the search box is \u2026')."
|
|
327
|
-
- "URL \u2014 'URL contains /checkout', 'redirected to /login'. Title \u2014 'page title contains \u2026'."
|
|
328
|
-
- "DevTools/Network \u2014 'no API calls returned 5xx', 'the POST /api/login returned 200' (covers direct API calls too)."
|
|
329
|
-
- "DevTools/Console \u2014 'no console errors'. Performance \u2014 'LCP under 2500ms'. Cookies/localStorage \u2014 'a cookie named session_id exists'."
|
|
330
|
-
- "Assertions: 'Assert/Verify/Confirm \u2026'. Extractions: 'Store \u2026 as name' \u2014 vague verbs (read/tell/report) do NOT persist values."
|
|
331
|
-
- "Baselines/deltas are EXTRACTIONS: 'store the result count as baseline_count' BEFORE the action; compare after. Never an abstract 'capture the state'."
|
|
332
|
-
variables:
|
|
333
|
-
- "Credentials and environment values are {{name}} variables; concrete domain values from the source stay literal."
|
|
334
|
-
- "A value no evidence supplies (start URL, test account, seed data) is ASKED for \u2014 actual value or a variable name \u2014 never invented."
|
|
335
|
-
pitfalls:
|
|
336
|
-
- "A test without a starting URL cannot run \u2014 the first step names it."
|
|
337
|
-
- "'Test the checkout flow' has no end state \u2014 state what done looks like."
|
|
338
|
-
- "Do not cram many unrelated operations into one step; do not reference data outside the step."
|
|
339
|
-
`;var lt=["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"];function Qe(s,t){for(let e of s)if(!lt.includes(e))throw new Error(`${t}: emits '${e}' is not an oracle kind`)}function Ve(s,t){let e=de(s);if(!e||!Array.isArray(e.techniques))throw new Error(`${t}: expected { techniques: [...] }`);for(let i of e.techniques){if(!i.id||!i.name||!i.applies_hint||!Array.isArray(i.emits))throw new Error(`${t}: technique '${i?.id??"?"}' missing id/name/applies_hint/emits`);Qe(i.emits,`${t}: technique '${i.id}'`)}return e.techniques}function Ye(s,t){let e=de(s);if(!e||!e.id||!e.name||!e.applies_when||!Array.isArray(e.candidate_checks))throw new Error(`${t}: profile missing id/name/applies_when/candidate_checks`);for(let i of e.candidate_checks){if(!i.id||!i.family||!i.measurable_example||!i.emits)throw new Error(`${t}: candidate_check '${i?.id??"?"}' missing id/family/measurable_example/emits`);Qe([i.emits],`${t}: check '${i.id}'`)}return e}function Ke(s){let t=new Map(Ve(ze,"packaged techniques").map(i=>[i.id,i])),e=te(s,"design","techniques.yaml");if(ge(e))for(let i of Ve(pe(e,"utf8"),e))t.set(i.id,i);return[...t.values()]}function Je(s){let t=new Map(Object.entries(He).map(([i,a])=>[i,Ye(a,`packaged profile '${i}'`)])),e=te(s,"design","profiles");if(ge(e))for(let i of dt(e).filter(a=>a.endsWith(".yaml")||a.endsWith(".yml")).sort()){let a=Ye(pe(te(e,i),"utf8"),te(e,i));t.set(a.id,a)}return[...t.values()]}function Xe(s){let t=te(s,"design","runner-grammar.yaml");return ge(t)?pe(t,"utf8"):We}function se(s,t){return!s.superseded.has(t)}function fe(s,t,e){return{cid:t,logical_id:s.nameOf.get(t)??null,content:e}}async function Ze(s,t,e,i,a){let d=await Te(s,"search_similar",{text:t,label:e,k:i},a);return d.ok&&Array.isArray(d.result)?d.result:[]}async function et(s,t,e={}){let i=Y(s),a=i.resolve(t);if(!a)throw new Error(`assembleDesignContext: unknown use-case '${t}' (run designGate first)`);let d=a.tip,D=i.getNode(d);if(!D||D.label!==S.USECASE)throw new Error(`assembleDesignContext: '${t}' is not a use-case (run designGate first)`);let N=i.derivesInto(d).map(b=>({source_id:b.props.source_id??null,anchor:b.props.anchor??null})),x=[],h=new Set;for(let{cid:b,content:p}of i.byLabel(S.SCENARIO))se(i,b)&&i.edgesFrom(b).some(o=>o.type===E.BELONGS_TO&&o.dst===d)&&(x.push(fe(i,b,p)),h.add(b));let O=[];for(let{cid:b,content:p}of i.byLabel(S.AC)){if(!se(i,b))continue;let o=i.edgesFrom(b).find(r=>r.type===E.SCOPED_TO);!o||o.dst!==d&&!h.has(o.dst)||O.push({...fe(i,b,p),scoped_to:o.dst})}let m=Array.isArray(D.content.criteria)?D.content.criteria:[],y=[D.content.title,D.content.description,...m].filter(Boolean).join(`
|
|
340
|
-
`),C=(await Ze(i,y,S.SCENARIO,10,e.embedSearch)).filter(b=>!h.has(b.cid)),B=[],f=new Set,q=[],F=[d],P=new Set([d]);for(;F.length>0;){let b=F.shift();for(let p of i.edgesFrom(b)){if(p.type!==E.DEPENDS_ON||i.nodeLabel.get(p.dst)!==S.USECASE)continue;let o=i.tipOf(p.dst);P.has(o)||(P.add(o),q.push(o),F.push(o))}}for(let b of q){let p=`depends_on ${i.nameOf.get(b)??b.slice(0,19)}`;for(let{cid:o}of i.byLabel(S.SCENARIO))if(se(i,o)&&i.edgesFrom(o).some(r=>r.type===E.BELONGS_TO&&r.dst===b))for(let r of i.edgesInto(o)){if(r.type!==E.AUTOMATES||!se(i,r.src)||f.has(r.src))continue;f.add(r.src);let u=String(i.getNode(r.src)?.content.title??"");B.push({cid:r.src,logical_id:i.nameOf.get(r.src)??null,title:u,via:p})}}for(let b of await Ze(i,y,S.TEST,5,e.embedSearch)){let{cid:p,title:o}=b;f.has(p)||(f.add(p),B.push({cid:p,logical_id:i.nameOf.get(p)??null,title:o??"",via:"similar"}))}let I=i.byLabel(S.STYLENOTE).filter(b=>se(i,b.cid)).sort((b,p)=>b.cid<p.cid?-1:1).slice(0,5).map(b=>`${String(b.content.statement)} [${String(b.content.learned_from_kind)}]`);return{usecase:fe(i,d,D.content),cites:N,committed_acs:O,existing:{scenarios:x,reuse_candidates:C},import_candidates:B,style_notes:I,techniques:Ke(s),profiles:Je(s),runner_grammar:Xe(s),budget:{...e.max!=null?{max_pairs:e.max}:{},...e.strength!=null?{strength_override:e.strength}:{}},design_of:(()=>{let b=Me(i,d);return b?{engine:b.engine,seq:b.seq}:null})()}}function tt(s){let t=e=>{if(Array.isArray(e))return e.map(t);if(e!==null&&typeof e=="object"){let i={};for(let a of Object.keys(e).sort())i[a]=t(e[a]);return i}return e};return JSON.stringify(t(s),null,1)}var ne=s=>({record:null,errors:s,minted:{},logicalIds:{},superseded:[],warnings:[],finalizedTests:{}});function ie(s){return s.toLowerCase().trim().replace(/\s+/g," ")}function he(s,t){let e=s.resolve(t);if(!e||s.nodeLabel.get(e.cid)!==S.USECASE||e.superseded)return[];let i=new Set;for(let{cid:a}of s.byLabel(S.SCENARIO))if(!s.superseded.has(a)&&s.edgesFrom(a).some(d=>d.type===E.BELONGS_TO&&s.tipOf(d.dst)===e.cid)){i.add(a);for(let d of s.edgesInto(a))d.type!==E.AUTOMATES||s.superseded.has(d.src)||i.add(d.src)}return[...i]}function st(s){let{contextDir:t,graph:e,sections:i,by:a}=s,d=s.engine??"design@1",D=$e(t);if(e.latestHash!==D)return ne([{code:"STALE_BASIS",detail:`graph opened at ${String(e.latestHash)} but chain head is ${String(D)} \u2014 re-open and retry`}]);let N=e.resolve(s.ucRef);if(!N||e.nodeLabel.get(N.cid)!==S.USECASE||N.superseded)return ne([{code:"UNKNOWN_UC",detail:`${s.ucRef} is not a live use-case`}]);let x=N.cid,h=[],O=[],m=[],y=[],C=[],B=[],f={},q={},F={},P=[],I=[],b=new Set,p=[],o=new Set,r=new Set,u=[];{let n=s.forceScope??(s.force?he(e,s.ucRef):[]),l=new Set;s.sections.scenarios?.length&&l.add(S.SCENARIO),s.sections.tests?.length&&l.add(S.TEST);for(let c of n)e.superseded.has(c)||(l.has(e.nodeLabel.get(c)??"")?r.add(c):u.push(c))}let A=new Set,$=n=>!e.superseded.has(n)&&(!r.has(n)||A.has(n)),j=(n,l,c)=>{if(f[n])return f[n];let w=e.resolve(n),_=w?$(w.cid)?w.cid:e.tipOf(w.cid):null;return!w||!_||!$(_)?(h.push({code:"UNKNOWN_REF",detail:`${l}: '${n}' is neither in this payload nor a live committed node`}),null):c&&e.nodeLabel.get(_)!==c?(h.push({code:"ILLEGAL_EDGE",detail:`${l}: '${n}' is a ${e.nodeLabel.get(_)}, expected ${c}`}),null):_},H=(n,l,c,w)=>{if(e.nameOf.has(l)){q[w]=e.nameOf.get(l);return}let _=Re(n,c,L=>b.has(L)||e.names.has(L)&&!e.superseded.has(e.names.get(L)));_!==null&&(b.add(_),C.push({cid:l,slug:_,by:a}),q[w]=_)},U=(n,l,c,w)=>{for(let L of we(n,c))h.push({code:L.code,detail:`${l}: ${L.detail}`});let _=xe(n,c);return e.hasNode(_)&&!e.superseded.has(_)?(r.has(_)&&A.add(_),f[l]=_,_):(O.push({cid:_,label:n,content:c}),f[l]=_,H(n,_,w,l),_)},M=(n,l,c,w,_)=>{let L=ue(n,l,c,w);if(e.edgesFrom(l).some(g=>g.ecid===L&&!e.superseded.has(g.ecid))){n===E.AUTOMATES&&o.add(c);return}let Q=e.nodeLabel.get(l)??O.find(g=>g.cid===l)?.label??"(unknown)",R=e.nodeLabel.get(c)??O.find(g=>g.cid===c)?.label??"(unknown)";for(let g of ke(n,Q,R,w))h.push({code:g.code,detail:`${_}: ${g.detail}`});let T=De(e,n,l,c,p);if(T){h.push({code:T.code,detail:`${_}: ${T.detail}`});return}if(n===E.AUTOMATES){if(o.has(c)){h.push({code:"CARDINALITY_VIOLATION",detail:`${_}: two automates onto ${c} in one record (strict 1:1)`});return}if(o.add(c),!r.has(c)||A.has(c)){let g=G=>r.has(G)&&!A.has(G);if(e.edgesFrom(l).some(G=>G.type===E.AUTOMATES&&G.dst!==c&&!e.superseded.has(G.dst)&&!g(G.dst))&&e.hasNode(l)){h.push({code:"CARDINALITY_VIOLATION",detail:`${_}: automates from ${l} already has a live edge \u2014 supersede it first`});return}if(e.edgesInto(c).some(G=>G.type===E.AUTOMATES&&G.src!==l&&!e.superseded.has(G.src)&&!g(G.src))){h.push({code:"CARDINALITY_VIOLATION",detail:`${_}: automates onto ${c} already has a live edge \u2014 strict 1:1, supersede it first`});return}}}m.push({ecid:ue(n,l,c,w),type:n,src:l,dst:c,props:w}),p.push({src:l,dst:c,type:n})},W=new Set;for(let n of i.gaps??[]){let l=n.temp_ref??n.ref??"gap",c=n.question;if(!c||typeof c!="object"||!c.header||!Array.isArray(c.options)||c.options.length===0||!Number.isInteger(c.recommended_index)){h.push({code:"GAP_QUESTION_INCOMPLETE",detail:`${l}: design gaps carry a full ranked question object (header/options/recommended_index)`});continue}n.kind==="budget-evicted"&&n.ref&&W.add(n.ref);let w={kind:n.kind,question:c,derived:!0,uc:x,...n.risk?{risk:n.risk}:{},...n.risk_rationale?{risk_rationale:n.risk_rationale}:{},...n.text?{text:n.text}:{},...n.ref?{ref:n.ref}:{}};U(S.GAP,l,w,String(c.header))}let K=new Map;for(let{cid:n,content:l}of e.byLabel(S.SCENARIO))$(n)&&e.edgesFrom(n).some(c=>c.type===E.BELONGS_TO&&e.tipOf(c.dst)===x)&&K.set(ie(String(l.title??"")),n);for(let n of i.scenarios??[]){let l=K.get(ie(n.title));if(l){h.push({code:"DUPLICATE_SCENARIO",detail:`${n.temp_ref}: '${n.title}' duplicates live scenario ${e.nameOf.get(l)??l} \u2014 exercise/link it instead (reuse before minting)`});continue}let c={title:n.title,intent:n.intent,case_type:n.case_type,derived:!0,...n.technique_notes?{technique_notes:n.technique_notes}:{},...n.description?{description:n.description}:{},...n.parameters?{parameters:n.parameters}:{},...n.tags?{tags:n.tags}:{}};U(S.SCENARIO,n.temp_ref,c,n.title)}for(let n of i.scenarios??[]){let l=f[n.temp_ref];if(l){M(E.BELONGS_TO,l,x,{},n.temp_ref);for(let c of n.depends_on??[]){let w=j(c,`${n.temp_ref}.depends_on`,S.SCENARIO);w&&M(E.DEPENDS_ON,l,w,{},`${n.temp_ref}.depends_on`)}}}for(let n of i.acs??[]){let l={text:n.text,kind:n.kind,risk:n.risk,derived:!0,...n.expected_answer?{expected_answer:n.expected_answer}:{},...n.measurable!==void 0?{measurable:n.measurable}:{}},c=U(S.AC,n.temp_ref,l,n.text);if(!c)continue;let w=n.scope?.type==="scenario"&&n.scope.ref?j(n.scope.ref,`${n.temp_ref}.scope`,S.SCENARIO):x;w&&!e.edgesFrom(c).some(_=>_.type===E.SCOPED_TO&&!e.superseded.has(_.ecid))&&M(E.SCOPED_TO,c,w,{},`${n.temp_ref}.scope`);for(let _ of n.cites??[]){let L={source_id:_.source_id,source_cid:_.source_cid,anchor:_.anchor,..._.quote?{quote:_.quote}:{}};M(E.DERIVES,_.source_cid,c,L,`${n.temp_ref}.cite`)}}for(let n of i.exercises??[]){let l=j(n.scenario,"exercises.scenario",S.SCENARIO),c=j(n.ac,"exercises.ac",S.AC);l&&c&&M(E.EXERCISES,l,c,{},`exercises ${n.scenario}\u2192${n.ac}`)}for(let n of i.scoped_to_repoints??[]){let l=j(n.ac,"scoped_to_repoints.ac",S.AC),c=j(n.to,"scoped_to_repoints.to");if(!l||!c)continue;let w=e.edgesFrom(l).find(_=>_.type===E.SCOPED_TO&&!e.superseded.has(_.ecid));w&&y.push({kind:"edge",ecid:w.ecid,reason:`re-scoped to ${n.to} by ${a.id}`,by:a}),M(E.SCOPED_TO,l,c,{},`scoped_to_repoints ${n.ac}`)}let X=new Map;if(s.finalizeTestBody)for(let[n,l]of e.nameOf)X.set(e.tipOf(n),l);let V=n=>e.nameOf.get(n)??X.get(e.tipOf(n))??null,Z=n=>{let l=f[n];if(l)return q[n]??V(l);if(e.names.has(n))return e.resolve(n)?n:null;let c=e.resolve(n);return c?V(e.tipOf(c.cid)):null};for(let n of i.tests??[]){for(let R of n.reuses??[])W.has(R)&&h.push({code:"REUSES_EVICTED",detail:`${n.temp_ref}: reuses '${R}' which was budget-evicted \u2014 drop the edge; the dependent gap names the missing @import`});let l=n.test_md_blob,c=n.definitionId,w=n.objectives_blob;if(s.finalizeTestBody){let R;try{R=s.finalizeTestBody({temp_ref:n.temp_ref,test_md_blob:n.test_md_blob,verifies:n.verifies,reuses:n.reuses??[]},Z)}catch(T){return ne([{code:"FINALIZE_BODY",detail:`${n.temp_ref}: ${T instanceof Error?T.message:String(T)}`}])}R&&(l=R.test_md_blob,c=R.definitionId,w=R.objectives_blob??w,F[n.temp_ref]=c)}let _={title:n.title,check:n.check,definitionId:c,derived:!0,...n.config?{config:n.config}:{},...l?{test_md_blob:l}:{},...w?{objectives_blob:w}:{},...n.surface_required!==void 0?{surface_required:n.surface_required}:{}},L=U(S.TEST,n.temp_ref,_,n.title);if(!L)continue;let Q=j(n.automates,`${n.temp_ref}.automates`,S.SCENARIO);Q&&M(E.AUTOMATES,L,Q,{},`${n.temp_ref}.automates`);for(let R of n.verifies){let T=j(R,`${n.temp_ref}.verifies`,S.AC);T&&M(E.VERIFIES,L,T,{},`${n.temp_ref}.verifies`)}for(let R of n.reuses??[]){if(W.has(R))continue;let T=j(R,`${n.temp_ref}.reuses`,S.TEST);T&&M(E.REUSES,L,T,{},`${n.temp_ref}.reuses`)}for(let R of n.verifies){let T=f[R]??e.resolve(R)?.cid;T&&(e.trust.get(T)??"derived")==="derived"&&!O.some(g=>g.cid===T)?P.push(`${n.temp_ref}: verifies ${R} which is still DERIVED (unapproved) \u2014 committed anyway; approve it in chat or via review`):T&&f[R]===T&&(i.acs??[]).some(g=>g.temp_ref===R)&&P.push(`${n.temp_ref}: verifies ${R} minted in this same record (unapproved) \u2014 committed anyway; approve it in chat`)}if(n.verifies.length>1){let R=n.check?.verified_against;P.push(`${n.temp_ref}: verifies ${n.verifies.length} ACs but machine-asserts only 1 (check.verified_against=${R!=null?String(R):"?"}) \u2014 the rest ride prose only`)}}let ce=[];{let n=(g,v)=>`${g??""}\0${ie(String(v??""))}`,l=(g,v)=>s.reason?`${s.reason} \u2014 evolve by ${a.id}${v?` (${v})`:""}`:g,c=new Map;for(let g of O){if(g.label!==S.SCENARIO&&g.label!==S.TEST)continue;let v=n(g.label,g.content.title);c.set(v,[...c.get(v)??[],g.cid])}let w=new Map;for(let g of r){if(A.has(g))continue;let v=n(e.nodeLabel.get(g),e.getNode(g)?.content.title);w.set(v,[...w.get(v)??[],g])}for(let[g,v]of w){let k=c.get(g)??[],G=v.length===1&&k.length===1;for(let z of v)G?(y.push({kind:"node",old:z,new:k[0],reason:l(`--force redesign of ${s.ucRef} by ${a.id} (title-matched successor)`,"title-matched successor"),by:a}),ce.push({old:z,next:k[0]})):y.push({kind:"node",old:z,new:null,reason:l(`--force redesign of ${s.ucRef} by ${a.id}`),by:a}),I.push(z)}let _=g=>e.edgesFrom(g).some(v=>v.type!==E.SCOPED_TO?!1:v.dst===x||e.tipOf(v.dst)===x?!0:e.nodeLabel.get(v.dst)===S.SCENARIO&&e.edgesFrom(v.dst).some(k=>k.type===E.BELONGS_TO&&e.tipOf(k.dst)===x)),L=new Map;for(let{cid:g,content:v}of e.byLabel(S.AC)){if(e.superseded.has(g)||!_(g))continue;let k=ie(String(v.text??""));L.set(k,[...L.get(k)??[],g])}let Q=new Map;for(let g of O){if(g.label!==S.AC)continue;let v=ie(String(g.content.text??""));Q.set(v,[...Q.get(v)??[],g.cid])}for(let[g,v]of L){let k=Q.get(g)??[];v.length!==1||k.length!==1||(y.push({kind:"node",old:v[0],new:k[0],reason:l(`AC re-emitted with changed content by ${a.id} (text-matched successor)`,"AC text-matched successor"),by:a}),ce.push({old:v[0],next:k[0]}),I.push(v[0]))}let R=new Set(I),T=new Set;for(let g of y)g.kind==="edge"&&T.add(g.ecid);for(let{old:g,next:v}of ce)for(let k of e.edgesInto(g))Se(k.type)?.pin?.comparesTo!=="dst_tip"||e.superseded.has(k.src)||R.has(k.src)||T.has(k.ecid)||(y.push({kind:"edge",ecid:k.ecid,reason:`re-blessed onto ${v} (redirect successor of ${g}) by ${a.id}`,by:a}),T.add(k.ecid),m.some(z=>z.type===k.type&&z.src===k.src&&z.dst===v)||e.edgesFrom(k.src).some(z=>z.type===k.type&&z.dst===v))||k.type===E.AUTOMATES&&o.has(v)||M(k.type,k.src,v,k.props,`rebless ${k.type} from ${e.nameOf.get(k.src)??k.src}`)}return h.length>0?ne(h):O.length===0&&m.length===0&&y.length===0&&B.length===0?Object.keys(f).length>0?(P.push("everything in this phase is already current \u2014 nothing re-committed"),{record:null,errors:null,minted:f,logicalIds:q,superseded:[],warnings:P,finalizedTests:F,...s.force||s.forceScope?{forceScopeRemaining:u}:{}}):ne([{code:"EMPTY_DESIGN",detail:"finalize_design produced nothing to commit"}]):{record:Ee(t,{ts:new Date().toISOString(),proposal_id:null,nodes:O,edges:m,review:[],supersessions:y,source_head_moves:{},...C.length>0?{names:C}:{},...(()=>{for(let n of i.judgements??[]){let l=n.target?f[n.target]??e.resolve(n.target)?.cid??x:x;B.push({about:l,rationale:`[${n.kind}] ${n.rationale}`,by:a})}return B.length>0?{judgements:B}:{}})(),design_of:{uc_cid:x,engine:d}}).record,errors:null,minted:f,logicalIds:q,superseded:I,warnings:P,finalizedTests:F,...s.force||s.forceScope?{forceScopeRemaining:u}:{}}}import{existsSync as nt,mkdirSync as ut,readdirSync as mt,readFileSync as it,renameSync as gt,writeFileSync as pt}from"fs";import{join as oe}from"path";var ft=/^@import\s+(\S+)\s*$/;function ht(s){return oe(s,".testmuai","tests")}function _t(s){let t=new Map;if(!nt(s))return t;for(let e of mt(s)){if(!e.endsWith("_test.md"))continue;let i=oe(s,e);try{let a=le(it(i,"utf8"))?.id;a&&t.set(a,[...t.get(a)??[],i])}catch{}}return t}function bt(s,t){let e=`${s}.tmp-mint`;pt(e,t),gt(e,s)}function rt(s){let{graph:t,cids:e,cwd:i}=s,a=ht(i),d=[],D=[],N=_t(a),x=new Set,h=(m,y)=>{let C=N.get(m);if(C&&C.length>1)return D.push({id:m,reason:`two files claim assurance.id ${m}: ${C.join(" \xB7 ")} \u2014 resolve the duplicate first`}),null;if(x.has(m))return O(m);if(y.includes(m))return O(m)??`${m}_test.md`;let B=t.resolve(m),f=B?t.getNode(B.tip):void 0,q=f?.content.test_md_blob,F=f?.content.definitionId;if(!q||!F)return D.push({id:m,reason:`${m} has no test definition in the graph`}),null;let I=q.split(`
|
|
341
|
-
`).map(o=>{let r=ft.exec(o.trim());if(!r)return o;let u=r[1];if(!t.resolve(u))return o;let A=h(u,[...y,m]);if(!A)throw new ae(`dependency ${u} could not be minted/located`);return`@import ./${A}`}).join(`
|
|
342
|
-
`),b=`---
|
|
343
|
-
assurance:
|
|
344
|
-
id: ${m}
|
|
345
|
-
base: ${F}
|
|
346
|
-
---
|
|
347
|
-
${I.endsWith(`
|
|
348
|
-
`)?I:I+`
|
|
349
|
-
`}`,p=C?.[0];if(p){let o=it(p,"utf8"),r=le(o)?.base,u=ee(J(o,ve(a,t)));if(!r||u!==r)return D.push({id:m,reason:`${p} was edited since the engine last wrote it \u2014 keeping yours (reconcile via a run or maintain)`}),null}else{let o=oe(a,`${m}_test.md`);for(let r=2;nt(o);r++)o=oe(a,`${m}-${r}_test.md`);p=o}return ut(a,{recursive:!0}),bt(p,b),x.add(m),N.set(m,[p]),d.push({id:m,path:p}),p.split("/").pop()},O=m=>N.get(m)?.[0]?.split("/").pop()??null;for(let m of e){let y=t.nameOf.get(m);if(!y){D.push({id:m,reason:"minted test has no logical id"});continue}try{h(y,[])}catch(C){if(C instanceof ae)D.push({id:y,reason:C.message});else throw C}}return{wrote:d,refused:D}}var ae=class extends Error{};import{basename as yt,dirname as vt,resolve as wt}from"path";var St=new Set(["narrative","acs","scenarios","tests","exercises","gaps","scoped_to_repoints","judgements","phase"]);function kt(s){let t=/strength=(\d+)\s*(?:—|-)?\s*(.*)/.exec(s??"");return t?{strength:Number(t[1]),reason:t[2]||s||""}:{strength:2,reason:s??""}}function xt(s,t,e=new Set,i=0){return J(t,re(s),e,i)}function $t(s,t,e,i){let a=t.scenarios?.find(m=>m.temp_ref===e.automates)??(()=>{let m=s.resolve(e.automates),y=m?s.getNode(m.tip)?.content:void 0;return y?{title:String(y.title??""),intent:String(y.intent??""),technique_notes:String(y.technique_notes??"")}:{}})(),d=[...(t.acs??[]).map(m=>({ref:m.temp_ref,text:m.text})),...e.verifies.filter(m=>!(t.acs??[]).some(y=>y.temp_ref===m)).map(m=>{let y=s.resolve(m);return{ref:m,text:y?String(s.getNode(y.tip)?.content.text??""):""}})],{test_md:D,objectives_yaml:N}=ye({title:e.title,steps:e.steps,check:e.check,check_prose:e.check_prose,reuses:e.reuses},{title:a.title,intent:a.intent},d),x=ee(xt(s,D)),h=e.check,O={technique:a.technique_notes??"",profile_family:t.judgements?.find(m=>m.kind==="profile_family"&&(m.target===e.temp_ref||m.target===e.automates))?.rationale??"unspecified",anchor:h.verified_against,expected_how:t.judgements?.find(m=>m.kind==="expected_how"&&m.target===h.verified_against)?.rationale??`expected_mode: ${h.expected_mode??"inferred"}`,combinatorial:kt(a.technique_notes),surface_state:"absent",deferred_bindings:h.expected_mode==="runtime-derived"?1:0};return i.push({definitionId:x,rationale:O,anchorRef:h.verified_against,tempRef:e.temp_ref}),{temp_ref:e.temp_ref,title:e.title,automates:e.automates,verifies:e.verifies,check:e.check,definitionId:x,test_md_blob:D,objectives_blob:N,...e.reuses?.length?{reuses:e.reuses}:{},...e.surface_required!==void 0?{surface_required:e.surface_required}:{}}}function ot(s){let t=0,e=s.forceScope??null;return{terminalEventType:"design",async onProposalEvent(i){let a=r=>s.steer?(s.steer(`[auto-repair] ${r} \u2014 please re-finalize with this fixed.`),{proposal:null,error:null}):{proposal:null,error:r};if(i==null||typeof i!="object")return a("finalize_design payload is not an object");let d=i,D=Object.keys(d).filter(r=>!St.has(r));if(D.length>0)return a(`finalize_design carries ungated/unknown section(s): ${D.join(", ")} \u2014 mintable here: acs, scenarios, tests (+gaps)`);let N=new Map;for(let r of d.tests??[]){let u=N.get(r.automates);if(u)return a(`strict 1:1 violated in-payload: ${u} and ${r.temp_ref} both automate ${r.automates}`);N.set(r.automates,r.temp_ref)}let x=Y(s.contextDir);s.force&&!s.resuming&&t===0&&e===null&&(e=he(x,s.ucRef));let h=x.resolve(s.ucRef),O=h?String(x.getNode(h.tip)?.content.risk??"med"):"med",m=[],y=new Set([s.ucRef,h?.cid,h?.tip].filter(Boolean)),C=r=>{if(y.has(r))return!0;let u=x.resolve(r);return u!=null&&(y.has(u.cid)||y.has(u.tip))},B;try{B={...d.acs?.length?{acs:d.acs.map(r=>({temp_ref:r.temp_ref,text:r.text,kind:r.kind,risk:r.risk??O,...r.expected_answer?{expected_answer:r.expected_answer}:{},...r.scoped_to&&!C(r.scoped_to)?{scope:{type:"scenario",ref:r.scoped_to}}:{}}))}:{},...d.scenarios?.length?{scenarios:d.scenarios}:{},...d.tests?.length?{tests:d.tests.map(r=>$t(x,d,r,m))}:{},...d.exercises?.length?{exercises:d.exercises}:{},...d.gaps?.length?{gaps:d.gaps}:{},...d.scoped_to_repoints?.length?{scoped_to_repoints:d.scoped_to_repoints}:{},...d.judgements?.length?{judgements:d.judgements}:{}}}catch(r){return a(r instanceof Error?r.message:String(r))}let f=st({contextDir:s.contextDir,graph:x,ucRef:s.ucRef,sections:B,by:s.by,...s.engine?{engine:s.engine}:{},...e?.length?{forceScope:e}:{},...s.because?{reason:s.because}:{},finalizeTestBody:(()=>{let r=new Map((B.tests??[]).map($=>[$.temp_ref,$])),u=new Map,A=($,j,H)=>{let U=r.get($);if(!U?.test_md_blob)return null;let M=u.get($);if(M!==void 0)return M;if(H.has($))return U.test_md_blob;H.add($);let W=new Map;for(let V of U.reuses??[]){A(V,j,H);let Z=j(V);Z!==null&&Z!==V&&W.set(V,Z)}let K=U.verifies.map(j).filter(V=>V!==null),X=_e(be(U.test_md_blob,W),K);return u.set($,X),X};return($,j)=>{if(!$.test_md_blob)return null;let H=A($.temp_ref,j,new Set)??$.test_md_blob;if(H===$.test_md_blob)return null;let U=M=>{for(let W of r.keys())if(j(W)===M){let K=A(W,j,new Set);if(K!==null)return{body:K,cycleKey:`batch:${M}`,next:U}}return re(x)(M)};return{test_md_blob:H,definitionId:ee(J(H,U))}}})()});if(f.errors)return a("design commit failed: "+f.errors.map(r=>`${r.code}: ${r.detail}`).join("; "));let q=f.warnings.filter(r=>r.includes("\u2014 committed anyway; approve"));for(let r of f.warnings)(!q.includes(r)||q.length===1)&&s.note(`warning: ${r}`);q.length>1&&s.note(`warning: ${q.length} verifies edges target not-yet-approved items \u2014 committed anyway; approve them in chat or via review`);let F=(r,u)=>r?`${r} ${u}${r>1?"s":""}`:null,P=[F(d.acs?.length,"AC"),F(d.scenarios?.length,"scenario"),F(d.tests?.length,"test"),F(d.gaps?.length,"gap")].filter(Boolean);{let r=`saved ${P.join(" \xB7 ")||"judgements/wiring"} as drafts`;(s.commitLine??s.note)(r)}s.aliases?.(Object.entries(f.minted).map(([r,u])=>({ref:r,cid:u})));let I=Y(s.contextDir);s.onCommitted?.(I);for(let r of m){let u=f.logicalIds[r.anchorRef]??f.minted[r.anchorRef];Ue(s.contextDir,f.finalizedTests[r.tempRef]??r.definitionId,{...r.rationale,anchor:u??r.rationale.anchor})}try{let r=Object.values(f.minted).filter(u=>I.getNode(u)?.label==="test");if(r.length>0){let u=vt(wt(s.contextDir)),A=rt({graph:I,cids:r,cwd:u});A.wrote.length>0&&s.note(`\u2692 wrote ${A.wrote.map($=>yt($.path)).join(" \xB7 ")}`);for(let $ of A.refused)s.note(`warning: mint refused ${$.id} \u2014 ${$.reason}`)}}catch(r){s.note(`warning: file mint failed (${r instanceof Error?r.message:String(r)}) \u2014 the design commit stands`)}s.event?.({type:"commit",acs:d.acs?.length??0,scenarios:d.scenarios?.length??0,tests:d.tests?.length??0,gaps:d.gaps?.length??0,warnings:f.warnings.length,minted:Object.entries(f.minted).map(([r,u])=>({temp_ref:r,cid:u,...f.logicalIds[r]?{logical_id:f.logicalIds[r]}:{}}))}),t+=1,e!==null&&(e=f.forceScopeRemaining??e,s.onForceScope?.(e));let b=Ae({verb:"design",commitN:t,ucRef:s.ucRef,phase:d.phase??(d.tests?.length?"tests":d.scenarios?.length?"scenarios":d.acs?.length?"acs":"design"),committed:Object.entries(f.minted).map(([r,u])=>({temp_ref:r,cid:u,...f.logicalIds[r]?{logical_id:f.logicalIds[r]}:{}})),warnings:f.warnings},I),p=b.event.parity?.missing??[],o=!!d.tests?.length&&p.length===0;return{proposal:f,error:null,receipt:b,...o?{sessionComplete:o}:{}}}}}function at(s,t){return{type:"run_config",version:1,session_id:t.session_id,mode:t.mode,source:{source_id:`design:${s.usecase.logical_id??t.ucCid.slice(0,19)}`,source_cid:t.ucCid,kind:"design_context",numbered_text:tt({...s,session_mode:t.mode})},existing_use_cases:[],read_basis:t.readBasis,max_free_text_rounds:2,graph_reads:!0,verb:"design",chat:!0,design_budget:s.budget,topology:t.topology}}function Ct(s,t){return{terminalEventType:"design",async onProposalEvent(e){let i=e??{},a=["acs","scenarios","tests","gaps"].map(d=>i[d]?.length?`${i[d].length} ${d}`:null).filter(Boolean).join(" \xB7 ");return s(`plan: finalize_design \u2014 ${a||"wiring/judgements only"} (nothing committed)`),s(JSON.stringify(i,null,2)),t?.({type:"plan",payload:i}),{proposal:i,error:null}}}}async function Ts(s,t){let e=Y(t.contextDir),i=null,a=s.useCase;if(s.resume){try{let u=Pe(t.contextDir,s.resume,e);i=u.handle,u.staleBasis.length>0&&(t.out(`note: sources changed since the pause: ${u.staleBasis.join(", ")} \u2014 the design continues against the current versions`),t.emit?.({type:"stale_basis",sources:u.staleBasis}))}catch(u){if(u instanceof qe)return t.out(`error: ${u.message}`),t.emit?.({type:"error",message:`error: ${u.message}`}),u.code==="SESSION_MISSING"||u.code==="SESSION_EXPIRED"?2:1;throw u}let o=i.state;if(o.verb&&o.verb!=="design")return t.out(`error: session ${s.resume} is a ${o.verb} session \u2014 resume it with kane-cli context extract --resume ${s.resume}`),t.emit?.({type:"error",message:`error: session ${s.resume} is a ${o.verb} session \u2014 resume it with kane-cli context extract --resume ${s.resume}`}),i.release(),2;if(a=a??o.use_case,o.uc_tip&&a){let u=e.resolve(a)?.tip;u&&u!==o.uc_tip&&(t.out("note: the use-case changed since the pause \u2014 the design continues against the new version"),t.emit?.({type:"stale_basis",usecase:a}))}let r=i.state.held_receipts??[];if(r.length>0)if(t.chat?.holdReceipt)for(let u of r)t.chat.holdReceipt(u);else t={...t,initialMessage:[r.join(`
|
|
350
|
-
|
|
351
|
-
`),t.initialMessage].filter(Boolean).join(`
|
|
352
|
-
|
|
353
|
-
`)};if(!a)return t.out(`error: session ${s.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`),t.emit?.({type:"error",message:`error: session ${s.resume} predates use-case persistence \u2014 re-supply --use-case <ref>`}),i.release(),2}let d=!!(s.force||i?.state.force),D=!!(s.resume&&i),N=Ge(e,a,d||D);if(!N.ok)return t.out(`design: ${N.message}`),t.emit?.({type:"gate_refused",message:N.message}),i?.release(),N.code;if(t.preflightTurn){let o=await t.preflightTurn();if(!o.ok)return t.out(o.message??"error: turn-endpoint preflight failed"),t.emit?.({type:"error",message:o.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),i?.release(),2}let x={contextDir:t.contextDir,resolveAlias:o=>Oe(o,{env:process.env,auth:t.auth}),embed:(o,r)=>Ie(o,r,{env:process.env,auth:t.auth})};t.chat?.setWorking?.("assembling context\u2026");let h=await et(t.contextDir,a,{max:s.max,strength:s.strength,embedSearch:x});s.priorDesign!==void 0&&(h.prior_design=s.priorDesign),s.changeDelta!==void 0&&(h.change_delta=s.changeDelta),s.because&&(h.because=s.because);let O=t.now?.()??new Date,m=`${O.toISOString().replace(/[-:]/g,"").slice(0,15)}-${Dt(2).toString("hex")}`,y=s.mode??"interactive",C=at(h,{session_id:s.resume??`design-${m}`,mode:y,ucCid:h.usecase.cid,readBasis:e.latestHash,topology:Le("design")});s.plan?C.chat=!1:C.chat=!0,s.resume&&i&&(C.resume={agent_state:i.state.agent_state},t.out(`resuming design session ${s.resume}`),i.state.assumed.length>0&&t.out(`note: ${i.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${s.resume} lists them`),s.message&&(t={...t,initialMessage:[t.initialMessage,s.message].filter(Boolean).join(`
|
|
354
|
-
|
|
355
|
-
`)}));let B=ct(t.contextDir,"logs");Et(B,{recursive:!0});let f=ct(B,`design-${m}.log`);t.out(`trace: ${me(f)}`),t.emit?.({type:"run_start",mode:y,trace:f,use_case:a});let q=(o,r,u)=>{try{Rt(f,JSON.stringify({ts:new Date().toISOString(),kind:o,session_id:u,data:r})+`
|
|
356
|
-
`)}catch{}},F=null,P={current:e};t.chat?.attachOnCommitted?.(o=>{P.current=o});let I="";if(t.chat&&!s.plan){let o=Ce({contextDir:t.contextDir,graph:Y(t.contextDir),sessionStamp:C.session_id,by:t.by??{kind:"human",id:"owner"}});o.errors===null||o.errors[0]?.code==="CONV_SOURCE_EXISTS"?(I=o.sourceId,t.chat.attachConversationSource?.(I),P.current=Y(t.contextDir)):t.out(`warning: conversation source unavailable (${o.errors[0]?.detail}) \u2014 chat adds will not land this session`)}let b=s.plan?Ct(t.out,t.emit):ot({contextDir:t.contextDir,ucRef:a,by:{kind:"ai",id:"design-agent"},force:d,engine:"design@1",note:o=>t.chat?t.chat.note(o):t.out(o),commitLine:o=>t.chat?t.chat.ledger({kind:"commit",ok:!0,line:o}):t.out(o),steer:t.chat?o=>t.chat.submit(o):void 0,event:t.emit,resuming:D,...i?.state.force_scope?.length?{forceScope:i.state.force_scope}:{},onForceScope:o=>{F=o},...s.because?{because:s.because}:{},aliases:t.chat?o=>t.chat.registerAliases?.(o):void 0,onCommitted:o=>{P.current=o}});t.chat||t.out(`designing: ${h.usecase.logical_id??a} (budget ${h.budget.max_pairs!=null?`${h.budget.max_pairs} pairs`:"no ceiling"}${h.budget.strength_override?`, strength ${h.budget.strength_override}`:""})`),t.chat?.setWorking?.(`designing ${h.usecase.logical_id??a}\u2026`);let p;try{p=await Ne(C,{...t,graphSlot:P},new Map,e,q,b)}catch(o){throw q("error",{message:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0},C.session_id),i?.release(),o}finally{t.chat?.setWorking?.(null)}if(p.highRisk)return t.out(`error: ${p.highRisk.length} high-risk decision${p.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),t.emit?.({type:"error",message:`error: high-risk question(s) in ci mode (fail-closed): ${p.highRisk.map(o=>o.id).join(", ")}`,code:"HIGH_RISK_CI"}),i?.release(),1;if(p.paused){let o=i;o||(o=Fe(t.contextDir,{sid:C.session_id,mode:"agent",created_at:O.toISOString(),expires_at:new Date(O.getTime()+1440*60*1e3).toISOString(),agent_state:p.paused.agent_state,pending:{questions:[],proposals:[]},read_basis:Object.fromEntries((e.resolve(a)?e.edgesInto(e.resolve(a).tip):[]).filter($=>$.type==="DERIVES"&&typeof $.props.source_id=="string").map($=>[String($.props.source_id),e.heads.get(String($.props.source_id))??null])),assumed:[],corpus_cursor:{remaining:[]},conv_source:I,verb:"design",use_case:a,...e.resolve(a)?.tip?{uc_tip:e.resolve(a).tip}:{},...d?{force:!0}:{}})),d&&!o.state.force&&o.save({force:!0}),I&&o.state.conv_source!==I&&o.save({conv_source:I});let r=t.chat?.drainHeldReceipts?.()??[];(r.length>0||(o.state.held_receipts?.length??0)>0)&&o.save({held_receipts:r}),F!==null&&o.save({force_scope:F}),Be(o,p.paused),q("session_paused",{sid:o.state.sid},C.session_id);let u=y!=="interactive"?` --mode ${y}`:"",A=`kane-cli design tests --resume ${o.state.sid}${u}`;return t.out(`paused \u2014 resume with: ${A}`),t.emit?.({type:"session_paused",sid:o.state.sid,mode:y,resume:A,expires_at:o.state.expires_at,pending_questions:p.paused.pending.questions}),t.chat?.ledger?.({kind:"pause",sid:o.state.sid,expires_at:o.state.expires_at,resume:A,messageForm:`${A} --message "<your words>"`}),3}if(p.error)return t.out(`error: design agent failed: ${p.error}`),t.emit?.({type:"error",message:`error: design agent failed: ${p.error}`}),i?.release(),1;if(p.proposal==null&&y!=="interactive")return t.out(`error: the design agent ended without a finalize event \u2014 nothing committed (trace: ${f})`),t.emit?.({type:"error",message:`error: the design agent ended without a finalize event \u2014 nothing committed (trace: ${f})`}),i?.release(),1;p.proposal==null&&t.out("done \u2014 nothing designed this session (no finalize before the session ended)"),p.assumedDefaults&&t.out(`assumed: ${p.assumedDefaults} default(s) auto-taken (flagged)`),i&&t.emit?.({type:"session_complete",sid:s.resume}),i?.complete();{let o=t.chat?.state.ledger.filter(A=>A.kind==="answer"&&A.receipt.form==="assumed").length??0,r=(p.assumedDefaults??0)+o,u=t.chat?.state.credits?.total??p.creditsTotal;t.chat?.ledger?.({kind:"summary",lines:[`designed: ${h.usecase.logical_id??a}${p.proposal==null?" (nothing committed this session)":""}`,...r>0?[`${r} assumed default(s)`]:[],...u!==void 0?[`credits used: ${u.toFixed(1)}`]:[],`trace: ${me(f)}`]})}return s.plan||je(t.contextDir),0}export{Ts as a};
|
package/dist/chunk-NMZATEKQ.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as W,d as J}from"./chunk-RE3BZVGE.js";import{d as D}from"./chunk-JFAFKHDX.js";import{a as K}from"./chunk-DNNZ353O.js";import{a as G}from"./chunk-YKTYVJBN.js";import{a as X}from"./chunk-QHFUDBQH.js";import{b as Q}from"./chunk-RGDQMKNJ.js";import{a as H}from"./chunk-L4JIMNKW.js";import{e as z}from"./chunk-MBXWXBDM.js";import{d as j,f as U}from"./chunk-5YPBPZUR.js";import{a as I,c as B}from"./chunk-NMKZHHB6.js";function ut(t){let e=process.env.HOME??"";return e&&t.startsWith(e)?`~${t.slice(e.length)}`:t}import{readFileSync as Ee,writeFileSync as $e,renameSync as Re,mkdirSync as Ce}from"fs";import{dirname as Te,join as Me}from"path";var O=1,De=720*60*1e3;function F(t){return Me(B,"embeddings",`alias-${t}.json`)}function Y(t,e=Date.now()){return t!==null&&e-t.fetchedAt<De}function Z(t){try{let e=JSON.parse(Ee(t,"utf-8"));return e.wrapperVersion!==O||typeof e.purposes!="object"||e.purposes===null?null:{wrapperVersion:O,writtenByVersion:String(e.writtenByVersion??""),purposes:e.purposes}}catch{return null}}function q(t,e,n=F(t)){let r=Z(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 ee(t,e,n,s=F(t)){try{Ce(Te(s),{recursive:!0});let a=Z(s)?.purposes??{};a[e]={alias:n.alias,dims:n.dims,fetchedAt:Date.now()};let o={wrapperVersion:O,writtenByVersion:I,purposes:a},m=`${s}.tmp`;$e(m,JSON.stringify(o,null,2)+`
|
|
3
|
-
`),Re(m,s)}catch(r){process.stderr.write(`[embed] Failed to save alias cache: ${r instanceof Error?r.message:String(r)}
|
|
4
|
-
`)}}function Fe(t){return t.TESTMUAI_ENV==="stage"?"stage":"prod"}function te(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 ne(t,e={}){let n=e.env??process.env,s=Fe(n),r=e.aliasCacheFile??F(s),a=e.now??Date.now,o=q(s,t,r);if(Y(o,a()))return{alias:o.alias,dims:o.dims};let d=`${G(n)}/assurance/embed/alias?purpose=${encodeURIComponent(t)}`,f=await(e.fetchImpl??fetch)(d,{method:"GET",headers:te(e)});if(!f.ok)throw new Error(`embed alias resolve failed: ${f.status}`);let c=await f.json();return ee(s,t,{alias:c.alias,dims:c.dims},r),{alias:c.alias,dims:c.dims}}async function re(t,e,n={}){let s=n.env??process.env,r=G(s),a=await(n.fetchImpl??fetch)(`${r}/assurance/embed`,{method:"POST",headers:{...te(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()}import{randomBytes as rt}from"crypto";function se(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 ie(t,e,n){return n*t+(1-n)*e}var oe=.7;import{readFileSync as Ne,writeFileSync as Le,renameSync as Ge,mkdirSync as Oe}from"fs";import{dirname as Pe,join as ae}from"path";function Ve(t){return ae(t,"embeddings")}function Ie(t){let e=t.indexOf(":");return e>=0?t.slice(e+1):t}function ce(t,e,n){let s=Ie(n);return ae(Ve(t),e,s.slice(0,2),`${s.slice(2)}.f32`)}function le(t,e,n){try{let s=Ne(ce(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 ue(t,e,n,s){try{let r=ce(t,e,n);Oe(Pe(r),{recursive:!0});let a=Buffer.alloc(s.length*4);for(let m=0;m<s.length;m++)a.writeFloatLE(s[m],m*4);let o=`${r}.tmp`;Le(o,a),Ge(o,r)}catch(r){process.stderr.write(`[embed] Failed to cache vector: ${r instanceof Error?r.message:String(r)}
|
|
5
|
-
`)}}var Be=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar"],je=["source_read","source_grep"],Ue=[...Be,...je],pe=50,P=200,ge=10,he=50,de=20,He=200,ze=50;function N(t,e,n){let s=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(s,n))}function $(t,e){let n=t[e];if(typeof n!="string"||n.length===0)throw new w(`param "${e}" must be a non-empty string`);return n}function E(t,e){let n=t[e];if(n==null)return null;if(typeof n!="string")throw new w(`param "${e}" must be a string when present`);return n}var w=class extends Error{};function V(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 me(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function _e(t,...e){let n=me(t);if(n.size===0)return 0;let s=t.trim().toLowerCase(),r=0;for(let a of e){let o=me(a);if(o.size===0)continue;let m=0;for(let c of n)o.has(c)&&m++;let d=n.size+o.size-m,f=d===0?0:m/d;s&&a.toLowerCase().includes(s)&&(f=Math.max(f,.9)),r=Math.max(r,f)}return r}function Qe(t,e){let n=$(e,"cid"),s=E(e,"type"),r=E(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new w('param "direction" must be out|in|both');let a=N(e.limit,pe,P),o=[];return(r==="out"||r==="both")&&o.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&o.push(...t.edgesInto(n)),o.filter(m=>s==null||m.type===s).slice(0,a)}function Xe(t,e){let n=$(e,"source_id"),s=t.heads.get(n)??null,r=[];for(let a of t.nodeLabel.keys()){let o=t.derivesInto(a).filter(d=>d.props.source_id===n).map(d=>({source_cid:d.props.source_cid,anchor:d.props.anchor??null}));if(o.length===0)continue;let m=V(t,a);if(m&&(r.push({...m,pins:o,pinned_to_head:s!=null&&o.some(d=>d.source_cid===s)}),r.length>=P))break}return r}function Ke(t,e){let n=$(e,"label"),s=E(e,"trust"),r=E(e,"freshness"),a=N(e.limit,pe,P),o=[];for(let{cid:m}of t.byLabel(n)){let d=V(t,m);if(d&&!(s!=null&&d.trust!==s)&&!(r!=null&&d.freshness!==r)&&(o.push(d),o.length>=a))break}return o}function We(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 Je(t,e){let n=$(e,"text"),s=E(e,"label")??"usecase",r=N(e.k,ge,he),a=[];for(let{cid:o,content:m}of t.byLabel(s)){let d=String(m.title??""),f=String(m.summary??""),c=_e(n,d,f);c<=0||a.push({cid:o,title:d,summary:f,score:Math.round(c*1e3)/1e3,trust:t.trust.get(o)??null,freshness:t.stale(o)})}return a.sort((o,m)=>m.score-o.score||o.cid.localeCompare(m.cid)),a.slice(0,r)}function ye(t,e,n){let s=t.heads.get(n);if(typeof s!="string"){let a=[...t.heads.keys()].sort().join(", ");throw new w(`unknown source_id "${n}" \u2014 known: ${a||"(none)"}`)}if(t.mediaOf(s).format==="image")throw new w(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=K(e,t,s);if(r==null)throw new w(`source "${n}" blob is missing from the store`);return{head:s,lines:r.toString("utf8").replace(/\n$/,"").split(`
|
|
6
|
-
`)}}function Ye(t,e,n){return t.slice(e-1,n).map((s,r)=>`${String(e+r).padStart(4,"0")}| ${s}`).join(`
|
|
7
|
-
`)}function Ze(t,e,n){let s=$(e,"source_id"),r=E(e,"anchor"),a=e.line_range;if(r!=null&&a!=null)throw new w("give anchor OR line_range, not both");let{head:o,lines:m}=ye(t,n,s),d=m.length,f,c;if(r!=null){let p=/^L(\d+)-L(\d+)$/.exec(r);if(!p)throw new w(`anchor "${r}" is not L<a>-L<b>`);let y=Number(p[1]),u=Number(p[2]);if(y<1||u<y||u>d)throw new w(`anchor "${r}" does not resolve (source has ${d} lines)`);f=Math.max(1,y-de),c=Math.min(d,u+de)}else if(a!=null){if(!Array.isArray(a)||a.length!==2||!a.every(u=>Number.isInteger(u)))throw new w('param "line_range" must be [from_line, to_line]');let[p,y]=a;if(p<1||y<p)throw new w('param "line_range" must be 1-based with from \u2264 to');if(p>d)throw new w(`line_range starts past the end (source has ${d} lines)`);f=p,c=Math.min(y,d)}else f=1,c=d;return c=Math.min(c,f+He-1),{window:Ye(m,f,c),from_line:f,to_line:c,source_cid:o}}function qe(t,e,n){let s=$(e,"pattern"),r=E(e,"source_id"),a;try{a=new RegExp(s,"u")}catch(f){throw new w(`invalid pattern: ${f instanceof Error?f.message:String(f)}`)}let o=r!=null?[r]:[...t.heads.keys()].sort(),m=[],d=!1;e:for(let f of o){if(r==null){let p=t.heads.get(f);if(typeof p!="string"||t.mediaOf(p).format==="image")continue}let{lines:c}=ye(t,n,f);for(let p=0;p<c.length;p++)if(a.test(c[p])){if(m.length>=ze){d=!0;break e}m.push({source_id:f,line:p+1,text:c[p]})}}return{matches:m,truncated:d}}function et(t,e,n,s){try{switch(e){case"get_node":return{ok:!0,result:V(t,$(n,"cid"))};case"get_edges":return{ok:!0,result:Qe(t,n)};case"find_by_provenance":return{ok:!0,result:Xe(t,n)};case"match_by_type":return{ok:!0,result:Ke(t,n)};case"stale_nodes":return{ok:!0,result:We(t)};case"search_similar":return{ok:!0,result:Je(t,n)};case"source_read":case"source_grep":{if(s==null)throw new w("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?Ze:qe)(t,n,s)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${Ue.join(", ")}`}}}catch(r){return r instanceof w?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}}var fe="assurance.sim";function tt(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
|
|
8
|
-
`)}async function nt(t,e,n){let s=$(e,"text"),r=E(e,"label")??"usecase",a=N(e.k,ge,he),o=[];for(let{cid:d,content:f}of t.byLabel(r)){if(t.superseded.has(d))continue;let c=String(f.title??""),p=String(f.summary??""),y=String(f.description??"");o.push({cid:d,title:c,summary:p,description:y,lex:_e(s,c,p,y)})}let m=d=>{let f=[];for(let c of o){let p=d(c);p.score<=0||f.push({cid:c.cid,title:c.title,summary:c.summary,score:Math.round(p.score*1e3)/1e3,trust:t.trust.get(c.cid)??null,freshness:t.stale(c.cid),...p.dense!==void 0?{dense_score:Math.round(p.dense*1e3)/1e3,lexical_score:Math.round(c.lex*1e3)/1e3}:{}})}return f.sort((c,p)=>p.score-c.score||c.cid.localeCompare(p.cid)),f.slice(0,a)};try{let d=n.readVector??le,f=n.writeVector??ue,c=n.alpha??oe,{alias:p}=await n.resolveAlias(fe),y=new Map,u=[],b=[];for(let h of o){let k=d(n.contextDir,p,h.cid);k?y.set(h.cid,k):(u.push(h.cid),b.push(tt(h)))}let{vectors:v}=await n.embed(fe,[s,...b]),A=Float32Array.from(v[0]);for(let h=0;h<u.length;h++){let k=Float32Array.from(v[h+1]);y.set(u[h],k),f(n.contextDir,p,u[h],k)}return m(h=>{let k=y.get(h.cid),x=k?se(A,k):0;return{score:ie(x,h.lex,c),dense:x}})}catch{return m(d=>({score:d.lex}))}}async function we(t,e,n,s){if(e==="search_similar"&&s)try{return{ok:!0,result:await nt(t,n,s)}}catch(r){return r instanceof w?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}return et(t,e,n,s?.contextDir)}var st=2,be=10,it=2;function ve(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 Mt(t,e,n,s,r=()=>{},a){let o=(i,l)=>r(i,l,t.session_id),m=(process.env.ASSURANCE_LOG_LEVEL??"info").toLowerCase()==="debug",d={contextDir:e.contextDir,resolveAlias:i=>ne(i,{env:process.env,auth:e.auth}),embed:(i,l)=>re(i,l,{env:process.env,auth:e.auth})},f=0,c=e.agent(t,{auth:e.auth,onWarn:i=>{o("warn",i),e.out(i)},onStderr:i=>o("agent_stderr",i)}),p=null,y=null,u;e.chat?.attachSender?.(i=>c.send(i)),e.initialMessage&&(c.send({type:"user_message",message_id:`msg-${t.session_id}-${rt(3).toString("hex")}`,text:e.initialMessage}),o("user_message_sent",{chars:e.initialMessage.length,...m?{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 b,v=0,A=0,h=0,k,x=W(),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"?(f+=i.text.length,process.env.KANE_TRACE_REASONING&&o("reasoning_delta",i.text)):o(i.type,i),i.type==="reasoning_done"&&o("reasoning_chars",f),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=x;if(x=J(x,i),x===l)continue;i.type==="reasoning_delta"?x.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(x.activity[x.activity.length-1].label),e.emit?.({type:"agent_activity",kind:"tool",label:x.activity[x.activity.length-1].label})):(C(`\xB7 ${x.activity[x.activity.length-1].label}`),e.emit?.({type:"agent_activity",kind:"decision",label:x.activity[x.activity.length-1].label}))}else if(i.type==="usage")k=i.total_credits,e.emit?.({type:"usage",credits:i.credits,total_credits:i.total_credits});else if(i.type==="graph_query"){let l=await we(e.graphSlot?.current??s,i.method,i.params??{},d),S=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",m?{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(S)}else if(i.type==="session_paused")u=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(_=>_.risk==="high");if(l==="ci"&&g.length>0){b=g,c.kill();break}if(l==="agent"&&g.length>0){o("pause_requested",{high:g.map(_=>_.id)}),c.send({type:"pause"});continue}let R=ve(i.questions,[],{explicitAcceptDefaults:!0});v+=R.length;for(let _ of R)o("assumed_default",{id:_.id,resolution:_.resolution}),e.emit?.({type:"assumed_default",id:_.id,selected_index:_.selected_index,risk:i.questions.find(M=>M.id===_.id)?.risk});let T={type:"user_response",answers:R.map(_=>({id:_.id,selected_index:_.resolution==="deferred"?null:_.selected_index,free_text:null}))};c.send(T);continue}let S=await e.ask(i.questions),ke=ve(i.questions,S,{explicitAcceptDefaults:!1}),Ae={type:"user_response",answers:i.questions.map(g=>{let R=S.find(_=>_.id===g.id);if(R?.free_text!=null){let _=n.get(g.id)??0;if(!g.allow_free_text||_>=st){let M=g.options[g.recommended_index]?.label??"recommended option";if(v+=1,e.emit?.({type:"assumed_default",id:g.id,selected_index:g.recommended_index,risk:g.risk}),e.chat?.noteCoercion)e.chat.noteCoercion(g,M);else{let L=g.text.replace(/\?+\s*$/,""),Se=L.length<=36?L:`${L.slice(0,33)}\u2026`;e.out(`note: couldn't use a typed answer for "${Se}" \u2014 kept the recommended option (${M})`)}return{id:g.id,selected_index:g.recommended_index,free_text:null}}return n.set(g.id,_+1),{id:g.id,selected_index:null,free_text:R.free_text}}let T=ke.find(_=>_.id===g.id);return T.resolution==="deferred"?{id:g.id,selected_index:null,free_text:null}:{id:g.id,selected_index:T.selected_index,free_text:null}})};c.send(Ae)}else if(i.type==="chat_ops"&&!e.chat){let l=i.chat_ops??i,S=Array.isArray(l.ops)?l.ops.length:0;if(S===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(h<it)h+=1,c.send({type:"user_message",message_id:`nochat-${t.session_id}-${h}`,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:h,ops:S});else{y="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:S}),c.kill();break}}else if(i.type===(a.terminalEventType??"proposal")){let l=await a.onProposalEvent(i[i.type]);if(p=l.proposal,l.error&&(y=l.error),l.receipt)e.emit?.(l.receipt.event),t.mode!=="interactive"?(A+=1,l.sessionComplete||A>=be?(l.sessionComplete||(e.out(`warning: ${be} commits without completion \u2014 closing the session (runaway guard)`),o("receipt_runaway_cap",{commits:A})),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"){y=i.message;let l=i.failed_proposal;l&&o("failed_proposal",l)}}}finally{c.kill()}return{proposal:p,error:y,paused:u,highRisk:b,...v>0?{assumedDefaults:v}:{},...k!==void 0?{creditsTotal:k}:{}}}var ot=3,at={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 xe(t){let{contextDir:e,graph:n,watermark:s,by:r}=t,{signals:a}=D(e,s),o=a.filter(u=>u.event_id===void 0||n.appliedEvents.has(u.event_id)),m=new Map;for(let u of o){let b=u.event_id??`${u.ts}|${u.id}|${u.verdict}|${u.polarity}`;m.has(`${b}|${u.polarity}|${u.verdict}`)||m.set(`${b}|${u.polarity}|${u.verdict}`,u)}let d=[...m.values()].sort((u,b)=>(u.event_id??u.ts)<(b.event_id??b.ts)?-1:1),f=new Map;for(let u of d){let b=`${u.verdict}|${u.tag??""}`,v=f.get(b)??{verdict:u.verdict,tag:u.tag,events:new Set};v.events.add(u.event_id??u.ts),f.set(b,v)}let c=[],p=0;for(let[,u]of[...f.entries()].sort(([b],[v])=>b<v?-1:1)){if(u.events.size<ot)continue;let v={derived:!0,statement:`${u.verdict}${u.tag?`/${u.tag}`:""} recurs (${u.events.size} distinct events) \u2014 bias future proposals ${u.verdict==="approve"?"toward":"away from"} this pattern`,learned_from_kind:at[u.verdict]??"usage",learned_from:[...u.events].sort()},A=U("stylenote",v);if(A.length>0)return{record:null,errors:A.map(k=>({code:k.code,detail:k.detail})),minted:0};let h=H("stylenote",v);n.hasNode(h)||(c.push({cid:h,label:j.STYLENOTE,content:v}),p+=1)}return c.length===0?{record:null,errors:null,minted:0}:{record:z(e,{ts:new Date().toISOString(),proposal_id:null,nodes:c,edges:[],review:[],supersessions:[],source_head_moves:{}},{expectPrev:n.latestHash}).record,errors:null,minted:p}}var ct={kind:"system",id:"distiller"};function jt(t,e=n=>process.stderr.write(n+`
|
|
9
|
-
`)){try{let n=X(t),{watermark:s}=D(t),r=xe({contextDir:t,graph:n,watermark:s,by:ct});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}}if(r.minted>0)try{Q(t)}catch{}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{ut as a,we as b,ne as c,re as d,st as e,ve as f,Mt as g,jt as h};
|
package/dist/chunk-QHFUDBQH.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as L,b as N}from"./chunk-RGDQMKNJ.js";import{a as G}from"./chunk-MBXWXBDM.js";import{e as _,g as v}from"./chunk-5YPBPZUR.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};
|
package/dist/chunk-R7NNIQMH.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as ve}from"./chunk-RGQIBS32.js";import{c as we,y as d}from"./chunk-NMKZHHB6.js";import{a as V}from"./chunk-HCBYKLMW.js";import{a as v,b as u,h as Te,i as de,k as Ae}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as B}from"./chunk-UR6MHSHU.js";var Be=B(ue(),1);import{readFileSync as Ye,writeFileSync as Ve,mkdirSync as Xe}from"fs";import{dirname as Ge,join as Pe}from"path";var Je=Pe(we,"command-history.json"),gt=Pe(we,"generate-history.json"),ze=200,Ee=class{entries;filePath;max;constructor(o=Je,n=ze){this.filePath=o,this.max=n,this.entries=this._load()}push(o){this.entries.length>0&&this.entries[this.entries.length-1]===o||(this.entries.push(o),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(o){let n=o.toLowerCase(),l=[];for(let s=this.entries.length-1;s>=0;s--)this.entries[s].toLowerCase().includes(n)&&l.push(this.entries[s]);return l}_load(){if(this.filePath===null)return[];try{let o=Ye(this.filePath,"utf-8"),n=JSON.parse(o);return Array.isArray(n)?n:[]}catch{return[]}}_save(){if(this.filePath!==null)try{Xe(Ge(this.filePath),{recursive:!0}),Ve(this.filePath,JSON.stringify(this.entries)+`
|
|
3
|
-
`)}catch{}}};function pt(r){let o=(0,Be.useRef)(null);return o.current||(o.current=new Ee(r)),o.current}var C=B(ue(),1);var Se=B(ue(),1);var $=B(V(),1);function Le({history:r,onSelect:o,onClose:n}){let[l,s]=(0,Se.useState)(""),[c,m]=(0,Se.useState)(0),S=l?r.search(l).slice(0,8):[];return de((y,g)=>{if(g.escape){n();return}if(g.return){S.length>0&&S[c]?o(S[c]):n();return}if(g.upArrow){m(M=>Math.max(0,M-1));return}if(g.downArrow){m(M=>Math.min(S.length-1,M+1));return}if(g.backspace||g.delete){s(M=>M.slice(0,-1)),m(0);return}y&&!g.ctrl&&!g.meta&&(s(M=>M+y),m(0))}),(0,$.jsxs)(v,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,$.jsx)(u,{color:d.muted,bold:!0,children:"reverse search"}),(0,$.jsxs)(v,{gap:1,children:[(0,$.jsx)(u,{color:d.dim,children:"search:"}),(0,$.jsx)(u,{children:l}),(0,$.jsx)(u,{color:d.orange,children:"\u2588"})]}),S.length>0&&(0,$.jsx)(u,{children:" "}),S.map((y,g)=>(0,$.jsx)(v,{marginLeft:2,children:(0,$.jsxs)(u,{color:g===c?d.orange:d.dim,bold:g===c,children:[g===c?"\u25B8 ":" ",y]})},`${g}-${y}`))]})}var X=B(V(),1);function De({commands:r,selectedIndex:o}){return r.length===0?null:(0,X.jsx)(v,{flexDirection:"column",marginBottom:0,children:r.map((n,l)=>{let s=l===o;return(0,X.jsxs)(v,{children:[(0,X.jsx)(u,{color:s?d.orange:d.dim,children:s?"\u276F ":" "}),(0,X.jsxs)(u,{color:s?d.orange:void 0,bold:s,children:["/",n.name]}),n.args&&(0,X.jsxs)(u,{color:d.dim,children:[" ",n.args]}),(0,X.jsxs)(u,{color:d.dim,children:[" ",n.description]})]},n.name)})})}var _e=B(ue(),1);var P=B(V(),1),$e={scenario:"Scenarios",case:"Test Cases",file:"Files"};function Oe(r){let o={scenario:0,case:0,file:0};for(let n of r)o[n.kind]++;return["scenario","case","file"].filter(n=>o[n]>0).map(n=>`${o[n]} ${$e[n]}`).join(" \xB7 ")}var ge=7;function Ke({items:r,selectedIndex:o,accent:n=d.orange}){let l=r.length;if(l===0)return null;let s=Math.floor(ge/2),c=l<=ge?0:Math.max(0,Math.min(o-s,l-ge)),m=Math.min(l,c+ge),S=c,y=l-m;return(0,P.jsxs)(v,{flexDirection:"column",marginBottom:0,children:[S>0&&(0,P.jsx)(v,{children:(0,P.jsx)(u,{color:d.dim,children:` \u22EF ${S} above \u2014 ${Oe(r.slice(0,c))}`})}),r.slice(c,m).map((g,M)=>{let W=c+M,H=W===o,Q=M===0||r[W-1].kind!==g.kind;return(0,P.jsxs)(_e.default.Fragment,{children:[Q&&(0,P.jsx)(v,{children:(0,P.jsx)(u,{color:d.dim,children:$e[g.kind]})}),(0,P.jsxs)(v,{children:[(0,P.jsx)(u,{color:H?n:d.dim,children:H?"\u276F ":" "}),(0,P.jsx)(u,{color:H?n:void 0,bold:H,children:g.label})]})]},`${g.kind}:${g.value}:${W}`)}),y>0&&(0,P.jsx)(v,{children:(0,P.jsx)(u,{color:d.dim,children:` \u22EF ${y} more \u2014 ${Oe(r.slice(m))}`})})]})}var pe=B(ue(),1);var Qe=27,Ze=127,et=11;function tt(r){return r>=64&&r<=126}function nt(r,o){r===et&&o({killToEnd:!0,ctrl:!0,raw:String.fromCharCode(r)})}function rt(r,o){r===Ze&&o({backspace:!0,meta:!0,raw:"\x1B\x7F"})}function ot(r,o){let n=r.map(s=>String.fromCharCode(s)).join(""),l=/^\[1;([0-9]+)([A-D])$/.exec(n);if(l){let s=parseInt(l[1],10),c=l[2],m={raw:"\x1B"+n};if(s===2)m.shift=!0;else if(s===3)m.meta=!0;else if(s===5)m.ctrl=!0;else return;c==="A"?m.arrowUp=!0:c==="B"?m.arrowDown=!0:c==="C"?m.arrowRight=!0:c==="D"&&(m.arrowLeft=!0),o(m);return}if(n==="[H"||n==="[1~"||n==="[7~"){o({home:!0,raw:"\x1B"+n});return}if(n==="[F"||n==="[4~"||n==="[8~"){o({end:!0,raw:"\x1B"+n});return}if(n==="[3;5~"){o({delete:!0,ctrl:!0,raw:"\x1B"+n});return}if(n==="[3;3~"){o({delete:!0,meta:!0,raw:"\x1B"+n});return}}function it(r,o){r===72?o({home:!0,raw:"\x1BO"+String.fromCharCode(r)}):r===70&&o({end:!0,raw:"\x1BO"+String.fromCharCode(r)})}function st(){let r="IDLE",o=[];function n(){r="IDLE",o=[]}return{feed(l,s){for(let c of l)r==="IDLE"?c===Qe?(r="ESC",o=[]):nt(c,s):r==="ESC"?c===91?(r="CSI",o=[]):c===79?(r="SS3",o=[]):(rt(c,s),n()):r==="CSI"?(o.push(c),tt(c)&&(ot([91,...o],s),n())):r==="SS3"&&(it(c,s),n())},flushIdle(l){r==="ESC"&&o.length===0&&l({raw:"\x1B"}),n()}}}function He(r,o={}){let n=(0,pe.useRef)(r);n.current=r;let{stdin:l}=Te();(0,pe.useEffect)(()=>{if(o.isActive===!1||!l)return;let s=st(),c=null,m=S=>{c&&(clearTimeout(c),c=null);let y=Buffer.isBuffer(S)?S:Buffer.from(S,"binary");s.feed(y,g=>n.current(g)),c=setTimeout(()=>{s.flushIdle(g=>n.current(g)),c=null},50)};return l.on("data",m),()=>{l.removeListener("data",m),c&&clearTimeout(c)}},[o.isActive,l])}var x=B(V(),1);function lt(r,o){let n=o-1;for(;n>=0&&r[n]!=="@"&&r[n]!==" "&&r[n]!==`
|
|
4
|
-
`;)n--;return n<0||r[n]!=="@"||n>0&&r[n-1]!==" "&&r[n-1]!==`
|
|
5
|
-
`?null:{at:n,query:r.slice(n+1,o).join("")}}var ye=10;function at(r){return r.replace(/\x1b?\[200~/g,"").replace(/\x1b?\[201~/g,"").replace(/\r\n/g,`
|
|
6
|
-
`).replace(/\r/g,`
|
|
7
|
-
`).replace(/[\x00-\x08\x0b-\x1f\x7f]/g,"")}function ct(r,o){let n=[],l=0;for(;l<=r.length;){let s=l;for(;s<r.length&&r[s]!==`
|
|
8
|
-
`;)s++;if(l===s)n.push({start:l,end:l});else{let c=l;for(;c<s;){let m=Math.min(c+o,s);n.push({start:c,end:m}),c=m}}if(s>=r.length)break;l=s+1}return n}function ut(r,o,n){if(r.length===0)return 0;if(o>=n.length)return r.length-1;if(n[o]===`
|
|
9
|
-
`){for(let l=r.length-1;l>=0;l--)if(r[l].end===o)return l;return r.length-1}for(let l=0;l<r.length;l++){let s=r[l];if(s.start<=o&&o<s.end)return l}return r.length-1}function Fe(r,o,n,l){let s=ct(r,n);if(s.length===0)return null;let c=ut(s,o,r),m=c+l;if(m<0||m>=s.length)return null;let S=o-s[c].start,y=s[m],g=y.end-y.start;return y.start+Math.min(S,g)}function Ht({onSubmit:r,onEscape:o,history:n,placeholder:l="Type an objective or /command...",commands:s,clearSeq:c,submitVerb:m,footerBindings:S,inert:y=!1,clearOnSubmit:g=!0,noHistory:M=!1,accent:W=d.orange,scenarios:H,mentionFiles:Q,submitEmpty:ke=!1}){let[a,E]=(0,C.useState)([]),[f,h]=(0,C.useState)(0),[N,U]=(0,C.useState)("none"),[Z,L]=(0,C.useState)(-1),ee=(0,C.useRef)(""),[Ie,se]=(0,C.useState)(!0),{stdout:We}=Ae(),le=We?.columns??80,[ae,j]=(0,C.useState)(0),[te,ne]=(0,C.useState)(0),[Ne,xe]=(0,C.useState)([]),[Ue,fe]=(0,C.useState)(null),Me=(0,C.useRef)(!1);(0,C.useEffect)(()=>{if(c!==void 0){if(!Me.current){Me.current=!0;return}E([]),h(0),L(-1),ee.current="",se(!0),U("none"),j(0)}},[c]);let I=a.join(""),ce=(()=>{if(N!=="none"||a.length===0)return"";if(I.startsWith("/")&&s&&I.length>=2){let e=I.slice(1).toLowerCase(),t=s.find(p=>p.name.startsWith(e)&&p.name!==e);return t?`/${t.name}`.slice(I.length):""}if(I.startsWith("/")||M)return"";let i=n.getAll();for(let e=i.length-1;e>=0;e--)if(i[e].startsWith(I)&&i[e]!==I)return i[e].slice(I.length);return""})(),G=(()=>{if(!s||!I.startsWith("/"))return[];let i=I.length>=2?I.slice(1).toLowerCase():"";return i&&s.some(e=>e.name===i)?[]:s.filter(e=>!i||e.name.startsWith(i))})(),re=G.length>0&&I.startsWith("/"),D=!!Q||!!(H&&H.length)?lt(a,f):null,be=D?D.query:null,F=(()=>{if(!D)return[];let i=D.query.toLowerCase(),e=[];(H??[]).forEach((t,p)=>{let b=`s${p+1}`;(!i||b.includes(i)||(t.title??"").toLowerCase().includes(i))&&e.push({kind:"scenario",value:b,label:`@${b} ${t.title??t.sid??""}`.trim()})}),(H??[]).forEach((t,p)=>{let w=p+1;(t.test_cases??[]).forEach((b,T)=>{let O=`s${w}.c${T+1}`;(!i||O.includes(i)||(b.title??"").toLowerCase().includes(i))&&e.push({kind:"case",value:O,label:`@${O} ${b.title??""}`.trim()})})});for(let t of Ne)e.push({kind:"file",value:t,label:t});return e})(),oe=D!==null&&D.at!==Ue&&!re&&N==="none"&&F.length>0;(0,C.useEffect)(()=>{if(!Q||be===null){xe([]);return}let i=!1;return Q(be).then(e=>{i||xe(e)}).catch(()=>{i||xe([])}),()=>{i=!0}},[be,Q]),(0,C.useEffect)(()=>{te>=F.length&&ne(0)},[F.length]);let Re=i=>{if(!D)return;let e=i.kind==="file"&&/\s/.test(i.value)?`@"${i.value}"`:`@${i.value}`,t=[...a.slice(0,D.at),...e,...a.slice(f)];E(t),h(D.at+e.length),ne(0),fe(D.at),se(!1)};if(de((i,e)=>{if(Ie&&i&&se(!1),e.return){if(oe&&F[te]){Re(F[te]);return}if(re&&G[ae]){let t=`/${G[ae].name}`;M||n.push(t),r(t),E([]),h(0),U("none"),L(-1),ee.current="",se(!0),j(0);return}I.trim()?(M||n.push(I.trim()),r(I.trim()),g&&(E([]),h(0),U("none"),L(-1),ee.current="",se(!0),j(0))):ke&&r("");return}if(e.escape){if(oe){fe(D.at);return}N!=="none"?U("none"):a.length>0?(E([]),h(0),L(-1),ee.current=""):o?.();return}if(e.tab&&!e.shift){if(oe&&F[te]){Re(F[te]);return}if(re&&G[ae]){let t=`/${G[ae].name}`;E([...t]),h(t.length),j(0);return}if(ce){let t=I+ce;E([...t]),h(t.length);return}return}if(e.ctrl&&i==="r"){if(M)return;U("search");return}if(e.ctrl&&i==="a"){h(0);return}if(e.ctrl&&i==="e"){h(a.length);return}if(e.ctrl&&i==="w"){if(f===0)return;let t=f-1;for(;t>0&&a[t]===" ";)t--;for(;t>0&&a[t-1]!==" ";)t--;let p=[...a.slice(0,t),...a.slice(f)];E(p),h(t);return}if(e.ctrl&&i==="u"){E([]),h(0),L(-1),U("none");return}if(e.meta&&i==="b"){let t=f-1;for(;t>0&&a[t]===" ";)t--;for(;t>0&&a[t-1]!==" ";)t--;h(Math.max(0,t));return}if(e.meta&&i==="f"){let t=f;for(;t<a.length&&a[t]!==" ";)t++;for(;t<a.length&&a[t]===" ";)t++;h(t);return}if(e.leftArrow){if(e.ctrl||e.shift)return;h(t=>Math.max(0,t-1));return}if(e.rightArrow){if(e.ctrl||e.shift)return;if(f>=a.length&&ce){let t=I+ce;E([...t]),h(t.length)}else h(t=>Math.min(a.length,t+1));return}if(e.upArrow){if(e.shift)return;if(oe){ne(t=>Math.max(0,t-1));return}if(re){j(t=>Math.max(0,t-1));return}if(N==="none"){let t=Math.max(1,le-2),p=Fe(a,f,t,-1);if(p!==null){h(p);return}if(M)return;let w=n.getAll();if(w.length===0)return;if(Z===-1){ee.current=I,L(w.length-1);let b=w[w.length-1];E([...b]),h(b.length)}else if(Z>0){let b=Z-1;L(b);let T=w[b];E([...T]),h(T.length)}}return}if(e.downArrow){if(e.shift)return;if(oe){ne(t=>Math.min(F.length-1,t+1));return}if(re){j(t=>Math.min(G.length-1,t+1));return}if(N==="none"){let t=Math.max(1,le-2),p=Fe(a,f,t,1);if(p!==null){h(p);return}if(M)return;let w=n.getAll();if(Z===-1)return;if(Z<w.length-1){let b=Z+1;L(b);let T=w[b];E([...T]),h(T.length)}else{L(-1);let b=ee.current;E([...b]),h(b.length)}}return}if(e.backspace||e.delete){if(e.meta||e.ctrl)return;if(f>0){let t=[...a.slice(0,f-1),...a.slice(f)];E(t),h(f-1),L(-1),j(0),fe(null),ne(0)}return}if(i&&!e.ctrl&&!e.meta){let t=at(i);if(!t)return;let p=[...a.slice(0,f),...t,...a.slice(f)];E(p),h(f+t.length),L(-1),j(0),fe(null),ne(0)}},{isActive:!y&&N!=="search"}),He(i=>{if(i.home){h(0);return}if(i.end){h(a.length);return}if(i.killToEnd){E(a.slice(0,f));return}if(i.arrowLeft&&(i.ctrl||i.meta)){let e=f-1;for(;e>0&&a[e]===" ";)e--;for(;e>0&&a[e-1]!==" ";)e--;h(Math.max(0,e));return}if(i.arrowRight&&(i.ctrl||i.meta)){let e=f;for(;e<a.length&&a[e]!==" ";)e++;for(;e<a.length&&a[e]===" ";)e++;h(e);return}if(i.backspace&&i.meta){if(f===0)return;let e=f-1;for(;e>0&&a[e]===" ";)e--;for(;e>0&&a[e-1]!==" ";)e--;let t=[...a.slice(0,e),...a.slice(f)];E(t),h(e);return}if(i.delete&&(i.ctrl||i.meta)){let e=f;for(;e<a.length&&a[e]===" ";)e++;for(;e<a.length&&a[e]!==" ";)e++;E([...a.slice(0,f),...a.slice(e)]);return}},{isActive:!y&&N!=="search"}),y)return(0,x.jsxs)(v,{flexDirection:"column",children:[(0,x.jsx)(u,{color:d.muted,children:"\u2500".repeat(le)}),(0,x.jsxs)(v,{children:[(0,x.jsx)(u,{color:d.muted,children:"\u276F "}),(0,x.jsx)(u,{color:d.dim,children:l})]}),(0,x.jsx)(ve,{bindings:S??[{keys:"ctrl+c",label:"cancel"},{keys:"/cancel",label:"stop turn"},{keys:"ctrl+t",label:"thinking"}],suppressEscBack:!0})]});let je=i=>{E([...i]),h(i.length),U("none")},qe=()=>{U("none")},he=(()=>{if(Ie&&a.length===0)return null;let i=f>=a.length,e=a.slice(0,f).join(""),t,p;i?(t=" ",p=""):a[f]===`
|
|
10
|
-
`?(t=" ",p=a.slice(f).join("")):(t=a[f],p=a.slice(f+1).join(""));let w=e+t+p+ce,b=e.length,T=b+1,O=T+p.length,me=Math.max(1,le-2),R=[],k=0;for(;k<=w.length;){let A=w.indexOf(`
|
|
11
|
-
`,k);if(A===-1&&(A=w.length),k===A)R.push({type:"content",start:k,end:k});else{let _=k;for(;_<A;){let q=Math.min(_+me,A);R.push({type:"content",start:_,end:q}),_=q}}if(A>=w.length)break;k=A+1}let K=Math.max(0,R.findIndex(A=>A.start<=b&&b<=A.end)),z;if(R.length<=ye)z=R;else{let _=ye-1-4;if(K<4||K>=R.length-_)z=[...R.slice(0,4),{type:"ellipsis",hidden:R.length-4-_},...R.slice(R.length-_)];else{let q=ye-2,Ce=Math.floor(q/2),Y=K-Ce,ie=K+(q-Ce)-1;Y<1&&(ie+=1-Y,Y=1),ie>R.length-2&&(Y-=ie-(R.length-2),ie=R.length-2),Y=Math.max(1,Y),z=[{type:"ellipsis",hidden:Y},...R.slice(Y,ie+1),{type:"ellipsis",hidden:R.length-ie-1}]}}return{full:w,b,c:T,a:O,rows:z}})();return(0,x.jsxs)(v,{flexDirection:"column",children:[N==="search"&&(0,x.jsx)(Le,{history:n,onSelect:je,onClose:qe}),re&&(0,x.jsx)(De,{commands:G,selectedIndex:ae}),oe&&(0,x.jsx)(Ke,{items:F,selectedIndex:te,accent:W}),(0,x.jsx)(u,{color:d.muted,children:"\u2500".repeat(le)}),he===null?(0,x.jsxs)(v,{children:[(0,x.jsx)(u,{color:W,children:"\u276F "}),(0,x.jsx)(u,{inverse:!0,children:" "}),(0,x.jsx)(u,{color:d.dim,children:l})]}):(()=>{let i=he.rows.findIndex(e=>e.type==="content");return(0,x.jsx)(v,{flexDirection:"column",children:he.rows.map((e,t)=>{if(e.type==="ellipsis")return(0,x.jsx)(v,{children:(0,x.jsxs)(u,{color:d.dim,children:[" \u22EF ","(",e.hidden," more line",e.hidden===1?"":"s",")"]})},t);let{full:p,b:w,c:b,a:T}=he,O=e.start,J=e.end,me=t===i,R=me?"\u276F ":" ",k=me?W:d.muted,K=[(0,x.jsx)(u,{color:k,children:R},"p")];O<Math.min(w,J)&&K.push((0,x.jsx)(u,{children:p.slice(O,Math.min(w,J))},"b"));let z=Math.max(w,O),A=Math.min(b,J);z<A&&K.push((0,x.jsx)(u,{color:W,inverse:!0,children:p.slice(z,A)},"c"));let _=Math.max(b,O),q=Math.min(T,J);return _<q&&K.push((0,x.jsx)(u,{children:p.slice(_,q)},"a")),J>T&&K.push((0,x.jsx)(u,{color:d.dim,children:p.slice(Math.max(T,O),J)},"g")),(0,x.jsx)(v,{children:K},t)})})})(),(0,x.jsx)(ve,{bindings:S??[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:m??"submit"},{keys:"tab",label:"complete"},{keys:"ctrl+r",label:"search"}],escBackLabel:"clear"})]})}export{gt as a,Ee as b,pt as c,Ht as d};
|
package/dist/chunk-RE3BZVGE.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
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 v(t,e,n){for(let[o,c]of t.names)if(c===e&&!t.superseded.has(c))return o;return String(n.title??n.text??e)}function f(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:a})=>t.edgesFrom(a).some(m=>m.type==="belongs_to"&&(s.has(m.dst)||s.has(t.tipOf(m.dst)))))}}let o=new Set;for(let{cid:i}of n)o.add(i),o.add(t.tipOf(i));let c=g(t,"test").filter(({cid:i})=>!e||t.edgesFrom(i).some(s=>s.type==="automates"&&(o.has(s.dst)||o.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 l=n.filter(({cid:i})=>!r.has(i)&&!r.has(t.tipOf(i))).map(({cid:i,content:s})=>v(t,i,s));return{live_scenarios:n.length,live_tests:c.length,missing:l}}function d(t){return t.length<=12?t.join(", "):`${t.slice(0,12).join(", ")} +${t.length-12} more`}function k(t,e){let n=t.committed.length===0?"committed: nothing new":`committed: ${d(t.committed.map(a=>a.temp_ref?`${a.temp_ref} \u2192 ${a.logical_id??a.cid}`:a.logical_id??a.cid))}`,o=[];t.reused&&o.push(`reused: ${t.reused}`),t.rejected?.length&&o.push(`rejected: ${d(t.rejected.map(a=>`${a.ref} (${a.reason})`))}`),t.warnings?.length&&o.push(`warnings: ${d(t.warnings)}`);let c=[`RECEIPT (commit ${t.commitN}, ${t.phase})`,n,...o],r,l;if(t.verb==="design")r=f(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: ${d(r.missing)}`:"")),l=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 a=g(e,"usecase").length;c.push(`parity: ${a} use-case(s) live`),l="next: refine via chat ops using the ids above. Never re-emit committed items."}c.push(l);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:l};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",terminal_call:"putting the result together",validation_failed:"fixing a validation issue",no_tool_calls:"nudging a stalled turn",evidence_readback:"reading the evidence back",evidence_search:"searching the evidence",provenance_check:"checking provenance"};function h(t){return p[t.reason_code]??t.reason_code.replace(/_/g," ")}function _(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 y(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&&y(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:_(e)}]};case"decision_activity":return{...t,activity:[...t.activity,{name:e.action,status:"decision",label:h(e)}]}}}export{k as a,A as b,h as c,x as d};
|