@hlix/cli 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import{Me,te,R,ne,u,re,j,B}from"./index-2b2mh91d.js";import{t}from"./index-nv1fntbt.js";import{v,P}from"./index-sn0bes3n.js";import{Container as Le,Editor as Ye,HStack as De,MouseRegion as Oe,ProcessTerminal as $e,ScrollView as Re,SelectList as N,TuiAltScreen as _e,TuiMainScreen as Pe,VStack as je,isViewportTUI as de,matchesKey as V,truncateToWidth as Ae,visibleWidth as Te,getCapabilities as et}from"@earendil-works/pi-tui";import{HStack as Xe,Image as We,getCapabilities as Je}from"@earendil-works/pi-tui";var Be="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",Ge=[" ▗██ "," ▄▖ ▗▖"," ▄▛▜▄ "," ▜▙▄▀ ","▗▀▘▀▚ "],ye=[["█ █ █ ","█ █"],["█ █ █ "," █ █ "],["████ █ "," █ "],["█ █ █ "," █ █ "],["█ █ ████","█ █"]],Ne=["| | | . \\ /","| | | /===\\ \\ / ","|--| | \\===/ X ","| | | /===\\ / \\ ","| | |___ \\===/ / \\"];function ke(e,o=!1,c=!1){if(o)return{render:()=>Ne.map((b)=>e.brand(b)),invalidate(){}};let i={render:()=>ye.map(([b])=>e.brand(b)),invalidate(){}},l={render:()=>ye.map(([,b])=>e.alert(b)),invalidate(){}},d=c&&Je().images?new We(Be,"image/png",{fallbackColor:e.brand},{maxWidthCells:4,maxHeightCells:5,filename:"hlix-dna.png"}):{render:()=>Ge.map((b,w)=>(w<2?e.alert:e.brand)(b)),invalidate(){}};return new Xe([{component:i,basis:12,shrink:0},{component:d,basis:6,shrink:0},{component:l,basis:7,shrink:0}])}import{fuzzyFilter as Ze}from"@earendil-works/pi-tui";var xe=new Map([["help",{description:"Show cloud commands"}],["project",{description:"Switch cloud project context"}],["import",{description:"Import a local folder into a new cloud project"}],["github",{description:"Link this cloud project to its intended GitHub repository"}],["cycles",{description:"Choose a project session"}],["focus",{description:"Switch the session receiving your messages"}],["launch",{description:"Start a cycle with a selected harness"}],["skills",{description:"Choose an available project skill"}],["steer",{description:"Interrupt and send guidance now"}],["force",{description:"Interrupt and send this message next"}],["interrupt",{description:"Interrupt the active turn; keep queued messages"}],["stop",{description:"Stop this session, or /stop project for all work"}],["quit",{description:"Disconnect; cloud work continues"}],["exit",{description:"Disconnect; cloud work continues"}]]),ze=/^[a-z0-9-]+$/,M=(e)=>t(e).replace(/\s+/g," ").trim();function le(e){let o=new Set(xe.keys());return(e.skills??[]).filter((c)=>{if(c.slug.length>100||!ze.test(c.slug)||o.has(c.slug))return!1;return o.add(c.slug),!0})}var ie=(e,o)=>Ze(e,o,(c)=>`${c.label} ${c.value}`);function ce(e){let o=new Map(xe);for(let c of le(e))o.set(c.slug,{description:`Skill · ${M(c.name)}${c.description?` — ${M(c.description)}`:""}`});return Me(o).map((c)=>{if(c.name==="launch")return{...c,argumentHint:"<harness> <brief>",getArgumentCompletions:(i)=>ie(v.map((l)=>({value:`${l} `,label:l})),i)};if(c.name==="focus")return{...c,argumentHint:"<cycle-id|leader>",getArgumentCompletions:(i)=>ie([{value:"leader",label:"Project manager"},...(e.board?.cycles??[]).map((l)=>({value:l.id,label:M(l.title)}))],i)};if(c.name==="skills")return{...c,getArgumentCompletions:(i)=>ie(le(e).map((l)=>({value:l.slug,label:M(l.name),description:M(l.description)})),i)};return c})}function ae(e){let o=process.cwd(),c=new te([],o);return{triggerCharacters:["/"],shouldTriggerFileCompletion:()=>!1,getSuggestions:(i,l,d,b)=>{let w=(i[l]??"").slice(0,d);if(b.signal.aborted||!/^\/[a-z0-9:-]*(?:[ \t]+[a-z0-9:-]*)?$/i.test(w))return Promise.resolve(null);return new te(ce(e),o).getSuggestions(i,l,d,{...b,force:!1})},applyCompletion:c.applyCompletion.bind(c)}}function we(e,o){let c=/^\/([a-z0-9-]+)(?:\s+([\s\S]*))?$/.exec(o.trim());if(!c||!le(e).some((l)=>l.slug===c[1]))return null;let i=c[2]?.trim();return`Use the ${c[1]} skill for this request.${i?`
3
+
4
+ ${i}`:""}`}import{resolve as tt}from"node:path";var ue=(e)=>e==="claude-code"?"Claude Code":e==="codex"?"Codex":e==="hlix"?"Hlix":e?t(e):"Awaiting run",S=(e,o)=>Ae(t(e),Math.max(1,o)),fe=new Set(["done","pr_created","failed","canceled"]),He=(e)=>`${e.status==="failed"?"Failed":e.status==="canceled"?"Canceled":fe.has(e.status)?"Finished":e.activeRun?ue(e.activeRun.harness):"Awaiting run"} · ${t(e.stage)}`,st=(e)=>e.board?.cycles.filter((o)=>o.activeRun&&!fe.has(o.status)).length??0,pe=(e,o)=>(o?"-":"─").repeat(Math.max(1,e));class me{model;colors;ascii;compact;brand;constructor(e,o,c=!1,i=!1,l=!1){this.model=e;this.colors=o;this.ascii=c;this.compact=i;this.brand=ke(o,c,l)}render(e){let o=this.model.board?.project.name??this.model.projectId,c=this.model.server??"Server not identified",i=this.ascii?"*":"●",l=this.model.connection==="Connected"?this.colors.brand:this.model.connection==="Disconnected"?this.colors.alert:this.colors.muted,d=this.model.board?`${st(this.model)} running${this.ascii?" / ":" · "}${this.model.board.cycles.length} cycles`:"Loading cycles",b=(r)=>Ae(`${l(i)} ${this.colors.user(t(this.model.connection))} ${this.colors.muted(d)}`,Math.max(1,r));if(this.compact||e<66)return[this.colors.brand(S(`HLIX ${o}`,e)),this.colors.muted(S(c,e)),b(e)];let w=[this.colors.user(S(o,e-28)),this.colors.muted(S(`Server ${c}`,e-28)),b(e-28)];return this.brand.render(26).map((r,L)=>` ${r}${" ".repeat(Math.max(1,27-Te(r)))}${w[L]??""}`)}invalidate(){}}class Ee extends Le{model;colors;ascii;select;regions=new Map;constructor(e,o,c,i){super();this.model=e;this.colors=o;this.ascii=c;this.select=i}render(e){let o=["leader",...(this.model.board?.cycles??[]).map((i)=>`cycle:${i.id}`)],c=new Set(o);for(let i of this.regions.keys())if(!c.has(i))this.regions.delete(i);if(this.children=[{render:(i)=>[this.colors.muted(S(`CYCLES ${this.model.board?.cycles.length??""}`,i)),this.colors.muted(pe(i,this.ascii)),""],invalidate(){}},...o.map((i)=>{let l=this.regions.get(i);if(!l)l=new Oe({render:(d)=>this.row(i,d),invalidate(){}},(d)=>{if(d.type!=="click"||d.button!=="left")return;return this.select?.(i),{handled:!0}}),this.regions.set(i,l);return l})],!this.model.board?.cycles.length)this.children.push({render:(i)=>[this.colors.muted(S(this.model.boardStatus==="error"?"Cycles unavailable":this.model.board?"No cycles yet":"Loading cycles…",i))],invalidate(){}});return super.render(e)}row(e,o){let c=this.model.selected===e,i=e==="leader"?void 0:this.model.board?.cycles.find((m)=>`cycle:${m.id}`===e),l=!i?"":i.status==="failed"?"!":i.status==="canceled"?"-":fe.has(i.status)?this.ascii?"+":"✓":i.activeRun?this.ascii?"*":"●":this.ascii?".":"◌",d=`${l?`${l} `:""}${this.model.title(e)}`,b=i?He(i):this.model.session("leader").busy?"Responding":"Conversation";if(!c)return[this.colors.user(S(` ${d}`,o)),this.colors.muted(S(` ${b}`,o)),""];let w=Math.max(1,o-4),r=this.ascii?"|":"│",L=(m)=>{let C=S(m,w);return C+" ".repeat(Math.max(0,w-Te(C)))};return[this.colors.muted(`${this.ascii?"+":"╭"} `)+this.colors.brand(L(d))+this.colors.muted(` ${this.ascii?"+":"╮"}`),this.colors.muted(`${r} ${L(b)} ${r}`),this.colors.muted(`${this.ascii?"+":"╰"}${pe(o-2,this.ascii)}${this.ascii?"+":"╯"}`)]}}class Fe{model;colors;constructor(e,o){this.model=e;this.colors=o}render(e){let o=Math.max(1,Math.min(e-4,88)),c=this.model.session().entries,i=this.model.session().busy?[this.colors.muted(S(`${this.model.title()} is working…`,o))]:[];if(!c.length&&i.length)return["",...i].map((l)=>` ${l}`);if(!c.length&&this.model.selected!=="leader")return["",this.colors.user(S("Waiting for cycle output",o)),this.colors.muted(S(this.model.title(),o)),"",this.colors.muted(S("New messages and tool activity will appear here.",o))].map((l)=>` ${l}`);if(!c.length)return["",this.colors.user(S("Start with the project manager",o)),this.colors.muted(S("Describe the work, ask a question, or open a cycle's conversation.",o)),"",this.colors.brand(S("/launch <harness> <brief>",o)),this.colors.muted(S("Start work with your chosen harness.",o)),"",this.colors.brand(S("Ctrl+P Switch session",o)),this.colors.muted(S("Follow a cycle while the rest of your team keeps working.",o))].map((l)=>` ${l}`);return[...c.flatMap((l)=>[...l.kind==="assistant"||l.kind==="user"?[(l.kind==="user"?this.colors.brand:this.colors.muted)(S(`${l.title??(l.kind==="user"?"You":this.model.title())}${l.delivery==="canceled"?" · canceled":l.delivery==="queued"?" · queued":l.delivery==="pending"?" · delivering…":l.delivery==="failed"?" · delivery failed":""}`,o))]:[],...B(l,{width:o,colors:this.colors}),""]),...i].map((l)=>` ${l}`)}invalidate(){}}class he extends De{transcript;constructor(e,o,c=!1,i){let l=new Re(new Fe(e,o),{follow:"end",primary:!0,scrollbarTrackStyle:o.muted,scrollbarThumbStyle:o.brand}),d={render:(b)=>[o.user(S(` ${e.title()}`,b)),o.muted(pe(b,c))],invalidate(){}};super([{component:new Re(new Ee(e,o,c,i)),basis:32,shrink:0,visible:(b)=>b.width>=110},{component:new je([{component:d,shrink:0},{component:l,grow:1,minSize:1}]),basis:"auto",grow:1,shrink:1,minSize:1}],{gap:3});this.transcript=l}}function ot(e,o){return o.HLIX_TUI==="classic"||o.TERM==="dumb"?new Pe(e):new _e(e,!1,void 0,{mouse:o.HLIX_TUI_MOUSE!=="0"})}async function Ct(e,o={}){if(o.signal?.aborted)return;let c=o.env??process.env,i=ne(R(c)),l=c.TERM==="dumb"||c.NO_COLOR!==void 0&&c.NO_COLOR!=="",d=o.tui??ot(new $e,c),b=et().images,w=!l&&(b==="kitty"||b==="iterm2"&&d instanceof Pe),r=e.model,L=new he(r,i,l,(n)=>D(n)),m=new Ye(d,{...re(i),borderColor:i.brand},{paddingX:1});m.setAutocompleteProvider(ae(r)),m.setAutocompleteMaxVisible(3);let C=new Le,k=!1,U=new Map,q=new Map,Z=new Map,H=(n=r.selected,s=r.projectId)=>`${s}:${n}`,_=new Map([[e.projectId,e]]),ge=new Map,z=new AbortController,W,ee=(n)=>{let s=ge.get(n);if(!s)s=n.close(),ge.set(n,s);return s},Y=()=>{},F=o.initialHarness,h=()=>{if(!k)d.requestRender()},A=()=>{C.clear(),d.setFocus(m),h()},E=(n)=>e.fail(n),D=(n)=>{let s=r.selected;q.set(H(s),m.getText());let a=e;if(m.isShowingAutocomplete())m.handleInput("\x1B");A();let p=e.focus(n);if(r.selected===n){if(m.setText(q.get(H(n))??""),r.notice=Z.get(H(n))??"",s!==n)F=void 0}p.then(()=>{if(e===a&&r.selected===n)L.transcript.scrollToEnd(),h()}).catch((f)=>{if(e===a)E(f)})},ve=()=>{if(m.isShowingAutocomplete())m.handleInput("\x1B");let n=[{value:"leader",label:"Project manager"},...(r.board?.cycles??[]).map((a)=>({value:`cycle:${a.id}`,label:t(a.title),description:He(a)}))],s=new N(n,3,u(i));s.onSelect=(a)=>D(a.value),s.onCancel=A,C.clear(),C.addChild(s),d.setFocus(s),h()},be=()=>{if(m.isShowingAutocomplete())m.handleInput("\x1B");let n=new N(v.map((s)=>({value:s,label:ue(s),description:"Launch a new cloud cycle"})),3,u(i));n.onSelect=(s)=>{A(),m.setText(`/launch ${s.value} `),h()},n.onCancel=A,C.clear(),C.addChild(n),d.setFocus(n),h()},Ie=async()=>{let n=e;if(r.skillsStatus==="loading"){r.notice="Loading project skills…",h();return}if(r.skillsStatus==="error"){r.notice="Project skills are unavailable. Reconnect to try again.",h();return}let s=await ce(r).find((p)=>p.name==="skills")?.getArgumentCompletions?.("");if(k||e!==n)return;if(!s?.length){r.notice="No skills are available for this project yet.",h();return}let a=new N(s,3,u(i));a.onSelect=(p)=>{A(),m.setText(`/${p.value} `),h()},a.onCancel=A,C.clear(),C.addChild(a),d.setFocus(a),h()},Se=async(n)=>{if(n===e.projectId){A();return}let s=e;q.set(H(),m.getText()),Y(),ee(s);let a=_.get(n);if(a)await ee(a);if(k||e!==s)return;e=a?a.reconnect():new P(s.client,n),_.set(n,e),r=e.model,r.notice=Z.get(H())??"",L=new he(r,i,l,(f)=>D(f)),F=void 0,m.setText(q.get(H())??""),m.setAutocompleteProvider(ae(r)),Y=e.subscribe(h),A(),Ce(),h();let p=e;p.start().catch((f)=>{if(e===p)E(f)})},Ue=async()=>{let n=e;r.notice="Loading projects…",h();let s=AbortSignal.any([z.signal,...o.signal?[o.signal]:[],AbortSignal.timeout(1e4)]),a=await n.client.projects.list({signal:s});if(k||e!==n)return;if(r.notice="",!a.length){r.notice="No projects are available.",h();return}let p=new N(a.map((f)=>({value:f.id,label:t(f.name),description:f.id===r.projectId?"Current project":void 0})),3,u(i));p.setSelectedIndex(Math.max(0,a.findIndex((f)=>f.id===r.projectId))),p.onSelect=(f)=>{Se(f.value).catch((y)=>{if(!k)E(y)})},p.onCancel=A,C.clear(),C.addChild(p),d.setFocus(p),h()},qe=async(n)=>{if(W){r.notice="An import is already running.",h();return}let s=new AbortController;W=s;let a=AbortSignal.any([s.signal,z.signal]),p=Date.now(),f=j({name:"import",output:"Discovering local project…",index:Date.now(),state:"running"});f.expanded=!0,r.session().entries.push(f);let y=(T)=>{if(f.text=t(`${f.text}
5
+ ${T}`).slice(-64000),f.command)f.command.elapsedMs=Date.now()-p;L.transcript.scrollToEnd(),h()};m.setText(""),h();try{let[{runCli:T},{importProject:I}]=await Promise.all([import("./cli-cy5xk6z6.js"),import("./import-cpywf45x.js")]),O=o.cwd??process.cwd(),J=tt(O,n||"."),G=await T([I],["import",J,"--cwd",O,"--history","sanitize"],{env:{...c,HLIX_BASE_URL:e.client.origin},signal:a,stdout:y,stderr:y,confirm:(g)=>new Promise((x)=>{y(g);let Q=(oe)=>{a.removeEventListener("abort",K),A(),x(oe)},K=()=>Q(!1);if(a.addEventListener("abort",K,{once:!0}),a.aborted){K();return}let X=new N([{value:"approve",label:"Import project",description:"Upload this snapshot; keep local Git history unchanged"},{value:"cancel",label:"Cancel"}],2,u(i));X.onSelect=(oe)=>Q(oe.value==="approve"),X.onCancel=K,C.clear(),C.addChild(X),d.setFocus(X),h()})});if(f.command={state:G?"failed":"done",elapsedMs:Date.now()-p,exitCode:G},f.error=G!==0,!G&&!a.aborted){let{loadProjectFile:g,configFromProjectFile:x}=await import("./hlix-file-7kwe2ppc.js"),Q=x(g(J).base)?.projectId;if(Q)await Se(Q)}}catch(T){f.command={state:"failed",elapsedMs:0},f.error=!0,y(T instanceof Error?T.message:String(T))}finally{W=void 0,h()}},se=(n,s=!1)=>{let a=e,p=r.selected;if(!s)m.setText("");r.notice=n==="interrupt"?"Interrupting response…":"Stopping work…",h(),(n==="project"?a.stopProject():a.interrupt(n==="stop")).then((y)=>{if(!k&&e===a&&r.selected===p)r.notice=t(y),h()}).catch((y)=>{if(!k&&e===a&&r.selected===p)E(y)})};m.onSubmit=(n)=>{let s=n.trim();if(!s)return;if(s==="/quit"||s==="/exit"){d.stop();return}if(s==="/interrupt"){se("interrupt");return}if(s==="/stop"||s==="/stop project"){se(s==="/stop project"?"project":"stop");return}if(s==="/cycles"||s==="/focus"){m.setText(""),ve();return}if(s==="/launch"){m.setText(""),be();return}if(s==="/project"){let g=e;m.setText(""),Ue().catch((x)=>{if(!k&&e===g)E(x)});return}if(s==="/skills"){m.setText(""),Ie().catch(E);return}if(/^\/import(?:\s|$)/.test(s)){qe(s.slice(7).trim().replace(/^(["'])(.*)\1$/,"$2"));return}if(/^\/github(?:\s|$)/.test(s)){let g=s.slice(7).trim();if(!g){r.notice="Use /github owner/name to link the intended GitHub repository.",h();return}let x=e;m.setText(""),r.notice=`Linking GitHub ${t(g)}…`,h(),import("./github-link-zjx3855h.js").then(async({linkGithubRepository:Q,githubLinkMessage:K})=>{let X=await Q(x.client,x.projectId,g,AbortSignal.any([z.signal,AbortSignal.timeout(30000)]));if(e===x)r.notice=K(X),h()}).catch(E);return}if(s==="/help"){m.setText(""),r.notice="/project switch project · /import [folder] import local project · /cycles choose a session · /launch <harness> <brief> · /skills choose a skill · /interrupt response · /stop work · /steer <message> redirect · Ctrl+O tool details · /quit disconnect",h();return}if(s.startsWith("/focus ")){m.setText("");let g=s.slice(7).trim();D(g==="leader"?"leader":`cycle:${g.replace(/^cycle:/,"")}`);return}let a=r.selected,p=H(a),f=e,y=F,T="queue",I=s;if(s.startsWith("/launch ")){let[,g,...x]=s.split(/\s+/);if(!v.includes(g)||!x.length){r.notice="Use /launch <harness> <brief>, or /launch to choose a harness.",h();return}y=g,I=x.join(" ")}else if(/^\/(steer|force)(?:\s|$)/.test(s)){if(I=s.replace(/^\/(steer|force)\s*/,""),!I){r.notice="Use /steer <message> to interrupt and redirect the active response.",h();return}T="interrupt"}else if(s.startsWith("/")){let g=we(r,s.startsWith("/skills ")?`/${s.slice(8).trim()}`:s);if(!g){r.notice="Unknown command. Use /help.",h();return}I=g}let O=F;F=void 0,m.setText(""),q.delete(p),Z.delete(p),U.set(p,(U.get(p)??0)+1);let J=y?"Starting cycle…":"Delivering message…";r.notice=J,h(),(y?f.launch(y,I):f.send(I,T)).then(()=>{if(!k&&e===f&&r.selected===a){if(r.notice===J)r.notice="";L.transcript.scrollToEnd()}}).catch((g)=>{if(Z.set(p,t(g instanceof Error?g.message:String(g))),!k&&e===f&&r.selected===a){if(!m.getText())m.setText(n),F=O;E(g)}else if(!q.get(p))q.set(p,n)}).finally(()=>{let g=(U.get(p)??1)-1;if(g)U.set(p,g);else U.delete(p);h()})};let Qe={render:(n)=>[i.brand(S(F?`Launch ${ue(F)} · describe the work`:`${r.session().busy?"Working · ":"Message "}${r.title()}${U.has(H())?` · ${U.get(H())} delivering`:""}`,n))],invalidate(){}},Ve={render:(n)=>{let s=n<48?"^C disconnect · ^P sessions":n<90?"Enter send · ^P sessions · ^N launch · ^C disconnect":"Enter send Ctrl+P sessions Ctrl+N launch Ctrl+O details Ctrl+C disconnect";return[...r.notice?[i.user(S(r.notice,n))]:[],i.muted(S(r.session().busy?n<48?"Esc interrupt ^C disconnect":"Enter queue · Esc interrupt · ^C disconnect":s,n))]},invalidate(){}},Ce=()=>{let n=new je([{component:new me(r,i,l,!1,w),shrink:0,visible:(s)=>s.height>=24},{component:new me(r,i,l,!0),shrink:0,visible:(s)=>s.height<24},{component:L,basis:"auto",grow:1,shrink:1,minSize:0},{component:C,shrink:0,maxSize:4},{component:Qe,shrink:0},{component:m,shrink:1,minSize:3,maxSize:de(d)?8:void 0,visible:()=>!m.isShowingAutocomplete()},{component:m,shrink:0,maxSize:de(d)?8:void 0,visible:()=>m.isShowingAutocomplete()},{component:Ve,shrink:0}]);if(de(d))d.setLayoutRoot(n);else d.clear(),d.addChild(n);d.setFocus(m)};Ce();let Ke=d.addInputListener((n)=>{if(V(n,"ctrl+c")||V(n,"ctrl+d")&&!m.getText())return d.stop(),{consume:!0};if(V(n,"escape")&&W)return W.abort(),r.notice="Import cancellation requested.",h(),{consume:!0};if(V(n,"escape")&&r.session().busy&&!m.isShowingAutocomplete()&&!C.children.length)return se("interrupt",!0),{consume:!0};if(V(n,"ctrl+p"))return ve(),{consume:!0};if(V(n,"ctrl+n"))return be(),{consume:!0};if(V(n,"ctrl+o")){let s=r.session().entries.filter((p)=>p.kind==="tool"||p.kind==="command"),a=s.some((p)=>!p.expanded);for(let p of s)p.expanded=a;return h(),{consume:!0}}return});Y=e.subscribe(h),await new Promise((n)=>{let s=d.stop.bind(d),a=()=>d.stop();d.stop=(f)=>{if(k)return;k=!0,o.signal?.removeEventListener("abort",a),z.abort(),Ke(),Y(),s(f),Promise.allSettled([..._.values()].map(ee)).then(()=>n())},o.signal?.addEventListener("abort",a,{once:!0}),d.start();let p=e;p.start().catch((f)=>{if(!k&&e===p)E(f)})})}export{Ct as runCloudApp};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{e,ke,r,m}from"./index-nv1fntbt.js";export{e as CliError,r as clientFor,ke as errorCode,m as runCli};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{Be,Ge}from"./index-nv1fntbt.js";export{Ge as githubLinkMessage,Be as linkGithubRepository};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{p,N,Fe,He,ie,ae,ce,le,Ue,de,W,ue}from"./index-nv1fntbt.js";export{ue as addWrittenFile,Fe as adoptLegacyProjectConfig,Ue as committedProjectPath,N as configFromProjectFile,de as discoveredProjectFile,ie as ensureLocalGitignore,p as loadProjectFile,He as projectFileLabel,W as starterFromEnvironment,ce as updateCommittedProjectFile,ae as writeProjectFileIfMissing,le as writeProjectIdentity};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{We}from"./index-nv1fntbt.js";export{We as importProject};
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env node
2
+ import{c,Se,se,x,S,t,i,Ee}from"./index-nv1fntbt.js";import{convert as Er,dinero as Ir,halfEven as Vt,toDecimal as kr,toSnapshot as wr,transformScale as zt}from"dinero.js/bigint";var Rr=["usd","eur","gbp","egp","jpy"],qt=6n;function vt(e){return typeof e==="string"&&Rr.includes(e)}function Tr(e){let n=e?.toLowerCase();return vt(n)?n:"usd"}function Y(e){return Math.round(e*1e6)}var Wt=new Map;function At(e){let n=e.toUpperCase(),r=Wt.get(n);if(r)return r;let{maximumFractionDigits:o}=new Intl.NumberFormat("en",{style:"currency",currency:n}).resolvedOptions(),s={code:n,base:10n,exponent:BigInt(o??2)};return Wt.set(n,s),s}function Pr(e,n){if(!Number.isSafeInteger(e))throw RangeError(`micros must be a safe integer, got ${e}`);return Ir({amount:BigInt(e),currency:At(n),scale:qt})}function Or(e){let[n,r=""]=e.toFixed(12).replace(/0+$/,"").split(".");return{amount:BigInt(n+r),scale:BigInt(r.length)}}function Mr(e,n,r){let o=e==="usd"?1:r[e],s=n==="usd"?1:r[n];if(!o||!s||o<=0||s<=0)return null;return s/o}function Dr(e,n,r,o){if(n.toLowerCase()===r.toLowerCase())return e;if(!vt(n.toLowerCase())||!vt(r.toLowerCase()))return null;let s=Mr(n.toLowerCase(),r.toLowerCase(),o);if(s===null)return null;let a=At(r);return Er(e,a,{[a.code]:Or(s)})}function Nr(e){return Number(At(e).exponent)}function D(e,n="usd",{locale:r,displayCurrency:o,rates:s={},fractionDigits:a,symbol:l}={}){if(e==null||!Number.isFinite(e))return"—";let h=(n||"usd").toUpperCase(),g=o?Tr(o).toUpperCase():h,p=Pr(Math.round(e),h),y=Dr(p,h,g,s),k=y===null?h:g,M=y??p,G=Nr(k),K=wr(zt(M,qt,Vt)).amount,J=K<0n?-K:K,ce=a??(K!==0n&&J<10n**BigInt(6-G)?G+2:G),ze=kr(zt(M,BigInt(ce),Vt)),We=new Intl.NumberFormat(r,{style:"currency",currency:k,minimumFractionDigits:ce,maximumFractionDigits:ce});return l?We.formatToParts(ze).map((Ge)=>Ge.type==="currency"?l:Ge.value).join(""):We.format(ze)}import{accessSync as jr,constants as Lr,statSync as Br}from"node:fs";import{delimiter as Ur,join as Fr}from"node:path";import{createACPTool as Gr}from"@mastra/acp";import{createTool as $r}from"@mastra/core/tools";import{z as Ce}from"zod";var _e=Object.fromEntries(S.map(({id:e,displayName:n,execution:r})=>[e,{harness:e,label:n,command:r.command,args:[...r.args],authEnvVars:[...r.auth.envVars],..."env"in r?{env:r.env}:{},install:r.install}])),F=Object.fromEntries(S.filter((e)=>!("localOnly"in e)).map((e)=>[e.id,_e[e.id]]));function Qe(e){if(e.flag)return{harness:Hr(e.flag,"--harness"),source:"flag"};if(e.configured)return{harness:e.configured,source:e.configSource??"project"};return{harness:Ee,source:"default"}}function Hr(e,n){if(i.includes(e))return e;throw Error(`${n} must be one of ${i.join(", ")}; got "${e}".`)}var _t="hlix_tasks_follow",Kr=(e)=>`hlix_coder_${e.split("-").join("_")}`;function Pe(e){if(e.source==="default")return String(e.harness);let n=e.source==="flag"?"--harness":e.source;return`${e.harness} (${n})`}function T(e,n=process.env){return Ct(e,n)!==null}function Ct(e,n=process.env){if(!e)return null;if(e.includes("/"))return Yt(e)?e:null;let r=(n.PATH??"").split(Ur).filter(Boolean);for(let o of r){let s=Fr(o,e);if(Yt(s))return s}return null}function Yt(e){if(!e)return!1;try{if(!Br(e).isFile())return!1;return jr(e,Lr.X_OK),!0}catch{return!1}}function Te(e,n=process.env){if(e==="gemini"&&n.GEMINI_API_KEY)return{authMethodId:"gemini-api-key"};return e==="codex"&&(n.CODEX_API_KEY||n.OPENAI_API_KEY)?{authMethodId:"api-key"}:{}}var Re=(e)=>`harness ${e.harness} needs \`${e.command}\` on PATH. Install it with: ${e.install}`;function je(e){let n=e.options??[],r=n.find((o)=>o.kind==="allow_once")??n.find((o)=>o.kind==="reject_once");if(!r)return{outcome:{outcome:"cancelled"}};return{outcome:{outcome:"selected",optionId:r.optionId}}}var Xt=["ask_user","task_write","task_update","task_complete","task_check"],Vr=(e)=>[`harness ${e} runs in the project's Cloud Machine, not on this machine.`,"Start work with `hlix cycles create`, find the tasks it plans with","`hlix tasks list`, and watch one live with `/follow <task-id>`.","Nothing runs on this machine, so a local coder binary is not used."].join(" "),et=(e)=>[e==="unknown"?"This project's harness could not be read from the server. Do NOT guess which coder it runs — say so, and offer to check with the `hlix_harness` tool.":`This project's harness is ${e}: the platform runs ${e} for the coding work it executes, in the project's Cloud Machine.`,"Change it with the `hlix_harness` tool, which writes the project's setting.","","To do coding work here, dispatch it and then watch it:","1. `hlix_cycles_create` with the project id, a title and a description. That"," is what STARTS work — it enters the project's loop, which plans the cycle,"," creates its tasks and starts the coder. It returns no cycle id.","2. `hlix_tasks_list` with that project to find the tasks planning produced.",`3. \`${_t}\` with a task id, which streams that coder's own text and`," tool calls into this session live. Report what it did.","","`hlix_tasks_create` only adds a board row; it does not start anything.","Use `hlix_team` to start one coding job with a named coder instead."].join(`
3
+ `),zr=(e,n)=>[`The user chose the ${e.label} harness. Do not edit files or run commands`,`yourself. Hand the whole task to \`${n}\` as one natural-language brief,`,`then report what it did. ${e.label} reads and writes the same working`,"directory you are in.","",`It authenticates from ${e.authEnvVars.join(" or ")} in this shell's`,"environment. If it reports a credential problem, say so — do not retry."].join(`
4
+ `);function tt(e){if(e.sandbox==="cloud"||e.active==="hlix")return[];let n=new Set(e.unavailable??[]),r=e.model?{defaultModelId:e.model}:{},o=[{id:"hlix",name:"Hlix",description:"The hlix agent codes here, with the full toolset.",...r}];for(let s of Object.values(F)){let a=e.active===s.harness,l=Kr(s.harness);o.push({id:s.harness,name:s.label,description:`${s.label} runs on this machine over ACP and edits ${e.cwd}.`,instructions:zr(s,l),availableTools:n.has(s.harness)?[...e.readTools,...Xt,_t]:[l,...e.readTools,...Xt,_t],...n.has(s.harness)?{}:{additionalTools:{[l]:Gr({id:l,description:`Run a coding task with ${s.label}. Give it one natural-language brief; it reads and writes the working directory and returns its final output.`,...Te(s.harness),command:s.command,args:s.args,cwd:e.cwd,...s.env?{env:s.env}:{},...e.workspace?{workspace:e.workspace}:{},onPermissionRequest:async(h)=>je(h)})}},...r,...a?{metadata:{default:!0}}:{}})}return o}function nt(e){if(!e.fromFlag||!e.modesBuilt)return null;return e.current===e.harness?null:e.harness}function Oe(e){let n=[...e.available],r=(s,a="none")=>({harness:e.current,available:n,action:a,message:s});if(!e.requested)return r(`harness: ${e.current}. Available here: ${n.join(", ")}.`);if(!i.includes(e.requested))return r(`/harness must name one of ${i.join(", ")}; got "${e.requested}".`);let o=e.requested;if(e.sandbox==="cloud"){let s=`${e.sandboxLine} · harness: ${o} (project preference)`;return{harness:o,available:n,action:"preference",message:o==="hlix"?s:`${s}. ${Vr(o)}`}}if(!n.includes(o))return r(Re(F[o]));if(!e.modesBuilt)return r(`This session runs the hlix coder, so there is no ${o} mode to switch to. The choice is saved; restart with \`hlix\` to run on ${o}.`,"restart");return{harness:o,available:n,action:"mode",message:`${e.sandboxLine} · harness: ${o}`}}function rt(e){return $r({id:"hlix_harness",description:"Show or change the harness — which coder does the work. In a local environment or Docker container it switches this session's coder; on a Cloud Machine it writes the project's harness preference, which is what the platform runs. With no argument it reports the current harness.",inputSchema:Ce.object({harness:Ce.string().optional().describe(`One of ${i.join(", ")}. Omit to report the current one.`)}),outputSchema:Ce.object({harness:Ce.string(),available:Ce.array(Ce.string()),message:Ce.string()}),execute:async(n)=>{let r=e.session(),o=Oe({...n.harness?{requested:n.harness}:{},current:r?.mode.get()??Ee,available:e.available,sandbox:e.sandbox,sandboxLine:e.sandboxLine,modesBuilt:e.modesBuilt}),s={harness:o.harness,available:o.available,message:o.message};if(o.action==="mode"&&r)return await r.mode.switch({modeId:o.harness}),s;if(o.action==="preference"){if(!e.setProjectHarness)return{...s,message:"This folder is not bound to a hlix project, so there is no project preference to write. Run `hlix init` or pass --project <id>."};await e.setProjectHarness(o.harness)}return s}})}var Zt=[{name:"provider-key",source:"(?:sk|pk|rk|ghp|gho|ghs|ghu|xox[baprs]|AKIA|ASIA)[-_](?:[A-Za-z0-9]+[-_])*[A-Za-z0-9]{16,}"},{name:"jwt",source:"eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+"},{name:"bearer-token",source:"Bearer\\s+[A-Za-z0-9._~+/=-]{12,}"},{name:"connection-string",source:"(\\w{1,64}://)[^\\s:/@]+:[^\\s:/@]+@",replacement:"$1[redacted]@"},{name:"private-key-pem",source:"-----BEGIN [A-Z ]*PRIVATE KEY-----"},{name:"labelled-key",source:`([A-Za-z0-9_-]{0,24}(?:[Aa][Pp][Ii][_-]?[Kk][Ee][Yy]|[_-][Kk][Ee][Yy]|Key|[Ss][Ee][Cc][Rr][Ee][Tt]|[Tt][Oo][Kk][Ee][Nn]|[Pp][Aa][Ss][Ss][Ww][Oo]?[Rr]?[Dd])[A-Za-z0-9_-]{0,12}["']?\\s*[:=]\\s*["']?)[A-Za-z0-9_./+=-]{16,}`,replacement:"$1[redacted]"}],Wr=new RegExp(Zt.map((e)=>e.source).join("|"));function C(e,n=[]){let r=e;for(let o of n){if(!o||o.length<8)continue;r=r.split(o).join("[redacted]")}return r=r.replace(/(\w{1,64}:\/\/)[^\s:/@]+:[^\s:/@]+@/g,"$1[redacted]@"),r.replace(new RegExp(Wr.source,"g"),"[redacted]")}var Jt=/(^|\/)\.env\.(example|sample|template)$/i,Qt=/(^|\/)\.env(?:\.[^/]+)?$/i,en=/(^|\/)(?:\.envrc|\.netrc|\.npmrc|\.pypirc|credentials(?:\.[^/]+)?(?:\.json|\.toml)?|service-account[^/]*\.json|firebase-adminsdk[^/]*\.json|application_default_credentials\.json|\.docker\/config\.json|\.cargo\/credentials(?:\.toml)?|\.gem\/credentials|\.bundle\/config|(?:pip|pypi)\.conf|\.aws\/credentials|[^/]+\.(?:pem|key|p12|pfx)|[^/]*\.(?:auto\.)?tfvars(?:\.json)?|application[^/]*\.(?:properties|ya?ml)|(?:local|keystore|gradle|secrets?)\.properties|appsettings[^/]*\.json|local\.settings\.json|config\/database\.ya?ml|wrangler\.toml|fly\.toml|serverless\.ya?ml|(?:credentials|secrets?)[^/]*\.(?:json|ya?ml|toml|ini|conf|cfg))$/i;function Ne(e){if(Qt.test(e)&&!Jt.test(e))return"dotenv";if(en.test(e))return"credential";return null}import{z as le}from"zod";var Ie=le.string().trim().min(1),qr=le.discriminatedUnion("kind",[le.object({kind:le.literal("project"),projectId:Ie}).strict(),le.object({kind:le.literal("cycle"),projectId:Ie,cycleId:Ie}).strict(),le.object({kind:le.literal("task"),projectId:Ie,taskId:Ie}).strict(),le.object({kind:le.literal("agent"),projectId:Ie,agentId:Ie}).strict()]);import{z as b}from"zod";var tn=["github-compare","hlix-repos-compare"],ut=b.enum(["added","removed","modified","renamed","copied","changed","unchanged","unknown"]),nn=b.object({path:b.string(),previousPath:b.string().nullable(),status:ut,additions:b.number().nullable(),deletions:b.number().nullable(),patch:b.string().nullable(),patchTruncated:b.boolean()}),rn=b.object({status:b.enum(["ahead","behind","identical","diverged","unknown"]),aheadBy:b.number().nullable(),behindBy:b.number().nullable()}),on=b.object({verdict:b.enum(["approved","rejected"]),summary:b.string().nullable(),headSha:b.string().nullable(),observedAt:b.string(),stale:b.boolean()}),Yr=b.object({cycleId:b.string(),repoId:b.string().nullable(),source:b.enum(tn),observedAt:b.string(),baseRef:b.string().nullable(),baseSha:b.string().nullable(),headRef:b.string().nullable(),headSha:b.string().nullable(),comparison:rn,filesChanged:b.number().nullable(),additions:b.number().nullable(),deletions:b.number().nullable(),commits:b.number().nullable(),files:b.array(nn),filesTruncated:b.boolean(),evaluator:on.nullable()}),sn=["base","head"],Et=b.enum(sn),an=["open","resolved"],It=b.enum(an),cn=b.object({pagePath:b.string().min(1).max(2048).regex(/^\/(?!\/)/,"expected a same-origin absolute path").refine((e)=>!/[?#\\]/.test(e),"query, fragment, and backslash are not allowed"),selector:b.string().min(1).max(512),viewport:b.object({width:b.number().int().min(320).max(1920),height:b.number().int().min(320).max(1200),deviceScaleFactor:b.literal(1)}).strict()}).strict(),ln=["previews-disabled","boundary-unavailable","review-head-unavailable","no-live-preview","revision-mismatch","source-not-isolated","unsafe-source"],dn=b.discriminatedUnion("enabled",[b.object({enabled:b.literal(!0)}),b.object({enabled:b.literal(!1),reasonCode:b.enum(ln),reason:b.string()})]),pn=b.string().regex(/^[0-9a-f]{40}$/i,"expected a commit sha"),un=b.object({id:b.string(),cycleId:b.string(),projectId:b.string(),authorId:b.string(),headSha:b.string(),path:b.string().nullable(),side:Et.nullable(),lineStart:b.number().nullable(),lineEnd:b.number().nullable(),selectedText:b.string().nullable(),body:b.string(),resolution:It,resolvedBy:b.string().nullable(),resolvedAt:b.string().nullable(),revisionIteration:b.number().nullable(),createdAt:b.string(),updatedAt:b.string(),stale:b.boolean()}),Xr=b.object({cycleId:b.string(),headSha:b.string().nullable(),comments:b.array(un),visualContext:dn.optional()}),Zr=b.object({headSha:pn,body:b.string().min(1).max(1e4),path:b.string().min(1).max(1024).nullish(),side:Et.nullish(),lineStart:b.number().int().positive().nullish(),lineEnd:b.number().int().positive().nullish(),selectedText:b.string().max(1e4).nullish(),visualContext:cn.optional()}).superRefine((e,n)=>{if(e.lineStart!=null&&(e.path==null||e.side==null))n.addIssue({code:b.ZodIssueCode.custom,path:["lineStart"],message:"a line comment needs both a path and a side"});if(e.lineEnd!=null&&(e.lineStart==null||e.lineEnd<e.lineStart))n.addIssue({code:b.ZodIssueCode.custom,path:["lineEnd"],message:"lineEnd must be >= lineStart"});if(e.side!=null&&e.path==null)n.addIssue({code:b.ZodIssueCode.custom,path:["side"],message:"a side needs a path"})}),Jr=b.object({resolution:It}),Qr=b.object({headSha:pn}),eo=b.object({cycleId:b.string(),taskId:b.string(),headSha:b.string(),commentIds:b.array(b.string()),staleSkipped:b.number(),feedback:b.string(),iteration:b.number(),started:b.boolean(),reason:b.string().nullable()});import{z as m}from"zod";var mn=m.enum(["github","hlix-repos"]),kt=m.object({path:m.string(),previousPath:m.string().nullable(),status:ut,additions:m.number().nullable(),deletions:m.number().nullable(),binary:m.boolean()}),gn=m.object({sha:m.string(),subject:m.string(),at:m.string()}),qe=m.object({ref:m.string(),sha:m.string().nullable()}),fn=m.object({repoKey:m.string(),label:m.string(),base:qe,head:qe,files:m.array(kt),filesTruncated:m.boolean(),filesChanged:m.number(),additions:m.number(),deletions:m.number(),commits:m.array(gn),nextPage:m.number().int().nullable().optional(),unavailable:m.enum(["repository_unreachable","index_building"]).nullable()}),hn=m.object({cycleId:m.string(),title:m.string(),repoKey:m.string(),files:m.array(kt),observedAt:m.string()}),to=m.object({projectId:m.string(),source:mn,environmentState:m.string().nullable(),observedAt:m.string(),repos:m.array(fn),inFlight:m.array(hn)}),yn=m.enum(["default","preview","cycle","edit"]),bn=m.object({ref:m.string(),kind:yn,title:m.string().nullable(),cycleId:m.string().nullable(),baseRef:m.string().nullable().optional()}),no=m.object({repoKey:m.string(),defaultBranch:m.string(),previewBranch:m.string(),branches:m.array(bn)}),ro=m.object({repoKey:m.string(),path:m.string(),patch:m.string().nullable(),patchTruncated:m.boolean(),binary:m.boolean()}),oo=m.object({repoKey:m.string(),ref:qe,paths:m.array(m.string()),ignored:m.array(m.string()).default([]),truncated:m.boolean(),tree:m.string().nullable()}),io=m.object({error:m.string(),environmentState:m.string()}),so=m.object({repoKey:m.string(),path:m.string(),ref:qe,content:m.string().nullable(),truncated:m.boolean(),binary:m.boolean(),size:m.number().nullable(),data:m.string().nullable(),mediaType:m.string().nullable(),sha:m.string().nullable()}),ao=m.object({cycleId:m.string().min(1),repo:m.string().optional(),path:m.string().min(1),content:m.string(),base:m.string().regex(/^[0-9a-f]{40}$/).nullable()}),co=m.object({path:m.string(),sha:m.string()});var Sn=m.string().regex(/^[0-9a-f]{40}$/i,"a 40-character commit sha"),lo=m.object({repo:m.string().optional(),from:m.string().min(1),fromSha:Sn}),po=m.object({ref:m.string(),baseRef:m.string(),sha:m.string()}),uo=m.object({repo:m.string().optional(),ref:m.string().min(1),headSha:Sn,message:m.string().trim().min(1).max(2000),files:m.array(m.object({path:m.string().min(1),content:m.string().nullable()})).min(1).max(50)}),mo=m.object({sha:m.string()}),go=m.object({repo:m.string().optional(),ref:m.string().min(1)}),fo=m.object({sha:m.string(),baseRef:m.string()});var wt={min:1,max:20};var xn=["chat","client_portal","kanban","linear","github","api","branch","canvas"];var Rt={client_portal:{enabledByDefault:!0,triage:!0,kind:"native",label:"Client portal"},chat:{enabledByDefault:!0,triage:!0,kind:"native",label:"Chat"},kanban:{enabledByDefault:!0,triage:!0,kind:"native",label:"Board"},linear:{enabledByDefault:!0,triage:!0,kind:"external",label:"Linear"},github:{enabledByDefault:!0,triage:!0,kind:"external",label:"GitHub issues"},api:{enabledByDefault:!0,triage:!0,kind:"native",label:"API"},branch:{enabledByDefault:!0,triage:!1,kind:"native",label:"Branch"},canvas:{enabledByDefault:!0,triage:!0,kind:"native",label:"Canvas"}};function vn(e){return xn.filter((n)=>Rt[n].kind===e)}var yo=vn("external"),bo=vn("native");import{z as _}from"zod";var Tt=["simple","medium","complex"];var So={simple:3,medium:6,complex:10},ke=_.number().int().min(0).max(1e4),ue=_.number().int().min(0).max(1e8),mt=_.number().int().min(0).max(wt.max),xo=_.object({billingMode:_.enum(["metered","tasks"]),tasksModeSince:_.string().datetime(),taskCredits:_.object({auto:_.preprocess((e)=>typeof e==="number"?So:e,_.object({simple:ue,medium:ue,complex:ue}).strict()),frontier:ue,frontierMax:ue,ownSubscription:ue}).strict(),autoSizeCost:_.object({source:_.string().min(1).max(500),simple:_.number().min(0).max(1e6),medium:_.number().min(0).max(1e6),complex:_.number().min(0).max(1e6)}).strict(),costMarkers:_.object({source:_.string().min(1).max(500),coderAuto:_.number().min(0).max(1e6),coderAutoBest:_.number().min(0).max(1e6),coderFrontier:_.number().min(0).max(1e6),coderFrontierMax:_.number().min(0).max(1e6),reviewerAuto:_.number().min(0).max(1e6),reviewerFrontier:_.number().min(0).max(1e6),reviewerFrontierMax:_.number().min(0).max(1e6),coderFrontierBest:_.number().min(0).max(1e6),coderFrontierMaxBest:_.number().min(0).max(1e6),reviewerFrontierBest:_.number().min(0).max(1e6),reviewerFrontierMaxBest:_.number().min(0).max(1e6)}).strict(),reviewShare:_.object({auto:_.number().min(0).max(100),frontier:_.number().min(0).max(100),frontierMax:_.number().min(0).max(100)}).strict(),machineCostPerTask:_.number().min(0).max(1e6),frontierMaxEffort:_.enum(["low","medium","high"]),freeReworkRounds:_.number().int().min(0).max(1e4),markupBps:_.object({tokens:ke,box:ke,data:ke,storage:ke,calls:ke}).strict(),growth:_.object({emailSentMicros:ue,managedLookupDailyCeilingMicros:_.number().int().min(0).max(10000000000)}).strict(),freePlan:_.object({creditMicros:_.number().int().min(0).max(1e9),projectLimit:_.number().int().min(0).max(1e4),tasks:_.number().int().min(0).max(1e4)}).strict(),maxConcurrentTasks:_.object({free:mt,pro:mt,business:mt,scale:mt}).strict(),bonusCredit:_.object({perActionMicros:ue}).strict(),paidPlans:_.object({creditRollover:_.boolean()}).strict(),calls:_.object({participantMinuteMicros:ue}).strict(),boxRates:_.object({cpuHourUsd:_.number().min(0).max(100),memoryGibHourUsd:_.number().min(0).max(100),diskGbHourUsd:_.number().min(0).max(100)}).strict(),economics:_.object({gatewayFeeBps:ke,paymentFeeBps:ke,paymentFixedUsd:_.number().min(0).max(10),infraCostsUsd:_.number().min(0).max(1e8),teamCostsUsd:_.number().min(0).max(1e8)}).strict()}).strict();var An=[{key:"x",url:"https://x.com/hlixai"},{key:"linkedin",url:"https://www.linkedin.com/company/hlixai"},{key:"youtube",url:"https://www.youtube.com/@hlixai"},{key:"instagram",url:"https://www.instagram.com/hlixai/"},{key:"github",url:"https://github.com/hlix-ai"}],vo=An.map((e)=>e.key);var _n="project-manager";var Ao={[_n]:{name:"Maestro",previousNames:["Nucleus"],avatarKey:"nucleus"},"senior-engineer":{name:"Atlas",previousNames:["Strand"],avatarKey:"strand"},"product-engineer":{name:"Milo",previousNames:["Codon"],avatarKey:"codon"},"ui-engineer":{name:"Piper",previousNames:["Pheno"],avatarKey:"pheno"},"qa-engineer":{name:"Scout",previousNames:["Proof"],avatarKey:"proof"},"security-engineer":{name:"Aegis",previousNames:["Telo"],avatarKey:"telo"},"technical-writer":{name:"Quill",previousNames:["Script"],avatarKey:"script"}};var _o=/(?:errors?|err!|exception)\b|\b(?:fail(?:s|ed|ure|ing)?|fatal|panic|traceback|assertion)\b|[✗✘×]|^\s+at\s+\S/i;function I(e=globalThis.process?.env??{}){let n=Number(e.HLIX_TOOL_OUTPUT_INLINE_CHARS);if(!Number.isFinite(n)||n<=0)return 30000;return Math.min(1e6,Math.max(2000,Math.floor(n)))}function Co(e,n){if(n>=e.length)return e.length;let r=e.lastIndexOf(`
5
+ `,n-1);return r>=n/2?r+1:n}function Eo(e,n){let r=Math.max(0,e.length-n);if(r===0)return 0;let o=e.indexOf(`
6
+ `,r);return o!==-1&&o-r<n/2?o+1:r}function Cn(e){let n=e.filter(([o,s])=>s>o).sort((o,s)=>o[0]-s[0]),r=[];for(let[o,s]of n){let a=r[r.length-1];if(a&&o<=a[1])a[1]=Math.max(a[1],s);else r.push([o,s])}return r}var Ye=(e)=>e.reduce((n,[r,o])=>n+o-r,0);function En(e,n){if(e.length<=n)return[[0,e.length]];let r=Math.max(200,n-1200),o=[0];for(let y=e.indexOf(`
7
+ `);y!==-1;y=e.indexOf(`
8
+ `,y+1))o.push(y+1);let s=[];for(let y=0;y<o.length&&s.length<48;y++){let k=y+1<o.length?o[y+1]-1:e.length;if(_o.test(e.slice(o[y],Math.min(k,o[y]+2000))))s.push(y)}let a=s.length===0,l=[0,Co(e,Math.floor(r*(a?0.5:0.15)))],h=[Eo(e,Math.floor(r*(a?0.5:0.35))),e.length],g=Cn([l,h]),p=0;for(let y of s){if(p>=12)break;let k=r-Ye(g);if(k<=0)break;let M=Math.max(0,y-3),G=Math.min(o.length-1,y+3),K=o[M],J=G+1<o.length?o[G+1]:e.length,ce=Cn([...g,[K,Math.min(J,K+k)]]);if(Ye(ce)>r)continue;if(Ye(ce)>Ye(g))p++;g=ce}return g}function X(e,n){let r=n.budget??I();if(e.length<=r)return e;let o=En(e,r),s=Ye(o),a=n.exitCode==null?"":`, exit code ${n.exitCode}`,l=[`[output truncated: ${e.length} chars total, ${s} shown, ${e.length-s} omitted${a}. ${n.label??"Full output"}: ${n.handle}]`],h=0;for(let[g,p]of o){if(g>h)l.push(`[… ${g-h} chars omitted, offset ${h} to ${g} …]`);l.push(e.slice(g,p).replace(/\n$/,"")),h=p}if(h<e.length)l.push(`[… ${e.length-h} chars omitted, offset ${h} to ${e.length} …]`);return l.join(`
9
+ `)}var Pt={mastra_workspace_read_file:"view",mastra_workspace_write_file:"write_file",mastra_workspace_edit_file:"edit_file",mastra_workspace_apply_patch:"apply_patch",mastra_workspace_list_files:"find_files",mastra_workspace_delete:"delete_file",mastra_workspace_file_stat:"file_stat",mastra_workspace_mkdir:"mkdir",mastra_workspace_grep:"search_content",mastra_workspace_ast_edit:"ast_edit",mastra_workspace_execute_command:"execute_command",mastra_workspace_get_process_output:"process_output",mastra_workspace_kill_process:"kill_process",mastra_workspace_lsp_inspect:"lsp_inspect"};var Qs=new RegExp(String.raw`(?<![^\s"'=:(;&|])(?:[^\s"'=:]*\/(?:tasks\/[^\/\s"']+|project\/repos\/[^\/\s"']+)\/repo|\/hlix\/workspace|\/workspace)(?![\w.-])(\/)?`,"g");var Ot=["task-override","agent","project-preference","organization-preference","system-default"];import{z as W}from"zod";import{z as q}from"zod";var In=q.object({label:q.string().min(1).max(120),prompt:q.string().min(1).max(2000)}).strict(),wo=q.object({label:q.string(),items:q.array(In).max(3)}),Ro=q.enum(["Column","Row","Card","Heading","Text","Metric","Status","Progress","Link","Steps","Suggestions","Divider"]),Mt=q.object({surfaceId:q.string().min(1).max(128),components:q.array(q.object({id:q.string().min(1),component:Ro}).passthrough()).min(1).max(200),data:q.record(q.string(),q.unknown()).optional()}).strict().superRefine((e,n)=>{if(!e.components.some((r)=>r.id==="root"))n.addIssue({code:"custom",path:["components"],message:"A root component is required"});for(let[r,o]of e.components.entries()){if(o.component!=="Suggestions")continue;let s=wo.safeParse(o);if(!s.success)for(let a of s.error.issues)n.addIssue({code:"custom",path:["components",r,...a.path],message:a.message})}});var To=W.discriminatedUnion("type",[W.object({type:W.literal("text"),text:W.string()}),W.object({type:W.literal("reasoning"),text:W.string()}),W.object({type:W.literal("presentation"),producer:W.literal("roadmap-planner"),spec:Mt}),W.object({type:W.literal("tool"),toolCallId:W.string().min(1),toolName:W.string().min(1),state:W.enum(["pending","done","error"]),input:W.unknown().optional(),output:W.unknown().optional(),error:W.string().optional()})]);import{z as E}from"zod";var kn=E.enum(["source_unavailable","unsupported_source","analysis_limited","unresolved_imports","invalid_source","changes_unavailable","checks_unavailable"]),wn=E.enum(["available","partial","unavailable"]),Oo=E.object({status:wn,observedAt:E.string(),repositories:E.array(E.object({repoKey:E.string(),label:E.string(),ref:E.string().nullable(),sha:E.string().nullable(),status:wn,reason:kn.optional()})),nodes:E.array(E.object({id:E.string(),repoKey:E.string(),path:E.string(),label:E.string(),kind:E.enum(["module","package","dependency"]),files:E.array(E.string()),changedFiles:E.array(E.string()),impact:E.enum(["changed","dependent","none"])})),edges:E.array(E.object({id:E.string(),source:E.string(),target:E.string(),kind:E.enum(["import","dependency"]),evidence:E.array(E.object({path:E.string(),specifier:E.string()}))})),cycle:E.object({id:E.string(),title:E.string(),status:E.string(),checks:E.object({passed:E.number().nullable(),failed:E.number().nullable(),unverified:E.number().nullable(),summaryKey:E.string().nullable()})}).nullable(),coverage:E.object({scannedFiles:E.number(),omittedFiles:E.number(),unresolvedImports:E.number(),truncated:E.boolean()}),warnings:E.array(kn)}),Mo=E.object({status:E.enum(["none","generating","ready","failed","unavailable"]),generatedAt:E.string().nullable(),checkedAt:E.string().optional(),revisions:E.array(E.string()),planned:E.boolean().optional()});import{z as V}from"zod";var Dt=V.string().url().max(2048).refine((e)=>new URL(e).protocol==="https:","Use an HTTPS URL"),gt=V.string().regex(/^#[0-9a-fA-F]{6}$/).nullable(),Rn=V.string().max(100).regex(/^[\p{L}\p{N} _.,'-]+$/u).nullable(),Nt=V.object({name:V.string().trim().min(1).max(120),tagline:V.string().max(240).nullable(),logoUrl:Dt.nullable(),iconUrl:Dt.nullable().optional(),iconTone:V.enum(["light","dark","solid"]).nullable().optional(),headerMode:V.enum(["logo-and-name","logo-only"]).optional(),logoTone:V.enum(["light","dark","solid"]).nullable().optional(),colors:V.object({primary:gt,accent:gt,background:gt,text:gt}),typography:V.object({heading:Rn,body:Rn}),voice:V.string().max(2000).nullable(),description:V.string().max(2000).nullable(),sourceUrl:Dt.nullable(),extractedAt:V.string().datetime().nullable(),warnings:V.array(V.string().max(300)).max(12),provenance:V.record(V.string().max(80),V.enum(["observed","inferred","edited"])).refine((e)=>Object.keys(e).length<=30,"Too many provenance fields").default({})});var Tn=(e)=>[{kind:"step",id:"planner"},{kind:"step",id:"engineer"},{kind:"choice",id:`${e}-review|${e}-awaiting-run`,options:[{kind:"group",id:`${e}-review`,steps:[{kind:"group",id:"review",steps:[{kind:"step",id:"review-evaluator"},{kind:"choice",id:"review-optimizer|review-approved",options:[{kind:"step",id:"review-optimizer"},{kind:"step",id:"review-approved"}]}]},{kind:"step",id:"after-review"}]},{kind:"step",id:`${e}-awaiting-run`}]}],No=[{kind:"step",id:"intake"},{kind:"group",id:"cycle-attempt",repeats:!0,steps:Tn("cycle-attempt")},{kind:"step",id:"finalize"},{kind:"group",id:"cycle-redelivery-gate",repeats:!0,steps:[{kind:"choice",id:"cycle-redelivery|redelivery-idle",options:[{kind:"group",id:"cycle-redelivery",steps:[{kind:"group",id:"cycle-redelivery-attempt",repeats:!0,steps:Tn("cycle-redelivery-attempt")},{kind:"step",id:"redeliver"}]},{kind:"step",id:"redelivery-idle"}]}]}];var Pn={"claude-code":["claude-code","opencode","goose","pi"],codex:["codex","opencode","goose","qwen-code","pi","hlix"]},Lo={hlix:x,api_key:x.filter((e)=>Object.values(Pn).some((n)=>n.includes(e))),chatgpt:["codex"],claude:["claude-code"]};import{z as v}from"zod";import{z as me}from"zod";var jt=me.discriminatedUnion("kind",[me.object({kind:me.literal("file"),name:me.string().trim().min(1).max(255),path:me.string().max(500).refine((e)=>e.startsWith(".hlix/context/")&&!e.split("/").includes(".."),{message:"Design files live under .hlix/context/"})}),me.object({kind:me.literal("link"),url:me.string().url().max(2000).regex(/^https?:\/\//),provider:me.string().trim().min(1).max(80)})]),On=10;var He=v.string().min(1).max(120).regex(/^[\w-]+$/),Nn=v.enum(["design_only","design_and_build"]),jn=v.object({id:He,name:v.string().trim().min(1).max(160),route:v.string().regex(/^#[\w-]+$/),thumbnail:v.string().max(200000).regex(/^data:image\/(?:png|jpeg|webp);base64,[A-Za-z0-9+/]+={0,2}$/).optional(),width:v.number().int().min(240).max(3840),height:v.number().int().min(240).max(1e4)}),Ln=v.object({id:He,name:v.string().trim().min(1).max(160),entryFrameId:He,frameIds:v.array(He).min(1).max(100)}),$a=v.object({idempotencyKey:v.string().uuid().optional(),title:v.string().trim().min(1).max(200),intent:Nn,cycleId:v.string().min(1).optional(),brief:v.string().trim().min(1).max(20000).optional(),sources:v.array(jt).max(On).optional()}),Mn=v.object({expectedRevisionId:v.string().min(1).nullable(),sourcePath:v.string().max(300).regex(/^\.hlix\/designs\/[\w-]+\/prototype\.html$/).optional(),html:v.string().min(1).max(2000000),frames:v.array(jn).min(1).max(100),flows:v.array(Ln).min(1).max(100),context:v.object({productMd:v.string().max(1e5).optional(),designMd:v.string().max(1e5).optional(),packVersion:v.string().max(200).optional()}),evidence:v.array(v.object({flowId:He,result:v.enum(["passed","failed"]),note:v.string().trim().min(1).max(4000)})).min(1).max(100)}).superRefine((e,n)=>{if(!/<html(?:\s|>)/i.test(e.html)||!/<body(?:\s|>)/i.test(e.html))n.addIssue({code:"custom",message:"Publish a complete HTML document"});for(let s of e.frames){let a=s.route.slice(1);if(!new RegExp(`\\bid\\s*=\\s*["']${a}["']`,"i").test(e.html))n.addIssue({code:"custom",message:`Frame route ${s.route} has no HTML anchor`})}if(JSON.stringify(e).length>4000000)n.addIssue({code:"custom",message:"Prototype source and thumbnails exceed the 4 MB limit"});if(new Set(e.frames.map((s)=>s.route)).size!==e.frames.length)n.addIssue({code:"custom",message:"Each frame needs a unique route"});let r=new Set(e.frames.map((s)=>s.id)),o=new Set(e.flows.map((s)=>s.id));if(r.size!==e.frames.length||o.size!==e.flows.length)n.addIssue({code:"custom",message:"Frame and flow identities must be unique"});for(let s of e.flows){if(!r.has(s.entryFrameId)||!s.frameIds.includes(s.entryFrameId)||s.frameIds.some((a)=>!r.has(a)))n.addIssue({code:"custom",message:"Flows must reference existing frames and include their entry frame"});if(!e.evidence.some((a)=>a.flowId===s.id&&a.result==="passed"))n.addIssue({code:"custom",message:"Every flow needs passing interaction evidence"})}if(e.evidence.some((s)=>!o.has(s.flowId)||s.result!=="passed"))n.addIssue({code:"custom",message:"Resolve failed or unknown flow evidence before publishing"})}),Ha=v.object({revisionId:v.string().min(1),decision:v.enum(["approved","changes_requested"]),comment:v.string().trim().max(1e4).optional()}),Ka=v.object({revisionId:v.string().min(1)}),Va=v.object({revisionId:v.string().min(1),frameId:He,body:v.string().trim().min(1).max(1e4),x:v.number().min(0).max(1).optional(),y:v.number().min(0).max(1).optional(),parentId:v.string().min(1).optional()}).refine((e)=>e.x===void 0===(e.y===void 0),{message:"Point anchors need both x and y"}),za=v.object({resolved:v.boolean()}),Bo=v.object({id:v.string(),projectId:v.string(),cycleId:v.string().nullable(),title:v.string(),intent:Nn,latestRevisionId:v.string().nullable(),sources:v.array(jt).default([]),createdAt:v.string(),updatedAt:v.string()}),Dn=v.object({id:v.string(),designId:v.string(),number:v.number(),html:v.string(),contentHash:v.string(),frames:v.array(jn),flows:v.array(Ln),context:Mn.shape.context,evidence:Mn.shape.evidence,status:v.enum(["verifying","in_review","approved","changes_requested"]),sourceTaskId:v.string().nullable(),sourcePath:v.string().nullable(),decidedBy:v.string().nullable(),decisionComment:v.string().nullable(),decidedAt:v.string().nullable(),buildRequestedAt:v.string().nullable(),createdAt:v.string()}),Uo=v.object({id:v.string(),designId:v.string(),revisionId:v.string(),frameId:v.string(),parentId:v.string().nullable(),body:v.string(),x:v.number().nullable(),y:v.number().nullable(),authorId:v.string().nullable(),resolved:v.boolean(),createdAt:v.string()}),Wa=v.object({design:Bo,revision:Dn.nullable(),revisions:v.array(Dn.omit({html:!0})),comments:v.array(Uo),link:v.string()});var Xa=new Set(`
10
+ AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT
11
+ BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH
12
+ ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT
13
+ HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS
14
+ LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI
15
+ NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG
16
+ SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG
17
+ UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW
18
+ `.split(/\s+/).filter(Boolean));import{z as A}from"zod";var Bn=1500000,w=A.string().trim().min(1).max(120).regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/),Be=A.string().regex(/^[0-9a-f]{64}$/),he=A.string().datetime(),De=he.nullable(),ft=A.number().int().min(0).max(1e6),Xe=A.string().trim().min(1).max(240),Go=A.string().trim().min(1).max(12000),$o=A.string().trim().min(1).max(2000),Un=A.object({kind:A.enum(["cover","executive_summary","outcomes","delivery","assumptions","next_steps"]),title:Xe,body:Go}).strict(),Fn=A.object({kind:A.enum(["scope","exclusions","acceptance_criteria"]),title:Xe,items:A.array($o).min(1).max(100)}).strict(),Ho=A.discriminatedUnion("kind",[Un,Fn]),oc=A.object({title:Xe,blocks:A.array(Ho).min(1).max(64)}).strict(),Ko=Un.extend({id:w}).strict(),Vo=Fn.extend({id:w}).strict(),zo=A.object({id:w,label:A.string().trim().min(1).max(160),description:A.string().trim().max(1000).nullable()}).strict(),Wo=A.object({id:w,source:w,target:w,label:A.string().trim().min(1).max(240).nullable()}).strict(),qo=A.object({id:w,kind:A.literal("architecture"),title:Xe,summary:A.string().trim().min(1).max(4000),nodes:A.array(zo).min(1).max(40),edges:A.array(Wo).max(80)}).strict(),Yo=A.discriminatedUnion("kind",[Ko,Vo,qo]),Xo=A.object({taskId:w,title:A.string().trim().min(1).max(300),doneWhen:A.string().trim().min(1).max(2000),size:A.enum(Tt),billable:A.boolean(),quote:A.object({tier:A.enum(Se),credits:ft}).strict().nullable()}).strict(),Zo=A.object({cycleId:w,title:A.string().trim().min(1).max(300),summary:A.string().trim().min(1).max(4000),dependsOnCycleIds:A.array(w).max(100),tasks:A.array(Xo).max(100),initialScopeCredits:ft.nullable()}).strict(),Jo=A.object({kit:Nt.nullable(),legalName:A.string().trim().max(240).nullable(),legalAddress:A.string().trim().max(2000).nullable(),logoArtifactKey:A.string().trim().min(1).max(512).nullable()}).strict(),Qo=A.object({title:Xe,customerName:A.string().trim().min(1).max(240).nullable(),blocks:A.array(Yo).min(1).max(64),cycles:A.array(Zo).max(100),brand:Jo,initialScopeCredits:ft.nullable(),quoteComplete:A.boolean()}).strict().superRefine((e,n)=>{let r=e.blocks.map((a)=>a.id);if(new Set(r).size!==r.length)n.addIssue({code:"custom",message:"Proposal block ids must be unique",path:["blocks"]});for(let[a,l]of e.blocks.entries()){if(l.kind!=="architecture")continue;let h=new Set(l.nodes.map((p)=>p.id));if(h.size!==l.nodes.length)n.addIssue({code:"custom",message:"Architecture node ids must be unique",path:["blocks",a,"nodes"]});if(new Set(l.edges.map((p)=>p.id)).size!==l.edges.length)n.addIssue({code:"custom",message:"Architecture edge ids must be unique",path:["blocks",a,"edges"]});for(let[p,y]of l.edges.entries())if(!h.has(y.source)||!h.has(y.target))n.addIssue({code:"custom",message:"Architecture edges must connect nodes in the same block",path:["blocks",a,"edges",p]})}let o=e.cycles.map((a)=>a.cycleId);if(new Set(o).size!==o.length)n.addIssue({code:"custom",message:"Proposal cycle ids must be unique",path:["cycles"]});let s=e.cycles.flatMap((a)=>a.tasks.map((l)=>l.taskId));if(new Set(s).size!==s.length)n.addIssue({code:"custom",message:"Proposal task ids must be unique",path:["cycles"]});if(e.quoteComplete){for(let[l,h]of e.cycles.entries()){if(h.initialScopeCredits===null||h.tasks.some((p)=>p.billable&&p.quote===null)){n.addIssue({code:"custom",message:"A complete quote needs every task quote and cycle subtotal",path:["cycles",l]});continue}if(h.tasks.reduce((p,y)=>p+(y.billable?y.quote.credits:0),0)!==h.initialScopeCredits)n.addIssue({code:"custom",message:"Cycle subtotal does not match its frozen task quotes",path:["cycles",l,"initialScopeCredits"]})}let a=e.cycles.reduce((l,h)=>l+(h.initialScopeCredits??0),0);if(e.initialScopeCredits!==a)n.addIssue({code:"custom",message:"Initial-scope total does not match the cycle subtotals",path:["initialScopeCredits"]})}else if(e.initialScopeCredits!==null)n.addIssue({code:"custom",message:"An incomplete quote has no exact initial-scope total",path:["initialScopeCredits"]});if(new TextEncoder().encode(JSON.stringify(e)).byteLength>Bn)n.addIssue({code:"custom",message:`Proposal JSON exceeds ${Bn} bytes`})}),ei=["internal","client"],ti=A.enum(ei),ni=["generated","ai_edit","manual_edit"],Gn=A.enum(ni),ri=["collecting","revising","ready","failed"],$n=A.enum(ri),oi=["approved","changes_requested"],Hn=A.enum(oi),ic=A.object({id:w,organizationId:w,projectId:w,currentRevisionId:w.nullable(),publishedRevisionId:w.nullable(),approvedRevisionId:w.nullable(),approvedBy:w.nullable(),approvedAt:De,visibility:ti,clientReviewerId:w.nullable(),clientDecision:Hn.nullable(),clientDecisionComment:A.string().trim().max(1e4).nullable(),clientDecisionRevisionId:w.nullable(),clientDecisionRevisionHash:Be.nullable(),clientDecidedBy:w.nullable(),clientDecidedAt:De,canvasBatchId:w.nullable(),canvasPublishedAt:De,canvasPublicationError:A.string().max(4000).nullable(),operationId:w.nullable(),operationLeaseToken:w.nullable(),operationLeaseExpiresAt:De,createdAt:he,updatedAt:he}).strict(),ii=A.object({status:A.literal("changes_requested"),decidedBy:w,decidedAt:he,contentHash:Be,successorRevisionId:w,method:A.enum(["ai_edit","manual_edit"]),feedback:A.string().trim().min(1).max(12000)}).strict(),sc=A.object({id:w,organizationId:w,projectId:w,proposalId:w,revision:A.number().int().min(1).max(1e6),kind:Gn,status:$n,baseRevisionId:w.nullable(),instruction:A.string().trim().max(12000).nullable(),content:Qo.nullable(),contentHash:Be.nullable(),agencyReviewDecision:ii.nullable().default(null),inputFingerprint:Be,initialScopeCredits:ft.nullable(),quoteComplete:A.boolean(),error:A.string().max(4000).nullable(),createdAt:he,completedAt:De}).strict().superRefine((e,n)=>{if(e.agencyReviewDecision&&(e.agencyReviewDecision.contentHash!==e.contentHash||e.agencyReviewDecision.successorRevisionId===e.id))n.addIssue({code:"custom",message:"An agency review decision must address this exact revision and its successor",path:["agencyReviewDecision"]});if(e.status==="ready"&&(!e.content||!e.contentHash))n.addIssue({code:"custom",message:"A ready revision needs immutable content and its content hash"});if(e.status==="ready"&&!e.completedAt)n.addIssue({code:"custom",message:"A ready revision needs a completion timestamp",path:["completedAt"]});if(e.quoteComplete&&e.initialScopeCredits===null)n.addIssue({code:"custom",message:"A complete quote needs its exact total",path:["initialScopeCredits"]});if(!e.quoteComplete&&e.initialScopeCredits!==null)n.addIssue({code:"custom",message:"An incomplete quote has no exact total",path:["initialScopeCredits"]})}),ac=A.object({id:w,revision:A.number().int().min(1).max(1e6),kind:Gn,status:$n,contentHash:Be.nullable(),createdAt:he,completedAt:De}).strict(),si=A.object({revisionId:w,revisionHash:Be,blockId:w,selectedText:A.string().trim().min(1).max(4000).nullable(),parentId:w.nullable(),body:A.string().trim().min(1).max(1e4)}).strict(),cc=si.extend({id:w,organizationId:w,projectId:w,proposalId:w,authorId:w,authorType:A.enum(["user","client"]),resolvedBy:w.nullable(),resolvedAt:De,createdAt:he,updatedAt:he}).strict(),lc=A.object({revisionId:w,revisionHash:Be,decision:Hn,comment:A.string().trim().max(1e4).nullable()}).strict().superRefine((e,n)=>{if(e.decision==="changes_requested"&&!e.comment)n.addIssue({code:"custom",message:"Requesting changes needs a reason",path:["comment"]})});import{z as ge}from"zod";var uc=ge.object({title:ge.string().trim().min(1).max(200),summary:ge.string().trim().min(1).max(1e4),scope:ge.array(ge.string().trim().min(1).max(2000)).min(1).max(50),acceptanceCriteria:ge.array(ge.string().trim().min(1).max(2000)).min(1).max(50),assumptions:ge.array(ge.string().trim().min(1).max(2000)).max(50)}).strict();import{z as N}from"zod";var ai=["frame","sticky","text","shape","arrow","box","widget"],ci=["rect","ellipse","diamond"],li=["service","page","component","datastore","integration","actor"],di=["brief","live","delivery","architecture","prototypes"],pi=["default","yellow","green","blue","purple","red"],ui=["straight","elbow","curve"],mi=["end","start","both","none"],Ze={elements:5000,opsPerBatch:500,text:1e4,coordinate:1e7,size:1e5},Je=N.string().regex(/^[\w-]{1,64}$/),ht=N.number().finite().min(-Ze.coordinate).max(Ze.coordinate),Kn=N.number().finite().min(1).max(Ze.size),Vn=N.union([N.object({id:Je}).strict(),N.object({x:ht,y:ht}).strict()]),z={x:ht,y:ht,w:Kn,h:Kn,z:N.number().finite(),parentId:Je.nullable(),text:N.string().max(Ze.text),color:N.enum(pi),shape:N.enum(ci),boxType:N.enum(li),widget:N.enum(di),template:N.string().regex(/^[\w:-]{1,80}$/),from:Vn,to:Vn,route:N.enum(ui),heads:N.enum(mi),context:N.boolean(),origin:N.literal("hlix")},Lt=N.object({id:Je,kind:N.enum(ai),x:z.x,y:z.y,w:z.w,h:z.h,z:z.z,parentId:z.parentId.optional(),text:z.text.optional(),color:z.color.optional(),shape:z.shape.optional(),boxType:z.boxType.optional(),widget:z.widget.optional(),template:z.template.optional(),from:z.from.optional(),to:z.to.optional(),route:z.route.optional(),heads:z.heads.optional(),context:z.context.optional(),origin:z.origin.optional()}).strict(),gi=N.object(Object.fromEntries(Object.entries(z).map(([e,n])=>[e,n.nullable().optional()]))).strict(),fi=N.discriminatedUnion("op",[N.object({op:N.literal("create"),element:Lt}).strict(),N.object({op:N.literal("update"),id:Je,set:gi}).strict(),N.object({op:N.literal("delete"),id:Je}).strict()]),Bt=N.array(fi).min(1).max(Ze.opsPerBatch);import{z as ae}from"zod";var yi=ae.object({x:ae.number().finite(),y:ae.number().finite()}).strict(),xc=ae.discriminatedUnion("t",[ae.object({t:ae.literal("batch"),id:ae.string().min(1).max(64),ops:Bt}).strict(),ae.object({t:ae.literal("presence"),cursor:yi.nullable(),selection:ae.array(ae.string().max(64)).max(500)}).strict()]);var de=(e)=>[{title:"Users & goals",items:e.users??[]},{title:"Experience",items:e.experience??[]},{title:"System",items:e.system??[]},{title:"Integrations",items:e.integrations??[]},{title:"Decisions",items:e.decisions??[]},{title:"Open questions",items:e.questions??[]}],Wn=[{id:"outline",name:"Solution outline",sections:de({users:[["actor","Primary user"],["goal","What must be true for them when this ships?"]],experience:[["page","First screen they see"],["note","Sketch the main journey here, one page per step."]],system:[["service","Backend API"],["datastore","Database"]],integrations:[["note","Payments, email, single sign-on, data sources…"]],decisions:[["decision","Write each decision here once it is made."]],questions:[["question","What do we still need the client to answer?"]]}),links:[["Primary user","First screen they see","uses"],["First screen they see","Backend API","calls"],["Backend API","Database","reads and writes"]],recipe:{stack:"Chosen with the client: the team proposes a stack from what the project already uses."}},{id:"saas",name:"Multi-tenant SaaS",sections:de({users:[["actor","Workspace admin"],["actor","Team member"],["actor","Platform operator"],["goal","Teams sign up, invite colleagues and pay per seat without talking to sales."]],experience:[["page","Sign-up & onboarding"],["page","Workspace dashboard"],["page","Team & roles"],["page","Billing & plan"]],system:[["service","Auth & identity"],["service","Tenant API"],["service","Background jobs"],["datastore","Tenant database"],["datastore","File storage"]],integrations:[["integration","Subscriptions & payments"],["integration","Transactional email"],["integration","Product analytics"]],decisions:[["decision","Every row carries the tenant id; isolation is enforced in the database, not only in code."],["decision","Plans and their limits live in one place the billing logic reads."]],questions:[["question","Single sign-on (SAML) at launch or later?"],["question","Data residency: one region, or EU and US?"],["question","Free trial or free plan?"]]}),links:[["Workspace admin","Sign-up & onboarding","starts here"],["Sign-up & onboarding","Auth & identity","signs in"],["Team member","Workspace dashboard","works in"],["Workspace dashboard","Tenant API","calls"],["Team & roles","Tenant API","calls"],["Billing & plan","Subscriptions & payments","manages plan"],["Tenant API","Tenant database","reads and writes"],["Tenant API","File storage","stores files"],["Tenant API","Background jobs","queues work"],["Background jobs","Transactional email","sends"],["Subscriptions & payments","Tenant API","plan changes"],["Workspace dashboard","Product analytics","tracks"]],recipe:{stack:"TypeScript web app and API, Postgres with row-level tenant isolation, background job queue.",checks:{"Tenant database":["A test proves one tenant can never read or change another tenant's rows."],"Auth & identity":["Sign-in, sign-out, password reset and invitation flows are tested end to end."],"Billing & plan":["Upgrading, downgrading and a failed payment each leave the workspace on the right plan."]}}},{id:"marketplace",name:"Two-sided marketplace",sections:de({users:[["actor","Buyer"],["actor","Seller"],["actor","Marketplace operator"],["goal","Buyers find and pay trusted sellers; sellers get paid without chasing anyone."]],experience:[["page","Search & listings"],["page","Listing detail"],["page","Checkout"],["page","Seller dashboard"],["page","Moderation & admin"]],system:[["service","Listings service"],["service","Orders & payouts"],["service","Search index"],["service","Messaging"],["datastore","Marketplace database"],["datastore","Media storage"]],integrations:[["integration","Split payments & payouts"],["integration","Seller identity checks"],["integration","Email & notifications"]],decisions:[["decision","The platform fee is taken at payment; sellers are paid out after delivery is confirmed."],["decision","A new seller's first listing waits in moderation before it goes live."]],questions:[["question","Who handles refunds and disputes: the platform or the seller?"],["question","Which countries do sellers operate in (tax, payouts)?"],["question","Reviews from buyers only, or both sides?"]]}),links:[["Buyer","Search & listings","browses"],["Search & listings","Search index","queries"],["Listing detail","Listings service","reads"],["Checkout","Orders & payouts","places order"],["Orders & payouts","Split payments & payouts","charges and pays out"],["Seller","Seller dashboard","manages"],["Seller dashboard","Listings service","publishes"],["Seller dashboard","Seller identity checks","verifies"],["Listings service","Search index","indexes"],["Listings service","Media storage","stores photos"],["Orders & payouts","Marketplace database","records"],["Messaging","Email & notifications","notifies"],["Marketplace operator","Moderation & admin","reviews"]],recipe:{stack:"TypeScript web app and API, Postgres, a search index, a payments provider with split payouts.",checks:{"Orders & payouts":["Platform fee and seller payout add up to the amount charged, in tests with refunds."],"Moderation & admin":["A new seller's first listing is not public until approved."]}}},{id:"ecommerce",name:"Online store with payments",sections:de({users:[["actor","Shopper"],["actor","Store manager"],["goal","A shopper goes from product to paid order in under two minutes, on a phone."]],experience:[["page","Storefront & catalog"],["page","Product page"],["page","Cart & checkout"],["page","Order tracking"],["page","Store admin"]],system:[["service","Catalog service"],["service","Cart & orders"],["service","Inventory"],["component","Pricing & tax rules"],["datastore","Store database"]],integrations:[["integration","Card payments"],["integration","Shipping & labels"],["integration","Email receipts"],["integration","Analytics"]],decisions:[["decision","Stock is reserved when checkout starts and released after 15 minutes."],["decision","Prices shown to EU shoppers include tax."]],questions:[["question","Guest checkout allowed?"],["question","Which payment methods besides cards?"],["question","Returns handled online or by support?"]]}),links:[["Shopper","Storefront & catalog","browses"],["Storefront & catalog","Catalog service","reads"],["Product page","Catalog service","reads"],["Cart & checkout","Cart & orders","places order"],["Cart & orders","Pricing & tax rules","prices"],["Cart & orders","Inventory","reserves stock"],["Cart & orders","Card payments","charges"],["Cart & orders","Shipping & labels","ships"],["Cart & orders","Email receipts","confirms"],["Cart & orders","Store database","records"],["Store manager","Store admin","manages"],["Store admin","Catalog service","edits products"]],recipe:{stack:"TypeScript storefront and API, Postgres, a card payments provider, a shipping provider.",checks:{Inventory:["Two shoppers cannot buy the last item at the same time."],"Cart & checkout":["Checkout works on a phone-sized screen and with a declined card."]}}},{id:"booking",name:"Booking & scheduling",sections:de({users:[["actor","Customer"],["actor","Staff member"],["actor","Business owner"],["goal","Customers book a real free slot in three taps; no double bookings, fewer no-shows."]],experience:[["page","Services & availability"],["page","Booking flow"],["page","My bookings"],["page","Staff calendar"],["page","Business settings"]],system:[["service","Availability engine"],["service","Booking service"],["service","Reminder jobs"],["datastore","Bookings database"]],integrations:[["integration","Calendar sync"],["integration","Deposits & payments"],["integration","SMS & email reminders"],["integration","Video meetings"]],decisions:[["decision","All times are stored in UTC and shown in the customer's time zone."],["decision","A slot is held for 10 minutes while the customer books it."]],questions:[["question","Cancellation policy and fees?"],["question","Group bookings or one person per slot?"],["question","Do staff set their own working hours?"]]}),links:[["Customer","Services & availability","picks a time"],["Services & availability","Availability engine","asks for slots"],["Booking flow","Booking service","books"],["Booking service","Deposits & payments","takes deposit"],["Booking service","Bookings database","records"],["Availability engine","Calendar sync","reads busy times"],["Reminder jobs","SMS & email reminders","sends"],["Booking service","Video meetings","creates link"],["Staff member","Staff calendar","works from"],["Staff calendar","Booking service","reads"]],recipe:{stack:"TypeScript web app and API, Postgres, a scheduled job runner for reminders.",checks:{"Availability engine":["The same slot can never be booked twice, also under concurrent requests.","Slots are correct across a daylight-saving change."]}}},{id:"mobile",name:"Mobile app with backend",sections:de({users:[["actor","App user"],["actor","Support agent"],["goal","The app opens fast, works on a weak connection and never loses what the user entered."]],experience:[["page","Onboarding"],["page","Home feed"],["page","Profile & settings"],["component","Notification inbox"],["page","Admin console"]],system:[["service","Mobile API"],["service","Auth"],["service","Notification service"],["service","Sync & background jobs"],["datastore","App database"],["datastore","Media storage"]],integrations:[["integration","Push notifications"],["integration","App store purchases"],["integration","Crash reports & analytics"]],decisions:[["decision","Offline first: the app works without network and syncs when it is back."],["decision","The API keeps older app versions working for at least 6 months."]],questions:[["question","One shared codebase or native per platform?"],["question","Sign-in: email, Apple/Google, or phone number?"],["question","Do we force updates when the API changes?"]]}),links:[["App user","Onboarding","starts"],["Onboarding","Auth","signs in"],["Home feed","Mobile API","loads"],["Profile & settings","Mobile API","saves"],["Mobile API","App database","reads and writes"],["Mobile API","Media storage","uploads"],["Notification service","Push notifications","sends"],["Notification inbox","Notification service","reads"],["Sync & background jobs","Mobile API","syncs"],["Profile & settings","App store purchases","subscribes"],["Support agent","Admin console","helps users"],["Home feed","Crash reports & analytics","reports"]],recipe:{stack:"Cross-platform mobile app, a TypeScript API, Postgres, push notifications.",checks:{"Sync & background jobs":["Changes made offline are kept and synced once the network is back."],"Mobile API":["An older app version keeps working against the new API."]}}},{id:"ai-assistant",name:"AI assistant over your data",sections:de({users:[["actor","End user"],["actor","Content owner"],["actor","Admin"],["goal","People get correct answers from the company's own documents, with sources they can check."]],experience:[["page","Chat interface"],["page","Source library"],["page","Admin & usage"]],system:[["service","Assistant service"],["service","Ingestion pipeline"],["component","Retrieval & ranking"],["datastore","Vector index"],["datastore","Document store"],["service","Evaluation & feedback"]],integrations:[["integration","Model provider"],["integration","Source connectors"],["integration","Single sign-on"]],decisions:[["decision","Every answer cites its sources; no source, no answer."],["decision","People only retrieve documents they are allowed to read."]],questions:[["question","Which sources first?"],["question","Where may customer data be processed (region, provider)?"],["question","How do we measure answer quality before launch?"]]}),links:[["End user","Chat interface","asks"],["Chat interface","Assistant service","sends question"],["Assistant service","Retrieval & ranking","finds context"],["Retrieval & ranking","Vector index","searches"],["Retrieval & ranking","Document store","reads passages"],["Assistant service","Model provider","generates answer"],["Content owner","Source library","connects sources"],["Source library","Ingestion pipeline","starts sync"],["Ingestion pipeline","Source connectors","pulls"],["Ingestion pipeline","Vector index","embeds"],["Ingestion pipeline","Document store","stores"],["Chat interface","Evaluation & feedback","rates answers"],["Chat interface","Single sign-on","signs in"]],recipe:{stack:"TypeScript web app and API, a vector index, a model provider behind one adapter.",checks:{"Assistant service":["Every answer cites at least one source; with no source it says it does not know."],"Retrieval & ranking":["A user never retrieves a document they are not allowed to read."],"Evaluation & feedback":["A fixed question set is scored before each release."]}}},{id:"internal-tools",name:"Internal tools & data pipeline",sections:de({users:[["actor","Operations team"],["actor","Data analyst"],["actor","Admin"],["goal","Operations stop working in spreadsheets; every change is traceable."]],experience:[["page","Operations dashboard"],["page","Records & search"],["page","Approvals queue"],["page","Reports"]],system:[["service","Admin API"],["service","Data pipeline"],["service","Audit log"],["datastore","Operational database"],["datastore","Analytics warehouse"]],integrations:[["integration","Company single sign-on"],["integration","Source systems (CRM, ERP)"],["integration","Team chat notifications"]],decisions:[["decision","Every change by staff is written to the audit log with who and why."],["decision","Reports read the warehouse, never the live database."]],questions:[["question","Which source systems, and how fresh must the data be?"],["question","Who approves what (roles)?"],["question","Export needs: CSV, scheduled reports?"]]}),links:[["Operations team","Operations dashboard","works in"],["Operations dashboard","Admin API","calls"],["Records & search","Admin API","calls"],["Approvals queue","Admin API","decides"],["Admin API","Operational database","reads and writes"],["Admin API","Audit log","records changes"],["Admin API","Team chat notifications","alerts"],["Data pipeline","Source systems (CRM, ERP)","pulls"],["Data pipeline","Analytics warehouse","loads"],["Data analyst","Reports","reads"],["Reports","Analytics warehouse","queries"],["Operations dashboard","Company single sign-on","signs in"]],recipe:{stack:"TypeScript web app and API, Postgres, a scheduled pipeline into an analytics warehouse.",checks:{"Audit log":["Every staff change records who, what, when and why, and cannot be edited."],"Data pipeline":["A failed run can be re-run without duplicating data."]}}},{id:"cms-site",name:"Marketing site with CMS",sections:de({users:[["actor","Visitor"],["actor","Marketing editor"],["goal","Editors publish pages themselves; visitors get a fast site that turns into leads."]],experience:[["page","Home page"],["page","Landing pages"],["page","Blog & articles"],["page","Contact & lead forms"]],system:[["component","Page building blocks"],["service","Content API"],["service","Forms & lead routing"],["component","Search & SEO"],["datastore","Content & media store"]],integrations:[["integration","Headless CMS"],["integration","CRM"],["integration","Analytics & consent"],["integration","Newsletter"]],decisions:[["decision","Editors publish without a developer, with a preview before publishing."],["decision","Pages are pre-rendered and rebuilt on publish, for speed."]],questions:[["question","How many languages at launch?"],["question","Which pages need A/B tests?"],["question","Who owns the cookie consent setup?"]]}),links:[["Visitor","Home page","lands"],["Home page","Page building blocks","built from"],["Landing pages","Page building blocks","built from"],["Blog & articles","Content API","reads"],["Page building blocks","Content API","reads"],["Content API","Headless CMS","reads"],["Content API","Content & media store","reads"],["Contact & lead forms","Forms & lead routing","submits"],["Forms & lead routing","CRM","creates lead"],["Forms & lead routing","Newsletter","subscribes"],["Marketing editor","Headless CMS","publishes"],["Home page","Analytics & consent","tracks"],["Home page","Search & SEO","described by"]],recipe:{stack:"Static-first site framework, a headless CMS, forms into the CRM.",checks:{"Home page":["Largest contentful paint under 2.5 s on a mid-range phone."],"Contact & lead forms":["A submitted lead reaches the CRM, and spam is filtered."]}}},{id:"integrations-hub",name:"Integrations hub",sections:de({users:[["actor","Customer admin"],["actor","Developer"],["actor","Support"],["goal","Customers connect their tools in minutes, and every sync can be explained and replayed."]],experience:[["page","Connections"],["page","Sync status & logs"],["page","Field mapping"],["page","API documentation"]],system:[["service","Connector service"],["service","Sync scheduler & queue"],["component","Mapping & transforms"],["service","Webhook delivery"],["service","Public API"],["datastore","Sync state & logs"],["datastore","Credential vault"]],integrations:[["integration","Third-party APIs"],["integration","OAuth providers"]],decisions:[["decision","Every sync is idempotent and can be replayed from its log."],["decision","Credentials are encrypted and never shown again after connecting."]],questions:[["question","Which connectors first?"],["question","Real-time webhooks or scheduled sync?"],["question","Rate limits and retries per provider?"]]}),links:[["Customer admin","Connections","connects tools"],["Connections","OAuth providers","authorizes"],["Connections","Credential vault","stores keys"],["Sync scheduler & queue","Connector service","runs"],["Connector service","Third-party APIs","calls"],["Connector service","Mapping & transforms","maps fields"],["Connector service","Sync state & logs","records"],["Field mapping","Mapping & transforms","configures"],["Sync status & logs","Sync state & logs","reads"],["Developer","Public API","builds on"],["Public API","Webhook delivery","emits events"],["Developer","API documentation","reads"],["Support","Sync status & logs","investigates"]],recipe:{stack:"TypeScript API and workers, a queue, Postgres for sync state, an encrypted credential store.",checks:{"Connector service":["Running the same sync twice changes nothing the second time."],"Credential vault":["Credentials are encrypted at rest and never returned by the API."]}}}],Ac=Wn.map((e)=>e.id);import{z as qn}from"zod";var Tc=qn.object({elements:qn.array(Lt).min(1).max(2000)}).strict();import{z as P}from"zod";var Yn=P.string().max(500).refine((e)=>!e.startsWith("/")&&!e.includes("\\")&&!e.split("/").includes(".."),"Use a path inside the repository"),Xn=P.object({id:P.string().regex(/^[a-z0-9][a-z0-9-]{0,63}$/),name:P.string().trim().min(1).max(100),repoId:P.string().min(1).max(100),path:Yn,platform:P.enum(["ios","android"]),framework:P.enum(["native","kmp","flutter","react-native","expo"]),buildCommand:P.string().trim().min(1).max(4000),outputPath:Yn.refine((e)=>e.length>0,"Choose an app artifact"),bundleId:P.string().regex(/^[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)+$/).max(200),scheme:P.string().trim().min(1).max(200).optional(),e2eTarget:P.string().regex(/^[a-zA-Z0-9_-]+$/).max(100).optional()}),Hc=P.object({targets:P.array(Xn).max(20)}).refine((e)=>new Set(e.targets.map((n)=>n.id)).size===e.targets.length,"App target IDs must be unique"),Kc=P.object({id:P.string(),targetId:P.string(),commitSha:P.string(),platform:P.enum(["ios","android"]),state:P.enum(["queued","building","ready","failed"]),createdAt:P.string(),expiresAt:P.string().nullable(),failureCode:P.string().nullable()}),Vc=P.object({id:P.string(),buildId:P.string(),state:P.enum(["creating","ready","stopping","stopped","failed"]),expiresAt:P.string(),endpointWebSocketUrl:P.string().optional(),streamToken:P.string().optional()}),zc=P.object({buildId:P.string().uuid(),tabId:P.string().uuid()}),Wc=P.object({targetId:Xn.shape.id,expectedCommitSha:P.string().regex(/^[a-f0-9]{40}$/).optional().describe("Require this exact published revision. An unpublished revision returns 409 source_not_published without creating a build.")});import{z as O}from"zod";var Xc=O.object({url:O.string().url(),token:O.string().min(1),payload:O.record(O.string(),O.unknown())}).loose();var bi=O.object({stopReason:O.string(),_meta:O.object({hlix:O.object({sessionId:O.string().optional(),result:O.unknown().optional()}).loose().nullable().optional()}).loose().nullable().optional()}).loose(),Zn={status:O.literal("complete"),turnId:O.string(),eventsThrough:O.number().int().nonnegative()},Zc=O.union([O.object({status:O.literal("running"),turnId:O.string()}).loose(),O.object({...Zn,error:O.string(),answer:O.unknown().nullish()}).loose(),O.object({...Zn,error:O.null().optional(),answer:bi}).loose()]);var Jc=O.object({events:O.array(O.object({offset:O.number().int(),type:O.enum(["log","usage"]),data:O.unknown().optional()}).loose()),nextOffset:O.number().int()}).loose();import{z as L}from"zod";var bt=["manager","cycleOwner","reviewer","memory","decision","utility"],Qn=["production","staging"],er=L.enum(Object.keys(c)),tr=er.refine((e)=>{let n=c[e];return n.tier!=="embedding"&&n.tier!=="media"&&e!==se.default&&!n.routesAutomatically&&!!n.capabilities},"Choose a concrete chat model"),yt=L.object({model:tr,effort:L.enum(["none","low","medium","high"]).optional()}).strict().superRefine((e,n)=>{let r=c[e.model].capabilities;if(!r?.structuredOutput)n.addIssue({code:"custom",path:["model"],message:"Choose a verified structured-output model"});if(e.effort){let o=r?.reasoning;if(!o||e.effort==="none"&&o.mandatory||o.efforts&&!o.efforts.includes(e.effort))n.addIssue({code:"custom",path:["effort"],message:"This model does not support the selected reasoning effort"})}}),nr=tr.refine((e)=>c[e].capabilities?.tools===!0,"Choose a verified tool-capable model"),Ke=L.array(nr).min(1).max(20).refine((e)=>new Set(e).size===e.length,"Choose distinct models"),Si=L.object({simple:Ke,medium:Ke,complex:Ke}).strict(),Jn=L.object({auto:Si,frontier:Ke,frontierMax:Ke,ownSubscription:L.array(nr).max(20)}).strict(),rr=L.object({manager:yt.refine((e)=>c[e.model].capabilities?.tools===!0,"Manager requires a verified tool-capable model").refine((e)=>e.effort!=="none","Manager reasoning uses the model default or a supported effort"),cycleOwner:Jn,reviewer:Jn.extend({ownSubscription:Ke}).refine((e)=>e.frontierMax.length>=2,"Frontier Max requires two distinct reviewer models"),memory:yt.refine((e)=>c[e.model].capabilities?.inputModalities.includes("image")===!0,"Remember requires a verified image-capable model"),decision:L.object({model:L.literal(se.default),fallback:yt}).strict(),utility:yt}).strict(),xi=L.object({revision:L.string().min(1).max(200),environment:L.enum(Qn),policy:rr,resolvedModels:L.partialRecord(er,L.string().regex(/^openrouter\/[a-z0-9.-]+\/[a-z0-9./:_-]+$/i)),overrides:L.object({modelSlugs:L.partialRecord(L.enum(bt),L.string().min(1).max(300)),efforts:L.partialRecord(L.enum(bt),L.enum(["low","medium","high"])),modelSources:L.partialRecord(L.enum(bt),L.enum(Ot)).optional()}).strict().optional()}).strict();import{WORKSPACE_TOOLS as fe}from"@mastra/core/workspace";import{randomBytes as vi}from"node:crypto";import{WORKSPACE_TOOLS as Ai}from"@mastra/core/workspace";var Z=".hlix/tool-output",or={beforeToolCall:({workspaceToolName:e,input:n})=>{if(e!==Ai.SANDBOX.EXECUTE_COMMAND||!n||typeof n!=="object")return;let r=n;if(r.tail==null&&!r.background&&!/\|\s*tail\s+(?:-n\s+)?-?\d+\s*$/.test(r.command??""))r.tail=0}};function ye(e){let{sandbox:n,filesystem:r}=e;if(!n?.executeCommand||!r)return e;let o=n.executeCommand.bind(n);return n.executeCommand=async(s,a,l)=>{let h=await o(s,a,{...l,maxRetainedBytes:l?.maxRetainedBytes??1/0}),g=I();if(h.stdout.length+h.stderr.length<=g)return h;let p=h.stdout&&h.stderr?Math.floor(g/2):g,y=async(k,M)=>{if(M.length<=p)return M;let G=`${Z}/${Date.now().toString(36)}-${vi(3).toString("hex")}-${k}.txt`;return await r.writeFile(`${Z}/.gitignore`,`*
19
+ `,{recursive:!0}),await r.writeFile(G,M,{recursive:!0}),X(M,{budget:p,handle:`the file ${G}`,exitCode:h.exitCode})};return{...h,stdout:await y("stdout",h.stdout),stderr:await y("stderr",h.stderr)}},e}var H={...Pt},Q=[fe.FILESYSTEM.WRITE_FILE,fe.FILESYSTEM.EDIT_FILE,fe.FILESYSTEM.APPLY_PATCH,fe.FILESYSTEM.DELETE,fe.FILESYSTEM.MKDIR,fe.FILESYSTEM.AST_EDIT,fe.SANDBOX.EXECUTE_COMMAND,fe.SANDBOX.KILL_PROCESS].map((e)=>H[e]),be=Object.values(H).filter((e)=>!Q.includes(e)),ee={...Object.fromEntries(Object.entries(H).map(([e,n])=>[e,{name:n,maxOutputTokens:e===fe.SANDBOX.EXECUTE_COMMAND?1/0:Math.ceil(I()/4)}])),hooks:or};function d(e){return H[e]??e}var _i={view:"Read",write_file:"Write",edit_file:"Edit",ast_edit:"Edit",find_files:"Find",search_content:"Search",delete_file:"Delete",file_stat:"Inspect",mkdir:"Create folder",execute_command:"Run",process_output:"Output",kill_process:"Stop",lsp_inspect:"Inspect",hlix_projects_list:"Projects",hlix_tasks_list:"Tasks"};function f(e){let n=d(e);if(n.startsWith("hlix_coder_"))return"Hlix Code";let r=_i[n];if(r)return r;let o=n.replace(/^(hlix_|mastra_workspace_|mastra_)/,"").replace(/[_-]+/g," ");return o.charAt(0).toUpperCase()+o.slice(1)}import{readFileSync as Ci,statSync as Ei}from"node:fs";import{basename as Ii,extname as ki,isAbsolute as wi,join as Ri}from"node:path";import{CombinedAutocompleteProvider as Ti,Key as dt,matchesKey as Pi}from"@earendil-works/pi-tui";function Oi(e,n=Pi){if(n(e,dt.shift("tab")))return"cycle-mode";if(n(e,dt.ctrl("c")))return"interrupt";if(n(e,dt.ctrl("o")))return"expand";if(n(e,dt.ctrl("t")))return"tasks";if(n(e,dt.escape))return"abort";return"text"}var Mi=2000;class sr{windowMs;armedAt=0;constructor(e=Mi){this.windowMs=e}press(e=Date.now()){if(this.armedAt!==0&&e-this.armedAt<=this.windowMs)return this.armedAt=0,"exit";return this.armedAt=e,"warn"}disarm(){this.armedAt=0}}function Me(e){return[...e.entries()].filter(([,n])=>!n.hidden).map(([n,r])=>({name:n,description:r.description})).sort((n,r)=>n.name.localeCompare(r.name))}var Le="Press Ctrl-C again to leave Hlix Code.";class te extends Ti{applyCompletion(e,n,r,o,s){let a=e[n]??"";if(/^\/[^\s/]*$/.test(a.slice(0,r))){let l=[...e];return l[n]=`/${o.value} ${a.slice(r)}`,{lines:l,cursorLine:n,cursorCol:o.value.length+2}}return super.applyCompletion(e,n,r,o,s)}}function Di(e=process.env){for(let n of["fd","fdfind"]){let r=Ct(n,e);if(r)return r}return null}function U(e,n){let r=e.getFocusedComponent;if(typeof r!=="function")return!1;let o=r.call(e);return o!==void 0&&o!==null&&o!==n}function ot(e){let n=new sr;return e.editor.setAutocompleteProvider(new te(Me(e.commands),e.basePath,Di())),e.editor.onSubmit=(r)=>{let o=r.trim();if(!o){e.handlers.onEmptySubmit?.();return}e.editor.addToHistory(o),e.editor.setText(""),e.handlers.onSubmit(o)},e.tui.addInputListener((r)=>{switch(Oi(r)){case"cycle-mode":return e.handlers.onCycleMode(),{consume:!0};case"interrupt":if(n.press()==="exit")e.handlers.onExit();else e.handlers.onInterruptWarning(Le);return{consume:!0};case"tasks":if(U(e.tui,e.editor))return;return n.disarm(),e.handlers.onTasks?.(),{consume:!0};case"expand":if(U(e.tui,e.editor))return;return n.disarm(),e.handlers.onExpand(),{consume:!0};case"abort":if(e.editor.isShowingAutocomplete())return;if(U(e.tui,e.editor))return;return n.disarm(),e.handlers.onAbort(),{consume:!0};default:if(n.disarm(),r==="q"&&e.editor.getText()===""&&!U(e.tui,e.editor)&&e.handlers.onQuitKey?.())return{consume:!0};return}})}var Ni={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp"},ir=8388608;function st(e,n,r=Ci,o=(s)=>Ei(s).size){let s=[],a=[],l=new Set;for(let h of e.matchAll(/(?:^|\s)@(\S+)/g)){let g=h[1],p=Ni[ki(g).toLowerCase()];if(!p||l.has(g))continue;l.add(g);let y=wi(g)?g:Ri(n,g);try{let k=o(y);if(k>ir){a.push(`@${g} is ${Math.round(k/1048576)} MB — too large to attach (limit ${ir/1048576} MB).`);continue}s.push({data:`data:${p};base64,${r(y).toString("base64")}`,mediaType:p,filename:Ii(g)})}catch{a.push(`@${g} could not be read, so it was not attached.`)}}return{content:e,files:s,notes:a}}import{Markdown as Yi,truncateToWidth as ie,visibleWidth as vr,wrapTextWithAnsi as Ve}from"@earendil-works/pi-tui";function ar(e,n){if(e.length>600||n.length>600)return[...e.map((g)=>({kind:"del",text:g})),...n.map((g)=>({kind:"add",text:g}))];let r=e.length,o=n.length,s=Array.from({length:r+1},()=>Array(o+1).fill(0));for(let g=r-1;g>=0;g-=1)for(let p=o-1;p>=0;p-=1)s[g][p]=e[g]===n[p]?s[g+1][p+1]+1:Math.max(s[g+1][p],s[g][p+1]);let a=[],l=0,h=0;while(l<r&&h<o)if(e[l]===n[h])a.push({kind:"same",text:e[l]}),l+=1,h+=1;else if(s[l+1][h]>=s[l][h+1])a.push({kind:"del",text:e[l]}),l+=1;else a.push({kind:"add",text:n[h]}),h+=1;while(l<r)a.push({kind:"del",text:e[l++]});while(h<o)a.push({kind:"add",text:n[h++]});return a}function cr(e,n,r={}){let o=r.context??2,s=ar(e.split(`
20
+ `),n.split(`
21
+ `)),a=new Set;s.forEach((p,y)=>{if(p.kind==="same")return;for(let k=y-o;k<=y+o;k+=1)if(k>=0&&k<s.length)a.add(k)});let l=[],h=0,g=()=>{if(h===0)return;l.push(` … ${h} unchanged line${h===1?"":"s"}`),h=0};return s.forEach((p,y)=>{if(!a.has(y)){h+=1;return}g(),l.push(`${p.kind==="add"?"+":p.kind==="del"?"-":" "} ${p.text}`)}),g(),l}function lr(e,n){let r=ar(e.split(`
22
+ `),n.split(`
23
+ `)),o=r.filter((a)=>a.kind==="add").length,s=r.filter((a)=>a.kind==="del").length;if(o===0&&s===0)return"";return[o>0?`+${o}`:"",s>0?`−${s}`:""].filter(Boolean).join(" ")}var Ut=(e)=>e;function St(e){return(n)=>n?`\x1B[${e}m${n}\x1B[0m`:n}var Ue={gold:{rgb:[255,204,0],cube:220},vermilion:{rgb:[230,0,23],cube:160},teal:{rgb:[54,145,119],cube:66},paper:{rgb:[229,230,232],cube:188},slate:{rgb:[151,153,157],cube:103}};function R(e=process.env,n=process.stdout.isTTY===!0){if(e.NO_COLOR!==void 0&&e.NO_COLOR!=="")return"none";let r=e.FORCE_COLOR!==void 0&&e.FORCE_COLOR!=="";if(!n&&!r)return"none";let o=(e.COLORTERM??"").toLowerCase();if(o==="truecolor"||o==="24bit")return"truecolor";if(/-direct\b/.test(e.TERM??""))return"truecolor";return"ansi256"}var Fe=(e,n)=>{if(n==="none")return Ut;if(n==="truecolor")return St(`38;2;${e.rgb[0]};${e.rgb[1]};${e.rgb[2]}`);return St(`38;5;${e.cube}`)};function ne(e=R()){return{thinking:e==="none"?Ut:St("2;3"),brand:Fe(Ue.gold,e),muted:Fe(Ue.slate,e),user:Fe(Ue.paper,e),alert:Fe(Ue.vermilion,e),ok:Fe(Ue.paper,e),added:Fe(Ue.teal,e),removed:Fe(Ue.vermilion,e)}}function u(e){return{selectedPrefix:e.brand,selectedText:e.brand,description:e.muted,scrollInfo:e.muted,noMatch:e.muted}}function re(e){return{borderColor:e.muted,selectList:u(e)}}function dr(e,n=R()){let r=(o)=>n==="none"?Ut:St(o);return{heading:e.brand,link:e.ok,linkUrl:e.muted,code:e.brand,codeBlock:e.user,codeBlockBorder:e.muted,quote:e.muted,quoteBorder:e.muted,hr:e.muted,listBullet:e.brand,bold:r("1"),italic:r("3"),strikethrough:r("9"),underline:r("4")}}function pr(e,n){let r=`tool:${String(n.toolCallId)}`,o=e.entries.find((s)=>s.id===r&&s.title?.startsWith("Team"));if(n.type==="tool_start"&&n.toolName==="hlix_team"){let s=n.args??{},a={id:r,kind:"tool",title:`Team · ${s.mode??"single"}`,text:"",tool:{name:`Team · ${s.mode??"single"}`,args:{},startedAt:Date.now(),state:"running"}};return{...e,entries:[...e.entries,a]}}if(!o)return null;if(n.type==="tool_approval_required")return{...e,approval:{toolCallId:String(n.toolCallId),toolName:"hlix_team",args:n.args}};if(n.type==="tool_update"){let s=n.partialResult;if(!s||s.event!=="team_job")return e;let a=`${r}:job:${s.index}`,l=e.entries.find((p)=>p.id===a),h=s.state==="done"||s.state==="failed",g={id:a,kind:"tool",title:s.agent,text:"",expanded:l?.expanded,tool:{name:`${s.agent} · ${s.where??"local"} · ${s.state} · ${s.costMicros===void 0?"cost unknown":D(s.costMicros,"usd",{locale:"en-US"})}`,args:{},previewTail:!0,startedAt:l?.tool?.startedAt??Date.now(),state:h?s.state==="done"?"done":"error":"running",durationMs:s.elapsedMs,result:h?s.text:(l?.tool?.result??"")+s.text}};return{...e,entries:l?e.entries.map((p)=>p.id===a?g:p):[...e.entries,g]}}if(n.type==="tool_end"){let s=n.result??{};if(typeof s==="string")try{s=JSON.parse(s)??{}}catch{s={}}return{...e,approval:e.approval?.toolCallId===String(n.toolCallId)?null:e.approval,entries:e.entries.map((a)=>a.id===r?{...a,tool:{...a.tool,state:n.isError||(s.status==="failed"||s.status==="unavailable")?"error":"done",result:s.summary??"Team finished."}}:a)}}return null}function ur(e,n){let r=pr(e,n);if(r)return r;let o=`tool:${String(n.toolCallId)}`,s=e.entries.findIndex((g)=>g.id===o&&g.tool?.name.startsWith("Delegate ·"));if(n.type==="tool_start"&&n.toolName==="hlix_delegate"){let g=n.args??{};return{...e,entries:[...e.entries,{id:o,kind:"tool",title:g.agent,text:g.task??"",tool:{name:`Delegate · ${g.agent}`,args:{task:g.task},state:"running",previewTail:!0,startedAt:Date.now()}}]}}if(s<0)return null;if(n.type==="tool_approval_required")return{...e,approval:{toolCallId:String(n.toolCallId),toolName:String(n.toolName),args:n.args}};let a=e.entries[s],l={...a.tool};if(n.type==="tool_update"){let g=n.partialResult??{};if(g.event==="finish")l.durationMs=g.durationMs;if(g.event==="text")l.result=(l.result??"")+(g.text??"");if(g.event==="tool_start"&&g.toolName)l.result=(l.result??"")+`
24
+ ${g.toolName}`}else if(n.type==="tool_end"){let g=n.result;if(typeof g==="string")try{g=JSON.parse(g)}catch{g={summary:String(g)}}l.state=n.isError||n.denied||g?.status==="failed"||g?.status==="unavailable"?"error":"done",l.result=[g?.summary??String(n.result),...g?.changedFiles??[]].join(`
25
+ `)}else return null;let h=[...e.entries];return h[s]={...a,tool:l,error:l.state==="error"},{...e,entries:h,approval:n.type==="tool_end"&&e.approval?.toolCallId===String(n.toolCallId)?null:e.approval}}var ji="subagent",it=()=>({entries:[],busy:!1,status:"",approval:null});function we(e){let n=e?.content,r=n?.parts;if(!Array.isArray(r)){let o=n?.content;return typeof o==="string"?o:""}return r.filter((o)=>{let s=o;return s.type==="text"&&typeof s.text==="string"}).map((o)=>o.text).join("")}function Li(e){let n=e?.content?.parts;if(!Array.isArray(n))return"";return n.filter((r)=>r?.type==="reasoning").map((r)=>typeof r.reasoning==="string"?r.reasoning:typeof r.text==="string"?r.text:"").join("")}function mr(e,n){let r=n??{},o=r.path??r.command??r.pattern??r.query;return typeof o==="string"?`${d(e)} ${o}`:d(e)}function gr(e){let n=e===void 0?null:/^Exit code: (\d+)$/m.exec(e);return n?Number(n[1]):void 0}function Bi(e){if(typeof e==="string")return e;if(e===void 0||e===null)return"";let n=e.content;if(Array.isArray(n))return n.map((r)=>{let o=r;return o.type==="text"&&typeof o.text==="string"?o.text:""}).filter((r)=>r!=="").join(`
26
+ `);try{return JSON.stringify(e,null,2)}catch{return String(e)}}var Ui={om_observation_start:"remembering…",om_observation_end:"",om_reflection_start:"condensing memory…",om_reflection_end:"",compaction_start:"compacting…",compaction_end:""},Fi={info:(e)=>typeof e.message==="string"?e.message:null};function at(e,n,r=Date.now()){let o=ur(e,n);if(o)return o;let s=(p,y)=>{let k=e.entries.findIndex((G)=>G.id===p),M=[...e.entries];if(k<0)M.push(y);else M[k]=y;return{...e,entries:M}},a=(p)=>({...e,entries:[...e.entries,p]}),l=(p)=>e.entries.find((y)=>y.id===p),h=(p)=>`tool:${String(p)}`,g=(p)=>`sub:${String(p)}`;switch(n.type){case"agent_start":return{...e,busy:!0,startedAt:r};case"agent_end":return{...e,busy:!1,status:"",entries:e.entries.map((p)=>p.thinking?.active?{...p,thinking:{...p.thinking,active:!1,durationMs:r-p.thinking.startedAt}}:p.streaming?{...p,streaming:!1}:p)};case"message_start":case"message_update":case"message_end":{let p=n.message;if(!p?.id)return e;let y=we(p),k=Li(p),M=e,G=`thinking:${p.id}`,K=l(G);if(k||K?.thinking){let pt=!y&&n.type!=="message_end",Kt=K?.thinking?.startedAt??r,Cr=K?.thinking?.active===!1?K.thinking.durationMs:r-Kt;if(K?.text!==(k||K?.text)||K?.thinking?.active!==pt)M=s(G,{kind:"thinking",id:G,text:k||K?.text||"",thinking:{active:pt,startedAt:Kt,durationMs:Cr}})}if(!y)return M;let J=`msg:${p.id}`,ce=n.type!=="message_end";if(l(J)?.text===y&&l(J)?.streaming===ce)return M;let ze={kind:p.role==="user"?"user":"assistant",id:J,text:y,streaming:ce},We=M.entries.findIndex((pt)=>pt.id===J),Ge=[...M.entries];if(We<0)Ge.push(ze);else Ge[We]=ze;return{...M,entries:Ge}}case"tool_start":{if(n.toolName===ji)return e;let p=h(n.toolCallId),y=d(n.toolName);return s(p,{kind:"tool",id:p,text:mr(n.toolName,n.args),tool:{name:y,args:n.args,state:"running",startedAt:r}})}case"tool_approval_required":{let p=h(n.toolCallId),y=l(p),k={toolCallId:String(n.toolCallId),toolName:n.toolName,args:n.args},M=y?.tool?{...y,tool:{...y.tool,state:"awaiting"}}:{kind:"tool",id:p,text:mr(n.toolName,n.args),tool:{name:d(n.toolName),args:n.args,state:"awaiting"}};return{...s(p,M),approval:k}}case"thread_created":return{...a({kind:"notice",id:`thread_created:${e.entries.length}`,text:"New conversation."}),tasks:[]};case"thread_changed":return{...e,tasks:[]};case"task_updated":return{...e,tasks:Array.isArray(n.tasks)?n.tasks:[]};case"shell_output":case"tool_update":{let p=h(n.toolCallId),y=l(p);if(!y?.tool||y.tool.state!=="running")return e;let k=n.type==="shell_output"?(y.tool.result??"")+String(n.output??""):y.tool.result;return s(p,{...y,tool:{...y.tool,result:k,...n.type==="tool_update"?{rawResult:n.partialResult}:{rawResult:void 0}}})}case"tool_end":{let p=h(n.toolCallId),y=l(p);if(!y?.tool)return e;let k=n.denied===!0,M=n.result?.exitCode,G=n.isError===!0||typeof M==="number"&&M!==0,K=Bi(n.result),J=s(p,{...y,error:G||k,tool:{...y.tool,result:K,rawResult:n.result,...y.tool.startedAt===void 0?{}:{durationMs:r-y.tool.startedAt},state:k?"declined":G?"error":"done",...(M??gr(K))!==void 0?{exitCode:M??gr(K)}:{}}});return e.approval?.toolCallId===String(n.toolCallId)?{...J,approval:null}:J}case"subagent_start":{let p=g(n.toolCallId);return s(p,{kind:"subagent",id:p,title:String(n.agentType),text:String(n.task??""),subagent:{agentType:String(n.agentType),task:String(n.task??""),tools:[],state:"running"}})}case"subagent_text_delta":{let p=g(n.toolCallId),y=l(p);if(!y?.subagent||y.subagent.state!=="running")return e;return s(p,{...y,subagent:{...y.subagent,result:(y.subagent.result??"")+String(n.textDelta??"")}})}case"subagent_tool_start":{let p=g(n.toolCallId),y=l(p);if(!y?.subagent)return e;return s(p,{...y,subagent:{...y.subagent,tools:[...y.subagent.tools,d(n.subToolName)]}})}case"subagent_end":{let p=g(n.toolCallId),y=l(p);if(!y?.subagent)return e;let k=n.isError===!0;return s(p,{...y,error:k,subagent:{...y.subagent,state:k?"error":"done",result:String(n.result??""),...typeof n.durationMs==="number"?{durationMs:n.durationMs}:{}}})}case"error":{let p=n.error;return a({kind:"notice",id:`error:${e.entries.length}`,text:p?.message??"The turn failed.",error:!0})}default:{let p=Ui[n.type];if(p!==void 0)return{...e,status:p};let y=Fi[n.type]?.(n);return y===null||y===void 0?e:a({kind:"notice",id:`${n.type}:${e.entries.length}`,text:y})}}}function fr(e){return e.replace(/\r\n/g,`
27
+ `).split(`
28
+ `).map((n)=>n.split("\r").reduce((r,o)=>o+r.slice(o.length),""))}function j(e){let n=e.state??(e.failed?"failed":"done");return{kind:"command",id:`cmd:${e.index}`,title:`/${e.name}`,text:e.output,...n==="failed"&&!e.report?{error:!0}:{},command:{state:n,elapsedMs:e.elapsedMs??0,...e.exitCode===void 0?{}:{exitCode:e.exitCode},...e.report?{report:e.report}:{}}}}import{visibleWidth as Vi,truncateToWidth as br,wrapTextWithAnsi as zi}from"@earendil-works/pi-tui";import{execFile as Gi}from"node:child_process";import{resolve as $i}from"node:path";import{pathToFileURL as Hi}from"node:url";import{hyperlink as Ki}from"@earendil-works/pi-tui";function hr(e){try{let n=new URL(e);if(n.protocol==="http:"||n.protocol==="https:")return n.href;if(n.protocol==="file:"&&!n.hostname)return n.href}catch{}return}function yr(e,n){let r=n,o=typeof r?.path==="string"?Hi($i(r.path)).href:typeof r?.url==="string"?hr(r.url):void 0;return o?Ki(e,o):e}function ct(e,n){let r=hr(e);if(!r){n();return}let o=process.platform==="win32"?"rundll32.exe":process.platform==="darwin"?"open":"xdg-open",s=process.platform==="win32"?["url.dll,FileProtocolHandler",r]:[r];Gi(o,s,(a)=>{if(a)n()}).unref()}var Ae=(e)=>e!==null&&typeof e==="object"&&!Array.isArray(e)?e:void 0;function xt(e){if(typeof e!=="string")return e;try{return JSON.parse(e)}catch{return e}}function ve(e){let n=Ae(e);if(Array.isArray(n?.content))return xt(n.content.map((r)=>Ae(r)?.text).filter((r)=>typeof r==="string").join(`
29
+ `));if(typeof n?.stdout==="string"){let r=Ae(xt(n.stdout));if(n.exitCode!==0&&n.exitCode!==void 0)return Ae(r?.error)?.message??r?.error??(n.stderr||n.stdout);return r?.data??xt(n.stdout)}return xt(e)}function oe(e){let n=Ae(e),r=n?.path??n?.command??n?.pattern??n?.query??n?.url;return typeof r==="string"?r.replace(/\s+/g," ").trim():""}function Wi(e){if(e.rawResult===void 0&&!e.result)return"";let n=ve(e.rawResult??e.result);if(Array.isArray(n)){let o=/projects/.test(e.name)?"projects":/tasks/.test(e.name)?"tasks":"items";return`${n.length} ${n.length===1?o.slice(0,-1):o}`}let r=Ae(n);if(r)return`{${Object.keys(r).length} keys}`;if(e.name==="view"&&typeof n==="string")return`${n.split(`
30
+ `).length} lines`;return""}function Sr(e){return[f(e.name),yr(oe(e.args),e.args),Wi(e)].filter(Boolean).join(" · ")}function qi(e,n){let r=e.map(Ae).filter((a)=>!!a),o=["name","title","status","branch"].filter((a)=>r.some((l)=>typeof l[a]==="string")).slice(0,3);if(!o.length)return[];let s=Math.max(1,Math.floor((n-(o.length-1)*2)/o.length));return r.map((a)=>o.map((l,h)=>{let g=br(String(a[l]??""),s);return h===o.length-1?g:g+" ".repeat(Math.max(0,s-Vi(g)))}).join(" "))}function xr(e,n,r){let o=ve(e.rawResult??e.result);if(o===void 0||o===null||o==="")return[];if(n)return(typeof o==="string"?o:JSON.stringify(o,null,2)).trimEnd().split(`
31
+ `);if(Array.isArray(o))return qi(o,r);let s=Ae(o);if(s){if(!e.name.startsWith("hlix_"))return[];return Object.entries(s).filter(([a,l])=>!/(^id$|Id$|_id$)/.test(a)&&["string","number","boolean"].includes(typeof l)).map(([a,l])=>`${a.replace(/_/g," ")} ${String(l)}`)}return String(o).trimEnd().split(`
32
+ `)}function Ft(e,n,r){let o=e.flatMap((a)=>zi(a,Math.max(1,n)));if(o.length<=3)return o;let s=br(`… +${o.length-2} lines · ctrl-o details`,Math.max(1,n));return r?[s,...o.slice(-2)]:[...o.slice(0,2),s]}var Xi={user:"›",assistant:" ",tool:"◇",command:"›",subagent:"↳",notice:"·",thinking:"◇"},$t=8,Ar=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],$e=(e)=>Ar[Math.floor(Math.max(0,e)/100)%Ar.length],Gt=(e,n)=>n?`${Math.floor(e/1000)}s`:`${(e/1000).toFixed(1)}s`;function Zi(e,n){if(n.state==="running")return`${e} ${$e(n.elapsedMs)} ${Gt(n.elapsedMs,!0)}`;if(n.state==="cancelled")return`${e} cancelled after ${Gt(n.elapsedMs,!0)}`;let r=n.exitCode!==void 0&&n.exitCode!==0;return`${e} ${Gt(n.elapsedMs,!1)}${r?` · exit ${n.exitCode}`:""}`}function Ht(e,n,r){let o=`┌ ${e} `,s=Math.max(0,n-o.length);return r(ie(`${o}${"─".repeat(s)}`,n))}var Ji=(e,n)=>n(ie(`└${"─".repeat(Math.max(0,e-1))}`,e));function pe(e,n,r,o){let s=Math.max(1,n-2),a=[];for(let l of e){let h=l===""?[""]:Ve(l,s);for(let g of h)a.push(ie(`${o("│")} ${r(g)}`,n))}return a}function Qi(e){let n=e.tool;if(!n)return"";let r=[],o=n.args??{};if(typeof o.old_string==="string"&&typeof o.new_string==="string"){let s=lr(o.old_string,o.new_string);if(s)r.push(s)}if(n.durationMs!==void 0)r.push(`${(n.durationMs/1000).toFixed(1)}s`);if(n.exitCode!==void 0&&n.exitCode!==0)r.push(`exit ${n.exitCode}`);return r.join(" · ")}function es(e){switch(e.tool?.state){case"running":return"◇";case"awaiting":return"?";case"declined":return"⊘";case"error":return"✗";default:return"✓"}}function ts(e){let n=e.tool;if(!n)return[];let r=n.args??{};if(typeof r.old_string==="string"&&typeof r.new_string==="string")return cr(r.old_string,r.new_string);let o=(n.result??"").trimEnd();return o===""?[]:o.split(`
33
+ `)}function _r(e,n){let r=e-n;return`… ${r} more line${r===1?"":"s"} — ctrl-o to expand`}function B(e,n){let{width:r,colors:o}=n;switch(e.kind){case"thinking":{let s=e.thinking,a=Math.floor((s?.durationMs??0)/1000),l=o.muted(ie(s?.active?`◇ Thinking… ${a}s`:`◇ Thought for ${a}s`,r)),h=e.text.split(`
34
+ `).flatMap((g)=>Ve(g,Math.max(1,r-2)));return[l,...e.expanded||s?.active?pe(e.expanded?h:h.slice(-2),r,o.thinking,o.muted):[]]}case"assistant":return os(e.text,r,o,e.streaming);case"command":return ss(e,n);case"tool":return cs(e,n);case"subagent":return ds(e,n);default:{let s=e.kind==="user"?o.user:e.error?o.alert:o.muted,a=e.error?"!":Xi[e.kind];return is(e.text,a,r,s)}}}function ns(e,n){if(/[`*_~#[\]<>\\|$:&+=-]/.test(e)||/^(?: {4}|\t| {0,3}(?:[-+=]|\d+[.)])(?:\s|$))/m.test(e))return;return e.trimEnd().split(`
35
+ `).flatMap((r)=>Ve(r,Math.max(1,n-2)).map((o)=>ie(` ${o}`,n)))}function rs(e,n){if(!n)return{committed:e,pending:""};let r=e.lastIndexOf(`
36
+ `);return{committed:e.slice(0,r+1),pending:e.slice(r+1)}}class xe{markdown;committed="";pending="";renderedText="";constructor(e){this.markdown=new Yi("",0,0,dr(e))}setText(e,n=!1){let r=rs(e,n);this.committed=r.committed,this.pending=r.pending}render(e){let n=ns(this.committed,e),r=[];if(this.committed)if(n)r=n;else{if(this.renderedText!==this.committed)this.markdown.setText(this.committed),this.renderedText=this.committed;r=this.markdown.render(Math.max(1,e-2)).map((o)=>ie(` ${o}`,e))}if(this.pending)r=[...r,...Ve(this.pending,Math.max(1,e-2)).map((o)=>ie(` ${o}`,e))];return r}invalidate(){this.markdown.invalidate()}}function os(e,n,r,o=!1){let s=new xe(r);return s.setText(e,o),s.render(n)}function is(e,n,r,o){let s=Math.max(1,r-2),a=[];for(let l of e.split(`
37
+ `)){let h=l===""?[""]:Ve(l,s);for(let g of h){let p=a.length===0?`${n} `:" ";a.push(ie(`${p}${o(g)}`,r))}}return a}function ss(e,n){let{width:r,colors:o}=n,s=e.command??{state:e.error?"failed":"done",elapsedMs:0},a=e.error?o.alert:o.muted,l=Zi(e.title??"command",s),h=Ji(r,a);if(s.report)return[Ht(l,r,a),...as(e,s,n,a),h];let g=e.text===""?["(no output)"]:fr(t(e.text,{carriageReturn:!0})),p=s.state==="running",y=e.expanded===!0?g:p?g.slice(-$t):g.slice(0,$t*3),k=g.length-y.length;return[Ht(l,r,a),...pe(y,r,e.error?o.alert:o.user,a),...k>0?pe([_r(g.length,y.length)],r,o.muted,a):[],h]}function as(e,n,r,o){let{width:s,colors:a}=r,l=n.report;if(!l)return[];let h=e.expanded===!0?l.rows:l.rows.slice(0,$t);return[...pe([`⚠ ${l.headline}`],s,a.brand,o),...h.length>0?pe(["",...h],s,a.user,o):[],...h.length<l.rows.length?pe([_r(l.rows.length,h.length)],s,a.muted,o):[],...l.notes.length>0?pe(l.notes,s,a.muted,o):[],...l.next?pe(["",`→ ${l.next}`],s,a.brand,o):[]]}function cs(e,n){let{width:r,colors:o}=n,s=e.tool,a=es(e),l=e.error?o.alert:s?.state==="running"?o.brand:o.user,h=Qi(e),g=`${a} ${s?Sr(s):e.text}`,p=r-vr(g)-vr(h)-1,y=h&&p>0?ie(`${l(g)}${" ".repeat(p)}${o.muted(h)}`,r):ie(l(g),r);if(!s||s.state==="awaiting")return[y];let k=s.args??{},M=typeof k.old_string==="string"&&typeof k.new_string==="string",G=M?ts(e):xr(s,e.expanded===!0,Math.max(1,r-2)),K=e.expanded?G:Ft(M?G.filter((J)=>/^[+-]/.test(J)):G,r-2,s.name==="execute_command"||s.name==="process_output"||s.state==="running"&&s.previewTail===!0);return[y,...ls(K,r,o)]}function ls(e,n,r){let o=Math.max(1,n-2),s=[];for(let a of e){let l=a.startsWith("+")?r.added:a.startsWith("-")?r.removed:r.muted;for(let h of a===""?[""]:Ve(a,o))s.push(ie(`${r.muted("│")} ${l(h)}`,n))}return s}function ds(e,n){let{width:r,colors:o}=n,s=e.subagent;if(!s)return[];let a=e.error?o.alert:o.muted,l=s.state==="running"?"↳":e.error?"✗":"✓",h=s.durationMs!==void 0?` · ${(s.durationMs/1000).toFixed(1)}s`:"",g=ie(`${(e.error?o.alert:o.brand)(`${l} ${f(s.agentType)}`)}${o.muted(`${h}${s.tools.length>0?` · ${s.tools.length} tool calls`:""}`)}`,r),p=[s.task];if(s.tools.length>0)p.push(`tools: ${[...new Set(s.tools.map(f))].join(", ")}`);if(s.result){let y=s.result.split(`
38
+ `),k=e.expanded===!0?y:Ft(y,r-2,s.state==="running");p.push("",...k)}return[g,...pe(p,r,o.muted,a)]}function lt(e,n){let{width:r,colors:o}=n,s=e.args??{},a=[s.command,s.path,s.pattern,s.query,s.task,s.name,s.skill].find((h)=>typeof h==="string"&&h!==""),l=f(e.toolName);return[Ht(`Approve ${l}`,r,o.alert),...pe(a?[a]:["(no arguments)"],r,o.user,o.alert)]}
39
+ export{Y,D,_e,F,Qe,Pe,T,Te,Re,je,et,tt,nt,Oe,rt,C,Ne,I,X,Z,ye,H,Q,be,ee,d,f,Me,Le,te,U,ot,st,R,ne,u,re,it,we,at,j,ct,ve,oe,$e,B,xe,lt};