blade-code 0.10.133 → 0.10.137
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/blade.js +2 -2
- package/dist/{chunk-h6tr3zz7.js → chunk-0c82q1sz.js} +1 -1
- package/dist/chunk-0ccm29qy.js +2 -0
- package/dist/{chunk-fjvt9mwv.js → chunk-0k2x2ae6.js} +1 -1
- package/dist/{chunk-7hxyxv4x.js → chunk-1evc05gr.js} +2 -2
- package/dist/chunk-35668hyn.js +1 -0
- package/dist/{chunk-d881py5y.js → chunk-39de5k03.js} +2 -2
- package/dist/chunk-3gmcvd0c.js +1 -0
- package/dist/{chunk-7j628q12.js → chunk-4jqw75ce.js} +1 -1
- package/dist/chunk-5774a669.js +1 -0
- package/dist/chunk-5btfnf2r.js +14 -0
- package/dist/{chunk-bj8cgfbr.js → chunk-5dwmhsrx.js} +1 -1
- package/dist/chunk-5sf2rc1z.js +171 -0
- package/dist/{chunk-nfdfthhb.js → chunk-69nwa6bn.js} +1 -1
- package/dist/{chunk-2nv0kg12.js → chunk-69rjav47.js} +1 -1
- package/dist/{chunk-w3y69e4e.js → chunk-6e3mh79j.js} +1 -1
- package/dist/{chunk-3csj18f1.js → chunk-6xvrrypm.js} +1 -1
- package/dist/{chunk-87ycd3f8.js → chunk-74bswv4z.js} +2 -2
- package/dist/{chunk-ndgdf5jx.js → chunk-75yy9yre.js} +1 -1
- package/dist/chunk-7n035mhg.js +1 -0
- package/dist/{chunk-e1q1hvty.js → chunk-7ykqvsph.js} +2 -2
- package/dist/chunk-9a7bppj7.js +2 -0
- package/dist/{chunk-cfamqqgv.js → chunk-9frd4fpk.js} +2 -2
- package/dist/chunk-a26vtcv5.js +5 -0
- package/dist/{chunk-0ap8b3sw.js → chunk-affzv7f1.js} +1 -1
- package/dist/chunk-b08thknq.js +1 -0
- package/dist/{chunk-f1wnva76.js → chunk-bx75fd0d.js} +396 -394
- package/dist/chunk-bzqbmz6t.js +171 -0
- package/dist/{chunk-yvk8w63g.js → chunk-c2mx5zg0.js} +1 -1
- package/dist/chunk-chspy9f8.js +23 -0
- package/dist/chunk-d6tbr25k.js +1 -0
- package/dist/chunk-dt9n4f4e.js +1 -0
- package/dist/{chunk-ms360ds6.js → chunk-e76gej4y.js} +2 -2
- package/dist/{chunk-bzp08nf6.js → chunk-e8pfbb6c.js} +1 -1
- package/dist/chunk-ermypm1x.js +2 -0
- package/dist/chunk-esp69w6w.js +1 -0
- package/dist/{chunk-z5mm9g1y.js → chunk-etf3e9kt.js} +1 -1
- package/dist/{chunk-x1w3fvhr.js → chunk-f2b9cyj5.js} +2 -2
- package/dist/chunk-g1y60ey9.js +1 -0
- package/dist/{chunk-be2csw9m.js → chunk-g799czsy.js} +1 -1
- package/dist/{chunk-dnt4c3gy.js → chunk-g9vdmvk2.js} +2 -2
- package/dist/chunk-gf5v8aff.js +1 -0
- package/dist/chunk-gpj7k3er.js +6 -0
- package/dist/{chunk-mkvqtawj.js → chunk-h05qhgrb.js} +2 -2
- package/dist/{chunk-2qyh6qhb.js → chunk-h74p51hg.js} +2 -2
- package/dist/{chunk-1tfjaazq.js → chunk-karq4wfd.js} +1 -1
- package/dist/{chunk-cz9mqkn2.js → chunk-ky9br0z8.js} +1 -1
- package/dist/chunk-m9kh7djg.js +6 -0
- package/dist/{chunk-gv24cgpb.js → chunk-mavranwn.js} +3 -3
- package/dist/{chunk-0xph7bhe.js → chunk-mthf5akx.js} +2 -2
- package/dist/{chunk-8xem2mzy.js → chunk-mzye1ah2.js} +1 -1
- package/dist/chunk-na4wzne8.js +1 -0
- package/dist/chunk-ntmkzrs8.js +1 -0
- package/dist/{chunk-961nemng.js → chunk-nxnmqk4s.js} +1 -1
- package/dist/{chunk-h123tjsg.js → chunk-p0gbxaqz.js} +2 -2
- package/dist/chunk-pj15kt5b.js +10 -0
- package/dist/chunk-pv1vwasz.js +1 -0
- package/dist/{chunk-r4bgsfj6.js → chunk-q0s3gcjm.js} +1 -1
- package/dist/{chunk-jy61b0v8.js → chunk-ramana2t.js} +2 -2
- package/dist/{chunk-ks67gd2j.js → chunk-rgjr7jsd.js} +1 -1
- package/dist/chunk-v5503t2t.js +25 -0
- package/dist/chunk-vda03kxj.js +1 -0
- package/dist/{chunk-4xhawy0e.js → chunk-vg3zwv4g.js} +1 -1
- package/dist/chunk-vp6d1fqp.js +3 -0
- package/dist/{chunk-nyk5q71k.js → chunk-w9z34f27.js} +1 -1
- package/dist/{chunk-5x3h9ak8.js → chunk-wa71vstt.js} +1 -1
- package/dist/{chunk-f4pn5tmr.js → chunk-wc9wsyrc.js} +1 -1
- package/dist/{chunk-0d440hhe.js → chunk-wxtj6gqb.js} +1 -1
- package/dist/{chunk-rmm7n9n3.js → chunk-wxypv01z.js} +2 -2
- package/dist/{chunk-77efqpdc.js → chunk-wzkh3e6a.js} +1 -1
- package/dist/{chunk-rcthrb7h.js → chunk-xg9fyvw0.js} +2 -2
- package/dist/{chunk-7zvwfz85.js → chunk-xt0ktytp.js} +2 -2
- package/dist/{chunk-xgz1yanb.js → chunk-y6jee9w7.js} +1 -1
- package/dist/{chunk-3ndwbb7h.js → chunk-ybc5myz7.js} +1 -1
- package/dist/{chunk-53h87fmt.js → chunk-z3hpstky.js} +1 -1
- package/dist/{chunk-555ffyze.js → chunk-zk9rf1d7.js} +2 -2
- package/dist/web/assets/ChatView-DpvPjAh7.js +63 -0
- package/dist/web/assets/{CodeBlockHighlighter-D0yM8QTf.js → CodeBlockHighlighter-Czp4VZIg.js} +1 -1
- package/dist/web/assets/{FilePreview-CaTCjV5i.js → FilePreview-BJWuYfyF.js} +15 -20
- package/dist/web/assets/{KanbanBoard-BY0SXCol.js → KanbanBoard-DrYzt5Kh.js} +4 -4
- package/dist/web/assets/{MarkdownRenderer-zKto-Pty.js → MarkdownRenderer-DxkR5r7t.js} +3 -3
- package/dist/web/assets/{ScrollArea-1qPJ8lcT.js → ScrollArea-D71pJjgW.js} +1 -1
- package/dist/web/assets/{SessionHistorySurface-Ce9xX62q.js → SessionHistorySurface-2y9bnndm.js} +2 -2
- package/dist/web/assets/{SettingsModal-BxKOMuIm.js → SettingsModal-BbaTL5Rk.js} +1 -1
- package/dist/web/assets/{Sidebar-CEF6lGps.js → Sidebar-COZltpL9.js} +1 -1
- package/dist/web/assets/{TaskSwitcher-C-EY0nVG.js → TaskSwitcher-3giB7l1P.js} +2 -2
- package/dist/web/assets/{TerminalPanel-C3PVDyAr.js → TerminalPanel-gvTTiTgX.js} +2 -2
- package/dist/web/assets/{archive-D5Nuw__Q.js → archive-DndqAA2q.js} +1 -1
- package/dist/web/assets/{arrow-left-DaOpfgEz.js → arrow-left-XNYfpUAb.js} +1 -1
- package/dist/web/assets/{calendar-clock-DA_D4ppV.js → calendar-clock-BQOfNcCK.js} +1 -1
- package/dist/web/assets/{chevron-right-COQAoZf3.js → chevron-right-Cvq3LzHK.js} +1 -1
- package/dist/web/assets/chevrons-up-down-Dia1U9Sz.js +16 -0
- package/dist/web/assets/{clock-3-DJ-pSj3t.js → clock-3-CnxLS8cv.js} +1 -1
- package/dist/web/assets/{copy-5c0ESKoo.js → copy-CWCS3Lql.js} +1 -1
- package/dist/web/assets/{download-VkaTciEH.js → download-DXdsM18t.js} +1 -1
- package/dist/web/assets/{external-link-BypdqupZ.js → external-link-1IN2ZfaO.js} +1 -1
- package/dist/web/assets/{folder-B8znObPL.js → folder-Bpq602dI.js} +1 -1
- package/dist/web/assets/index-57UZsfTt.css +1 -0
- package/dist/web/assets/index-DEOQizD2.js +203 -0
- package/dist/web/assets/{pause-BWbHHYG6.js → pause-BYhoGDZq.js} +1 -1
- package/dist/web/assets/{pencil-BPyvvR59.js → pencil-pRZQVHFU.js} +1 -1
- package/dist/web/assets/{play-CLJgUH4S.js → play-DGZdCyPk.js} +1 -1
- package/dist/web/assets/{plus-D1VVvu-z.js → plus-CAQ3qlUJ.js} +1 -1
- package/dist/web/assets/session-events-C5_Q0kZV.js +29 -0
- package/dist/web/assets/{settings-CGCgC_NX.js → settings-BPfzj_Vf.js} +1 -1
- package/dist/web/assets/teamService-BScT9o9A.js +1 -0
- package/dist/web/assets/{terminal-pA96HZrI.js → terminal-CldJbdMr.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/chunk-00zazdct.js +0 -25
- package/dist/chunk-04yas0t8.js +0 -1
- package/dist/chunk-2242dshn.js +0 -2
- package/dist/chunk-2nxev7f2.js +0 -1
- package/dist/chunk-43a0n5rw.js +0 -1
- package/dist/chunk-679b7s58.js +0 -2
- package/dist/chunk-78wwep9f.js +0 -1
- package/dist/chunk-88jmtcv7.js +0 -171
- package/dist/chunk-ar3sdj0w.js +0 -3
- package/dist/chunk-avf9spct.js +0 -1
- package/dist/chunk-azv25dg2.js +0 -10
- package/dist/chunk-b8c1vj8c.js +0 -1
- package/dist/chunk-bbw6s542.js +0 -1
- package/dist/chunk-eetva9y8.js +0 -1
- package/dist/chunk-kjjpn49y.js +0 -1
- package/dist/chunk-kx61g7xw.js +0 -1
- package/dist/chunk-m30sbsnw.js +0 -1
- package/dist/chunk-n589jxsm.js +0 -1
- package/dist/chunk-n7pydthh.js +0 -6
- package/dist/chunk-nry7d26k.js +0 -2
- package/dist/chunk-p8y5kk56.js +0 -6
- package/dist/chunk-py92cy57.js +0 -14
- package/dist/chunk-rkjrft19.js +0 -5
- package/dist/chunk-sr9gqacp.js +0 -1
- package/dist/chunk-sxqydew5.js +0 -1
- package/dist/chunk-t52v91dy.js +0 -23
- package/dist/chunk-v7zt3pft.js +0 -171
- package/dist/web/assets/ChatView-hYd9mmJ6.js +0 -53
- package/dist/web/assets/chevrons-up-down-B_WSFixv.js +0 -11
- package/dist/web/assets/index-B4186fIT.css +0 -1
- package/dist/web/assets/index-DorkRCqS.js +0 -210
- package/dist/web/assets/session-events-C6fPz20c.js +0 -22
- package/dist/web/assets/teamService-DsYRmp6u.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{da as p}from"./chunk-bx75fd0d.js";import{Hb as _}from"./chunk-5sf2rc1z.js";import{Fd as q,_d as O,qd as N,rd as U,sd as I,td as A,ud as z}from"./chunk-zk9rf1d7.js";import{ke as o}from"./chunk-p0gbxaqz.js";import{Wf as P}from"./chunk-q0s3gcjm.js";import{vg as e}from"./chunk-f2b9cyj5.js";import{rk as j}from"./chunk-0k2x2ae6.js";import{createHash as ff}from"node:crypto";var af=4,cf=1000,E=4000,wf=120000,M=0.2;function $f(a){try{return q(a)&&a.retryable}catch{return!1}}function gf(a,c){let f=Number.isSafeInteger(c)&&c>0?c:1,w=f-1,h=Math.min(cf*2**w,E),$=ff("sha256").update(`${a}\x00${f}`).digest().readUInt32BE(0)/4294967295,k=1-M+2*M*$;return Math.min(E,Math.max(0,Math.round(h*k)))}function Tf(a){let c=gf(a.sessionIdentity,a.failedAttempt),f=a.evidence,w=a.workStillPending===!0&&f!==void 0&&$f(f.taskFailure)&&f.outputStarted===!1&&f.toolExecutionStarted===!1&&Number.isInteger(f.toolCallsCount)&&f.toolCallsCount===0,h=Number.isSafeInteger(a.failedAttempt)&&a.failedAttempt>0&&a.failedAttempt<af,g=a.now??Date.now(),$=g-a.recoveryStartedAt,k=Number.isFinite(g)&&Number.isFinite(a.recoveryStartedAt)&&Number.isFinite($)&&$>=0&&$+c<=wf;return{phase:w?h&&k?"retry_scheduled":"exhausted":"failed",delayMs:c,retryable:w,withinAttemptBudget:h,withinTimeBudget:k}}import R from"node:path";import{nanoid as Lf}from"nanoid";import{execFile as hf}from"node:child_process";import{createHash as xf}from"node:crypto";import{lstat as bf,readFile as mf,realpath as i}from"node:fs/promises";import n from"node:path";import{promisify as kf}from"node:util";var lf=kf(hf),T=8388608,s=500,u=200;async function C(a,c){try{return(await lf("git",["-c","core.pager=cat",...c],{cwd:a,encoding:"utf8",timeout:30000,maxBuffer:T+1024,env:{...process.env,GIT_CONFIG_NOSYSTEM:"1",GIT_PAGER:"cat",GIT_OPTIONAL_LOCKS:"0"}})).stdout}catch(f){let w=f instanceof Error&&f.message.includes("maxBuffer")?`Review target exceeds the ${T} byte limit`:f instanceof Error?f.message:String(f);throw Error(`Git review target failed: ${w}`)}}function d(a,c){let f=a?.trim();if(!f||f.length>u||f.includes("\x00")||f.includes(`
|
|
2
2
|
`)||f.includes("\r"))throw Error(`${c} must contain 1-${u} characters`);return f}function Q(a){return a.split("\x00").filter(Boolean)}async function X(a,c){return(await C(a,["rev-parse","--verify",`${c}^{commit}`])).trim()}async function Ff(a,c,f,w,h){let g=h,$=await i(a);for(let k of c){let l=n.resolve($,k),x=n.relative($,l);if(!x||x.startsWith("..")||n.isAbsolute(x))throw Error(`Untracked review path escapes the workspace: ${k}`);let b=await bf(l);if(!b.isFile()||b.isSymbolicLink())throw Error(`Untracked review target must be a regular file: ${k}`);if(g+=b.size,g>T)throw Error(`Review target exceeds ${T} bytes`);f.update("\x00untracked\x00"),f.update(x.replaceAll(n.sep,"/")),f.update("\x00");let F=await mf(l);f.update(F);let m=Math.max(1,F.toString("utf8").split(`
|
|
3
3
|
`).length);w.set(x.replaceAll(n.sep,"/"),[{start:1,end:m}])}}function Y(a,c){let f=new Map,w,h,g,$,k=!1,l=(x,b)=>{let F=f.get(x)??[],m=F.at(-1);if(m&&b<=m.end+1)m.end=Math.max(m.end,b);else F.push({start:b,end:b});f.set(x,F)};for(let x of a.split(`
|
|
4
4
|
`)){if(x.startsWith("--- ")){let b=x.slice(4).split("\t")[0]?.trim();w=b&&b!=="/dev/null"?b.replace(/^a\//,"").replaceAll("\\","/"):void 0;continue}if(x.startsWith("+++ ")){let b=x.slice(4).split("\t")[0]?.trim();k=b==="/dev/null",h=k?w:b?b.replace(/^b\//,"").replaceAll("\\","/"):void 0,g=void 0,$=void 0;continue}if(x.startsWith("@@ ")){let b=/-(\d+)(?:,\d+)? \+(\d+)(?:,\d+)?/.exec(x);g=b?Math.max(1,Number(b[1])):void 0,$=b?Math.max(1,Number(b[2])):void 0;continue}if(!h||g===void 0||$===void 0)continue;if(x.startsWith("+")&&!x.startsWith("+++"))l(h,$),$++;else if(x.startsWith("-")&&!x.startsWith("---"))l(h,k?g:$),g++;else if(!x.startsWith("\\"))g++,$++}for(let x of c)if(!f.has(x))f.set(x,[{start:1,end:1}]);return f}function D(a){if(a.length>s)throw Error(`Review target exceeds the ${s} file limit`)}class K{static async resolve(a,c){let f=await i(a);await C(f,["rev-parse","--is-inside-work-tree"]);let w=await X(f,"HEAD"),h=xf("sha256");h.update(`kind\x00${c.kind}\x00head\x00${w}\x00`);let g="",$=[],k,l,x,b,F=new Map;switch(c.kind){case"uncommitted":{g=await C(f,["diff","--binary","--no-ext-diff","--relative","HEAD","--","."]);let m=Q(await C(f,["diff","--name-only","-z","--relative","HEAD","--","."])),L=Q(await C(f,["ls-files","--others","--exclude-standard","-z","--","."]));if($=[...new Set([...m,...L])].sort(),D($),$.length===0)throw Error("No uncommitted changes to review");h.update(g),F=Y(g,m),await Ff(f,L,h,F,Buffer.byteLength(g)),x="uncommitted changes",b=["Review the uncommitted working tree against HEAD.","Use git status --short, git diff --cached, and git diff, then inspect","every relevant untracked file listed by git status."].join(" ");break}case"base":{let m=d(c.ref,"Base ref");k=await X(f,m);let L=(await C(f,["merge-base",k,w])).trim();if(g=await C(f,["diff","--binary","--no-ext-diff","--relative",`${L}..${w}`,"--","."]),$=Q(await C(f,["diff","--name-only","-z","--relative",`${L}..${w}`,"--","."])),D($),$.length===0)throw Error(`No changes between ${m} and HEAD`);h.update(g),h.update(`\x00merge-base\x00${L}`),F=Y(g,$),x=`changes against ${m}`,b=`Review changes introduced by ${L}..${w}.`;break}case"commit":{let m=d(c.ref,"Commit ref");if(l=await X(f,m),g=await C(f,["show","--format=","--binary","--no-ext-diff","--relative",l,"--","."]),$=Q(await C(f,["diff-tree","--root","--no-commit-id","--name-only","-r","-z",l,"--","."])),D($),$.length===0)throw Error(`Commit has no changes in this workspace: ${m}`);h.update(g),h.update(`\x00commit\x00${l}`),F=Y(g,$),x=`commit ${m}`,b=`Review only the changes introduced by commit ${l}.`;break}}if(Buffer.byteLength(g)>T)throw Error(`Review diff exceeds ${T} bytes`);return{info:{kind:c.kind,label:x,headSha:w,...k?{baseSha:k}:{},...l?{commitSha:l}:{},digest:h.digest("hex"),fileCount:$.length},instruction:b,changedLines:F}}}var Wf=131072,t=50,Z=new Set;function v(a,c){return`${R.resolve(a)}\x00${c}`}function S(a){return`/review ${a.kind}${a.kind==="uncommitted"?"":` ${a.ref?.trim()??""}`}`}function V(a,c,f,w=!1){if(typeof a!=="string")throw Error(`${c} must be a string`);let h=a.trim();if(!w&&!h||h.length>f)throw Error(`${c} exceeds its allowed length`);return h}function Hf(a,c,f){if(!a||typeof a!=="object"||Array.isArray(a))throw Error("Review finding must be an object");let w=a,h=typeof w.line==="number"&&Number.isInteger(w.line)?w.line:void 0,g=w.code_location??(typeof w.file==="string"&&h!==void 0?{path:w.file,line_start:h,line_end:h}:void 0);if(!g||typeof g!=="object"||Array.isArray(g))throw Error("Review finding has no code_location");let $=g,k=V($.path,"Finding path",1000),l=R.posix.normalize(k.replaceAll("\\","/"));if(R.posix.isAbsolute(l)||l===".."||l.startsWith("../"))throw Error("Review finding path must be workspace-relative");let x=R.resolve(c,l),b=R.relative(R.resolve(c),x);if(b.startsWith("..")||R.isAbsolute(b))throw Error("Review finding path escapes the workspace");let F=typeof w.severity==="string"?w.severity.toLowerCase():"",m=F==="critical"?0:F==="high"?1:F==="medium"?2:F==="low"?3:void 0,L=w.priority??m;if(L!==0&&L!==1&&L!==2&&L!==3)throw Error("Review finding priority must be 0-3");let W=w.confidence_score??w.confidence??0.8;if(typeof W!=="number"||!Number.isFinite(W)||W<0||W>1)throw Error("Review finding confidence_score must be between 0 and 1");let{line_start:H,line_end:r}=$;if(!Number.isInteger(H)||!Number.isInteger(r)||H<1||r<H||r-H>=10)throw Error("Review finding line range is invalid");let G=f.changedLines.get(l);if(!G)throw Error("Review finding path is outside the review target");if(!G.some((y)=>H<=y.end&&r>=y.start))throw Error("Review finding line range does not overlap the changed lines");let B=V(w.title??`[P${L}] ${String(w.type??"Review finding").replaceAll("-"," ").replace(/\b\w/g,(y)=>y.toUpperCase())}`,"Finding title",120);if(!B.startsWith(`[P${L}] `))throw Error("Review finding title priority does not match priority");return{title:B,body:V(w.body??w.description,"Finding body",4000),priority:L,confidenceScore:W,codeLocation:{path:l,lineStart:H,lineEnd:r}}}function Rf(a,c,f){if(Buffer.byteLength(a)>Wf)throw Error("Review output exceeds the 128 KiB limit");let w=a.indexOf("{"),h=a.lastIndexOf("}");if(w<0||h<=w)throw Error("Reviewer did not return a JSON object");let g;try{g=JSON.parse(a.slice(w,h+1))}catch{throw Error("Reviewer returned invalid JSON")}if(!g||typeof g!=="object"||Array.isArray(g))throw Error("Reviewer output must be an object");let $=g;if(!Array.isArray($.findings))throw Error("Reviewer output must contain findings");if($.findings.length>t)throw Error(`Reviewer returned more than ${t} findings`);return{overallExplanation:V($.overall_explanation??$.summary,"Review explanation",1e4,!0),findings:$.findings.map((k)=>Hf(k,c,f))}}async function J(a,c){return new o(j(a,c)).readAll()}class rf{static async start(a){let{sessionId:c,projectPath:f,runtime:w,request:h,onEvent:g}=a;if(w.sessionId!==c||R.resolve(w.workspaceRoot)!==R.resolve(f))throw Error("Review runtime does not own the requested Session");if(w.hasTurnOwner())throw Error("Cannot start a review during an active turn");await O.assertSessionWritable(c,f);let $=v(f,c);if(Z.has($))throw Error("Session already has an active review");let k=await J(f,c);if(U(k))throw Error("Session has an interrupted review that must be recovered");let l=h.instructions?.trim();if(l&&l.length>4000)throw Error("Review instructions exceed 4,000 characters");let x=await K.resolve(f,h),b=Lf(16),F=P("review"),m=new Date().toISOString(),L={reviewId:b,reviewerSessionId:F,target:x.info,startedAt:m},W=new _(f);await W.saveReviewStart(c,L),await W.saveMessage(c,"user",S(h),null,{codeReview:{reviewId:b,phase:"started",targetKind:x.info.kind,targetDigest:x.info.digest}}),await O.updateSessionMetadata(c,f,{taskStatus:"running",taskStatusReason:`Reviewing ${x.info.label}`,taskPromptSummary:S(h),taskStartedAt:m,taskCompletedAt:null,taskFailure:null}),Z.add($);let H=this.execute({...a,target:x,reviewId:b,reviewerSessionId:F,instructions:l,store:W,onEvent:g}).finally(()=>{Z.delete($)});return{reviewId:b,completion:H}}static async execute(a){let{sessionId:c,projectPath:f,runtime:w,request:h,signal:g,onEvent:$,target:k,reviewId:l,reviewerSessionId:x,instructions:b,store:F}=a,m;try{let W=[k.instruction,"Bash already starts in the review workspace. Never prefix a command with cd.",`Authoritative target digest: ${k.info.digest}`,`Changed file count: ${k.info.fileCount}`,b?`Additional review instructions:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-
|
|
1
|
+
import"./chunk-6e3mh79j.js";var d={command:"install [target]",describe:"Install Blade native build. Use [target] to specify version (stable, latest, or specific version)",builder:(b)=>{return b.positional("target",{describe:"Version to install",type:"string",default:"stable",choices:["stable","latest"]}).option("force",{type:"boolean",describe:"Force reinstall",default:!1}).example([["$0 install","Install stable version"],["$0 install latest","Install latest version"],["$0 install --force","Force reinstall stable version"]])},handler:async(b)=>{console.log(`Installing Blade ${b.target}...`);try{if(b.force)console.log("Force reinstall enabled");console.log("Downloading..."),console.log("Installing..."),console.log("Installation completed successfully")}catch(c){console.error(`Error: Installation failed: ${c instanceof Error?c.message:"未知错误"}`),process.exit(1)}}};export{d as installCommands};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var q;((h)=>{h.ReadOnly="readonly";h.Write="write";h.Execute="execute"})(q||={});function w(b){return b!==void 0&&typeof b.pattern==="string"&&typeof b.search_path==="string"}function z(b){return b!==void 0&&b.kind==="edit"&&typeof b.matches_found==="number"}var j=Symbol("blade.tool-result-model-images");function B(b,c){return Object.defineProperty(b,j,{value:c,enumerable:!1,configurable:!1,writable:!1}),b}function v(b){return b[j]}function C(b,c){let f=b.success?v(b):void 0;return f&&f.length>0?[{type:"text",text:c},...f]:c}function F(b){return b==="readonly"}
|
|
2
|
-
export{q as
|
|
2
|
+
export{q as $d,w as ae,z as be,B as ce,C as de,F as ee};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{De as r2,Ee as C0,Le as l_,Ne as N1,Pe as o2,Qe as a2,Re as q1,Se as t2,fe as h2,ge as e,he as l2,ie as Z1,je as c2,ke as m,le as G1,me as p2,ne as n2,oe as V1,pe as L1,qe as d2,re as H1,se as A0,te as U1,ue as B1,we as i2}from"./chunk-p0gbxaqz.js";import{mg as i_}from"./chunk-4jqw75ce.js";import{gh as r_}from"./chunk-karq4wfd.js";import{Ki as P2,Li as u2,Mi as w_,Ni as Q0,Oi as R_}from"./chunk-9a7bppj7.js";import{Si as f1}from"./chunk-g799czsy.js";import{sj as B0}from"./chunk-vp6d1fqp.js";import{Fj as n_,Ij as d_}from"./chunk-wxtj6gqb.js";import{Mj as __}from"./chunk-g9vdmvk2.js";import{Wj as h,ek as o,fk as p,gk as I2,hk as n,ik as d,jk as m2,kk as K0,lk as Y1,mk as v2,nk as K_,ok as M0,pk as h_,qk as A,rk as P,sk as S,tk as E1,uk as F1,vk as M_,wk as z1,xk as b1,yk as q_}from"./chunk-0k2x2ae6.js";import{readdir as k_,readFile as G_,rm as b_,stat as E0}from"node:fs/promises";import*as N from"node:path";import{nanoid as I}from"nanoid";import{createHash as z4,randomUUID as D4}from"node:crypto";import*as $_ from"node:fs/promises";import*as W0 from"node:path";function cX(_){return Object.freeze({kind:"local",root:_})}function pX(_,X){let $=o(X);if(p($.collisionIdentity)!==_)throw Error("ACP remote workspace durable state is invalid");return Object.freeze({kind:"acp-remote",root:_,descriptor:$})}function nX(_,X){return _.kind==="acp-remote"?`${_.kind}\x00${_.root}\x00${_.descriptor.exactIdentity}\x00${X}`:`${_.kind}\x00${_.root}\x00${X}`}async function U_(_,X){if(_.kind==="local")return X(K_(_.root));return n(_.root,($)=>X(String($),$))}async function dX(_,X,$){return U_(_,(W,J)=>$(J?{storageRoot:W,transcriptPath:S(J,X),inboxPath:F1(J,X),goalPath:z1(J,X),remoteScope:J}:{storageRoot:W,transcriptPath:P(_.root,X),inboxPath:E1(_.root,X),goalPath:M_(_.root,X)}))}import{execFileSync as C4}from"node:child_process";import{createHash as K4}from"node:crypto";import{readFileSync as M4}from"node:fs";var A4=/^[a-f0-9]{64}$/;function D1(_){if(!_||typeof _!=="object")return!1;let X=_;return(X.platform==="linux"||X.platform==="darwin"||X.platform==="win32")&&typeof X.fingerprint==="string"&&A4.test(X.fingerprint)}var R1={readFile:(_)=>M4(_,"utf8"),execFile:(_,X)=>C4(_,X,{encoding:"utf8",timeout:_==="powershell.exe"?3000:2000,windowsHide:!0})},E4=(_)=>{try{return process.kill(_,0),!0}catch(X){return X instanceof Error&&"code"in X&&X.code==="EPERM"}};function x0(_,X){return{platform:_,fingerprint:K4("sha256").update(`${_}\x00${X}`).digest("hex")}}function F4(_,X){let $=X.readFile(`/proc/${_}/stat`).trim(),W=$.lastIndexOf(")");if(W<0)throw Error("Invalid /proc process stat");let O=$.slice(W+2).split(/\s+/)[19];if(!O||!/^\d+$/.test(O))throw Error("Missing process start ticks");return O}function X0(_,X=process.platform,$=R1){if(!Number.isInteger(_)||_<=1)return;try{if(X==="linux")return x0(X,F4(_,$));if(X==="darwin"){let W=$.execFile("ps",["-o","lstart=","-p",String(_)]).trim();return W?x0(X,W):void 0}if(X==="win32"){let W=`(Get-CimInstance Win32_Process -Filter "ProcessId = ${_}").CreationDate.ToUniversalTime().ToString('O')`,J=$.execFile("powershell.exe",["-NoProfile","-NonInteractive","-Command",W]).trim();return J?x0(X,J):void 0}}catch{return}return}function w1(_,X){return X0(_,X.platform)?.fingerprint===X.fingerprint}function tX(_,X,$=R1,W=E4){if(!Number.isInteger(_)||_<=1)return!1;let J=X0(_,X.platform,$);if(J)return J.fingerprint===X.fingerprint;return!W(_)}var j1=1;function R4(_,X){let $=z4("sha256").update(X).digest("hex");return W0.join(K_(_),".locks",`${$}.lock`)}function $0(_,X){return _ instanceof Error&&"code"in _&&_.code===X}async function k0(_){try{let X=JSON.parse(await $_.readFile(_,"utf8"));if(X.version!==j1||typeof X.sessionId!=="string"||typeof X.ownerId!=="string"||!Number.isInteger(X.pid)||(X.pid??0)<=0||X.processIdentity!==void 0&&!D1(X.processIdentity)||typeof X.acquiredAt!=="string")return;return X}catch{return}}async function x1(_){let X=await k0(_);if(X)return X;return await new Promise(($)=>setTimeout($,10)),k0(_)}function w4(_){try{return process.kill(_,0),!0}catch(X){return $0(X,"EPERM")}}async function k1(_,X){let $;try{return $=await $_.open(_,"wx",384),await $.writeFile(`${JSON.stringify(X)}
|
|
2
2
|
`,"utf8"),!0}catch(W){if($0(W,"EEXIST"))return!1;if($)await $_.unlink(_).catch(()=>{return});throw W}finally{await $?.close().catch(()=>{return})}}class B_ extends Error{code="BLADE_SESSION_IN_USE";constructor(_){super(_?`Session is already active in another Blade process (PID ${_}). Stop that process or choose a different session.`:"Session is already active in another Blade process. Stop that process or choose a different session.");this.name="SessionInUseError"}}class u{filePath;record;stateStorage;released=!1;constructor(_,X,$){this.filePath=_;this.record=X;this.stateStorage=$}static async acquireForStorage(_,X){if(X.kind==="local")return u.acquire(_,X.root);return U_(X,($,W)=>{if(!W||$!==X.root)throw Error("ACP remote session lease scope is invalid");return u.acquireRemote(_,W,X)})}static async acquire(_,X=f1()){return u.acquireAtPath(_,R4(X,_))}static async acquireRemote(_,X,$){let W=b1(X,_);try{await d(X,W)}catch(O){if(O.code!=="ENOENT")throw O}let J=await u.acquireAtPath(_,W);try{return await d(X,W),new u(W,J.record,$)}catch(O){throw await J.release(),O}}static async acquireAtPath(_,X){let $={version:j1,sessionId:_,ownerId:D4(),pid:process.pid,processIdentity:X0(process.pid),acquiredAt:new Date().toISOString()};if(await $_.mkdir(W0.dirname(X),{recursive:!0,mode:448}),await k1(X,$))return new u(X,$);let W=await x1(X);if(W&&w4(W.pid)&&(!W.processIdentity||w1(W.pid,W.processIdentity)))throw new B_(W.pid);if(await $_.unlink(X).catch((J)=>{if(!$0(J,"ENOENT"))throw J}),await k1(X,$))return new u(X,$);throw new B_((await x1(X))?.pid)}async release(){if(this.released)return;let _=async()=>{if((await k0(this.filePath))?.ownerId!==this.record.ownerId)return;await $_.unlink(this.filePath).catch(($)=>{if(!$0($,"ENOENT"))throw $})};if(this.stateStorage?.kind==="acp-remote")await U_(this.stateStorage,_);else await _();this.released=!0}}import{createHash as O0}from"node:crypto";import{constants as A_,promises as W_}from"node:fs";import Z_ from"node:path";import{Mutex as x4}from"async-mutex";var y1=128,g1=67108864,k4=24576,S1=65536,f0=1,h1=/^[a-f0-9]{64}$/,b4=/^[a-f0-9]{64}\.txt$/,l1=64,f4=new Set(["EBUSY","EAGAIN","EMFILE","ENFILE"]),Y0=`
|
|
3
3
|
|
|
4
4
|
...[middle omitted; read the private prompt artifact for the complete request]...
|
|
@@ -91,4 +91,4 @@ ${[...X_,...Y_].join(`
|
|
|
91
91
|
s.project_sort_key ASC,
|
|
92
92
|
s.session_sort_key ASC
|
|
93
93
|
LIMIT ?`).all(...J,_.limit+1),Q=await Promise.all(O.map(async(Z)=>{let V=JSON.parse(Z.metadata_json);if(V.remoteWorkspace)throw Error("Local projection contains remote session metadata");if(Z.archive_root_id&&Z.effective_archived_at)return this.reconcileInterruptedTask({...V,archivedAt:Z.effective_archived_at,archivedBySessionId:Z.archive_root_id});let{archivedAt:H,archivedBySessionId:G,...L}=V;return this.reconcileInterruptedTask(L)})),Y=U1(Q,_);return{sessions:Y.sessions.map((Z)=>this.toPublicMetadata(Z)),nextCursor:Y.nextCursor}}catch{return null}}static async listRemoteSessionPageFromProjection(_){n2(_);try{let X=await this.scanRemoteStoredSessionsFromProjection(_,0);if(!X)return null;let $=B1(this.toRemoteCatalogEntries(X).sort(A0),_);return{sessions:$.sessions.map((W)=>this.toPublicMetadata(W)),nextCursor:$.nextCursor}}catch(X){throw z(X)}}static async listSessions(_={}){let X=V1(_),$=d2(_),W=await this.scanStoredSessions(X.cwd??void 0,X.includeSubagents,0,X.archived,$),J=new Set;return W.sort(H1).flatMap((O)=>{let Q=`${O.projectPath}\x00${O.sessionId}`;if(J.has(Q))return[];return J.add(Q),[this.toPublicMetadata(O)]})}static async listRemoteSessions(_={}){let X=L1(_.descriptor!==void 0?{..._,descriptor:j2(_.descriptor)}:_),$=await this.scanRemoteStoredSessions(X,0),W=new Set;return this.toRemoteCatalogEntries($).sort(A0).flatMap((J)=>{let O=`${J.projectPath}\x00${J.sessionId}`;if(W.has(O))return[];return W.add(O),[this.toPublicMetadata(J)]})}static async collectStaleEmptySessions(_={}){let X=_.now??Date.now(),$=_.olderThanMs??gX;if(!Number.isFinite($)||$<0)throw Error("Stale empty session age must be a non-negative number");let W=_.projectPath?[{storagePath:K_(this.resolveCatalogWorkspace(_.projectPath)),projectPath:this.resolveCatalogWorkspace(_.projectPath)}]:await this.listAllProjectStorageDirectories(),J=0;for(let O of W){let Q;try{Q=await k_(O.storagePath)}catch(Y){if(Y.code==="ENOENT")continue;throw Y}for(let Y of Q){if(!Y.endsWith(".jsonl"))continue;let Z=Y.slice(0,-6);if(!h_(Z))continue;let V=N.join(O.storagePath,Y);try{let G=await E0(V);if(X-G.mtimeMs<$)continue;if(await Promise.all([E0(N.join(O.storagePath,`${Z}.inbox.json`)).then(()=>!0).catch(()=>!1),E0(M_(O.projectPath,Z)).then(()=>!0).catch(()=>!1)]).then((U)=>U.some(Boolean)))continue}catch(G){if(G.code==="ENOENT")continue;throw G}let H;try{H=await u.acquire(Z,O.projectPath)}catch(G){if(G instanceof B_)continue;throw G}try{if(!await new m(V).deleteValidated((L)=>L.length===1&&L[0]?.type==="session_created"&&L[0].data.relationType!=="subagent"))continue;J++,await b_(N.join(O.storagePath,`${Z}.inbox.json`),{force:!0}),await b_(M_(O.projectPath,Z),{force:!0}),await this.removeFromProjection(Z,O.projectPath)}catch(G){u_.warn(`[SessionService] Skipping stale empty session cleanup: ${Z}`,G)}finally{await H.release()}}}return J}static async findSessionMetadata(_,X){if(A(_),X!==void 0){let W=this.resolveCatalogWorkspace(X),J=this.getSessionFilePath(W,_);try{let O=await this.readStoredSessionMetadata(J,_,W);if(O.projectPath!==W)return;if(!O.parentId||O.archivedAt)return this.toPublicMetadata(Q1([O],null)[0]??O);let Q=await this.scanStoredSessions(W,!0,0,null);return this.toPublicMetadata(Q.find((Y)=>Y.sessionId===_)??O)}catch(O){if(O.code==="ENOENT")return;throw O}}let $=(await this.scanStoredSessions(void 0,!0,0,null)).filter((W)=>W.sessionId===_);if($.length===0)return;if($.length>1)throw Error(`Ambiguous session ID: ${_}`);return this.toPublicMetadata($[0])}static async loadSession(_,X){try{if(X){let W=this.resolveCatalogWorkspace(X),J=this.getSessionFilePath(W,_);try{return await this.loadSessionFromFile(J,_,W)}catch(O){if(O.code==="ENOENT")throw Error(`未找到会话: ${_}`);throw O}}let $=(await this.scanStoredSessions(void 0,!0,0,null)).find((W)=>W.sessionId===_);if(!$)throw Error(`未找到会话: ${_}`);return await this.loadSessionFromFile($.filePath,_)}catch($){throw u_.error(`[SessionService] 加载会话失败 (${_}):`,$),$}}static async loadSessionModelContext(_,X){try{if(X){let W=this.resolveCatalogWorkspace(X),J=this.getSessionFilePath(W,_);try{return await this.loadSessionModelContextFromFile(J,_,W)}catch(O){if(O.code==="ENOENT")throw Error(`未找到会话: ${_}`);throw O}}let $=(await this.scanStoredSessions(void 0,!0,0,null)).find((W)=>W.sessionId===_);if(!$)throw Error(`未找到会话: ${_}`);return await this.loadSessionModelContextFromFile($.filePath,_)}catch($){throw u_.error(`[SessionService] 加载模型上下文失败 (${_}):`,$),$}}static async loadRemoteSession(_,X,$){let W=await this.readValidatedRemoteSessionSnapshot(_,X,$);return this.convertJSONLToMessages(W)}static async loadRemoteSessionModelContext(_,X,$){let W=await this.readValidatedRemoteSessionSnapshot(_,X,$);return this.convertJSONLToModelContext(W)}static async readValidatedLocalSurfaceSnapshot(_,X,$){A(_);let W=this.resolveCatalogWorkspace(X),J=P(W,_),O=await this.readStableSessionSnapshot(J,_,3,$);this.validateSessionWorkspace(O,_,W);let Q=this.projectMetadataFromEntries(O,_,W,J);if(Q.remoteWorkspace)throw new R;return{entries:O,summary:N1(Q)}}static async readValidatedRemoteSurfaceSnapshot(_,X){let $=await this.readValidatedRemoteSessionSnapshot(_.sessionId,_.hostStateRoot,_.descriptor,X);return n(_.hostStateRoot,async(W)=>{X?.throwIfAborted();let J=S(W,_.sessionId),O=y(this.projectMetadataFromEntries($,_.sessionId,_.hostStateRoot,J),_.descriptor);return{entries:$,summary:N1(O,_.workspaceRef)}})}static async listValidatedRemoteSurfaceCandidates(_){let X=[];for(let $ of await Y1())_?.throwIfAborted(),await n(String($),async(W)=>{for(let J of await k_(String(W))){if(_?.throwIfAborted(),!J.endsWith(".jsonl"))continue;let O=J.slice(0,-6);if(!h_(O))continue;let Q=S(W,O);await d(W,Q);let Y=await this.readStableSessionSnapshot(Q,O,3,_),Z=y(this.projectMetadataFromEntries(Y,O,String(W),Q)),V=await h2(W,Z.remoteWorkspace);_?.throwIfAborted(),X.push({descriptor:Z.remoteWorkspace,hostStateRoot:String(W),sessionId:O,workspaceRef:V})}});return X}static async listValidatedLocalSurfaceCandidates(_){let X=new Map;for(let $ of await this.listAllProjectStorageDirectories()){_?.throwIfAborted();let W;try{W=await k_($.storagePath)}catch(J){if(J.code==="ENOENT")continue;throw J}for(let J of W){if(_?.throwIfAborted(),!J.endsWith(".jsonl"))continue;let O=J.slice(0,-6);if(!h_(O))continue;let Q=N.join($.storagePath,J);try{let Y=await this.readStableSessionSnapshot(Q,O,3,_),Z=this.getSessionCreatedEntry(Y,O);if(Z.data.sessionId!==O||!N.isAbsolute(Z.cwd)||Object.hasOwn(Z.data,"remoteWorkspace"))continue;let V;try{V=M0(Z.cwd)}catch{continue}if(P(V,O)!==Q)continue;X.set(`${V}\x00${O}`,{projectPath:V,sessionId:O})}catch(Y){if(_?.aborted)throw Y;if(Y.code==="ENOENT")continue;if(Y instanceof R)throw Y}}}return[...X.values()]}static async exportSessionMarkdown(_,X,$={}){A(_);let W=this.resolveCatalogWorkspace(X),J=P(W,_),O;try{O=await this.readStableSessionSnapshot(J,_)}catch(Z){throw this.sanitizeStoredSessionError(Z,_)}let Q=this.projectMetadataFromEntries(O,_,W,J);if(Q.projectPath!==W)throw Error(`Session export workspace mismatch: ${_}`);let Y=Q.archivedAt;if(!Y&&Q.parentId)Y=(await this.findArchivedAncestor(Q.parentId,W))?.archivedAt;return N2(O,{...Q,archivedAt:Y},$)}static async listRewindCheckpoints(_,X){A(_);let $=this.resolveCatalogWorkspace(X),W=P($,_),J=await this.readStableSessionSnapshot(W,_);this.validateSessionWorkspace(J,_,$);let O=new N0({sessionId:_,workspaceRoot:$});await O.initialize();let Q=l2(J),Y=[];for(let Z of Q){let V=Z1(J,Z.messageId),H=await O.previewRewind(V.snapshotMessageIds);Y.push({...Z,fileCount:H.files.length})}return Y}static async rewindSession(_,X,$){A(_);let W=this.resolveCatalogWorkspace(X);await this.assertSessionWritable(_,W);let J=P(W,_),O=new m(J),Q;try{await O.appendValidatedAsync(async(Y)=>{this.validateSessionWorkspace(Y,_,W);let Z=Z1(Y,$.targetMessageId),V=new N0({sessionId:_,workspaceRoot:W});await V.initialize();let H=await V.previewRewind(Z.snapshotMessageIds),G=$.mode==="conversation"?await V.commitSnapshots(Z.snapshotMessageIds):await V.rewindSnapshots(Z.snapshotMessageIds),L=new Date().toISOString(),U={id:I(),sessionId:_,timestamp:L,type:"session_rewound",cwd:W,gitBranch:q_(W),version:__(),data:{rewindId:I(),targetMessageId:$.targetMessageId,mode:$.mode,restoredFiles:$.mode==="conversation"?[]:G.files,createdAt:L}},B=e([...Y,U]);return Q={checkpoint:{...Z.checkpoint,fileCount:H.files.length},mode:$.mode,removedTurns:Z.removedTurns,restoredFiles:U.data.restoredFiles,messages:this.convertJSONLToMessages(B)},U})}catch(Y){throw this.sanitizeStoredSessionError(Y,_)}if(!Q)throw Error(`Session rewind did not produce a result: ${_}`);for(let Y of Q.restoredFiles)N_.getInstance().clearFileRecord(Y);return Q}static async forkSession(_,X){A(_);let $=X.newSessionId??`fork-${Date.now()}-${I(8)}`;A($);let W=X.remote;if(W)return this.forkRemoteSession(_,$,X.sourceProjectPath,X.targetProjectPath,W.expectedDescriptor);let J=this.resolveForkWorkspace(X.sourceProjectPath),O=this.resolveForkWorkspace(X.targetProjectPath);if(J!==O)throw Error("Session forks must stay in the source workspace");let Q=P(J,_),Y=await this.readStableSessionSnapshot(Q,_),Z=this.getSessionCreatedEntry(Y,_);if(Z.data.sessionId!==_)throw Error("Fork source session_created.data.sessionId must match the requested session ID");if(!N.isAbsolute(Z.cwd)||N.resolve(Z.cwd)!==J)throw Error("Fork source session_created.cwd must resolve to the requested source workspace");let V=this.projectMetadataFromEntries(Y,_,J,Q);if(V.archivedAt)throw new t(_,_);if(V.parentId){let K=await this.findArchivedAncestor(V.parentId,J);if(K)throw new t(_,K.sessionId)}let H=e(Y),G=new Date().toISOString(),L=Z.data.rootId||_,U=q_(O),B=__(),{status:k,taskStatus:v,taskStatusReason:w,taskFailure:X_,taskStartedAt:Y_,taskCompletedAt:l,taskOwnerPid:c,taskPromptSummary:D,taskPriority:x,taskKind:b,taskDueAt:T,taskDispatch:V_,taskModelId:f,taskRetriedFrom:g,taskDelivery:L_,taskIsolation:j_,taskSourceProjectPath:o_,taskWorktree:R0,taskDiffStat:w0,taskQueuePosition:a_,taskQueueDepth:t_,taskConcurrencyLimit:s_,pendingInteraction:y_,...j}=Z.data,e_={id:I(),sessionId:$,timestamp:G,type:"session_created",cwd:O,gitBranch:U,version:B,data:{...j,sessionId:$,rootId:L,parentId:_,relationType:"fork",taskStatus:"completed",taskCompletedAt:G,taskIsolation:"local",taskSourceProjectPath:O,createdAt:G,updatedAt:G}},g_=H.filter((K)=>K.type!=="session_created"&&K.type!=="token_budget_handoff_recorded"&&K.type!=="inbox_acknowledged"&&K.type!=="interaction_requested"&&K.type!=="interaction_responded"&&K.type!=="interaction_recovered"&&K.type!=="review_started"&&K.type!=="review_completed").map((K)=>{let r={...K,id:I(),sessionId:$,cwd:O,gitBranch:U,version:B};if(K.type==="session_updated"){let{status:E,taskStatus:D_,taskStatusReason:X4,taskFailure:$4,taskStartedAt:W4,taskCompletedAt:O4,taskOwnerPid:J4,taskPromptSummary:Q4,taskPriority:Y4,taskKind:Z4,taskDueAt:G4,taskDispatch:V4,taskModelId:L4,taskRetriedFrom:H4,taskDelivery:U4,taskIsolation:B4,taskSourceProjectPath:N4,taskWorktree:q4,taskDiffStat:A1,taskQueuePosition:mX,taskQueueDepth:vX,taskConcurrencyLimit:PX,pendingInteraction:uX,...T4}=K.data;return{...r,type:"session_updated",data:{...T4,sessionId:$,rootId:L,parentId:_,relationType:"fork"}}}if(K.type==="message_created"){let{inboxMessageId:E,...D_}=K.data;return{...r,type:"message_created",data:D_}}return r}),T_={id:I(),sessionId:$,timestamp:G,type:"session_updated",cwd:O,gitBranch:U,version:B,data:{sessionId:$,rootId:L,parentId:_,relationType:"fork",taskStatus:"completed",taskStatusReason:null,taskFailure:null,taskStartedAt:null,taskCompletedAt:G,taskOwnerPid:null,taskIsolation:"local",taskSourceProjectPath:O,taskWorktree:null,taskDiffStat:null,taskDelivery:null,taskQueuePosition:null,taskQueueDepth:null,taskConcurrencyLimit:null,updatedAt:G}},C_=[e_,...g_,T_],H_=P(O,$),S_=!1;try{await new m(H_).createExclusive(C_),S_=!0;let K=g0(H.flatMap((r)=>r.type==="message_created"?[r.data.metadata]:[]));if(K.length>0){let r=new O_(J,_,{storageRoot:h()}),E=new O_(O,$,{storageRoot:h()});await r.copyReferencedTo(K,E)}}catch(K){if(S_)await new m(H_).delete().catch(()=>{return}),await new O_(O,$,{storageRoot:h()}).removeAll().catch(()=>{return});if(K.code==="EEXIST")throw Error(`Fork session already exists: ${$}`,{cause:K});throw K}let _0=this.projectMetadataFromEntries(C_,$,O,H_);return{sessionId:$,parentSessionId:_,projectPath:O,messages:this.convertJSONLToMessages(C_),metadata:this.toPublicMetadata(_0)}}static async forkRemoteSession(_,X,$,W,J){let O;try{O=o(J)}catch(Y){throw z(Y)}let Q=p(O.collisionIdentity);if($!==Q||W!==Q)throw new R;return n(Q,async(Y)=>{let Z=S(Y,_);try{await d(Y,Z)}catch(g){throw z(g)}let V;try{V=await this.readStableSessionSnapshot(Z,_)}catch(g){throw f2(g)}let H=K0(V,_,Q),G=y(this.projectMetadataFromEntries(V,_,Q,Z),O);if(G.archivedAt)throw new t(_,_);if(G.parentId){let g=await this.findRemoteArchivedAncestor(G.parentId,Y,G.remoteWorkspace);if(g)throw new t(_,g.sessionId)}let L=e(V),U=new Date().toISOString(),B=__(),k=G.rootId||_,v=this.buildForkChildEntries({sourceEntries:L,sourceCreated:H,sourceSessionId:_,targetSessionId:X,targetProjectPath:Q,rootId:k,version:B,now:U,remoteDescriptor:G.remoteWorkspace}),w=S(Y,X),X_=!1;try{await new m(w).createExclusive(v),X_=!0,await d(Y,w);let g=g0(L.flatMap((L_)=>L_.type==="message_created"?[L_.data.metadata]:[]));if(g.length>0){let L_=new O_(Q,_,{storageRoot:Q}),j_=new O_(Q,X,{storageRoot:Q});await L_.copyReferencedTo(g,j_)}}catch(g){if(X_)await new m(w).delete().catch(()=>{return}),await new O_(Q,X,{storageRoot:Q}).removeAll().catch(()=>{return});if(g.code==="EEXIST")throw Error(`Fork session already exists: ${X}`,{cause:g});throw z(g)}let Y_=y(this.projectMetadataFromEntries(v,X,Q,w),G.remoteWorkspace),{gitBranch:l,taskIsolation:c,taskSourceProjectPath:D,taskWorktreePath:x,taskWorktreeBranch:b,taskBaseCommit:T,taskDiffStat:V_,...f}=this.toPublicMetadata(Y_);return{sessionId:X,parentSessionId:_,projectPath:Q,messages:this.convertJSONLToMessages(v),metadata:f}})}static async findRemoteArchivedAncestor(_,X,$){let W=new Set,J=_;while(J){if(W.has(J))throw new R;W.add(J),A(J);let O=S(X,J);try{await d(X,O)}catch(Z){if(Z.code==="ENOENT")return;throw z(Z)}let Q;try{Q=await this.readStableSessionSnapshot(O,J)}catch(Z){throw f2(Z)}K0(Q,J,String(X));let Y=y(this.projectMetadataFromEntries(Q,J,String(X),O));if(!f_(Y.remoteWorkspace,$))return;if(Y.archivedAt)return{sessionId:Y.sessionId,archivedAt:Y.archivedAt};J=Y.parentId}return}static buildForkChildEntries(_){let{sourceEntries:X,sourceCreated:$,sourceSessionId:W,targetSessionId:J,targetProjectPath:O,rootId:Q,version:Y,now:Z,remoteDescriptor:V}=_,{status:H,taskStatus:G,taskStatusReason:L,taskFailure:U,taskStartedAt:B,taskCompletedAt:k,taskOwnerPid:v,taskPromptSummary:w,taskPriority:X_,taskKind:Y_,taskDueAt:l,taskDispatch:c,taskModelId:D,taskRetriedFrom:x,taskDelivery:b,taskIsolation:T,taskSourceProjectPath:V_,taskWorktree:f,taskDiffStat:g,taskQueuePosition:L_,taskQueueDepth:j_,taskConcurrencyLimit:o_,pendingInteraction:R0,remoteWorkspace:w0,...a_}=$.data,t_={id:I(),sessionId:J,projectPath:O,timestamp:Z,type:"session_created",cwd:O,version:Y,data:{...a_,sessionId:J,rootId:Q,parentId:W,relationType:"fork",taskStatus:"completed",taskCompletedAt:Z,remoteWorkspace:V,createdAt:Z,updatedAt:Z}},s_=X.filter((j)=>j.type!=="session_created"&&j.type!=="token_budget_handoff_recorded"&&j.type!=="inbox_acknowledged"&&j.type!=="interaction_requested"&&j.type!=="interaction_responded"&&j.type!=="interaction_recovered"&&j.type!=="review_started"&&j.type!=="review_completed").map((j)=>{let{gitBranch:e_,...g_}=j,T_={...g_,id:I(),sessionId:J,projectPath:O,cwd:O,version:Y};if(j.type==="session_updated"){let{status:C_,taskStatus:H_,taskStatusReason:S_,taskFailure:_0,taskStartedAt:K,taskCompletedAt:r,taskOwnerPid:E,taskPromptSummary:D_,taskPriority:X4,taskKind:$4,taskDueAt:W4,taskDispatch:O4,taskModelId:J4,taskRetriedFrom:Q4,taskDelivery:Y4,taskIsolation:Z4,taskSourceProjectPath:G4,taskWorktree:V4,taskDiffStat:L4,taskQueuePosition:H4,taskQueueDepth:U4,taskConcurrencyLimit:B4,pendingInteraction:N4,remoteWorkspace:q4,...A1}=j.data;return{...T_,type:"session_updated",data:{...A1,sessionId:J,rootId:Q,parentId:W,relationType:"fork"}}}if(j.type==="message_created"){let{inboxMessageId:C_,...H_}=j.data;return{...T_,type:"message_created",data:H_}}return T_}),y_={id:I(),sessionId:J,projectPath:O,timestamp:Z,type:"session_updated",cwd:O,version:Y,data:{sessionId:J,rootId:Q,parentId:W,relationType:"fork",taskStatus:"completed",taskStatusReason:null,taskFailure:null,taskStartedAt:null,taskCompletedAt:Z,taskOwnerPid:null,taskDelivery:null,taskQueuePosition:null,taskQueueDepth:null,taskConcurrencyLimit:null,updatedAt:Z}};return[t_,...s_,y_]}static async deleteSession(_,X){if(A(_),X){if(!N.isAbsolute(X))throw Error("Session catalog cwd must be absolute");let W=N.resolve(X),J=this.getSessionFilePath(W,_),O=new m(J),Q;try{Q=await O.deleteValidated((Y)=>{return this.projectMetadataFromEntries(Y,_,W,J).projectPath===W})}catch(Y){if(!this.isCorruptSessionJSONLError(Y))throw Y;Q=await O.delete()}if(!Q)return 0;return await b_(N.join(N.dirname(J),`${_}.inbox.json`),{force:!0}),await b_(M_(W,_),{force:!0}),await new O_(W,_,{storageRoot:h()}).removeAll(),await P0(W,_,h()),await this.removeFromProjection(_,W),1}let $=(await this.scanStoredSessions(void 0,!0)).filter((W)=>W.sessionId===_);if($.length===0)return 0;return await Promise.all($.map(async(W)=>{await new m(W.filePath).delete(),await b_(N.join(N.dirname(W.filePath),`${W.sessionId}.inbox.json`),{force:!0}),await b_(M_(W.projectPath,W.sessionId),{force:!0}),await new O_(W.projectPath,W.sessionId,{storageRoot:h()}).removeAll(),await P0(W.projectPath,W.sessionId,h()),await this.removeFromProjection(W.sessionId,W.projectPath)})),$.length}static async removeFromProjection(_,X){try{let $=await l_();if($)t2($,_,X)}catch{}}static validateTaskMetadataUpdate(_,X){if(_.taskPromptSummary!==void 0&&_.taskPromptSummary!==null&&(!_.taskPromptSummary.trim()||_.taskPromptSummary.length>1000))throw Error("Session task prompt summary must contain 1-1000 characters");if(_.taskPriority!==void 0&&_.taskPriority!==null&&!z0.has(_.taskPriority))throw Error("Invalid session task priority");if(_.taskKind!==void 0&&_.taskKind!==null&&!D0.has(_.taskKind))throw Error("Invalid session task kind");if(_.taskDueAt!==void 0&&_.taskDueAt!==null&&!Number.isFinite(Date.parse(_.taskDueAt)))throw Error("Invalid session task due date");if(_.taskFailure!==void 0&&_.taskFailure!==null&&!o0(_.taskFailure))throw Error("Invalid session task failure");if(_.taskDispatch!==void 0&&_.taskDispatch!==null&&!k2(_.taskDispatch))throw Error("Invalid durable task dispatch");if(_.taskModelId!==void 0&&_.taskModelId!==null&&(!_.taskModelId.trim()||_.taskModelId.length>500))throw Error("Invalid session task model ID");if(_.selectedModelId!==void 0&&_.selectedModelId!==null&&(!_.selectedModelId.trim()||_.selectedModelId.length>500))throw Error("Invalid selected session model ID");if(_.permissionMode!==void 0&&_.permissionMode!==null&&!F0(_.permissionMode))throw Error("Invalid session permission mode");if(_.reasoningEffort!==void 0&&_.reasoningEffort!==null&&!i_(_.reasoningEffort))throw Error("Invalid session reasoning effort");if(_.serviceTier!==void 0&&_.serviceTier!==null&&!d_(_.serviceTier))throw Error("Invalid session service tier");if(_.responseVerbosity!==void 0&&_.responseVerbosity!==null&&!n_(_.responseVerbosity))throw Error("Invalid session response verbosity");if(_.communicationStyle!==void 0&&_.communicationStyle!==null&&!r_(_.communicationStyle))throw Error("Invalid session communication style");if(_.communicationStyleDigest!==void 0&&_.communicationStyleDigest!==null&&!/^[a-f0-9]{64}$/.test(_.communicationStyleDigest))throw Error("Invalid session communication style digest");if(_.projectInstructionsDigest!==void 0&&_.projectInstructionsDigest!==null&&!/^[a-f0-9]{64}$/.test(_.projectInstructionsDigest))throw Error("Invalid session project instructions digest");if(_.taskRetriedFrom!==void 0&&_.taskRetriedFrom!==null&&!b2(_.taskRetriedFrom))throw Error("Invalid session task retry source");if(_.taskDelivery!==void 0&&_.taskDelivery!==null&&!w2(_.taskDelivery))throw Error("Invalid session task delivery");if(_.taskIsolation!==void 0&&_.taskIsolation!==null&&!T1.has(_.taskIsolation))throw Error(`Invalid session task isolation: ${String(_.taskIsolation)}`);if(_.taskSourceProjectPath!==void 0&&_.taskSourceProjectPath!==null&&!N.isAbsolute(_.taskSourceProjectPath))throw Error("Session task source project path must be absolute");if(_.taskWorktree!==void 0&&_.taskWorktree!==null){let $=R2(_.taskWorktree);if(!$||$.sessionId!==X||![$.repositoryRoot,$.originalWorkspaceRoot,$.worktreeRoot,$.workspaceRoot].every((W)=>N.isAbsolute(W)))throw Error("Invalid session task worktree metadata")}if(_.taskDiffStat!==void 0&&_.taskDiffStat!==null&&!x2(_.taskDiffStat))throw Error("Invalid session task diff stat");if(_.taskQueuePosition!==void 0&&_.taskQueuePosition!==null&&(!Number.isInteger(_.taskQueuePosition)||_.taskQueuePosition<1))throw Error("Invalid session task queue position");if(_.taskQueueDepth!==void 0&&_.taskQueueDepth!==null&&(!Number.isInteger(_.taskQueueDepth)||_.taskQueueDepth<0))throw Error("Invalid session task queue depth");if(_.taskConcurrencyLimit!==void 0&&_.taskConcurrencyLimit!==null&&(!Number.isInteger(_.taskConcurrencyLimit)||_.taskConcurrencyLimit<1))throw Error("Invalid session task concurrency limit");if(typeof _.taskQueuePosition==="number"&&typeof _.taskQueueDepth==="number"&&_.taskQueuePosition>_.taskQueueDepth)throw Error("Session task queue position exceeds queue depth")}static async createSessionMetadata(_,X,$={}){A(_),q.validateTaskMetadataUpdate($,_);let W=q.resolveCatalogWorkspace(X);if($.taskWorktree&&N.resolve($.taskWorktree.workspaceRoot)!==W)throw Error("Session task worktree must match the catalog workspace");let J=new Date().toISOString(),O={id:I(),sessionId:_,timestamp:J,type:"session_created",cwd:W,gitBranch:q_(W),version:__(),data:{sessionId:_,rootId:_,...$.title!==void 0?{title:$.title}:{},taskStatus:$.taskStatus??"queued",...$.taskPromptSummary!==void 0?{taskPromptSummary:$.taskPromptSummary}:{},...$.taskPriority!==void 0?{taskPriority:$.taskPriority}:{},...$.taskKind!==void 0?{taskKind:$.taskKind}:{},...typeof $.taskDueAt==="string"?{taskDueAt:new Date($.taskDueAt).toISOString()}:{},...$.taskDispatch!==void 0?{taskDispatch:$.taskDispatch}:{},...$.taskModelId!==void 0?{taskModelId:$.taskModelId}:{},...$.taskRetriedFrom!==void 0?{taskRetriedFrom:$.taskRetriedFrom}:{},...$.taskIsolation!==void 0?{taskIsolation:$.taskIsolation}:{},...$.taskSourceProjectPath!==void 0?{taskSourceProjectPath:$.taskSourceProjectPath}:{},...$.taskWorktree!==void 0?{taskWorktree:$.taskWorktree}:{},...$.selectedModelId!==void 0?{selectedModelId:$.selectedModelId}:{},...$.permissionMode!==void 0?{permissionMode:$.permissionMode}:{},...$.reasoningEffort!==void 0?{reasoningEffort:$.reasoningEffort}:{},...$.serviceTier!==void 0?{serviceTier:$.serviceTier}:{},...$.responseVerbosity!==void 0?{responseVerbosity:$.responseVerbosity}:{},...$.communicationStyle!==void 0?{communicationStyle:$.communicationStyle}:{},...$.communicationStyleDigest!==void 0?{communicationStyleDigest:$.communicationStyleDigest}:{},...$.projectInstructionsDigest!==void 0?{projectInstructionsDigest:$.projectInstructionsDigest}:{},createdAt:J,updatedAt:J}},Q=q.getSessionFilePath(W,_);return await new m(Q).createExclusive([O]),q.toPublicMetadata(q.projectMetadataFromEntries([O],_,W,Q))}static async createRemoteSessionMetadata(_,X,$,W={}){A(_),q.validateTaskMetadataUpdate(W,_);let J;try{J=o($)}catch(Y){throw z(Y)}if(p(J.collisionIdentity)!==X)throw new R;await I2(X);let Q=new Date().toISOString();return n(X,async(Y)=>{let Z=S(Y,_),V={id:I(),sessionId:_,projectPath:X,timestamp:Q,type:"session_created",cwd:X,version:__(),data:{sessionId:_,rootId:_,remoteWorkspace:J,...W.title!==void 0?{title:W.title}:{},taskStatus:W.taskStatus??"queued",...W.taskPromptSummary!==void 0?{taskPromptSummary:W.taskPromptSummary}:{},...W.taskPriority!==void 0?{taskPriority:W.taskPriority}:{},...W.taskKind!==void 0?{taskKind:W.taskKind}:{},...typeof W.taskDueAt==="string"?{taskDueAt:new Date(W.taskDueAt).toISOString()}:{},...W.taskModelId!==void 0?{taskModelId:W.taskModelId}:{},...W.selectedModelId!==void 0?{selectedModelId:W.selectedModelId}:{},...W.permissionMode!==void 0?{permissionMode:W.permissionMode}:{},...W.reasoningEffort!==void 0?{reasoningEffort:W.reasoningEffort}:{},...W.serviceTier!==void 0?{serviceTier:W.serviceTier}:{},...W.responseVerbosity!==void 0?{responseVerbosity:W.responseVerbosity}:{},...W.communicationStyle!==void 0?{communicationStyle:W.communicationStyle}:{},...W.communicationStyleDigest!==void 0?{communicationStyleDigest:W.communicationStyleDigest}:{},...W.projectInstructionsDigest!==void 0?{projectInstructionsDigest:W.projectInstructionsDigest}:{},createdAt:Q,updatedAt:Q}};try{await new m(Z).createExclusive([V])}catch(H){if(H.code!=="EEXIST")throw H;return this.assertRemoteSessionWritableInScope(_,X,J,Y)}return q.toPublicMetadata(q.projectMetadataFromEntries([V],_,X,Z))})}static async assertSessionWritable(_,X){let $=await this.findSessionMetadata(_,X);if(!$)throw Error(`Session not found: ${_}`);if($.archivedAt)throw new t(_,$.archivedBySessionId??_);return $}static async assertRemoteSessionWritable(_,X,$){A(_);let W;try{W=o($)}catch(O){throw z(O)}if(p(W.collisionIdentity)!==X)throw new R;return n(X,async(O)=>{return this.assertRemoteSessionWritableInScope(_,X,W,O)})}static async findArchivedAncestor(_,X){let $=new Set,W=_;while(W){if($.has(W))throw Error("Session lineage contains a cycle");$.add(W),A(W);let J=P(X,W),O;try{O=await G_(J,"utf8")}catch(Y){if(Y.code==="ENOENT")return;throw Y}let Q=this.projectMetadataFromEntries(this.parseStoredSession(O,W),W,X,J);if(Q.projectPath!==X)throw Error("Session lineage escapes the requested workspace");if(Q.archivedAt)return{sessionId:Q.sessionId,archivedAt:Q.archivedAt};W=Q.parentId}return}static async listSessionArchiveMembers(_,X){A(_);let $=this.resolveCatalogWorkspace(X),W=await this.scanStoredSessions($,!0,0,null);if(!W.some((Q)=>Q.sessionId===_))throw Error(`Session not found: ${_}`);let J=new Set([_]),O=!0;while(O){O=!1;for(let Q of W)if(Q.parentId&&J.has(Q.parentId)&&!J.has(Q.sessionId))J.add(Q.sessionId),O=!0}return W.filter((Q)=>J.has(Q.sessionId)).sort((Q,Y)=>Q.sessionId.localeCompare(Y.sessionId)).map((Q)=>this.toPublicMetadata(Q))}static async archiveSession(_,X){A(_);let $=this.resolveCatalogWorkspace(X),W=await this.findSessionMetadata(_,$);if(!W)throw Error(`Session not found: ${_}`);if(W.archivedAt)return W;let J=await this.listSessionArchiveMembers(_,$),O=J.find((Y)=>Y.taskStatus==="queued"||Y.taskStatus==="running");if(O)throw new Q_(`Stop session ${O.sessionId} before archiving this session tree`);let Q=[];try{for(let H of J)Q.push(await u.acquire(H.sessionId,$));let Y=P($,_),Z=new m(Y),V=[];return await Z.appendValidated((H)=>{let G=this.projectMetadataFromEntries(H,_,$,Y);if(G.archivedAt)throw new Q_(`Session archive state changed concurrently: ${_}`);if(G.taskStatus==="queued"||G.taskStatus==="running")throw new Q_(`Stop session ${_} before archiving it`);let L=new Date().toISOString(),U={id:I(),sessionId:_,timestamp:L,type:"session_updated",cwd:$,gitBranch:q_($),version:__(),data:{sessionId:_,archivedAt:L,updatedAt:L}};return V=[...H,U],U}),this.toPublicMetadata({...this.projectMetadataFromEntries(V,_,$,Y),archivedBySessionId:_})}catch(Y){if(Y instanceof Q_)throw Y;if(Y instanceof B_)throw new Q_(Y.message);throw this.sanitizeStoredSessionError(Y,_)}finally{for(let Y of Q.reverse())await Y.release()}}static async unarchiveSession(_,X){A(_);let $=this.resolveCatalogWorkspace(X),W=await this.findSessionMetadata(_,$);if(!W)throw Error(`Session not found: ${_}`);if(!W.archivedAt)return W;if(W.archivedBySessionId&&W.archivedBySessionId!==_)throw new Q_(`Unarchive ancestor ${W.archivedBySessionId} to restore session ${_}`);let J;try{J=await u.acquire(_,$);let O=P($,_),Q=new m(O),Y=[];return await Q.appendValidated((Z)=>{if(!this.projectMetadataFromEntries(Z,_,$,O).archivedAt)throw new Q_(`Session archive state changed concurrently: ${_}`);let H=new Date().toISOString(),G={id:I(),sessionId:_,timestamp:H,type:"session_updated",cwd:$,gitBranch:q_($),version:__(),data:{sessionId:_,archivedAt:null,updatedAt:H}};return Y=[...Z,G],G}),this.toPublicMetadata(this.projectMetadataFromEntries(Y,_,$,O))}catch(O){if(O instanceof Q_)throw O;if(O instanceof B_)throw new Q_(O.message);throw this.sanitizeStoredSessionError(O,_)}finally{await J?.release()}}static async updateSessionMetadata(_,X,$){if(A(_),q.validateTaskMetadataUpdate($,_),$.taskStatus!==void 0&&!O1.has($.taskStatus))throw Error(`Invalid session task status: ${String($.taskStatus)}`);if($.taskOwnerPid!==void 0&&$.taskOwnerPid!==null&&(!Number.isInteger($.taskOwnerPid)||$.taskOwnerPid<=0))throw Error("Session task owner PID must be a positive integer");let W=q.resolveCatalogWorkspace(X);if($.taskWorktree&&N.resolve($.taskWorktree.workspaceRoot)!==W)throw Error("Session task worktree must match the catalog workspace");let J=q.getSessionFilePath(W,_),O=new m(J),Q=[];try{await O.appendValidatedAsync(async(Y)=>{let Z=q.getSessionCreatedEntry(Y,_);if(Z.data.sessionId!==_)throw Error(`Session metadata creation record sessionId mismatch: ${_}`);if(!N.isAbsolute(Z.cwd)||N.resolve(Z.cwd)!==W)throw Error(`Session metadata creation record cwd mismatch: ${_}`);let V=q.projectMetadataFromEntries(Y,_,W,J);if(V.archivedAt)throw new t(_,_);if(V.parentId){let L=await q.findArchivedAncestor(V.parentId,W);if(L)throw new t(_,L.sessionId)}let H=new Date().toISOString(),G={id:I(),sessionId:_,timestamp:H,type:"session_updated",cwd:W,gitBranch:q_(W),version:__(),data:{sessionId:_,...$.title!==void 0?{title:$.title}:{},...$.taskStatus!==void 0?{taskStatus:$.taskStatus}:{},...$.taskStatusReason!==void 0?{taskStatusReason:$.taskStatusReason}:{},...$.taskFailure!==void 0?{taskFailure:$.taskFailure}:{},...$.taskStartedAt!==void 0?{taskStartedAt:$.taskStartedAt}:{},...$.taskCompletedAt!==void 0?{taskCompletedAt:$.taskCompletedAt}:{},...$.taskOwnerPid!==void 0?{taskOwnerPid:$.taskOwnerPid}:{},...$.taskPromptSummary!==void 0?{taskPromptSummary:$.taskPromptSummary}:{},...$.taskPriority!==void 0?{taskPriority:$.taskPriority}:{},...$.taskKind!==void 0?{taskKind:$.taskKind}:{},...$.taskDueAt!==void 0?{taskDueAt:$.taskDueAt===null?null:new Date($.taskDueAt).toISOString()}:{},...$.taskDispatch!==void 0?{taskDispatch:$.taskDispatch}:{},...$.taskModelId!==void 0?{taskModelId:$.taskModelId}:{},...$.taskRetriedFrom!==void 0?{taskRetriedFrom:$.taskRetriedFrom}:{},...$.taskDelivery!==void 0?{taskDelivery:$.taskDelivery}:{},...$.taskIsolation!==void 0?{taskIsolation:$.taskIsolation}:{},...$.taskSourceProjectPath!==void 0?{taskSourceProjectPath:$.taskSourceProjectPath}:{},...$.taskWorktree!==void 0?{taskWorktree:$.taskWorktree}:{},...$.taskDiffStat!==void 0?{taskDiffStat:$.taskDiffStat}:{},...$.taskQueuePosition!==void 0?{taskQueuePosition:$.taskQueuePosition}:{},...$.taskQueueDepth!==void 0?{taskQueueDepth:$.taskQueueDepth}:{},...$.taskConcurrencyLimit!==void 0?{taskConcurrencyLimit:$.taskConcurrencyLimit}:{},...$.selectedModelId!==void 0?{selectedModelId:$.selectedModelId}:{},...$.permissionMode!==void 0?{permissionMode:$.permissionMode}:{},...$.reasoningEffort!==void 0?{reasoningEffort:$.reasoningEffort}:{},...$.serviceTier!==void 0?{serviceTier:$.serviceTier}:{},...$.responseVerbosity!==void 0?{responseVerbosity:$.responseVerbosity}:{},...$.communicationStyle!==void 0?{communicationStyle:$.communicationStyle}:{},...$.communicationStyleDigest!==void 0?{communicationStyleDigest:$.communicationStyleDigest}:{},...$.projectInstructionsDigest!==void 0?{projectInstructionsDigest:$.projectInstructionsDigest}:{},updatedAt:H}};return Q=[...Y,G],G})}catch(Y){throw q.sanitizeStoredSessionError(Y,_)}return q.toPublicMetadata(q.projectMetadataFromEntries(Q,_,W,J))}static async updateRemoteSessionMetadata(_,X,$,W){if(A(_),q.validateTaskMetadataUpdate(W,_),W.taskStatus!==void 0&&!O1.has(W.taskStatus))throw Error(`Invalid session task status: ${String(W.taskStatus)}`);if(W.taskOwnerPid!==void 0&&W.taskOwnerPid!==null&&(!Number.isInteger(W.taskOwnerPid)||W.taskOwnerPid<=0))throw Error("Session task owner PID must be a positive integer");let J;try{if(J=o($),p(J.collisionIdentity)!==X)throw new R}catch(O){throw z(O)}try{return await n(X,async(O)=>{let Q=S(O,_);await d(O,Q);let Y=new m(Q),Z=[];return await Y.appendValidatedAsync(async(V)=>{let H=y(q.projectMetadataFromEntries(V,_,X,Q),J);if(H.archivedAt)throw new t(_,_);if(H.parentId){let U=await q.findRemoteArchivedAncestor(H.parentId,O,H.remoteWorkspace);if(U)throw new t(_,U.sessionId)}let G=new Date().toISOString(),L={id:I(),sessionId:_,projectPath:X,timestamp:G,type:"session_updated",cwd:X,version:__(),data:{sessionId:_,...W.title!==void 0?{title:W.title}:{},...W.taskStatus!==void 0?{taskStatus:W.taskStatus}:{},...W.taskStatusReason!==void 0?{taskStatusReason:W.taskStatusReason}:{},...W.taskFailure!==void 0?{taskFailure:W.taskFailure}:{},...W.taskStartedAt!==void 0?{taskStartedAt:W.taskStartedAt}:{},...W.taskCompletedAt!==void 0?{taskCompletedAt:W.taskCompletedAt}:{},...W.taskOwnerPid!==void 0?{taskOwnerPid:W.taskOwnerPid}:{},...W.taskPromptSummary!==void 0?{taskPromptSummary:W.taskPromptSummary}:{},...W.taskPriority!==void 0?{taskPriority:W.taskPriority}:{},...W.taskKind!==void 0?{taskKind:W.taskKind}:{},...W.taskDueAt!==void 0?{taskDueAt:W.taskDueAt===null?null:new Date(W.taskDueAt).toISOString()}:{},...W.taskModelId!==void 0?{taskModelId:W.taskModelId}:{},...W.taskQueuePosition!==void 0?{taskQueuePosition:W.taskQueuePosition}:{},...W.taskQueueDepth!==void 0?{taskQueueDepth:W.taskQueueDepth}:{},...W.taskConcurrencyLimit!==void 0?{taskConcurrencyLimit:W.taskConcurrencyLimit}:{},...W.selectedModelId!==void 0?{selectedModelId:W.selectedModelId}:{},...W.permissionMode!==void 0?{permissionMode:W.permissionMode}:{},...W.reasoningEffort!==void 0?{reasoningEffort:W.reasoningEffort}:{},...W.serviceTier!==void 0?{serviceTier:W.serviceTier}:{},...W.responseVerbosity!==void 0?{responseVerbosity:W.responseVerbosity}:{},...W.communicationStyle!==void 0?{communicationStyle:W.communicationStyle}:{},...W.communicationStyleDigest!==void 0?{communicationStyleDigest:W.communicationStyleDigest}:{},...W.projectInstructionsDigest!==void 0?{projectInstructionsDigest:W.projectInstructionsDigest}:{},updatedAt:G}};return Z=[...V,L],L},{noFollow:!0,validateHandle:(V)=>m2(O,Q,V)}),q.toPublicMetadata(y(q.projectMetadataFromEntries(Z,_,X,Q),J))})}catch(O){if(O instanceof p_||O instanceof t)throw O;throw z(O)}}static async setSessionPermissionMode(_,X,$){if(A(_),!F0($))throw Error("Invalid session permission mode");let W=q.resolveCatalogWorkspace(X),J=await q.findSessionMetadata(_,W);if(J?.permissionMode===$)return J;if(J)return q.updateSessionMetadata(_,W,{permissionMode:$});try{return await q.createSessionMetadata(_,W,{taskStatus:"completed",permissionMode:$})}catch(O){if(O.code!=="EEXIST")throw O;return q.updateSessionMetadata(_,W,{permissionMode:$})}}static async findSessionTaskWorktree(_,X){A(_);let $=q.resolveCatalogWorkspace(X),W=q.getSessionFilePath($,_);try{return(await q.readStoredSessionMetadata(W,_,$)).taskWorktree}catch(J){if(J.code==="ENOENT")return;throw q.sanitizeStoredSessionError(J,_)}}static async findSessionTaskDispatch(_,X){A(_);let $=q.resolveCatalogWorkspace(X),W=q.getSessionFilePath($,_);try{return(await q.readStoredSessionMetadata(W,_,$)).taskDispatch}catch(J){if(J.code==="ENOENT")return;throw q.sanitizeStoredSessionError(J,_)}}static async loadSessionFromFile(_,X,$){let W=await G_(_,"utf-8"),J=this.parseStoredSession(W,X);if($!==void 0){if(this.projectMetadataFromEntries(J,X,$,_).projectPath!==$)throw Error(`未找到会话: ${X}`)}return this.convertJSONLToMessages(J)}static async loadSessionModelContextFromFile(_,X,$){let W=await G_(_,"utf-8"),J=this.parseStoredSession(W,X);if($!==void 0){if(this.projectMetadataFromEntries(J,X,$,_).projectPath!==$)throw Error(`未找到会话: ${X}`)}return this.convertJSONLToModelContext(J)}static convertJSONLToModelContext(_){let X=e(_),$=-1,W;for(let O=0;O<X.length;O++){let Q=X[O];if(Q?.type!=="part_created"||Q.data.partType!=="summary")continue;let Y=Q.data.payload;if($=O,W=V0(Y.replacementMessages),!W)W=[{role:"user",content:Y.text??"",metadata:Q.data.payload}]}if($<0||!W)return this.convertJSONLToMessages(X,{includeTokenBudgetHandoffs:!0});let J=this.convertJSONLToMessages(X.slice($+1),{includeTokenBudgetHandoffs:!0});return[...W,...J]}static convertJSONLToMessages(_,X={}){let $=[],W=new Map,J=new Map,O=new Map,Q=new Map,Y=new Map,Z=e(_),V=X.includeTokenBudgetHandoffs?O2(Z):{kind:"none"},H=new Set;for(let G of Z){if(G.type==="token_budget_handoff_recorded"){if(V.kind==="valid"&&V.event.id===G.id){let L=J2(G);if(L)$.push(L)}continue}if(G.type==="message_created"){let L=G.data.metadata&&typeof G.data.metadata==="object"&&!Array.isArray(G.data.metadata)?G.data.metadata:void 0,U=L?.codeReview&&typeof L.codeReview==="object"&&!Array.isArray(L.codeReview)?L.codeReview:void 0;if(U?.phase==="completed"&&typeof U.reviewId==="string")H.add(U.reviewId);let B=G.data.role==="assistant"&&G.data.parentMessageId?O.get(G.data.parentMessageId):void 0,k=B??{role:G.data.role,content:"",...G.data.metadata||G.data.inboxMessageId?{metadata:{...G.data.metadata&&typeof G.data.metadata==="object"&&!Array.isArray(G.data.metadata)?G.data.metadata:{},...G.data.inboxMessageId?{inboxMessageId:G.data.inboxMessageId}:{}}}:{}};if(W.set(G.data.messageId,k),J.set(G.data.messageId,[]),!B)$.push(k)}if(G.type==="part_created"){if(G.data.partType==="reasoning"){let L=W.get(G.data.messageId);if(L){let U=G.data.payload;L.reasoningContent=(L.reasoningContent??"")+(U.text??"")}}if(G.data.partType==="text"){let L=W.get(G.data.messageId);if(L){let U=G.data.payload,B=J.get(G.data.messageId);if(B)B.push({type:"text",text:U.text??""}),L.content=S2(B);else L.content=U.text??""}}if(G.data.partType==="image"){let L=W.get(G.data.messageId);if(L){let U=G.data.payload,B=J.get(G.data.messageId);if(B&&U.dataUrl)B.push({type:"image_url",image_url:{url:U.dataUrl}}),L.content=S2(B)}}if(G.data.partType==="tool_call"){let L=W.get(G.data.messageId);if(L?.role!=="assistant"){if(L=O.get(G.data.messageId),!L)L={role:"assistant",content:"",tool_calls:[]},O.set(G.data.messageId,L),$.push(L)}if(L.role==="assistant"){let U=G.data.payload,B=U.toolCallId??G.data.partId;Q.set(G.data.partId,B),Y.set(B,L),L.tool_calls??=[],L.tool_calls.push({id:B,type:"function",function:{name:U.toolName??"unknown",arguments:JSON.stringify(U.input??{})}})}}if(G.data.partType==="tool_result"){let L=G.data.payload,U=L2(L),B=U.error?`Error: ${U.error.message}`:typeof U.llmContent==="string"?U.llmContent:JSON.stringify(U.llmContent),k=L;$.push({role:"tool",content:B,tool_call_id:Q.get(G.data.messageId)??L.toolCallId,name:L.toolName,metadata:k})}if(G.data.partType==="summary"){let L=G.data.payload,U=G.data.payload;$.push({role:"system",content:L.text??"",metadata:U})}if(G.data.partType==="subtask_ref"){let L=W.get(G.data.messageId)??Y.get(G.data.messageId);if(L){let U=G.data.payload,B=L.metadata??{};L.metadata={...B,subtaskRef:U}}}}}for(let G of L0(Z)){if(G.completion===void 0||H.has(G.start.reviewId))continue;$.push({role:"assistant",content:e1(G.start,G.completion),metadata:{codeReview:{..._2(G.start,G.completion),synthetic:!0}}})}return $}static projectionDeriver(){return(_,X,$,W,J)=>{try{let O=J??P($,X),Q=this.projectMetadataFromEntries(_,X,$,O);if(W==="acp-remote")return y(Q);return Q}catch(O){if(W==="acp-remote")throw z(O);return null}}}static projectionDeriverForSearch(){return this.projectionDeriver()}static async scanStoredSessionsFromProjection(_,X,$=0,W=!1,J={}){try{let O=await l_();if(!O)return null;await q1(O,this.projectionDeriver(),$);let Q=[];Q.push("source_kind = 'local'");let Y=[];if(_!==void 0)Q.push("project_path=?"),Y.push(_);bX(J,"",Q,Y);let Z=Q.length>0?` WHERE ${Q.join(" AND ")}`:"",V=O.prepare(`SELECT metadata_json, is_subagent FROM sessions${Z}`).all(...Y),H=[];for(let L of V){if(!X&&L.is_subagent===1)continue;try{let U=JSON.parse(L.metadata_json);if(U.remoteWorkspace)continue;if(_!==void 0&&U.projectPath!==_)continue;H.push(U)}catch{}}let G=await Promise.all(H.map((L)=>this.reconcileInterruptedTask(L)));return Q1(G.filter((L)=>s2(L,J)),W)}catch{return null}}static async scanStoredSessions(_,X=!1,$=0,W=!1,J={}){let O=_?N.resolve(_):void 0,Q=await this.scanStoredSessionsFromProjection(O,X,0,W,J);if(Q)return Q;let Y=O?[{storagePath:K_(O),projectPath:O}]:await this.listAllProjectStorageDirectories(),Z=[];for(let V of Y){let H;try{H=await k_(V.storagePath)}catch(G){if(G.code==="ENOENT")continue;throw G}for(let G of H){if(!G.endsWith(".jsonl"))continue;let L=G.slice(0,-6),U=N.join(V.storagePath,G);try{let B=await this.readLocalCatalogSessionMetadata(U,L,V.projectPath);if(!B)continue;if(O!==void 0&&B.projectPath!==O){u_.warn(`[SessionService] Skipping out-of-scope session transcript: ${L}`);continue}if(!X&&B.relationType==="subagent")continue;if(!fX(B,J))continue;Z.push(await this.reconcileInterruptedTask(B))}catch(B){let k=B.code;if(k==="ENOENT")continue;if(k)throw B;if(B instanceof R)throw B;u_.warn(`[SessionService] Skipping invalid session transcript: ${L}`)}}}return Q1(Z,W)}static async listAllProjectStorageDirectories(){let _=N.join(h(),"projects"),X;try{X=await k_(_,{withFileTypes:!0,encoding:"utf8"})}catch($){if($.code==="ENOENT")return[];throw $}return X.filter(($)=>$.isDirectory()).map(($)=>({storagePath:N.join(_,$.name),projectPath:v2($.name)}))}static async listRemoteSessionScopes(_){if(_.descriptor){let $=p(_.descriptor.collisionIdentity);try{return await n($,async()=>[{hostStateRoot:$,descriptor:_.descriptor}])}catch(W){if(W.code==="ENOENT")return[];throw z(W)}}return(await Y1()).map(($)=>({hostStateRoot:String($)}))}static async scanRemoteStoredSessions(_,X=0){let $=await this.scanRemoteStoredSessionsFromProjection(_,X);if($)return $;let W=await this.listRemoteSessionScopes(_),J=[];for(let O of W)await n(O.hostStateRoot,async(Q)=>{let Y;try{Y=await k_(String(Q))}catch(Z){if(Z.code==="ENOENT")return;throw z(Z)}for(let Z of Y){if(!Z.endsWith(".jsonl"))continue;let V=Z.slice(0,-6);if(!h_(V))continue;let H=S(Q,V),G;try{G=await this.readRemoteStoredSessionMetadata(H,V,O.hostStateRoot,Q,_.descriptor)}catch(L){if(L.code==="ENOENT")continue;if(L instanceof Error&&L.message)throw z(L);throw L}if(!G)continue;if(!_.includeSubagents&&G.relationType==="subagent")continue;J.push(G)}});return g2(J,_.archived)}static async scanRemoteStoredSessionsFromProjection(_,X=0){try{let $=await l_();if(!$)return null;if(_.descriptor)await o2($,this.projectionDeriver(),p(_.descriptor.collisionIdentity));else await a2($,this.projectionDeriver());let W=["source_kind = 'acp-remote'"],J=[];if(_.descriptor)W.push("project_path=?"),J.push(p(_.descriptor.collisionIdentity));let O=W.length>0?` WHERE ${W.join(" AND ")}`:"",Q=$.prepare(`SELECT metadata_json, is_subagent FROM sessions${O}`).all(...J),Y=[];for(let G of Q){if(!_.includeSubagents&&G.is_subagent===1)continue;let L=y(JSON.parse(G.metadata_json),void 0);if(_.descriptor&&!f_(L.remoteWorkspace,_.descriptor))continue;Y.push(L)}let Z=_.descriptor,V=Z?Y.filter((G)=>f_(G.remoteWorkspace,Z)):Y,H=await Promise.all(V.map((G)=>this.reconcileInterruptedTask(G,"acp-remote")));return g2(H.map((G)=>y(G)),_.archived)}catch($){throw z($)}}static toRemoteCatalogEntries(_){return _.flatMap((X)=>{if(!X.remoteWorkspace)return[];return[{...X,workspaceIdentity:X.remoteWorkspace.exactIdentity}]})}static async readStoredSessionMetadata(_,X,$,W="local",J){if(W==="acp-remote"){if(!J||String(J)!==$)throw new R;let Q=S(J,X);if(_!==Q)throw new R}let O=await this.readStoredSessionMetadataWithoutReconciliation(_,X,$);if(W==="acp-remote")y(O);return this.reconcileInterruptedTask(O,W,J)}static async readStoredSessionMetadataWithoutReconciliation(_,X,$){let W=await G_(_,"utf-8"),J=this.parseStoredSession(W,X);return this.projectMetadataFromEntries(J,X,$,_)}static async readLocalCatalogSessionMetadata(_,X,$){let W=await G_(_,"utf-8"),J=this.parseStoredSession(W,X),O=this.getSessionCreatedEntry(J,X);if(Object.hasOwn(O.data,"remoteWorkspace")){try{o(O.data.remoteWorkspace)}catch(Q){throw z(Q)}return}return this.projectMetadataFromEntries(J,X,$,_)}static async readRemoteStoredSessionMetadata(_,X,$,W,J){if(String(W)!==$||_!==S(W,X))throw new R;await d(W,_);let O=await G_(_,"utf-8"),Q=this.parseStoredSession(O,X);this.validateSessionWorkspace(Q,X,$);let Y=y(this.projectMetadataFromEntries(Q,X,$,_));if(J&&!f_(Y.remoteWorkspace,J))return;return y(await this.reconcileInterruptedTask(Y,"acp-remote",W),Y.remoteWorkspace)}static async reconcileInterruptedTask(_,X="local",$){let W=_.taskOwnerPid;if(_.taskStatus!=="running"||W===void 0||D2(W))return _;if(X==="acp-remote"){if($)return this.reconcileInterruptedTaskInScope(_,W,$);return n(_.projectPath,async(J)=>this.reconcileInterruptedTaskInScope(_,W,J))}return this.reconcileInterruptedTaskInScope(_,W)}static async reconcileInterruptedTaskInScope(_,X,$){let W=$?y(_).remoteWorkspace:void 0;if($){let Y=S($,_.sessionId);if(_.projectPath!==String($)||_.filePath!==Y)throw new R;await d($,_.filePath)}let J;try{J=$?await u.acquireRemote(_.sessionId,$):await u.acquire(_.sessionId,_.projectPath)}catch(Y){if(!(Y instanceof B_))throw Y;let Z=await G_(_.filePath,"utf-8"),V=this.projectMetadataFromEntries(this.parseStoredSession(Z,_.sessionId),_.sessionId,_.projectPath,_.filePath);return W?y(V,W):V}let O=new m(_.filePath),Q;try{try{await O.appendValidated((Z)=>{let V=this.projectMetadataFromEntries(Z,_.sessionId,_.projectPath,_.filePath);if(W)y(V,W);if(V.taskStatus!=="running"||V.taskOwnerPid!==X||D2(X))throw new C1;let H=new Date().toISOString(),G={id:I(),sessionId:_.sessionId,timestamp:H,type:"session_updated",cwd:_.projectPath,...$?{projectPath:_.projectPath}:{},...$?{}:{gitBranch:q_(_.projectPath)},version:__(),data:{sessionId:_.sessionId,taskStatus:"interrupted",taskStatusReason:"Task owner process exited before completion",taskCompletedAt:H,taskOwnerPid:null,taskQueuePosition:null,taskQueueDepth:null,updatedAt:H}};return Q=[...Z,G],G})}catch(Z){if(!(Z instanceof C1))throw Z}if(!Q){let Z=await G_(_.filePath,"utf-8");Q=this.parseStoredSession(Z,_.sessionId)}let Y=this.projectMetadataFromEntries(Q,_.sessionId,_.projectPath,_.filePath);return W?y(Y,W):Y}finally{await J.release()}}static projectMetadataFromEntries(_,X,$,W){if(_.length===0)throw Error(`Empty session transcript: ${X}`);let J=this.getSessionCreatedEntry(_,X);if(Object.hasOwn(J.data,"remoteWorkspace"))this.validateRemoteSessionCreationRecord(_,J,X,$);let O=_.reduce((E,D_)=>D_.type==="session_updated"?{...E,...D_.data}:E,{...J.data}),Q=e(_),Y=s1(t1(Q)),V=L0(Q).at(-1),H=Q.findLastIndex((E)=>E.type==="review_started"&&E.data.reviewId===V?.start.reviewId||E.type==="review_completed"&&E.data.reviewId===V?.start.reviewId),G=Q.findLastIndex((E)=>(E.type==="session_created"||E.type==="session_updated")&&Object.hasOwn(E.data,"taskStatus")),L=V!==void 0&&H>G,U=L?V.completion===void 0?"running":V.completion.status==="completed"||V.completion.status==="stale"?"completed":V.completion.status==="aborted"?"cancelled":V.completion.status==="interrupted"?"interrupted":"failed":void 0,B=Q.filter((E)=>E.type==="message_created"&&["user","assistant"].includes(E.data.role)).length,k=Q.some((E)=>E.type==="part_created"&&E.data.partType==="tool_result"&&typeof E.data.payload.error==="string"),v=O1.has(O.taskStatus)?O.taskStatus:void 0,w=U??v??(k?"failed":"completed"),X_=typeof O.taskOwnerPid==="number"&&Number.isInteger(O.taskOwnerPid)&&O.taskOwnerPid>0?O.taskOwnerPid:void 0,Y_=T1.has(O.taskIsolation)?O.taskIsolation:void 0,l=typeof O.taskSourceProjectPath==="string"&&N.isAbsolute(O.taskSourceProjectPath)?N.resolve(O.taskSourceProjectPath):void 0,c=J.cwd;if(c!==void 0&&!N.isAbsolute(c))throw Error(`Session catalog cwd must be absolute: ${X}`);let D=c===void 0?$:N.resolve(c),x=this.parseRemoteWorkspaceFromCreated(J,X,D),b=R2(O.taskWorktree),T=b?.sessionId===X&&N.resolve(b.workspaceRoot)===D?b:void 0,V_=x2(O.taskDiffStat),f=k2(O.taskDispatch),g=z0.has(O.taskPriority)?O.taskPriority:f?.taskPriority,L_=D0.has(O.taskKind)?O.taskKind:f?.taskKind,j_=typeof O.taskDueAt==="string"&&Number.isFinite(Date.parse(O.taskDueAt))?new Date(O.taskDueAt).toISOString():f?.taskDueAt,o_=typeof O.taskModelId==="string"&&O.taskModelId.trim()?O.taskModelId:f?.modelId,R0=typeof O.selectedModelId==="string"&&O.selectedModelId.trim()?O.selectedModelId:o_,w0=F0(O.permissionMode)?O.permissionMode:f?.permissionMode,a_=i_(O.reasoningEffort)?O.reasoningEffort:f?.reasoningEffort,t_=d_(O.serviceTier)?O.serviceTier:f?.serviceTier,s_=n_(O.responseVerbosity)?O.responseVerbosity:f?.responseVerbosity,y_=r_(O.communicationStyle)?O.communicationStyle:f?.communicationStyle,j=Object.hasOwn(O,"communicationStyleDigest")?typeof O.communicationStyleDigest==="string"&&/^[a-f0-9]{64}$/.test(O.communicationStyleDigest)?O.communicationStyleDigest:void 0:y_===f?.communicationStyle?f?.communicationStyleDigest:void 0,e_=Object.hasOwn(O,"projectInstructionsDigest")?typeof O.projectInstructionsDigest==="string"&&/^[a-f0-9]{64}$/.test(O.projectInstructionsDigest)?O.projectInstructionsDigest:void 0:f?.projectInstructionsDigest,g_=M1(O.archivedAt)?O.archivedAt:void 0,T_=b2(O.taskRetriedFrom),C_=w2(O.taskDelivery),H_=typeof O.taskQueuePosition==="number"&&Number.isInteger(O.taskQueuePosition)&&O.taskQueuePosition>0?O.taskQueuePosition:void 0,S_=typeof O.taskQueueDepth==="number"&&Number.isInteger(O.taskQueueDepth)&&O.taskQueueDepth>=0?O.taskQueueDepth:void 0,_0=typeof O.taskConcurrencyLimit==="number"&&Number.isInteger(O.taskConcurrencyLimit)&&O.taskConcurrencyLimit>0?O.taskConcurrencyLimit:void 0,K=L?V?.completion?V.completion.status==="completed"?void 0:`Code review ${h0(V.completion.status)}`:`Reviewing ${V?.start.target.label??"changes"}`:void 0,r=L?w==="failed"&&K?r0(K):void 0:o0(O.taskFailure)?O.taskFailure:w==="failed"&&typeof O.taskStatusReason==="string"?r0(O.taskStatusReason):void 0;return{sessionId:X,projectPath:D,remoteWorkspace:x,...J.gitBranch!==void 0?{gitBranch:J.gitBranch}:{},rootId:O.rootId||X,parentId:O.parentId,relationType:O.relationType,resumedFrom:O.resumedFrom,rootAgentId:O.rootAgentId,resumeDepth:O.resumeDepth,title:O.title,agentType:O.agentType,model:O.model,selectedModelId:R0,permissionMode:w0,reasoningEffort:a_,serviceTier:t_,responseVerbosity:s_,communicationStyle:y_,communicationStyleDigest:j,projectInstructionsDigest:e_,pendingInteraction:Y,taskStatus:w,taskStatusReason:r?.message??K??(typeof O.taskStatusReason==="string"?O.taskStatusReason:void 0),taskFailure:r,taskStartedAt:L?V?.start.startedAt:typeof O.taskStartedAt==="string"?O.taskStartedAt:void 0,taskCompletedAt:L?V?.completion?.completedAt:typeof O.taskCompletedAt==="string"?O.taskCompletedAt:void 0,taskPromptSummary:L?V?SX(V.start.target):"/review uncommitted":typeof O.taskPromptSummary==="string"?O.taskPromptSummary:void 0,taskPriority:g,taskKind:L_,taskDueAt:j_,taskModelId:o_,taskRetryAvailable:f!==void 0,taskRetriedFrom:T_,taskDelivery:C_,taskIsolation:Y_,taskSourceProjectPath:l,taskWorktreePath:T?.worktreeRoot,taskWorktreeBranch:T?.branch,taskBaseCommit:T?.baseCommit,taskDiffStat:V_,taskQueuePosition:H_,taskQueueDepth:S_,taskConcurrencyLimit:_0,archivedAt:g_,taskOwnerPid:L?void 0:X_,taskWorktree:T,taskDispatch:f,messageCount:B,firstMessageTime:_[0].timestamp,lastMessageTime:_.at(-1).timestamp,hasErrors:k||w==="failed",filePath:W}}static parseRemoteWorkspaceFromCreated(_,X,$){if(!Object.hasOwn(_.data,"remoteWorkspace"))return;let W;try{W=o(_.data.remoteWorkspace)}catch(O){throw z(O)}if(p(W.collisionIdentity)!==$)throw new R;return W}static async assertRemoteSessionWritableInScope(_,X,$,W){let J=S(W,_),O;try{await d(W,J),O=await this.readStableSessionSnapshot(J,_)}catch(Y){throw z(Y)}let Q;try{Q=this.projectMetadataFromEntries(O,_,X,J)}catch(Y){throw z(Y)}if(Q.archivedAt)throw new t(_,Q.archivedBySessionId??_);if(!Q.remoteWorkspace)throw new R;if(!f_(Q.remoteWorkspace,$))throw new p_;return this.toPublicMetadata(Q)}static async readValidatedRemoteSessionSnapshot(_,X,$,W){W?.throwIfAborted();let J;try{if(A(_),J=o($),p(J.collisionIdentity)!==X)throw new R}catch(O){throw z(O)}try{return await n(X,async(O)=>{W?.throwIfAborted();let Q=S(O,_);await d(O,Q);let Y=await this.readStableSessionSnapshot(Q,_,3,W),Z=this.projectMetadataFromEntries(Y,_,X,Q);return y(Z,J),Y})}catch(O){if(W?.aborted)throw O;if(O instanceof p_)throw O;throw z(O)}}static toPublicMetadata(_){let{filePath:X,taskOwnerPid:$,taskWorktree:W,taskDispatch:J,...O}=_;return O}static getSessionFilePath(_,X){return P(_,X)}static getSessionCreatedEntry(_,X){let $=_.find((W)=>W.type==="session_created");if(!$)throw new _4(X);return $}static validateRemoteSessionCreationRecord(_,X,$,W){if(K0(_,$,W)!==X)throw new R}static resolveCatalogWorkspace(_){if(!N.isAbsolute(_))throw Error("Session catalog cwd must be absolute");return M0(_)}static validateSessionWorkspace(_,X,$){let W=this.getSessionCreatedEntry(_,X);if(W.data.sessionId!==X)throw Error(`Session creation record sessionId mismatch: ${X}`);if(!N.isAbsolute(W.cwd)||N.resolve(W.cwd)!==$)throw Error(`Session creation record cwd mismatch: ${X}`)}static resolveForkWorkspace(_){if(!N.isAbsolute(_))throw Error("Fork workspace paths must be absolute");return M0(_)}static parseStoredSession(_,X){return c2(_,`session ${X}`)}static isCorruptSessionJSONLError(_){return _ instanceof Error&&_.message.startsWith("Invalid session JSONL ")}static sanitizeStoredSessionError(_,X){if(!this.isCorruptSessionJSONLError(_)||!(_ instanceof Error))return _;let $=_.message.match(/ at line (\d+)$/)?.[1];return Error(`Invalid session JSONL in session ${X}${$?` at line ${$}`:""}`,{cause:_.cause})}static async readStableSessionSnapshot(_,X,$=3,W){for(let J=0;J<$;J+=1){W?.throwIfAborted();let O=await c_.stat(_,W),Q=await c_.readFile(_,W),Y=this.parseStoredSession(Q,X),Z=await c_.stat(_,W);if(W?.throwIfAborted(),O.size===Z.size&&O.mtimeNs===Z.mtimeNs&&O.dev===Z.dev&&O.ino===Z.ino)return Y}throw new K1}}function S2(_){if(_.length===1&&_[0]?.type==="text")return _[0].text;return[..._]}
|
|
94
|
-
export{cX as
|
|
94
|
+
export{cX as oc,pX as pc,nX as qc,U_ as rc,dX as sc,m0 as tc,a0 as uc,D1 as vc,X0 as wc,w1 as xc,tX as yc,B_ as zc,u as Ac,k4 as Bc,S1 as Cc,O_ as Dc,M$ as Ec,A$ as Fc,E$ as Gc,F$ as Hc,z$ as Ic,D$ as Jc,R$ as Kc,w$ as Lc,x$ as Mc,k$ as Nc,b$ as Oc,f$ as Pc,j$ as Qc,y$ as Rc,g$ as Sc,S$ as Tc,I$ as Uc,m$ as Vc,v$ as Wc,P$ as Xc,u$ as Yc,h$ as Zc,l$ as _c,c$ as $c,p$ as ad,n$ as bd,d$ as cd,i$ as dd,r$ as ed,o$ as fd,a$ as gd,t$ as hd,n1 as id,h4 as jd,P0 as kd,r1 as ld,WW as md,OW as nd,t1 as od,YW as pd,L0 as qd,GW as rd,h0 as sd,e1 as td,_2 as ud,HW as vd,UW as wd,BW as xd,e4 as yd,O2 as zd,J2 as Ad,_X as Bd,NW as Cd,x_ as Dd,r0 as Ed,o0 as Fd,N_ as Gd,N0 as Hd,bW as Id,fW as Jd,jW as Kd,yW as Ld,L2 as Md,gW as Nd,uW as Od,F2 as Pd,q2 as Qd,pW as Rd,z2 as Sd,nW as Td,gX as Ud,zO as Vd,DO as Wd,_4 as Xd,t as Yd,Q_ as Zd,q as _d};
|