blade-code 0.10.137 → 0.10.139

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.
Files changed (132) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-5dwmhsrx.js → chunk-04t21rey.js} +1 -1
  3. package/dist/{chunk-w9z34f27.js → chunk-05cv54r8.js} +1 -1
  4. package/dist/{chunk-h74p51hg.js → chunk-16648v5c.js} +1 -1
  5. package/dist/{chunk-c2mx5zg0.js → chunk-1bqatrxs.js} +1 -1
  6. package/dist/{chunk-bx75fd0d.js → chunk-1h3736q2.js} +387 -387
  7. package/dist/{chunk-bzqbmz6t.js → chunk-25r1v5rn.js} +59 -59
  8. package/dist/chunk-2agbk8ef.js +1 -0
  9. package/dist/chunk-2bty4510.js +6 -0
  10. package/dist/chunk-2f7nr9hh.js +1 -0
  11. package/dist/{chunk-7ykqvsph.js → chunk-2jq9ed09.js} +1 -1
  12. package/dist/chunk-2t9vtt75.js +1 -0
  13. package/dist/chunk-3aaehgva.js +1 -0
  14. package/dist/{chunk-1evc05gr.js → chunk-3ekz3zms.js} +2 -2
  15. package/dist/{chunk-wzkh3e6a.js → chunk-3eskgvpy.js} +1 -1
  16. package/dist/chunk-3t5r41yh.js +1 -0
  17. package/dist/{chunk-ramana2t.js → chunk-40pd090k.js} +2 -2
  18. package/dist/{chunk-6e3mh79j.js → chunk-516adpx6.js} +1 -1
  19. package/dist/{chunk-q0s3gcjm.js → chunk-5j68055h.js} +1 -1
  20. package/dist/{chunk-ky9br0z8.js → chunk-5qwpdx3n.js} +1 -1
  21. package/dist/{chunk-e76gej4y.js → chunk-5w8pmsqe.js} +2 -2
  22. package/dist/chunk-5xgyx25z.js +2 -0
  23. package/dist/{chunk-wxtj6gqb.js → chunk-65c3vjwm.js} +1 -1
  24. package/dist/{chunk-69rjav47.js → chunk-6ezffjq1.js} +1 -1
  25. package/dist/{chunk-5btfnf2r.js → chunk-6j5v5emj.js} +4 -4
  26. package/dist/{chunk-9frd4fpk.js → chunk-6qhbdcse.js} +2 -2
  27. package/dist/{chunk-wa71vstt.js → chunk-7j4s1nrc.js} +1 -1
  28. package/dist/{chunk-affzv7f1.js → chunk-7pg5y3pg.js} +1 -1
  29. package/dist/{chunk-na4wzne8.js → chunk-8py443a5.js} +1 -1
  30. package/dist/{chunk-ybc5myz7.js → chunk-8rccn1y2.js} +1 -1
  31. package/dist/{chunk-0c82q1sz.js → chunk-9m7d3ajv.js} +1 -1
  32. package/dist/{chunk-p0gbxaqz.js → chunk-a5hkv8er.js} +2 -2
  33. package/dist/{chunk-xt0ktytp.js → chunk-awheqy52.js} +2 -2
  34. package/dist/{chunk-69nwa6bn.js → chunk-az08pq83.js} +1 -1
  35. package/dist/{chunk-y6jee9w7.js → chunk-bgzj85za.js} +1 -1
  36. package/dist/{chunk-0ccm29qy.js → chunk-bq6d0v5b.js} +2 -2
  37. package/dist/{chunk-zk9rf1d7.js → chunk-cefmcwyv.js} +2 -2
  38. package/dist/{chunk-4jqw75ce.js → chunk-d64b7wta.js} +1 -1
  39. package/dist/{chunk-g799czsy.js → chunk-dv2m2xe5.js} +1 -1
  40. package/dist/{chunk-h05qhgrb.js → chunk-dw0mewc2.js} +2 -2
  41. package/dist/{chunk-nxnmqk4s.js → chunk-earhezc8.js} +1 -1
  42. package/dist/{chunk-chspy9f8.js → chunk-esff371k.js} +7 -7
  43. package/dist/{chunk-f2b9cyj5.js → chunk-f4cn6v8t.js} +2 -2
  44. package/dist/{chunk-mzye1ah2.js → chunk-fbrdcveb.js} +1 -1
  45. package/dist/{chunk-vp6d1fqp.js → chunk-ft1bdqbs.js} +2 -2
  46. package/dist/{chunk-vg3zwv4g.js → chunk-gc4kj295.js} +1 -1
  47. package/dist/chunk-gjc1hhhv.js +1 -0
  48. package/dist/chunk-grx6fv9w.js +5 -0
  49. package/dist/chunk-gx4seq5c.js +10 -0
  50. package/dist/chunk-h2gp7smy.js +1 -0
  51. package/dist/{chunk-74bswv4z.js → chunk-hrcz179j.js} +2 -2
  52. package/dist/{chunk-xg9fyvw0.js → chunk-jb4hmk56.js} +2 -2
  53. package/dist/{chunk-wxypv01z.js → chunk-jy7k2dwm.js} +2 -2
  54. package/dist/chunk-mc2mr1kn.js +2 -0
  55. package/dist/{chunk-wc9wsyrc.js → chunk-mec8yedz.js} +1 -1
  56. package/dist/{chunk-gpj7k3er.js → chunk-mh3ne2sf.js} +2 -2
  57. package/dist/chunk-mkckss82.js +1 -0
  58. package/dist/{chunk-g9vdmvk2.js → chunk-mtfjwsn2.js} +2 -2
  59. package/dist/{chunk-6xvrrypm.js → chunk-npc7jt96.js} +1 -1
  60. package/dist/chunk-ntpwqfy3.js +1 -0
  61. package/dist/chunk-q82ntq7t.js +1 -0
  62. package/dist/{chunk-mthf5akx.js → chunk-qrv72yy6.js} +2 -2
  63. package/dist/{chunk-5sf2rc1z.js → chunk-recafw5r.js} +3 -3
  64. package/dist/{chunk-karq4wfd.js → chunk-rhwkvx96.js} +1 -1
  65. package/dist/{chunk-mavranwn.js → chunk-sdhdn0yx.js} +3 -3
  66. package/dist/{chunk-e8pfbb6c.js → chunk-sj4gz23a.js} +1 -1
  67. package/dist/chunk-smjfqtws.js +1 -0
  68. package/dist/{chunk-0k2x2ae6.js → chunk-t88sfhjj.js} +1 -1
  69. package/dist/{chunk-39de5k03.js → chunk-v2fewxvw.js} +2 -2
  70. package/dist/chunk-wazhd8bm.js +1 -0
  71. package/dist/chunk-wf4s1hp2.js +1 -0
  72. package/dist/{chunk-v5503t2t.js → chunk-x3c718v5.js} +4 -4
  73. package/dist/{chunk-etf3e9kt.js → chunk-yvmexv2c.js} +1 -1
  74. package/dist/{chunk-75yy9yre.js → chunk-z9qv0d6k.js} +1 -1
  75. package/dist/{chunk-z3hpstky.js → chunk-zx78c1an.js} +1 -1
  76. package/dist/{chunk-rgjr7jsd.js → chunk-zz5n2qxk.js} +1 -1
  77. package/dist/web/assets/ChatView-CQnuGDqk.js +63 -0
  78. package/dist/web/assets/{CodeBlockHighlighter-Czp4VZIg.js → CodeBlockHighlighter-CYhxXWvb.js} +1 -1
  79. package/dist/web/assets/{FilePreview-BJWuYfyF.js → FilePreview-ByTaE1GR.js} +1 -1
  80. package/dist/web/assets/{KanbanBoard-DrYzt5Kh.js → KanbanBoard-KMmGvNPc.js} +1 -1
  81. package/dist/web/assets/{MarkdownRenderer-DxkR5r7t.js → MarkdownRenderer-C6lKOJaG.js} +3 -3
  82. package/dist/web/assets/{ScrollArea-D71pJjgW.js → ScrollArea-Bo6cZ3PH.js} +1 -1
  83. package/dist/web/assets/{SessionHistorySurface-2y9bnndm.js → SessionHistorySurface-Cymc4xw0.js} +1 -1
  84. package/dist/web/assets/{SettingsModal-BbaTL5Rk.js → SettingsModal-D36xhHwa.js} +5 -10
  85. package/dist/web/assets/{Sidebar-COZltpL9.js → Sidebar-DEGQINYb.js} +1 -1
  86. package/dist/web/assets/{TaskSwitcher-3giB7l1P.js → TaskSwitcher-BEISb7-8.js} +1 -1
  87. package/dist/web/assets/{TerminalPanel-gvTTiTgX.js → TerminalPanel-B7PXaRGh.js} +1 -1
  88. package/dist/web/assets/{archive-DndqAA2q.js → archive-Dyn5Oz68.js} +1 -1
  89. package/dist/web/assets/{arrow-left-XNYfpUAb.js → arrow-left-mWU3P1zb.js} +1 -1
  90. package/dist/web/assets/{calendar-clock-BQOfNcCK.js → calendar-clock-B6b0Cb3d.js} +1 -1
  91. package/dist/web/assets/{chevron-right-Cvq3LzHK.js → chevron-right-Cl6g5_0e.js} +1 -1
  92. package/dist/web/assets/{chevrons-up-down-Dia1U9Sz.js → chevrons-up-down-FKryGzO4.js} +1 -1
  93. package/dist/web/assets/{clock-3-CnxLS8cv.js → clock-3-CfVjvMmA.js} +1 -1
  94. package/dist/web/assets/{copy-CWCS3Lql.js → copy-CIYuf7du.js} +1 -1
  95. package/dist/web/assets/{download-DXdsM18t.js → download-DecDFX8n.js} +1 -1
  96. package/dist/web/assets/{external-link-1IN2ZfaO.js → external-link-DaSwvjf7.js} +1 -1
  97. package/dist/web/assets/{folder-Bpq602dI.js → folder-DZtlKvFm.js} +1 -1
  98. package/dist/web/assets/{index-57UZsfTt.css → index-DC2p1vGD.css} +1 -1
  99. package/dist/web/assets/index-DQaqO-lw.js +203 -0
  100. package/dist/web/assets/{pause-BYhoGDZq.js → pause-Bd-STGLc.js} +1 -1
  101. package/dist/web/assets/{pencil-pRZQVHFU.js → pencil-BoTIqqxX.js} +1 -1
  102. package/dist/web/assets/{play-DGZdCyPk.js → play-C4ctis0t.js} +1 -1
  103. package/dist/web/assets/{plus-CAQ3qlUJ.js → plus-D08TlGJu.js} +1 -1
  104. package/dist/web/assets/session-events-DKjIMNKI.js +29 -0
  105. package/dist/web/assets/{settings-BPfzj_Vf.js → settings-BGRhMFaU.js} +1 -1
  106. package/dist/web/assets/team-CPme0l2K.js +6 -0
  107. package/dist/web/assets/{teamService-BScT9o9A.js → teamService-CVCtTVfY.js} +1 -1
  108. package/dist/web/assets/{terminal-CldJbdMr.js → terminal-D7GsyYki.js} +1 -1
  109. package/dist/web/index.html +2 -2
  110. package/package.json +1 -1
  111. package/dist/chunk-35668hyn.js +0 -1
  112. package/dist/chunk-3gmcvd0c.js +0 -1
  113. package/dist/chunk-5774a669.js +0 -1
  114. package/dist/chunk-7n035mhg.js +0 -1
  115. package/dist/chunk-9a7bppj7.js +0 -2
  116. package/dist/chunk-a26vtcv5.js +0 -5
  117. package/dist/chunk-b08thknq.js +0 -1
  118. package/dist/chunk-d6tbr25k.js +0 -1
  119. package/dist/chunk-dt9n4f4e.js +0 -1
  120. package/dist/chunk-ermypm1x.js +0 -2
  121. package/dist/chunk-esp69w6w.js +0 -1
  122. package/dist/chunk-g1y60ey9.js +0 -1
  123. package/dist/chunk-gf5v8aff.js +0 -1
  124. package/dist/chunk-m9kh7djg.js +0 -6
  125. package/dist/chunk-ntmkzrs8.js +0 -1
  126. package/dist/chunk-pj15kt5b.js +0 -10
  127. package/dist/chunk-pv1vwasz.js +0 -1
  128. package/dist/chunk-vda03kxj.js +0 -1
  129. package/dist/web/assets/ChatView-DpvPjAh7.js +0 -63
  130. package/dist/web/assets/index-DEOQizD2.js +0 -203
  131. package/dist/web/assets/session-events-C5_Q0kZV.js +0 -29
  132. package/dist/web/assets/team-QZ9byb3E.js +0 -1
@@ -1,4 +1,4 @@
1
- import{Pi as L,Si as _}from"./chunk-g799czsy.js";import{execSync as F}from"child_process";import{existsSync as Q,readFileSync as O,realpathSync as b}from"fs";import*as V from"os";import*as H from"path";import{basename as J,isAbsolute as j,resolve as R}from"path";function G(z=_()){let q=z,M=f(q);return{workingDirectory:q,projectRoot:M,platform:`${V.platform()} (${V.arch()})`,nodeVersion:process.version,currentDate:new Date().toISOString().split("T")[0],homeDirectory:V.homedir()}}function Y(z,q){try{return F(q,{cwd:z,encoding:"utf8",stdio:["pipe","pipe","ignore"]}).trim()}catch{return null}}function v(z={}){let{includeGitSnapshot:q=!0,includeDirectoryListing:M=!0,workingDirectory:W}=z,B=G(W),$=Q(H.join(B.projectRoot,".git")),T=J(process.env.SHELL||"unknown"),A=["package.json","tsconfig.json","BLADE.md",".env.example"].filter((K)=>Q(H.join(B.projectRoot,K))).map((K)=>`- \`${H.join(B.projectRoot,K)}\``),N=`# Environment
1
+ import{Si as L,Vi as _}from"./chunk-dv2m2xe5.js";import{execSync as F}from"child_process";import{existsSync as Q,readFileSync as O,realpathSync as b}from"fs";import*as V from"os";import*as H from"path";import{basename as J,isAbsolute as j,resolve as R}from"path";function G(z=_()){let q=z,M=f(q);return{workingDirectory:q,projectRoot:M,platform:`${V.platform()} (${V.arch()})`,nodeVersion:process.version,currentDate:new Date().toISOString().split("T")[0],homeDirectory:V.homedir()}}function Y(z,q){try{return F(q,{cwd:z,encoding:"utf8",stdio:["pipe","pipe","ignore"]}).trim()}catch{return null}}function v(z={}){let{includeGitSnapshot:q=!0,includeDirectoryListing:M=!0,workingDirectory:W}=z,B=G(W),$=Q(H.join(B.projectRoot,".git")),T=J(process.env.SHELL||"unknown"),A=["package.json","tsconfig.json","BLADE.md",".env.example"].filter((K)=>Q(H.join(B.projectRoot,K))).map((K)=>`- \`${H.join(B.projectRoot,K)}\``),N=`# Environment
2
2
  You have been invoked in the following environment:
3
3
  - Primary working directory: ${B.workingDirectory}
4
4
  - Is a git repository: ${$?"true":"false"}
@@ -25,4 +25,4 @@ ${I.join(`
25
25
 
26
26
  Project root directory listing:
27
27
  ${K}`}return N}function f(z){let q=z,M=null;while(q!==H.dirname(q)){if(Q(H.join(q,".git")))return q;if(Q(H.join(q,".blade")))return q;if(Q(H.join(q,".claude")))return q;if(!M&&Q(H.join(q,"package.json")))M=q;q=H.dirname(q)}return M??z}function x(z,q){let M=j(z)?z:R(q||process.cwd(),z),W;try{W=b(M)}catch{W=M}L(W)}
28
- export{v as sf,f as tf,x as uf};
28
+ export{v as vf,f as wf,x as xf};
@@ -1,3 +1,3 @@
1
- import{j as i}from"./chunk-0c82q1sz.js";import{Si as s}from"./chunk-g799czsy.js";import"./chunk-0k2x2ae6.js";import"./chunk-6e3mh79j.js";import m from"node:path";var r={registry:i,currentWorkspace:s,inputCwd:()=>process.cwd(),write:console.log};function c(t,e){return m.resolve(e.inputCwd(),t)}function p(t){return t.map((e)=>{let o=e.isCurrent?"*":" ",n=e.gitBranch?` · ${e.gitBranch}`:"",d=e.available?"":" · unavailable";return`${o} ${e.name}${n}${d}
1
+ import{j as i}from"./chunk-9m7d3ajv.js";import{Vi as s}from"./chunk-dv2m2xe5.js";import"./chunk-t88sfhjj.js";import"./chunk-516adpx6.js";import m from"node:path";var r={registry:i,currentWorkspace:s,inputCwd:()=>process.cwd(),write:console.log};function c(t,e){return m.resolve(e.inputCwd(),t)}function p(t){return t.map((e)=>{let o=e.isCurrent?"*":" ",n=e.gitBranch?` · ${e.gitBranch}`:"",d=e.available?"":" · unavailable";return`${o} ${e.name}${n}${d}
2
2
  ${e.path}`}).join(`
3
3
  `)}async function l(t,e=r){let o=await e.registry.list(e.currentWorkspace());return e.write(t.json?JSON.stringify(o,null,2):p(o)),o}async function u(t,e=r){let o=await e.registry.bind(c(t.path,e),e.currentWorkspace());return e.write(t.json?JSON.stringify(o,null,2):`Bound project: ${o.path}`),o}async function j(t,e=r){let o=c(t.path,e),n=await e.registry.unbind(o);return e.write(t.json?JSON.stringify({path:o,removed:n},null,2):n?`Unbound project: ${o}`:`Project was not bound: ${o}`),n}var a={type:"boolean",default:!1,describe:"Print machine-readable JSON"},P={command:"list",aliases:["ls"],describe:"List bound projects",builder:(t)=>t.option("json",a),handler:async(t)=>{await l(t)}},b={command:"add <path>",aliases:["bind"],describe:"Bind a project folder",builder:(t)=>t.positional("path",{type:"string",demandOption:!0,describe:"Absolute or relative project folder"}).option("json",a),handler:async(t)=>{await u(t)}},h={command:"remove <path>",aliases:["rm","unbind"],describe:"Unbind a project folder",builder:(t)=>t.positional("path",{type:"string",demandOption:!0,describe:"Absolute or relative project folder"}).option("json",a),handler:async(t)=>{await j(t)}},y={command:"projects",aliases:["project"],describe:"Manage project bindings shared with Blade Web",builder:(t)=>t.command(P).command(b).command(h).demandCommand(1,"Choose list, add, or remove"),handler:()=>{return}};export{j as runProjectsRemove,l as runProjectsList,u as runProjectsAdd,y as projectsCommands,p as formatProjectList};
@@ -1,4 +1,4 @@
1
- import{Qa as H}from"./chunk-7ykqvsph.js";import"./chunk-wzkh3e6a.js";import"./chunk-z3hpstky.js";import{Pf as $,Vf as T}from"./chunk-v5503t2t.js";import"./chunk-v508x7cg.js";import"./chunk-q0s3gcjm.js";import"./chunk-mavranwn.js";import"./chunk-c2mx5zg0.js";import"./chunk-ramana2t.js";import"./chunk-6xvrrypm.js";import"./chunk-9a7bppj7.js";import{Si as k}from"./chunk-g799czsy.js";import"./chunk-mzye1ah2.js";import"./chunk-vp6d1fqp.js";import"./chunk-xg9fyvw0.js";import"./chunk-wxtj6gqb.js";import"./chunk-g9vdmvk2.js";import"./chunk-wxypv01z.js";import"./chunk-nxnmqk4s.js";import"./chunk-0k2x2ae6.js";import"./chunk-6e3mh79j.js";import U from"os";import J from"path";function X(z){return typeof z==="string"?z:void 0}function N(z){if(!Array.isArray(z))return;let q=[];for(let K of z)if(typeof K==="string")q.push(K);else if(K!=null)q.push(String(K));return q}function b(){console.log(`
1
+ import{Qa as H}from"./chunk-2jq9ed09.js";import"./chunk-3eskgvpy.js";import"./chunk-zx78c1an.js";import{Sf as $,Yf as T}from"./chunk-x3c718v5.js";import"./chunk-v508x7cg.js";import"./chunk-5j68055h.js";import"./chunk-sdhdn0yx.js";import"./chunk-1bqatrxs.js";import"./chunk-40pd090k.js";import"./chunk-npc7jt96.js";import"./chunk-mc2mr1kn.js";import{Vi as k}from"./chunk-dv2m2xe5.js";import"./chunk-fbrdcveb.js";import"./chunk-ft1bdqbs.js";import"./chunk-jb4hmk56.js";import"./chunk-65c3vjwm.js";import"./chunk-mtfjwsn2.js";import"./chunk-jy7k2dwm.js";import"./chunk-earhezc8.js";import"./chunk-t88sfhjj.js";import"./chunk-516adpx6.js";import U from"os";import J from"path";function X(z){return typeof z==="string"?z:void 0}function N(z){if(!Array.isArray(z))return;let q=[];for(let K of z)if(typeof K==="string")q.push(K);else if(K!=null)q.push(String(K));return q}function b(){console.log(`
2
2
  blade mcp
3
3
  `),console.log(`管理 MCP 服务器
4
4
  `),console.log("Commands:"),console.log(" blade mcp add <name> <commandOrUrl> [args...] 添加 MCP 服务器"),console.log(" blade mcp remove <name> 删除 MCP 服务器 [aliases: rm]"),console.log(" blade mcp list 列出所有 MCP 服务器并检查健康状态 [aliases: ls]"),console.log(" blade mcp get <name> 获取服务器详情"),console.log(" blade mcp login <name> 登录远程 MCP OAuth"),console.log(" blade mcp logout <name> 清除远程 MCP OAuth 凭证"),console.log(` blade mcp add-json <name> <json> 从 JSON 字符串添加服务器
@@ -1 +1 @@
1
- import{He as a,Ie as b,Je as c,Ke as d,Le as e,Me as f,Ne as g,Oe as h,Pe as i,Qe as j,Re as k,Se as l,Te as m,Ue as n,Ve as o,We as p,Xe as q,Ye as r}from"./chunk-p0gbxaqz.js";import"./chunk-xt0ktytp.js";import"./chunk-c2mx5zg0.js";import"./chunk-vp6d1fqp.js";import"./chunk-0k2x2ae6.js";import"./chunk-6e3mh79j.js";export{h as syncSession,j as syncAllAcpRemoteScopes,k as syncAll,i as syncAcpRemoteScope,r as searchProjectionText,f as resetProjectionDbCache,l as removeSessionFromProjection,m as rebuildProjectionIndex,q as readSessionSurfaceHistoryPage,o as readSessionSurfaceCatalogRevision,p as readSessionSurfaceCatalogPage,n as readSessionSurfaceCandidates,g as projectSessionSurfaceSummaryFields,c as getSessionSurfaceHistoryByteLimit,e as getProjectionDb,d as getIndexDbPath,a as __setProjectionIOForTesting,b as __resetProjectionIOForTesting};
1
+ import{$e as r,Ke as a,Le as b,Me as c,Ne as d,Oe as e,Pe as f,Qe as g,Re as h,Se as i,Te as j,Ue as k,Ve as l,We as m,Xe as n,Ye as o,Ze as p,_e as q}from"./chunk-a5hkv8er.js";import"./chunk-awheqy52.js";import"./chunk-1bqatrxs.js";import"./chunk-ft1bdqbs.js";import"./chunk-t88sfhjj.js";import"./chunk-516adpx6.js";export{h as syncSession,j as syncAllAcpRemoteScopes,k as syncAll,i as syncAcpRemoteScope,r as searchProjectionText,f as resetProjectionDbCache,l as removeSessionFromProjection,m as rebuildProjectionIndex,q as readSessionSurfaceHistoryPage,o as readSessionSurfaceCatalogRevision,p as readSessionSurfaceCatalogPage,n as readSessionSurfaceCandidates,g as projectSessionSurfaceSummaryFields,c as getSessionSurfaceHistoryByteLimit,e as getProjectionDb,d as getIndexDbPath,a as __setProjectionIOForTesting,b as __resetProjectionIOForTesting};
@@ -1 +1 @@
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
+ import"./chunk-516adpx6.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,3 +1,3 @@
1
- import{Wj as F,yk as $}from"./chunk-0k2x2ae6.js";import{promises as J}from"node:fs";import Q from"node:path";import{Mutex as U}from"async-mutex";import w from"write-file-atomic";var X=1;function D(k){if(!k||typeof k!=="object"||Array.isArray(k))return!1;let q=k;return typeof q.path==="string"&&Q.isAbsolute(q.path)&&typeof q.boundAt==="string"}async function Z(k){if(!Q.isAbsolute(k))throw Error("Project path must be absolute");let q=await J.realpath(k);if(!(await J.stat(q)).isDirectory())throw Error("Project path must be a directory");return q}class K{filePath;mutex=new U;constructor(k=Q.join(F(),"bound-projects.json")){this.filePath=k}async list(k){let q=await this.read(),z=await Z(k),H=new Map;for(let C of q.projects)H.set(C.path,C);if(!H.has(z))H.set(z,{path:z,boundAt:new Date(0).toISOString()});return(await Promise.all([...H.values()].map(async(C)=>{let L=!1;try{L=(await J.stat(C.path)).isDirectory()}catch{}return{path:C.path,name:Q.basename(C.path)||C.path,...L?{gitBranch:$(C.path)}:{},available:L,isCurrent:C.path===z,boundAt:C.boundAt}}))).sort((C,L)=>{if(C.isCurrent!==L.isCurrent)return C.isCurrent?-1:1;return C.name.localeCompare(L.name)})}async bind(k,q){return this.mutex.runExclusive(async()=>{let z=await Z(k),H=await this.read(),W=H.projects.find((M)=>M.path===z),C=W??{path:z,boundAt:new Date().toISOString()};if(!W)H.projects.push(C),await this.write(H);let L=await Z(q),A=$(z);return{path:z,name:Q.basename(z)||z,...A?{gitBranch:A}:{},available:!0,isCurrent:z===L,boundAt:C.boundAt}})}async unbind(k){return this.mutex.runExclusive(async()=>{if(!Q.isAbsolute(k))throw Error("Project path must be absolute");let q=await J.realpath(k).catch(()=>Q.resolve(k)),z=await this.read(),H=z.projects.filter((W)=>W.path!==q);if(H.length===z.projects.length)return!1;return z.projects=H,await this.write(z),!0})}async read(){try{let k=await J.readFile(this.filePath,"utf8"),q=JSON.parse(k);if(q.version!==X||!Array.isArray(q.projects))return{version:X,projects:[]};return{version:X,projects:q.projects.filter(D)}}catch(k){if(k.code==="ENOENT"||k instanceof SyntaxError)return{version:X,projects:[]};throw k}}async write(k){let q=Q.dirname(this.filePath);await J.mkdir(q,{recursive:!0,mode:448}),await J.chmod(q,448),await w(this.filePath,`${JSON.stringify(k,null,2)}
1
+ import{Bk as $,Zj as F}from"./chunk-t88sfhjj.js";import{promises as J}from"node:fs";import Q from"node:path";import{Mutex as U}from"async-mutex";import w from"write-file-atomic";var X=1;function D(k){if(!k||typeof k!=="object"||Array.isArray(k))return!1;let q=k;return typeof q.path==="string"&&Q.isAbsolute(q.path)&&typeof q.boundAt==="string"}async function Z(k){if(!Q.isAbsolute(k))throw Error("Project path must be absolute");let q=await J.realpath(k);if(!(await J.stat(q)).isDirectory())throw Error("Project path must be a directory");return q}class K{filePath;mutex=new U;constructor(k=Q.join(F(),"bound-projects.json")){this.filePath=k}async list(k){let q=await this.read(),z=await Z(k),H=new Map;for(let C of q.projects)H.set(C.path,C);if(!H.has(z))H.set(z,{path:z,boundAt:new Date(0).toISOString()});return(await Promise.all([...H.values()].map(async(C)=>{let L=!1;try{L=(await J.stat(C.path)).isDirectory()}catch{}return{path:C.path,name:Q.basename(C.path)||C.path,...L?{gitBranch:$(C.path)}:{},available:L,isCurrent:C.path===z,boundAt:C.boundAt}}))).sort((C,L)=>{if(C.isCurrent!==L.isCurrent)return C.isCurrent?-1:1;return C.name.localeCompare(L.name)})}async bind(k,q){return this.mutex.runExclusive(async()=>{let z=await Z(k),H=await this.read(),W=H.projects.find((M)=>M.path===z),C=W??{path:z,boundAt:new Date().toISOString()};if(!W)H.projects.push(C),await this.write(H);let L=await Z(q),A=$(z);return{path:z,name:Q.basename(z)||z,...A?{gitBranch:A}:{},available:!0,isCurrent:z===L,boundAt:C.boundAt}})}async unbind(k){return this.mutex.runExclusive(async()=>{if(!Q.isAbsolute(k))throw Error("Project path must be absolute");let q=await J.realpath(k).catch(()=>Q.resolve(k)),z=await this.read(),H=z.projects.filter((W)=>W.path!==q);if(H.length===z.projects.length)return!1;return z.projects=H,await this.write(z),!0})}async read(){try{let k=await J.readFile(this.filePath,"utf8"),q=JSON.parse(k);if(q.version!==X||!Array.isArray(q.projects))return{version:X,projects:[]};return{version:X,projects:q.projects.filter(D)}}catch(k){if(k.code==="ENOENT"||k instanceof SyntaxError)return{version:X,projects:[]};throw k}}async write(k){let q=Q.dirname(this.filePath);await J.mkdir(q,{recursive:!0,mode:448}),await J.chmod(q,448),await w(this.filePath,`${JSON.stringify(k,null,2)}
2
2
  `,{mode:384}),await J.chmod(this.filePath,384)}}var _=new K;
3
3
  export{_ as j};
@@ -1,4 +1,4 @@
1
- import{$e as hT,_e as w0}from"./chunk-xt0ktytp.js";import{sh as MT}from"./chunk-c2mx5zg0.js";import{sj as yT}from"./chunk-vp6d1fqp.js";import{Ak as RT,Wj as X0,ck as E,ek as D,fk as i,hk as c,ik as j0,jk as bT,kk as ST,lk as fT,pk as k,rk as D0,sk as a}from"./chunk-0k2x2ae6.js";import{Bk as Z0}from"./chunk-6e3mh79j.js";import{createHash as F_}from"node:crypto";import{readdir as k0,stat as A0}from"node:fs/promises";import G0 from"node:path";import{createHash as oT,randomBytes as u0}from"node:crypto";import{chmod as p0,link as rT,lstat as p,mkdir as eT,open as l,readdir as l0,realpath as v0,unlink as U0}from"node:fs/promises";import K from"node:path";function dT(){return typeof globalThis.Bun<"u"}function sT(T){return{exec:($)=>T.exec($),prepare:($)=>{let _=T.prepare($);return{run:(...G)=>{_.run(...G)},get:(...G)=>_.get(...G),all:(...G)=>_.all(...G)}},transaction:($)=>T.transaction($)(),pragma:($)=>T.pragma($,{simple:!0}),close:()=>T.close()}}function aT(T){return{exec:($)=>T.exec($),prepare:($)=>{let _=T.query($);return{run:(...G)=>{_.run(...G)},get:(...G)=>_.get(...G),all:(...G)=>_.all(...G)}},transaction:($)=>T.transaction($)(),pragma:($)=>{let _=T.query(`PRAGMA ${$}`).get();if(!_)return;let G=Object.values(_);return G.length===1?G[0]:_},close:()=>T.close()}}function tT(T){return[`PRAGMA busy_timeout=${T};`,"PRAGMA journal_mode=WAL;","PRAGMA synchronous=NORMAL;","PRAGMA foreign_keys=ON;"].join(`
1
+ import{bf as w0,cf as hT}from"./chunk-awheqy52.js";import{vh as MT}from"./chunk-1bqatrxs.js";import{vj as yT}from"./chunk-ft1bdqbs.js";import{Dk as RT,Zj as X0,fk as E,hk as D,ik as i,kk as c,lk as j0,mk as bT,nk as ST,ok as fT,sk as k,uk as D0,vk as a}from"./chunk-t88sfhjj.js";import{Ek as Z0}from"./chunk-516adpx6.js";import{createHash as F_}from"node:crypto";import{readdir as k0,stat as A0}from"node:fs/promises";import G0 from"node:path";import{createHash as oT,randomBytes as u0}from"node:crypto";import{chmod as p0,link as rT,lstat as p,mkdir as eT,open as l,readdir as l0,realpath as v0,unlink as U0}from"node:fs/promises";import K from"node:path";function dT(){return typeof globalThis.Bun<"u"}function sT(T){return{exec:($)=>T.exec($),prepare:($)=>{let _=T.prepare($);return{run:(...G)=>{_.run(...G)},get:(...G)=>_.get(...G),all:(...G)=>_.all(...G)}},transaction:($)=>T.transaction($)(),pragma:($)=>T.pragma($,{simple:!0}),close:()=>T.close()}}function aT(T){return{exec:($)=>T.exec($),prepare:($)=>{let _=T.query($);return{run:(...G)=>{_.run(...G)},get:(...G)=>_.get(...G),all:(...G)=>_.all(...G)}},transaction:($)=>T.transaction($)(),pragma:($)=>{let _=T.query(`PRAGMA ${$}`).get();if(!_)return;let G=Object.values(_);return G.length===1?G[0]:_},close:()=>T.close()}}function tT(T){return[`PRAGMA busy_timeout=${T};`,"PRAGMA journal_mode=WAL;","PRAGMA synchronous=NORMAL;","PRAGMA foreign_keys=ON;"].join(`
2
2
  `)}async function t(T,$={}){let _=$.busyTimeoutMs??5000;if(!Number.isSafeInteger(_)||_<0)return null;let G=null;try{if(dT()){let{Database:Y}=await import("bun:sqlite");G=aT(new Y(T))}else{let Q=(await import("better-sqlite3")).default;G=sT(new Q(T))}return G.exec(tT(_)),G}catch{try{G?.close()}catch{}return null}}var T$="surface-workspaces-v1",n0=/^[a-f0-9]{64}$/,$$=/^acp-remote-workspace:[A-Za-z0-9_-]{43}$/,_$=1024,G$=".surface-workspaces-v1.capacity.sqlite",i0=/^\.tmp-acp-remote-workspace-([1-9][0-9]*)-[a-f0-9]{32}\.pending$/;class H extends Error{name="AcpRemoteWorkspaceReferenceError";code;retryable;constructor(T){let $=T==="session_surface_not_found"?{message:"Session surface was not found",retryable:!1}:T==="session_surface_capacity"?{message:"Session surface capacity is exhausted",retryable:!0}:{message:"Session surface state is invalid",retryable:!1};super($.message);this.code=T,this.retryable=$.retryable,Object.setPrototypeOf(this,new.target.prototype)}}var P,o=new Map;function c0(T){return K.join(String(T),T$)}async function d0(T,$){let _=D($);if(i(_.collisionIdentity)!==String(T))throw new H("session_surface_state_invalid");let G=a0(_.exactIdentity),X=c0(T);return await Y$(T,X),X$(X,()=>Q$(X,async()=>{await B$(X);let Y=await s0(T,X,!0),Q=Y.recordsByDigest.get(G);if(Q)return Q.workspaceRef;if(Y.recordsByDigest.size>=_$)throw new H("session_surface_capacity");let Z=K.join(X,`${G}.json`),U=new Set(Y.workspaceRefToDigest.keys());for(let V=0;V<32;V+=1){let g=M$();if(U.has(g))continue;return J$(T,X,Z,_,{version:1,exactIdentityDigest:G,workspaceRef:g})}throw new H("session_surface_state_invalid")}))}async function X$(T,$){let _=o.get(T)??Promise.resolve(),G=()=>{return},X=new Promise((Q)=>{G=Q}),Y=_.catch(()=>{return}).then(()=>X);o.set(T,Y),await _.catch(()=>{return});try{return await $()}finally{if(G(),o.get(T)===Y)o.delete(T)}}async function Y$(T,$){try{await V0($,String(T))}catch(_){if(x(_)!=="ENOENT"){if(_ instanceof H)throw _;throw new H("session_surface_state_invalid")}try{await eT($,{recursive:!1,mode:448})}catch(G){if(x(G)!=="EEXIST")throw new H("session_surface_state_invalid")}await V0($,String(T)),await h(String(T))}}async function Q$(T,$){await P?.beforeCapacityLockAttempt?.();let _=await Z$(T),G=!1,X,Y,Q;try{_.database.exec("BEGIN IMMEDIATE;"),G=!0,await P?.afterCapacityLockAcquired?.(),Q={value:await $()}}catch(Z){X=Z}if(G)try{await U$(_),_.database.exec("ROLLBACK;")}catch(Z){Y=Z}try{_.database.close()}catch(Z){if(!G)Y=Z}if(await _.identityHandle.close().catch(()=>{return}),Y!==void 0)throw new H("session_surface_state_invalid");if(X instanceof H)throw X;if(X!==void 0||!Q)throw new H("session_surface_state_invalid");return Q.value}async function Z$(T){let $=K.join(T,G$),_=null,G;try{let X=!1;try{let Q=await l($,"wx",384);X=!0,await Q.sync(),await Q.close()}catch(Q){if(x(Q)!=="EEXIST")throw Q}if(await m($,T),X)await h(T);G=await l($,"r"),await n(G,$,T);let Y=await G.stat({bigint:!0});if(_=await t($,{busyTimeoutMs:30000}),!_)throw new H("session_surface_state_invalid");if(_.exec("PRAGMA locking_mode=NORMAL;"),_.exec("PRAGMA synchronous=FULL;"),_.exec("PRAGMA busy_timeout=30000;"),process.platform!=="win32")await p0($,384);return await n(G,$,T),await V$($,T),{database:_,identity:Y,identityHandle:G,path:$}}catch(X){await G?.close().catch(()=>{return});try{_?.close()}catch{}if(X instanceof H)throw X;throw new H("session_surface_state_invalid")}}async function U$(T){await n(T.identityHandle,T.path,K.dirname(T.path));let $=await T.identityHandle.stat({bigint:!0});if(!B0(T.identity,$))throw new H("session_surface_state_invalid")}async function V$(T,$){for(let _ of["-journal","-shm","-wal"]){let G=`${T}${_}`;try{if(process.platform!=="win32")await p0(G,384);await m(G,$)}catch(X){if(x(X)!=="ENOENT"){if(X instanceof H)throw X;throw new H("session_surface_state_invalid")}}}}async function B$(T){let $=await l0(T,{withFileTypes:!0}),_=!1;for(let G of $){if(!i0.test(G.name))continue;let X=K.join(T,G.name);await m(X,T),await U0(X),_=!0}if(_)await h(T)}async function s0(T,$,_){try{await V0($,String(T))}catch(Q){if(!_&&x(Q)==="ENOENT")return{recordsByDigest:new Map,workspaceRefToDigest:new Map};if(Q instanceof H)throw Q;throw new H("session_surface_state_invalid")}let G;try{G=await l0($,{withFileTypes:!0})}catch(Q){if(!_&&x(Q)==="ENOENT")return{recordsByDigest:new Map,workspaceRefToDigest:new Map};throw new H("session_surface_state_invalid")}let X=new Map,Y=new Map;for(let Q of G){if(i0.test(Q.name)){await m(K.join($,Q.name),$);continue}if(!Q.name.endsWith(".json"))continue;let Z=K.basename(Q.name,".json");if(!n0.test(Z))throw new H("session_surface_state_invalid");let U=K.join($,Q.name),V=await g$(U,$);if(V.exactIdentityDigest!==Z)throw new H("session_surface_state_invalid");if(X.has(Z))throw new H("session_surface_state_invalid");let g=Y.get(V.workspaceRef);if(g&&g!==Z)throw new H("session_surface_state_invalid");X.set(Z,V),Y.set(V.workspaceRef,Z)}return{recordsByDigest:X,workspaceRefToDigest:Y}}async function g$(T,$){let _;try{await m(T,$),_=await l(T,"r"),await n(_,T,$);let G=await _.readFile({encoding:"utf8"});return H$(G)}catch(G){if(G instanceof H&&G.code==="session_surface_not_found")throw G;if(x(G)==="ENOENT")throw new H("session_surface_not_found");throw new H("session_surface_state_invalid")}finally{await _?.close()}}function H$(T){let $;try{$=JSON.parse(T)}catch{throw new H("session_surface_state_invalid")}if(!O$($))throw new H("session_surface_state_invalid");return $}function O$(T){if(!T||typeof T!=="object"||Array.isArray(T))return!1;let $=T,_=Object.keys($).sort();if(_.length!==3||_[0]!=="exactIdentityDigest"||_[1]!=="version"||_[2]!=="workspaceRef")return!1;return $.version===1&&typeof $.exactIdentityDigest==="string"&&n0.test($.exactIdentityDigest)&&typeof $.workspaceRef==="string"&&$$.test($.workspaceRef)}function a0(T){return oT("sha256").update(`acp-remote-workspace-exact-identity\x00${T}`).digest("hex")}function M$(){return`acp-remote-workspace:${u0(32).toString("base64url")}`}function C$(){return`.tmp-acp-remote-workspace-${process.pid}-${u0(16).toString("hex")}.pending`}async function V0(T,$){if(K.dirname(T)!==$)throw new H("session_surface_state_invalid");let _=await p(T);if(_.isSymbolicLink()||!_.isDirectory())throw new H("session_surface_state_invalid");if(typeof process.getuid==="function"&&_.uid!==process.getuid())throw new H("session_surface_state_invalid");let G=t0(_.mode);if(process.platform!=="win32"&&G!==448)throw new H("session_surface_state_invalid");await g0(T,$,K.basename(T))}async function m(T,$){if(K.dirname(T)!==$)throw new H("session_surface_state_invalid");let _=await p(T);if(_.isSymbolicLink()||!_.isFile())throw new H("session_surface_state_invalid");if(typeof process.getuid==="function"&&_.uid!==process.getuid())throw new H("session_surface_state_invalid");let G=t0(_.mode);if(process.platform!=="win32"&&G!==384)throw new H("session_surface_state_invalid");await g0(T,$,K.basename(T))}async function n(T,$,_){let[G,X]=await Promise.all([T.stat({bigint:!0}),p($,{bigint:!0})]);if(K.dirname($)!==_||X.isSymbolicLink()||!X.isFile()||!G.isFile()||X.dev!==G.dev||X.ino!==G.ino)throw new H("session_surface_state_invalid");if(typeof process.getuid==="function"&&(Number(X.uid)!==process.getuid()||Number(G.uid)!==process.getuid()))throw new H("session_surface_state_invalid");let Y=Number(X.mode&BigInt(511)),Q=Number(G.mode&BigInt(511));if(process.platform!=="win32"&&(Y!==384||Q!==384))throw new H("session_surface_state_invalid");await g0($,_,K.basename($))}async function g0(T,$,_){let G=await v0(T),X=await v0($);if(G!==K.join(X,_))throw new H("session_surface_state_invalid")}async function h(T){if(!F$(process.platform))return;try{if(P?.syncDirectory){await P.syncDirectory(T);return}await L$(T)}catch{throw new H("session_surface_state_invalid")}}function F$(T){return T!=="win32"}async function L$(T){let $=await l(T,"r");try{await $.sync()}finally{await $.close()}}async function J$(T,$,_,G,X){let Y=K.join($,C$()),Q,Z,U=!1,V=!1,g,O;try{Q=await l(Y,"wx",384),await Q.writeFile(JSON.stringify(X),"utf8"),await Q.sync(),await n(Q,Y,$),Z=await Q.stat({bigint:!0}),await Q.close(),Q=void 0,await P?.beforePublish?.({finalPath:_,referenceDirectoryPath:$,tempPath:Y});try{await rT(Y,_),U=!0}catch(M){if(x(M)!=="EEXIST")throw M;g=await N$(T,G)}if(U){let M=await p(_,{bigint:!0});if(!Z||!B0(Z,M))throw new H("session_surface_state_invalid");await m(_,$),await h($),V=!0,g=X.workspaceRef;try{await P?.afterPublish?.({finalPath:_,referenceDirectoryPath:$,tempPath:Y})}catch{}}}catch(M){O=M}finally{await Q?.close().catch(()=>{return})}if(O!==void 0&&U&&!V&&Z)try{let M=await p(_,{bigint:!0});if(B0(Z,M))await U0(_),await h($)}catch{}try{if(await U0(Y),!V)await h($)}catch(M){if(x(M)!=="ENOENT"&&O===void 0&&!V)O=M}if(O instanceof H)throw O;if(O!==void 0||g===void 0)throw new H("session_surface_state_invalid");return g}async function N$(T,$){let _=c0(T),G=await s0(T,_,!0),X=a0(D($).exactIdentity),Y=G.recordsByDigest.get(X);if(!Y)throw new H("session_surface_state_invalid");return Y.workspaceRef}function B0(T,$){return BigInt(T.dev)===BigInt($.dev)&&BigInt(T.ino)===BigInt($.ino)}function x(T){return T!==null&&typeof T==="object"&&"code"in T&&typeof T.code==="string"?T.code:void 0}function t0(T){return typeof T==="bigint"?Number(T&BigInt(511)):T&511}import*as f from"node:path";var $T=50,_T=100,z$=new Set(["queued","running","completed","failed","cancelled","interrupted"]),I$=new Set(["high","medium","low"]),GT=/^[A-Za-z0-9_-]+$/,K$=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/,W$=/^acp-remote-exact-path:[a-f0-9]{64}$/;function XT(T){return typeof T==="string"&&K$.test(T)&&Number.isFinite(Date.parse(T))}function o0(T){return typeof T==="string"&&f.isAbsolute(T)}function r0(T){return typeof T==="string"&&W$.test(T)}function j$(T){return Buffer.from(JSON.stringify(T),"utf8").toString("base64url")}function k$(T){return Buffer.from(JSON.stringify(T),"utf8").toString("base64url")}function A$(T){try{if(!GT.test(T))throw Error("invalid");let $=Buffer.from(T,"base64url").toString("utf8");if(Buffer.from($,"utf8").toString("base64url")!==T)throw Error("invalid");let _=JSON.parse($);if(_.version!==1||_.kind!==void 0&&_.kind!=="local"||typeof _.includeSubagents!=="boolean"||_.archived!==void 0&&typeof _.archived!=="boolean"||!(_.cwd===null||o0(_.cwd))||!XT(_.lastMessageTime)||!o0(_.projectPath)||!k(_.sessionId))throw Error("invalid");return{version:1,kind:"local",cwd:_.cwd===null?null:f.resolve(_.cwd),includeSubagents:_.includeSubagents,archived:_.archived??!1,lastMessageTime:_.lastMessageTime,projectPath:f.resolve(_.projectPath),sessionId:_.sessionId}}catch{throw Error("Invalid session cursor")}}function x$(T){try{if(!GT.test(T))throw Error("invalid");let $=Buffer.from(T,"base64url").toString("utf8");if(Buffer.from($,"utf8").toString("base64url")!==T)throw Error("invalid");let _=JSON.parse($),G=Object.keys(_),X=new Set(["version","kind","exactIdentity","includeSubagents","archived","lastMessageTime","workspaceIdentity","sessionId"]);if(G.some((Y)=>!X.has(Y))||_.version!==1||_.kind!=="remote"||typeof _.includeSubagents!=="boolean"||typeof _.archived!=="boolean"||!(_.exactIdentity===null||r0(_.exactIdentity))||!XT(_.lastMessageTime)||!r0(_.workspaceIdentity)||!k(_.sessionId))throw Error("invalid");return{version:1,kind:"remote",exactIdentity:_.exactIdentity??null,includeSubagents:_.includeSubagents,archived:_.archived,lastMessageTime:_.lastMessageTime,workspaceIdentity:_.workspaceIdentity,sessionId:_.sessionId}}catch{throw Error("Invalid remote session cursor")}}function v(T){let $="";for(let _=0;_<T.length;_+=1)$+=T.charCodeAt(_).toString(16).padStart(4,"0");return $}function E$(T){if(!T.cursor)return;let $=A$(T.cursor);if($.cwd!==T.cwd||$.includeSubagents!==T.includeSubagents||($.archived??!1)!==T.archived)throw Error("Session cursor scope does not match this query");return $}function q$(T){if(!T.cursor)return;let $=x$(T.cursor);if($.exactIdentity!==T.exactIdentity||T.exactIdentity!==null&&$.workspaceIdentity!==T.exactIdentity||$.includeSubagents!==T.includeSubagents||($.archived??!1)!==T.archived)throw Error("Remote session cursor scope does not match this query");return $}function n_(T={}){let{cwd:$,cursor:_,limit:G,includeSubagents:X=!1,archived:Y=!1}=T;if($!==void 0&&!f.isAbsolute($))throw Error("Session catalog cwd must be absolute");let Q=G===void 0?$T:G;if(!Number.isInteger(Q)||Q<1||Q>_T)throw Error("Session catalog limit must be an integer from 1 to 100");return{cwd:$===void 0?null:f.resolve($),cursor:_??void 0,limit:Q,includeSubagents:X,archived:Y}}function i_(T={}){let{descriptor:$,cursor:_,limit:G,includeSubagents:X=!1,archived:Y=!1}=T,Q=G===void 0?$T:G;if(!Number.isInteger(Q)||Q<1||Q>_T)throw Error("Session catalog limit must be an integer from 1 to 100");return{descriptor:$,exactIdentity:$?.exactIdentity??null,cursor:_??void 0,limit:Q,includeSubagents:X,archived:Y}}function c_(T={}){let $=e0(T.taskStatus,z$,"task status"),_=e0(T.taskPriority,I$,"task priority"),G=TT(T.taskDueAfter,"taskDueAfter"),X=TT(T.taskDueBefore,"taskDueBefore");return D$(G,X),{...$?{taskStatuses:$}:{},..._?{taskPriorities:_}:{},...G?{taskDueAfter:G}:{},...X?{taskDueBefore:X}:{}}}function e0(T,$,_){if(T===void 0)return;let G=Array.isArray(T)?T:[T];if(G.length===0)return;let X=new Set;for(let Y of G){if(typeof Y!=="string"||!$.has(Y))throw Error(`Invalid session ${_} filter`);X.add(Y)}return[...X].sort()}function TT(T,$){if(T===void 0)return;if(typeof T!=="string"||!Number.isFinite(Date.parse(T)))throw Error(`Invalid session ${$} filter`);return new Date(T).toISOString()}function D$(T,$){if(T!==void 0&&$!==void 0&&T>$)throw Error("Session task due range is inverted")}function w$(T,$){if(T.lastMessageTime>$.lastMessageTime)return-1;if(T.lastMessageTime<$.lastMessageTime)return 1;if(T.projectPath<$.projectPath)return-1;if(T.projectPath>$.projectPath)return 1;if(T.sessionId<$.sessionId)return-1;if(T.sessionId>$.sessionId)return 1;return 0}function b$(T,$){if(T.lastMessageTime>$.lastMessageTime)return-1;if(T.lastMessageTime<$.lastMessageTime)return 1;if(T.workspaceIdentity<$.workspaceIdentity)return-1;if(T.workspaceIdentity>$.workspaceIdentity)return 1;if(T.sessionId<$.sessionId)return-1;if(T.sessionId>$.sessionId)return 1;return 0}function d_(T,$){let _=[...T],G=E$($);if(G)_=_.filter((Q)=>w$(Q,{sessionId:G.sessionId,projectPath:G.projectPath,lastMessageTime:G.lastMessageTime})>0);let X=_.slice(0,$.limit);if(X.length===0||_.length<=X.length)return{sessions:X};let Y=X[X.length-1];return{sessions:X,nextCursor:j$({version:1,kind:"local",cwd:$.cwd,includeSubagents:$.includeSubagents,archived:$.archived,lastMessageTime:Y.lastMessageTime,projectPath:Y.projectPath,sessionId:Y.sessionId})}}function s_(T,$){let _=[...T],G=q$($);if(G)_=_.filter((Q)=>b$(Q,{sessionId:G.sessionId,projectPath:Q.projectPath,lastMessageTime:G.lastMessageTime,workspaceIdentity:G.workspaceIdentity})>0);let X=_.slice(0,$.limit);if(X.length===0||_.length<=X.length)return{sessions:X};let Y=X[X.length-1];return{sessions:X,nextCursor:k$({version:1,kind:"remote",exactIdentity:$.exactIdentity,includeSubagents:$.includeSubagents,archived:$.archived,lastMessageTime:Y.lastMessageTime,workspaceIdentity:Y.workspaceIdentity,sessionId:Y.sessionId})}}function S$(T){return T.type==="message_created"||T.type==="token_budget_handoff_recorded"||T.type==="part_created"||T.type==="part_updated"||T.type==="turn_started"||T.type==="turn_completed"||T.type==="turn_aborted"||T.type==="turn_recovery_acknowledged"||T.type==="interaction_requested"||T.type==="interaction_responded"||T.type==="interaction_recovered"||T.type==="review_started"||T.type==="review_completed"}function H0(T){return T.type==="message_created"&&T.data.role==="user"&&(T.data.inboxMessageId!==void 0||T.data.parentMessageId===void 0)}function O0(T,$){let _=T.find((G)=>H0(G)&&G.data.messageId===$);if(!_)throw Error(`Rewind checkpoint not found: ${$}`);return{messageId:$,preview:YT(T,$),createdAt:_.data.createdAt}}function YT(T,$){let _=T.flatMap((G)=>{if(G.type!=="part_created"||G.data.messageId!==$)return[];if(G.data.partType==="text"){let X=G.data.payload;return typeof X.text==="string"?[X.text]:[]}if(G.data.partType==="image")return["[Image]"];return[]}).join("").trim();if(_.length<=160)return _;return`${_.slice(0,160)}...`}function QT(T,$){O0(T,$);let _=T.findIndex((Q)=>Q.type==="message_created"&&Q.data.messageId===$),G=T[_],X=G?.type==="message_created"?G.data.inboxMessageId:void 0,Y=new Set(T.flatMap((Q)=>Q.type==="turn_started"&&X&&Q.data.inputMessageIds?.includes(X)?[Q.data.turnId]:[]));return T.filter((Q,Z)=>{if((Q.type==="turn_started"||Q.type==="turn_completed"||Q.type==="turn_aborted"||Q.type==="turn_recovery_acknowledged")&&Y.has(Q.data.turnId))return!1;return Z<_||!S$(Q)})}function u(T){let $=[];for(let _ of T){if(_.type!=="session_rewound"){$.push(_);continue}if(O0($,_.data.targetMessageId),_.data.mode!=="code")$=QT($,_.data.targetMessageId)}return $}function t_(T){let $=u(T);return $.filter(H0).map((_)=>({messageId:_.data.messageId,preview:YT($,_.data.messageId),createdAt:_.data.createdAt})).reverse()}function o_(T,$){let _=u(T),G=O0(_,$),X=_.findIndex((Q)=>Q.type==="message_created"&&Q.data.messageId===$),Y=_.slice(X);return{checkpoint:G,projectedEntries:QT(_,$),removedTurns:Y.filter(H0).length,snapshotMessageIds:Y.flatMap((Q)=>Q.type==="part_created"&&Q.data.partType==="tool_call"?[Q.data.partId]:[])}}import{createHash as i$}from"node:crypto";var e_={clientVisible:!1};function ZT(T){if(T.metadata&&typeof T.metadata==="object"&&!Array.isArray(T.metadata)&&T.metadata.clientVisible===!1)return!1;return!(T.role==="user"&&typeof T.content==="string"&&T.content.startsWith("This turn made a non-trivial implementation. Before finishing, call Task ")&&T.content.endsWith("Only a fresh structured PASS verdict allows completion."))}import{StringDecoder as y$}from"node:string_decoder";var $1=1048576;function M0(T,$){let _=$;while(_<T.length&&(T[_]&192)===128)_+=1;return _}class C0{maxBytes;chunks=[];retainedBytes=0;omittedBytes=0;totalBytes=0;constructor(T=1048576){this.maxBytes=T;if(!Number.isSafeInteger(T)||T<=0)throw Error("maxBytes must be a positive safe integer")}append(T){let $=Buffer.isBuffer(T)?T:Buffer.from(T);if($.length===0)return;if(this.totalBytes+=$.length,$.length>this.maxBytes){this.retainOversizedChunkTail($);return}this.chunks.push($),this.retainedBytes+=$.length,this.trimToLimit(),this.compactChunks()}peek(){return{content:Buffer.concat(this.chunks,this.retainedBytes).toString("utf8"),retainedBytes:this.retainedBytes,omittedBytes:this.omittedBytes,totalBytes:this.totalBytes}}consume(){let T=this.peek();return this.chunks.length=0,this.retainedBytes=0,this.omittedBytes=0,T}retainedChunkCountForTests(){return this.chunks.length}retainOversizedChunkTail(T){this.omittedBytes+=this.retainedBytes,this.chunks.length=0,this.retainedBytes=0;let $=M0(T,T.length-this.maxBytes);if(this.omittedBytes+=$,$===T.length)return;let _=Buffer.from(T.subarray($));this.chunks.push(_),this.retainedBytes=_.length}trimToLimit(){let T=!1;while(this.retainedBytes>this.maxBytes){let $=this.chunks[0];if(!$)return;let _=this.retainedBytes-this.maxBytes;if($.length<=_){this.chunks.shift(),this.retainedBytes-=$.length,this.omittedBytes+=$.length,T=!0;continue}let G=M0($,_);this.chunks[0]=$.subarray(G),this.retainedBytes-=G,this.omittedBytes+=G,T=!0}if(T)this.realignRetainedStart()}realignRetainedStart(){while(this.chunks.length>0){let T=this.chunks[0];if(T.length===0){this.chunks.shift();continue}let $=M0(T,0);if($===0)return;if(this.retainedBytes-=$,this.omittedBytes+=$,$===T.length)this.chunks.shift();else{this.chunks[0]=T.subarray($);return}}}compactChunks(){if(this.chunks.length<=32)return;let T=Buffer.concat(this.chunks,this.retainedBytes);if(this.chunks.length=0,T.length>0)this.chunks.push(T)}}var r={maxLines:30,maxChars:3000,keepHead:10,keepTail:10,summarize:!0},R={maxLines:100,maxChars:1e4,keepHead:40,keepTail:40,summarize:!0},UT={maxLines:200,maxChars:20000,keepHead:80,keepTail:80,summarize:!1},f$={maxLines:150,maxChars:15000,keepHead:50,keepTail:50,summarize:!0},R$=[{pattern:/^git\s+(rm|add)\s+(-r|--cached|-rf|-f)?\s*/i,config:r,summaryTemplate:(T)=>`Successfully processed ${T} files`},{pattern:/^(npm|pnpm|yarn|bun)\s+(install|i|add|remove|uninstall)/i,config:r,summaryTemplate:(T)=>`Package operation completed (${T} lines of output)`},{pattern:/^(npm|pnpm|yarn|bun)\s+(run|exec)\s+(build|compile|bundle)/i,config:R,summaryTemplate:(T)=>`Build completed (${T} lines of output)`},{pattern:/^(npm|pnpm|yarn|bun)\s+(run|exec)\s+(test|lint|check)/i,config:UT},{pattern:/^git\s+(status|branch|remote)/i,config:R},{pattern:/^git\s+(log|diff|show)/i,config:UT},{pattern:/^(ls|dir|tree)\s+/i,config:R,summaryTemplate:(T)=>`Listed ${T} items`},{pattern:/^find\s+/i,config:R,summaryTemplate:(T)=>`Found ${T} matches`},{pattern:/^(grep|rg|ag)\s+/i,config:R,summaryTemplate:(T)=>`Found ${T} matching lines`},{pattern:/^(docker|podman)\s+(build|pull|push)/i,config:r,summaryTemplate:(T)=>`Docker operation completed (${T} lines)`},{pattern:/^(pip|pip3|poetry|pipenv)\s+(install|uninstall)/i,config:r,summaryTemplate:(T)=>`Python package operation completed (${T} lines)`},{pattern:/^(cargo|rustup)\s+(build|install|update)/i,config:R,summaryTemplate:(T)=>`Rust operation completed (${T} lines)`},{pattern:/^(go)\s+(build|get|mod)/i,config:R,summaryTemplate:(T)=>`Go operation completed (${T} lines)`}];function VT(T,$,_){let G=$,X=_??T.length;if(G>0){let Y=T.charCodeAt(G);if(Y>=56320&&Y<=57343)G+=1}if(X<T.length){let Y=T.charCodeAt(X-1);if(Y>=55296&&Y<=56319)X-=1}return T.slice(G,X)}class F0{static getConfigForCommand(T){for(let{pattern:$,config:_,summaryTemplate:G}of R$)if($.test(T))return{config:_,summaryTemplate:G};return{config:f$}}static truncate(T,$){let{config:_,summaryTemplate:G}=this.getConfigForCommand($);return this.truncateWithConfig(T,_,G)}static truncateWithConfig(T,$,_){let G=T.length,X=T.split(`
3
3
  `),Y=X.length;if(Y<=$.maxLines&&G<=$.maxChars)return{content:T,truncated:!1,originalLines:Y,originalChars:G};let Q=X.slice(0,$.keepHead),Z=X.slice(-$.keepTail),U=Y-$.keepHead-$.keepTail,V=Q.join(`
4
4
  `);if(V+=`
@@ -335,4 +335,4 @@ ranked_archive AS (
335
335
  ORDER BY timestamp DESC LIMIT ?`:`SELECT session_id, role, timestamp, text FROM parts_fts
336
336
  WHERE parts_fts MATCH ? AND source_kind = 'local'
337
337
  ORDER BY timestamp DESC LIMIT ?`,Z=T.prepare(Q);return _?Z.all(Y,_,G):Z.all(Y,G)}
338
- export{d0 as fe,u as ge,t_ as he,o_ as ie,d as je,j as ke,v as le,E$ as me,q$ as ne,n_ as oe,i_ as pe,c_ as qe,w$ as re,b$ as se,d_ as te,s_ as ue,e_ as ve,ZT as we,$1 as xe,C0 as ye,F0 as ze,U1 as Ae,V1 as Be,B1 as Ce,CT as De,FT as Ee,J0 as Fe,KT as Ge,y1 as He,h1 as Ie,P1 as Je,vT as Ke,K_ as Le,W_ as Me,pT as Ne,DT as Oe,w_ as Pe,m1 as Qe,b_ as Re,v1 as Se,u1 as Te,p1 as Ue,f_ as Ve,l1 as We,n1 as Xe,i1 as Ye};
338
+ export{d0 as ie,u as je,t_ as ke,o_ as le,d as me,j as ne,v as oe,E$ as pe,q$ as qe,n_ as re,i_ as se,c_ as te,w$ as ue,b$ as ve,d_ as we,s_ as xe,e_ as ye,ZT as ze,$1 as Ae,C0 as Be,F0 as Ce,U1 as De,V1 as Ee,B1 as Fe,CT as Ge,FT as He,J0 as Ie,KT as Je,y1 as Ke,h1 as Le,P1 as Me,vT as Ne,K_ as Oe,W_ as Pe,pT as Qe,DT as Re,w_ as Se,m1 as Te,b_ as Ue,v1 as Ve,u1 as We,p1 as Xe,f_ as Ye,l1 as Ze,n1 as _e,i1 as $e};
@@ -1,2 +1,2 @@
1
- import{wj as b,xj as k,zj as w}from"./chunk-vp6d1fqp.js";function g(j){return b.Object(j,{additionalProperties:!1})}var W=b.String({pattern:"^acp-remote-workspace:[A-Za-z0-9_-]{43}$"}),I=b.Optional(b.Integer({minimum:1,maximum:100})),x=b.String({minLength:1,maxLength:200,pattern:"^[A-Za-z0-9_-][A-Za-z0-9._-]{0,199}$"}),A=k(b.Union([g({version:b.Literal(2),sessionId:x,workspace:g({kind:b.Literal("local"),projectPath:b.String({minLength:1})})}),g({version:b.Literal(2),sessionId:x,workspace:g({kind:b.Literal("acp-remote"),workspaceRef:W})})])),C=k(w(["history-only","owner-offline","owner-mismatch","archived","surface-not-supported","capability-not-advertised"])),X=k(g({connection:w(["local","online","offline"]),history:g({read:b.Boolean(),fork:b.Boolean()}),turn:g({start:b.Boolean(),reason:b.Optional(C)}),files:g({readText:b.Boolean(),writeText:b.Boolean(),browse:w(["none","known-files","tree"]),reason:b.Optional(C)}),terminal:g({mode:w(["none","command","interactive"]),owner:w(["none","local","acp-remote"]),reason:b.Optional(C)})})),Y=k(g({id:b.String({pattern:"^surface-message:[0-9]+:.+$"}),role:w(["user","assistant"]),content:b.String(),timestamp:b.String({minLength:1}),truncated:b.Optional(b.Boolean())})),Z=w(["queued","running","completed","failed","cancelled","interrupted"]),_=w(["posix","win32"]),$=w(["subagent","fork"]),D=b.String({minLength:1}),J=b.String({minLength:1}),z=40,H=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,9}))?(Z|[+-](\d{2}):(\d{2}))$/,M="^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}Z$";function T(j){return j%4===0&&(j%100!==0||j%400===0)}function R(j,q){if(q===2)return T(j)?29:28;return[4,6,9,11].includes(q)?30:31}function d(j){if(j===void 0||j.length<20||j.length>z)return;let q=H.exec(j);if(!q)return;let L=Number(q[1]),B=Number(q[2]),E=Number(q[3]),N=Number(q[4]),O=Number(q[5]),P=Number(q[6]),Q=q[8],U=Number(q[9]),V=Number(q[10]);if(B<1||B>12||E<1||E>R(L,B)||N>23||O>59||P>59||Q!=="Z"&&(U>23||V>59))return;let F=Date.parse(j);if(!Number.isFinite(F))return;let G=new Date(F).toISOString();return G.length===24?G:void 0}var S=b.Refine(b.String({minLength:24,maxLength:24,pattern:M}),(j)=>d(j)===j,()=>"must be a canonical ISO instant"),K=k(g({locator:A,displayCwd:b.String({minLength:1}),pathStyle:b.Optional(_),title:b.Optional(b.String()),rootId:x,parentId:b.Optional(x),relationType:b.Optional($),taskStatus:Z,taskCompletedAt:b.Optional(S),messageCount:b.Integer({minimum:0}),firstMessageTime:b.String({minLength:1}),lastMessageTime:b.String({minLength:1}),hasErrors:b.Boolean(),archivedAt:b.Optional(b.String({minLength:1})),selectedModelId:b.Optional(b.String({minLength:1})),capabilities:X})),p=k(w(["invalid_session_surface_request","invalid_session_locator","session_surface_not_found","workspace_binding_mismatch","session_surface_cursor_invalid","session_surface_snapshot_changed","session_surface_read_only","session_surface_capability_unavailable","session_surface_capacity","session_surface_unavailable","session_surface_state_invalid"])),i=k(g({error:g({code:p,message:b.String({minLength:1}),retryable:b.Boolean()})})),s=k(g({sessions:b.Array(K),nextCursor:b.Optional(D)})),f=k(g({messages:b.Array(Y),olderCursor:b.Optional(D),snapshot:J,truncated:b.Boolean()})),v=k(g({locator:A,limit:I})),l=k(g({session:K,history:f})),r=k(g({locator:A,cursor:D,expectedSnapshot:J,limit:I})),n=k(g({locator:A}));
2
- export{A as Ze,Y as _e,d as $e,K as af,i as bf,s as cf,f as df,v as ef,l as ff,r as gf,n as hf};
1
+ import{Aj as k,Cj as w,zj as b}from"./chunk-ft1bdqbs.js";function g(j){return b.Object(j,{additionalProperties:!1})}var W=b.String({pattern:"^acp-remote-workspace:[A-Za-z0-9_-]{43}$"}),I=b.Optional(b.Integer({minimum:1,maximum:100})),x=b.String({minLength:1,maxLength:200,pattern:"^[A-Za-z0-9_-][A-Za-z0-9._-]{0,199}$"}),A=k(b.Union([g({version:b.Literal(2),sessionId:x,workspace:g({kind:b.Literal("local"),projectPath:b.String({minLength:1})})}),g({version:b.Literal(2),sessionId:x,workspace:g({kind:b.Literal("acp-remote"),workspaceRef:W})})])),C=k(w(["history-only","owner-offline","owner-mismatch","archived","surface-not-supported","capability-not-advertised"])),X=k(g({connection:w(["local","online","offline"]),history:g({read:b.Boolean(),fork:b.Boolean()}),turn:g({start:b.Boolean(),reason:b.Optional(C)}),files:g({readText:b.Boolean(),writeText:b.Boolean(),browse:w(["none","known-files","tree"]),reason:b.Optional(C)}),terminal:g({mode:w(["none","command","interactive"]),owner:w(["none","local","acp-remote"]),reason:b.Optional(C)})})),Y=k(g({id:b.String({pattern:"^surface-message:[0-9]+:.+$"}),role:w(["user","assistant"]),content:b.String(),timestamp:b.String({minLength:1}),truncated:b.Optional(b.Boolean())})),Z=w(["queued","running","completed","failed","cancelled","interrupted"]),_=w(["posix","win32"]),$=w(["subagent","fork"]),D=b.String({minLength:1}),J=b.String({minLength:1}),z=40,H=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,9}))?(Z|[+-](\d{2}):(\d{2}))$/,M="^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}Z$";function T(j){return j%4===0&&(j%100!==0||j%400===0)}function R(j,q){if(q===2)return T(j)?29:28;return[4,6,9,11].includes(q)?30:31}function d(j){if(j===void 0||j.length<20||j.length>z)return;let q=H.exec(j);if(!q)return;let L=Number(q[1]),B=Number(q[2]),E=Number(q[3]),N=Number(q[4]),O=Number(q[5]),P=Number(q[6]),Q=q[8],U=Number(q[9]),V=Number(q[10]);if(B<1||B>12||E<1||E>R(L,B)||N>23||O>59||P>59||Q!=="Z"&&(U>23||V>59))return;let F=Date.parse(j);if(!Number.isFinite(F))return;let G=new Date(F).toISOString();return G.length===24?G:void 0}var S=b.Refine(b.String({minLength:24,maxLength:24,pattern:M}),(j)=>d(j)===j,()=>"must be a canonical ISO instant"),K=k(g({locator:A,displayCwd:b.String({minLength:1}),pathStyle:b.Optional(_),title:b.Optional(b.String()),rootId:x,parentId:b.Optional(x),relationType:b.Optional($),taskStatus:Z,taskCompletedAt:b.Optional(S),messageCount:b.Integer({minimum:0}),firstMessageTime:b.String({minLength:1}),lastMessageTime:b.String({minLength:1}),hasErrors:b.Boolean(),archivedAt:b.Optional(b.String({minLength:1})),selectedModelId:b.Optional(b.String({minLength:1})),capabilities:X})),p=k(w(["invalid_session_surface_request","invalid_session_locator","session_surface_not_found","workspace_binding_mismatch","session_surface_cursor_invalid","session_surface_snapshot_changed","session_surface_read_only","session_surface_capability_unavailable","session_surface_capacity","session_surface_unavailable","session_surface_state_invalid"])),i=k(g({error:g({code:p,message:b.String({minLength:1}),retryable:b.Boolean()})})),s=k(g({sessions:b.Array(K),nextCursor:b.Optional(D)})),f=k(g({messages:b.Array(Y),olderCursor:b.Optional(D),snapshot:J,truncated:b.Boolean()})),v=k(g({locator:A,limit:I})),l=k(g({session:K,history:f})),r=k(g({locator:A,cursor:D,expectedSnapshot:J,limit:I})),n=k(g({locator:A}));
2
+ export{A as af,Y as bf,d as cf,K as df,i as ef,s as ff,f as gf,v as hf,l as if,r as jf,n as kf};
@@ -1,2 +1,2 @@
1
1
  function v(b){switch(b){case"default":case"ignore":case void 0:return"default";case"acceptEdits":return"autoEdit";case"dontAsk":case"bypassPermissions":return"yolo";case"plan":return"plan";default:return"default"}}
2
- export{v as lh};
2
+ export{v as oh};
@@ -1,4 +1,4 @@
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(`
1
+ import{da as p}from"./chunk-1h3736q2.js";import{Kb as _}from"./chunk-recafw5r.js";import{Id as q,be as O,td as N,ud as U,vd as I,wd as A,xd as z}from"./chunk-cefmcwyv.js";import{ne as o}from"./chunk-a5hkv8er.js";import{Zf as P}from"./chunk-5j68055h.js";import{yg as e}from"./chunk-f4cn6v8t.js";import{uk as j}from"./chunk-t88sfhjj.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,2 +1,2 @@
1
- import{wj as b,xj as K,zj as j}from"./chunk-vp6d1fqp.js";var L=256,Z=128,p=1e6,$=86400000,G=8640000000000000,g=b.Integer({minimum:0,maximum:p}),f=b.Integer({minimum:0,maximum:$}),q=b.Integer({minimum:0,maximum:G}),x=b.String({minLength:1,maxLength:L,pattern:"^(?!.*://)[^\x00-\x1F]+$"}),H=j(["capacity","queue_full","wait_timeout","admission_closed","rate_limit","server_error","timeout","transport","stream_closed","circuit_open","stream_stall"]),U=j(["admission_wait","retry_wait","retry_attempt","circuit_open","circuit_probe","stream_stall","fallback"]),F=b.Object({provider:x,model:x},{additionalProperties:!1}),J=j(["rate_limit","server_error","timeout","transport","stream_closed"]),s=b.Union([b.Object({source:b.Literal("retry"),reason:J,statusCode:b.Optional(b.Integer({minimum:100,maximum:999}))},{additionalProperties:!1}),b.Object({source:b.Literal("circuit"),reason:J,statusCode:b.Optional(b.Integer({minimum:100,maximum:999}))},{additionalProperties:!1}),b.Object({source:b.Literal("admission"),reason:j(["queue_full","wait_timeout","closed"])},{additionalProperties:!1}),b.Object({source:b.Literal("stall"),reason:b.Literal("timeout")},{additionalProperties:!1})]),T=b.Object({from:F,to:F,candidate:b.Integer({minimum:1,maximum:p}),candidateCount:b.Integer({minimum:1,maximum:p}),trigger:s},{additionalProperties:!1}),X=b.Object({attempt:g,maxRetries:g,statusCode:b.Optional(b.Integer({minimum:100,maximum:999})),delayMs:b.Optional(f),recoveryBudgetMs:b.Optional(f),recoveryElapsedMs:b.Optional(f),recoveryRemainingMs:b.Optional(f)},{additionalProperties:!1}),Y=b.Object({requestClass:j(["foreground","background","internal"]),scope:j(["global","domain","owner","class"]),resource:j(["stream","pending_count","pending_bytes"]),queuePosition:g,queueDepth:g,inFlight:g,limit:g,waitMs:f,maxWaitMs:f,recoveryRemainingMs:b.Optional(f)},{additionalProperties:!1}),z=b.Object({phase:j(["opened","reopened","waiting","probe","rejected"]),statusCode:b.Optional(b.Integer({minimum:100,maximum:999})),retryAfterMs:b.Optional(f),nextProbeAt:b.Optional(q),openDurationMs:f,sampleCount:b.Optional(g),failureCount:b.Optional(g),recoveryRemainingMs:b.Optional(f)},{additionalProperties:!1}),C=b.Object({stallCount:g,durationMs:f,warningAfterMs:f,timeoutMs:f,outputStarted:b.Boolean()},{additionalProperties:!1}),I=b.Object({activity:U,reason:H,updatedAt:q,nextActionAt:b.Optional(q),retry:b.Optional(X),admission:b.Optional(Y),circuit:b.Optional(z),stall:b.Optional(C),fallback:b.Optional(T)},{additionalProperties:!1}),N=K(b.Object({version:b.Literal(1),generation:b.String({minLength:1,maxLength:Z,pattern:"^[^\x00-\x1F]+$"}),revision:g,snapshot:b.Union([I,b.Null()])},{additionalProperties:!1}));function V(Q){let k=[...Q].filter((W)=>{let w=W.codePointAt(0)??0;return w>31&&w!==127}).join("").trim().slice(0,L);if(!k)throw Error("Provider recovery identity is empty");if(k.includes("://"))throw Error("Provider recovery identity cannot be a URL");return k}
2
- export{N as hg,V as ig};
1
+ import{Aj as K,Cj as j,zj as b}from"./chunk-ft1bdqbs.js";var L=256,Z=128,p=1e6,$=86400000,G=8640000000000000,g=b.Integer({minimum:0,maximum:p}),f=b.Integer({minimum:0,maximum:$}),q=b.Integer({minimum:0,maximum:G}),x=b.String({minLength:1,maxLength:L,pattern:"^(?!.*://)[^\x00-\x1F]+$"}),H=j(["capacity","queue_full","wait_timeout","admission_closed","rate_limit","server_error","timeout","transport","stream_closed","circuit_open","stream_stall"]),U=j(["admission_wait","retry_wait","retry_attempt","circuit_open","circuit_probe","stream_stall","fallback"]),F=b.Object({provider:x,model:x},{additionalProperties:!1}),J=j(["rate_limit","server_error","timeout","transport","stream_closed"]),s=b.Union([b.Object({source:b.Literal("retry"),reason:J,statusCode:b.Optional(b.Integer({minimum:100,maximum:999}))},{additionalProperties:!1}),b.Object({source:b.Literal("circuit"),reason:J,statusCode:b.Optional(b.Integer({minimum:100,maximum:999}))},{additionalProperties:!1}),b.Object({source:b.Literal("admission"),reason:j(["queue_full","wait_timeout","closed"])},{additionalProperties:!1}),b.Object({source:b.Literal("stall"),reason:b.Literal("timeout")},{additionalProperties:!1})]),T=b.Object({from:F,to:F,candidate:b.Integer({minimum:1,maximum:p}),candidateCount:b.Integer({minimum:1,maximum:p}),trigger:s},{additionalProperties:!1}),X=b.Object({attempt:g,maxRetries:g,statusCode:b.Optional(b.Integer({minimum:100,maximum:999})),delayMs:b.Optional(f),recoveryBudgetMs:b.Optional(f),recoveryElapsedMs:b.Optional(f),recoveryRemainingMs:b.Optional(f)},{additionalProperties:!1}),Y=b.Object({requestClass:j(["foreground","background","internal"]),scope:j(["global","domain","owner","class"]),resource:j(["stream","pending_count","pending_bytes"]),queuePosition:g,queueDepth:g,inFlight:g,limit:g,waitMs:f,maxWaitMs:f,recoveryRemainingMs:b.Optional(f)},{additionalProperties:!1}),z=b.Object({phase:j(["opened","reopened","waiting","probe","rejected"]),statusCode:b.Optional(b.Integer({minimum:100,maximum:999})),retryAfterMs:b.Optional(f),nextProbeAt:b.Optional(q),openDurationMs:f,sampleCount:b.Optional(g),failureCount:b.Optional(g),recoveryRemainingMs:b.Optional(f)},{additionalProperties:!1}),C=b.Object({stallCount:g,durationMs:f,warningAfterMs:f,timeoutMs:f,outputStarted:b.Boolean()},{additionalProperties:!1}),I=b.Object({activity:U,reason:H,updatedAt:q,nextActionAt:b.Optional(q),retry:b.Optional(X),admission:b.Optional(Y),circuit:b.Optional(z),stall:b.Optional(C),fallback:b.Optional(T)},{additionalProperties:!1}),N=K(b.Object({version:b.Literal(1),generation:b.String({minLength:1,maxLength:Z,pattern:"^[^\x00-\x1F]+$"}),revision:g,snapshot:b.Union([I,b.Null()])},{additionalProperties:!1}));function V(Q){let k=[...Q].filter((W)=>{let w=W.codePointAt(0)??0;return w>31&&w!==127}).join("").trim().slice(0,L);if(!k)throw Error("Provider recovery identity is empty");if(k.includes("://"))throw Error("Provider recovery identity cannot be a URL");return k}
2
+ export{N as kg,V as lg};
@@ -1,4 +1,4 @@
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)}
1
+ import{Ge as r2,He as C0,Oe as l_,Qe as N1,Se as o2,Te as a2,Ue as q1,Ve as t2,ie as h2,je as e,ke as l2,le as Z1,me as c2,ne as m,oe as G1,pe as p2,qe as n2,re as V1,se as L1,te as d2,ue as H1,ve as A0,we as U1,xe as B1,ze as i2}from"./chunk-a5hkv8er.js";import{pg as i_}from"./chunk-d64b7wta.js";import{jh as r_}from"./chunk-rhwkvx96.js";import{Ni as P2,Oi as u2,Pi as w_,Qi as Q0,Ri as R_}from"./chunk-mc2mr1kn.js";import{Vi as f1}from"./chunk-dv2m2xe5.js";import{vj as B0}from"./chunk-ft1bdqbs.js";import{Ij as n_,Lj as d_}from"./chunk-65c3vjwm.js";import{Pj as __}from"./chunk-mtfjwsn2.js";import{Ak as b1,Bk as q_,Zj as h,hk as o,ik as p,jk as I2,kk as n,lk as d,mk as m2,nk as K0,ok as Y1,pk as v2,qk as K_,rk as M0,sk as h_,tk as A,uk as P,vk as S,wk as E1,xk as F1,yk as M_,zk as z1}from"./chunk-t88sfhjj.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 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};
94
+ export{cX as rc,pX as sc,nX as tc,U_ as uc,dX as vc,m0 as wc,a0 as xc,D1 as yc,X0 as zc,w1 as Ac,tX as Bc,B_ as Cc,u as Dc,k4 as Ec,S1 as Fc,O_ as Gc,M$ as Hc,A$ as Ic,E$ as Jc,F$ as Kc,z$ as Lc,D$ as Mc,R$ as Nc,w$ as Oc,x$ as Pc,k$ as Qc,b$ as Rc,f$ as Sc,j$ as Tc,y$ as Uc,g$ as Vc,S$ as Wc,I$ as Xc,m$ as Yc,v$ as Zc,P$ as _c,u$ as $c,h$ as ad,l$ as bd,c$ as cd,p$ as dd,n$ as ed,d$ as fd,i$ as gd,r$ as hd,o$ as id,a$ as jd,t$ as kd,n1 as ld,h4 as md,P0 as nd,r1 as od,WW as pd,OW as qd,t1 as rd,YW as sd,L0 as td,GW as ud,h0 as vd,e1 as wd,_2 as xd,HW as yd,UW as zd,BW as Ad,e4 as Bd,O2 as Cd,J2 as Dd,_X as Ed,NW as Fd,x_ as Gd,r0 as Hd,o0 as Id,N_ as Jd,N0 as Kd,bW as Ld,fW as Md,jW as Nd,yW as Od,L2 as Pd,gW as Qd,uW as Rd,F2 as Sd,q2 as Td,pW as Ud,z2 as Vd,nW as Wd,gX as Xd,zO as Yd,DO as Zd,_4 as _d,t as $d,Q_ as ae,q as be};
@@ -1,2 +1,2 @@
1
1
  import{clampThinkingLevel as t,getSupportedThinkingLevels as i}from"@earendil-works/pi-ai";var f=["auto","off","minimal","low","medium","high","xhigh","max"];function s(e){return typeof e==="string"&&f.includes(e)}function g(e,o){let n=i(e);if(o!=="auto"&&!n.includes(o))throw Error(`Reasoning effort ${o} is not supported by ${e.name}`);return{selection:o,effective:o==="auto"?t(e,"high"):o,supported:n}}
2
- export{s as mg,g as ng};
2
+ export{s as pg,g as qg};
@@ -1,2 +1,2 @@
1
1
  import{realpathSync as z}from"fs";import{cwd as F}from"process";var u=null;function G(){let m="";if(typeof process<"u"&&typeof process.cwd==="function"&&typeof z==="function"){let x=F();try{m=z(x).normalize("NFC")}catch{m=x.normalize("NFC")}}return{cwd:m,originalCwd:m,projectRoot:m}}function q(){if(!u)u=G();return u}function B(){return q().cwd}function N(m){q().cwd=m.normalize("NFC")}function D(){return q().originalCwd}function P(m){q().projectRoot=m.normalize("NFC")}import{AsyncLocalStorage as H}from"async_hooks";var I=new H;function J(){return I.getStore()??B()}function V(){try{return J()}catch{return D()}}
2
- export{N as Pi,D as Qi,P as Ri,V as Si};
2
+ export{N as Si,D as Ti,P as Ui,V as Vi};
@@ -1,2 +1,2 @@
1
- import{Mj as d,Oj as h}from"./chunk-g9vdmvk2.js";var q={debug:{alias:"d",type:"string",describe:'Enable debug mode with optional category filtering (e.g., "agent,ui" or "!chat,!loop")',group:"Debug Options:"},model:{type:"string",describe:"Override the current run model using a model config ID (TUI / print / headless)",group:"AI Options:"},print:{alias:"p",type:"boolean",describe:"Print response and exit (useful for pipes)",group:"Output Options:"},headless:{type:"boolean",describe:"Run full agent loop without Ink UI and print all events to the terminal",group:"Output Options:"},"output-format":{alias:["outputFormat"],type:"string",choices:["text","json","stream-json","jsonl"],default:"text",describe:"Output format: --print supports text|json|stream-json; --headless supports text|jsonl",group:"Output Options:"},"json-schema":{alias:["jsonSchema"],type:"string",describe:"Inline JSON Schema for the turn-scoped structured final response",group:"Output Options:"},"output-schema":{alias:["outputSchema"],type:"string",describe:"Path to a JSON Schema file for the structured final response",group:"Output Options:"},"include-partial-messages":{alias:["includePartialMessages"],type:"boolean",describe:"Include partial message chunks as they arrive",group:"Output Options:"},"input-format":{alias:["inputFormat"],type:"string",choices:["text","stream-json"],default:"text",describe:"Input format",group:"Input Options:"},"replay-user-messages":{alias:["replayUserMessages"],type:"boolean",describe:"Re-emit user messages from stdin",group:"Input Options:"},"allowed-tools":{alias:["allowedTools"],type:"array",string:!0,describe:"Comma or space-separated list of tool names to allow",group:"Security Options:"},"disallowed-tools":{alias:["disallowedTools"],type:"array",string:!0,describe:"Comma or space-separated list of tool names to deny",group:"Security Options:"},"mcp-config":{alias:["mcpConfig"],type:"array",string:!0,describe:"Load MCP servers from JSON files or strings",group:"MCP Options:"},"system-prompt":{alias:["systemPrompt"],type:"string",describe:"System prompt to use for the session (replaces default)",group:"AI Options:"},"append-system-prompt":{alias:["appendSystemPrompt"],type:"string",describe:"Append a system prompt to the default system prompt",group:"AI Options:"},"max-turns":{alias:["maxTurns"],type:"number",describe:"Maximum conversation turns (-1: unlimited, 0: disable chat, N>0: limit to N turns)",group:"AI Options:",default:void 0},"max-concurrent-tasks":{alias:["maxConcurrentTasks"],type:"number",describe:"Maximum top-level tasks running concurrently in this process",group:"AI Options:",default:void 0},"max-queued-tasks":{alias:["maxQueuedTasks"],type:"number",describe:"Maximum top-level tasks waiting for an admission slot",group:"AI Options:",default:void 0},"max-queued-task-bytes":{alias:["maxQueuedTaskBytes"],type:"number",describe:"Maximum retained bytes across queued top-level tasks",group:"AI Options:",default:void 0},"max-resident-session-runtimes":{alias:["maxResidentSessionRuntimes"],type:"number",describe:"Maximum initialized Session runtimes resident in this process",group:"AI Options:",default:void 0},"session-runtime-idle-ms":{alias:["sessionRuntimeIdleMs"],type:"number",describe:"Idle time before an evictable Web Session runtime is evicted",group:"AI Options:",default:void 0},"max-resident-session-projections":{alias:["maxResidentSessionProjections"],type:"number",describe:"Maximum resident Session projections retained in this process",group:"AI Options:",default:void 0},"session-projection-idle-ms":{alias:["sessionProjectionIdleMs"],type:"number",describe:"Idle time before an evictable Session projection is evicted",group:"AI Options:",default:void 0},"permission-mode":{alias:["permissionMode"],type:"string",choices:["default","autoEdit","yolo","plan"],describe:"Permission mode (default: ask for non-read tools, autoEdit: auto-approve edits, yolo: auto-approve all, plan: reserved)",group:"Security Options:"},yolo:{type:"boolean",describe:"Auto-approve all tools (shortcut for --permission-mode=yolo)",group:"Security Options:"},"trust-workspace":{alias:["trustWorkspace"],type:"boolean",describe:"Trust the current workspace before loading project models, MCP, LSP, permissions, or plugins",group:"Security Options:"},continue:{alias:"c",type:"boolean",describe:"Continue the most recent conversation",group:"Session Options:"},resume:{alias:"r",describe:"Resume a conversation - provide a session ID or interactively select a conversation to resume",group:"Session Options:",coerce:(b)=>{if(b===void 0||b===!0||b==="")return"true";return String(b)}},"fork-session":{alias:["forkSession"],type:"boolean",describe:"Create a new session ID when resuming",group:"Session Options:"},settings:{type:"string",describe:"Path to a settings JSON file or JSON string",group:"Configuration:"},"add-dir":{alias:["addDir"],type:"array",string:!0,describe:"Additional directories to allow tool access to",group:"Security Options:"},ide:{type:"boolean",describe:"Automatically connect to IDE on startup",group:"Integration:"},acp:{type:"boolean",describe:"Run in ACP (Agent Client Protocol) mode for IDE integration",group:"Integration:"},"strict-mcp-config":{alias:["strictMcpConfig"],type:"boolean",describe:"Only use MCP servers from --mcp-config",group:"MCP Options:"},"session-id":{alias:["sessionId"],type:"string",describe:"Use a specific session ID for the conversation",group:"Session Options:"},agents:{type:"string",describe:"JSON object defining custom agents",group:"AI Options:"},"setting-sources":{alias:["settingSources"],type:"string",describe:"Comma-separated list of setting sources to load",group:"Configuration:"},"plugin-dir":{alias:["pluginDir"],type:"array",string:!0,describe:"Load plugins from specified directories",group:"Plugin Options:"}},w={scriptName:"blade",usage:"$0 [command] [options]",description:h(),version:d(),locale:"en",showHelpOnFail:!0,demandCommand:!1,recommendCommands:!0,strict:!1};
2
- export{q as if,w as jf};
1
+ import{Pj as d,Rj as h}from"./chunk-mtfjwsn2.js";var q={debug:{alias:"d",type:"string",describe:'Enable debug mode with optional category filtering (e.g., "agent,ui" or "!chat,!loop")',group:"Debug Options:"},model:{type:"string",describe:"Override the current run model using a model config ID (TUI / print / headless)",group:"AI Options:"},print:{alias:"p",type:"boolean",describe:"Print response and exit (useful for pipes)",group:"Output Options:"},headless:{type:"boolean",describe:"Run full agent loop without Ink UI and print all events to the terminal",group:"Output Options:"},"output-format":{alias:["outputFormat"],type:"string",choices:["text","json","stream-json","jsonl"],default:"text",describe:"Output format: --print supports text|json|stream-json; --headless supports text|jsonl",group:"Output Options:"},"json-schema":{alias:["jsonSchema"],type:"string",describe:"Inline JSON Schema for the turn-scoped structured final response",group:"Output Options:"},"output-schema":{alias:["outputSchema"],type:"string",describe:"Path to a JSON Schema file for the structured final response",group:"Output Options:"},"include-partial-messages":{alias:["includePartialMessages"],type:"boolean",describe:"Include partial message chunks as they arrive",group:"Output Options:"},"input-format":{alias:["inputFormat"],type:"string",choices:["text","stream-json"],default:"text",describe:"Input format",group:"Input Options:"},"replay-user-messages":{alias:["replayUserMessages"],type:"boolean",describe:"Re-emit user messages from stdin",group:"Input Options:"},"allowed-tools":{alias:["allowedTools"],type:"array",string:!0,describe:"Comma or space-separated list of tool names to allow",group:"Security Options:"},"disallowed-tools":{alias:["disallowedTools"],type:"array",string:!0,describe:"Comma or space-separated list of tool names to deny",group:"Security Options:"},"mcp-config":{alias:["mcpConfig"],type:"array",string:!0,describe:"Load MCP servers from JSON files or strings",group:"MCP Options:"},"system-prompt":{alias:["systemPrompt"],type:"string",describe:"System prompt to use for the session (replaces default)",group:"AI Options:"},"append-system-prompt":{alias:["appendSystemPrompt"],type:"string",describe:"Append a system prompt to the default system prompt",group:"AI Options:"},"max-turns":{alias:["maxTurns"],type:"number",describe:"Maximum conversation turns (-1: unlimited, 0: disable chat, N>0: limit to N turns)",group:"AI Options:",default:void 0},"max-concurrent-tasks":{alias:["maxConcurrentTasks"],type:"number",describe:"Maximum top-level tasks running concurrently in this process",group:"AI Options:",default:void 0},"max-queued-tasks":{alias:["maxQueuedTasks"],type:"number",describe:"Maximum top-level tasks waiting for an admission slot",group:"AI Options:",default:void 0},"max-queued-task-bytes":{alias:["maxQueuedTaskBytes"],type:"number",describe:"Maximum retained bytes across queued top-level tasks",group:"AI Options:",default:void 0},"max-resident-session-runtimes":{alias:["maxResidentSessionRuntimes"],type:"number",describe:"Maximum initialized Session runtimes resident in this process",group:"AI Options:",default:void 0},"session-runtime-idle-ms":{alias:["sessionRuntimeIdleMs"],type:"number",describe:"Idle time before an evictable Web Session runtime is evicted",group:"AI Options:",default:void 0},"max-resident-session-projections":{alias:["maxResidentSessionProjections"],type:"number",describe:"Maximum resident Session projections retained in this process",group:"AI Options:",default:void 0},"session-projection-idle-ms":{alias:["sessionProjectionIdleMs"],type:"number",describe:"Idle time before an evictable Session projection is evicted",group:"AI Options:",default:void 0},"permission-mode":{alias:["permissionMode"],type:"string",choices:["default","autoEdit","yolo","plan"],describe:"Permission mode (default: ask for non-read tools, autoEdit: auto-approve edits, yolo: auto-approve all, plan: reserved)",group:"Security Options:"},yolo:{type:"boolean",describe:"Auto-approve all tools (shortcut for --permission-mode=yolo)",group:"Security Options:"},"trust-workspace":{alias:["trustWorkspace"],type:"boolean",describe:"Trust the current workspace before loading project models, MCP, LSP, permissions, or plugins",group:"Security Options:"},continue:{alias:"c",type:"boolean",describe:"Continue the most recent conversation",group:"Session Options:"},resume:{alias:"r",describe:"Resume a conversation - provide a session ID or interactively select a conversation to resume",group:"Session Options:",coerce:(b)=>{if(b===void 0||b===!0||b==="")return"true";return String(b)}},"fork-session":{alias:["forkSession"],type:"boolean",describe:"Create a new session ID when resuming",group:"Session Options:"},settings:{type:"string",describe:"Path to a settings JSON file or JSON string",group:"Configuration:"},"add-dir":{alias:["addDir"],type:"array",string:!0,describe:"Additional directories to allow tool access to",group:"Security Options:"},ide:{type:"boolean",describe:"Automatically connect to IDE on startup",group:"Integration:"},acp:{type:"boolean",describe:"Run in ACP (Agent Client Protocol) mode for IDE integration",group:"Integration:"},"strict-mcp-config":{alias:["strictMcpConfig"],type:"boolean",describe:"Only use MCP servers from --mcp-config",group:"MCP Options:"},"session-id":{alias:["sessionId"],type:"string",describe:"Use a specific session ID for the conversation",group:"Session Options:"},agents:{type:"string",describe:"JSON object defining custom agents",group:"AI Options:"},"setting-sources":{alias:["settingSources"],type:"string",describe:"Comma-separated list of setting sources to load",group:"Configuration:"},"plugin-dir":{alias:["pluginDir"],type:"array",string:!0,describe:"Load plugins from specified directories",group:"Plugin Options:"}},w={scriptName:"blade",usage:"$0 [command] [options]",description:h(),version:d(),locale:"en",showHelpOnFail:!0,demandCommand:!1,recommendCommands:!0,strict:!1};
2
+ export{q as lf,w as mf};
@@ -1,2 +1,2 @@
1
1
  import{promises as B}from"node:fs";import q from"node:path";import{LRUCache as H}from"lru-cache";var K=512,Z=new H({max:K});async function L(x){let b=x;while(!0){try{return await B.lstat(q.join(b,".git")),b}catch(V){if(V.code!=="ENOENT")return}let F=q.dirname(b);if(F===b)return;b=F}}async function M(x){let b=q.join(x,".git"),F=await B.lstat(b);if(F.isDirectory())return x;if(!F.isFile())return;let V=await B.readFile(b,"utf8"),J=/^gitdir:\s*(.+)\s*$/im.exec(V);if(!J)return;let Q=await B.realpath(q.isAbsolute(J[1])?J[1]:q.resolve(x,J[1])),Y=Q;try{let z=(await B.readFile(q.join(Q,"commondir"),"utf8")).trim();if(z)Y=await B.realpath(q.resolve(Q,z))}catch(z){if(z.code!=="ENOENT")throw z}return q.basename(Y)===".git"?B.realpath(q.dirname(Y)):void 0}async function N(x){if(!q.isAbsolute(x))throw Error("Workspace path must be absolute");let b=await B.realpath(x),F=Z.get(b);if(F)return F;let V=b;try{let Q=await L(b);if(Q){let Y=await M(Q),z=q.relative(Q,b);if(Y&&(z===""||!z.startsWith(`..${q.sep}`)&&z!==".."&&!q.isAbsolute(z))){let $=q.resolve(Y,z);V=await B.realpath($).catch(()=>$)}}}catch{}let J={projectPath:b,trustRoot:V};return Z.set(b,J),J}async function S(x){if(!q.isAbsolute(x))throw Error("Workspace path must be absolute");let b=await B.realpath(x);Z.delete(b)}
2
- export{N as Uj,S as Vj};
2
+ export{N as Xj,S as Yj};