@testmuai/kane-cli 0.6.2 → 0.6.3
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-J777M5WC.js +8 -0
- package/dist/{ChromeProfilePicker-XXNZLSCC.js → ChromeProfilePicker-UUGUMJPI.js} +1 -1
- package/dist/{CliFeedbackPrompt-FJF5INQO.js → CliFeedbackPrompt-JZWESL7Z.js} +1 -1
- package/dist/{CliUploadProgress-5E3CCYPZ.js → CliUploadProgress-62U3LAUU.js} +1 -1
- package/dist/{ConfigView-TGVOKOUZ.js → ConfigView-WHEFCVHR.js} +1 -1
- package/dist/{EvidenceViewOffer-7O3RNBEE.js → EvidenceViewOffer-JQDEAE2T.js} +1 -1
- package/dist/{FolderPicker-T4JB4NNW.js → FolderPicker-HJUUHQEI.js} +1 -1
- package/dist/{HelpView-PSHKI7DD.js → HelpView-EWHP7LSJ.js} +1 -1
- package/dist/{InfoBox-PXWJ6BIX.js → InfoBox-GQQJVTI5.js} +1 -1
- package/dist/{LinksBox-IUOYRXYO.js → LinksBox-EWCPAZFN.js} +1 -1
- package/dist/{ProfilesView-UK5XX5WP.js → ProfilesView-5FJNQMUW.js} +1 -1
- package/dist/{ProjectPicker-3FE7UFXL.js → ProjectPicker-IN7GFN7I.js} +1 -1
- package/dist/{SaveSessionPrompt-P7NF5FDA.js → SaveSessionPrompt-ISODGFP7.js} +1 -1
- package/dist/SingleShotApp-QANGFAPO.js +2 -0
- package/dist/{SummaryBox-WVR4U3NN.js → SummaryBox-R6WHU7VD.js} +1 -1
- package/dist/TestMdRunView-74A3LCNE.js +2 -0
- package/dist/{WhoamiView-QVXJAVTC.js → WhoamiView-YRQNOSOH.js} +1 -1
- package/dist/{bind-SRZYTS4Q.js → bind-FZ4X4SOK.js} +2 -2
- package/dist/{bridge-I6N3YPXI.js → bridge-7UMWMIJJ.js} +1 -1
- package/dist/{changelog-HPSX3L7T.js → changelog-YQC2QDCO.js} +1 -1
- package/dist/chat-controller-QXFAB2DK.js +3 -0
- package/dist/{chunk-HUD7SPUF.js → chunk-2S4S2XJC.js} +1 -1
- package/dist/{chunk-DEYHK6ZC.js → chunk-2TVRHXRK.js} +1 -1
- package/dist/{chunk-6XKJH5ZE.js → chunk-326XAPMW.js} +2 -2
- package/dist/{chunk-TJRBV2V2.js → chunk-53VDR5DN.js} +3 -3
- package/dist/{chunk-X4QL2DAD.js → chunk-6RQAUK5F.js} +1 -1
- package/dist/{chunk-5ON7QQZO.js → chunk-7LFCSSPX.js} +10 -10
- package/dist/{chunk-2U5DZUC7.js → chunk-7MV5UF6O.js} +1 -1
- package/dist/{chunk-VL2UA23Z.js → chunk-7YQW4TFI.js} +1 -1
- package/dist/{chunk-KGFISJFM.js → chunk-ARS72637.js} +1 -1
- package/dist/{chunk-KRFGAVYU.js → chunk-AV5SUGRY.js} +1 -1
- package/dist/{chunk-K2MKBBI4.js → chunk-B5LJCGAY.js} +1 -1
- package/dist/{chunk-Z4K4AYEI.js → chunk-BFFCGEUH.js} +1 -1
- package/dist/{chunk-FU3OQXFH.js → chunk-BGGNBWAJ.js} +1 -1
- package/dist/{chunk-4PIMEZJW.js → chunk-BO3JA2GS.js} +3 -3
- package/dist/{chunk-D5DEWIAU.js → chunk-C5POEXSX.js} +2 -2
- package/dist/{chunk-HR7AGYV2.js → chunk-CIW2KP4C.js} +1 -1
- package/dist/{chunk-XN7PPLFS.js → chunk-DEEBPSJN.js} +1 -1
- package/dist/{chunk-QIE62H3J.js → chunk-E4OYR32M.js} +1 -1
- package/dist/{chunk-Q6TVDG3X.js → chunk-EEO4XWY6.js} +1 -1
- package/dist/{chunk-PJSCM6JX.js → chunk-EWFFJBAM.js} +1 -1
- package/dist/{chunk-S6GRW5ZA.js → chunk-F2K3XFFH.js} +2 -2
- package/dist/{chunk-M6DX4ENH.js → chunk-F66SSA4C.js} +1 -1
- package/dist/{chunk-44QUA6GV.js → chunk-FFL2TQEJ.js} +1 -1
- package/dist/{chunk-FOZVXYVG.js → chunk-G6AF2JUA.js} +1 -1
- package/dist/{chunk-GN3SZXZ5.js → chunk-ME5QSYWX.js} +1 -1
- package/dist/{chunk-52VLJKIN.js → chunk-NFGG5DA2.js} +1 -1
- package/dist/{chunk-YSK535OI.js → chunk-OE7TVGNB.js} +2 -2
- package/dist/{chunk-6UNTIXFW.js → chunk-OGVIHL5G.js} +1 -1
- package/dist/{chunk-35SRW4KA.js → chunk-P46TIMGQ.js} +1 -1
- package/dist/{chunk-N62EM6JX.js → chunk-PJDOXRLB.js} +1 -1
- package/dist/{chunk-IDDVO4UV.js → chunk-Q4HLQOJI.js} +1 -1
- package/dist/chunk-RE3BZVGE.js +3 -0
- package/dist/{chunk-YIOWO6WS.js → chunk-RLG5NUTE.js} +1 -1
- package/dist/{chunk-ZGH7T32S.js → chunk-RZFINU7J.js} +1 -1
- package/dist/{chunk-WM5QHLAP.js → chunk-SGU72YLH.js} +4 -4
- package/dist/{chunk-OZM4UU5F.js → chunk-SHSV64GX.js} +1 -1
- package/dist/{chunk-4G4HPMR2.js → chunk-SL7AJ7JQ.js} +1 -1
- package/dist/{chunk-LZKUF23A.js → chunk-SQFNMZJ2.js} +1 -1
- package/dist/{chunk-B2CIHKXG.js → chunk-TTSYHJLX.js} +1 -1
- package/dist/chunk-TY5LWU6I.js +14 -0
- package/dist/{chunk-L4AUCQVO.js → chunk-TZZYRDCF.js} +1 -1
- package/dist/{chunk-DCYTRYR2.js → chunk-UXJPCWGW.js} +1 -1
- package/dist/{chunk-MHQ6A2QZ.js → chunk-VXGOWBET.js} +1 -1
- package/dist/{chunk-BKGJGPDN.js → chunk-WFRL54GK.js} +1 -1
- package/dist/{chunk-EK2B2LZK.js → chunk-XBE7PGVY.js} +1 -1
- package/dist/{chunk-OZODSY6H.js → chunk-Y6LMHBLE.js} +1 -1
- package/dist/{chunk-LV5VRSPI.js → chunk-Y7KW5AEN.js} +1 -1
- package/dist/{chunk-U3JB76QP.js → chunk-YZKPZXHY.js} +1 -1
- package/dist/{chunk-NEZ4G7XR.js → chunk-YZSYXNMB.js} +1 -1
- package/dist/{config-KD62VH3R.js → config-5OOP2BO3.js} +1 -1
- package/dist/{credentials-NQNJR4E4.js → credentials-XCP6DJZZ.js} +1 -1
- package/dist/{evidence-FFOI2H3N.js → evidence-AX67Q6RN.js} +1 -1
- package/dist/{evolve-cmd-PHQ6FHRI.js → evolve-cmd-HR25DRTC.js} +1 -1
- package/dist/{extract-bind-6UMILP4U.js → extract-bind-ZDAXRQUS.js} +2 -2
- package/dist/{extract-cmd-MZR7PHGA.js → extract-cmd-5GGI6LAM.js} +1 -1
- package/dist/{generate-headless-XOBQS6RU.js → generate-headless-DRDE46ON.js} +2 -2
- package/dist/index.js +12 -12
- package/dist/{interactive-bind-5FWW3S53.js → interactive-bind-T6OBLZCT.js} +2 -2
- package/dist/{list-commands-PDTISP6T.js → list-commands-UDAL3SBY.js} +1 -1
- package/dist/login-flow-LJ4BH3OS.js +2 -0
- package/dist/{persist-recorded-session-5UNUINWF.js → persist-recorded-session-BW3YSFMP.js} +1 -1
- package/dist/{pipeline-F4WTOZ3Y.js → pipeline-TZJ652NT.js} +1 -1
- package/dist/{reconcile-cmd-MNMWAZF3.js → reconcile-cmd-242S7XNO.js} +2 -2
- package/dist/{recording-banner-IWY3GS6N.js → recording-banner-6FVTCUWQ.js} +1 -1
- package/dist/{require-project-folder-PFIDA5ZH.js → require-project-folder-AQUVEEJB.js} +1 -1
- package/dist/run-UGAOGR3B.js +2 -0
- package/dist/{run-test-md-7GONSVAM.js → run-test-md-AUK7NGLL.js} +2 -2
- package/dist/{skill-installer-YZP5DWWZ.js → skill-installer-2MNPCPRD.js} +1 -1
- package/dist/{spawner-YDYCSTZD.js → spawner-XCOMTJJC.js} +1 -1
- package/dist/tcg-generate-E5X23RVP.js +2 -0
- package/dist/{testmd-actions-7RNW76DN.js → testmd-actions-TU4KTO32.js} +1 -1
- package/dist/token-refresh-GGLARJV4.js +2 -0
- package/dist/{validate-basic-IQY5CRLP.js → validate-basic-IYMPP7C7.js} +1 -1
- package/dist/{version-check-U5UBPVX4.js → version-check-MUPSKONS.js} +1 -1
- package/package.json +6 -6
- package/dist/ChatSurface-HGP5EHZM.js +0 -9
- package/dist/SingleShotApp-UIDA54GB.js +0 -2
- package/dist/TestMdRunView-OH4Y6YD6.js +0 -2
- package/dist/chat-controller-VKGECDTU.js +0 -3
- package/dist/chunk-DM2GL24Z.js +0 -3
- package/dist/chunk-HW7Z5S2M.js +0 -14
- package/dist/login-flow-IXPJHTL2.js +0 -2
- package/dist/run-V2WMNHFK.js +0 -2
- package/dist/tcg-generate-ZRKSX2KC.js +0 -2
- package/dist/token-refresh-DH2L2IPP.js +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as re}from"./chunk-CE664P73.js";import{a as te,b as j,d as B}from"./chunk-
|
|
3
|
-
`).some(g=>g.trim().length>0&&n.includes(g.trim()))}function Ee(e,t,r){let n=e.getNode(t)?.content??{},o=e.getNode(r)?.content??{},s=[...new Set([...Object.keys(n),...Object.keys(o)])].sort().filter(d=>JSON.stringify(n[d])!==JSON.stringify(o[d]));return s.length>0?`updated: ${s.join(", ")}`:"updated"}function be(e,t,r,n,o,c){let s=[];for(let[p,u]of r.superseded)u===null||p===u||t.superseded.has(p)||r.nodeLabel.get(p)===v.USECASE&&s.push({kind:"MODIFIED",ref:O(r,p),old_cid:p,new_cid:u,summary:Ee(r,p,u)});let d=c.map(p=>({kind:"ADDED",ref:O(r,p),cid:p})),i=[],g=ae(e,r,o),f=new Map;for(let{cid:p}of r.byLabel(v.USECASE)){if(!W(r,p))continue;let u=r.derivesInto(p),m=u.filter(a=>String(a.props.source_id)===n);m.length===0||m.some(a=>a.props.source_cid===o)||g!==null&&m.some(a=>String(a.props.anchor)!=="img#whole"&&Se(e,r,a,g,f))||u.some(a=>{let l=String(a.props.source_id);if(l===n)return!1;let $=r.heads.get(l);return $!=null})||i.push({kind:"DROPPED",ref:O(r,p),cid:p,why:`evidence decayed: no quote from ${n} relocates into @${A(o)}, no other live source, no fresh evidence this run`})}let h=(p,u)=>p.ref<u.ref?-1:p.ref>u.ref?1:0;return[...s.sort(h),...d.sort(h),...i.sort(h)]}async function ce(e,t,r){let n=E(e),o=n.heads.get(t)??null,c=new Set(n.staleList().filter(a=>a.state==="stale").map(a=>a.cid)),s=await r.reingest(t);if(s.status==="unchanged")return{source_id:t,changed:!1,head:{status:s.status,before:o,after:s.cid},note:`nothing to reconcile \u2014 ${t} is unchanged`,skipped_arms:oe,changeset:[],rows:[]};let d=await r.reextract(t),i=E(e),g=d.minted.map(a=>{let l=O(i,a);return{kind:"ADD",ref:l,reason:`new use-case extracted from ${t}`,provenance:`extraction commit \u2014 DERIVES ${t} @ ${A(s.cid)}`,action:`kane-cli design tests --use-case ${l}`}}),f=i.staleList().filter(a=>a.state==="stale"&&!c.has(a.cid)&&W(i,a.cid)).map(a=>a.cid),h=f.map(a=>{let l=O(i,a),$=ke.has(i.nodeLabel.get(a)??"");return{kind:"ENHANCE",ref:l,reason:"stale (structural)",provenance:ie(i,a),action:$?`kane-cli maintain evolve ${l}`:`kane-cli design explain ${l}`}}),p=new Set;for(let a of[...d.minted,...d.matched])p.add(i.tipOf(a));for(let a of f){let l=se(i,i.tipOf(a));l&&i.nodeLabel.get(l)===v.USECASE&&p.add(i.tipOf(l))}let u=[];for(let a of await re(i,"design")){if(a.kind!=="no-verifies")continue;let l=i.resolve(a.ref);if(!l)continue;let $=se(i,l.tip);!$||!p.has(i.tipOf($))||u.push({kind:"ADD",ref:a.ref,reason:a.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${O(i,$)}`,action:a.ready_command})}let m=[];for(let{cid:a}of i.byLabel(v.USECASE))W(i,a)&&i.stale(a)==="orphaned"&&m.push({kind:"REMOVE",ref:O(i,a),reason:"orphaned \u2014 no live source evidences this use-case",provenance:ie(i,a),action:"plan-only \u2014 REMOVE is not executed in this release"});let w=new Set,b=[...g.sort(F),...u.sort(F),...h.sort(F),...m.sort(F)].filter(a=>{let l=`${a.kind}\0${a.ref}`;return w.has(l)?!1:(w.add(l),!0)});return{source_id:t,changed:!0,head:{status:s.status,before:o,after:s.cid},note:Re,skipped_arms:oe,changeset:be(e,n,i,t,s.cid,d.minted),rows:b}}function de(e,t){return async r=>{let{ingestFile:n}=await import("./ingest-4CGBXC2L.js"),o=await n({contextDir:e,filePath:t,asId:r});return{status:o.status,cid:o.cid}}}function le(e){return async t=>{let[{runExtract:r},{resolveAgentAuthEnv:n},{runAgent:o},{preflightTurn:c}]=await Promise.all([import("./run-
|
|
2
|
+
import{a as re}from"./chunk-CE664P73.js";import{a as te,b as j,d as B}from"./chunk-6RQAUK5F.js";import"./chunk-NNZV5RCE.js";import{a as R,b as ee,d as ne}from"./chunk-AD46OCZ4.js";import{a as X,b as M}from"./chunk-YANCBRER.js";import{a as Z}from"./chunk-JFAFKHDX.js";import{a as Q}from"./chunk-QPZRHAYK.js";import"./chunk-ZKYYZ5NO.js";import"./chunk-BC7UVJJB.js";import{d as z}from"./chunk-KHDUQ33H.js";import{a as E}from"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import{e as G}from"./chunk-B2PZAB7J.js";import{d as v,e as P,g as H}from"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";import{existsSync as Ae,lstatSync as Le,readdirSync as Te,statSync as Ie}from"fs";import{basename as J,join as Ne,relative as Fe,resolve as ye}from"path";var oe="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",Re="suite untouched; graph updated";function W(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function O(e,t){return e.nameOf.get(t)??t}function A(e){return String(e).slice(0,19)}function C(e,t,r){let n=e.edgesFrom(t).find(o=>o.type===r);return n?e.tipOf(n.dst):null}function se(e,t){let r=e.nodeLabel.get(t);if(r===v.USECASE)return t;if(r===v.SCENARIO)return C(e,t,P.BELONGS_TO);if(r===v.AC){let n=C(e,t,P.SCOPED_TO);return n?e.nodeLabel.get(n)===v.USECASE?n:C(e,n,P.BELONGS_TO):null}if(r===v.TEST){let n=C(e,t,P.AUTOMATES);return n?C(e,n,P.BELONGS_TO):null}return null}function ie(e,t){let r=[],n=new Map;for(let o of e.derivesInto(t))n.set(String(o.props.source_id),o);for(let[o,c]of n){let s=e.heads.get(o);if(s==null){r.push(`DERIVES pin ${o} @ ${A(c.props.source_cid)} \u2014 source retired`);continue}if(s!==c.props.source_cid){let d=e.convChains.get(o)?.chain;if(d&&d.includes(String(c.props.source_cid)))continue;r.push(`DERIVES pin ${o} @ ${A(c.props.source_cid)} \u2014 source head moved to ${A(s)}`)}}for(let o of e.edgesFrom(t))H(o.type)?.pin?.comparesTo==="dst_tip"&&e.superseded.has(o.dst)&&r.push(`${o.type} pin \u2192 ${O(e,o.dst)} \u2014 target superseded`);return r.join("; ")||"structural pin broken"}var ke=new Set([v.USECASE,v.SCENARIO,v.AC,v.TEST]);function F(e,t){return e.ref<t.ref?-1:e.ref>t.ref?1:0}function ae(e,t,r){let n=t.getNode(r)?.content.blob;if(typeof n!="string")return null;let o=z(e,n);return o===null?null:o.toString("utf8")}function Se(e,t,r,n,o){let c=r.props.quote;if(typeof c=="string"&&c.length>0)return n.includes(c);let s=String(r.props.source_cid);o.has(s)||o.set(s,ae(e,t,s));let d=o.get(s);if(d===null)return!1;let i=Q(d,String(r.props.anchor));return i===null?!1:i.split(`
|
|
3
|
+
`).some(g=>g.trim().length>0&&n.includes(g.trim()))}function Ee(e,t,r){let n=e.getNode(t)?.content??{},o=e.getNode(r)?.content??{},s=[...new Set([...Object.keys(n),...Object.keys(o)])].sort().filter(d=>JSON.stringify(n[d])!==JSON.stringify(o[d]));return s.length>0?`updated: ${s.join(", ")}`:"updated"}function be(e,t,r,n,o,c){let s=[];for(let[p,u]of r.superseded)u===null||p===u||t.superseded.has(p)||r.nodeLabel.get(p)===v.USECASE&&s.push({kind:"MODIFIED",ref:O(r,p),old_cid:p,new_cid:u,summary:Ee(r,p,u)});let d=c.map(p=>({kind:"ADDED",ref:O(r,p),cid:p})),i=[],g=ae(e,r,o),f=new Map;for(let{cid:p}of r.byLabel(v.USECASE)){if(!W(r,p))continue;let u=r.derivesInto(p),m=u.filter(a=>String(a.props.source_id)===n);m.length===0||m.some(a=>a.props.source_cid===o)||g!==null&&m.some(a=>String(a.props.anchor)!=="img#whole"&&Se(e,r,a,g,f))||u.some(a=>{let l=String(a.props.source_id);if(l===n)return!1;let $=r.heads.get(l);return $!=null})||i.push({kind:"DROPPED",ref:O(r,p),cid:p,why:`evidence decayed: no quote from ${n} relocates into @${A(o)}, no other live source, no fresh evidence this run`})}let h=(p,u)=>p.ref<u.ref?-1:p.ref>u.ref?1:0;return[...s.sort(h),...d.sort(h),...i.sort(h)]}async function ce(e,t,r){let n=E(e),o=n.heads.get(t)??null,c=new Set(n.staleList().filter(a=>a.state==="stale").map(a=>a.cid)),s=await r.reingest(t);if(s.status==="unchanged")return{source_id:t,changed:!1,head:{status:s.status,before:o,after:s.cid},note:`nothing to reconcile \u2014 ${t} is unchanged`,skipped_arms:oe,changeset:[],rows:[]};let d=await r.reextract(t),i=E(e),g=d.minted.map(a=>{let l=O(i,a);return{kind:"ADD",ref:l,reason:`new use-case extracted from ${t}`,provenance:`extraction commit \u2014 DERIVES ${t} @ ${A(s.cid)}`,action:`kane-cli design tests --use-case ${l}`}}),f=i.staleList().filter(a=>a.state==="stale"&&!c.has(a.cid)&&W(i,a.cid)).map(a=>a.cid),h=f.map(a=>{let l=O(i,a),$=ke.has(i.nodeLabel.get(a)??"");return{kind:"ENHANCE",ref:l,reason:"stale (structural)",provenance:ie(i,a),action:$?`kane-cli maintain evolve ${l}`:`kane-cli design explain ${l}`}}),p=new Set;for(let a of[...d.minted,...d.matched])p.add(i.tipOf(a));for(let a of f){let l=se(i,i.tipOf(a));l&&i.nodeLabel.get(l)===v.USECASE&&p.add(i.tipOf(l))}let u=[];for(let a of await re(i,"design")){if(a.kind!=="no-verifies")continue;let l=i.resolve(a.ref);if(!l)continue;let $=se(i,l.tip);!$||!p.has(i.tipOf($))||u.push({kind:"ADD",ref:a.ref,reason:a.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${O(i,$)}`,action:a.ready_command})}let m=[];for(let{cid:a}of i.byLabel(v.USECASE))W(i,a)&&i.stale(a)==="orphaned"&&m.push({kind:"REMOVE",ref:O(i,a),reason:"orphaned \u2014 no live source evidences this use-case",provenance:ie(i,a),action:"plan-only \u2014 REMOVE is not executed in this release"});let w=new Set,b=[...g.sort(F),...u.sort(F),...h.sort(F),...m.sort(F)].filter(a=>{let l=`${a.kind}\0${a.ref}`;return w.has(l)?!1:(w.add(l),!0)});return{source_id:t,changed:!0,head:{status:s.status,before:o,after:s.cid},note:Re,skipped_arms:oe,changeset:be(e,n,i,t,s.cid,d.minted),rows:b}}function de(e,t){return async r=>{let{ingestFile:n}=await import("./ingest-4CGBXC2L.js"),o=await n({contextDir:e,filePath:t,asId:r});return{status:o.status,cid:o.cid}}}function le(e){return async t=>{let[{runExtract:r},{resolveAgentAuthEnv:n},{runAgent:o},{preflightTurn:c}]=await Promise.all([import("./run-UGAOGR3B.js"),import("./spawner-XCOMTJJC.js"),import("./bridge-7UMWMIJJ.js"),import("./turn-preflight-JGYT7LXP.js")]),s=await n(),d=new Set(E(e).byLabel(v.USECASE).map(m=>m.cid)),i=0,g=await r({mode:"override"},{contextDir:e,agent:o,preflightTurn:()=>c(s),ask:async()=>[],review:async m=>new Map(m.map(w=>[w.temp_ref,{resolution:w.matches_existing&&w.changed?"edited":"skipped"}])),confirmStale:async()=>!1,out:m=>process.stderr.write(m+`
|
|
4
4
|
`),progress:m=>process.stderr.write(m+`
|
|
5
5
|
`),emit:m=>{m.type==="commit"&&typeof m.assumed=="number"&&(i+=m.assumed)},isTTY:!1,auth:s});if(g!==0)throw new Error(`reconcile: re-extract of ${t} failed (exit ${g})`);let f=E(e),h=f.heads.get(t),p=[],u=[];if(typeof h=="string"){let m=new Set;for(let w of f.edgesFrom(h))w.type!==P.DERIVES||f.nodeLabel.get(w.dst)!==v.USECASE||m.has(w.dst)||(m.add(w.dst),(d.has(w.dst)?u:p).push(w.dst))}return{minted:p,matched:u,defaultsTaken:i}}}import{closeSync as Oe,existsSync as Pe,mkdirSync as pe,openSync as De,readFileSync as V,readdirSync as _e,renameSync as xe,rmSync as ue,writeFileSync as fe}from"fs";import{join as L}from"path";var D=class extends Error{constructor(r,n){super(`${r}: ${n}`);this.code=r}},K=e=>L(e,"reconcile","plans");function ge(e,t){let r=`${e}.tmp-${process.pid}`;fe(r,t,{mode:384}),xe(r,e)}function me(e,t){let r=K(e);pe(r,{recursive:!0});let n=L(r,`${t.created}-${t.source_id}.json`);return ge(n,JSON.stringify(t,null,2)+`
|
|
6
6
|
`),n}function Y(e,t){let r=t;if(r===void 0){let s=K(e),d=[];try{d=_e(s).filter(i=>i.endsWith(".json")).sort()}catch{}if(d.length===0)return{error:`no stored plans under ${s} \u2014 run reconcile --plan first`};r=L(s,d[d.length-1])}if(!Pe(r))return{error:`no such plan file: ${r}`};let n;try{n=V(r,"utf8")}catch(s){return{error:`cannot read plan ${r}: ${s instanceof Error?s.message:String(s)}`}}let o;try{o=JSON.parse(n)}catch(s){return{error:`corrupted plan ${r}: ${s instanceof Error?s.message:String(s)}`}}let c=o?.version;return c!==1?{error:`unsupported plan version ${String(c)} in ${r} (expected 1)`}:Array.isArray(o.rows)?{plan:o,path:r}:{error:`not a reconcile plan \u2014 ${r} has no rows[] (hand-edited?)`}}function q(e,t,r){let n;try{n=JSON.parse(V(e,"utf8"))}catch(c){throw new D("PLAN_UNREADABLE",`${e}: ${c instanceof Error?c.message:String(c)}`)}let o=n.rows?.[t];if(!o)throw new D("ROW_MISSING",`${e} has no row ${t}`);if(o.applied)throw new D("ROW_ALREADY_APPLIED",`row ${t} of ${e} was already applied (${o.applied.outcome} at ${o.applied.at})`);o.applied={at:new Date().toISOString(),outcome:r},ge(e,JSON.stringify(n,null,2)+`
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
2
|
import{a as n}from"./chunk-3MSXQU2C.js";import"./chunk-UR6MHSHU.js";function p(t){let s=t.sessionName!==null,e={type:"recording_state",enabled:!0,session_id:t.sessionId,persist:s};return t.sessionName&&(e.session_name=t.sessionName),t.testPath&&(e.test_path=t.testPath),t.outputPath&&(e.output_path=t.outputPath),e}async function g(t){if(t.isAgent){process.stdout.write(JSON.stringify(p(t))+`
|
|
3
|
-
`);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-
|
|
3
|
+
`);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-GQQJVTI5.js"),u=t.sessionName?[{label:"session",value:t.sessionName},{label:"test",value:n(t.testPath??"")},{label:"output",value:n(t.outputPath??"")}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];function l(){let{exit:i}=a();return o(()=>{let c=setTimeout(()=>i(),50);return()=>clearTimeout(c)},[i]),s.createElement(r,{title:"Recording",titleColor:"#ff9500",rows:u})}await e(s.createElement(l),{stdout:process.stderr}).waitUntilExit()}export{p as buildRecordingStateEvent,g as printRecordingBanner};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g}from"./chunk-
|
|
2
|
+
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g}from"./chunk-CIW2KP4C.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-VE3SUJMA.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";export{d as buildAutoDefaultAnnouncement,f as buildAutoDefaultedEvent,e as buildAutoDefaultedNdjson,c as buildRemediationMessage,b as decideGateAction,a as loadCachedIds,g as requireProjectFolder};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as b,b as c,c as d,d as e,e as f}from"./chunk-TY5LWU6I.js";import{f as a}from"./chunk-SGU72YLH.js";import"./chunk-I2S6KNZW.js";import"./chunk-FXPPQL4D.js";import"./chunk-RE3BZVGE.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-FTD3B7QA.js";import"./chunk-QPZRHAYK.js";import"./chunk-VJUIW2ES.js";import"./chunk-YKTYVJBN.js";import"./chunk-Z56AWGVY.js";import"./chunk-427OQS2N.js";import"./chunk-KHDUQ33H.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";export{e as dedupPreFlags,c as displaySourceName,a as resolveAnswers,f as runExtract,b as sessionSourceRef,d as sourceBanner};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as A}from"./chunk-
|
|
2
|
+
import{a as A}from"./chunk-OGVIHL5G.js";import{E as M,F as P,G as K,H,I as U}from"./chunk-BO3JA2GS.js";import"./chunk-GIGD4M7V.js";import{a as _,b as E}from"./chunk-C5POEXSX.js";import{a as h,b as k}from"./chunk-Y6LMHBLE.js";import"./chunk-2YQ6TW77.js";import"./chunk-LMJTY32X.js";import{s as L}from"./chunk-RKWJG3WW.js";import{c as R}from"./chunk-7MV5UF6O.js";import"./chunk-FFL2TQEJ.js";import"./chunk-Q4HLQOJI.js";import{a as x}from"./chunk-XBE7PGVY.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-P46TIMGQ.js";import"./chunk-SL7AJ7JQ.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-OE7TVGNB.js";import"./chunk-FYOCF7DY.js";import"./chunk-RGEAEAZB.js";import"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import"./chunk-NFOBDHZK.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import{e as b,f as S,g as T}from"./chunk-M5JQXOCE.js";import"./chunk-CIW2KP4C.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import{a as C}from"./chunk-RLG5NUTE.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import{a as v}from"./chunk-TZZYRDCF.js";import"./chunk-E4OYR32M.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";import{resolve as Y}from"path";import{existsSync as D}from"fs";function O(){return{register:(n,r)=>b(n,r),deregister:n=>S(n),cleanup:(n,r)=>T(n,r),remoteLogger:null}}async function le(n,r){let t=Y(n);if(!D(t))return process.stderr.write(`error: file not found: ${t}
|
|
3
3
|
`),2;if(r.finalValidation!==void 0&&r.finalValidation!=="on"&&r.finalValidation!=="off")return process.stderr.write(`error: --final-validation must be 'on' or 'off'
|
|
4
4
|
`),2;if(!t.endsWith("_test.md"))return process.stderr.write(`error: not a *_test.md file: ${t}
|
|
5
5
|
helpers are import-only \u2014 run a test that @imports it.
|
|
@@ -12,6 +12,6 @@ import{a as A}from"./chunk-6UNTIXFW.js";import{E as M,F as P,G as K,H,I as U}fro
|
|
|
12
12
|
\u2022 Run 'kane-cli login --username <user> --access-key <key>'
|
|
13
13
|
`):e instanceof h&&e.code==="refresh_failed"?process.stderr.write(`error: Token refresh failed. Run 'kane-cli login' to re-authenticate.
|
|
14
14
|
`):process.stderr.write(`error: auth resolution failed: ${e.message}
|
|
15
|
-
`),2}let y=String(p.resolvedCreds?.org_id??"");if(!y)return process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),2;{let{readMetaIfExists:e,assertOrgMatchOrExit:g}=await import("./testmd-actions-
|
|
15
|
+
`),2}let y=String(p.resolvedCreds?.org_id??"");if(!y)return process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),2;{let{readMetaIfExists:e,assertOrgMatchOrExit:g}=await import("./testmd-actions-TU4KTO32.js"),d=g(e(t),y);if(d!==null)return d}let w=new R,j=A({isAgent:a,log:(e,g,d,V)=>w.log(e,g,d,V)}),F={path:t,cwd:process.cwd(),opts:r,isAgent:a,disableAskUser:!0,resolved:s,resolvedAuth:p,cliOverrides:i,environment:f,envConfig:N,profile:I,model:$,creds:o,configStore:l,session:w};try{return(await M(F,j,c)).exitCode}catch(e){return process.stderr.write(`error: ${e.message}
|
|
16
16
|
`),2}}var m=class extends Error{constructor(t,a){super(t);this.exitCode=a;this.name="CliArgError"}};function G(n){let r={mode:"mode",assertionMode:"assertion_mode",finalValidation:"final_validation",maxSteps:"max_steps",timeout:"timeout",globalContext:"global_context",localContext:"local_context",codeExport:"code_export",codeLanguage:"code_language",headless:"headless",cdpEndpoint:"cdp_endpoint",wsEndpoint:"ws_endpoint"},t=new Set(["max_steps","timeout"]),a={};for(let[c,s]of Object.entries(r)){let i=n[c];if(i===void 0||i==="")continue;let o=i;if(t.has(s)&&(o=Number(i),Number.isNaN(o))){let l="--"+c.replace(/[A-Z]/g,u=>"-"+u.toLowerCase());throw new m(`error: ${l} must be a number
|
|
17
17
|
`,2)}a[s]=o}return a}export{U as applyCliStepConfig,K as buildStepRunVariables,P as buildTestLevelVariables,G as optsToOverrides,H as replayVariablesForStep,le as runTestMdFile};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as p,b as g}from"./chunk-
|
|
2
|
+
import{a as p,b as g}from"./chunk-G6AF2JUA.js";import{b as m}from"./chunk-TTSYHJLX.js";import{a as d}from"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-TZZYRDCF.js";import{a as f,g as a,h as u}from"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";import{mkdirSync as y,writeFileSync as w,readFileSync as S,rmSync as c,cpSync as v,createWriteStream as T,existsSync as b}from"fs";import{join as s}from"path";import{tmpdir as k}from"os";import{spawn as h}from"child_process";import{Readable as I}from"stream";import{pipeline as $}from"stream/promises";function E(t){try{return S(s(t,"VERSION"),"utf-8").trim()||null}catch{return null}}function L(t,r,l){return l?t!==r:t===null||m(t,r)>0}function C(t){let r=a.split("/").pop()??a;return`https://registry.npmjs.org/${a}/-/${r}-${t}.tgz`}var R=5e3,A=6e4;async function x(){let t=new AbortController,r=setTimeout(()=>t.abort(),R);try{let l=await d(p(),{headers:{Accept:"application/json"},signal:t.signal});if(!l.ok)throw new Error(`Controller returned ${l.status} fetching skill version map`);let i=await l.json(),n=g(i,f);if(!n)throw new Error("No compatible skill version found for this kane-cli build");return n}finally{clearTimeout(r)}}async function _(t){let r=C(t),l=new AbortController,i=setTimeout(()=>l.abort(),A);try{let n=await d(r,{headers:{Accept:"application/octet-stream"},signal:l.signal});if(!n.ok||!n.body)throw new Error(`Failed to download skill tarball (${n.status})`);let e=s(k(),`kane-cli-skill-${t}-${process.pid}.tgz`);return await $(I.fromWeb(n.body),T(e)),e}finally{clearTimeout(i)}}function M(t,r){return new Promise((l,i)=>{y(r,{recursive:!0});let n=h("tar",["-xzf",t,"-C",r,"--strip-components=2","package/skills"],{stdio:["ignore","ignore","pipe"]}),e="";n.stderr?.on("data",o=>{e+=o.toString()}),n.on("error",o=>i(o)),n.on("close",o=>{o===0?l():i(new Error(`tar exited ${o}${e?`: ${e.trim()}`:""}`))})})}async function W(t){let r;try{r=t??await x()}catch(e){return{status:"failed",version:t??"unknown",installedTargets:0,error:e instanceof Error?e.message:String(e)}}let l=u.filter(({dir:e})=>L(E(e),r,!!t));if(l.length===0)return{status:"already-installed",version:r,installedTargets:0};let i=null,n=null;try{if(n=await _(r),i=s(k(),`kane-cli-skill-${r}-stage-${process.pid}`),c(i,{recursive:!0,force:!0}),await M(n,i),!b(s(i,"SKILL.md")))throw new Error(`Unexpected skill tarball layout for v${r}: SKILL.md not at package/skills/ root`);let e=0;for(let{dir:o}of l)try{c(o,{recursive:!0,force:!0}),y(o,{recursive:!0}),v(i,o,{recursive:!0,force:!0}),w(s(o,"VERSION"),r+`
|
|
3
3
|
`),e++}catch{}return e===0?{status:"failed",version:r,installedTargets:0,error:"Could not write to any agent skill directory"}:{status:"installed",version:r,installedTargets:e}}catch(e){return{status:"failed",version:r,installedTargets:0,error:e instanceof Error?e.message:String(e)}}finally{if(n)try{c(n,{force:!0})}catch{}if(i)try{c(i,{recursive:!0,force:!0})}catch{}}}function D(t){switch(t.status){case"installed":return`Installed kane-cli skill v${t.version} (${t.installedTargets}/${u.length} agent dirs). Restart your AI agent (Claude Code / Codex CLI / Gemini CLI) to load it.`;case"already-installed":return`kane-cli skill v${t.version} already installed.`;case"failed":return`Failed to install kane-cli skill: ${t.error??"unknown error"}`}}export{D as formatInstallResult,W as installSkill,L as targetNeedsInstall};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c,d}from"./chunk-
|
|
2
|
+
import{a,b,c,d}from"./chunk-YZSYXNMB.js";import"./chunk-UR6MHSHU.js";export{c as buildAgentEnv,b as findAssuranceAgent,a as platformPackageName,d as resolveAgentAuthEnv};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{d as a}from"./chunk-53VDR5DN.js";import"./chunk-3MSXQU2C.js";import"./chunk-SQFNMZJ2.js";import"./chunk-DEEBPSJN.js";import"./chunk-ARS72637.js";import"./chunk-BO3JA2GS.js";import"./chunk-GIGD4M7V.js";import"./chunk-F2K3XFFH.js";import"./chunk-C5POEXSX.js";import"./chunk-Y6LMHBLE.js";import"./chunk-2YQ6TW77.js";import"./chunk-EEO4XWY6.js";import"./chunk-LMJTY32X.js";import"./chunk-RKWJG3WW.js";import"./chunk-7YQW4TFI.js";import"./chunk-Y7KW5AEN.js";import"./chunk-7MV5UF6O.js";import"./chunk-UXJPCWGW.js";import"./chunk-FFL2TQEJ.js";import"./chunk-Q4HLQOJI.js";import"./chunk-XBE7PGVY.js";import"./chunk-PJDOXRLB.js";import"./chunk-F66SSA4C.js";import"./chunk-5Y2G4NC7.js";import"./chunk-ME5QSYWX.js";import"./chunk-NFGG5DA2.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-P46TIMGQ.js";import"./chunk-2TVRHXRK.js";import"./chunk-SL7AJ7JQ.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-B5LJCGAY.js";import"./chunk-RFHMDQXZ.js";import"./chunk-OE7TVGNB.js";import"./chunk-FYOCF7DY.js";import"./chunk-RGEAEAZB.js";import"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import"./chunk-NFOBDHZK.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-WFRL54GK.js";import"./chunk-VXGOWBET.js";import"./chunk-BGGNBWAJ.js";import"./chunk-YCCUBQY4.js";import"./chunk-YZKPZXHY.js";import"./chunk-M5JQXOCE.js";import"./chunk-CIW2KP4C.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import"./chunk-TZZYRDCF.js";import"./chunk-EWFFJBAM.js";import"./chunk-SHSV64GX.js";import{a as o}from"./chunk-DFS4RMVP.js";import"./chunk-BFFCGEUH.js";import"./chunk-AV5SUGRY.js";import"./chunk-E4OYR32M.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{e as a,f as b,g as c,h as d,i as e,j as f,k as g,l as h,m as i,n as j,o as k,p as l,q as m}from"./chunk-
|
|
2
|
+
import{e as a,f as b,g as c,h as d,i as e,j as f,k as g,l as h,m as i,n as j,o as k,p as l,q as m}from"./chunk-F2K3XFFH.js";import"./chunk-C5POEXSX.js";import"./chunk-Y6LMHBLE.js";import"./chunk-2YQ6TW77.js";import"./chunk-RKWJG3WW.js";import"./chunk-XBE7PGVY.js";import"./chunk-P46TIMGQ.js";import"./chunk-SL7AJ7JQ.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-L5LI2JF4.js";import"./chunk-YZKPZXHY.js";import"./chunk-M5JQXOCE.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-TZZYRDCF.js";import"./chunk-AV5SUGRY.js";import"./chunk-E4OYR32M.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{i as ExportError,c as assertOrgMatchOrExit,j as exportTestmd,b as metaMatchesOrg,a as readMetaIfExists,d as resolveCurrentOrgId,l as resolveSyncAuth,h as runDeleteAction,k as runExportAction,e as runListAction,f as runListTui,g as runStatusAction,m as runSyncAction};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a}from"./chunk-P46TIMGQ.js";import"./chunk-SL7AJ7JQ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RLG5NUTE.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as t}from"./chunk-
|
|
2
|
+
import{a as t}from"./chunk-RLG5NUTE.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";async function l(n,o,r){let{ControllerClient:e}=await import("./controller-client-RD2YEMAH.js");await new e(t(n).controllerBaseUrl,{username:o,accessKey:r}).getTmsCredentials()}export{l as validateBasicAuth};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c,d}from"./chunk-
|
|
2
|
+
import{a,b,c,d}from"./chunk-TTSYHJLX.js";import"./chunk-RZ4F3BHX.js";import"./chunk-E4OYR32M.js";import"./chunk-UR6MHSHU.js";export{d as checkForUpdate,b as compareVersions,c as getSeverity,a as getUpdateCommand};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testmuai/kane-cli",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
4
4
|
"description": "KaneAI Terminal UI — browser automation testing agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
"ws": "^8.20.0"
|
|
27
27
|
},
|
|
28
28
|
"optionalDependencies": {
|
|
29
|
-
"@testmuai/kane-cli-darwin-arm64": "0.6.
|
|
30
|
-
"@testmuai/kane-cli-darwin-x64": "0.6.
|
|
31
|
-
"@testmuai/kane-cli-linux-x64": "0.6.
|
|
32
|
-
"@testmuai/kane-cli-linux-arm64": "0.6.
|
|
33
|
-
"@testmuai/kane-cli-win-x64": "0.6.
|
|
29
|
+
"@testmuai/kane-cli-darwin-arm64": "0.6.3",
|
|
30
|
+
"@testmuai/kane-cli-darwin-x64": "0.6.3",
|
|
31
|
+
"@testmuai/kane-cli-linux-x64": "0.6.3",
|
|
32
|
+
"@testmuai/kane-cli-linux-arm64": "0.6.3",
|
|
33
|
+
"@testmuai/kane-cli-win-x64": "0.6.3",
|
|
34
34
|
"sharp": "^0.34.5"
|
|
35
35
|
},
|
|
36
36
|
"publishConfig": {
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as H,b as $e}from"./chunk-6PS65QFF.js";import{a as xe,b as ye}from"./chunk-KGFISJFM.js";import{b as de,d as he}from"./chunk-LV5VRSPI.js";import{a as pe}from"./chunk-5Y2G4NC7.js";import{a as fe}from"./chunk-OZM4UU5F.js";import{b as ge}from"./chunk-DFS4RMVP.js";import"./chunk-KRFGAVYU.js";import{x as l}from"./chunk-QIE62H3J.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as x,b as o,i as me,k as U}from"./chunk-C44QQJR4.js";import{a as Y}from"./chunk-6YGTRKDT.js";import{e as I}from"./chunk-UR6MHSHU.js";var L=I(Y(),1);var B=I(R(),1),Te=3,Ze=60;function et(e){let n=e.cursor>=0?e.questions[e.cursor]:void 0;if(n?.risk==="high")return"high-risk \u2014 answer explicitly, or type 'defer' to leave the rest with the agent";let t=e.resolution.findIndex(Boolean);if(t>=0){let a=e.questions[t],r=a.options.find((i,p)=>p!==e.resolution[t].selected_index)?.label??a.options[0]?.label??"\u2026";return`changed your mind? \`${t+1}: ${r}\` re-answers q${t+1}`}let s=n??e.questions[0],u=s.options[0]?.label??"\u2026",c=s.allow_free_text?" \xB7 or your own words":"";return`e.g. \`1\` or \`${u}\`${c} \xB7 Enter takes recommended defaults`}function tt(e){return`[${e}]`}function nt({batch:e,i:n}){let t=e.resolution[n],s=t.form==="deferred"?"\u2013 deferred (the agent keeps it)":`\u2713 ${t.form}: ${t.choice}${t.form==="assumed"?" (flagged)":" (you)"}`;return(0,B.jsx)(o,{color:l.dim,children:` ${s}`})}function rt({batch:e,i:n}){let t=e.questions[n],s=e.cursor===n&&!e.resolution[n],u=s?"\u203A":" ";return(0,B.jsxs)(x,{flexDirection:"column",children:[(0,B.jsx)(o,{bold:s,children:` ${n+1} ${u} ${t.text} ${tt(t.risk)}`}),(0,B.jsx)(o,{color:l.dim,children:` why: ${t.rationale}`}),e.resolution[n]?(0,B.jsx)(nt,{batch:e,i:n}):(0,B.jsxs)(x,{flexDirection:"column",children:[t.multi_select?(0,B.jsx)(o,{color:l.dim,children:" note: multi-select not yet supported \u2014 pick the best single option"}):null,t.options.map((c,a)=>(0,B.jsx)(o,{children:` ${a+1}. ${c.label}${a===t.recommended_index?" \u2605 recommended":""}`},`o-${a}`)),t.allow_free_text?(0,B.jsx)(o,{color:l.dim,children:" (free text allowed \u2014 just type your own words)"}):null]})]})}function we({batch:e}){let{stdout:n}=U(),t=n?.columns??80,s=t<Ze,u=e.resolution.filter(y=>!y).length,c=Math.max(0,Math.min(e.cursor<0?0:e.cursor,e.questions.length-Te)),a=e.questions.slice(c,c+Te),r=c,i=e.questions.length-c-a.length,p=et(e);s&&p.length>t-2&&(p=`${p.slice(0,Math.max(0,t-3))}\u2026`);let f=e.cursor>=0?`answering ${e.cursor+1} of ${e.questions.length}`:"all placed",g=(0,B.jsxs)(x,{flexDirection:"column",children:[(0,B.jsx)(o,{bold:!0,children:`questions \xB7 ${u} pending \xB7 ${f}`}),r>0?(0,B.jsx)(o,{color:l.muted,children:` \u22EE ${r} above`}):null,a.map((y,C)=>(0,B.jsx)(rt,{batch:e,i:c+C},y.id)),i>0?(0,B.jsx)(o,{color:l.muted,children:` \u22EE ${i} more`}):null,(0,B.jsx)(o,{color:l.dim,children:p})]});return s?g:(0,B.jsx)(x,{flexDirection:"column",borderStyle:"round",borderColor:l.dim,paddingX:1,children:g})}var A=I(R(),1),be=60,ot=e=>e.length<=be?e:`${e.slice(0,be-1)}\u2026`;function Z({item:e}){return(0,A.jsxs)(x,{flexDirection:"column",marginLeft:2,children:[(e.cite??[]).map((n,t)=>(0,A.jsx)(o,{dimColor:!0,children:`cite ${n.anchor??"conv"} \u2014 "${n.quote??""}"`},`cite-${t}`)),(e.depends_on_hint??[]).length>0&&(0,A.jsx)(o,{dimColor:!0,children:`depends on: ${(e.depends_on_hint??[]).join(", ")}`}),Object.entries(e.extra??{}).map(([n,t])=>(0,A.jsx)(o,{dimColor:!0,children:`${n}: ${t}`},`extra-${n}`))]})}function Q({heading:e,turn:n,items:t,expandedRef:s,total:u,compact:c,numbers:a,marks:r}){return(0,A.jsxs)(x,{flexDirection:"column",children:[(0,A.jsx)(o,{bold:!0,children:`${e} \xB7 turn ${n} \xB7 ${u??t.length} proposed`}),t.map((i,p)=>{let f=i.matches_existing,g=f?f.cid?f.archived?` \u2248 matches ARCHIVED ${f.cid.slice(0,19)} \u2014 previously rejected${f.reason?`: "${f.reason}"`:""}`:` \u2248 matches ${f.cid.slice(0,19)}`:" \u2248overlap":"",y=r?.[p]?" \xB7 updated":"",C=c?` ${a?.[p]??p+1} \xB7 ${i.title}${i.badge!==void 0?` \xB7 ${i.badge}`:""}${i.why?` \u2014 ${ot(i.why)}`:""}${g}${y}`:` ${i.title}${i.badge!==void 0?` \xB7 ${i.badge}`:""}${i.why!==void 0?` \xB7 ${i.why}`:""}${g}`;return(0,A.jsxs)(x,{flexDirection:"column",children:[(0,A.jsx)(o,{children:C}),s===i.temp_ref&&(0,A.jsx)(Z,{item:i})]},i.temp_ref)})]})}var Ce=I(R(),1),st=e=>e.summary??e.description??"";function it(e){return{temp_ref:e.temp_ref,title:e.title,badge:e.risk,why:st(e),matches_existing:e.matches_existing?e.matches_existing:null,cite:e.cite??[],depends_on_hint:e.depends_on_hint??[]}}function ve({turn:e,items:n,expandedRef:t,total:s,compact:u,numbers:c,marks:a}){return(0,Ce.jsx)(Q,{heading:"use-cases",turn:e,items:n.map(it),expandedRef:t,total:s,compact:u,numbers:c,marks:a})}var at={"use-case":"use-cases",ac:"ACs",scenario:"scenarios",test:"tests",gap:"gaps"},P=e=>at[e]??`${e}s`,ke=e=>e==="ac"?"AC":e==="use-case"?"use-case":e,ee=e=>e.kind??"use-case",Se=e=>`${ee(e)}:${e.temp_ref}`;function Ie(e){let n=e,t=n.badge??e.risk??null,s=n.why??e.summary??e.description??null;return JSON.stringify([e.title,t,s,n.extra??null,e.depends_on_hint??null])}function Be(e){return e.filter(n=>n.role==="agent"&&typeof n.turnIndex=="number"&&Array.isArray(n.items)&&n.items.length>0)}function F(e){let n=new Map,t=1;for(let c of Be(e)){let a=new Set;for(let r of c.items){let i=Se(r);if(a.has(i))continue;a.add(i);let p=n.get(i);n.set(i,{num:p?.num??t++,ref:r.temp_ref,kind:ee(r),item:r,turnIndex:c.turnIndex,fingerprint:Ie(r)})}}let s=[...n.values()].sort((c,a)=>c.num-a.num),u=[];for(let c of s){let a=u.find(r=>r.kind===c.kind);a?a.count++:u.push({kind:c.kind,label:P(c.kind),count:1})}return{entries:s,byRef:n,counts:u}}function Re(e,n){let s=Be(e).find(m=>m.turnIndex===n);if(!s)return null;let u=e.filter(m=>m.role!=="agent"||typeof m.turnIndex!="number"||m.turnIndex<=n),c=F(u),a=F(e.filter(m=>m.role!=="agent"||typeof m.turnIndex!="number"||m.turnIndex<n)),r=[],i=new Map,p=new Map,f=new Map,g=new Set;for(let m of s.items){let w=Se(m);if(g.has(w))continue;g.add(w);let q=a.byRef.get(w),O=m.changed===!0,S=c.byRef.get(w).num,D=ee(m);if(q&&!O&&q.fingerprint===Ie(m)){i.set(D,(i.get(D)??0)+1);continue}let b=!!q||O,M=b?f:p;M.set(D,(M.get(D)??0)+1),r.push({item:m,num:S,updated:b})}let y=[...i.entries()].map(([m,w])=>({label:P(m),count:w})),C=[...[...p.entries()].map(([m,w])=>`${w} new ${w===1?ke(m):P(m)}`),...[...f.entries()].map(([m,w])=>`${w} updated ${w===1?ke(m):P(m)}`)].join(" \xB7 ");return{fresh:r,unchanged:y,headerStats:C}}var E=I(R(),1);function De({turnIndex:e,fresh:n,headerStats:t,unchangedTotal:s}){let u=[];for(let a of n){let r=a.item.kind??"use-case",i=u.find(p=>p.kind===r);i?i.rows.push(a):u.push({kind:r,rows:[a]})}let c=`design \xB7 turn ${e} \u2014 ${t||"no new items"}${s>0?` (${s} unchanged)`:""}`;return(0,E.jsxs)(x,{flexDirection:"column",children:[(0,E.jsx)(o,{bold:!0,children:c}),u.map(({kind:a,rows:r})=>{let i=r.filter(g=>!g.updated).length,p=r.length-i,f=[...i>0?[`${i} new`]:[],...p>0?[`${p} updated`]:[]].join(" \xB7 ");return(0,E.jsxs)(x,{flexDirection:"column",children:[(0,E.jsx)(o,{color:l.dim,children:`${P(a).toLowerCase()} \xB7 ${f}`}),r.map(({item:g,num:y,updated:C})=>{let m=g;return(0,E.jsxs)(x,{flexDirection:"column",children:[(0,E.jsxs)(o,{children:[(0,E.jsx)(o,{children:` ${y} \xB7 ${g.title}`}),m.badge?(0,E.jsx)(o,{color:l.dim,children:` \xB7 ${m.badge}`}):null,C?(0,E.jsx)(o,{color:l.dim,children:" \xB7 updated"}):null]}),m.why?(0,E.jsx)(o,{color:l.dim,children:` ${m.why}`}):null]},`${a}:${g.temp_ref}`)})]},a)})]})}var d=I(R(),1);function ct(e){let n=e.form==="assumed"?" (flagged)":e.form==="deferred"?"":" (you)",t=e.note?` \u2014 ${e.note}`:"";return e.form==="deferred"?`\u21B3 deferred q${e.qNum} ${e.stub}${t}`:e.form==="changed"?`\u21B3 changed q${e.qNum} ${e.stub}: ${e.prev??"?"} \u2192 ${e.choice??"?"}${n}${t}`:`\u21B3 ${e.form} q${e.qNum} ${e.stub}: ${e.choice??"?"}${n}${t}`}function Ee({block:e,annotations:n}){switch(e.kind){case"banner":return(0,d.jsx)(o,{color:l.dim,children:`\u2500\u2500 ${e.text} \u2500\u2500`});case"user":return(0,d.jsxs)(x,{children:[(0,d.jsx)(o,{color:l.orange,children:"\u276F "}),(0,d.jsx)(o,{children:e.text})]});case"note":return(0,d.jsx)(o,{color:l.dim,children:e.text});case"agent":return(0,d.jsx)(xe,{text:e.text});case"thinking":return(0,d.jsx)(o,{color:l.dim,children:` thought for ${(e.tookMs/1e3).toFixed(1)}s`});case"tool":return(0,d.jsx)(o,{color:l.dim,children:` ${H({name:e.name,status:e.status==="ok"?"done":e.status,detail:e.detail})}`});case"usage":return(0,d.jsx)(o,{color:l.dim,children:` \xB7 ${e.credits.toFixed(1)} credits \u2014 total ${e.total.toFixed(1)}`});case"turn":{let t=n??null,s=t?t.fresh.map(r=>r.item):e.items,u=t?t.fresh.map(r=>r.num):void 0,c=t?t.fresh.map(r=>r.updated):void 0,a=s.some(r=>!!r.kind);return(0,d.jsxs)(x,{flexDirection:"column",marginLeft:2,children:[a?(0,d.jsx)(De,{turnIndex:e.turnIndex,fresh:t?t.fresh:s.map((r,i)=>({item:r,num:i+1,updated:!1})),headerStats:t?.headerStats??"",unchangedTotal:(t?.unchanged??[]).reduce((r,i)=>r+i.count,0)}):e.heading==="use-cases"?(0,d.jsx)(ve,{turn:e.turnIndex,items:s,expandedRef:null,compact:!0,total:s.length,numbers:u,marks:c}):(0,d.jsx)(Q,{heading:e.heading,turn:e.turnIndex,items:s,expandedRef:null,compact:!0,total:s.length,numbers:u,marks:c}),t&&t.unchanged.length>0&&(0,d.jsx)(o,{color:l.dim,children:` \u22EE unchanged: ${t.unchanged.map(r=>`${r.count} ${r.label}`).join(" \xB7 ")} \u2014 /view to browse`})]})}case"answer":return(0,d.jsx)(o,{color:l.dim,children:ct(e.receipt)});case"commit":return(0,d.jsxs)(x,{flexDirection:"column",children:[(0,d.jsx)(o,{color:e.ok?l.green:l.red,children:`${e.ok?"\u2714":"\u2717"} ${e.line}`}),(e.warnings??[]).map((t,s)=>(0,d.jsx)(o,{color:l.dim,children:` \u26A0 ${t}`},`w-${s}`))]});case"error":return(0,d.jsxs)(fe,{variant:"error",paddingX:1,children:[(0,d.jsx)(o,{color:l.red,children:e.title}),e.detail.map((t,s)=>(0,d.jsx)(o,{color:l.dim,children:t},`d-${s}`))]});case"interrupted":return(0,d.jsxs)(x,{flexDirection:"column",children:[(0,d.jsx)(o,{color:l.red,children:"interrupted \u2014 session not saved"}),e.detail?(0,d.jsx)(o,{color:l.dim,children:e.detail}):null]});case"pause":return(0,d.jsxs)(x,{flexDirection:"column",children:[(0,d.jsx)(o,{children:`paused: session ${e.sid} saved`}),e.expires_at?(0,d.jsx)(o,{color:l.dim,children:`expires: ${e.expires_at}`}):null,(0,d.jsx)(o,{children:`resume: ${e.resume}`}),e.messageForm?(0,d.jsx)(o,{children:`or say something on the way in: ${e.messageForm}`}):null]});case"summary":return(0,d.jsxs)(x,{flexDirection:"column",children:[(0,d.jsx)(o,{bold:!0,children:"session summary"}),e.lines.map((t,s)=>(0,d.jsx)(o,{children:` ${t}`},`s-${s}`))]})}}var W=I(Y(),1);var Oe=I(R(),1),Le=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],te="ctrl+t thinking \xB7 ctrl+c pause";function Ae(e,n){if(e.length<=n)return e;if(n<=1)return"\u2026";let t=Math.ceil((n-1)/2),s=Math.floor((n-1)/2);return`${e.slice(0,t)}\u2026${s>0?e.slice(-s):""}`}function _e({streaming:e,verb:n,subject:t,turn:s,pendingCount:u,lastActivity:c,workingLabel:a,creditsTotal:r}){let{stdout:i}=U(),p=i?.columns??80,[f,g]=(0,W.useState)(0),y=(0,W.useRef)(null);(0,W.useEffect)(()=>{e&&y.current===null&&(y.current=Date.now()),e||(y.current=null)},[e]),pe(()=>g(b=>b+1),e?1e3:null);let C=[];if(e){let b=y.current?Math.floor((Date.now()-y.current)/1e3):0;C.push(`${Le[f%Le.length]} ${b}s ${a??c??"waiting for model"}`)}C.push(n),s&&C.push(`turn ${s}`),r!==void 0&&C.push(`${r.toFixed(1)} cr`);let m=u?`[${u} pending]`:null,w=" \xB7 ",O=[...C,...m?[m]:[]].join(w).length,S,D=[...C,...t?[t]:[],...m?[m]:[],te].join(w);if(D.length<=p)S=D;else{let b=p-O-(t?w.length:0)-w.length-te.length;if(t&&b>=8)S=[...C,Ae(t,b),...m?[m]:[],te].join(w);else{let M=p-O-(t?w.length:0);S=[...C,...t&&M>=4?[Ae(t,M)]:[],...m?[m]:[]].join(w)}}return(0,Oe.jsx)(o,{color:l.dim,children:S})}var V=I(Y(),1);function ne({onToggleThinking:e,onCtrlC:n,explorer:t}){let u=(0,V.useRef)(null),c=(0,V.useRef)(""),a=()=>{u.current&&clearTimeout(u.current),u.current=null,c.current=""};return(0,V.useEffect)(()=>a,[]),me((r,i)=>{if(i.ctrl&&r==="t"){e();return}if(i.ctrl&&r==="c"){n();return}if(!i.ctrl&&r.includes("")){n();return}if(!i.ctrl&&r.includes("")){e();return}if(t&&t.isOpen()){let p=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{a(),t.onBack()},150)};if(u.current){if(i.upArrow||i.downArrow||i.return){a(),i.return?t.onEnter():t.onMove(i.upArrow?-1:1);return}if(c.current+=r,c.current==="["){p();return}let f=c.current;a();let g=/^\[([AB])/.exec(f);if(g){t.onMove(g[1]==="A"?-1:1);return}t.onBack();return}if(i.upArrow){t.onMove(-1);return}if(i.downArrow){t.onMove(1);return}if(i.return){t.onEnter();return}if(i.escape){c.current="",p();return}if(r.length>=2&&!i.ctrl&&!i.meta){t.onClose();return}return}}),null}var v=I(R(),1),re=(e,n)=>Math.max(0,Math.min(n,e));function X(e,n,t){switch(n.type){case"move":return{...e,cursor:re(e.cursor+n.delta,Math.max(0,t-1))};case"enter":return e.level==="list"?{...e,level:"detail"}:e;case"back":return e.level==="detail"?{...e,level:"list"}:null}}var Pe={"use-case":"use-cases",ac:"acs",scenario:"scenarios",test:"tests",gap:"gaps"};function qe(e,n){if(e.level==="detail")return{level:"detail",cursor:re(e.num-1,Math.max(0,n.entries.length-1))};if(e.section){let t=n.entries.findIndex(s=>Pe[s.kind]===e.section);if(t>=0)return{level:"list",cursor:t}}return{level:"list",cursor:0}}function lt(e){let n=[];for(let t of e.entries){let s=n.find(u=>u.kind===t.kind);s?s.entries.push(t):n.push({kind:t.kind,entries:[t]})}return n}var Me=3;function ut({items:e,cursor:n,verb:t}){let s=`view \xB7 ${t} so far \xB7 ${e.counts.map(c=>`${c.count} ${c.count===1?c.label.replace(/s$/,""):c.label}`).join(" \xB7 ")}`,u=e.entries[n];return(0,v.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:l.dim,paddingX:1,children:[(0,v.jsx)(o,{bold:!0,children:s}),lt(e).map(({kind:c,entries:a})=>{let r=u?.kind===c,i=r?a.findIndex(y=>y.ref===u.ref):-1,p=r?re(i-1,Math.max(0,a.length-Me)):0,f=a.slice(p,p+(r?Me:1)),g=a.length-f.length;return(0,v.jsxs)(x,{flexDirection:"column",children:[(0,v.jsx)(o,{color:l.dim,children:`${Pe[c]??P(c)} \xB7 ${a.length}`}),f.map(y=>{let C=r&&y.ref===u.ref,m=y.item.badge;return(0,v.jsxs)(o,{children:[(0,v.jsx)(o,{color:l.generateAccent,children:C?"\u203A ":" "}),(0,v.jsx)(o,{children:`${y.num} \xB7 ${y.item.title}`}),m?(0,v.jsx)(o,{color:l.dim,children:` \xB7 ${m}`}):null]},`${y.kind}:${y.ref}`)}),g>0&&(0,v.jsx)(o,{color:l.dim,children:` \u22EE ${g} more`})]},c)}),(0,v.jsx)(o,{color:l.dim,children:"\u2191\u2193 move \xB7 \u21B5 detail \xB7 esc back to chat"})]})}function mt({items:e,cursor:n}){let t=e.entries[n];if(!t)return(0,v.jsx)(o,{color:l.dim,children:"nothing to show"});let s=t.item;return(0,v.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:l.dim,paddingX:1,children:[(0,v.jsx)(o,{bold:!0,children:`view \xB7 ${t.kind} ${t.num} of ${e.entries.length}`}),(0,v.jsx)(o,{children:t.item.title}),s.badge?(0,v.jsx)(o,{color:l.dim,children:`kind: ${s.badge}`}):null,s.why?(0,v.jsx)(o,{color:l.dim,children:s.why}):null,(0,v.jsx)(Z,{item:t.item}),(0,v.jsx)(o,{color:l.dim,children:"view-only \u2014 approvals happen in chat"}),(0,v.jsx)(o,{color:l.dim,children:"\u2191\u2193 prev/next \xB7 esc back to list"})]})}function Ne({items:e,state:n,verb:t}){return n.level==="list"?(0,v.jsx)(ut,{items:e,cursor:n.cursor,verb:t}):(0,v.jsx)(mt,{items:e,cursor:n.cursor})}var Ue=[{name:"view",description:"browse the proposal set"},{name:"explain",description:"why a committed item exists"},{name:"pause",description:"save + exit (resumable)"},{name:"done",description:"finish the session"}],dt={"use-cases":"use-cases",usecases:"use-cases","use-case":"use-cases",acs:"acs",ac:"acs",scenarios:"scenarios",scenario:"scenarios",tests:"tests",test:"tests",gaps:"gaps",gap:"gaps"};function We(e){let n=(e??"").trim().toLowerCase();if(!n)return{level:"list"};if(/^\d+$/.test(n)){let s=parseInt(n,10);return s>=1?{level:"detail",num:s}:{error:"items are numbered from 1 \u2014 /view 1"}}let t=dt[n];return t?{level:"list",section:t}:{error:"try /view, /view <number>, or /view acs|scenarios|tests"}}var k=I(R(),1),pt=6,Ke=12;function Fe(e,n,t){let s=Math.max(20,n),u=[];for(let a of e.split(`
|
|
3
|
-
`)){if(a.length<=s){u.push(a);continue}let r="";for(let i of a.split(" "))r&&r.length+1+i.length>s?(u.push(r),r=i):r=r?`${r} ${i}`:i;u.push(r)}let c=Math.max(0,u.length-t);return{body:u.slice(-t).join(`
|
|
4
|
-
`),hidden:c}}var ft='chat with the agent \u2014 "/" for commands';function un({controller:e,verb:n="extract",onCtrlC:t}){let[,s]=(0,L.useState)(0),[u,c]=(0,L.useState)(!1),[a,r]=(0,L.useState)(null),[i,p]=(0,L.useState)(null),f=(0,L.useRef)(null),g=$=>{f.current=$,p($)},y=ge(),{stdout:C}=U(),m=C?.columns??80,w=(0,L.useRef)(0),q=(0,L.useRef)(0),O=(0,L.useRef)(null);O.current||(O.current=new de(null)),(0,L.useEffect)(()=>{let $=()=>{let h=e.state.ledger;for(let _=w.current;_<h.length;_++){let N=h[_],Ye=N.kind==="turn"?Re(e.state.turns,N.turnIndex):void 0;y.append((0,k.jsx)(Ee,{block:N,annotations:Ye},`lg-${_}`))}w.current=h.length};$();let T=e.subscribe(()=>{$();let h=e.state;f.current&&(h.pending||h.status==="pausing")&&(g(null),h.pending&&r("questions arrived \u2014 back to chat")),s(_=>_+1)});return s(h=>h+1),T},[e,y]);let{thinking:S,status:D,pending:b,confirm:M,ledger:oe,activeTurn:se,stream:z,notice:j}=e.state,G=S.activity[S.activity.length-1],ie=G&&G.status==="started"?G:null,ae=z!=null&&z.text.length>0,Ve=ae?`\u2237 thinking \xB7 ${S.thinkingLog.length} block${S.thinkingLog.length===1?"":"s"} \xB7 ctrl+t to inspect`:S.liveThinking.length>0?`\u273B ${Fe(S.liveThinking,m-4,1).body}`:D==="streaming"?"\u2237 thinking\u2026 (ctrl+t to show)":"\u2237 thinking complete (ctrl+t to view)",je=S.liveThinking.length>0||u&&S.thinkingLog.length>0,He=Fe(S.liveThinking||S.thinkingLog.map($=>$.text).join(`
|
|
5
|
-
`),m-6,Ke),ce=ae?z.text.split(`
|
|
6
|
-
`).slice(-pt):[];se&&(q.current=se.turnIndex);let Qe=b?b.resolution.filter($=>!$).length:0,le;for(let $=oe.length-1;$>=0;$--){let T=oe[$];if(T.kind==="banner"&&!T.text.startsWith("kane")){le=T.text;break}}let K=S.activity[S.activity.length-1],Xe=K?K.status==="decision"?K.label:$e({name:K.name,status:K.status}):void 0,ze=D==="streaming"&&!b,Ge=b?`answering ${Math.max(0,b.cursor)+1} of ${b.questions.length} \u2014 option number, label, or your own words`:ft,J=t??(()=>e.requestPause()),Je=$=>{let T=We($);if("error"in T){r(T.error);return}let h=F(e.state.turns);if(h.entries.length===0){r("nothing proposed yet \u2014 the first turn is still coming");return}if(T.level==="detail"&&T.num>h.entries.length){r(`no item ${T.num} \u2014 the set has ${h.entries.length} item${h.entries.length===1?"":"s"}`);return}g(qe(T,h))},ue=(0,k.jsx)(_e,{streaming:D==="streaming"||D==="working",verb:n,subject:le,turn:q.current||void 0,pendingCount:Qe,lastActivity:Xe,workingLabel:D==="working"?e.state.workingLabel:void 0,creditsTotal:e.state.credits?.total});if(i){let $=F(e.state.turns),T=$.entries.length;return(0,k.jsxs)(x,{flexDirection:"column",children:[(0,k.jsx)(ne,{onToggleThinking:()=>c(h=>!h),onCtrlC:J,explorer:{isOpen:()=>f.current!==null,onClose:()=>{g(null),r("closed the explorer \u2014 your text didn't send, retype to chat"),setTimeout(()=>s(h=>h+1),0)},onMove:h=>g(f.current&&X(f.current,{type:"move",delta:h},T)),onEnter:()=>g(f.current&&X(f.current,{type:"enter"},T)),onBack:()=>{g(f.current&&X(f.current,{type:"back"},T)),setTimeout(()=>s(h=>h+1),0)}}}),(0,k.jsx)(Ne,{items:$,state:i,verb:n}),(j??a)&&(j??a).split(`
|
|
7
|
-
`).map((h,_)=>(0,k.jsx)(o,{color:l.orange,children:h},`nt-${_}`)),ue]})}return(0,k.jsxs)(x,{flexDirection:"column",children:[(0,k.jsx)(ne,{onToggleThinking:()=>c($=>!$),onCtrlC:J}),je&&(u?(0,k.jsx)(ye,{thinking:He.body,expanded:!0,thinkingDone:D!=="streaming",maxLines:Ke+1}):(0,k.jsx)(o,{color:l.dim,children:Ve})),ie&&(0,k.jsx)(o,{dimColor:!0,children:`${H({name:ie.name,status:"started"})}\u2026`}),ce.length>0&&(0,k.jsx)(x,{flexDirection:"column",children:ce.map(($,T)=>(0,k.jsx)(o,{children:$},`st-${T}`))}),b&&(0,k.jsx)(we,{batch:b}),M&&(0,k.jsx)(o,{color:"yellow",children:M.prompt}),(j??a)&&(j??a).split(`
|
|
8
|
-
`).map(($,T)=>(0,k.jsx)(o,{color:l.orange,children:$},`nt-${T}`)),D==="pausing"?(0,k.jsx)(o,{color:l.dim,children:"pausing \u2014 saving session\u2026 (ctrl+c again = force quit)"}):(0,k.jsx)(he,{history:O.current,placeholder:Ge,accent:l.generateAccent,submitVerb:b?"answer":"send",submitEmpty:!!b,inert:ze,commands:Ue,footerBindings:[{keys:"\u21B5",label:b?"answer":"send"},{keys:"\u2191\u2193",label:"history"},{keys:"ctrl+t",label:"thinking"},{keys:"ctrl+c",label:"pause"}],onSubmit:$=>{let T=$.trim();if(!T){b&&e.submit("");return}if(r(null),T.startsWith("/")){let[h="",..._]=T.slice(1).split(/\s+/),N=_.join(" ");if(!h){r('type "/" then a command \u2014 /view, /explain, /pause, /done');return}switch(h.toLowerCase()){case"view":Je(N);return;case"explain":if(!N){r("usage: /explain <ref> \u2014 e.g. /explain guest-checkout");return}e.explainRef(N);return;case"pause":J();return;case"done":case"exit":e.completeSession();return;default:r(`unknown command "/${h}" \u2014 try /view, /explain, /pause, /done${b?`
|
|
9
|
-
to answer with a literal "/", quote it: "/api/v2"`:""}`);return}}e.submit(T)}}),ue]})}export{un as ChatSurface,Fe as tailVisualRows};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-ZGH7T32S.js";import"./chunk-VL2UA23Z.js";import"./chunk-LV5VRSPI.js";import"./chunk-2U5DZUC7.js";import"./chunk-EK2B2LZK.js";import"./chunk-4G4HPMR2.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-L5LI2JF4.js";import"./chunk-MHQ6A2QZ.js";import"./chunk-FU3OQXFH.js";import"./chunk-YCCUBQY4.js";import"./chunk-U3JB76QP.js";import"./chunk-M5JQXOCE.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-YIOWO6WS.js";import"./chunk-VE3SUJMA.js";import"./chunk-L4AUCQVO.js";import"./chunk-KRFGAVYU.js";import"./chunk-QIE62H3J.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{g as a}from"./chunk-DCYTRYR2.js";import"./chunk-44QUA6GV.js";import"./chunk-IDDVO4UV.js";import"./chunk-EK2B2LZK.js";import"./chunk-M6DX4ENH.js";import"./chunk-5Y2G4NC7.js";import"./chunk-M5JQXOCE.js";import"./chunk-YIOWO6WS.js";import"./chunk-PJSCM6JX.js";import"./chunk-OZM4UU5F.js";import"./chunk-DFS4RMVP.js";import"./chunk-QIE62H3J.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as TestMdRunView};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as H,b as V,c as J,d as K}from"./chunk-DM2GL24Z.js";import"./chunk-6PS65QFF.js";import{b as L,d as F}from"./chunk-VJUIW2ES.js";import{d as z}from"./chunk-KHDUQ33H.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-UR6MHSHU.js";var ee=new Set(["approve","edit","reject"]);function te(i,t){return`chatop:${t}:${i.target??"new"}:${i.op}:${i.seq}`}function ne(i,t,k,c){let a=te(i,t),m=i.payload;switch(i.op){case"approve":return{kind:"approve",target:i.target,expectedCid:i.expected_cid,eventId:a};case"edit":{let{reason:r,...h}=m;return{kind:"edit",target:i.target,expectedCid:i.expected_cid,edit:h,reason:r,eventId:a}}case"enhance":return{kind:"enhance",target:i.target,expectedCid:i.expected_cid,edges:m.edges??[],eventId:a};case"reject":return{kind:"reject",target:i.target,expectedCid:i.expected_cid,reason:m.reason??"",redirectTo:m.redirect_to,eventId:a};case"add":{let r=m.proposal_item??{},h=String(r.label??"");if(!k.mint_gate.includes(h))throw new Error(`GATED_LABEL: cannot mint "${h}" (gate: ${k.mint_gate.join(", ")})`);let d=r.cite??{},u=r.conv_source_id??c;if(!u||typeof d.turn!="number"||!d.quote)throw new Error("INVALID_ADD: a chat add requires a conversation cite {turn, quote} and conv_source_id");return{kind:"add",label:h,content:r.content??{},cite:{turn:d.turn,quote:d.quote},convSourceId:u,rationale:r.rationale,eventId:a}}}}function X(i,t,k={}){let c=k.turn??0,a=[],m=[];for(let d of i)(d.op==="add"||d.op==="enhance")&&m.push(d);let r=new Map;for(let d of i){if(!ee.has(d.op)||!d.target)continue;let u=r.get(d.target)??[];u.push(d),r.set(d.target,u)}for(let[d,u]of r){let _=Math.max(...u.map(y=>y.seq)),C=u.filter(y=>y.seq===_);if(C.length>1){a.push({target:d,seq:_,kinds:C.map(y=>y.op)});continue}m.push(C[0])}return{chatOps:m.sort((d,u)=>d.seq-u.seq).map(d=>ne(d,c,t,k.convSourceId)),ambiguous:a}}function re(i,t){let k=i.trim();if(k==="")return{kind:"defaults"};if(/^defer$/i.test(k))return{kind:"defer-all"};let c=t.cursor,a=k,m=/^(\d+):\s*(.*)$/.exec(k);if(m){let u=Number(m[1]);if(u<1||u>t.questions.length)return{kind:"invalid",target:null,message:`no question ${u} \u2014 this batch has ${t.questions.length}`};if(c=u-1,a=m[2].trim(),!a)return{kind:"invalid",target:c,message:`say what to answer \u2014 e.g. \`${u}: yes\``}}if(c<0||c>=t.questions.length)return{kind:"invalid",target:null,message:"no pending question to answer"};let r=t.questions[c],h=/^"(.*)"$/.exec(a);if(h)return r.allow_free_text?{kind:"free",target:c,text:h[1]}:{kind:"invalid",target:c,message:`question ${c+1} takes an option (1-${r.options.length}) \u2014 free text isn't allowed here`};if(r.multi_select&&/^\d+(\s+\d+)+$/.test(a)){let u=a.split(/\s+/).map(Number);if(u.every(_=>_>=1&&_<=r.options.length))return{kind:"multi",target:c,indices:u.map(_=>_-1)}}if(/^\d+$/.test(a)){let u=Number(a);if(u>=1&&u<=r.options.length)return{kind:"option",target:c,index:u-1}}let d=r.options.findIndex(u=>u.label.toLowerCase()===a.toLowerCase());return d>=0?{kind:"option",target:c,index:d}:r.allow_free_text?{kind:"free",target:c,text:a}:{kind:"invalid",target:c,message:`question ${c+1} takes an option \u2014 type 1-${r.options.length} or an option name`}}function Y(i){let t=i.text.replace(/\?+\s*$/,"");return t.length<=36?t:`${t.slice(0,33)}\u2026`}function ie(i){return i.use_cases??[]}function se(i){let t=[],k=[],c=(r,h)=>{h.length!==0&&(k.push(r),t.push(...h))},a=r=>typeof r=="string"&&/^[a-z]{1,4}\d{1,4}$/i.test(r)?r:null,m=r=>{let h=a(r.automates)??"1 scenario",d=r.verifies??[],u=d.map(a).filter(y=>y!==null).slice(0,2),_=d.length-u.length,C=u.length?`${u.join(" ")}${_>0?` +${_}`:""}`:`${d.length} ACs`;return`covers ${h} \xB7 verifies ${C}`};return c("acs",(i.acs??[]).map(r=>({temp_ref:r.temp_ref,title:r.text,kind:"ac",badge:String(r.kind),extra:{...r.expected_answer?{expects:`${String(r.expected_answer.operator??"")} \xB7 ${String(r.expected_answer.operand??"")}`}:{},"scoped to":r.scoped_to??"(use-case)"}}))),c("scenarios",(i.scenarios??[]).map(r=>({temp_ref:r.temp_ref,title:r.title,kind:"scenario",badge:r.case_type,why:r.intent,depends_on_hint:r.depends_on??[],extra:{technique:r.technique_notes}}))),c("tests",(i.tests??[]).map(r=>({temp_ref:r.temp_ref,title:r.title,kind:"test",why:m(r),depends_on_hint:r.reuses??[],extra:{automates:String(r.automates??"?"),verifies:(r.verifies??[]).join(", "),check:r.check?`${String(r.check.kind)} vs ${String(r.check.verified_against)}`:"?"}}))),c("gaps",(i.gaps??[]).map(r=>({temp_ref:r.temp_ref??r.ref??"?",title:String(r.question?.header??r.kind),kind:"gap",badge:r.kind,why:r.risk_rationale}))),{items:t,heading:k.join(" + ")||"design"}}function ge(i={}){let t={turns:[],thinking:V(),pending:null,confirm:null,status:"idle",ledger:[],activeTurn:null,stream:null},k=e=>{let n=[],o=e.minted.map(p=>p.slug).filter(Boolean);o.length&&n.push(`added ${o.join(", ")}`);let s=e.applied.length-e.minted.length;return s>0&&n.push(`${s} change${s===1?"":"s"} applied`),e.staleDelta.length&&n.push(`stales ${e.staleDelta.length}`),n.join(" \xB7 ")||"no changes"},c=[];i.onRender&&c.push(i.onRender);let a=0,m=0,r=null,h=null,d=null,u=[],_=0,C=e=>{if(!(!d||!i.contextDir||!e.trim()))try{let n=i.refreshGraph?.()??i.graph;if(!n)return;F({contextDir:i.contextDir,graph:n,sourceId:d,text:e,by:i.by??{kind:"human",id:"owner"}})}catch{}},y=e=>{if(!d||!i.contextDir)return;let n=i.refreshGraph?.()??i.graph,o=n?.heads.get(d),s=n?.convChains.get(d);if(!n||typeof o!="string"||!s)return;let p=n.getNode(o)?.content?.blob,f=typeof p=="string"?z(i.contextDir,p)?.toString("utf8")??"":"";if(f)for(let v of e){if(v.kind!=="add"||v.convSourceId!==d)continue;let T=L(f,v.cite.turn);if(!(T!==null&&T.includes(v.cite.quote)))for(let $=s.turns;$>=1;$--){let D=L(f,$);if(D!==null&&D.includes(v.cite.quote)){v.cite={...v.cite,turn:$};break}}}},M=null,j=new Map,P=new Map,E=null,x=()=>{R&&(clearTimeout(R),R=null);for(let e of c)e()},R=null,N=()=>{R||(R=setTimeout(()=>{R=null;for(let e of c)e()},80))},l=e=>{t.ledger.push(e)},I=()=>{t.activeTurn&&(t.activeTurn=null)},Q=(e,n)=>n.choice||(n.selected_index!=null?e.options[n.selected_index]?.label??"?":"?"),B=()=>{let e=t.pending;if(!e)return;if(!e.resolution.every(Boolean)){e.cursor=e.resolution.findIndex(s=>s===null);return}let n=e.questions.map((s,p)=>{let f=e.resolution[p];return f.form==="deferred"?{id:s.id,selected_index:null,free_text:null}:f.free_text!=null?{id:s.id,selected_index:null,free_text:f.free_text}:{id:s.id,selected_index:f.selected_index,free_text:null}});t.pending=null,t.status=t.status==="pausing"?"pausing":"streaming";let o=M;M=null,o?.(n)},A=(e,n)=>{let o=t.pending,s=o.questions[e],p=o.resolution[e];o.resolution[e]=n;let f=Y(s);p?l({kind:"answer",receipt:{form:"changed",qNum:e+1,stub:f,choice:Q(s,n),prev:p.choice}}):n.form==="deferred"?l({kind:"answer",receipt:{form:"deferred",qNum:e+1,stub:f}}):l({kind:"answer",receipt:{form:n.form,qNum:e+1,stub:f,choice:Q(s,n)}})},O=()=>{let e=t.pending;e&&(e.questions.forEach((n,o)=>{e.resolution[o]||A(o,{form:"deferred",selected_index:null,free_text:null,choice:""})}),B())},G=e=>({questions:e,cursor:0,resolution:e.map(()=>null)}),Z=e=>{let n=t.pending;t.notice=void 0;let o=re(e,n);switch(o.kind){case"invalid":t.notice=o.message;return;case"defaults":{let s=!1;if(n.questions.forEach((p,f)=>{if(!n.resolution[f]){if(p.risk==="high"){s=!0;return}A(f,{form:"assumed",selected_index:p.recommended_index,free_text:null,choice:p.options[p.recommended_index]?.label??"?"})}}),s){n.cursor=n.questions.findIndex((p,f)=>!n.resolution[f]),t.notice="high-risk questions need an explicit answer (or type 'defer' to leave them with the agent)";return}break}case"defer-all":O();return;case"option":{let s=n.questions[o.target];A(o.target,{form:"answered",selected_index:o.index,free_text:null,choice:s.options[o.index]?.label??String(o.index+1)});break}case"free":A(o.target,{form:"answered",selected_index:null,free_text:o.text,choice:o.text});break;case"multi":{let s=n.questions[o.target],p=o.indices[0];A(o.target,{form:"answered",selected_index:p,free_text:null,choice:s.options[p]?.label??String(p+1)}),t.notice="multi-select not yet supported end-to-end \u2014 sent your first choice";break}}B()};return{state:t,explainRef(e){if(!i.explain||!i.graph||i.contextDir===void 0){l({kind:"note",text:"explain isn't available here"}),x();return}let n=i.explain(i.contextDir,i.graph,e),o=n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(s=>` [${s.kind}] ${s.rationale??s.detail}`)].join(`
|
|
3
|
-
`):`unknown ref: ${e}`;l({kind:"note",text:o}),x()},subscribe(e){return c.push(e),()=>{let n=c.indexOf(e);n>=0&&c.splice(n,1)}},submit(e){if(t.confirm&&(t.confirm=null),t.pending){Z(e),x();return}if(!r){t.turns.push({role:"user",text:e}),l({kind:"user",text:e}),t.notice="the agent isn't running \u2014 nothing sent",x();return}for(t.notice=void 0,t.turns.push({role:"user",text:e}),l({kind:"user",text:e}),C(e),t.status="streaming",t.error=void 0,m+=1;u.length>0;)m+=1,r({type:"user_message",message_id:`u${m}-receipt`,text:u.shift()});r({type:"user_message",message_id:`u${m}`,text:e}),x()},attachSender(e){r=e},attachOnCommitted(e){h=e},attachConversationSource(e){d=e},holdReceipt(e){u.push(e),l({kind:"note",text:e}),x()},drainHeldReceipts(){return u.splice(0,u.length)},note(e){l({kind:"note",text:e}),x()},registerAliases(e){for(let n of e)P.set(n.ref,n.cid)},setWorking(e){if(e!=null){if(t.status!=="idle"&&t.status!=="working")return;t.status="working",t.workingLabel=e}else{if(t.status!=="working")return;t.status="idle",t.workingLabel=void 0}x()},ledger(e){(e.kind==="pause"||e.kind==="error"||e.kind==="summary")&&I(),(e.kind==="summary"||e.kind==="pause")&&(t.stream=null),l(e),x()},completeSession(){O(),r?.({type:"session_complete"}),t.status="idle",x()},requestPause(){O(),t.status="pausing";let e=r;Promise.resolve().then(()=>e?.({type:"pause"})),x()},ask(e){return t.pending=G(e),j=new Map(e.map((n,o)=>[n.id,o+1])),t.status="awaiting-input",x(),new Promise(n=>{M=n})},noteCoercion(e,n){l({kind:"answer",receipt:{form:"assumed",qNum:j.get(e.id)??0,stub:Y(e),choice:n,note:"your typed answer couldn't be used here"}}),x()},onAgentEvent(e){switch(e.type){case"reasoning_delta":case"reasoning_done":case"tool_activity":case"decision_activity":{let n=t.thinking;if(t.thinking=K(n,e),t.thinking!==n){if(e.type==="reasoning_done"&&e.present)l({kind:"thinking",tookMs:e.took_ms});else if(e.type==="tool_activity"&&e.status!=="started")l({kind:"tool",name:e.name,status:e.status==="done"?"ok":e.status,detail:e.detail});else if(e.type==="decision_activity"){let o=`\xB7 ${J(e)}`,s=t.ledger[t.ledger.length-1];s&&s.kind==="note"&&s.text===o||l({kind:"note",text:o})}}if(e.type==="reasoning_delta"){N();return}break}case"usage":t.credits={turn:e.credits,total:e.total_credits},l({kind:"usage",credits:e.credits,total:e.total_credits});break;case"text_delta":{let n=E;if(n&&(e.turn_id<n.turn_id||e.turn_id===n.turn_id&&e.attempt<n.attempt))return;(!n||n.turn_id!==e.turn_id||n.attempt!==e.attempt)&&(E={turn_id:e.turn_id,attempt:e.attempt},t.stream={text:""}),t.stream={text:(t.stream?.text??"")+e.text},N();return}case"progress":break;case"proposal":{a+=1,I(),t.stream=null;let n=ie(e.proposal),o=i.dedupFlags?.(e.proposal);if(o)for(let s of n){let p=o.get(s.temp_ref);p&&(s.matches_existing=p)}t.turns.push({role:"agent",turnIndex:a,items:n,text:e.narrative}),e.narrative&&l({kind:"agent",text:e.narrative}),t.activeTurn={turnIndex:a,heading:"use-cases",items:n},l({kind:"turn",turnIndex:a,heading:"use-cases",items:n}),(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"design":{a+=1,I(),t.stream=null;let{items:n,heading:o}=se(e.design);l({kind:"banner",text:`phase: ${o}`}),t.turns.push({role:"agent",turnIndex:a,items:n,itemsHeading:o,text:e.narrative}),e.narrative&&l({kind:"agent",text:e.narrative}),t.activeTurn={turnIndex:a,heading:o,items:n},l({kind:"turn",turnIndex:a,heading:o,items:n}),(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"ask_user":t.pending=G(e.questions),t.status="awaiting-input";break;case"chat_ops":{a+=1,I(),t.stream=null,t.status==="streaming"&&(t.status="idle");let n=e.chat_ops??e,o=Array.isArray(n.ops)?n.ops:[],s=n.text??e.text??"",p=i.refreshGraph?.()??i.graph,f=g=>P.get(g)??g,v=o.map(g=>{if(!g.target)return g;let b=f(g.target),w=g.expected_cid;if(w==null&&p){let U=p.resolve(b);U&&(w=p.tipOf(U.cid))}let q=g.payload?.redirect_to,S=q&&f(q);return b===g.target&&w===g.expected_cid&&S===q?g:{...g,target:b,expected_cid:w,...S!==q?{payload:{...g.payload,redirect_to:S}}:{}}}),T;try{if(!Array.isArray(n.ops))throw new Error("the agent sent an unreadable change set (no ops array) \u2014 say it again in different words");T=X(v,i.descriptor??{mint_gate:[]},{turn:a,...d?{convSourceId:d}:{}})}catch(g){t.error=g instanceof Error?g.message:String(g),t.turns.push({role:"agent",turnIndex:a,text:s,narration:t.error}),s&&l({kind:"agent",text:s}),l({kind:"error",title:t.error,detail:[]});break}let{chatOps:$,ambiguous:D}=T;if(D.length>0){let g=D[0];t.confirm={kind:"ambiguity-confirm",prompt:`did you mean edit or ${g.kinds.filter(b=>b!=="edit").join("/")} on ${g.target}?`},t.turns.push({role:"agent",turnIndex:a,text:s}),s&&l({kind:"agent",text:s});break}if(s&&l({kind:"agent",text:s}),y($),i.commitChatTurn&&$.length>0){let g=i.commitChatTurn({contextDir:i.contextDir??"",graph:i.refreshGraph?.()??i.graph,ops:$,by:i.by??{kind:"human",id:"owner"},...i.descriptor?.mint_gate?{mintable:i.descriptor.mint_gate}:{}});if(g.errors)t.error=g.errors.map(b=>b.detail).join("; "),t.turns.push({role:"agent",turnIndex:a,text:s}),l({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:g.errors.map(b=>`${b.code}: ${b.detail}`)});else{g.applied.length>0&&i.session?.markApplied(g.applied);let b=k(g);t.turns.push({role:"agent",turnIndex:a,text:s,narration:b}),l({kind:"commit",ok:!0,line:`committed: ${b}`});let w=i.refreshGraph?.();if(w&&h&&h(w),w)try{_+=1;let W=i.descriptor?.mint_gate?.includes("usecase")?"extract":"design",q=H({verb:W,commitN:_,phase:"chat",committed:g.minted.map(S=>({cid:S.cid,...S.slug?{logical_id:S.slug}:{}}))},w);u.push(q.text),l({kind:"note",text:q.text})}catch{}}}else t.turns.push({role:"agent",turnIndex:a,text:s});C(s);break}case"done":case"session_complete":I(),t.status="idle",r=null;break;case"error":I(),t.stream=null,t.status="idle",t.error=e.message,r=null,l({kind:"error",title:e.message,detail:[]});break;case"session_paused":break;default:break}x()}}}export{ge as makeChatController,re as parseAnswerInput,Y as questionStub};
|
package/dist/chunk-DM2GL24Z.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 f(t,e,n){for(let[a,c]of t.names)if(c===e&&!t.superseded.has(c))return a;return String(n.title??n.text??e)}function v(t,e){let n=g(t,"scenario");if(e){let i=t.resolve(e);if(i){let s=new Set([i.cid,i.tip,t.tipOf(i.cid)]);n=n.filter(({cid:o})=>t.edgesFrom(o).some(d=>d.type==="belongs_to"&&(s.has(d.dst)||s.has(t.tipOf(d.dst)))))}}let a=new Set;for(let{cid:i}of n)a.add(i),a.add(t.tipOf(i));let c=g(t,"test").filter(({cid:i})=>!e||t.edgesFrom(i).some(s=>s.type==="automates"&&(a.has(s.dst)||a.has(t.tipOf(s.dst))))),r=new Set;for(let i of c)for(let s of t.edgesFrom(i.cid))s.type==="automates"&&r.add(t.tipOf(s.dst));let m=n.filter(({cid:i})=>!r.has(i)&&!r.has(t.tipOf(i))).map(({cid:i,content:s})=>f(t,i,s));return{live_scenarios:n.length,live_tests:c.length,missing:m}}function l(t){return t.length<=12?t.join(", "):`${t.slice(0,12).join(", ")} +${t.length-12} more`}function b(t,e){let n=t.committed.length===0?"committed: nothing new":`committed: ${l(t.committed.map(o=>o.temp_ref?`${o.temp_ref} \u2192 ${o.logical_id??o.cid}`:o.logical_id??o.cid))}`,a=[];t.reused&&a.push(`reused: ${t.reused}`),t.rejected?.length&&a.push(`rejected: ${l(t.rejected.map(o=>`${o.ref} (${o.reason})`))}`),t.warnings?.length&&a.push(`warnings: ${l(t.warnings)}`);let c=[`RECEIPT (commit ${t.commitN}, ${t.phase})`,n,...a],r,m;if(t.verb==="design")r=v(e,t.ucRef),c.push(`parity: ${r.live_scenarios} scenario(s) live \xB7 ${r.live_tests} test(s) live`+(r.missing.length?` \xB7 missing tests: ${l(r.missing)}`:"")),m=r.missing.length>0?`next: emit tests for the ${r.missing.length} scenario(s) listed \u2014 1:1, strict. Never re-emit committed items; reference them by the ids above.`:"next: every live scenario has a test. Address open gaps, or finish.";else{let o=g(e,"usecase").length;c.push(`parity: ${o} use-case(s) live`),m="next: refine via chat ops using the ids above. Never re-emit committed items."}c.push(m);let i=c.join(`
|
|
3
|
-
`);for(;Buffer.byteLength(i,"utf8")>6e3;)i=i.slice(0,Math.floor(i.length*.9))+"\u2026";let s={type:"receipt",verb:t.verb,commit_n:t.commitN,phase:t.phase,committed:t.committed,reused:t.reused??0,rejected:t.rejected??[],warnings:t.warnings??[],...r?{parity:{live_scenarios:r.live_scenarios,live_tests:r.live_tests,missing:r.missing}}:{},next:m};return{text:i,event:s}}function A(){return{currentAttempt:null,liveThinking:"",thinkingLog:[],activity:[]}}var p={dedup_candidate:"checking a possible duplicate",ambiguity:"asking to resolve an ambiguity",validation_repair:"repairing a validation failure",finalize:"finalizing the proposal"};function h(t){return p[t.reason_code]??t.reason_code.replace(/_/g," ")}function y(t){let e=u({name:t.name});return t.status==="started"?`\u2192 ${e}\u2026`:t.status==="error"||t.status==="aborted"?`\u2717 ${e}`:`\u2713 ${e}`}function _(t,e){return e.turn_id!==t.turn_id?e.turn_id<t.turn_id:e.attempt<t.attempt}function x(t,e){let n=t.currentAttempt;if(n===null||n.turn_id!==e.turn_id||n.attempt!==e.attempt){if(n!==null&&_(n,e))return t;t={...t,currentAttempt:{turn_id:e.turn_id,attempt:e.attempt},liveThinking:""}}switch(e.type){case"reasoning_delta":return{...t,liveThinking:t.liveThinking+e.text};case"reasoning_done":return e.present?{...t,thinkingLog:[...t.thinkingLog,{text:t.liveThinking,tookMs:e.took_ms}],liveThinking:""}:{...t,liveThinking:""};case"tool_activity":return{...t,activity:[...t.activity,{name:e.name,status:e.status,label:y(e)}]};case"decision_activity":return{...t,activity:[...t.activity,{name:e.action,status:"decision",label:h(e)}]}}}export{b as a,A as b,h as c,x as d};
|
package/dist/chunk-HW7Z5S2M.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as Ie,f as Te,g as Ue}from"./chunk-WM5QHLAP.js";import{b as Me,f as Fe,g as je,h as Be}from"./chunk-FXPPQL4D.js";import{a as Ce}from"./chunk-DM2GL24Z.js";import{a as Oe,b as Pe}from"./chunk-JFAFKHDX.js";import{e as L,f as re}from"./chunk-FTD3B7QA.js";import{c as Ee}from"./chunk-VJUIW2ES.js";import{b as Ae}from"./chunk-YKTYVJBN.js";import{a as Ne}from"./chunk-Z56AWGVY.js";import{a as ee,d as te}from"./chunk-KHDUQ33H.js";import{a as E}from"./chunk-D5T4ARTB.js";import{b as Re}from"./chunk-B2PZAB7J.js";import{d as j}from"./chunk-IACKIGPX.js";import{appendFileSync as Qe,mkdirSync as fe,writeFileSync as ge}from"fs";import{extname as Ze,join as A}from"path";var O=class extends Error{code;constructor(e,c){super(`${e}: ${c}`),this.name="ProposalAdapterError",this.code=e}};function Ge(s){return s.version===2}function He(s,e){if(s.read_basis.length!==1)throw new O("READ_BASIS_COUNT",`read_basis must have exactly 1 element, got ${s.read_basis.length}`);let c=s.read_basis[0],h=s.use_cases.map(i=>{if(i.cite.length!==1)throw new O("CITE_COUNT",`${i.temp_ref}: cite must have exactly 1 element, got ${i.cite.length}`);let l=i.cite[0];if(l.source_id!==c.source_id)throw new O("SOURCE_MISMATCH",`${i.temp_ref}: cite source ${l.source_id} != read_basis source ${c.source_id} (single-source)`);return{temp_ref:i.temp_ref,title:i.title,...i.description!==void 0?{description:i.description}:{},...i.summary!==void 0?{summary:i.summary}:{},...i.actors!==void 0?{actors:i.actors}:{},...i.value!==void 0?{value:i.value}:{},risk:i.risk,cite:{anchor:l.anchor,quote:l.quote},...i.criteria!=null&&i.criteria.length>0?{criteria:i.criteria.map((d,p)=>{if(d.cite.source_id!==c.source_id)throw new O("SOURCE_MISMATCH",`${i.temp_ref}.criteria[${p}]: cite source ${d.cite.source_id} != read_basis source ${c.source_id} (single-source)`);return{text:d.text,cite:{anchor:d.cite.anchor,quote:d.cite.quote}}})}:{},depends_on_hint:i.depends_on_hint,matches_existing:i.matches_existing,...i.conflicts_with!=null?{conflicts_with:i.conflicts_with}:{},...i.changed?{changed:!0}:{},...i.updated!=null?{updated:i.updated}:{}}});return{version:1,read_basis:e,source:{source_id:c.source_id,source_cid:c.source_cid},use_cases:h}}function qe(s){let{contextDir:e,graph:c}=s,h=s.maxDigestBytes??4096,i={},l=[];for(let[u,m]of c.heads){if(i[u]=m,typeof m!="string")continue;let _=c.mediaOf(m),w=c.getNode(m)?.content?.blob;if(typeof w=="string")if(_.format==="image")l.push({source_id:u,cid:m,format:"image",blobRef:{path:ee(e,w),cid:w}});else{let n=te(e,w)?.toString("utf8")??"";l.push({source_id:u,cid:m,format:_.format,text:n})}}l.sort((u,m)=>u.source_id<m.source_id?-1:1);let d=[];for(let u of c.byLabel(j.STYLENOTE).sort((m,_)=>m.cid<_.cid?-1:1))c.superseded.has(u.cid)||d.push(`\u2022 ${String(u.content.statement)} [${String(u.content.learned_from_kind)}]`);let p="";for(let u of d){if(Buffer.byteLength(p+u+`
|
|
3
|
-
`,"utf8")>h)break;p+=u+`
|
|
4
|
-
`}return{read_basis:i,sources:l,styleNoteDigest:p}}function Le(s,e){let c=qe({contextDir:s,graph:e}).styleNoteDigest;return c.length>0?c:void 0}function et(s){return s.length>8&&s[0]===137&&s[1]===80&&s[2]===78&&s[3]===71?"image/png":s.length>3&&s[0]===255&&s[1]===216&&s[2]===255?"image/jpeg":s.length>12&&s.toString("ascii",0,4)==="RIFF"&&s.toString("ascii",8,12)==="WEBP"?"image/webp":null}function tt(s){return s.toString("utf8").replace(/\n$/,"").split(`
|
|
5
|
-
`).map((c,h)=>`${String(h+1).padStart(4,"0")}| ${c}`).join(`
|
|
6
|
-
`)}function We(s){return s.toISOString().replace(/[-:]/g,"").slice(0,15)}function rt(s){return s.startsWith("su-conv-")?`conv-${Re(Buffer.from(s,"utf8")).slice(0,8)}`:s}function W(s){return s.toLowerCase().trim().replace(/\s+/g," ")}function ze(s,e){let c=new Map,h=new Map,i=new Map;for(let{cid:d,content:p}of e.byLabel(j.USECASE)){if(e.superseded.has(d))continue;(e.trust.get(d)==="archived"?i:h).set(W(String(p.title??"")),d)}let l=d=>e.trust.get(d)==="archived"?{cid:d,archived:!0,reason:e.archivedReason.get(d)}:{cid:d};for(let d of s.use_cases){if(d.matches_existing){let m=d.matches_existing.cid;if(e.superseded.has(m)){let _=e.tipOf(m);m=e.superseded.has(_)?null:_}if(m!==null){c.set(d.temp_ref,l(m));continue}}let p=h.get(W(d.title));if(p){c.set(d.temp_ref,{cid:p});continue}let u=i.get(W(d.title));u&&c.set(d.temp_ref,l(u))}return c}var Ve=/^(\S+)\.criteria\[(\d+)\]/;function st(s,e,c){if(e.length===0||!e.every(i=>Ve.test(i.detail)))return!1;let h=new Map;for(let i of e){let l=Ve.exec(i.detail),d=h.get(l[1])??new Set;d.add(Number(l[2])),h.set(l[1],d)}for(let i of s.use_cases){let l=h.get(i.temp_ref);l?.size&&(i.criteria=(i.criteria??[]).filter((d,p)=>!l.has(p)),c(`${i.temp_ref}: dropped ${l.size} criteria with unverifiable cites \u2014 committed without them (criteria are hints, not oracles)`))}return!0}async function Je(s,e,c,h,i=()=>{},l){let d=(p,u)=>i(p,u,s.session_id);return Te(s,e,c,h,i,{async onProposalEvent(p){let u=p,m=null,_=null;if(Ge(u))try{m=He(u,s.read_basis),d("adapter",{ok:!0,use_cases:m.use_cases.length})}catch(w){_=w instanceof O?w.message:String(w),d("adapter",{ok:!1,error:_})}else m=u;return m&&m.use_cases.length===0&&e.out("warning: the agent proposed ZERO use-cases for this source"),m&&l&&await l(m),{proposal:m,error:_}}})}var ot=new Set(["agent","ci","override"]);async function It(s,e){let c=s.mode??"interactive";if(c==="interactive"){if(!e.isTTY)return e.out("extract: --mode interactive needs a TTY (use --mode agent|ci|override headless)"),2}else if(!ot.has(c))return e.out(`extract: unknown mode "${c}" \u2014 interactive | agent | ci | override`),2;let h=We(e.now?.()??new Date),i=A(e.contextDir,"logs");fe(i,{recursive:!0});let l=A(i,`extract-${h}.log`),d=`run-${h}-${Math.random().toString(36).slice(2,8)}`,p=t=>t==="error"||t==="failed_proposal"?"error":t==="repair_respawn"?"warn":"info",u=(t,a,x)=>{try{Qe(l,JSON.stringify({ts:new Date().toISOString(),level:p(t),run_id:d,...x?{session_id:x}:{},kind:t,data:a})+`
|
|
7
|
-
`)}catch{}};e.out(`trace: ${l}`),e.emit?.({type:"run_start",mode:c,trace:l});let m=Ae();if(m&&e.out(m),e.preflightTurn){let t=await e.preflightTurn();if(u("preflight",t),!t.ok)return e.out(t.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:t.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),2}let _=E(e.contextDir),w=Le(e.contextDir,_);if(s.source){if(s.resume){let a="error: --source cannot be combined with --resume (the resumed session already has its scope)";return e.out(a),e.emit?.({type:"error",message:a,code:"SOURCE_WITH_RESUME"}),2}let t=_.heads.get(s.source);if(typeof t!="string"){let a=t===null?`error: --source ${s.source} was ingested but is retired \u2014 re-ingest it to extract again`:`error: --source ${s.source} is not an ingested source (kane-cli context list shows them)`;return e.out(a),e.emit?.({type:"error",message:a,code:"SOURCE_UNKNOWN"}),2}}let n=null;if(s.resume){try{n=Be(e.contextDir,s.resume,_)}catch(a){return e.out(`error: ${a instanceof Error?a.message:String(a)}`),e.emit?.({type:"error",message:`error: ${a instanceof Error?a.message:String(a)}`}),1}n.staleBasis.length>0&&e.out(`note: changed since the pause: ${n.staleBasis.join(", ")} \u2014 re-presented items may be stale`);let t=n.handle.state.held_receipts??[];if(t.length>0)if(e.chat?.holdReceipt)for(let a of t)e.chat.holdReceipt(a);else e={...e,initialMessage:[t.join(`
|
|
8
|
-
|
|
9
|
-
`),e.initialMessage].filter(Boolean).join(`
|
|
10
|
-
|
|
11
|
-
`)};n.handle.state.assumed.length>0&&e.out(`note: ${n.handle.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${s.resume} lists them`)}let pe=_.extractedSourceCids,z=!!(s.force||n?.handle.state.force),$=[],I=[];for(let[t,a]of _.heads.entries())if(a!=null&&!(s.source&&t!==s.source)){if(!s.source&&!n&&t.startsWith("su-conv-")){e.out(`skipped: ${t} \u2014 conversation source (extract it explicitly with --source ${t})`),I.push({source_id:t,reason:"conversation"});continue}if(n){let x=t in n.handle.state.read_basis,P=n.handle.state.corpus_cursor.remaining.includes(t);if(!x&&!P)continue;if(P&&!z&&pe.has(a)){e.out(`cached: ${t} @ ${a.slice(0,19)} already extracted \u2014 skipping`),I.push({source_id:t,reason:"cached"});continue}}else if(!z&&pe.has(a)){e.out(`cached: ${t} @ ${a.slice(0,19)} already extracted \u2014 skipping`),I.push({source_id:t,reason:"cached"});continue}$.push({source_id:t,cid:a})}if(e.emit?.({type:"corpus",sources:$,skipped:I}),$.length===0){if(n){let x=`error: resumed session's paused source (${Object.keys(n.handle.state.read_basis).join(", ")||"unknown"}) is no longer in the corpus \u2014 restore/re-ingest it and re-run --resume ${s.resume}, or discard with: kane-cli context sessions clean ${s.resume}`;return e.out(x),e.emit?.({type:"error",message:x,code:"SOURCE_MISSING"}),n.handle.release(),2}let t=I.length>0&&I.every(a=>a.reason==="conversation");return e.out(s.source?`extract: nothing to do \u2014 ${s.source} is already extracted at its current snapshot (--force to re-run)`:t?"extract: nothing to do \u2014 only conversation sources here (extract one explicitly with --source <id>)":"extract: nothing to do \u2014 every ingested source is already extracted"),0}let V=new Map;if(n&&n.questions.length>0&&!s.message){e.out(`re-presenting ${n.questions.length} unanswered question(s) from the paused session`);let t=await e.ask(n.questions.map(Fe));for(let a of t)V.set(a.id,a)}let B=e.by??{kind:"human",id:"owner"},T=c==="interactive"&&!s.plan&&!!e.chat,he=0,_e=0;try{for(let t of $){let a=E(e.contextDir),x={current:a};e.chat?.attachOnCommitted?.(r=>{x.current=r});let P=a.getNode(t.cid),U=String(P?.content.blob??""),se=te(e.contextDir,U);if(!se)return e.out(`error: ${t.source_id}: blob ${U} missing from .context/blobs`),e.emit?.({type:"error",source_id:t.source_id,message:`error: ${t.source_id}: blob ${U} missing from .context/blobs`,code:"BLOB_MISSING"}),1;let xe=a.mediaOf(t.cid),oe=xe.media_type.startsWith("image/");if(!oe){let r=et(se);if(r){e.out(`skipping ${t.source_id}: binary ${r} ingested before image support \u2014 re-ingest it (kane-cli context ingest) to extract from it`),e.emit?.({type:"source_skipped",source_id:t.source_id,reason:"binary_pre_media"});continue}}let G=oe?`0001| (image source ${t.source_id} \u2014 the content is attached as an image; cite it with anchor img#whole)`:tt(se),ye=We(e.now?.()??new Date),M=`${ye}-${t.source_id}`,ve=!!(n&&t.source_id in n.handle.state.read_basis)?s.resume:`ext-${ye}-${rt(t.source_id)}`,N="";if(T){let r=Ee({contextDir:e.contextDir,graph:E(e.contextDir),sessionStamp:ve,by:B});r.errors===null||r.errors[0]?.code==="CONV_SOURCE_EXISTS"?(N=r.sourceId,e.chat.attachConversationSource?.(N),x.current=E(e.contextDir)):e.out(`warning: conversation source unavailable (${r.errors[0]?.detail}) \u2014 chat adds will not land this session`)}let b={type:"run_config",version:1,session_id:ve,mode:c,source:{source_id:t.source_id,source_cid:t.cid,kind:Ze(t.source_id)||"md",numbered_text:G},existing_use_cases:a.byLabel(j.USECASE).filter(({cid:r})=>a.trust.get(r)!=="archived"&&!a.superseded.has(r)).map(({cid:r,content:o})=>({id:r,title:String(o.title??""),summary:String(o.summary??"")})),read_basis:x.current.latestHash,max_free_text_rounds:Ie,graph_reads:!0,verb:"extract",...w!==void 0?{style_note_digest:w}:{},topology:Ne(),...T?{chat:!0}:{},...oe?{image_sources:[{source_id:t.source_id,source_cid:t.cid,media_type:xe.media_type,blob_ref:{path:ee(e.contextDir,U),cid:U}}]}:{},...n&&t.source_id in n.handle.state.read_basis?{resume:{agent_state:n.handle.state.agent_state}}:{}};e.out(n&&t.source_id in n.handle.state.read_basis?`resuming: ${t.source_id} (session ${s.resume})`:`extracting: ${t.source_id} @ ${t.cid.slice(0,19)}`),e.emit?.({type:"source_start",source_id:t.source_id,cid:t.cid,index:$.indexOf(t)+1,total:$.length,resumed:!!(n&&t.source_id in n.handle.state.read_basis)}),e.chat?.ledger?.({kind:"banner",text:`source ${$.indexOf(t)+1}/${$.length} \xB7 ${t.source_id} @ ${t.cid.slice(0,19)}`}),e.chat?.setWorking?.(`extracting ${t.source_id}\u2026`);let $e=new Map;u("spawn",{source_id:t.source_id,source_cid:t.cid,resume:!!n,chat:T},b.session_id);let be=!1,Xe=async r=>{let o=L(r,G,E(e.contextDir));if(u("kane_validate",{errors:o.map(g=>g.code)},b.session_id),o.length>0){e.chat.submit("[auto-repair] the proposal failed validation: "+o.map(g=>`${g.code}: ${g.detail}`).join("; ")+" \u2014 please re-finalize with these fixed.");return}let y=E(e.contextDir),k=ze(r,y),Y=A(e.contextDir,"proposals",M);fe(Y,{recursive:!0}),ge(A(Y,"proposal.json"),JSON.stringify(r,null,2)+`
|
|
12
|
-
`);let Ke=new Map(r.use_cases.map(g=>[g.temp_ref,{resolution:"skipped"}])),K=re({contextDir:e.contextDir,graph:y,proposal:r,proposalId:M,verdicts:Ke,by:{kind:"ai",id:"extract-agent"},autoName:!0});if(K.errors){e.chat.ledger?.({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:K.errors.map(g=>`${g.code}: ${g.detail}`)});return}be=!0;let Q=K.record.nodes.length;he+=Q;let Z=r.use_cases.length-Q;{let g=E(e.contextDir),we=new Map;for(let{cid:v,content:R}of g.byLabel(j.USECASE))g.superseded.has(v)||we.set(W(String(R.title??"")),v);let me=[];for(let v of r.use_cases){let R=null;if(v.matches_existing?.cid&&g.hasNode(v.matches_existing.cid)){let q=g.tipOf(v.matches_existing.cid);R=g.superseded.has(q)?null:q}R=R??we.get(W(v.title))??null,R&&me.push({ref:v.temp_ref,cid:R})}me.length>0&&e.chat.registerAliases?.(me),x.current=g;let De=v=>{for(let[R,q]of g.names)if(q===v&&!g.superseded.has(q))return R},ke=Ce({verb:"extract",commitN:1,phase:"proposal",committed:K.record.nodes.map(v=>({cid:v.cid,...De(v.cid)?{logical_id:De(v.cid)}:{}})),reused:Z},g);e.emit?.(ke.event),e.chat.holdReceipt?.(ke.text)}u("commit",{derived:Q,evidence_matched:Z,chat:!0},b.session_id),e.chat.ledger?.({kind:"commit",ok:!0,line:`committed: ${Q} new use-case(s) as derived`+(Z>0?` \xB7 ${Z} matched existing (evidence attached, no duplicate)`:"")}),e.chat.note('chat to refine ("looks good" approves; "done" finishes)')},Se=!!(n&&t.source_id in n.handle.state.read_basis),J=Se&&V.size>0?{...e,ask:async r=>r.every(o=>V.has(o.id))?(n.handle.markApplied(r.map(o=>`resolveq:${s.resume}:${o.id}`)),e.out(`answered ${r.length} re-asked question(s) from the held resume answers`),r.map(o=>V.get(o.id))):e.ask(r)}:e;Se&&s.message&&(J={...J,initialMessage:s.message});let f=await Je(b,{...J,graphSlot:x},$e,a,u,T?Xe:void 0);if(e.chat?.setWorking?.(null),f.error)return e.out(`error: agent failed for ${t.source_id}: ${f.error}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: agent failed for ${t.source_id}: ${f.error}`}),1;if(f.highRisk)return e.out(`error: ${f.highRisk.length} high-risk decision${f.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),e.emit?.({type:"error",source_id:t.source_id,message:`error: high-risk question(s) in ci mode (fail-closed): ${f.highRisk.map(r=>r.id).join(", ")}`,code:"HIGH_RISK_CI"}),1;if(f.paused){let r=$.slice($.indexOf(t)+1).map(Y=>Y.source_id),o=n?.handle??Me(e.contextDir,{sid:b.session_id,mode:"agent",created_at:(e.now?.()??new Date).toISOString(),expires_at:new Date((e.now?.()??new Date).getTime()+1440*60*1e3).toISOString(),agent_state:f.paused.agent_state,pending:{questions:[],proposals:[]},assumed:[],read_basis:{[t.source_id]:t.cid},corpus_cursor:{remaining:r},conv_source:N,verb:"extract",...z?{force:!0}:{}});N&&o.state.conv_source!==N&&o.save({conv_source:N});let y=e.chat?.drainHeldReceipts?.()??[];(y.length>0||(o.state.held_receipts?.length??0)>0)&&o.save({held_receipts:y}),n?.handle&&o.save({read_basis:{[t.source_id]:t.cid},corpus_cursor:{remaining:r},...z&&!o.state.force?{force:!0}:{}}),je(o,f.paused),u("session_paused",{sid:o.state.sid},b.session_id);let k=`kane-cli context extract --resume ${o.state.sid} --mode ${c}`;return e.out(`paused: session ${o.state.sid} saved \u2014 resume with: ${k}`),e.emit?.({type:"session_paused",sid:o.state.sid,source_id:t.source_id,mode:c,resume:k,expires_at:o.state.expires_at,pending_questions:f.paused.pending.questions}),e.chat?.ledger?.({kind:"pause",sid:o.state.sid,expires_at:o.state.expires_at,resume:k,messageForm:`${k} --message "<your words>"`}),3}if(T){if(_e+=f.assumedDefaults??0,f.error)return 1;if(!be){let r=$.length-$.indexOf(t)-1;return e.out(`done \u2014 nothing committed for ${t.source_id} (no finalize before the session ended)`+(r>0?`; stopping here \u2014 ${r} remaining source(s) not extracted (re-run kane-cli context extract to continue)`:"")),n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),n=null),0}n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),n=null);continue}if(!f.proposal)return e.out(`error: agent ended without a proposal for ${t.source_id}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: agent ended without a proposal for ${t.source_id}`}),1;let D=L(f.proposal,G,a);if(u("kane_validate",{errors:D.map(r=>r.code)},b.session_id),D.length>0&&st(f.proposal,D,r=>e.out(r))&&(u("criteria_dropped",{source_id:t.source_id},b.session_id),D=L(f.proposal,G,a)),D.length>0){if(e.out("the agent's proposal didn't validate \u2014 retrying once"),e.emit?.({type:"validate_failed",source_id:t.source_id,codes:D.map(r=>r.code),repairing:!0}),u("repair_respawn",{source_id:t.source_id},b.session_id),f=await Je(b,{...J,graphSlot:x},$e,a,u),f.error||!f.proposal)return e.out(`error: repair run failed for ${t.source_id}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: repair run failed for ${t.source_id}`}),1;if(D=L(f.proposal,G,a),D.length>0){for(let r of D)e.out(` ${r.detail}`);return e.emit?.({type:"validate_failed",source_id:t.source_id,codes:D.map(r=>r.code),repairing:!1}),e.emit?.({type:"error",source_id:t.source_id,message:`error: proposal failed validation after repair (${D.map(r=>r.code).join(", ")})`}),1}}let S=f.proposal,X=ze(S,a),ie=A(e.contextDir,"proposals",M);if(fe(ie,{recursive:!0}),ge(A(ie,"proposal.json"),JSON.stringify(S,null,2)+`
|
|
13
|
-
`),s.plan){e.out(`plan: ${S.use_cases.length} use-case(s) proposed from ${t.source_id} (nothing committed)`);for(let r of S.use_cases){let o=X.get(r.temp_ref),y=o?o.archived?` \u2248 matches ARCHIVED ${o.cid.slice(0,19)}${o.reason?` \u2014 previously rejected: "${o.reason}"`:" \u2014 previously rejected"}`:` \u2248 matches ${o.cid.slice(0,19)}`:"";e.out(` [${r.risk}] ${r.title} \u2014 cite ${r.cite.anchor}${y}`)}e.emit?.({type:"plan",source_id:t.source_id,use_cases:S.use_cases.map(r=>{let o=X.get(r.temp_ref);return{risk:r.risk,title:r.title,anchor:r.cite.anchor,...o?{match:o.cid,match_archived:!!o.archived}:{}}})}),f.assumedDefaults&&e.out(`assumed: ${f.assumedDefaults} default(s) auto-taken (flagged)`);continue}for(let r of S.use_cases){if(!r.conflicts_with?.length)continue;let o=r.conflicts_with.filter(k=>a.resolve(k)!==null),y=r.conflicts_with.filter(k=>a.resolve(k)===null);y.length>0&&(e.out(`note: ${r.temp_ref}: dropped unresolvable conflict hint(s): ${y.join(", ")}`),r.conflicts_with=o.length>0?o:void 0)}u("review_start",{use_cases:S.use_cases.length,flags:X.size},b.session_id);let H=await e.review(S.use_cases,X);u("review_verdicts",[...H.entries()].map(([r,o])=>({ref:r,resolution:o.resolution})),b.session_id),ge(A(ie,"review.json"),JSON.stringify(S.use_cases.map(r=>{let o=H.get(r.temp_ref)??{resolution:"skipped"};return{id:r.temp_ref,kind:"review-item",resolution:o.resolution,edit:o.edit??null,reason:o.reason??null,...o.supersedeTarget?{supersede_target:o.supersedeTarget}:{},by:B}}),null,2)+`
|
|
14
|
-
`);let ne=a,C=re({contextDir:e.contextDir,graph:ne,proposal:S,proposalId:M,verdicts:H,by:B,autoName:!0});if(C.errors&&C.errors[0]?.code==="STALE_BASIS"){if(!await e.confirmStale(`the context changed while you reviewed (${C.errors[0].detail}) \u2014 commit against the new head anyway?`))return e.out("aborted: proposal not committed"),e.emit?.({type:"error",source_id:t.source_id,message:"aborted: proposal not committed",code:"STALE_BASIS"}),e.emit?.({type:"done",status:"aborted",exit_code:1}),1;ne=E(e.contextDir),C=re({contextDir:e.contextDir,graph:ne,proposal:S,proposalId:M,verdicts:H,by:B,allowStaleBasis:!0,autoName:!0})}if(C.errors){for(let r of C.errors)e.out(` ${r.detail}`);return e.emit?.({type:"error",source_id:t.source_id,message:`error: commit failed: ${C.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}`}),1}let Ye=new Date().toISOString();for(let r of S.use_cases){let o=H.get(r.temp_ref)??{resolution:"skipped"};for(let y of Pe({ts:Ye,command:"context extract",id:r.temp_ref,by:B},o.resolution))Oe(e.contextDir,y)}let F=C.record,ae=new Map(F.review.map(r=>[r.id,r.resolution])),ce=[...ae.values()].filter(r=>r==="approved"||r==="edited").length,ue=[...ae.values()].filter(r=>r==="rejected").length,de=F.nodes.filter(r=>!ae.has(r.cid)).length,le=F.supersessions.filter(r=>r.kind==="node"&&r.new!==r.old).length;u("commit",{trusted:ce,derived:de,archived:ue},b.session_id),e.out(`committed: ${ce} trusted, ${de} derived (queued), ${ue} archived`+(le>0?`, ${le} superseded`:"")),f.assumedDefaults&&e.out(`assumed: ${f.assumedDefaults} default(s) auto-taken (flagged)`),e.emit?.({type:"commit",source_id:t.source_id,proposal_id:M,trusted:ce,derived:de,archived:ue,superseded:le,assumed:f.assumedDefaults??0,evidence_matched:Math.max(0,S.use_cases.length-F.nodes.length),minted:F.nodes.map(r=>{let o=F.names?.find(y=>y.cid===r.cid)?.slug;return{cid:r.cid,...o?{logical_id:o}:{}}})}),n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),e.out(`session ${s.resume} complete`),e.emit?.({type:"session_complete",sid:s.resume,source_id:t.source_id}),n=null)}}finally{n?.handle.release()}if(T){let t=e.chat?.state.ledger.filter(P=>P.kind==="answer"&&P.receipt.form==="assumed").length??0,a=_e+t,x=e.chat?.state.credits?.total;e.chat?.ledger?.({kind:"summary",lines:[`committed ${he} across ${$.length} source(s)`,...a>0?[`${a} assumed default(s)`]:[],...x!==void 0?[`credits used: ${x.toFixed(1)}`]:[],`trace: ${l}`]})}return s.plan||Ue(e.contextDir),0}export{rt as a,ze as b,It as c};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-DEYHK6ZC.js";import"./chunk-4G4HPMR2.js";import"./chunk-RFHMDQXZ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-YIOWO6WS.js";import"./chunk-L4AUCQVO.js";import"./chunk-QIE62H3J.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
|
package/dist/run-V2WMNHFK.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as b,b as c,c as d}from"./chunk-HW7Z5S2M.js";import{e as a}from"./chunk-WM5QHLAP.js";import"./chunk-I2S6KNZW.js";import"./chunk-FXPPQL4D.js";import"./chunk-DM2GL24Z.js";import"./chunk-6PS65QFF.js";import"./chunk-JFAFKHDX.js";import"./chunk-FTD3B7QA.js";import"./chunk-QPZRHAYK.js";import"./chunk-VJUIW2ES.js";import"./chunk-YKTYVJBN.js";import"./chunk-Z56AWGVY.js";import"./chunk-427OQS2N.js";import"./chunk-KHDUQ33H.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-QIE62H3J.js";import"./chunk-UR6MHSHU.js";export{c as dedupPreFlags,a as resolveAnswers,d as runExtract,b as sessionSourceRef};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as a}from"./chunk-TJRBV2V2.js";import"./chunk-3MSXQU2C.js";import"./chunk-LZKUF23A.js";import"./chunk-XN7PPLFS.js";import"./chunk-KGFISJFM.js";import"./chunk-4PIMEZJW.js";import"./chunk-GIGD4M7V.js";import"./chunk-S6GRW5ZA.js";import"./chunk-D5DEWIAU.js";import"./chunk-OZODSY6H.js";import"./chunk-2YQ6TW77.js";import"./chunk-Q6TVDG3X.js";import"./chunk-LMJTY32X.js";import"./chunk-RKWJG3WW.js";import"./chunk-VL2UA23Z.js";import"./chunk-LV5VRSPI.js";import"./chunk-2U5DZUC7.js";import"./chunk-DCYTRYR2.js";import"./chunk-44QUA6GV.js";import"./chunk-IDDVO4UV.js";import"./chunk-EK2B2LZK.js";import"./chunk-N62EM6JX.js";import"./chunk-M6DX4ENH.js";import"./chunk-5Y2G4NC7.js";import"./chunk-GN3SZXZ5.js";import"./chunk-52VLJKIN.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-35SRW4KA.js";import"./chunk-DEYHK6ZC.js";import"./chunk-4G4HPMR2.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-K2MKBBI4.js";import"./chunk-RFHMDQXZ.js";import"./chunk-YSK535OI.js";import"./chunk-FYOCF7DY.js";import"./chunk-RGEAEAZB.js";import"./chunk-BC7UVJJB.js";import"./chunk-KHDUQ33H.js";import"./chunk-NFOBDHZK.js";import"./chunk-L5LI2JF4.js";import"./chunk-D5T4ARTB.js";import"./chunk-AE6SS34N.js";import"./chunk-GIRXJOJI.js";import"./chunk-B2PZAB7J.js";import"./chunk-IACKIGPX.js";import"./chunk-BKGJGPDN.js";import"./chunk-MHQ6A2QZ.js";import"./chunk-FU3OQXFH.js";import"./chunk-YCCUBQY4.js";import"./chunk-U3JB76QP.js";import"./chunk-M5JQXOCE.js";import"./chunk-HR7AGYV2.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-YIOWO6WS.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import"./chunk-L4AUCQVO.js";import"./chunk-PJSCM6JX.js";import"./chunk-OZM4UU5F.js";import{a as o}from"./chunk-DFS4RMVP.js";import"./chunk-Z4K4AYEI.js";import"./chunk-KRFGAVYU.js";import"./chunk-QIE62H3J.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-35SRW4KA.js";import"./chunk-4G4HPMR2.js";import"./chunk-RZ4F3BHX.js";import"./chunk-YIOWO6WS.js";import"./chunk-QIE62H3J.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};
|