@fungi.computer/grove 0.5.0 → 0.5.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.
- package/dist/assets/{anthropic-messages-B10kEhdr.js → anthropic-messages-BTv37DKo.js} +3 -3
- package/dist/assets/{azure-openai-responses-BfXWvSIh.js → azure-openai-responses-CLI5CTea.js} +1 -1
- package/dist/assets/burger-BrMTWnA6.js +1 -0
- package/dist/assets/cat-Ce0yvAsw.js +1 -0
- package/dist/assets/{compat-CbK3PtOb.js → compat-BQZx9Jx3.js} +2 -2
- package/dist/assets/{extension-hook-DLTz1137.js → extension-hook-UDdYbDsl.js} +118 -118
- package/dist/assets/extensions-DF9U5f_Z.js +1 -0
- package/dist/assets/{google-generative-ai-Fu8V-yz7.js → google-generative-ai-_8qHW2IX.js} +1 -1
- package/dist/assets/{google-shared-wlIfh6j_.js → google-shared-BjptlrJn.js} +1 -1
- package/dist/assets/{google-vertex-BgvHA6C2.js → google-vertex-C6JPlmUK.js} +1 -1
- package/dist/assets/{index-cUekAmc6.js → index-DM8ziIjn.js} +15 -15
- package/dist/assets/{mistral-conversations-BrU-wxK0.js → mistral-conversations-C_XYmgUS.js} +1 -1
- package/dist/assets/{mushroom-D6oZV5NT.js → mushroom-BTxbn3Sf.js} +1 -1
- package/dist/assets/{node.browser-Baqa49m1.js → node.browser-Bc9i4viB.js} +1 -1
- package/dist/assets/{openai-codex-responses-i1IzQiR2.js → openai-codex-responses-C0Thlbgz.js} +1 -1
- package/dist/assets/{openai-completions-DuCQ84Dy.js → openai-completions-CJJn6-l3.js} +1 -1
- package/dist/assets/{openai-responses-Vdmgof2r.js → openai-responses-BuHYr0Ip.js} +1 -1
- package/dist/assets/{openai-responses-shared-BgYppAGR.js → openai-responses-shared-px8hA25N.js} +1 -1
- package/dist/assets/parakeet-conversation-gakMmXhW.js +4 -0
- package/dist/assets/{renderer-bYZ9SYm9.js → renderer-69rvqVnj.js} +1 -1
- package/dist/assets/runtime-core-CHfIZEOV.js +40 -0
- package/dist/assets/{transform-messages-BycyMXl0.js → transform-messages-zEOZxc_F.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +9 -9
- package/dist/assets/burger-qdnxdNXn.js +0 -1
- package/dist/assets/cat-B_uav_x5.js +0 -1
- package/dist/assets/extensions-IZr7giz2.js +0 -1
- package/dist/assets/parakeet-conversation-Bnw6qiL2.js +0 -4
- package/dist/assets/runtime-core-CUZBVLjw.js +0 -40
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Qn as t,Wi as n,Xi as r,aa as i,er as a,fa as o,ia as s,ma as c,pa as l,pt as u,ua as d,va as f,ya as p}from"./Effect-TOXKEWei.js";import{Ar as m,Ci as h,Ei as ee,Fi as te,Fr as g,Hi as ne,Hr as _,Jr as v,Ki as y,Mr as re,Nr as b,Qr as x,Ri as S,Rr as C,Vr as w,Xi as T,Xr as ie,Yr as ae,Zr as E,_i as D,ai as O,ca as k,ci as A,ea as j,hi as oe,hr as se,i as M,ia as N,la as P,li as ce,oi as le,sa as ue,yi as de,zr as fe}from"./extension-hook-DLTz1137.js";import{A as F,C as pe,D as me,E as he,O as ge,S as _e,T as ve,_ as ye,_t as be,a as xe,at as Se,bt as Ce,ct as we,dt as Te,ft as Ee,gt as De,ht as Oe,i as ke,it as Ae,k as I,lt as je,mt as L,o as Me,ot as Ne,pt as Pe,r as Fe,s as Ie,st as Le,ut as R,v as Re,vt as ze,w as Be,yt as Ve}from"./index-cUekAmc6.js";import"./extensions-IZr7giz2.js";var He=(e,t)=>{if(e.length<=t)return e;let n=Math.max(1,Math.floor((t-1)/2));return`${e.slice(0,n)}…${e.slice(-(t-n-1))}`},Ue=(e,t)=>e.length<=t?e:`${e.slice(0,t-1)}…`,We=e=>e.map(([e,t])=>({label:e,value:t}));function Ge(e,t){let{record:n}=e,r=Math.max(0,n.expiresAt-t);return[[`Agent`,`${n.requester.displayName} · ${n.requester.agentId??`none`}`],[`Session`,n.requester.sessionId??`none`],[`Requester`,n.requester.principalId],[`Request`,`${n.module}.${n.operation} · ${n.access}`],[`Input`,`${n.description.inputBytes.toLocaleString()} bytes · SHA-256 ${n.description.inputSha256.slice(0,8)}…${n.description.inputSha256.slice(-6)}`],[`Expires`,`in ${String(Math.floor(r/36e5))} h ${String(Math.floor(r%36e5/6e4))} m`],[`Record`,`${n.recordId} · revision ${String(n.revision)}`]]}function Ke(e){return[`Undo`,e.record.reversibility===`irreversible-external`?`Can't be undone`:`Can be undone`]}function qe(e,t){let{record:n}=e;return{content:{title:`Allow ${n.module} · ${n.operation}?`,summary:`${n.requester.displayName} wants to use a connected tool.`,facts:[{label:`Effect`,value:(n.access===`write`?`Changes data in Fungi`:`Changes things outside Fungi`)+(n.reversibility===`irreversible-external`?` · can't be undone`:``)}],details:We([Ke(e),...Ge(e,t)])}}}function Je(e,t,n,r,i){let a=t.prefix?.join(` `),o=a!==void 0&&t.alwaysAllowUnavailableReason===void 0,s=t.command,c=`Allow \`${s}\`?`.length<=n?`Allow \`${s}\`?`:`Allow this command?`,l=t.cwd===r?`~`:t.cwd.startsWith(`${r}/`)?`~${t.cwd.slice(r.length)}`:t.cwd,u=Math.max(8,(n-8)*2-2),d=t.justification.length<=u?`“${t.justification}”`:`“${t.justification.slice(0,u-1)}…”`,f=[[`Folder`,He(l,Math.max(8,n-10))],[`Why`,d]];t.kind===`extension-install`&&f.push([`Note`,`Extensions run inside Fungi with access to every Agent.`]),o&&t.alwaysAllowCoverage!==void 0&&f.push([`Scope`,Ue(t.alwaysAllowCoverage,Math.max(8,n-12))]),!o&&t.warning!==void 0&&f.push([`Warning`,t.warning]);let p=o?`Always allow “${He(a,Math.max(8,n-5-32))}” in this project…`:void 0,m=[[`Command`,s]];return t.argv!==void 0&&m.push([`Arguments`,JSON.stringify(t.argv)]),m.push([`Folder`,t.cwd],[`Runs`,`Outside the sandbox, as you`],Ke(e)),!o&&t.alwaysAllowUnavailableReason!==void 0?m.push([`Rule`,t.alwaysAllowUnavailableReason]):t.form===`shell`?m.push([`Rule`,`Shell command: no Always-allow rule can match it.`]):o&&(m.push([`Rule`,`“${a}” would match \`${a} …\` in this project`]),t.alwaysAllowCoverage!==void 0&&m.push([`Coverage`,t.alwaysAllowCoverage]),t.risk!==void 0&&m.push([`Risk`,t.risk.detail])),!o&&t.warning!==void 0&&m.push([`Warning`,t.warning]),m.push(...Ge(e,i)),{content:{title:c,body:c===`Allow this command?`?s:void 0,bodyLabel:c===`Allow this command?`?`Command`:void 0,summary:`${e.record.requester.displayName} wants to run this outside the sandbox, as you.`,facts:We(f),details:We(m)},always:p===void 0?void 0:Ue(p,Math.max(12,n-5)),confirmation:o?{title:`Always allow “${a}” in this project?`,body:Ue(t.alwaysAllowCoverage??`Any Workspace Agent here can then run \`${a} …\` without asking.`,Math.max(12,(n-8)*2-2))}:void 0,confirmWarning:o?t.risk?.summary:void 0,confirmYes:o?`Always allow “${a}” and run it now`:void 0}}function Ye(e,t,n){let r=Math.min(n.width,60);return t===void 0?qe(e,n.now):Je(e,t,r,n.home,n.now)}function Xe(e,t){switch(e){case`stale-revision`:case`already-answered`:return`This request changed. Look again before answering.`;case`expired`:return`This request expired. Nothing ran.`;case`not-eligible`:if(t===`always-allow`)return`Always allow isn't available for this command. Approve once or deny.`}return`Couldn't answer (${e}). Nothing ran.`}var Ze=`Couldn't send your answer. It may not have been recorded.`;async function Qe(e,t){let{view:n,source:r}=t,i=Ye(n,r.review,{width:t.width,home:t.home,now:t.now}),a=n.record;try{let n,o,s=!1;for(;n===void 0;){let c=await e.prompt({type:`decision`,message:i.content.title,summary:s?`Automatic approval is on for this family.`:i.content.summary,facts:i.content.facts?.map(e=>({...e})),body:i.content.body,bodyLabel:i.content.bodyLabel,details:i.content.details?.map(e=>({...e})),options:[{value:`approve`,label:`Approve once`},...i.always===void 0?[]:[{value:`always`,label:i.always}],...r.family===void 0||s?[]:[{value:`family`,label:r.family.label}],{value:`deny`,label:`Deny`}],other:{label:`Deny and say why…`,placeholder:`A short reason for the Agent (optional)`,maxLength:t.noteLimit,blank:`deny`}});if(!t.stillCurrent())return{kind:`abandoned`};if(c.text!==void 0)o=c.text.trim()||void 0,n=`deny`;else if(c.selected[0]===`always`){let r=i.confirmation,a=await e.prompt({type:`decision`,message:r?.title??i.content.title,summary:i.confirmWarning,body:r?.body,options:[{value:`back`,label:`Back`},{value:`always-allow`,label:i.confirmYes??`Always allow`}],escape:`back`});if(!t.stillCurrent())return{kind:`abandoned`};a.selected[0]===`always-allow`&&(n=`always-allow`)}else if(c.selected[0]===`family`&&r.family!==void 0){let n=await e.prompt({type:`decision`,message:`${r.family.label}?`,summary:`Later ${a.module} requests that ${a.access===`write`?`change data in Fungi`:`reach outside Fungi`} will run without asking.`,options:[{value:`back`,label:`Back`},{value:`family`,label:r.family.label}],escape:`back`});if(!t.stillCurrent()||n.selected[0]===`family`&&(s=await r.family.enable(),!t.stillCurrent()))return{kind:`abandoned`}}else c.selected[0]===`approve`?n=`approve`:c.selected[0]===`deny`&&(n=`deny`)}let c={recordId:a.recordId,decision:n,expectedRevision:a.revision},l=await r.answer(o===void 0?c:{...c,denialNote:o});return t.stillCurrent()?l.kind===`refused`?{kind:`refused`,message:Xe(l.reason??`unknown`,n)}:{kind:`answered`}:{kind:`abandoned`}}catch(n){return e.signal.aborted?{kind:`abandoned`}:(t.onFailure(n),{kind:`refused`,message:Ze})}}var z=e(Ce(),1),$e=()=>void 0,et=()=>()=>void 0;function tt(e){let{source:t,store:n,enabled:r,home:i,width:a,noteLimit:o,onFailure:s}=e,c=(0,z.useRef)(s);c.current=s;let l=(0,z.useRef)({home:i,width:a,noteLimit:o});l.current={home:i,width:a,noteLimit:o};let u=(0,z.useSyncExternalStore)(t?.subscribe??et,t?.snapshot??$e),d=(0,z.useRef)(u);d.current=u;let f=u===void 0?void 0:JSON.stringify([`approval`,u.record.recordId,u.record.revision,u.canAnswer]);(0,z.useEffect)(()=>{let e=d.current;if(!r||t===void 0||e===void 0||!e.canAnswer||f===void 0)return;let{home:i,width:a,noteLimit:o}=l.current,s=me({title:`Approval`}),u=s.begin(),p=()=>{let n=t.snapshot();return!u.interaction.signal.aborted&&n?.record.recordId===e.record.recordId&&n.record.revision===e.record.revision&&n.canAnswer},m=n.awaiting.add({key:f,kind:`approval`,arrivedAt:Date.now(),host:s});return Qe(u.interaction,{view:e,source:t,home:i,width:a,now:Date.now(),noteLimit:o,stillCurrent:p,onFailure:e=>{c.current(e)}}).then(e=>{e.kind===`refused`?u.settle({status:`failed`,message:e.message}):(m(),u.settle(e.kind===`answered`?{status:`handled`}:{status:`cancelled`}))}),()=>{m(),s.cancel()}},[t,f,r,n])}var B=ze(),V=E.check(j(1),T(256)),nt=C.check(S(1),y(2**53-1)),rt=C.check(S(0),y(2**53-1)),it=_([`write`,`external`]),at=x({module:v(V),access:it}),ot=x({agentId:v(V)}),st=x({principalId:V,agentId:v(V),sessionId:v(V),displayName:V}),ct=x({title:E.check(j(1),T(512)),inputBytes:C.check(S(0)),inputSha256:E.check(N(/^[a-f0-9]{64}$/))}),lt=x({kind:w(`pending_approval`),recordId:V,description:ct}),ut=_([`requested`,`pending`,`approved`,`claimed`,`applied`,`denied`,`expired`,`outcome_unknown`]),dt=_([`not-found`,`not-eligible`,`already-answered`,`stale-revision`,`expired`,`declined`,`fenced`,`not-granted`,`read-only`,`pending`,`in-flight`,`outcome-unknown`,`identity-conflict`]),ft=E.check(j(1),T(512),N(/^(?=.*\S)[^\p{Cc}\u2028\u2029]*$/u)),pt=b(x({kind:w(`artifact`),ref:E.check(N(/^sha256:[a-f0-9]{64}$/)),mediaType:w(`image/png`),bytes:C.check(S(1),y(5242880))})).check(T(4)),mt=x({recordId:V,requester:st,module:V,operation:V,access:it,description:ct,evidence:P(pt),authorityFence:V,reversibility:_([`reversible`,`irreversible-external`]),state:ut,by:v(O([x({kind:w(`human`),memberId:V}),x({kind:w(`policy`)})])),reason:v(dt),denialNote:P(ft),requestedAt:rt,expiresAt:rt,updatedAt:rt,revision:nt}),H=x({record:mt,canAnswer:g,canSetAutoApprove:g});x({state:P(ut),cursor:P(V),limit:P(C.check(S(1),y(100)))}),x({recordId:V}),x({recordId:V,decision:_([`approve`,`deny`]),expectedRevision:nt,denialNote:P(ft)});var ht=x({scope:ot,family:at,enabled:g}),gt=x({kind:w(`refused`),reason:dt,denialNote:P(ft)});D(h(mt),{onExcessProperty:`error`}),de(h(mt)),D(x({record_json:E})),D(h(fe)),de(h(fe)),D(x({input_json:E,output_json:v(E)}));var _t=gt,vt=x({items:b(H),nextCursor:v(E)}),yt=O([x({kind:w(`answered`),view:H}),_t]),bt=O([x({kind:w(`updated`),rule:ht}),_t]),U=e=>Ee(f().transform(t=>D(e,{onExcessProperty:`error`})(t))),xt=De(`approvals`,1,i(()=>Pe({list:L(U(vt)),get:L(U(v(H))),answer:L(U(yt)),setAutoApprove:L(U(bt))}))),W=ce(e=>ge.safeParse(e).success,{representation:{id:`@fungi.computer/whistle/catalog-step/v1`,payload:null}});u(()=>m());var G=E.pipe(A(j(1)),A(T(4e3)),A(N(/\S/u,{message:`Goal objective is blank`}))),St=E.pipe(A(j(1)),A(T(1e3)),A(N(/\S/u))),Ct=E.pipe(A(j(1)),A(T(256))),wt=C.check(S(0)),Tt=x({kind:_([`person`,`blocked`,`stalled`,`cancelled`,`failed`,`no-terminal`]),detail:v(E)}),K=x({revision:E,objective:G,state:_([`active`,`paused`]),startedAt:wt,pauseCause:v(Tt)}),Et=x({sequence:C.check(te(0)),objective:G,outcome:_([`achieved`,`cleared`]),reason:v(St),endedAt:wt,afterSequence:C.check(S(0))}),Dt=O([x({action:w(`set`),objective:G,requestId:Ct,expectedRevision:k(v(E)),confirmed:k(g)}),x({action:_([`pause`,`resume`,`replace`,`clear`,`clear-ask`]),confirmed:k(g)}),x({})]),Ot=x({goal:v(K),ended:b(Et).check(T(16)),omitted:C.check(S(0))}),kt={id:M.make(`botanical-session-goal`),commands:{goal:{scope:`session`,input:Dt,output:W},pause:{scope:`session`,input:x({}),output:K},resume:{scope:`session`,input:x({}),output:K},clear:{scope:`session`,input:x({}),output:x({})},set:{scope:`session`,input:x({objective:G,expectedRevision:v(E),requestId:Ct,adoptCommandId:P(Ct)}),output:x({goal:K,accepted:x({status:w(`accepted`),commandId:E})})}},projection:{schema:Ot}},q=e=>{let t=e.replace(/\s+/gu,` `).trim();return t.length<=80?t:`${t.slice(0,79)}…`},At=e=>{let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`};function jt(e){let t=e.state===`active`,n=t?`Pursuing goal since ${At(e.startedAt)}`:`Goal paused (/goal resume)`,r=!t&&e.pauseCause?.detail!=null?[q(e.pauseCause.detail)]:[],i={id:`goal`,title:[n,q(e.objective),...r].join(` · `),tone:t?`running`:`muted`,actions:[{id:`goal`,label:t?`Pause goal`:`Resume goal`,input:{action:t?`pause`:`resume`}}]};return q(e.objective)===e.objective?i:{...i,detail:e.objective.slice(0,1024)}}function Mt(e){let t={id:`goal-ended`,title:`${e.outcome===`achieved`?`Goal achieved`:`Goal cleared`} · ${q(e.objective)}`,tone:e.outcome===`achieved`?`settled`:`muted`},n=e.reason===null?t:{...t,detail:e.reason};return{id:String(e.sequence),sequence:e.sequence,at:e.endedAt,commandId:null,afterSequence:e.afterSequence,rows:[n]}}var Nt=I(kt,{promptPresentation:`footer`,contribute:e=>{if(e.status!==`running`||e.value===null)return{chips:[],panel:[],timeline:{cells:[],omitted:0},waiting:null};let{goal:t,ended:n,omitted:r}=e.value;return{chips:[],panel:t===null?[]:[jt(t)],timeline:{cells:n.map(Mt),omitted:r},waiting:null}}}),J=E.pipe(A(j(1)),A(T(262144))),Pt=E.pipe(A(j(1)),A(T(200))),Ft=E.pipe(A(j(1)),A(T(256))),It=x({expression:E.pipe(A(j(1)),A(T(256))),timeZone:E.pipe(A(j(1)),A(T(128)))}),Y=x({loopId:E,origin:_([`human`,`model`]),expiresAt:v(C),prompt:J,mode:_([`self_paced`,`fixed_interval`]),cron:v(It),state:_([`active`,`paused`,`finished`,`failed`,`cancelled`]),commandId:E,reason:v(E),nextDueAt:v(C),lastError:v(E),consecutiveFailures:C.pipe(A(S(0)))}),Lt=x({loop:Y,accepted:x({status:w(`accepted`),commandId:E})}),Rt=O([x({action:w(`start`),text:J,requestId:Pt}),x({action:_([`status`,`pause`,`resume`,`stop`,`stop-ask`,`new`]),confirmed:k(g)}),x({})]),zt=x({loop:Y}),Bt=x({sessionId:Ft,loopId:Y.fields.loopId}),Vt={id:M.make(`botanical-session-loop`),commands:{list:{scope:`agent`,input:x({after:P(Ft),limit:P(C.pipe(A(ee({minimum:1,maximum:64}))))}),output:b(x({...Y.fields,sessionId:Ft})).pipe(A(T(64)))},pauseLoop:{scope:`agent`,input:Bt,output:Y},stopLoop:{scope:`agent`,input:Bt,output:Y},loop:{scope:`session`,input:Rt,output:W},startSelfPaced:{scope:`session`,input:x({prompt:J,requestId:Pt}),output:Lt},startFixedInterval:{scope:`session`,input:x({prompt:J,requestId:Pt,...It.fields}),output:Lt},pause:{scope:`session`,input:x({}),output:Y},resume:{scope:`session`,input:x({}),output:Y},stop:{scope:`session`,input:x({}),output:Y}},projection:{schema:zt}},Ht=e=>{let t=e.replace(/\s+/gu,` `).trim();return t.length<=60?t:`${t.slice(0,59)}…`},Ut=e=>e.state===`failed`?`error`:e.state===`active`?`running`:e.state===`paused`?`muted`:`settled`,Wt=e=>new Intl.DateTimeFormat(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,timeZoneName:`short`}).format(e),Gt=I(Vt,{promptPresentation:`footer`,contribute:e=>{if(e.status!==`running`||e.value===null)return{chips:[],panel:[],timeline:{cells:[],omitted:0},waiting:null};let{loop:t}=e.value,n=t.state===`active`&&t.nextDueAt!==null;return{chips:t.state!==`active`&&t.state!==`paused`?[]:[{id:`loop`,order:2,row:{id:`loop`,title:`Loop ${t.mode===`self_paced`?`self-paced`:`fixed`}${n?` (waiting)`:``}`,tone:Ut(t)}}],panel:[{id:`loop`,title:`Loop · ${t.state} · ${t.mode===`self_paced`?`self-paced`:`${t.cron?.expression??`fixed`} ${t.cron?.timeZone??``}`}${t.nextDueAt===null?``:` · Next ${Wt(t.nextDueAt)}`} · ${Ht(t.prompt)}`,detail:[t.reason,t.prompt].filter(e=>e!==null).join(`
|
|
2
|
-
`).slice(0,1024),tone:Ut(t)},...t.lastError===null?[]:[{id:`error`,title:t.lastError.slice(0,4096),tone:`error`}]],timeline:{cells:[],omitted:0},waiting:n?{summary:`Waiting until ${Wt(t.nextDueAt)}`,cancel:{id:`loop`,label:`stop loop`,input:{action:`stop-ask`}}}:null}}});function Kt(e){return x({nextSequence:C.check(te(0)),omitted:C.check(S(0)),events:b(x({id:E,sequence:C,at:C,commandId:v(E),event:e}))})}new TextEncoder;var qt=x({explanation:P(E.pipe(A(T(2e3)))),steps:b(x({step:E.pipe(A(j(1)),A(T(500))),status:_([`pending`,`in_progress`,`completed`])})).pipe(A(T(50)))});qt.pipe(A(ue(e=>e.steps.filter(e=>e.status===`in_progress`).length<=1||`At most one plan step may be in progress`)));function Jt(e){return e.steps.some(e=>e.status!==`completed`)}var Yt=x({plan:qt,history:Kt(qt)}),Xt=O([x({action:w(`clear`)}),x({})]),Zt={id:M.make(`botanical-session-plan`),commands:{plan:{scope:`session`,input:Xt,output:W}},projection:{schema:Yt}},Qt=e=>{let t=e.steps.findIndex(e=>e.status===`in_progress`),n=e.steps.filter(e=>e.status===`completed`).length;return{title:(t<0?e.steps.find(e=>e.status===`pending`):e.steps[t])?.step??`Plan complete`,detail:`${String(t<0?n:t+1)}/${String(e.steps.length)}`}},$t=e=>e.steps.map((e,t)=>({id:String(t),title:e.step,tone:e.status===`completed`?`settled`:e.status===`in_progress`?`running`:`muted`})),en=I(Zt,{contribute:e=>({chips:[],panel:e.status!==`running`||e.value===null||!Jt(e.value.plan)?[]:[{id:`plan`,...Qt(e.value.plan),actions:[{id:`plan`,label:`Clear plan`,input:{action:`clear`}}],inspection:{commandId:`plan`,title:`Plan`,rows:$t(e.value.plan)}}],timeline:{cells:[],omitted:0},waiting:null})}),X=e=>E.check(j(1),T(e),N(/\S/u)),tn=x({id:X(32).check(N(/^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/u)),header:X(12),question:X(1e3),options:b(x({label:X(60),description:X(300)})).check(j(2),T(4),ue(e=>new Set(e.map(e=>e.label)).size===e.length||`Option labels must be unique`,{representation:{id:`botanical/ask/unique-option-labels`,payload:null}})),multiple:P(g)}),nn=b(tn).check(j(1),T(4),ue(e=>new Set(e.map(e=>e.id)).size===e.length||`Question ids must be unique`,{representation:{id:`botanical/ask/unique-question-ids`,payload:null}})),rn=x({askId:E,waitingOn:P(se),questions:nn,status:_([`live`,`parked`]),createdAt:ae,expiresAt:v(ae)}),an=x({asks:b(rn).check(T(4))}),on=X(256),sn=ie(tn.fields.id,x({selected:b(X(60)).check(T(4)),text:P(E.check(T(4e3)))})),Z=x({askId:X(256),requestId:on,answers:sn}),cn=x({askId:X(256),requestId:on,note:P(E.check(T(4e3)))}),ln=_([`answered`,`declined`,`withdrawn`,`expired`,`cancelled`,`undeliverable`]),un=O([x({result:w(`accepted`),via:_([`in_turn`,`follow_up`]),commandId:P(X(256))}),x({result:w(`closed`),status:ln}),x({result:w(`not_found`)})]),dn=x({result:w(`refused`),reason:w(`not_sender`)}),fn=O([un,dn]),pn=x({kind:w(`agent`),agentId:X(256)}),mn=O([x({result:w(`escalated`),to:w(`person`)}),x({result:w(`closed`),status:ln}),x({result:w(`not_found`)}),dn]),hn=x({askId:X(256)}),gn={askId:Z.fields.askId,requestId:on,index:ae.check(ne(),ee({minimum:0,maximum:3})),answers:sn},_n=O([x({stage:w(`decision`),...gn,answer:sn.value}),x({askId:Z.fields.askId}),x({})]),vn={id:M.make(`botanical-session-question`),commands:{answerFlow:{scope:`session`,input:_n,output:W},answer:{scope:`session`,input:Z,output:un},answerAgent:{scope:`session`,input:Z,output:x({result:fn,answeredBy:pn})},escalateAgent:{scope:`session`,input:hn,output:mn},decline:{scope:`session`,input:cn,output:un},list:{scope:`session`,input:x({}),output:an}},projection:{schema:an}},yn=I(vn,{contribute:e=>({chips:[],panel:e.status!==`running`||e.value===null?[]:e.value.asks.map(e=>{let t=e.questions[0],n=`${t?.question??`Question`}${e.questions.length>1?` (+${String(e.questions.length-1)} more)`:``}`,r=t?.options.map(e=>e.label).join(` · `)??``;return e.waitingOn===void 0?{id:e.askId,title:n,detail:r,tone:`attention`,actions:[{id:`answerFlow`,label:`Answer`,input:{askId:e.askId},awaiting:`question`}]}:{id:e.askId,title:`waiting on ${e.waitingOn.name} · ${n}`,detail:r,tone:`muted`,actions:[{id:`answerFlow`,label:`Answer`,input:{askId:e.askId}}]}}),timeline:{cells:[],omitted:0},waiting:null})}),Q=E.check(j(1),T(256)),bn=_([`working`,`waiting_on_agent`,`needs_you`,`idle`,`failed`,`unavailable`]),xn=x({agentId:Q,name:Q,sessionId:v(Q),state:bn,attention:P(E.check(T(200))),waitingOn:P(Q),ask:P(x({askId:Q,questions:nn}))}),Sn=x({agents:b(xn).check(T(16)),more:C.check(S(0)),expanded:g}),Cn={agentId:Q,sessionId:Q},wn=O(_n.members.map(e=>x({...e.fields,...Cn}))),Tn={agents:{scope:`session`,input:x({}),output:W},answerChild:{scope:`session`,input:wn,output:W}},En={id:M.make(`botanical-session-subagents`),commands:Tn,projection:{schema:Sn}},$={working:{label:`working`,tone:`running`,status:`info`},waiting_on_agent:{label:`waiting`,tone:`muted`,status:`neutral`},needs_you:{label:`needs you`,tone:`attention`,status:`warning`},idle:{label:`idle`,tone:`settled`,status:`success`},failed:{label:`failed`,tone:`error`,status:`error`},unavailable:{label:`unavailable`,tone:`muted`,status:`neutral`}};function Dn(e){return e.state===`waiting_on_agent`?`waiting on ${e.waitingOn??`its parent`}`:$[e.state].label}function On(e){let t=$[e.state],n={id:e.agentId,title:`${e.name} · ${Dn(e)}`,tone:t.tone,status:{label:Dn(e),tone:t.status}},r=e.ask?.questions[0]?.question??e.attention,i=r===void 0?n:{...n,detail:r.slice(0,200)};if(e.sessionId===null)return{...i,detail:e.attention??`not messaged yet`};let a={...i,open:{params:[{key:`agent`,value:e.agentId},{key:`session`,value:e.sessionId}]}};if(e.ask===void 0)return a;let o={id:`answerChild`,label:`Answer`,input:{agentId:e.agentId,sessionId:e.sessionId,askId:e.ask.askId}};return{...a,actions:[e.state===`needs_you`?{...o,awaiting:`question`}:o]}}function kn(e){let t=t=>e.agents.filter(e=>e.state===t).length,n=e.agents.filter(e=>e.state===`waiting_on_agent`),r=[...new Set(n.map(e=>e.waitingOn??`its parent`))].map(e=>`${String(n.filter(t=>(t.waitingOn??`its parent`)===e).length)} waiting on ${e}`),i=[...[`working`].map(e=>[e,t(e)]).filter(([,e])=>e>0).map(([e,t])=>`${String(t)} ${$[e].label}`),...r,...[`needs_you`,`failed`,`unavailable`].map(e=>[e,t(e)]).filter(([,e])=>e>0).map(([e,t])=>`${String(t)} ${$[e].label}`)],a=e.agents.length+e.more,o=t(`needs_you`)>0?`attention`:t(`failed`)>0?`error`:t(`working`)>0?`running`:`muted`;return{id:`summary`,title:[`${String(a)} sub-agent${a===1?``:`s`}`,...i,`/agents shows them`].join(` · `),tone:o}}var An=I(En,{contribute:e=>({chips:[],panel:e.status!==`running`||e.value===null?[]:e.value.agents.length>0&&!e.value.expanded?[kn(e.value)]:[...e.value.agents.map(On),...e.value.more===0?[]:[{id:`more`,title:`${String(e.value.more)} more sub-agent${e.value.more===1?``:`s`}`,tone:`muted`}]],timeline:{cells:[],omitted:0},waiting:null})});function jn(e,t){if(e===null||!URL.canParse(t))return!1;let n=new URL(t);return n.protocol!==`https:`||n.hash!==`#team-billing`?!1:(e.openTeamBilling().catch(t=>(console.error(`Chat Billing navigation failed`,t),e.showToast({message:`Billing could not be opened. Please try again.`,tone:`error`}))),!0)}function Mn(e,t){e!==null&&e.showToast({message:t.message,tone:t.variant}).catch(e=>{console.error(`Chat toast failed`,e)})}function Nn(e){if(e.name!==`execute`||e.status!==`completed`)return;let n=e.result?.content;if(n?.length!==1||n[0]?.type!==`text`)return;let r=oe(h(le))(n[0].text);if(t(r))return;let i=he.safeParse(r.value);return i.success?i.data.file:void 0}function Pn({item:e,ui:t}){let n=Nn(e),[r,i]=(0,z.useState)(!1),[a,o]=(0,z.useState)(!1);if(!n)return null;let s=async()=>{i(!0),o(!1);try{await t.openNavigation(n)}catch(e){console.error(`Chat file navigation failed`,e),o(!0)}finally{i(!1)}};return(0,B.jsxs)(`div`,{className:`px-3 py-2`,children:[(0,B.jsx)(F,{variant:`ghost`,size:`sm`,disabled:r,onClick:()=>void s(),type:`button`,children:r?`Opening file…`:`Open ${n.path} in Inkcap`}),a?(0,B.jsx)(`p`,{role:`alert`,children:`The file could not be opened. Try again.`}):null]})}var Fn=O([x({kind:w(`compose`),text:E.pipe(A(j(1)),A(T(2e3)))}),x({kind:w(`navigate`),params:b(x({key:E.pipe(A(j(1)),A(T(64))),value:E.pipe(A(T(1024)))})).pipe(A(T(16)))})]);O([x({role:E.pipe(A(j(1)),A(T(80))),intent:Fn}),x({appId:E.pipe(A(j(1)),A(T(128))),intent:Fn})],{mode:`oneOf`});var In=l({displayName:c().min(1).max(80).nullable()}).nullable(),Ln=De(`apps.open`,1,i(()=>Pe({open:Oe,role:L(Ee(In))}))),Rn=(e,t)=>e.require(Ln).open(t);De(`apps.call`,1,i(()=>Pe({call:L(Ee(f().transform(e=>Ve(e))))})));var zn=d({printId:c().min(1).max(256),destination:l({computerId:c().min(1),path:c().min(1)}),format:n([`png`,`jpeg`,`gif`,`webp`])}),Bn=s(),Vn=r(Bn).or(o(c(),Bn).transform(e=>Object.values(e)));function Hn(e,t){let n=zn.safeParse(e);if(n.success)return[n.data];if(t>=3)return[];let r=Vn.safeParse(e);return r.success?r.data.flatMap(e=>Hn(e,t+1)):[]}var Un=Bn.transform(e=>Hn(e,0)).pipe(r(zn).min(1).max(8));function Wn(e){if(e.name!==`execute`||e.status!==`completed`||e.result===void 0)return;let n=e.result.content,r=n.at(0);if(r?.type!==`text`||n.slice(1).some(e=>e.type!==`image`))return;let i=oe(h(le))(r.text);if(t(i))return;let a=Un.safeParse(i.value);return a.success?a.data:void 0}function Gn(e){return Wn(e)!==void 0}function Kn({printId:e,pictures:t,capabilities:n}){let[r,i]=(0,z.useState)(!1),[a,o]=(0,z.useState)(!1),s=async()=>{i(!0),o(!1);try{await Rn(n,{role:`media`,intent:{kind:`navigate`,params:[{key:`print`,value:e}]}})}catch(e){console.error(`Chat print navigation failed`,e),o(!0)}finally{i(!1)}};return(0,B.jsxs)(`div`,{className:`flex flex-col items-start gap-2 px-3 py-2`,children:[t.map((e,t)=>(0,B.jsx)(`img`,{alt:`Panel saved in Prints`,className:`max-w-full rounded-box`,src:`data:${e.mimeType};base64,${e.data}`,style:{maxHeight:320}},t)),(0,B.jsx)(F,{variant:`outline`,size:`sm`,disabled:r,onClick:()=>void s(),type:`button`,children:r?`Opening Prints…`:`Open in Prints`}),a?(0,B.jsx)(`p`,{role:`alert`,children:`Prints could not be opened. Try again.`}):null]})}function qn({item:e,capabilities:t}){let n=Wn(e);if(n&&t){let r=(e.result?.content??[]).flatMap(e=>e.type===`image`?[e]:[]),i=r.length===n.length;return(0,B.jsx)(B.Fragment,{children:n.map((e,n)=>(0,B.jsx)(Kn,{printId:e.printId,pictures:i?r.slice(n,n+1):n===0?r:[],capabilities:t},e.printId))})}return null}var Jn=oe(h(lt),{onExcessProperty:`error`});function Yn(e){if(!(e.status!==`completed`||e.result?.isError))for(let t of e.result?.content??[]){if(t.type!==`text`)continue;let e=Jn(t.text);if(a(e))return e.value.recordId}}var Xn=(0,z.createContext)(void 0);function Zn(){return(0,z.useContext)(Xn)}var Qn=`Couldn't send your answer. It may not have been recorded.`;function $n({recordId:e,attempt:t,capabilities:n,agentId:r,publish:i}){let a=Be(),[o,s]=(0,z.useState)(),c=(0,z.useRef)(void 0),l=(0,z.useRef)(new Set),u=(0,z.useCallback)(t=>{c.current=t??void 0,s(t),i(e,{view:t,failed:!1});for(let e of l.current)e()},[i,e]);(0,z.useEffect)(()=>{c.current=void 0,s(void 0)},[n]),(0,z.useEffect)(()=>{let t=!0;async function r(){try{let r=await n.require(xt).get({recordId:e});t&&u(r)}catch(n){console.warn(`Grove could not read the approval`,n),t&&i(e,{view:null,failed:!0})}}return r(),()=>{t=!1}},[n,e,t,u,i]);let d=o?.canAnswer===!0&&o.record.state===`pending`,f=o?.canSetAutoApprove===!0,p=o?.record.module,m=o?.record.access;return tt({source:(0,z.useMemo)(()=>{if(d)return{snapshot:()=>c.current,subscribe:e=>(l.current.add(e),()=>{l.current.delete(e)}),answer:async e=>{let t=n.require(xt),r=e.decision===`always-allow`?void 0:{recordId:e.recordId,decision:e.decision,expectedRevision:e.expectedRevision};if(r===void 0)return{kind:`refused`,reason:`not-eligible`};let i=await t.answer(e.denialNote===void 0?r:{...r,denialNote:e.denialNote});return i.kind===`answered`&&u(i.view),i},family:!f||p===void 0||m===void 0?void 0:{label:`Always approve this family`,enable:async()=>(await n.require(xt).setAutoApprove({scope:{agentId:r},family:{module:p,access:m},enabled:!0})).kind===`updated`}}},[d,n,r,f,p,m,u]),store:a,enabled:!0,home:``,width:72,noteLimit:512,onFailure:er}),null}function er(e){console.warn(Qn,e)}function tr({capabilities:e,agentId:t,children:n}){let r=ve(),i=(0,z.useMemo)(()=>{let e=new Set;for(let t of[...r.settled,...r.tail])if(t.kind===`tool_group`)for(let n of t.tools){let t=Yn(n);t!==void 0&&e.add(t)}return[...e]},[r.settled,r.tail]),[a,o]=(0,z.useState)(new Map),[s,c]=(0,z.useState)(new Map),l=(0,z.useCallback)((e,t)=>{o(n=>new Map(n).set(e,t))},[]),u=(0,z.useMemo)(()=>({entry:e=>a.get(e),refresh:e=>{c(t=>new Map(t).set(e,(t.get(e)??0)+1))},agentId:t}),[a,t]);return(0,B.jsxs)(Xn.Provider,{value:e===void 0?void 0:u,children:[e===void 0?null:i.map(n=>(0,B.jsx)($n,{recordId:n,attempt:s.get(n)??0,capabilities:e,agentId:t,publish:l},n)),n]})}var nr={requested:`Approval requested.`,pending:`Pending approval.`,approved:`Approved. Waiting to run.`,applied:`Done.`,denied:`Denied.`,expired:`Expired. Nothing ran.`,claimed:`Dispatch in progress.`,outcome_unknown:`Outcome unknown. Check before trying again.`};function rr({view:e,scope:t,onRefresh:n,onAnswer:r}){let{record:i}=e,a=e.canAnswer&&i.state===`pending`;return(0,B.jsxs)(Se,{role:`group`,"aria-label":`Approval request`,density:`compact`,children:[(0,B.jsxs)(we,{children:[(0,B.jsxs)(je,{children:[a?`Allow `:``,i.module,` · `,i.operation,a?`?`:``]}),(0,B.jsxs)(`p`,{children:[i.requester.displayName,` wants to use a connected tool.`]})]}),(0,B.jsxs)(Ne,{className:`min-w-0 space-y-2`,children:[(0,B.jsxs)(`p`,{children:[`Effect`,` `,i.access===`write`?`Changes data in Fungi`:`Changes things outside Fungi`,i.reversibility===`irreversible-external`?` · can't be undone`:``]}),(0,B.jsx)(`p`,{role:`status`,children:a?`Waiting for your answer.`:nr[i.state]}),(0,B.jsxs)(`details`,{children:[(0,B.jsx)(`summary`,{children:`Details`}),(0,B.jsxs)(`p`,{children:[`Requester: `,i.requester.principalId]}),(0,B.jsxs)(`p`,{children:[`Agent: `,i.requester.displayName,` ·`,` `,i.requester.agentId??`none`]}),(0,B.jsxs)(`p`,{children:[`Session: `,i.requester.sessionId??`none`]}),(0,B.jsxs)(`p`,{children:[`Request: `,i.module,`.`,i.operation,` · `,i.access]}),(0,B.jsxs)(`p`,{children:[`Undo:`,` `,i.reversibility===`irreversible-external`?`Can't be undone`:`Can be undone`]}),(0,B.jsxs)(`p`,{children:[`Can answer: `,e.canAnswer?`Yes`:`No`]}),(0,B.jsxs)(`p`,{children:[`Can set auto-approve: `,e.canSetAutoApprove?`Yes`:`No`]}),i.by?.kind===`policy`?(0,B.jsx)(`p`,{children:`Auto-approved by policy`}):null,(0,B.jsx)(`p`,{children:i.description.title}),(0,B.jsxs)(`p`,{className:`break-all`,children:[`Input: `,i.description.inputBytes,` bytes · SHA-256`,` `,i.description.inputSha256]}),(0,B.jsxs)(`p`,{children:[`Record: `,i.recordId,` · revision `,i.revision]}),e.canSetAutoApprove?(0,B.jsxs)(`p`,{children:[`Policy scope:`,` `,t.agentId===null?`whole home`:`agent ${t.agentId}`]}):null]})]}),(0,B.jsxs)(Le,{className:`flex flex-wrap gap-2`,children:[a?(0,B.jsx)(F,{variant:`outline`,onClick:r,children:`Answer`}):null,(0,B.jsx)(F,{variant:`ghost`,onClick:n,children:`Refresh approval`})]})]})}function ir({recordId:e}){let t=Zn(),n=Be(),r=t?.entry(e);return t===void 0||r===void 0?null:r.failed?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{role:`alert`,children:`Couldn't load this approval. Try again.`}),(0,B.jsx)(F,{variant:`ghost`,onClick:()=>{t.refresh(e)},children:`Refresh approval`})]}):r.view===null||r.view.record.state===`expired`?null:(0,B.jsx)(rr,{view:r.view,scope:{agentId:t.agentId},onRefresh:()=>{t.refresh(e)},onAnswer:()=>{n.awaiting.focus()}})}var ar=(0,z.forwardRef)(function({heading:e,eyebrow:t,cover:n,action:r,children:i,className:a,...o},s){return(0,B.jsxs)(Se,{...o,className:R(`caps-game-share`,a),ref:s,children:[n?(0,B.jsx)(`div`,{className:`caps-game-share-cover`,children:n}):null,(0,B.jsxs)(we,{children:[t,(0,B.jsx)(`h3`,{className:`caps-game-share-heading`,children:e})]}),(0,B.jsx)(Ne,{className:`gap-sm`,children:i}),(0,B.jsx)(Le,{children:(0,B.jsx)(F,{asChild:!0,variant:`primary`,className:`caps-game-share-action`,children:r})})]})});function or(e){let t=0;return e.map(e=>{let n={...e,offset:t};return t+=e.text.length,n})}function sr({value:e,label:t,fieldLabel:n,displayValue:r,layout:i,title:a,tokens:o,className:s,...c}){let l=(0,z.useId)(),[u,d]=(0,z.useState)({kind:`ready`}),f=o?o.map(e=>e.text).join(``):e,p=async()=>{d(await navigator.clipboard.writeText(f).then(()=>({kind:`copied`}),e=>({kind:`failed`,cause:e})))};if(n!==void 0)return(0,B.jsxs)(`div`,{...c,className:R(`caps-copy-field-input`,s),children:[(0,B.jsx)(Me,{htmlFor:l,children:n}),(0,B.jsxs)(xe,{children:[(0,B.jsx)(Ie,{className:`caps-copy-field-control`,"aria-label":n,id:l,onFocus:e=>{e.currentTarget.select()},readOnly:!0,value:r??f}),(0,B.jsx)(F,{onClick:()=>void p(),size:`sm`,variant:`outline`,children:u.kind===`copied`?`Copied`:t??`Copy`})]}),u.kind===`failed`?(0,B.jsx)(`span`,{role:`status`,children:`Could not copy. Select the text to copy it.`}):null]});let m=u.kind===`copied`?`Copied`:u.kind===`failed`?`Copy failed`:t??`Copy`;return i===`block`?(0,B.jsxs)(`figure`,{...c,className:R(`caps-copy-field-block`,s),"data-state":u.kind,children:[(0,B.jsxs)(`figcaption`,{className:`caps-copy-field-header`,children:[(0,B.jsx)(`span`,{className:`caps-copy-field-title`,children:a}),(0,B.jsxs)(F,{onClick:()=>void p(),size:`sm`,variant:u.kind===`copied`?`ghost`:`outline`,children:[u.kind===`copied`?(0,B.jsx)(Re,{"aria-hidden":`true`,size:15}):(0,B.jsx)(ye,{"aria-hidden":`true`,size:15}),m]}),(0,B.jsx)(Ae,{role:`status`,children:u.kind===`copied`?`Copied to the clipboard`:u.kind===`failed`?`Could not copy. Select the code to copy it.`:``})]}),(0,B.jsx)(`pre`,{className:`caps-copy-field-code`,tabIndex:0,children:(0,B.jsx)(`code`,{children:o?or(o).map(e=>(0,B.jsx)(`span`,{className:`caps-copy-field-token`,"data-kind":e.kind,children:e.text},e.offset)):f})})]}):(0,B.jsxs)(`div`,{...c,className:R(`caps-copy-field`,s),children:[(0,B.jsx)(`code`,{className:`caps-copy-field-value`,children:f}),(0,B.jsxs)(F,{"aria-label":`${m}: ${f}`,onClick:()=>void p(),size:`sm`,variant:`outline`,children:[u.kind===`copied`?(0,B.jsx)(Re,{size:15}):(0,B.jsx)(ye,{size:15}),m]})]})}var cr=d({game:d({title:c().min(1),summary:c(),coverUrl:p().nullable(),shareUrl:p()})});function lr(e){let t=/(?:^|\n)\s*Share:\s*(https?:\/\/[^\s<>]+)/iu.exec(e);if(!t?.[1])return null;let n=t[1].replace(/[.,;!?]+$/u,``);if(!URL.canParse(n))return null;let r=new URL(n);return r.username||r.password||r.hash||r.protocol===`http:`&&![`localhost`,`127.0.0.1`].includes(r.hostname)?null:r.href}function ur(e){return lr(e)?e.split(`
|
|
3
|
-
`).filter(e=>!/^\s*Share:\s*/iu.test(e)).join(`
|
|
4
|
-
`).trim():e}function dr(e){let t=new URL(e),n=/^\/([a-z0-9]+(?:-[a-z0-9]+)*)\/?$/u.exec(t.pathname)?.[1];return!n||t.search?null:new URL(`/api/games/${n}`,t.origin)}function fr({reply:e,previewGame:t}){let n=lr(e),r=n?dr(n):null,{data:i}=be({queryKey:Te.of(null,`game-share`,n),enabled:r!==null&&t===void 0,queryFn:async({signal:e})=>{if(!r)return null;let t=await fetch(r,{signal:e});if(!t.ok)return null;let i=cr.safeParse(await t.json());return i.success&&i.data.game.shareUrl===n?i.data.game:null}}),a=t??i;if(!n)return null;let o=new URL(n),s=`${o.host}${o.pathname.replace(/\/$/u,``)}`,c=a?.coverUrl&&r?t?a.coverUrl:new URL(`${r.pathname}/cover`,r.origin).href:null;return(0,B.jsxs)(ar,{"data-game-share-card":`true`,"data-theme":`vishnu`,heading:a?.title??`Your game is ready`,eyebrow:(0,B.jsx)(ke,{tone:`secondary`,variant:`quiet`,children:`Made with your Agent`}),cover:c?(0,B.jsx)(`img`,{alt:`A scene from ${a?.title??`your game`}`,src:c}):null,action:(0,B.jsx)(`a`,{href:n,rel:`noopener noreferrer`,target:`_blank`,children:`Play ↗`}),children:[a?.summary?(0,B.jsx)(`p`,{className:`text-sm`,children:a.summary}):null,(0,B.jsx)(sr,{displayValue:s,fieldLabel:`Share link`,label:`Copy link`,value:n})]})}var pr=[Nt,Gt,en,yn,An],mr=e=>(0,B.jsx)(fr,{reply:e});function hr({prefill:e,onPrefilled:t}){let n=pe(),r=(0,z.useRef)(null);return(0,z.useEffect)(()=>{!e||r.current===e.requestId||(r.current=e.requestId,n.setDraft(e.text),t())},[n.setDraft,t,e]),null}function gr({session:e,draftIdentity:t,connection:n,commands:r,prefill:i=null,onPrefilled:a=()=>void 0,onOpen:o}){let s=n?.ui??null,c=n?.capabilities,l=(0,z.useCallback)(e=>jn(s,e),[s]),u=(0,z.useCallback)(e=>{let t=Yn(e);return t!==void 0&&c!==void 0?(0,B.jsx)(ir,{recordId:t},t):s?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Pn,{item:e,ui:s}),(0,B.jsx)(qn,{item:e,capabilities:c})]}):null},[s,c]),d=(0,z.useCallback)(e=>c!==void 0&&Gn(e),[c]),f=(0,z.useCallback)(e=>{Mn(s,e)},[s]);return(0,B.jsxs)(_e,{session:e,draftIdentity:t,clients:pr,authorOf:re,onToast:f,children:[(0,B.jsx)(hr,{prefill:i,onPrefilled:a}),(0,B.jsx)(tr,{capabilities:c,agentId:t.agentId,children:(0,B.jsx)(Fe,{onLink:l,onOpen:o,composerActionVariant:`outline`,commands:r,renderAssistantAttachment:mr,formatAssistantText:ur,renderToolActions:u,claimsToolMedia:d})})]})}export{gr as ParakeetConversation};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-hePW80VL.js";import{$ as t,Bn as n,D as r,F as i,G as a,Gr as o,I as s,Jn as c,K as l,O as u,P as d,Q as f,Qn as p,R as m,St as h,V as g,Wi as _,Xi as v,Xn as ee,Y as te,Yn as ne,Zn as y,_ as re,_a as b,a as x,aa as S,at as ie,bt as ae,c as oe,ct as se,d as ce,dt as C,er as w,et as le,ft as T,g as E,gt as ue,h as D,ht as O,i as de,ia as fe,ir as k,j as A,la as j,m as pe,ma as M,mi as me,mt as N,n as he,o as P,oa as ge,or as F,ot as _e,p as ve,pa as ye,pt as I,r as be,s as L,sr as xe,st as Se,t as Ce,ua as we,ut as Te,vt as Ee,w as De,xt as Oe,y as R,yt as z}from"./Effect-TOXKEWei.js";import{$ as ke,$a as Ae,$n as je,$r as Me,$t as Ne,A as Pe,An as Fe,Ar as Ie,At as Le,B as Re,Ba as ze,Bn as Be,Br as Ve,Bt as He,C as Ue,Ci as We,Cn as Ge,Ct as Ke,D as qe,Dn as Je,Dt as Ye,E as Xe,En as Ze,Et as Qe,F as $e,Fa as et,Fi as tt,Fn as nt,Fr as rt,Ft as it,G as at,Gn as ot,Gr as st,Gt as ct,H as lt,Ha as ut,Hn as dt,Hr as ft,Ht as pt,I as mt,Ia as ht,In as gt,It as _t,J as vt,Ja as yt,Jt as bt,K as xt,Ki as St,Kn as Ct,Kr as wt,Kt as Tt,L as Et,La as Dt,Ln as Ot,Lr as kt,Lt as At,M as jt,Mn as Mt,Mr as Nt,Mt as Pt,N as Ft,Nn as It,Nr as Lt,Nt as Rt,O as zt,On as Bt,Ot as Vt,P as Ht,Pn as Ut,Pr as Wt,Pt as Gt,Q as Kt,Qa as qt,Qr as B,Qt as Jt,R as Yt,Ra as Xt,Ri as Zt,Rn as Qt,Rr as $t,Rt as en,S as tn,Sa as nn,Si as rn,Sn as an,Sr as on,St as sn,T as cn,Tn as ln,Tr as un,Tt as dn,U as fn,Ua as pn,Un as mn,Ut as hn,V as gn,Va as _n,Vn as vn,Vr as yn,Vt as bn,W as xn,Wn as Sn,Wt as Cn,X as wn,Xa as Tn,Xi as En,Xn as Dn,Xr as On,Xt as kn,Y as An,Ya as jn,Yr as Mn,Yt as Nn,Z as Pn,Za as Fn,Zr as In,Zt as Ln,_ as Rn,_i as zn,_n as Bn,_t as Vn,a as Hn,ai as Un,an as Wn,ao as Gn,ar as Kn,at as qn,b as Jn,bi as Yn,bn as Xn,bt as Zn,c as Qn,ca as $n,ci as V,cn as er,cr as H,ct as tr,da as nr,di as rr,dn as ir,dr as ar,dt as or,ea as sr,en as cr,eo as lr,er as ur,et as dr,fa as U,fi as fr,fn as pr,fr as W,ft as mr,g as hr,gi as G,gn as gr,gr as _r,gt as vr,h as yr,ha as br,hn as xr,ht as Sr,i as Cr,ia as wr,ii as Tr,in as Er,ir as Dr,it as Or,j as kr,jn as Ar,jr,jt as Mr,k as Nr,kn as Pr,kr as Fr,kt as Ir,la as K,ln as Lr,lr as Rr,lt as zr,mn as Br,mr as Vr,mt as Hr,n as Ur,nn as Wr,no as Gr,nt as Kr,o as qr,oi as Jr,on as Yr,or as Xr,ot as Zr,pa as Qr,pn as $r,pr as ei,pt as ti,q as ni,qn as ri,qt as ii,r as ai,rn as oi,ro as si,rt as ci,s as li,sa as ui,sn as di,sr as fi,st as pi,t as mi,ti as hi,tn as q,to as gi,tt as _i,un as vi,ur as yi,ut as bi,v as xi,vi as Si,vn as Ci,vr as wi,vt as Ti,w as Ei,wt as Di,x as Oi,xn as ki,xr as Ai,xt as ji,y as Mi,yi as Ni,yn as Pi,yr as Fi,yt as Ii,z as Li,za as Ri,zn as zi,zr as Bi,zt as Vi}from"./extension-hook-DLTz1137.js";import{l as Hi,m as Ui,p as Wi}from"./preload-helper-DY31Aviq.js";import{b as Gi,x as Ki,y as qi}from"./index-cUekAmc6.js";import{a as Ji,i as Yi,n as Xi,o as Zi,r as Qi,t as $i}from"./extensions-IZr7giz2.js";var ea=nr(()=>Ta),ta=Lt(ea),na=B({id:wt,payload:Bi}),ra=B({...na.fields,schemas:$n(ta)});function ia(e){let t={};for(let[n,r]of Object.entries(e))nn(r)&&o(t,n,r);return Object.keys(t).length===0?k():F(t)}var aa=$n(On(In,Jr)).pipe(Yn(K(Ve),{decode:et(),encode:Dt(e=>p(e)||e.value===void 0?k():ia(e.value))})),oa=nr(()=>la),sa=Lt(oa),ca={annotations:aa,checks:sa},la=Un([B({_tag:U(`Filter`),representation:ra,annotations:aa,aborted:rt}),B({_tag:U(`FilterGroup`),representation:$n(ra),annotations:aa,checks:st(oa)})]);function J(e){return B({_tag:U(e),...ca})}var ua=B({_tag:U(`Declaration`),representation:na,annotations:aa,typeParameters:ta,checks:sa}),da=B({_tag:U(`Suspend`),annotations:aa,checks:hi([]),thunk:ea});function fa(e,t){return t.pipe(Yn(B({type:U(e),value:t}),{decode:ht(e=>e.value),encode:ht(t=>({type:e,value:t}))}))}var pa=fa(`string`,In),ma=fa(`number`,Mn),ha=B({_tag:U(`Literal`),...ca,literal:Un([pa,fa(`number`,kt),fa(`bigint`,Wt),fa(`boolean`,rt)])}),ga=B({_tag:U(`UniqueSymbol`),...ca,symbol:Me}),_a=B({_tag:U(`Enum`),...ca,enums:Lt(hi([In,Un([pa,ma])]))}),va=B({_tag:U(`TemplateLiteral`),...ca,parts:ta}),ya=B({isOptional:rt,type:ea,annotations:aa}),ba=B({_tag:U(`Arrays`),...ca,elements:Lt(ya),rest:ta}),xa=B({name:Un([pa,ma,fa(`symbol`,Me)]),type:ea,isOptional:rt,isMutable:rt,annotations:aa}),Sa=B({parameter:ea,type:ea}),Ca=B({_tag:U(`Objects`),...ca,propertySignatures:Lt(xa),indexSignatures:Lt(Sa)}),wa=B({_tag:U(`Union`),...ca,types:ta,options:K(B({mode:K(ft([`anyOf`,`oneOf`]))}))}),Ta=Un([ua,B({_tag:U(`Reference`),$ref:wt}),da,J(`Null`),J(`Undefined`),J(`Void`),J(`Never`),J(`Unknown`),J(`Any`),J(`String`),J(`Number`),J(`Boolean`),J(`BigInt`),J(`Symbol`),J(`ObjectKeyword`),ha,ga,_a,va,ba,Ca,wa]),Ea=Ni(Qr(B({representation:ea,references:On(In,ea)})));function Da(e){return Ea(e)}function Oa(e){return e.sql.exec(`CREATE TABLE IF NOT EXISTS shiitake_fleet_delegations (
|
|
2
|
-
request_id TEXT PRIMARY KEY, input TEXT NOT NULL, mail TEXT NOT NULL,
|
|
3
|
-
receipt TEXT
|
|
4
|
-
) STRICT`),e.sql.exec(`CREATE TABLE IF NOT EXISTS shiitake_fleet_held_delegations (
|
|
5
|
-
request_id TEXT PRIMARY KEY
|
|
6
|
-
) STRICT`),e.sql.exec(`CREATE TABLE IF NOT EXISTS shiitake_fleet_undeliverable_delegations (
|
|
7
|
-
request_id TEXT PRIMARY KEY
|
|
8
|
-
) STRICT`),e.sql.exec(`CREATE TABLE IF NOT EXISTS shiitake_fleet_settled_delegations (
|
|
9
|
-
request_id TEXT PRIMARY KEY
|
|
10
|
-
) STRICT`),{read:t=>e.sql.exec(`SELECT delegation.input, delegation.mail,
|
|
11
|
-
CASE
|
|
12
|
-
WHEN terminal.request_id IS NOT NULL THEN 'undeliverable'
|
|
13
|
-
WHEN held.request_id IS NOT NULL THEN 'held'
|
|
14
|
-
WHEN delegation.receipt IS NOT NULL THEN 'accepted'
|
|
15
|
-
ELSE 'pending'
|
|
16
|
-
END AS state,
|
|
17
|
-
delegation.receipt
|
|
18
|
-
FROM shiitake_fleet_delegations AS delegation
|
|
19
|
-
LEFT JOIN shiitake_fleet_held_delegations AS held
|
|
20
|
-
ON held.request_id = delegation.request_id
|
|
21
|
-
LEFT JOIN shiitake_fleet_undeliverable_delegations AS terminal
|
|
22
|
-
ON terminal.request_id = delegation.request_id
|
|
23
|
-
WHERE delegation.request_id = ?`,t).toArray()[0],unsettled:()=>e.sql.exec(`SELECT input, mail, 'accepted' AS state, receipt
|
|
24
|
-
FROM shiitake_fleet_delegations AS delegation
|
|
25
|
-
WHERE receipt IS NOT NULL
|
|
26
|
-
AND NOT EXISTS (
|
|
27
|
-
SELECT 1 FROM shiitake_fleet_settled_delegations AS settled
|
|
28
|
-
WHERE settled.request_id = delegation.request_id
|
|
29
|
-
)
|
|
30
|
-
ORDER BY delegation.rowid DESC`).toArray(),recordSettled(t){e.transactionSync(()=>{if(e.sql.exec(`SELECT 1 FROM shiitake_fleet_delegations WHERE request_id = ? AND receipt IS NOT NULL`,t).toArray().length!==1)throw Error(`Cannot record settlement without acceptance`);e.sql.exec(`INSERT OR IGNORE INTO shiitake_fleet_settled_delegations(request_id) VALUES(?)`,t)})},reserve(t,n,r){e.transactionSync(()=>{e.sql.exec(`INSERT OR IGNORE INTO shiitake_fleet_delegations(request_id, input, mail) VALUES (?, ?, ?)`,t,n,r)})},recordReceipt(t,n,r,i){e.transactionSync(()=>{let a=e.sql.exec(`SELECT mail, receipt FROM shiitake_fleet_delegations WHERE request_id = ?`,t).toArray()[0];if(a===void 0)throw Error(`Cannot record acceptance without frozen delegation mail`);if(a.receipt!==null){if(a.receipt===n&&a.mail===i)return;throw Error(`Delegation acceptance conflicts with its recorded receipt`)}if(a.mail!==r)throw Error(`Delegation mail changed before acceptance was recorded`);e.sql.exec(`UPDATE shiitake_fleet_delegations SET mail = ?, receipt = ? WHERE request_id = ? AND receipt IS NULL`,i,n,t),e.sql.exec(`DELETE FROM shiitake_fleet_held_delegations WHERE request_id = ?`,t)})},recordHeld(t){e.transactionSync(()=>{e.sql.exec(`INSERT OR IGNORE INTO shiitake_fleet_held_delegations (request_id)
|
|
31
|
-
SELECT request_id FROM shiitake_fleet_delegations
|
|
32
|
-
WHERE request_id = ? AND receipt IS NULL
|
|
33
|
-
AND NOT EXISTS (
|
|
34
|
-
SELECT 1 FROM shiitake_fleet_undeliverable_delegations
|
|
35
|
-
WHERE request_id = ?
|
|
36
|
-
)`,t,t)})},recordUndeliverable(t){return e.transactionSync(()=>e.sql.exec(`SELECT delegation.request_id
|
|
37
|
-
FROM shiitake_fleet_delegations AS delegation
|
|
38
|
-
JOIN shiitake_fleet_held_delegations AS held
|
|
39
|
-
ON held.request_id = delegation.request_id
|
|
40
|
-
WHERE delegation.request_id = ? AND delegation.receipt IS NULL`,t).toArray()[0]!==void 0&&(e.sql.exec(`INSERT OR IGNORE INTO shiitake_fleet_undeliverable_delegations(request_id) VALUES (?)`,t),e.sql.exec(`DELETE FROM shiitake_fleet_held_delegations WHERE request_id = ?`,t),!0))}}}var ka=Symbol.for(`@fungi.computer/shiitake/extension-definition-reader`);function Aa(e){return e[ka]?.()}var ja=3.5,Ma=4800;function Na(e){return e.totalTokens||e.input+e.output+e.cacheRead+e.cacheWrite}function Pa(e){try{return JSON.stringify(e)??`undefined`}catch{return`[unserializable]`}}function Fa(e){if(typeof e==`string`)return e.length;let t=0;for(let n of e)t+=n.type===`text`?n.text.length:Ma;return t}function Ia(e){return Math.ceil(e.length/ja)}function La(e){return Math.ceil(Fa(e)/ja)}function Ra(e){let t=0;if(e.role===`system`)return Ia(Ui(e))+Va(e.toolsAdded)+Va(e.toolsRemoved);if(e.role===`user`||e.role===`toolResult`)return La(e.content);for(let n of e.content)n.type===`text`?t+=n.text.length:n.type===`thinking`?t+=n.thinking.length:t+=n.name.length+Pa(n.arguments).length;return Math.ceil(t/ja)}function za(e){let t=-1/0,n;for(let r=0;r<e.length;r++){let i=e[r];if(i.role===`assistant`){let e=i;e.timestamp>=t&&e.stopReason!==`aborted`&&e.stopReason!==`error`&&Na(e.usage)>0&&(n={usage:e.usage,index:r})}t=Math.max(t,i.timestamp)}return n}function Ba(e){let t=`messages`in e?e.messages:e,n=za(t);if(n){let e=Na(n.usage),r=0;for(let e=n.index+1;e<t.length;e++)r+=Ra(t[e]);return{tokens:e+r,usageTokens:e,trailingTokens:r,lastUsageIndex:n.index}}let r=0;for(let e of t)r+=Ra(e);return{tokens:r,usageTokens:0,trailingTokens:r,lastUsageIndex:null}}function Va(e){return!e||e.length===0?0:Ia(Pa(e))}var Ha=0xffffffffffff,Ua=(1n<<41n)-1n,Wa=-1,Y;function Ga(e){let t=e??Date.now();if(!Number.isInteger(t)||t<0||t>Ha)throw RangeError(`UUIDv7 timestamp must be an integer between 0 and ${Ha}`);let n=e===void 0?Math.max(t,Wa):e;e===void 0&&(Wa=n);let r=new Uint8Array(16);if(globalThis.crypto.getRandomValues(r),Y===void 0)Y=BigInt(r[1])<<32n|BigInt(r[2])<<24n|BigInt(r[3])<<16n|BigInt(r[4])<<8n|BigInt(r[5]);else{if(Y===Ua)throw RangeError(`UUIDv7 generator sequence exhausted`);Y++}let i=BigInt(n);for(let e=5;e>=0;e--)r[e]=Number(i>>BigInt((5-e)*8))&255;r[6]=112|Number(Y>>37n&15n),r[7]=Number(Y>>29n&255n),r[8]=128|Number(Y>>23n&63n),r[9]=Number(Y>>15n&255n),r[10]=Number(Y>>7n&255n),r[11]=Number((Y&127n)<<1n)|r[11]&1;let a=Array.from(r,e=>e.toString(16).padStart(2,`0`));return`${a.slice(0,4).join(``)}-${a.slice(4,6).join(``)}-${a.slice(6,8).join(``)}-${a.slice(8,10).join(``)}-${a.slice(10).join(``)}`}function Ka(e){return Fn(e,{onFailure:re,onSuccess:()=>h})}function qa(e,t){return g(e,{onFailure:e=>D(t).pipe(x(re(e))),onSuccess:()=>t})}function Ja(e,t){let n={_tag:`open`},r=r=>qa(e,t).pipe(D,R(e=>I(()=>{r.result=e,n={_tag:`closed`}}).pipe(x(r.settled.open),x(Ka(e)))),ae);return T(()=>{if(n._tag===`closed`)return h;if(n._tag!==`open`){let e=n;return e.settled.await.pipe(x(T(()=>{let t=e.result;return t===void 0?ve(Error(`Agent close settlement was not recorded`)):Ka(t)})))}let e={_tag:`running`,settled:on(!1)};return n=e,r(e)})}function Ya(e,t,n,r){let i=ti(e,t);if(n.state===`idle`)return{facts:{queue:{state:`idle`},cancellationRequested:!1,retry:null,activeTool:null,lastModelChoiceSequence:i,compaction:null},readProgress:()=>null,toolOutput:[]};if(n.state===`queued`)return{facts:{queue:{state:`queued`,commandId:n.jobId,runningWork:r},cancellationRequested:n.cancellationRequested,retry:null,activeTool:null,lastModelChoiceSequence:i,compaction:null},readProgress:()=>null,toolOutput:[]};let a=Hr(e,t,n.jobId),o=a?.event.type===`auto_retry_start`?{attempt:a.event.attempt,maxAttempts:a.event.maxAttempts,delayMs:a.event.delayMs,errorMessage:a.event.errorMessage,scheduledAt:a.timestamp}:null;return{facts:{queue:{state:`running`,commandId:n.jobId},cancellationRequested:n.cancellationRequested,retry:o,activeTool:or(e,t,n.jobId)??null,lastModelChoiceSequence:i,compaction:vt(e,t)},readProgress:()=>Pn(e,t,n.jobId),toolOutput:Kt(e,t,n.jobId)}}var Xa=new WeakMap;function Za(e,t){let n=vr(e,{sessionId:t}),r=qn(n);return r.length===0?null:Ba(r).tokens}function Qa(e,t,n,r=!0){let i;try{i=Ii(e.store,t)}catch(e){return Be(`session-context.preference`,e),C(void 0)}let a=JSON.stringify(i),o=Xa.get(e)??new Map;Xa.set(e,o);let c=r?o.get(t):void 0,l=e.model.describe;if(c?.cursor===n&&c.preference===a){if(c.value===void 0||l===void 0)return C(c.value);let e=c.value;return l({sessionId:t,preference:i}).pipe(s(({contextWindow:i})=>{if(e.window===i)return e;let s=Object.freeze({tokens:e.tokens,window:i});return r&&o.get(t)?.cursor===n&&o.set(t,{cursor:n,preference:a,value:s}),s}),ce(t=>I(()=>(Be(`session-context.describe`,t),e))))}let u;try{u=Za(e.store,t)}catch(e){return Be(`session-context.figure`,e),C(void 0)}if(u===null)return r&&o.set(t,{cursor:n,preference:a,value:void 0}),C(void 0);if(l===void 0){let e=Object.freeze({tokens:u,window:null});return r&&o.set(t,{cursor:n,preference:a,value:e}),C(e)}return r&&o.set(t,{cursor:n,preference:a,value:Object.freeze({tokens:u,window:null})}),l({sessionId:t,preference:i}).pipe(s(({contextWindow:e})=>e),ce(e=>I(()=>(Be(`session-context.describe`,e),null))),s(e=>{let i=Object.freeze({tokens:u,window:e});return r&&o.get(t)?.cursor===n&&o.set(t,{cursor:n,preference:a,value:i}),i}))}function $a(e){return Object.freeze({list:e.assertOpen.pipe(s(()=>e.extensions.list())),resume:t=>e.assertOpen.pipe(x(e.extensions.resume(t))),call:(t,n,r)=>e.assertOpen.pipe(x(e.extensions.call({scope:`agent`},t,n,r)))})}function eo(e,t){return e.readQueueHead(t).pipe(R(t=>(t.state===`queued`?e.runningWork(t.jobId):C(null)).pipe(s(e=>({head:t,runningWork:e})))))}function to(e,t,n){return eo(t,n).pipe(s(({head:t,runningWork:r})=>Ya(e.store,n,t,r)))}function no(e,t){return t===void 0?e:Object.freeze({...e,context:t})}function ro(e,t,n,r){return eo(t,n).pipe(R(({head:i,runningWork:a})=>kr(e.store,n,()=>Ya(e.store,n,i,a),r,()=>t.extensions.project(n),t=>({snapshot:t,context:Qa(e,n,t.cursor,r?.before===void 0)}))),R(({snapshot:e,context:t})=>t.pipe(s(t=>no(e,t)))))}function io(e,t,n){return e.assertOpen.pipe(x(z({try:()=>n(H(t)),catch:e=>e instanceof W?e:new W(`store`,`rejected`,`Session owner operation failed`)})))}function ao(e,t){return z({try:()=>{let n=Xr(t);if(n._tag===`Failure`)throw new W(`contract`,`invalid`,`Session command is invalid`);return Object.freeze({sessionId:H(e),command:n.success})},catch:e=>e instanceof W?e:new W(`contract`,`invalid`,`Session command is invalid`)})}function oo(e,t){return z({try:()=>Object.freeze({sessionId:H(e),options:yi(t)}),catch:e=>e instanceof W?e:new W(`contract`,`invalid`,`Subscribe options are invalid`)})}function so(e,t,n,r=!1){return t.assertOpen.pipe(x(ro(e,t,n,{includeSandboxFailures:r})),s(e=>Object.freeze({kind:`reset`,reason:`history_unavailable`,cursor:e.cursor,baseline:e})))}function co(e){return[[e],F({after:e.cursor??void 0,delivery:e.baseline.hasMore?`replay`:`live`,awaitSignal:!e.baseline.hasMore})]}function lo(e,t,n,r,i,a,o=!1,c=null){let l=An(c),u=[],d=()=>so(e,t,r,o).pipe(s(e=>(l=An(e.baseline.progress),u=e.baseline.toolOutput,co(e)))),f=t=>{let n=t.facts.queue,i=n.state===`running`?wn(e.store,r,n.commandId,l):null;if(i===void 0)return;let a=[];return i!==null&&(a.push({kind:`progress`,progress:i,activity:t.facts}),l={messageId:i.messageId,revision:i.revision,text:i.text.offset+i.text.append.length,thinking:i.thinking.offset+i.thinking.append.length}),(u.length!==t.toolOutput.length||u.some((e,n)=>e!==t.toolOutput[n]))&&(u=t.toolOutput,a.push({kind:`tool_output`,toolOutput:u,activity:t.facts})),a};return Fi({after:i,delivery:a,awaitSignal:!1},i=>(i.awaitSignal?n.awaitSignal.pipe(R(e=>n.pollSignal.pipe(s(t=>t===void 0?e:gt(e,t))))):n.pollSignal).pipe(R(a=>a===`closed`?C([[],k()]):a===`reset`?d():t.assertOpen.pipe(x(to(e,t,r)),R(c=>{if(n.setQueued(c.facts.queue.state===`queued`),(a===`progress`||a===`activity`)&&i.delivery===`live`){let e=f(c);return e===void 0?d():C([[...a===`activity`?[{kind:`activity`,activity:c.facts}]:[],...e],F({...i,awaitSignal:!0})])}return Ft(e.store,r,i.after,i.delivery,c,()=>t.extensions.project(r),o,t=>{let n=t.kind===`page`?t.frames.flatMap(e=>e.kind===`progress`||e.kind===`activity`||e.kind===`tool_output`?[]:[e.cursor]).at(-1):void 0;return{page:t,latestCursor:n,context:t.kind===`page`&&!t.hasMore&&t.frames.some(e=>e.kind===`update`&&e.cursor!==i.after)?Qa(e,r,n??null):C(void 0)}}).pipe(R(({page:e,latestCursor:t,context:n})=>{if(e.kind===`reset`)return d();e.hasMore||(u=c.toolOutput);let r=e.hasMore?[]:f(c);if(r===void 0)return d();let a={after:t??i.after,delivery:e.hasMore?i.delivery:`live`,awaitSignal:!e.hasMore};return n.pipe(s(n=>[[...n===void 0?e.frames:e.frames.map(e=>e.kind===`update`&&e.cursor===t?Object.freeze({...e,context:n}):e),...r],F(a)]))}))})))))}function uo(e,t,n,r,i){return Ai(t.assertOpen.pipe(x(oo(r,i)),R(r=>Ce(n.register(r.sessionId),e=>I(e.close)).pipe(s(n=>lo(e,t,n,r.sessionId,r.options.after,`replay`,r.options.includeSandboxFailures===!0))))))}function fo(e,t){return z({try:()=>Object.freeze({sessionId:H(e),options:Kn(t)}),catch:e=>e instanceof W?e:new W(`contract`,`invalid`,`Watch options are invalid`)})}function po(e,t,n,r,i){return t.assertOpen.pipe(x(fo(r,i)),R(r=>Oe(i=>A(function*(){let o=yield*n.register(r.sessionId);return yield*i(t.assertOpen.pipe(x(ro(e,t,r.sessionId,r.options)),s(n=>(o.setQueued(n.activity.queue.state===`queued`),Object.freeze({snapshot:n,changes:lo(e,t,o,r.sessionId,n.cursor??void 0,`live`,r.options.includeSandboxFailures===!0,n.progress).pipe(wi(I(o.close))),close:I(o.close)}))))).pipe(a(()=>I(o.close)))}))))}function mo(e,t,n,r,i,a){let o={sessionId:t,command:n,when:`now`,origin:{kind:`user`}};return r!==void 0&&(o={...o,meta:r}),i!==void 0&&(o={...o,mail:i}),a!==void 0&&(o={...o,reply:a}),e.assertOpen.pipe(x(e.door.admit(o)),R(e=>e.status===`accepted`?C({status:`accepted`,commandId:e.commandId}):E(new W(`runtime`,`unavailable`,`Session command was not admitted`))))}function ho(e,t,n,r,i){return t.assertOpen.pipe(x(io(t,n,t=>{e.meta?.identityPath!==void 0&&i!==void 0&&ci(e.store,t,r.commandId,mr(e.store,e.meta.identityPath,i))})),x(Jn(e.store,n,r.commandId,r.onlyIfPending,()=>t.readQueueHeadTransactional(n),t.recordAcceptedCancellation,i)),R(e=>e===void 0?C({status:`too_late`,commandId:r.commandId}):(e.active?t.signalCancellation(e.accepted.commandId,e.accepted.entryId):t.requestWake).pipe(L({status:`accepted`,commandId:e.accepted.commandId}))))}function go(e,t,n,r){return t.assertOpen.pipe(x(t.commit(hr(e.store,n,()=>t.readQueueHeadTransactional(n),t.recordAcceptedCancellation,r))),R(e=>e===void 0?t.requestWake:t.signalCancellation(e.commandId,e.entryId)))}function _o(e,t,n,r){return t.assertOpen.pipe(x(Mi(e.store,{sessionId:n,type:`branch`,entryId:r.entryId,assertIdleSession:t.assertIdleSession})),L(void 0))}function vo(e,t,n,r){return t.assertOpen.pipe(x(Ei(e.store,{sessionId:n,type:`fork`,entryId:r.entryId,assertIdleSession:t.assertIdleSession})))}function yo(e,t,n,r,i){return t.assertOpen.pipe(x(ao(n,i)),R(t=>bo(e,r).pipe(s(e=>({...t,checked:e})))),R(({sessionId:n,command:r,checked:i})=>{switch(r.type){case`prompt`:case`compact`:return mo(t,n,r,i);case`abort`:return go(e,t,n,i).pipe(L(void 0));case`cancel`:return ho(e,t,n,r,i);case`branch`:return _o(e,t,n,r);case`fork`:return vo(e,t,n,r);case`operator`:return t.assertOpen.pipe(x(Re(e.store,{sessionId:n,requestId:r.requestId,author:r.author,meta:i,text:r.text,assertIdleSession:t.assertIdleSession})),L(void 0));case`title`:return t.commit(io(t,n,t=>{sn(e.store,t,r.title)})).pipe(N(()=>I(()=>{Qt(e.store)})),L(void 0))}}))}function bo(e,t){return z({try:()=>t===void 0?void 0:vn(e.meta,t),catch:e=>e instanceof W?e:new W(`contract`,`invalid`,`Host metadata is invalid`)})}function xo(e,t){let n=Ot(e.store),r=(r,i)=>{function a(n){return yo(e,t,r,i,n)}return Object.freeze({command:a,withdraw:e=>t.assertOpen.pipe(x(t.door.withdraw(r,e))),abort:a({type:`abort`}),send:(e,t)=>I(()=>t?.requestId??Ie()).pipe(R(n=>{let r={type:`prompt`,delivery:t?.delivery??`steer`,requestId:n,text:e};return a(t?.images===void 0?r:{...r,images:t.images}).pipe(m(e=>e.requestId===n?e:new W(e.boundary,e.cause,e.message,n)))})),cancel:e=>a({type:`cancel`,...e}),latestPending:io(t,r,t=>ke(e.store,t,e.meta?.identityPath===void 0||i===void 0?void 0:mr(e.store,e.meta.identityPath,i))),modelPreference:Object.freeze({read:io(t,r,t=>Ii(e.store,t)),set:n=>z({try:()=>ei(n),catch:()=>new W(`contract`,`invalid`,`Model preference is invalid`)}).pipe(R(n=>t.commit(io(t,r,t=>(ji(e.store,t,n),t))).pipe(N(t=>I(()=>{zi(e.store,t)})),oe)))}),extension:e=>Object.freeze({call:(n,i,a)=>t.assertOpen.pipe(x(t.extensions.call({scope:`session`,sessionId:r},e,n,i,a)))}),read:n=>t.assertOpen.pipe(x(ro(e,t,r,n))),readSettlement:(i,a=0)=>se(A(function*(){yield*t.assertOpen;let o=yield*z({try:()=>({sessionId:H(r),...ar(Rr({commandId:i,timeoutMs:a}),`Settlement request is invalid`)}),catch:e=>e instanceof W?e:new W(`contract`,`invalid`,`Settlement request is invalid`)}),c=yield*Ce(n.register(o.sessionId,`settlement`),e=>I(e.close)),l=Nr(e.store,o.sessionId,o.commandId),u=yield*l;return u!==void 0||o.timeoutMs===0?u:yield*A(function*(){for(;;){if((yield*c.awaitSignal)===`closed`)return yield*E(new W(`runtime`,`closed`,`Shiitake is closed`));let e=yield*l;if(e!==void 0)return e}}).pipe(ue(o.timeoutMs),s(y))})),subscribe:i=>uo(e,t,n,r,i),watch:i=>po(e,t,n,r,i)})},i=Object.freeze({createSession:n=>t.assertOpen.pipe(x(Oi(e.store,n,t.storage.admitNew))),deleteSession:n=>t.assertOpen.pipe(x(Ue(e.store,{sessionId:n,assertIdleSession:t.assertIdleSession}))),listSessions:n=>t.assertOpen.pipe(x(jt(e.store,n))),extensions:$a(t),session:e=>r(e,void 0),close:t.beginClose.pipe(x(n.close))});return Object.freeze({...i,prepareConfiguration:t.prepareConfiguration,grants:Object.freeze({deliver:(n,r)=>io(t,n,t=>e.store.transactionSync(()=>Le(e.store,t,r))),read:n=>io(t,n,t=>Mr(e.store,t))}),withMeta:e=>Object.freeze({...i,session:t=>r(t,e)})})}function So(e){let t=jr.safeParse(e.meta);return t.success&&t.data.delegation?.steer===!0}function Co(e,t,n,r,i,a){if(t.to.sessionId===void 0){if(r!==void 0||t.replyTo.length===0)throw Error(`Only delegated work can create a recipient Session`);return e.door.transact(r=>{let o=e.createSessionWithinTransaction(t.key),s=a?.(o);s!==void 0&&e.stageSessionGrantsWithinTransaction(o,s);let c={...t,to:{...t.to,sessionId:o}},l={sessionId:o,requireExistingSession:!0,command:{requestId:t.key,delivery:`followUp`,type:`prompt`,text:t.content},when:`now`,origin:{kind:`user`},mail:c,onAccepted:(e,n)=>{if(i===void 0)throw Error(`Recipient Agent mail outbox is unavailable`);i(an(t,o,n,Date.now()))}},u=r(n===void 0?l:{...l,meta:n});if(u.status!==`accepted`)throw Error(`Sessionless addressed mail was not admitted`);return e.recordCreatedSessionDelegatorWithinTransaction(o,c),{status:`accepted`,commandId:u.commandId,sessionId:o}})}return mo(e,t.to.sessionId,{requestId:t.key,delivery:r!==void 0||So(t)?`steer`:`followUp`,type:`prompt`,text:t.content},n,t,r)}var wo=B({fork:ft([`inherit-at-fork-point`,`current`,`fresh`]),maxBytes:$t.pipe(V(tt(0)),V(St(2**53-1)))});function To(e,t){let n=rn(e.schema)(t);if(n._tag===`Failure`)throw new Yi({reason:`encode`,message:`Session document does not match its schema`});let r=G(dt)(n.success);if(r._tag===`Failure`)throw new Yi({reason:`encode`,message:`Session document must encode finite JSON`});let i=JSON.stringify(r.success);if(new TextEncoder().encode(i).byteLength>e.maxBytes)throw new Yi({reason:`bound`,message:`Session document exceeds maxBytes`});return i}function Eo(e){return{...zn(wo)(e),schema:Da(br(e.schema)),initial:To(e,e.initial)}}var Do=64,Oo=ft([`state`,`attention`,`settled`,`send`,`timers`,`commands`,`projection`,`run_tools`,`files`,`prompt`,`compaction_handoff`]),ko=Lt(Oo).pipe(V(En(10))),Ao=B({protocol:yn(`shiitake.extension/v0`),id:qr,version:Qn,requests:ko}),jo=Lt(B({id:qr,capabilities:ko,grantKey:K(qr)})).pipe(V(En(Do))),Mo=In.pipe(V(wr(/^[a-z][A-Za-z0-9_]{0,63}$/u))),No=G(Ao,{onExcessProperty:`error`}),Po=G(jo,{onExcessProperty:`error`}),Fo=G(Mo);function X(e){return new W(`extensions`,`invalid`,e)}function Io(e){return new Set(e).size!==e.length}function Lo(e){return JSON.stringify(e,(e,t)=>me(t)?Object.fromEntries(Object.entries(t).sort(([e],[t])=>e<t?-1:+(e>t))):t)}function Ro(e){return Ee({try:async()=>{let t=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(e));return Array.from(new Uint8Array(t),e=>e.toString(16).padStart(2,`0`)).join(``)},catch:()=>new W(`extensions`,`rejected`,`Extension digest failed`)})}function zo(e,t){let{manifest:n,contract:r,state:i,config:a,catalog:o}=e,s={manifest:{protocol:n.protocol,id:n.id,version:n.version,requests:[...n.requests].sort()},commands:Object.fromEntries(Object.entries(r.commands).map(([e,t])=>[e,{scope:t.scope,input:Da(br(t.input)),output:Da(br(t.output))}])),projection:r.projection===null?null:Da(br(r.projection.schema)),state:{version:i.version,collections:Object.fromEntries(Object.entries(i.collections).map(([e,t])=>[e,Da(br(t.schema))]))},config:a},c=Object.keys(t).length===0?s:{...s,documents:Object.fromEntries(Object.entries(t).map(([e,t])=>[e,Eo(t)]))};return o===void 0?c:{...c,catalog:o}}function Bo(e){if(No(e.manifest)._tag===`Failure`)throw X(`Extension manifest is invalid`);let t=e.manifest;if(Io(t.requests))throw X(`Extension capability requests are invalid`);if(e.contract.id!==t.id)throw X(`Extension contract identity does not match its manifest`);if(!Number.isSafeInteger(e.state.version)||e.state.version<1)throw X(`Extension state version is invalid`);for(let t of Object.keys(e.state.collections))if(t===`update`||t===`read`||t===`observe`||Fo(t)._tag===`Failure`)throw X(`Extension collection name is invalid`);if(e.catalog!==void 0&&!t.requests.includes(`commands`))throw X(`An extension catalog requires the commands capability`);return t}function Vo(e){return A(function*(){let t=e?.roster??[],n=e?.grants??[],r=yield*z({try:()=>{if(t.length>Do)throw X(`Extension roster is invalid`);let e=t.map(e=>{let t=Aa(e);if(t===void 0)throw X(`Extension roster entry was not defined`);let n=t.documents??{};for(let[e,t]of Object.entries(n)){if(Fo(e)._tag===`Failure`)throw X(`Session document name is invalid`);Eo(t)}let r=Bo(t);if(Object.keys(n).length>0&&!r.requests.includes(`state`))throw X(`Session documents require the state capability`);return{definition:t,documents:n,manifest:r}});if(Io(e.map(({manifest:e})=>e.id)))throw new W(`extensions`,`conflict`,`Extension identities conflict`);let r=Po(n);if(r._tag===`Failure`)throw X(`Extension grants are invalid`);if(Io(r.success.map(({id:e})=>e)))throw X(`Extension grant identities are invalid`);let i=new Map;for(let t of r.success){let n=e.find(({manifest:e})=>e.id===t.id);if(n===void 0||Io(t.capabilities)||t.capabilities.some(e=>!n.manifest.requests.includes(e)))throw X(`Extension grant is invalid`);i.set(t.id,t.capabilities)}if(e.filter(({manifest:e})=>i.get(e.id)?.includes(`compaction_handoff`)).length>1)throw new W(`extensions`,`conflict`,`Compaction handoff slot is already owned`);if(e.filter(({manifest:e})=>i.get(e.id)?.includes(`files`)).length>1)throw new W(`extensions`,`conflict`,`Files slot is already owned`);return e.map(e=>({...e,grants:i.get(e.manifest.id)??[]})).sort((e,t)=>e.manifest.id<t.manifest.id?-1:+(e.manifest.id>t.manifest.id))},catch:e=>e instanceof W?e:X(`Extension roster is invalid`)});return yield*De(r,e=>A(function*(){let t=`sha256:${yield*Ro(yield*z({try:()=>Lo(zo(e.definition,e.documents)),catch:()=>X(`Extension schemas cannot be described`)}))}`,n=[...e.grants].sort(),r=`sha256:${yield*Ro(Lo([t,n]))}`;return Object.freeze({id:e.manifest.id,manifest:e.manifest,definition:e.definition,documents:e.documents,grants:new Set(n),revision:zn(li)(t),fingerprint:zn(Hn)(r)})}))})}function Ho(e){return Ro(Lo({protocol:`shiitake.extension/v0`,runContract:1,fileTools:[...e].sort()}))}var Uo=M().min(1).max(256),Wo=_([`create`,`manage`,`read`,`send`,`delegate`]),Go=S(()=>ye({actor:Uo,workflowRunId:Uo.optional(),toolCallInputDigest:M().regex(/^[a-f0-9]{64}$/).optional(),session:ye({agentId:Uo,sessionId:Uo}).optional()}));S(()=>ye({agents:b([ge(`all`),v(Uo)]),actions:v(Wo).max(5),expiresAt:j().int().nonnegative(),provenance:Go,meta:fe().optional(),maxDepth:j().int().min(1).max(8).optional()})),Fr({family:`agent`,version:1,kinds:{agent:{prefix:`agent`}}}),S(()=>ye({agent_id:M(),name:M(),actor_user_id:M(),created_by:M().min(1).max(256).nullable(),created_at:j().int().nonnegative(),updated_at:j().int().nonnegative()})),S(()=>ye({request_id:M(),actor_user_id:M(),name:M(),agent_id:M(),computer_mode:M().min(1).max(4096)})),S(()=>ye({name:M().min(1).max(256),requestId:M().min(1).max(256),configuration:M().min(1).max(4096),createdBy:M().min(1).max(256).nullable().optional()})),S(()=>ye({name:M().min(1).max(256)}));var Ko=class extends Error{status;code;constructor(e,t){super(t),this.status=e,this.code=t}};S(()=>ye({requestId:Uo,agentId:Uo,sessionId:Uo.optional(),delivery:_([`followUp`,`steer`]).optional(),goal:b([M().min(1).max(4e3),ge(!1)]).optional(),text:M().min(1).max(262144)}).refine(({goal:e,sessionId:t,delivery:n})=>e===void 0||t===void 0&&n!==`steer`,{path:[`goal`],error:`goal requires a new-Session follow-up`})),we({delegation:jr.shape.delegation});var qo=S(()=>ye({input:M(),mail:M(),state:_([`pending`,`held`,`accepted`,`undeliverable`]),receipt:M().nullable()})),Jo=zn(We(ki));function Yo(e){let t=Oa(e).unsettled()[0];if(t===void 0)return;let n=qo.parse(t),r=Jo(n.mail),i=r.to.sessionId;if(i===void 0)throw new Ko(503,`partial_init`);return{agentId:r.to.agentId,sessionId:i,commandId:yr(M().parse(n.receipt)).commandId}}function Xo(e){let t={kind:`reason_unavailable`,...e,provider:e.provider===``?null:e.provider,model:e.model===``?null:e.model};return`${t.kind}: run=${t.runId}; provider=${t.provider??`unknown`}; model=${t.model??`unknown`}`.slice(0,200)}function Zo(e){return Xo({runId:e.run.value,provider:e.message.provider,model:e.message.model})}function Qo(e){return new W(`model`,`rejected`,e)}function $o(e,t){let n={input:e.input+t.input,output:e.output+t.output,cacheRead:e.cacheRead+t.cacheRead,cacheWrite:e.cacheWrite+t.cacheWrite,totalTokens:e.totalTokens+t.totalTokens,cost:{input:e.cost.input+t.cost.input,output:e.cost.output+t.cost.output,cacheRead:e.cost.cacheRead+t.cost.cacheRead,cacheWrite:e.cost.cacheWrite+t.cost.cacheWrite,total:e.cost.total+t.cost.total}};return(e.cacheWrite1h!==void 0||t.cacheWrite1h!==void 0)&&(n.cacheWrite1h=(e.cacheWrite1h??0)+(t.cacheWrite1h??0)),(e.reasoning!==void 0||t.reasoning!==void 0)&&(n.reasoning=(e.reasoning??0)+(t.reasoning??0)),n}function es(e){let t;for(let n of e)n.kind===`compaction`&&(t=n);let n=t,r=n===void 0?0:Math.max(0,e.findIndex(({id:e})=>e===n.head)),i=e.flatMap((e,t)=>e.kind===`message`&&t>=r?[e.message]:[]);return n===void 0?i:[n.model,...i]}function ts(e,t,n){let r=He(),i=t[n];if(i?.kind===`compaction`&&i.details!==void 0){for(let e of i.details.readFiles)r.read.add(e);for(let e of i.details.modifiedFiles)r.edited.add(e)}for(let t of e)bn(t,r);return r}function ns(e,t,n,r){for(let i=t;i<n;i+=1){let t=e[i];if(t?.kind===`message`){if(t.message.role===`assistant`)return!1;if(t.message.role===`toolResult`&&r.has(t.message.toolCallId))return!0}}return!1}function rs(e,t,n){let r=[],i=new Set;for(let a=t;a<n;a+=1){let t=e[a];if(t?.kind!==`message`)continue;let o=t.message;o.role===`assistant`?(r.push(a),i=new Set(o.content.flatMap(e=>e.type===`toolCall`?[e.id]:[]))):o.role===`user`&&!ns(e,a+1,n,i)&&r.push(a)}return r}function is(e,t,n,r){let i=rs(e,t,n),a=0;for(let o=n-1;o>=t;--o){let t=e[o];if(t?.kind===`message`&&(a+=Ra(t.message),a>=r))return i.find(e=>e>=o)??i.at(-1)}}function as(e,t,n){let r=e[n],i=r?.kind===`message`&&r.message.role===`user`,a=-1;if(!i)for(let r=n;r>=t;--r){let t=e[r];if(t?.kind===`message`&&t.message.role===`user`){a=r;break}}return{isSplitTurn:!i&&a>=0,turnStartIndex:a}}function os(e,t,n,r){let i=is(e,t,n,r);return i===void 0?{firstKeptEntryIndex:t,isSplitTurn:!1,turnStartIndex:-1}:{firstKeptEntryIndex:i,...as(e,t,i)}}function ss(e,t){if(e.at(-1)?.kind===`compaction`)return;let n,r=-1,i=0;for(let t=e.length-1;t>=0;--t){let a=e[t];if(a?.kind===`compaction`){n=en(a.model),r=t;let o=e.findIndex(e=>e.id===a.head);i=o>=0?o:t+1;break}}let a=e.flatMap((e,t)=>e.kind===`message`&&t>=i?[e]:[]),o=Ba(es(e)).tokens,s=os(a,0,a.length,t.keepRecentTokens),c=a[s.firstKeptEntryIndex];if(c?.kind!==`message`)return;let l=s.isSplitTurn?s.turnStartIndex:s.firstKeptEntryIndex,u=Object.freeze(a.slice(0,l).map(({message:e})=>e)),d=Object.freeze(s.isSplitTurn?a.slice(s.turnStartIndex,s.firstKeptEntryIndex).map(({message:e})=>e):[]);if(u.length===0&&d.length===0)return;let f=ts(u,e,r);for(let e of d)bn(e,f);let p={firstKeptEntryId:c.id,messagesToSummarize:u,turnPrefixMessages:d,isSplitTurn:s.isSplitTurn,tokensBefore:o,fileOps:f,settings:t};return n===void 0?p:{...p,previousSummary:n}}var cs={enabled:!0,maxRetries:3,baseDelayMs:2e3};function ls(e,t,n,r){let i={...n,cacheRetention:`none`,sessionId:n.sessionId??Ga()};return Dn(()=>Promise.resolve((r??ur)(e,Hi(t),i)).then(e=>e.result()),cs,i.signal)}function us(e){return{systemPrompt:Gt,messages:[{role:`user`,content:[{type:`text`,text:e}],timestamp:Date.now()}]}}function ds(e,t,n){let r=e.previousSummary??``,i=t?_t:Rt,a=n===void 0?i:`${i}\n\nAdditional focus: ${n}`;return`<conversation>\n${hn(e.messagesToSummarize)}\n</conversation>\n\n${t?`<previous-summary>\n${r}\n</previous-summary>\n\n`:``}${a}`}function fs(e){return`# Conversation\n${hn(e.turnPrefixMessages)}\n\n# Instructions\n${it}`}async function ps(e,t,n,r,i,a){let o=n===void 0?{maxTokens:t}:{maxTokens:t,signal:n},s=await ls(e,us(r),o,a),c=Tt(s,i);if(c!==void 0)throw Error(c);return s}function ms(e,t,n,r,i,a){return e.messagesToSummarize.length===0?Promise.resolve(void 0):ps(t,n,r,ds(e,e.previousSummary!==void 0&&e.previousSummary.length>0,i),`Summarization`,a)}function hs(e,t,n,r){return!e.isSplitTurn||e.turnPrefixMessages.length===0?Promise.resolve(void 0):ps(t,Math.min(Math.floor(.5*e.settings.reserveTokens),t.maxTokens>0?t.maxTokens:1/0),n,fs(e),`Turn prefix summarization`,r)}function gs(e,t,n){let r,i;if(e.isSplitTurn){if(n===void 0)throw Error(`Split-turn compaction did not produce a prefix summary`);r=`${t===void 0?e.previousSummary??`No prior history.`:Wi(t.content)}\n\n---\n\n**Turn Context (split turn):**\n\n${Wi(n.content)}`,i=t===void 0?n.usage:$o(t.usage,n.usage)}else{if(t===void 0)throw Error(`Compaction did not produce a history summary`);r=Wi(t.content),i=t.usage}let a=Vi(e.fileOps);return{summary:r+pt(a.readFiles,a.modifiedFiles),firstKeptEntryId:e.firstKeptEntryId,tokensBefore:e.tokensBefore,usage:i,details:a}}async function _s(e,t,n,r,i){return gs(e,await ms(e,t,Math.min(Math.floor(.8*e.settings.reserveTokens),t.maxTokens>0?t.maxTokens:1/0),n,r,i),e.isSplitTurn&&e.turnPrefixMessages.length>0?await hs(e,t,n,i):void 0)}function vs(e,t,n,r){return Ee({try:i=>_s(e,t,i,r,n),catch:e=>Qo(e instanceof Error?e.message:String(e))})}function ys(e,t,n,r){return{sessionId:n,messagesToSummarize:e.messagesToSummarize,turnPrefixMessages:e.turnPrefixMessages,result:t,contextRevision:r}}var bs=new WeakMap;function xs(e){return bs.has(e)}function Ss(e,t,n){let r={fiber:void 0,summary:void 0},i=n(e=>{r.summary=e});return ze(t,I(()=>{ws(e,r)})).pipe(x(u(i,t)),s(t=>(r.fiber=t,bs.set(e,r),r)))}function Cs(e){let t=e.summary;return e.summary=void 0,t}function ws(e,t){t.fiber=void 0,t.summary=void 0,bs.get(e)===t&&bs.delete(e)}function Ts(e){return new W(`runtime`,`rejected`,e)}var Es={handoff:`The compaction handoff failed; the conversation context is unchanged`,handoffResult:`The compaction handoff failed: it returned an invalid result; the conversation context is unchanged`,conflict:`The Session changed during compaction; the conversation context is unchanged`},Ds=class extends W{phase;usage;constructor(e,t){super(e===`conflict`?`store`:`runtime`,e===`conflict`?`conflict`:`rejected`,Es[e]),this.phase=e,this.usage=t}get diagnostic(){return Es[this.phase]}};function Os(e,t){let n=Qe(e,t),r=Di(e),i=[];for(let t of e){let e=Bn(t.entry);if(e!==void 0&&!r.has(e.workId)){i.push({id:t.id,kind:`message`,message:Br(e)});continue}if(t.entry.kind===`operator`){i.push({id:t.id,kind:`message`,message:gr(t.entry)});continue}if(t.entry.kind===`message`){n.has(t.id)&&i.push({id:t.id,kind:`message`,message:t.entry.value});continue}if(t.entry.kind===`compaction`){let e={id:t.id,kind:`compaction`,head:t.entry.head,model:t.entry.model[0],usage:t.entry.data.usage};i.push(t.entry.data.details===void 0?e:{...e,details:t.entry.data.details})}}return i}function ks(e,t,n){return z({try:()=>vr(e,{sessionId:t,workId:n}),catch:()=>Ts(`Woodstock selected lineage is unavailable`)})}function As(e,t,n,r){let i={...t,id:`${t.id}:compaction`,parentId:t.id,sequence:t.sequence+1,timestamp:Date.now(),entry:n};return qn([...e,i],r).reduce((e,t)=>e+Ra(t),0)}function js(e,t,n){return T(()=>(xt(e.store,e.sessionId,n.trigger),Ms(e,t,n).pipe(pe(I(()=>{ni(e.store,e.sessionId)})))))}function Ms(e,t,n){return A(function*(){let r=ss(Os(t,e.workId),e.settings);if(r===void 0)return;let i=t.at(-1);if(i===void 0)return;let a=yield*vs(r,e.model,e.stream,n.instructions),o=yield*Fs(e,r,a,i.id);return yield*Rs(e,t,a,n,i.id,o)})}var Ns=Un([B({type:yn(`accepted`),receipt:$r}),B({type:yn(`discarded_by_policy`)})]),Ps=G(Ns);function Fs(e,t,n,r){return e.handoff===void 0?C(void 0):e.handoff.consume(ys(t,n,e.sessionId,r)).pipe(m(()=>new Ds(`handoff`,n.usage)),R(e=>{let t=Ps(e);return t._tag===`Failure`?E(new Ds(`handoffResult`,n.usage)):C(t.success.type===`accepted`?t.success.receipt:void 0)}))}function Is(e,t,n,r,i,a){let o=t.at(-1);if(o===void 0)return;let s=As(t,o,{kind:`compaction`,workId:e.workId,head:n.firstKeptEntryId,model:[At(n.summary,Date.now())],data:{reason:r.trigger,resumesRun:r.resumesRun,tokensBefore:n.tokensBefore,tokensAfter:0,usage:n.usage,contextRevision:i}},e.workId),c={sessionId:e.sessionId,resumesRun:r.resumesRun,trigger:r.trigger,tokensAfter:s,expectedLeafId:o.id,workId:e.workId,head:n.firstKeptEntryId,summary:n.summary,tokensBefore:n.tokensBefore,usage:n.usage,contextRevision:i,details:n.details};return a===void 0?c:{...c,receipt:a}}function Ls(e,t,n){let r=[...t,n];return{path:r,messages:qn(r,e.workId)}}function Rs(e,t,n,r,i,a){let o=Is(e,t,n,r,i,a);return o===void 0?C(void 0):z({try:()=>xi(e.store,o),catch:e=>e instanceof W?e.cause===`conflict`?new Ds(`conflict`):e:Ts(`Woodstock compaction append failed`)}).pipe(s(n=>Ls(e,t,n)))}function zs(e){return e instanceof Ds?e.diagnostic:e.boundary===`model`?e.message:`Compaction failed (${e.boundary}: ${e.cause})`}function Bs(e,t){return z({try:()=>{Rn(e.store,t)},catch:e=>e instanceof W?e:Ts(`Compaction notice could not be recorded`)})}function Vs(e,t,n){let r={sessionId:e.sessionId,workId:e.workId,trigger:t};return Bs(e,n===void 0?{...r,result:`nothing_to_compact`}:{...r,result:`failed`,diagnostic:zs(n),usage:n instanceof Ds?n.usage:void 0})}function Hs(e,t,n){return le(js(e,t,n)).pipe(R(t=>t._tag===`Success`?C(t.success):Vs(e,n.trigger,t.failure).pipe(L(void 0))))}var Us={trigger:`threshold`,resumesRun:!1};function Ws(e,t,n,r){return t.stopped||xs(e.store)||!ct(n,e.model.contextWindow,e.settings)?h:r.pipe(R(n=>Gs(e,t.scope,n)),s(e=>{e===void 0?t.stopped=!0:t.slot=e}))}function Gs(e,t,n){let r=n.at(-1),i=ss(Os(n,e.workId),e.settings);return r===void 0||i===void 0?C(void 0):Ss(e.store,t,t=>Ks(e,i,r.id,t))}function Ks(e,t,n,r){return T(()=>(xt(e.store,e.sessionId,`threshold`),vs(t,e.model,e.stream).pipe(s(e=>{r({preparation:t,result:e,selectionTail:n})}),pe(I(()=>{ni(e.store,e.sessionId)})))))}function qs(e,t,n,r){return T(()=>{let i=t.slot,a=i?.fiber;return i===void 0||a===void 0||!r&&a.pollUnsafe()===void 0?C(void 0):(t.slot=void 0,le(un(a).pipe(R(()=>Ys(e,i)),R(t=>t===void 0?C(void 0):Xs(e,t,n)))).pipe(R(n=>n._tag===`Success`&&n.success!==void 0?C(n.success):(t.stopped=!0,n._tag===`Success`?C(void 0):Vs(e,`threshold`,n.failure).pipe(L(void 0)))),pe(I(()=>{ws(e.store,i)}))))})}function Js(e,t,n){return Bs(e,{sessionId:e.sessionId,workId:e.workId,trigger:`threshold`,result:n,usage:t.usage}).pipe(L(void 0))}function Ys(e,t){let n=Cs(t);if(n===void 0)return C(void 0);let{result:r,selectionTail:i}=n;return z({try:()=>Zr(e.store,{sessionId:e.sessionId,head:r.firstKeptEntryId}),catch:e=>e instanceof W?e:Ts(`Woodstock compaction head is unavailable`)}).pipe(R(t=>t===`stale`?Js(e,r,`stale`):Fs(e,n.preparation,r,i).pipe(s(e=>({result:r,selectionTail:i,receipt:e})))),pe(I(()=>{ws(e.store,t)})))}function Xs(e,t,n){return ks(e.store,e.sessionId,e.workId).pipe(R(r=>{let i=Is(e,r,t.result,n,t.selectionTail,t.receipt);return i===void 0?C(void 0):Cn(i.tokensAfter,e.model.contextWindow,e.settings)?Js(e,t.result,`insufficient`):z({try:()=>qe(e.store,i),catch:e=>e instanceof W?e.cause===`conflict`?new Ds(`conflict`):e:Ts(`Woodstock compaction append failed`)}).pipe(R(n=>n===`stale`?Js(e,t.result,`stale`):C(Ls(e,r,n))))}))}function Zs(e,t){let n={path:e.path,messages:e.messages};if(e.resuming===!0)return C(n);let r=Ba(e.messages).tokens;return Cn(r,e.model.contextWindow,e.settings)?Hs(e,e.path,Us).pipe(s(e=>e??n)):Ws(e,t,r,C(e.path)).pipe(L(n))}function Qs(e,t){let n=ot(e.message,t.contextWindow),r=je(e.message,t.maxTokens);return{triggered:n||r,overflow:n,retry:(n||r)&&e.message.stopReason!==`stop`}}function $s(e){let t=e.at(-1);return t?.role===`assistant`&&(t.stopReason===`error`||t.stopReason===`length`)?e.slice(0,-1):e}function ec(e,t,n,r){if(!e.settings.enabled)return C(void 0);let i=Cn(Ba([...t.messages,...n.messages.slice(t.newMessageCount)]).tokens,e.model.contextWindow,e.settings);return r.triggered||i?ks(e.store,e.sessionId,e.workId):C(void 0)}function tc(e,t,n){return(r,i)=>A(function*(){let a=e=>(t.path=e.path,t.messages=e.messages,t.newMessageCount=i,e.messages),o=Ba(r).tokens,s=Cn(o,e.model.contextWindow,e.settings),c=yield*qs(e,n,Us,s);if(c!==void 0)return a(c);let l=ks(e.store,e.sessionId,e.workId);if(!s){yield*Ws(e,n,o,l);return}let u=yield*Hs(e,yield*l,Us);return u===void 0?void 0:a(u)})}function nc(e,t,n){return A(function*(){let r=t,i=t.path.some(({entry:t})=>t.kind===`compaction`&&t.workId===e.workId&&t.data.resumesRun);for(;;){let t={path:r.path,messages:r.messages,newMessageCount:0},a=yield*e.run(t.messages,tc(e,t,n)),o=Qs(a,e.model),s=o.retry&&!i,c=yield*qs(e,n,{trigger:o.overflow?`overflow`:`threshold`,resumesRun:s},!0);if(c!==void 0){if(!s)return a;r={path:c.path,messages:$s(c.messages)},i=!0;continue}let l=yield*ec(e,t,a,o);if(l===void 0||o.retry&&i)return a;let u=yield*Hs(e,l,{trigger:o.overflow?`overflow`:`threshold`,resumesRun:o.retry});if(u===void 0||!o.retry)return a;r={path:u.path,messages:$s(u.messages)},i=!0}})}function rc(e){return A(function*(){let t={scope:yield*Se,slot:void 0,stopped:!1};return yield*nc(e,e.settings.enabled?yield*Zs(e,t):e,t)})}function ic(e){return e.path.some(({entry:t})=>(t.kind===`compaction`||t.kind===`compaction_notice`)&&t.workId===e.workId)?C(`compacted`):js(e,e.path,{trigger:`manual`,resumesRun:!1,instructions:e.instructions}).pipe(O(t=>Vs(e,`manual`,t)),R(t=>t===void 0?Vs(e,`manual`,void 0).pipe(L(`nothing_to_compact`)):C(`compacted`)))}var ac=$t.pipe(V(Zt(0)),V(St(2**53-1))),oc=B({reserveTokens:K(ac),keepRecentTokens:K(ac),backgroundTokens:K(ac)}),sc=B({enabled:K(rt),reserveTokens:K(ac),keepRecentTokens:K(ac),backgroundTokens:K(ac),modelOverrides:K(On(In,oc))}),cc=G(sc,{onExcessProperty:`error`});function lc(e){let t=cc(e??{});if(t._tag===`Failure`)throw new W(`contract`,`invalid`,`Compaction settings must be non-negative whole token counts`);let n=t.success;return e=>{let t=n.modelOverrides?.[`${e.provider}/${e.id}`];return{enabled:n.enabled??Pt.enabled,reserveTokens:t?.reserveTokens??n.reserveTokens??Pt.reserveTokens,keepRecentTokens:t?.keepRecentTokens??n.keepRecentTokens??Pt.keepRecentTokens,backgroundTokens:t?.backgroundTokens??n.backgroundTokens??Pt.backgroundTokens}}}var uc=1e3;function dc(e,n,i){return A(function*(){let a=yield*r(i);(yield*t(un(a).pipe(L(!0)),Te(uc).pipe(L(!1))))||(yield*d(`shiitake_run_finalizer_hung`).pipe(P({workId:n,finalizer:e})))})}var fc={missing:`Instruction capabilities have no tool runtime`,runtime:`Tool runtime failed`,lease:`Tool lease failed`},pc=class extends W{phase;constructor(e){super(`runtime`,`rejected`,fc[e]),this.phase=e}get diagnostic(){return fc[this.phase]}},mc={model:`model-failed`,tool:`tool-failed`,control:`control-failed`,listener:`listener-failed`},hc=class extends W{reason;constructor(e,t){super(`runtime`,`rejected`,`Mule rejected the durable command run`,void 0,t),this.reason=e}get diagnostic(){return mc[this.reason]}};function gc(e){return new hc(e.phase,e)}function _c(e,t){if(e.type===`retry_attempt_started`)return{type:`auto_retry_attempt`,run:e.run,attempt:e.attempt};let n=(`Model request failed. Retry the request. `+Xo({runId:e.run.value,provider:t.provider,model:t.id})).slice(0,200);return e.type===`retry_scheduled`?{type:`auto_retry_start`,run:e.run,attempt:e.attempt,maxAttempts:e.maxAttempts,delayMs:e.delayMs,errorMessage:n}:e.finalError===void 0?{type:`auto_retry_end`,run:e.run,attempt:e.attempt,success:e.success}:{type:`auto_retry_end`,run:e.run,attempt:e.attempt,success:e.success,finalError:n}}function vc(e,t,n,r,i,a,o){let s=e.tools,c=i.modules??[],l=[...c,...a];return s===void 0?c.length>0||o.length>0?E(new pc(`missing`)):C([]):A(function*(){let i={sessionId:t,commandId:n};r!==void 0&&(i={...i,meta:r});let a={sources:s.sources,session:i,sandbox:s.sandbox,onSandboxFailure:r=>gn(e.store,{sessionId:t,commandId:n},r).pipe(te),modules:[...s.modules,...l],tools:o,access:{...s.access,sessionGrants:()=>Mr(e.store,t)?.grants??{}}},c=yield*pn();yield*be(()=>dc(`tools`,n,_n(c,qt(void 0))));let u=yield*(yield*Sn(s.execution===void 0?a:{...a,execution:s.execution}).pipe(f(Ri,c),m(()=>new pc(`runtime`)))).acquire().pipe(f(Ri,c),m(()=>new pc(`lease`)));return[u.executeTool,...u.tools]})}function yc(e,t,n,r,i,a,o){return se(A(function*(){let c=yield*e.instructions.load({sessionId:t.command.sessionId,commandId:t.command.entry.workId}),u=c.release;u!==void 0&&(yield*be(()=>dc(`instructions`,t.command.entry.workId,I(u))));let d=yield*qi(e.model.acquire({sessionId:t.command.sessionId,preference:t.modelPreference}).pipe(s(e=>({...e,release:dc(`model`,t.command.entry.workId,e.release)})))),f=yield*vc(e,t.command.sessionId,t.command.entry.workId,t.command.entry.meta,c,r,i),g=Object.freeze({sessionId:t.command.sessionId,requestId:t.command.entry.requestId,commandId:t.command.entry.workId}),_=yield*Xe(e.store,g,n),v=t=>xn(e.store,{sessionId:g.sessionId,workId:g.commandId,delivery:t}).pipe(s(e=>e.map(({message:e})=>e)),m(e=>({_tag:`MuleError`,phase:`control`,message:e instanceof W?e.message:`Session control delivery failed`}))),ee=t.resume,te=lc(e.compaction)(d.model),ne,y=0;return{run:yield*rc({store:e.store,sessionId:t.command.sessionId,workId:t.command.entry.workId,model:d.model,stream:d.stream,handoff:a,settings:te,path:t.path,messages:t.messages,resuming:ee!==void 0,run:(t,n)=>{y=0;let r=ee;ee=void 0;let i,a=e=>{if(e.type===`run_end`&&e.outcome===`failed`)return i=e,h;if(e.type===`message_end`&&e.value.role===`assistant`&&e.value.stopReason===`error`){let t=d.providerError?.(e.value);if(t!==void 0)return _({...e,value:{...e.value,providerError:t}})}return _(e)},u={model:d.model,modelStreamIdleTimeoutMs:e.modelStreamIdleTimeoutMs,retry:e.retry??ri,retryAfterMs:d.retryAfterMs,retryable:d.retryable,systemPrompt:c.text,prepareSystemPrompt:()=>(o===void 0?C([]):o()).pipe(s(e=>c.text+e.map(({name:e,text:t})=>`\n\n[extension:${e}]\n${t}`).join(``)),m(e=>({_tag:`MuleError`,phase:`model`,message:`Extension prompt is unavailable`,cause:e}))),messages:t,resume:r,tools:f,getSteeringMessages:()=>v(`steer`),prepareNextTurn:e=>n(e.context,e.newMessages.length).pipe(m(e=>({_tag:`MuleError`,phase:`control`,message:e.message}))),onRetry:t=>(t.type===`retry_finished`&&!t.success&&(y=t.attempt+1),Li(e.store,g,_c(t,d.model),t.turn))};return Ct.run(d.stream===void 0?u:{...u,stream:d.stream},a).pipe(l(e=>{if(i===void 0)return h;if(Tn(e)){let t=e.value.modelLimitReason??d.failureReason?.(e.value.message)??Zo(e.value);return ne=(y>1&&e.value.modelLimitReason===void 0&&d.rejection?.(e.value.message)?.code!==`usage-limit-reached`?`The model failed ${String(y)} times on this conversation: ${t}`:t).slice(0,200),_(i,ne)}let t=si(e.cause);return _(i,p(t)?Xo({runId:i.run.value,provider:d.model.provider,model:d.model.id}):t.value.phase===`model`?`model:rejected: ${t.value.message}`.slice(0,200):`runtime:rejected: ${gc(t.value).diagnostic}`)}),m(e=>e.phase===`model`?new W(`model`,`rejected`,e.message,void 0,e):gc(e)))}}),failureReason:ne}}))}function bc(e,t,n){return se(A(function*(){let r=yield*qi(e.model.acquire({sessionId:t.command.sessionId,preference:t.modelPreference})),i=t.command.entry;return yield*ic({store:e.store,sessionId:t.command.sessionId,workId:i.workId,model:r.model,stream:r.stream,handoff:n,settings:lc(e.compaction)(r.model),path:t.path,instructions:xr(i)?i.instructions:void 0})}))}var xc=Object.freeze({maxRecoveries:2});function Sc(e){return new W(`runtime`,`rejected`,e)}function Cc(e){let t=`${e.boundary}:${e.cause}`,n=e instanceof pc||e instanceof hc||e instanceof Ds||e instanceof _i?e.diagnostic:e.boundary===`model`?e.message:void 0;return{kind:`failed`,reason:n===void 0?t:`${t}: ${n}`.slice(0,200)}}function wc(e,t){return d(`shiitake_run_failed`,Xt(t)).pipe(P({workId:e,reason:`${t.boundary}:${t.cause}`}))}function Tc(e,t,n,r){return A(function*(){zi(e.store,n.queue);let i=yield*z({try:()=>ln(n),catch:()=>Sc(`Agent work payload is invalid`)}),a=yield*cn(e.store,i.work);if(a.abnormalTerminal!==void 0)return{kind:a.abnormalTerminal};let o=r?.incompatibleMigrations()[0];if(o!==void 0)return yield*d(`shiitake_run_contract_changed`).pipe(P({workId:n.jobId,terminal:`contract_changed: ${o}`})),yield*E(Sc(`contract_changed: ${o}`));let c=new Set(r?.runParticipants().map(([e])=>e)??[]);if(xr(a.command.entry))return yield*bc(e,a,r?.compactionHandoff(c)),yield*lt(e.store,{sessionId:a.command.sessionId,commandFactId:i.work.commandFactId,workId:a.command.entry.workId,outcome:`completed`}),{kind:`completed`};let l=yield*z({try:()=>Pe(e.store,i.work.sessionId,i.work.commandFactId,a.command.entry.workId),catch:()=>Sc(`Accepted run origin is unavailable`)}),u={sessionId:a.command.sessionId,workId:a.command.entry.workId,origin:l===null?null:{extensionId:zn(Cr)(l.extensionId),correlation:l.correlation}},f=r===void 0?[]:yield*r.filesForRun(u,c),p=r===void 0?[]:yield*De([...c],t=>r.modulesForRun(u,new Set([t])).pipe(R(n=>z({try:()=>{let r=e.extensions.grants.find(e=>e.id===t)?.grantKey??t;return n.map(e=>mn.grantAs(e,r))},catch:()=>Sc(`Extension tools are invalid`)})))).pipe(s(e=>e.flat())),m=r?.compactionHandoff(c),{run:h,failureReason:g}=yield*yc(e,a,{core:f.length===0?t:yield*Ho(f.map(e=>e.descriptor.name)),extensions:r?.runParticipants()??[]},p,f,m,r===void 0?void 0:()=>r.promptSections(u,c));switch(h.status){case`completed`:return{kind:`completed`};case`cancelled`:return{kind:`cancelled`};case`failed`:return{kind:`failed`,reason:g??Zo(h)}}}).pipe(ce(e=>wc(n.jobId,e).pipe(L(Cc(e)))))}var Ec=G(dr,{onExcessProperty:`error`}),Dc=G(Tr(rt)),Oc=G(Ci,{onExcessProperty:`error`});function kc(e){if(e.reply===void 0)return;let t=ar(Oc(e.reply),`Verified Agent reply is invalid`),n=e.mail,r=n?.from.kind===`agent`&&n.from.agentId===t.agentId&&n.from.sessionId===t.sessionId,i=n?.from.kind===`system`&&t.outcome===`undeliverable`&&t.reason===`recipient_offline`;if(n?.replyTo.length!==0||!r&&!i||e.command.type!==`prompt`||e.command.delivery!==`steer`)throw new W(`contract`,`invalid`,`Verified Agent reply does not match its mail`);return t}function Ac(e,t){let n=t.mail;return n?.from.kind===`agent`&&n.replyTo.length>0?{agentId:n.from.agentId,sessionId:n.from.sessionId,name:Nt(t.meta)?.name??n.from.agentId}:t.continuesWorkId===void 0?void 0:Bt(e,t.sessionId,t.continuesWorkId)}function jc(e){let t=t=>({sessionId:H(t.sessionId),requireExistingSession:ar(Dc(t.requireExistingSession),`Session admission condition is invalid`)??!1,command:ar(Dr(t.command),`Session command is invalid`),origin:ar(Ec(t.origin),`Session command origin is invalid`),when:t.when,mail:t.mail,reply:kc(t),onAccepted:t.onAccepted,continuesWorkId:t.continuesWorkId,meta:t.meta===void 0?void 0:vn(e.hostMeta,t.meta)}),n=(t,n)=>{let{sessionId:r,origin:i}=t,a=t.command;if(Or(e.owner,r,a.requestId),t.requireExistingSession&&!zr(e.owner,r))throw new W(`contract`,`closed`,`Session target is unavailable`);let o=e.readQueueHead(r);if(t.when===`idle`&&o.state!==`idle`&&Sr(e.owner,r,a.requestId)===void 0)return Object.freeze({status:`not_ready`});a.type===`prompt`&&Sr(e.owner,r,a.requestId)===void 0&&e.admitNew();let s=a.type===`prompt`&&a.delivery===`steer`&&o.state===`running`&&!o.cancellationRequested&&!tr(e.owner,r,o.jobId)?o.jobId:void 0,c=Kr(e.owner,r,a,t.meta,i,e.contract(),s===void 0?n=>{e.enqueue(n,t.mail)}:void 0,s,t.reply);if(c.delivery===`new`&&s===void 0){let n=Ac(e.owner,t);n!==void 0&&Pr(e.owner,r,c.accepted.commandId,n)}return c.delivery===`new`&&t.onAccepted?.(r,c.accepted.commandId),n.set(r,(n.get(r)??!1)||c.delivery===`new`),Object.freeze({status:`accepted`,commandId:c.accepted.commandId,delivery:c.delivery})},r=(t,r)=>T(()=>{let i=new Map,a=z({try:()=>(i.clear(),e.owner.transactionSync(()=>t(e=>n(e,i)))),catch:e=>e instanceof W?e:new W(`store`,`unavailable`,`Session command admission is unavailable`)});return(r===`request`?e.commit(a):a).pipe(N(()=>I(()=>{for(let[t,n]of i)n&&zi(e.owner,t)})),N(()=>i.size>0?e.requestWake:h))});return Object.freeze({transact:(e,n=`request`)=>r(n=>e(e=>n(t(e))),n),withdraw:(t,n)=>z({try:()=>({sessionId:H(t),requestId:fi({requestId:n})}),catch:e=>e instanceof W?e:new W(`contract`,`invalid`,`Withdrawal request is invalid`)}).pipe(R(t=>r(()=>Ke(e.owner,t.sessionId,t.requestId),`request`))),admit:(e,n)=>z({try:()=>t(e),catch:e=>e instanceof W?e:new W(`contract`,`invalid`,`Session command is invalid`)}).pipe(R(e=>r(t=>t(e),n??`request`)))})}var Mc=`core`,Nc=`core-report`,Pc=256,Fc=1048576,Ic=512,Lc=64,Rc=new TextEncoder,zc=G(Lt(B({name:In.pipe(V(wr(/^[a-z][A-Za-z0-9_-]{0,63}$/u))),text:In.pipe(V(sr(1)),V(ui(e=>Rc.encode(e).byteLength<=8192)))})).pipe(V(En(16)))),Bc=class extends Error{};function Vc(e){return e.length<=Ic?e:`${e.slice(0,511)}…`}var Hc=fr(We(dt));function Uc(e){return e instanceof Ji?e.reason:`${e._tag}: ${e.message}`}function Wc(e){return e instanceof Ji||e instanceof Yi||e instanceof $i||e instanceof Xi}function Gc(e,t){let r=si(t);if(w(r)){let t=r.value;return t instanceof Ji?Vc(t.reason):Vc(Wc(t)?`${e}: ${Uc(t)}`:`${e} failed`)}let i=n(Gr(t));return w(i)?i.value instanceof Error?Vc(i.value.name===`AsyncFiberError`?`${e} crossed an asynchronous boundary inside a core transaction`:`${e} defect: ${i.value.message}`):Vc(`${e} defect`):Vc(`${e} was interrupted`)}function Kc(e){let t=si(e);return p(t)||t.value instanceof Ji}function Z(e,t){return new Yi({reason:e,message:t})}function qc(e,t){return e.length>=1&&e.length<=Pc?C(e):E(Z(`bound`,`${t} must be 1..256 characters`))}function Jc(e){let t=Vc(e.message);if(e instanceof Xi)switch(e.reason){case`invalid`:return new W(`contract`,`invalid`,t);case`conflict`:return new W(`store`,`conflict`,t);case`not_found`:return new W(`store`,`rejected`,t);case`rejected`:return new W(`extensions`,`rejected`,t)}if(e instanceof $i)switch(e.reason){case`invalid`:return new W(`contract`,`invalid`,t);case`conflict`:return new W(`contract`,`conflict`,t);case`closed`:return new W(`runtime`,`closed`,t)}return e.reason===`bound`?new W(`contract`,`invalid`,t):new W(`store`,`unavailable`,t)}function Yc(e){let{owner:t}=e,n=new WeakMap,r=new Map,i=new Set,o,l=new Set,u=new Set,m,g=e=>Object.freeze({extensionId:e}),_=e=>R(Qi,t=>t.extensionId===e?h:ve(Error(`Extension read used another extension's context`))),v=e=>R(Zi,t=>{let r=n.get(t);return r?.extensionId===e?C(r):ve(Error(`Extension write used outside its own core transaction`))}),y=e=>z({try:e,catch:()=>Z(`unavailable`,`Extension state is unavailable`)}),b=(e,t)=>e.admitted.grants.has(t)?h:E(Z(`unavailable`,`Extension is not granted ${t}`));function S(e,n,r){let i=e.admitted.id,a=rr(We(r.schema)),c=Si(r.schema),l=e=>{let t=a(e);return t._tag===`Failure`?E(Z(`decode`,`Stored ${n} record is invalid`)):C(t.success)};return Object.freeze({peek:r=>{if(o!==i||!e.admitted.grants.has(`state`))throw Error(`Extension read used outside its own projection`);let s=oi(t,i,n,r);if(s===void 0)return k();let c=a(s);if(c._tag===`Failure`)throw Z(`decode`,`Stored ${n} record is invalid`);return F(c.success)},peekPage:r=>{if(o!==i||!e.admitted.grants.has(`state`))throw Error(`Extension read used outside its own projection`);if(!Number.isSafeInteger(r.limit)||r.limit<1||r.limit>Lc)throw Z(`bound`,`Page limit must be 1..64`);return Er(t,i,n,r).map(e=>{let t=a(e);if(t._tag===`Failure`)throw Z(`decode`,`Stored ${n} record is invalid`);return t.success})},get:r=>_(i).pipe(x(b(e,`state`)),x(y(()=>oi(t,i,n,r))),R(e=>e===void 0?C(k()):l(e).pipe(s(F)))),page:r=>_(i).pipe(x(b(e,`state`)),x(Number.isSafeInteger(r.limit)&&r.limit>=1&&r.limit<=Lc?h:E(Z(`bound`,`Page limit must be 1..64`))),x(y(()=>Er(t,i,n,r))),R(e=>De(e,l))),put:a=>v(i).pipe(x(b(e,`state`)),x(T(()=>{let e=c(a);if(e._tag===`Failure`)return E(Z(`encode`,`The ${n} record does not match its schema`));let o=JSON.stringify(e.success);if(Rc.encode(o).byteLength>Fc)return E(Z(`bound`,`The ${n} record exceeds 1 MiB`));let s=r.index?.(a)??null;return de([qc(r.key(a),`A record key`),s===null?C(null):qc(s,`A record index`)]).pipe(R(([e,r])=>y(()=>{Lr(t,i,n,e,r,o)})))}))),remove:r=>v(i).pipe(x(b(e,`state`)),x(y(()=>{Ln(t,i,n,r)})))})}function ie(e,n,r){let i=e.admitted.id,a=rr(We(r.schema)),o=Si(r.schema),s=()=>{if(!l.has(i)||!e.admitted.grants.has(`state`))throw Z(`unavailable`,`Extension state update is unavailable`)},c=e=>{if(e.length<1||e.length>Pc)throw Z(`bound`,`A record key must be 1..256 characters`);return e},u=e=>{let t=a(e);if(t._tag===`Failure`)throw Z(`decode`,`Stored ${n} record is invalid`);return t.success};return Object.freeze({get:e=>{s();let r=oi(t,i,n,c(e));return r===void 0?k():F(u(r))},page:e=>{if(s(),!Number.isSafeInteger(e.limit)||e.limit<1||e.limit>Lc)throw Z(`bound`,`Page limit must be 1..64`);return Er(t,i,n,e).map(u)},put:e=>{s();let a=o(e);if(a._tag===`Failure`)throw Z(`encode`,`The ${n} record does not match its schema`);let l=JSON.stringify(a.success);if(Rc.encode(l).byteLength>Fc)throw Z(`bound`,`The ${n} record exceeds 1 MiB`);let u=r.index?.(e)??null;u!==null&&c(u),Lr(t,i,n,c(r.key(e)),u,l)},remove:e=>{s(),Ln(t,i,n,c(e))}})}function ae(e){let n=e.admitted.id;return Object.freeze({set:(r,i)=>v(n).pipe(N(()=>b(e,`timers`)),N(()=>qc(r,`A timer key`)),N(()=>Number.isSafeInteger(i)&&i>=0?h:E(Z(`bound`,`A timer instant is invalid`))),R(e=>y(()=>{pr(t,n,r,i),e.timersChanged=!0}))),cancel:r=>v(n).pipe(N(()=>b(e,`timers`)),R(e=>y(()=>{Jt(t,n,r),e.timersChanged=!0}))),read:r=>_(n).pipe(x(b(e,`timers`)),x(y(()=>di(t,n,r))),s(ne))})}function oe(n){let r=n.admitted.id,i=(i,a)=>v(r).pipe(N(()=>b(n,`attention`)),R(n=>z({try:()=>{H(i),a(),Ye(t,i,e.readQueueHead(i)),n.observed.add(i)},catch:e=>e instanceof Yi&&e.reason===`session_absent`?e:e instanceof W&&e.cause===`invalid`?Z(`bound`,e.message):Z(`unavailable`,`Attention update is unavailable`)})));return{set:(e,n)=>{let a=G(Vr,{onExcessProperty:`error`})(n.waitingOn===void 0?n:{...n,inbox:!1});return a._tag===`Failure`?E(Z(`bound`,`Attention item is invalid`)):i(e,()=>{if(!zr(t,e))throw Z(`session_absent`,`Attention Session is absent`);Ut(t,e,r,a.success)})},awaitsPerson:e=>_(r).pipe(N(()=>b(n,`attention`)),x(y(()=>Ar(t,e)))),clear:(e,n)=>qc(n,`An attention id`).pipe(x(i(e,()=>{Fe(t,e,r,n)})))}}function se(e){let t=e.admitted.id;return n=>v(t).pipe(R(r=>e.admitted.grants.has(`send`)?z({try:()=>{let{requireExistingSession:e=!1}=n,i=r.admit({sessionId:n.sessionId,requireExistingSession:e,command:{type:`prompt`,requestId:n.prompt.requestId,delivery:n.prompt.delivery,text:n.prompt.text},when:n.when,origin:{kind:`extension`,extensionId:t,correlation:n.correlation??null},continuesWorkId:n.continuesWorkId});return i.status===`accepted`?{_tag:`Accepted`,commandId:i.commandId,delivery:i.delivery}:{_tag:`NotReady`}},catch:e=>new $i({reason:e instanceof W?e.cause===`conflict`?`conflict`:e.cause===`archived`?`archived`:e.cause===`closed`?`closed`:`invalid`:`invalid`,message:e instanceof W?e.message:`Session command is invalid`})}):E(new $i({reason:`closed`,message:`Extension is not granted send`}))))}function le(r,i,a){return T(()=>{let o,c,l=Error(`Extension transaction rolled back`);return e.door.transact(e=>{let t=g(r.admitted.id);c={extensionId:r.admitted.id,admit:e,observed:new Set,timersChanged:!1},n.set(t,c),u.add(r.admitted.id);let a=m;m=c;try{o=_e(i.pipe(f(Zi,t),f(Qi,t)))}finally{m=a,n.delete(t),u.delete(r.admitted.id)}if(jn(o))throw l;return o.value},a).pipe(s(()=>{if(o===void 0)throw Error(`Extension transaction returned no exit`);return o}),ce(e=>o!==void 0&&jn(o)?C(o):E(e)),N(n=>Tn(n)&&c!==void 0?A(function*(){for(let e of c?.observed??[])zi(t,e);a===`request`&&c?.timersChanged===!0&&(yield*e.requestWake)}):h))})}function ue(n){let r=``;for(let i=0;i<_r;i+=Lc){let i=Mt(t,n,r);for(let n of i)Ye(t,n,e.readQueueHead(n)),queueMicrotask(()=>{zi(t,n)});let a=i.at(-1);if(i.length<Lc||a===void 0)return;r=a}}function O(e,n,r,i){let a=Date.now();e.status=`stopped`,e.reason=n,e.stoppedAt=a;let o=z({try:()=>{let r=()=>{ir(t,e.admitted.id,{status:`stopped`,reason:n,stoppedAt:a,revision:e.admitted.revision}),ue(e.admitted.id)};i===`own-transaction`?t.transactionSync(r):r()},catch:t=>new W(`store`,`unavailable`,`Extension ${e.admitted.id} stop status is unavailable`,void 0,t)});return A(function*(){let t=yield*D(o);return yield*d(`shiitake_extension_stopped`).pipe(P({extensionId:e.admitted.id,reason:n,cause:r===void 0?null:Xt(r),durable:Tn(t)})),yield*t})}function fe(e,n,r){e.status=`stopped`,e.reason=n,e.stoppedAt=Date.now();let i=()=>{ir(t,e.admitted.id,{status:`stopped`,reason:n,stoppedAt:e.stoppedAt,revision:e.admitted.revision}),ue(e.admitted.id)};try{r===`own-transaction`?t.transactionSync(i):i()}catch(t){throw new W(`store`,`unavailable`,`Extension ${e.admitted.id} stop status is unavailable`,void 0,t)}}function j(e,n,r){let i=t=>{if(m?.extensionId!==e.admitted.id||!e.admitted.grants.has(`state`))throw Z(`unavailable`,`Session documents require the extension's state transaction`);return H(t),m},a=a=>{i(a);let o=Vn(t,a,e.admitted.id,n)??To(r,r.initial);if(Rc.encode(o).byteLength>r.maxBytes)throw Z(`bound`,`Session document exceeds maxBytes`);let s=G(We(r.schema))(o);if(s._tag===`Failure`)throw Z(`decode`,`Stored session document does not match its schema`);return s.success};return Object.freeze({read:a,update:(o,s)=>{let c=i(o),l=s(a(o));dn(t,o,e.admitted.id,n,To(r,l)),c.observed.add(o)}})}function pe(e){let n=new Set;return Object.freeze({collection:(t,n)=>S(e,t,n),updateCollection:(t,n)=>ie(e,t,n),document:(t,n)=>j(e,t,n),update:r=>{let i=e.admitted.id;if(e.status!==`running`||!e.admitted.grants.has(`state`)||l.has(i)||u.has(i)||o===i)throw Z(`unavailable`,`Extension state update is unavailable`);try{let e=t.transactionSync(()=>{l.add(i);try{return ai(r,void 0)}finally{l.delete(i)}});for(let e of n)zi(t,e);return e}catch(t){if(!(t instanceof mi))throw t;let n=t.message;throw fe(e,n,`own-transaction`),new Ji({reason:n})}finally{n.clear()}},observeUpdate:t=>{if(!l.has(e.admitted.id))throw Z(`unavailable`,`Extension observation is unavailable`);n.add(H(t))},context:Object.freeze({manifest:e.admitted.manifest,revision:e.admitted.revision,grants:Object.freeze([...e.admitted.grants]),send:se(e),timers:ae(e),attention:oe(e),isObserved:n=>e.status===`running`&&nt(t,n),sessionPosition:n=>_(e.admitted.id).pipe(x(b(e,`state`)),x(y(()=>{let e=H(n);if(!zr(t,e))throw Z(`unavailable`,`Session timeline is unavailable`);return Ti(t,{sessionId:e})?.newestSequence??0}))),hasPendingSteer:n=>_(e.admitted.id).pipe(x(b(e,`run_tools`)),x(y(()=>pi(t,H(n.sessionId),n.workId)))),workSender:n=>_(e.admitted.id).pipe(x(b(e,`run_tools`)),x(y(()=>Bt(t,H(n.sessionId),n.workId)??null))),hasSuccessfulToolResult:(n,r)=>_(e.admitted.id).pipe(x(b(e,`run_tools`)),x(y(()=>bi(t,H(n.sessionId),n.workId,r)))),observe:t=>v(e.admitted.id).pipe(s(e=>{e.observed.add(t)})),transact:t=>(e.status===`running`?le(e,t,`request`).pipe(te):E(new Ji({reason:e.reason??`Extension is stopped`}))).pipe(R(t=>{if(Tn(t))return C(t.value);if(!Kc(t.cause))return re(t.cause);let n=Gc(`transact`,t.cause);return O(e,n,t.cause,`own-transaction`).pipe(R(()=>E(new Ji({reason:n}))))}))})})}function M(e){let{id:n,definition:r,revision:i}=e.admitted,a=r.state.version,o=Wn(t,n);if(o!==void 0&&o.version>a)throw new W(`extensions`,`conflict`,`Stored ${n} state version ${String(o.version)} is newer than ${String(a)}`);if(o!==void 0&&o.version<a){let e=cr(t,n).map(e=>({collection:e.collection,key:e.key,value:Hc(e.valueJson)}));for(let t=o.version;t<a;t+=1){let i=r.state.migrations[t];if(i===void 0)throw new W(`extensions`,`state_reset_required`,`State reset required for ${n}: stored version ${String(o.version)}, declared version ${String(a)}. An operator must authorize the reset; stored records have not been changed.`);try{e=e.flatMap(e=>i(e))}catch(e){throw new Bc(`Failed ${n} state migration from ${String(t)}`,{cause:e})}}Nn(t,n);for(let i of e){let e=r.state.collections[i.collection];if(e===void 0)throw new Bc(`Migrated ${n} record names an undeclared collection`);let a=e.indexFromEncoded(i.value);if(a._tag===`Failure`)throw new Bc(`Migrated ${n} ${i.collection} record is invalid`);Lr(t,n,i.collection,i.key,a.success,JSON.stringify(i.value))}}vi(t,n,a,i)}function me(e,t,n=!1){let r=pe(e);return A(function*(){let i=yield*ut(t);e.scope=i;let a=yield*T(()=>e.admitted.definition.activate(r)).pipe(f(Ri,i),D);if(Tn(a)){e.hooks=a.value;return}if(yield*_n(i,a),n)return yield*E(new W(`extensions`,`rejected`,`Extension ${e.admitted.id} failed to start: ${Gn(a.cause)}`));yield*O(e,Gc(`activation`,a.cause),a.cause,`own-transaction`)})}let he=e=>[...r.values()].filter(t=>t.status===`running`&&t.hooks!==void 0&&t.admitted.grants.has(e));function ge(e){return Object.freeze({id:e.admitted.id,version:e.admitted.manifest.version,revision:e.admitted.revision,status:e.status,reason:e.reason,stoppedAt:e.stoppedAt})}function ye(e){return e.status===`running`&&e.hooks!==void 0&&(e.admitted.grants.has(`run_tools`)||e.admitted.grants.has(`files`)||e.admitted.grants.has(`prompt`)||e.admitted.grants.has(`compaction_handoff`))}function be(e,t,n){return D(n.pipe(f(Qi,g(e.admitted.id)))).pipe(R(n=>Tn(n)?C(F(n.value)):O(e,Gc(t,n.cause),n.cause,`own-transaction`).pipe(L(k()))))}let Se=(e,t,n)=>jn(n)?O(e,Gc(t,n.cause),n.cause,`own-transaction`):h;function Ce(e){return z({try:()=>{t.transactionSync(()=>{M(e);for(let[n,r]of Object.entries(e.admitted.documents))ii(t,{extensionId:e.admitted.id,name:n,initialJson:To(r,r.initial),fork:r.fork,maxBytes:r.maxBytes})})},catch:e=>e}).pipe(N(()=>I(()=>{delete e.stateResetRequired})),L(!0),ce(t=>t instanceof W?t.cause===`state_reset_required`?(e.stateResetRequired=t,O(e,Vc(t.message),gi(t),`own-transaction`).pipe(L(!1))):E(t):(t instanceof Bc&&(e.admitted.grants.has(`run_tools`)||e.admitted.grants.has(`files`)||e.admitted.grants.has(`prompt`)||e.admitted.grants.has(`compaction_handoff`))&&i.add(e.admitted.id),O(e,Vc(t instanceof Error?`migration: ${t.message}`:`migration failed`),lr(t),`own-transaction`).pipe(L(!1)))))}return A(function*(){let n=yield*pn();function l(e,r){return A(function*(){let i=Yr(t,e.id),a=i?.status===`stopped`&&i.revision===e.revision,o={admitted:e,hooks:void 0,status:a?`stopped`:`running`,reason:a?i.reason:null,stoppedAt:a?i.stoppedAt:null};return yield*z({try:()=>{e.grants.has(`settled`)&&t.transactionSync(()=>{q(t,e.id)===void 0&&bt(t,e.id,q(t,`core`)??0)})},catch:()=>new W(`store`,`unavailable`,`Settled cursor is unavailable`)}),!(yield*Ce(o))||a?r?yield*E(new W(`extensions`,`rejected`,`Extension ${e.id} cannot start: ${o.reason??`stopped`}`)):o:(yield*z({try:()=>{t.transactionSync(()=>{ir(t,e.id,{status:`running`,reason:null,stoppedAt:null,revision:e.revision}),ue(e.id)})},catch:()=>new W(`store`,`unavailable`,`Extension status is unavailable`)}),yield*me(o,n,r),o)})}for(let t of e.admitted){let e=yield*l(t,!1).pipe(a(()=>_n(n,Ae)));r.set(t.id,e)}yield*z({try:()=>{t.transactionSync(()=>{let n=It(t,e.admitted.filter(e=>e.grants.has(`attention`)).map(e=>e.id));for(let e of n)ue(e)})},catch:()=>new W(`store`,`unavailable`,`Attention grants are unavailable`)});let u={stage:e=>A(function*(){let n=e.filter(e=>{let t=r.get(e.id);return t!==void 0&&t.admitted.fingerprint!==e.fingerprint});if(n.length>0)return yield*E(new W(`extensions`,`rejected`,`Extensions ${n.map(({id:e})=>e).join(`, `)}: this change needs a restart: run fungi stop, then reopen fungi`));let o=new Map,s=T(()=>De([...o.values()].reverse(),e=>D(e.scope===void 0?h:_n(e.scope,Ae)),{concurrency:1}).pipe(N(()=>I(()=>{for(let t of e)r.has(t.id)||i.delete(t.id)})),R(yt)));yield*A(function*(){for(let t of e)r.has(t.id)||o.set(t.id,yield*l(t,!0))}).pipe(a(()=>s));let c=new Set(e.map(({id:e})=>e)),u=!1;return{discard:T(()=>u?h:(u=!0,s)),apply:A(function*(){if(u)return yield*E(new W(`extensions`,`rejected`,`Roster transition already settled`));yield*z({try:()=>{t.transactionSync(()=>{for(let[e,n]of r)c.has(n.admitted.id)||kn(t,e);let n=It(t,e.filter(e=>e.grants.has(`attention`)).map(({id:e})=>e));for(let e of n)ue(e)})},catch:()=>new W(`store`,`unavailable`,`Roster publication storage is unavailable`)});for(let[e,t]of r)c.has(t.admitted.id)||(t.scope!==void 0&&(yield*_n(t.scope,Ae)),r.delete(e),i.delete(t.admitted.id));for(let[e,t]of o)r.set(e,t);u=!0})}}),runParticipants:()=>[...r.values()].filter(ye).map(e=>[e.admitted.id,e.admitted.fingerprint]),incompatibleMigrations:()=>[...i],modulesForRun:(e,t)=>De(he(`run_tools`),n=>{let r=n.hooks?.moduleForRun;return!t.has(n.admitted.id)||r===void 0?C(k()):be(n,`moduleForRun`,T(()=>r(e))).pipe(s(c))}).pipe(s(e=>e.flatMap(xe))),filesForRun:(e,t)=>A(function*(){let n=he(`files`).find(e=>t.has(e.admitted.id));if(n===void 0)return[];let r=n.hooks?.filesForRun;if(r===void 0)return yield*O(n,`files: granted capability has no handler`,void 0,`own-transaction`),yield*E(new W(`extensions`,`rejected`,`Extension Files are unavailable`));let i=yield*be(n,`filesForRun`,T(()=>r(e)));return p(i)?yield*E(new W(`extensions`,`rejected`,`Extension Files capture failed`)):Object.freeze([...ee(i.value,()=>[])])}),promptSections:(e,t)=>A(function*(){let n=[],r=0;for(let i of he(`prompt`)){if(!t.has(i.admitted.id))continue;let a=i.hooks?.prompt;if(a===void 0)return yield*O(i,`prompt: granted capability has no handler`,void 0,`own-transaction`),yield*E(new W(`extensions`,`rejected`,`Extension prompt is unavailable`));let o=yield*D(Ur(()=>a(e)).pipe(f(Qi,g(i.admitted.id))));if(jn(o))return yield*O(i,Gc(`prompt`,o.cause),o.cause,`own-transaction`),yield*E(new W(`extensions`,`rejected`,`Extension prompt failed`));let s=zc(o.value),c=s._tag===`Success`?s.success:[];if(r+=c.reduce((e,t)=>e+Rc.encode(t.text).byteLength,0),s._tag===`Failure`||new Set(c.map(({name:e})=>e)).size!==c.length||r>65536)return yield*O(i,`prompt: section is invalid or exceeds its bound`,void 0,`own-transaction`),yield*E(new W(`extensions`,`rejected`,`Extension prompt is invalid`));n.push(...[...c].sort((e,t)=>e.name<t.name?-1:+(e.name>t.name)).map(e=>({name:`${i.admitted.id}.${e.name}`,text:e.text})))}return n}),compactionHandoff:e=>he(`compaction_handoff`).find(({admitted:t})=>e.has(t.id))?.hooks?.compactionHandoff,settledConsumers:()=>he(`settled`).map(e=>({id:e.admitted.id,cursor:q(t,e.admitted.id)??0})),deliverSettled:(e,n)=>De(he(`settled`),r=>T(()=>{let i=q(t,r.admitted.id)??0;if(n<=i)return h;let a=e.filter(({sequence:e})=>e>i),o=r.hooks?.onSettled;return le(r,(o===void 0||a.length===0?h:o(a)).pipe(x(I(()=>{bt(t,r.admitted.id,n)}))),`reconcile`).pipe(R(e=>Se(r,`onSettled`,e)))}),{discard:!0}),fireDueTimers:e=>A(function*(){let n=he(`timers`).map(({admitted:e})=>e.id),i=Wr(t,n,e,Lc);for(let n of i){let i=r.get(n.extensionId);if(i?.status!==`running`)continue;let a=i.hooks?.onTimer,o=yield*le(i,T(()=>di(t,n.extensionId,n.key)===n.dueAt?(Jt(t,n.extensionId,n.key),a===void 0?h:a({key:n.key,dueAt:n.dueAt,firedAt:e})):h),`reconcile`);yield*Se(i,`onTimer`,o)}return i.length===Lc}),timerWake:e=>er(t,he(`timers`).map(({admitted:e})=>e.id),e),project:e=>{let t={};for(let n of r.values()){let r=n.admitted.grants.has(`projection`),i=n.admitted.grants.has(`commands`)?n.admitted.definition.catalog:void 0;if(!r&&i===void 0)continue;let a=n.admitted.revision,s=n.admitted.definition.contract.projection,c=n.hooks?.project;if(n.status===`running`&&n.hooks!==void 0){let l=!r||c===void 0||s===null?F(null):(()=>{let t=null,r;o=n.admitted.id;try{let r=ai(()=>c(e),void 0);if(w(r)){let e=Si(s.schema)(r.value);if(e._tag===`Failure`)throw Error(`Extension projection is invalid`);let a=G(dt)(e.success);if(a._tag===`Failure`)throw Error(`Extension projection is not JSON`);t=a.success;let o=n.hooks.projectCatalog;i!==void 0&&o!==void 0&&(i=zn(dt)(ai(()=>o(a.success),void 0)))}}catch(e){r=e}finally{o=void 0}return r===void 0?F(t):(fe(n,Vc(r instanceof Error?`project defect: ${r.message}`:`project defect`),`enclosing-transaction`),k())})();if(w(l)){t[n.admitted.id]=Object.freeze(i===void 0?{status:`running`,revision:a,value:l.value}:{status:`running`,revision:a,value:l.value,catalog:i});continue}}t[n.admitted.id]=Object.freeze({status:`stopped`,revision:a,reason:n.reason??`Extension did not activate`})}return Object.freeze(t)},call:(e,t,n,i,a)=>A(function*(){let o=r.get(t);if(o?.admitted.grants.has(`commands`)!==!0)return yield*E(new W(`extensions`,`unavailable`,`Extension is unavailable`));if(o.status!==`running`||o.hooks===void 0)return yield*E(o.stateResetRequired??new W(`extensions`,`unavailable`,`Extension ${t} is stopped: ${o.reason??`not activated`}`));let s=o.admitted.definition.contract.commands,c=Object.hasOwn(s,n)?s[n]:void 0;if(c?.scope!==e.scope)return yield*E(new W(`contract`,`invalid`,`Extension command is unknown`));let l=e.scope===`session`?yield*z({try:()=>H(e.sessionId),catch:()=>new W(`contract`,`invalid`,`Session id is invalid`)}):null,u=o.hooks.commands.get(n);if(u===void 0)return G(c.input,{onExcessProperty:`error`})(i)._tag===`Failure`?yield*E(new W(`contract`,`invalid`,`Extension command input is invalid`)):(yield*O(o,`command ${n} has no handler`,void 0,`own-transaction`),yield*E(new W(`extensions`,`unavailable`,`Extension is stopped`)));let d=u(a===void 0?{sessionId:l,input:i}:{sessionId:l,input:i,caller:a});if(d._tag===`Failure`)return yield*E(new W(`contract`,`invalid`,`Extension command input is invalid`));let f=yield*le(o,d.success(),`request`);if(Tn(f))return f.value;let p=si(f.cause);if(w(p)&&!Kc(f.cause))return yield*E(Jc(p.value));let m=Gc(`command ${n}`,f.cause);return yield*O(o,m,f.cause,`own-transaction`),yield*E(new W(`extensions`,`unavailable`,`Extension ${t} is stopped: ${m}`))}),list:()=>[...r.values()].map(ge),resume:i=>A(function*(){let a=r.get(i);return a===void 0?yield*E(new W(`extensions`,`unavailable`,`Extension is unavailable`)):(a.status===`stopped`&&(yield*z({try:()=>{t.transactionSync(()=>{ir(t,a.admitted.id,{status:`running`,reason:null,stoppedAt:null,revision:a.admitted.revision}),ue(a.admitted.id)})},catch:()=>new W(`store`,`unavailable`,`Extension status is unavailable`)}),a.status=`running`,a.reason=null,a.stoppedAt=null,a.hooks===void 0&&(yield*Ce(a))&&(yield*me(a,n)),yield*e.requestWake),ge(a))}),close:_n(n,Ae)};return Object.freeze(u)})}var Xc=64;function Q(e){return new W(`runtime`,`rejected`,e)}function Zc(e,t,n){return A(function*(){let r=yield*Qc(t),i=t.outcome===`cancelled`?``:yield*mt(e,r.work),a=yield*Yt(e,r.work,t.outcome),o=t.outcome===`completed`||t.outcome===`cancelled`?void 0:yield*Et(e,r.work),s={job:t,content:i};o!==void 0&&(s={...s,diagnostic:o});let c=t.outcome===`cancelled`?[]:yield*n;return c.length>0&&(s={...s,waitingOnYou:c}),a===void 0?s:{...s,meta:a}})}function Qc(e){return z({try:()=>ln(e),catch:()=>Q(`Agent work payload is invalid`)})}function $c(e,t){return e.fanOut(t).pipe(m(()=>Q(`Agent reply fan-out is unavailable`)))}function el(e,t,n){return t===void 0?h:A(function*(){let r=yield*Qc(n);(r.mail?.replyTo.length??0)!==0&&(yield*$c(t,yield*Zc(e,n,z({try:()=>Je(e,r.work.sessionId,r.work.commandFactId),catch:()=>Q(`Session attention is unavailable`)}))))})}function tl(e,t,n,r){return n===void 0?h:A(function*(){let i=yield*Qc(r),a=i.mail;if(a!==void 0&&a.replyTo.length>0||(yield*t.readQueueHead(r.queue).pipe(m(()=>Q(`Session queue head is unavailable`)))).state!==`idle`)return;let o=yield*z({try:()=>Pi(e,i.work.sessionId),catch:()=>Q(`Session delegator is unavailable`)});if(o===void 0)return;let s=a?.reply===void 0?a?.from:void 0;s!==void 0&&!(s.kind===`agent`&&o.replyTo.some(({agentId:e})=>e===s.agentId))||(yield*$c(n,{...yield*Zc(e,r,z({try:()=>Ze(e,i.work.sessionId,o.replyTo),catch:()=>Q(`Session attention is unavailable`)})),delegator:o}))})}function nl(e,t,n,r){return De(r,(i,a)=>A(function*(){!r.slice(a+1).some(({job:e})=>e.queue===i.job.queue)&&!(yield*ol(e,i.job))&&(yield*tl(e,t,n,i.job)),yield*z({try:()=>{bt(e,Nc,i.sequence)},catch:()=>Q(`Settled cursor is unavailable`)})}),{discard:!0})}function rl(e,t){let n=t.outcome;return n!==`interrupted`&&n!==`cancelled`&&n!==`failed`?h:A(function*(){let r=yield*z({try:()=>ln(t),catch:()=>Q(`Agent work payload is invalid`)});yield*lt(e,{sessionId:r.work.sessionId,commandFactId:r.work.commandFactId,workId:t.jobId,outcome:n,diagnostic:t.failureReason})})}function il(e,t,n){return A(function*(){let r=yield*z({try:()=>ln(n),catch:()=>Q(`Agent work payload is invalid`)}),i=n.outcome===`outcome_unknown`?`interrupted`:n.outcome;yield*fn(e,{sessionId:r.work.sessionId,parentWorkId:n.jobId,outcome:i,diagnostic:n.failureReason,enqueue:e=>{t.transactional.enqueueAcceptedJob(Ge({work:{...e,recovery:xc},delivery:e.delivery}))}})})}function al(e){return e===void 0?h:e.drainOutbox().pipe(m(()=>Q(`Agent reply delivery is unavailable`)))}function ol(e,t){return A(function*(){let n=yield*z({try:()=>ln(t),catch:()=>Q(`Agent work payload is invalid`)}),r=yield*z({try:()=>Zn(e,n.work.sessionId),catch:()=>Q(`Session lineage state is unavailable`)});return r&&(yield*i(`shiitake_settlement_session_refused`).pipe(P({workId:t.jobId}))),r})}function sl(e,t){let n=ln(t.job),r=Zn(e,n.work.sessionId)?Object.freeze({terminal:`missing`,toolCalls:0,origin:Pe(e,n.work.sessionId,n.work.commandFactId,t.job.jobId)}):$e(e,n.work.sessionId,n.work.commandFactId,t.job.jobId);return Object.freeze({sequence:t.sequence,sessionId:n.work.sessionId,workId:t.job.jobId,outcome:t.job.outcome,terminal:r.terminal,toolCalls:r.toolCalls,origin:r.origin===null?null:Object.freeze({extensionId:zn(Cr)(r.origin.extensionId),correlation:r.origin.correlation})})}function cl(e,t,n,r){return De(r,r=>A(function*(){zi(e,r.job.queue),(yield*ol(e,r.job))||(yield*rl(e,r.job),yield*il(e,t,r.job),yield*el(e,n,r.job)),yield*z({try:()=>{bt(e,Mc,r.sequence)},catch:()=>Q(`Settled cursor is unavailable`)})}),{discard:!0})}function ll(e){return A(function*(){if((yield*e.watchdog.tick()).status===`busy`)return yield*E(Q(`Runtime reconciliation is already active`));let t=yield*z({try:()=>q(e.store,`core`)??0,catch:()=>Q(`Settled cursor is unavailable`)}),n=yield*z({try:()=>q(e.store,`core-report`)??t,catch:()=>Q(`Settled cursor is unavailable`)}),r=e.extensions.settledConsumers(),i=Math.min(t,n,...r.map(({cursor:e})=>e)),a=yield*e.watchdog.readSettled(Xc,i),o=yield*D(cl(e.store,e.watchdog,e.mailRoom,a.filter(({sequence:e})=>e>t))),s=yield*z({try:()=>q(e.store,`core`)??0,catch:()=>Q(`Settled cursor is unavailable`)}),c=yield*z({try:()=>a.filter(({sequence:e})=>e<=s).map(t=>sl(e.store,t)),catch:()=>Q(`Settled run facts are unavailable`)});yield*e.extensions.deliverSettled(c,s);let l=yield*D(nl(e.store,e.watchdog,e.mailRoom,a.filter(({sequence:e})=>e>n&&e<=s))),u=yield*e.extensions.fireDueTimers(Date.now());if((a.length===Xc||u)&&(yield*e.requestWake),yield*al(e.mailRoom),jn(o))return yield*re(o.cause);if(jn(l))return yield*re(l.cause)}).pipe(m(e=>e instanceof W?e:Q(`Runtime reconciliation failed`)))}function $(e){return new W(`runtime`,`rejected`,e)}function ul(e,n,r,i){return A(function*(){if(e.hostJobs?.lane==="default")return yield*E($(`Host lane conflicts with Agent work`));let o=`open`,c,l,u=on(!1),f=e=>I(()=>{o===`open`&&(c??=e)}),p=T(()=>o===`open`?(o=`closing`,l=c,u.open):h).pipe(ae),_={},v={current:void 0},ee=e,ne,y=!1,b=T(()=>_.requestWake??E($(`Runtime host is unavailable`))),S={current:void 0},ie=new Set,oe=new Map,se={owner:e.store,isAlive:()=>C(!1),executor:{execute:t=>he(I(()=>{let n=t.lane===e.hostJobs?.lane?{kind:`host`,lane:t.lane,jobId:t.jobId}:{kind:`session`,sessionId:t.queue,commandId:t.jobId};oe.set(n.kind===`host`?`host`:`serial`,n),n.kind===`session`&&ie.add(t.queue),Qt(e.store)}),()=>t.lane===e.hostJobs?.lane?S.current?.execute(t)??E(new Ki(`execution_failed`)):A(function*(){let r=ne;if(r!==void 0){yield*r.apply;let{tools:t,...n}=e;ee={...n,...r.configuration},ne=void 0}return yield*Tc(ee,n,t,v.current)}).pipe(O(e=>d(`configuration_apply_failed`,e)),m(()=>new Ki(`execution_failed`))),()=>I(()=>{t.lane!==e.hostJobs?.lane&&ie.delete(t.queue),oe.delete(t.lane===e.hostJobs?.lane?`host`:`serial`),Qt(e.store)}))},wake:{recompute:()=>b.pipe(m(()=>new Ki(`wake_unavailable`)))},project:t=>{Vt(e.store,t,Date.now())}},w=yield*(e.hostJobs===void 0?Gi(se):Gi({...se,concurrentLane:e.hostJobs.lane}).pipe(N(t=>I(()=>{S.current=e.hostJobs?.open(t)})))).pipe(m(()=>$(`Watchdog is unavailable`))),le=()=>({core:n,extensions:[...v.current?.runParticipants()??[]]});yield*z({try:()=>lc(e.compaction),catch:e=>e instanceof W?e:$(`Compaction settings are unavailable`)});let ue=yield*z({try:()=>at(e.storagePressure),catch:e=>e instanceof W?e:$(`Storage budget is unavailable`)}),D=()=>{e.admission?.assertOpen(),ue.admitNew()},fe=()=>{let t;do{let n=Ir(e.store,t);for(let e of n.sessions){if(e.state===`unavailable`)throw new W(`store`,`unavailable`,`Session ${e.sessionId} is unreadable`);let t=w.transactional.readQueueHead(e.sessionId);if(t.state!==`idle`)return{kind:`session`,sessionId:e.sessionId,commandId:t.jobId}}t=n.next}while(t!==void 0);let n=Yo(e.store);return n===void 0?void 0:{kind:`delegation`,...n}},k=jc({owner:e.store,admitNew:D,hostMeta:e.meta,contract:le,enqueue:(e,t)=>{let n={work:{...e,recovery:xc},delivery:e.delivery};w.transactional.enqueueAcceptedJob(Ge(t===void 0?n:{...n,mail:t}))},readQueueHead:e=>w.transactional.readQueueHead(e),commit:e=>T(()=>_.commit===void 0?E($(`Runtime host is unavailable`)):_.commit(e)),requestWake:b});yield*z({try:()=>{Ne(e.store),q(e.store,`core`)===void 0&&e.store.transactionSync(()=>{bt(e.store,Mc,0)}),q(e.store,`core-report`)===void 0&&e.store.transactionSync(()=>{bt(e.store,Nc,q(e.store,`core`)??0)})},catch:()=>new W(`store`,`unavailable`,`Extension store is unavailable`)});let j=yield*Yc({owner:e.store,readQueueHead:e=>w.transactional.readQueueHead(e),door:k,admitted:r,requestWake:b});v.current=j;let M=ll({watchdog:w,store:e.store,extensions:j,requestWake:b,mailRoom:i}).pipe(O(f)),me=A(function*(){let t=yield*w.hasPendingWork,n=Date.now(),r=yield*z({try:()=>[q(e.store,`core`)??0,q(e.store,`core-report`)??0,...j.settledConsumers().map(({cursor:e})=>e)],catch:()=>$(`Settled cursor is unavailable`)}),a=(yield*w.readSettled(1,Math.min(...r))).length>0,o=yield*z({try:()=>j.timerWake(n),catch:()=>$(`Extension timers are unavailable`)}),s=i===void 0?void 0:yield*i.nextWakeAt().pipe(m(()=>$(`Reply retry wake is unavailable`))),c=o.nextWakeAt===null?s??null:s===void 0?o.nextWakeAt:Math.min(o.nextWakeAt,s);return{pending:t||a||o.due||s!==void 0&&s<=n,nextWakeAt:c}}),P=yield*e.runtime.bind({reconcile:M,pendingWork:me.pipe(m(()=>$(`Pending work is unavailable`)))}).pipe(a(()=>j.close.pipe(te))),ge=T(()=>o===`open`?t(P.requestWake.pipe(ce(f)),u.await):h);return _.requestWake=ge,_.commit=P.commit,yield*P.requestWake.pipe(a(()=>de([P.close,j.close]).pipe(te))),Object.freeze({prepareConfiguration:e=>A(function*(){if(o!==`open`||y||ne!==void 0)return yield*E($(`A configuration change is already pending, or the Agent is closing`));y=!0;let t=yield*Vo(e.extensions).pipe(R(e=>j.stage(e)),a(()=>I(()=>{y=!1}))),n=!1;return{commit:z({try:()=>{if(n||o!==`open`)throw $(`Configuration preparation is no longer available`);ne={configuration:e,apply:t.apply},n=!0,y=!1},catch:e=>e instanceof W?e:$(`Configuration commit failed`)}),discard:T(()=>n?h:(n=!0,y=!1,t.discard))}}),activeSessions:I(()=>[...ie]),busySync:fe,runningWork:t=>w.read(t).pipe(R(t=>{let n=t.status===`found`?oe.get(t.job.lane===e.hostJobs?.lane?`host`:`serial`):void 0;return n===void 0||n.kind===`host`?C(n??null):Ht(e.store,n.sessionId).pipe(s(e=>({...n,title:e?.title??``})))}),m(e=>new W(`runtime`,`rejected`,`Running work is unavailable`,void 0,e))),extensions:j,commit:P.commit,assertOpen:T(()=>o===`open`?h:E(new W(`runtime`,`closed`,`Shiitake is closed`))),beginClose:p,door:k,createSessionWithinTransaction:t=>tn(e.store,t,D),recordCreatedSessionDelegatorWithinTransaction:(t,n)=>{Xn(e.store,t,n)},stageSessionGrantsWithinTransaction:(t,n)=>{Le(e.store,t,n)},storage:{admitNew:D},recordAcceptedCancellation:({jobId:e,cancellationId:t,onlyIfPending:n})=>w.transactional.recordCancellationIntent({jobId:e,cancellationId:t,onlyIfQueued:n}),assertIdleSession:e=>{try{if(w.transactional.readQueueHead(e).state!==`idle`)throw new W(`runtime`,`conflict`,`Session branch or fork requires an idle Session`)}catch(e){throw e instanceof W?e:$(`Session status is unavailable`)}},signalCancellation:(e,t)=>w.cancel({jobId:e,cancellationId:t}).pipe(R(e=>e.status===`recorded`||e.status===`replayed`?h:E($(`Cancellation is unavailable`))),m(()=>$(`Cancellation is unavailable`))),readQueueHead:e=>w.readQueueHead(e).pipe(m(()=>$(`Session status is unavailable`))),readQueueHeadTransactional:e=>w.transactional.readQueueHead(e),requestWake:ge,close:p.pipe(x(g(P.close,{onFailure:e=>j.close.pipe(x(l===void 0?re(e):E(l))),onSuccess:()=>j.close.pipe(x(l===void 0?h:E(l)))})),pe(I(()=>{o=`closed`})))})})}var dl=e({openRuntimeCore:()=>fl});function fl(e,t){return A(function*(){let n=yield*Vo(e.extensions),r=yield*Ho([]);yield*zt(e.store);let i=yield*ul(e,r,n,t),a=xo(e,i),o=Object.freeze({session:a.session,createSession:a.createSession,deleteSession:a.deleteSession,listSessions:a.listSessions,extensions:a.extensions,close:Ja(a.close,i.close)}),s=Object.freeze({...o,prepareConfiguration:i.prepareConfiguration,grants:a.grants,withMeta:e=>Object.freeze({...o,session:a.withMeta(e).session})});return Object.freeze({agent:s,readSettlement:(t,n)=>i.assertOpen.pipe(x(Nr(e.store,t,n))),activeSessions:i.activeSessions,busySync:i.busySync,acceptMail:(e,n,r,a,o)=>Co(i,e,n,r,a??(e=>{if(t?.postMail===void 0)throw Error(`Recipient Agent mail outbox is unavailable`);ie(t.postMail(e))}),o)})})}export{Ga as n,fl as openRuntimeCore,Ba as r,dl as t};
|