@qt4798/pi-web 0.14.0 → 0.14.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +12 -12
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/required-server-files.js +1 -1
  5. package/.next/required-server-files.json +1 -1
  6. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  7. package/.next/server/app/_global-error.html +1 -1
  8. package/.next/server/app/_global-error.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  12. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/_not-found.html +1 -1
  14. package/.next/server/app/_not-found.rsc +1 -1
  15. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  16. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  18. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  19. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  20. package/.next/server/app/api/agent/[id]/route.js +1 -1
  21. package/.next/server/app/api/agent/new/route.js +1 -1
  22. package/.next/server/app/api/agent/running/events/route.js +2 -2
  23. package/.next/server/app/api/agent/running/route.js +1 -1
  24. package/.next/server/app/api/app-update/route.js +1 -1
  25. package/.next/server/app/api/cwd/validate/route.js +1 -1
  26. package/.next/server/app/api/default-cwd/route.js +1 -1
  27. package/.next/server/app/api/events/route.js +2 -2
  28. package/.next/server/app/api/file-index/route.js +1 -1
  29. package/.next/server/app/api/files/[...path]/route.js +1 -1
  30. package/.next/server/app/api/git/diff/route.js +1 -1
  31. package/.next/server/app/api/git/status/route.js +1 -1
  32. package/.next/server/app/api/import/execute/route.js +1 -1
  33. package/.next/server/app/api/import/status/route.js +1 -1
  34. package/.next/server/app/api/mcp/restart/route.js +1 -1
  35. package/.next/server/app/api/plugins/route.js +1 -1
  36. package/.next/server/app/api/project-aliases/route.js +1 -1
  37. package/.next/server/app/api/project-state/route.js +1 -1
  38. package/.next/server/app/api/project-trust/route.js +1 -1
  39. package/.next/server/app/api/sessions/[id]/auto-name/route.js +2 -2
  40. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  41. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  42. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.js +1 -1
  43. package/.next/server/app/api/sessions/[id]/export/route.js +2 -2
  44. package/.next/server/app/api/sessions/[id]/queue-recovery/route.js +1 -1
  45. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  46. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  47. package/.next/server/app/api/sessions/route.js +1 -1
  48. package/.next/server/app/api/skills/check/route.js +1 -1
  49. package/.next/server/app/api/skills/install/route.js +1 -1
  50. package/.next/server/app/api/skills/route.js +1 -1
  51. package/.next/server/app/api/skills/update/route.js +1 -1
  52. package/.next/server/app/api/subagents/transcript/route.js +1 -1
  53. package/.next/server/app/api/tasks/[id]/[action]/route.js +1 -1
  54. package/.next/server/app/api/tasks/[id]/route.js +1 -1
  55. package/.next/server/app/api/tasks/batch/route.js +1 -1
  56. package/.next/server/app/api/tasks/events/route.js +2 -2
  57. package/.next/server/app/api/tasks/route.js +1 -1
  58. package/.next/server/app/api/tasks/settings/route.js +1 -1
  59. package/.next/server/app/api/usage/route.js +1 -1
  60. package/.next/server/app/api/worktrees/route.js +1 -1
  61. package/.next/server/app/index.html +1 -1
  62. package/.next/server/app/index.rsc +3 -3
  63. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
  64. package/.next/server/app/index.segments/_full.segment.rsc +3 -3
  65. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  66. package/.next/server/app/page.js +7 -7
  67. package/.next/server/app/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app-paths-manifest.json +12 -12
  69. package/.next/server/chunks/4253.js +2 -2
  70. package/.next/server/chunks/5582.js +2 -2
  71. package/.next/server/chunks/6429.js +1 -1
  72. package/.next/server/chunks/7915.js +1 -1
  73. package/.next/server/instrumentation.js +1 -1
  74. package/.next/server/middleware-build-manifest.js +1 -1
  75. package/.next/server/pages/404.html +1 -1
  76. package/.next/server/pages/500.html +1 -1
  77. package/.next/static/chunks/app/{page-3d3b3357da642329.js → page-ed0a4e93e7c65b25.js} +7 -7
  78. package/.next/trace +7 -8
  79. package/.next/trace-build +1 -1
  80. package/package.json +1 -1
  81. /package/.next/static/{VVTAo7O30Oq9W1sG0KkEd → -KlXyudIresJbEC448mlv}/_buildManifest.js +0 -0
  82. /package/.next/static/{VVTAo7O30Oq9W1sG0KkEd → -KlXyudIresJbEC448mlv}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- exports.id=5582,exports.ids=[5582],exports.modules={6999:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Tu:()=>o,o$:()=>n});var e=c(73024),f=c(76760),g=c(80974),h=c.n(g),i=c(75430),j=c(8102),k=a([i]);i=(k.then?(await k)():k)[0];let p={retries:{retries:10,factor:2,minTimeout:50,maxTimeout:2e3,randomize:!0},stale:3e4};function l(){return(0,f.join)((0,i.getAgentDir)(),"settings.json")}function m(){let a=l();if(!(0,e.existsSync)(a))return{};try{let b=JSON.parse((0,e.readFileSync)(a,"utf8"));return null===b||"object"!=typeof b||Array.isArray(b)?{}:b}catch{return{}}}async function n(a){let b=l(),c=null,d=await h().lock(b,{...p,onCompromised:a=>{c=a}});try{if(c)throw c;let d=m(),e=await a(d);if(c)throw c;if(!e||"object"!=typeof e||!e.settings)throw Error("settings.json mutation must return { settings }");if(!1===e.changed)return{changed:!1};if((0,j.$)(b,JSON.stringify(e.settings,null,2)),c)throw c;return{changed:!0}}finally{d().catch(()=>{})}}function o(){return m()}d()}catch(a){d(a)}})},7048:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$u:()=>u,I6:()=>t,IR:()=>o,ph:()=>s,pv:()=>w,rh:()=>p,st:()=>x,tP:()=>v});var e=c(75430);c(90426);var f=c(29021),g=c(33873),h=c(21898);c(8102);var i=c(82536),j=c(41761),k=a([e]);e=(k.then?(await k)():k)[0];let v="pi-web:subagent",w="pi-web:subagent-result",x=["Agent","get_subagent_result","steer_subagent"],y=["read","bash","edit","write","grep","find","ls"],z=new Set(y),A=new Set(x),B=new Set(["off","minimal","low","medium","high","xhigh","max"]),C=[{name:"general-purpose",displayName:"General purpose",description:"Handle a focused implementation or investigation task",systemPrompt:"Work autonomously on the delegated task. Keep the final answer concise and include important files, decisions, and remaining risks.",tools:y,loadSkills:!1,loadExtensions:!1,inheritContext:!1,runInBackground:!1,enabled:!0,scope:"builtin"},{name:"explore",displayName:"Explore",description:"Quickly inspect a codebase without modifying it",systemPrompt:"Explore the codebase to answer the delegated question. Do not modify files. Report concrete findings with file paths and relevant symbols.",tools:[...j.kU],loadSkills:!1,loadExtensions:!1,inheritContext:!1,runInBackground:!1,enabled:!0,scope:"builtin"},{name:"plan",displayName:"Plan",description:"Design an implementation plan without modifying files",systemPrompt:"Produce an implementation-ready plan for the delegated task. Inspect the repository as needed, do not modify files, and call out dependencies, risks, and verification steps.",tools:[...j.kU],loadSkills:!1,loadExtensions:!1,inheritContext:!1,runInBackground:!1,enabled:!0,scope:"builtin"}];function l(a){return"string"==typeof a&&a.trim()?a.trim():void 0}function m(a,b){return"boolean"==typeof a?a:b}function n(a,b){let c=(Array.isArray(a)?a:"string"==typeof a?a.split(","):[]).map(a=>String(a).trim()).filter(Boolean);return c.includes("none")?[]:c.includes("all")||c.includes("*")?[...y]:0===c.length?[...b]:[...new Set(c.filter(a=>z.has(a)))]}function o(a){let b=new Map(C.map(a=>[a.name.toLowerCase(),{...a,tools:[...a.tools]}]));for(let[c,d]of[[(0,g.join)((0,e.getAgentDir)(),"agents"),"global"],[(0,g.join)((0,g.resolve)(a),".agents","agents"),"workspace"],[(0,g.join)((0,g.resolve)(a),".pi","agents"),"project"]])for(let e of function(a,b,c){return(0,f.existsSync)(a)?"global"===b||(0,i.x)(a,new Set([c]))?(0,f.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isFile()&&a.name.endsWith(".md")).map(c=>(function(a,b){try{let c=(0,f.readFileSync)(a,"utf8"),{data:d,rest:e}=(0,h.yv)(c),i=(0,g.basename)(a,".md"),j=l(d?.thinking),k="number"==typeof d?.max_turns?Math.floor(d.max_turns):void 0,o=n(d?.tools,y),p=new Set(n(d?.disallowed_tools,[]));return{name:i,displayName:l(d?.display_name)??i,description:l(d?.description)??i,systemPrompt:e.trim(),tools:o.filter(a=>!p.has(a)),loadSkills:m(d?.load_skills,!1),loadExtensions:m(d?.load_extensions,!1),...l(d?.model)?{model:l(d?.model)}:{},...j&&B.has(j)?{thinking:j}:{},...k&&k>0?{maxTurns:k}:{},inheritContext:m(d?.inherit_context,!1),runInBackground:m(d?.run_in_background,!1),enabled:m(d?.enabled,!0),scope:b,filePath:a}}catch{return null}})((0,g.join)(a,c.name),b)).filter(a=>null!==a):[]:[]}(c,d,a))b.set(e.name.toLowerCase(),e);return[...b.values()].sort((a,b)=>a.displayName.localeCompare(b.displayName))}function p(a,b){return o(a).find(a=>a.name.toLowerCase()===b.trim().toLowerCase()&&a.enabled)}function q(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function r(a){let b=a.find(a=>"custom"===a.type&&a.customType===v);if(!b||"custom"!==b.type||!q(b.data))return null;let c=b.data;return 1!==c.version||"string"!=typeof c.parentSessionId||"string"!=typeof c.parentSessionPath?null:c}function s(a){let b=r(a);if(!b)return null;let c=b.resourceSnapshot,d=q(c)&&!0===c.loadSkills,e=q(c)&&!0===c.loadExtensions;return q(c)&&1===c.version&&Array.isArray(c.appendSystemPrompt)&&c.appendSystemPrompt.every(a=>"string"==typeof a)&&Array.isArray(c.tools)&&c.tools.every(a=>"string"==typeof a&&a.length>0&&!A.has(a)&&(z.has(a)||e))?{appendSystemPrompt:[...c.appendSystemPrompt],tools:[...new Set(c.tools)],loadSkills:d,loadExtensions:e}:null}function t(a,b){return[...new Set([...a,...[...b].filter(a=>!A.has(a))])]}function u(a,b,c){let d=r(a);if(!d)return null;let e=[...a].reverse().find(a=>"custom"===a.type&&a.customType===w),f=e?.type==="custom"&&q(e.data)?e.data:void 0,g=f&&("completed"===f.status||"failed"===f.status||"aborted"===f.status)?f.status:"interrupted";return{sessionId:b,sessionPath:c,parentSessionId:d.parentSessionId,parentToolCallId:"string"==typeof d.parentToolCallId?d.parentToolCallId:"",profile:"string"==typeof d.profile?d.profile:"general-purpose",description:"string"==typeof d.description?d.description:"Subagent",task:"string"==typeof d.task?d.task:"",runInBackground:!0===d.runInBackground,status:g,createdAt:"string"==typeof d.createdAt?d.createdAt:"",...f&&"string"==typeof f.completedAt?{completedAt:f.completedAt}:{},...f&&"string"==typeof f.result?{result:f.result}:{},...f&&"string"==typeof f.error?{error:f.error}:{}}}d()}catch(a){d(a)}})},8102:(a,b,c)=>{"use strict";c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},12039:(a,b,c)=>{"use strict";function d(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function e(a){return function(a,b={}){if("assistant"!==a.role)return a;let c=a.content;if(!Array.isArray(c))return a;let e=c.map(a=>(function(a,b={}){if(!d(a)||"toolCall"!==a.type)return null;let c={type:"toolCall",toolCallId:"string"==typeof a.toolCallId?a.toolCallId:"string"==typeof a.id?a.id:"",toolName:"string"==typeof a.toolName?a.toolName:"string"==typeof a.name?a.name:"",input:"object"!=typeof a.input||null===a.input||Array.isArray(a.input)?"object"!=typeof a.arguments||null===a.arguments||Array.isArray(a.arguments)?{}:a.arguments:a.input},e=b.includeStreamingRawInput?function(a){if("string"==typeof a.rawInput)return a.rawInput;if("string"==typeof a.partialJson)return a.partialJson;if("string"==typeof a.partialArgs)return a.partialArgs;let b=d(a.customInput)?a.customInput:null,c=b&&"string"==typeof b.property?b.property:null,e=d(a.arguments)?a.arguments:null;return c&&e&&"string"==typeof e[c]?e[c]:void 0}(a):void 0;return void 0===e?c:{...c,rawInput:e}})(a,b)??a);return{...a,content:e}}(a)}c.d(b,{B:()=>e})},21898:(a,b,c)=>{"use strict";c.d(b,{yv:()=>f});var d=c(90426);let e=/^(?:\uFEFF)?---[ \t]*(?:\r\n|\n|\r)/;function f(a){let b=function(a){let b=e.exec(a);if(!b)return null;let c=/^---[ \t]*(?:(?:\r\n|\n|\r)|$)/gm;c.lastIndex=b[0].length;let d=c.exec(a);return d?{yaml:a.slice(b[0].length,d.index).replace(/(?:\r\n|\n|\r)$/,""),rest:a.slice(d.index+d[0].length)}:null}(a);if(!b)return{data:null,rest:a};try{let a=(0,d.Hh)(b.yaml);if(a&&"object"==typeof a&&!Array.isArray(a))return{data:a,rest:b.rest}}catch{}return{data:null,rest:b.rest}}},24923:(a,b,c)=>{"use strict";c.d(b,{IL:()=>v,KI:()=>p,P9:()=>r,l:()=>u,xw:()=>t});var d=c(79646),e=c(29021),f=c(33873),g=c(28354),h=c(25252),i=c(58864);let j=(0,g.promisify)(d.execFile);function k(){return globalThis.__piProjectCache||(globalThis.__piProjectCache=new Map),globalThis.__piProjectCache}let l=0;function m(){globalThis.__piProjectCache?.clear()}async function n(a,b){let{stdout:c}=await j("git",["-C",a,...b],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return c.trim()}function o(a){try{return(0,e.realpathSync)(a)}catch{return a}}async function p(a){let b;!function(){let a=Date.now();if(a-l<6e4)return;l=a;let b=k();for(let[c,d]of b)d.expiresAt<=a&&b.delete(c)}();let c=k(),d=c.get(a);if(d&&d.expiresAt>Date.now())return d.info;try{if(!(0,e.existsSync)(a))return b=function(a){let b=(0,f.dirname)(a);if(!b.endsWith("-worktrees"))return null;let c=b.slice(0,-10);return c&&(0,e.existsSync)((0,f.join)(c,".git"))?{projectRoot:o(c),branch:(0,f.basename)(a),isWorktree:!0,isTopLevel:!0}:null}(a)??{projectRoot:a,branch:null,isWorktree:!1,isTopLevel:!1},c.set(a,{info:b,expiresAt:Date.now()+6e4}),b;let[d,g,h,j]=(await n(a,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"])).split("\n").map(a=>a.trim()),[k,l,m]=[d,g,h].map(i.gB),p=o(a),q=(0,i.Eb)(m,p),r=!(0,i.Eb)(l,k)&&q,s=r?(0,f.dirname)(k):m;b={projectRoot:q?o(s):a,branch:j&&"HEAD"!==j?j:null,isWorktree:r,isTopLevel:q}}catch{b={projectRoot:a,branch:null,isWorktree:!1,isTopLevel:!1}}return c.set(a,{info:b,expiresAt:Date.now()+6e4}),b}async function q(a){let b=await n(a,["rev-parse","--path-format=absolute","--git-common-dir"]);return o((0,f.dirname)((0,i.gB)(b)))}async function r(a){let b=await n(a,["worktree","list","--porcelain"]),c=[],d=null,f=()=>{d?.path&&!d.prunable&&(0,e.existsSync)(d.path)&&c.push({path:d.path,branch:d.branch??null,isMain:0===c.length}),d=null};for(let a of b.split("\n"))a.startsWith("worktree ")?(f(),d={path:(0,i.gB)(a.slice(9).trim())}):a.startsWith("branch ")&&d?d.branch=a.slice(7).trim().replace(/^refs\/heads\//,""):a.startsWith("prunable")&&d?d.prunable=!0:""===a.trim()&&f();return f(),c}function s(a,b){return a.find(a=>(0,i.Eb)(a.path,b))}function t(a,b){return s(a,o(b))?.path??null}async function u(a,b){let c=b.trim();if(!c)throw Error("Branch name is required");let d=c.replace(/[\/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"");if(!d)throw Error(`Invalid branch name: ${b}`);let g=await q(a),i=`${(0,f.resolve)(g)}-worktrees`,j=(0,f.join)(i,d);if((0,e.existsSync)(j))throw Error(`Directory already exists: ${j}`);(0,e.mkdirSync)(i,{recursive:!0});let k=!1;try{await n(g,["rev-parse","--verify","--quiet",`refs/heads/${c}`]),k=!0}catch{k=!1}try{k?await n(g,["worktree","add","--",j,c]):await n(g,["worktree","add","-b",c,"--",j])}catch(a){throw Error(w(a))}return(0,h.wz)(j),m(),{path:j,branch:c}}async function v(a,b,c=!1){let d=s(await r(a),b);if(!d)throw Error(`Not a worktree of this repository: ${b}`);if(d.isMain)throw Error("Cannot remove the main worktree");try{await n(a,["worktree","remove",...c?["--force"]:[],d.path])}catch(a){throw Error(w(a))}(0,h.sM)(b),m()}function w(a){let b=a.stderr;return"string"==typeof b&&b.trim()?b.trim():a instanceof Error?a.message:String(a)}},25252:(a,b,c)=>{"use strict";c.d(b,{HM:()=>f,Nw:()=>e,sM:()=>h,wz:()=>g});var d=c(58864);function e(a){return(0,d.W3)(a)}function f(){return globalThis.__piAdditionalAllowedRoots||(globalThis.__piAdditionalAllowedRoots=new Set),globalThis.__piAdditionalAllowedRoots}function g(a){if(!a)return;let b=e(a);f().add(b),globalThis.__piAllowedRootsCache?.roots.add(b)}function h(a){if(!a)return;let b=e(a);f().delete(b),globalThis.__piAllowedRootsCache=void 0}},40402:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{BR:()=>y,D5:()=>C,DK:()=>B,O8:()=>x,Sn:()=>D,Uv:()=>E,dQ:()=>r,eP:()=>A,mD:()=>s,os:()=>v,u1:()=>w,zH:()=>p});var e=c(75430),f=c(29021),g=c(33873),h=c(12039),i=c(67264),j=c(74244),k=c(45902),l=c(24923),m=c(6999),n=c(7048),o=a([e,m,n]);async function p(a){let b=[...new Set(a.map(a=>a.cwd).filter(Boolean))],c=new Map;return await Promise.all(b.map(async a=>{c.set(a,await (0,l.KI)(a))})),a.map(a=>{let b=a.cwd?c.get(a.cwd):void 0,d=b?.projectRoot??a.cwd;return{...a,projectRoot:d,projectKey:(0,j.z)(d),...b?.branch?{branch:b.branch}:{},...b?.isWorktree?{isWorktree:!0}:{}}})}async function q(){let a=await e.SessionManager.listAll(),b=new Map;for(let c of a)b.set((0,k.$)(c.path),c.id);let c=(0,m.Tu)(),d=Array.isArray(c.sessionPins)?c.sessionPins:[],g=new Set(d.filter(a=>"string"==typeof a)),h=a.map(a=>{x(a.id,a.path);let c=a.parentSessionPath?b.get((0,k.$)(a.parentSessionPath)):void 0,d=null;if(a.parentSessionPath)try{var e;let b;d=(0,n.$u)((e=a.path,(b=z((function(a){let b=(0,f.openSync)(a,"r");try{let a=[],c=0,d=0,e=!1;for(;c<262144&&d<2;){let g=Buffer.allocUnsafe(Math.min(4096,262144-c)),h=(0,f.readSync)(b,g,0,g.length,c);if(0===h){e=!0;break}c+=h;let i=g.subarray(0,h),j=i.length;for(let a=0;a<i.length;a+=1)if(10===i[a]&&2===(d+=1)){j=a+1;break}a.push(i.subarray(0,j))}let g=Buffer.concat(a).toString("utf8"),h=g.split("\n");return e||g.endsWith("\n")||h.pop(),""===h.at(-1)&&h.pop(),h.map(a=>a.endsWith("\r")?a.slice(0,-1):a)}finally{(0,f.closeSync)(b)}})(e).slice(1))).some(a=>"custom"===a.type&&a.customType===n.tP)?[...b,...z(function(a){let b=(0,f.openSync)(a,"r");try{let a=(0,f.fstatSync)(b).size,c=Math.max(0,a-262144),d=Buffer.allocUnsafe(a-c),e=(0,f.readSync)(b,d,0,d.length,c);if(0===e)return[];let g=d.subarray(0,e).toString("utf8").split("\n");if(c>0){let a=Buffer.allocUnsafe(1);(0,f.readSync)(b,a,0,1,c-1),10!==a[0]&&g.shift()}return""===g.at(-1)&&g.pop(),g.map(a=>a.endsWith("\r")?a.slice(0,-1):a)}finally{(0,f.closeSync)(b)}}(e))]:b),a.id,a.path)}catch{}return{path:a.path,id:a.id,cwd:a.cwd,name:a.name,created:a.created instanceof Date?a.created.toISOString():String(a.created),modified:a.modified instanceof Date?a.modified.toISOString():String(a.modified),messageCount:a.messageCount,firstMessage:(0,i.CS)(a.firstMessage||"(no messages)").slice(0,I),parentSessionId:c,...d?{relation:{kind:"subagent",parentSessionId:d.parentSessionId,profile:d.profile,description:d.description,status:d.status}}:a.parentSessionPath?{relation:{kind:"fork",...c?{originSessionId:c}:{}}}:{},transient:!1,pinned:g.has(a.id),importedFrom:a.importedFrom}});return p(h)}async function r(a={}){a.force&&s();let b=globalThis.__piSessionListGeneration??0;if(globalThis.__piSessionListCache&&Date.now()-globalThis.__piSessionListCache.ts<H)return globalThis.__piSessionListCache.data;if(globalThis.__piSessionListPromise&&globalThis.__piSessionListPromiseGeneration===b)return globalThis.__piSessionListPromise;let c=q().then(a=>(globalThis.__piSessionListGeneration??0)!==b?r():(globalThis.__piSessionListCache={data:a,ts:Date.now()},a)).finally(()=>{globalThis.__piSessionListPromise===c&&(globalThis.__piSessionListPromise=void 0,globalThis.__piSessionListPromiseGeneration=void 0)});return globalThis.__piSessionListPromise=c,globalThis.__piSessionListPromiseGeneration=b,c}[e,m,n]=o.then?(await o)():o;let H=1e4,I=300,J=null;function s(){J||(J=setTimeout(()=>{J=null,globalThis.__piSessionListGeneration=(globalThis.__piSessionListGeneration??0)+1,globalThis.__piSessionListCache=void 0},300))}function t(){return globalThis.__piSessionPathCache||(globalThis.__piSessionPathCache=new Map),globalThis.__piSessionPathCache}function u(){return globalThis.__piPathToSessionIdCache||(globalThis.__piPathToSessionIdCache=new Map),globalThis.__piPathToSessionIdCache}async function v(a){let b=t().get(a);return b||(await r(),t().get(a)??null)}async function w(a){let b=(0,g.normalize)(a),c=u().get(b);return c||(await r(),u().get(b))}function x(a,b){let c=(0,g.normalize)(b),d=t(),e=u(),f=d.get(a),h=e.get(c);f&&f!==c&&e.get(f)===a&&e.delete(f),h&&h!==a&&d.get(h)===c&&d.delete(h),d.set(a,c),e.set(c,a);let i=t();for(u();i.size>4096;){let a=i.keys().next().value;if(void 0===a)break;y(a)}}function y(a){let b=t(),c=u(),d=b.get(a);b.delete(a),d&&c.get(d)===a&&c.delete(d)}function z(a){return a.flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}function A(a){let b=(0,f.openSync)(a,"r");try{let a=[],c=0,d=!1;for(;c<65536&&!d;){let e=Buffer.allocUnsafe(Math.min(4096,65536-c)),g=(0,f.readSync)(b,e,0,e.length,c);if(0===g)break;let h=e.subarray(0,g),i=h.indexOf(10);a.push(-1===i?h:h.subarray(0,i)),c+=g,d=-1!==i}if(!d&&c>=65536)return null;let e=Buffer.concat(a).toString("utf8").trimEnd();if(!e)return null;try{let a=JSON.parse(e);return"session"===a.type?a:null}catch{return null}}finally{(0,f.closeSync)(b)}}function B(a){return C(a).getEntries()}function C(a){let b=globalThis.__piSessionManagerCache??=new Map,c=0,d=0;try{let b=(0,f.statSync)(a);c=b.mtimeMs,d=b.size}catch{return b.delete(a),e.SessionManager.open(a)}let g=b.get(a);if(g&&g.mtimeMs===c&&g.size===d)return b.delete(a),b.set(a,g),g.sm;let h=e.SessionManager.open(a);for(b.set(a,{mtimeMs:c,size:d,sm:h});b.size>6;){let a=b.keys().next().value;if(void 0===a)break;b.delete(a)}return h}function D(a){let b=globalThis.__piSessionManagerCache;b&&(a?b.delete(a):b.clear())}function E(a,b,c={}){let{tail:d,excludeLeaf:f}=c,g=d&&d>0?function(a,b,c,d=!1){if(c<=0)return a;let e=new Map;for(let b of a)e.set(b.id,b);let f=b?e.get(b):a[a.length-1];if(d&&(f=f?.parentId?e.get(f.parentId):void 0),!f)return[];let g=[],h=f;for(;h&&g.length<c;)g.push(h),h=h.parentId?e.get(h.parentId):void 0;return g.reverse(),g}(a,b??null,d,f):a,i=!!(d&&d>0&&g[0]?.parentId),j=new Map;for(let a of g)j.set(a.id,a);let k=(0,e.buildContextEntries)(g,b,j),l=[],m=[];for(let a of k){let b=function(a,b){switch(a.type){case"message":{let c=b.deferToolResultImages?function(a,b,c){if("toolResult"!==a.role)return a;let d=0,e=0,f=new Set,g=a.content.flatMap((a,g)=>{let h=function(a){let b,c;if(!G(a)||"image"!==a.type||("string"==typeof a.data?(b=a.data,c="string"==typeof a.mimeType?a.mimeType:void 0):G(a.source)&&"base64"===a.source.type&&"string"==typeof a.source.data&&(b=a.source.data,c="string"==typeof a.source.media_type?a.source.media_type:void 0),!b))return null;let d=b.endsWith("==")?2:+!!b.endsWith("=");return{bytes:Math.max(0,Math.floor(3*b.length/4)-d),mime:c}}(a);if(!h)return[a];if(b){let a={type:"url",...h.mime?{media_type:h.mime}:{},url:`/api/sessions/${encodeURIComponent(b)}/entries/${encodeURIComponent(c)}/tool-result-image?blockIndex=${g}`};return[{type:"image",source:a}]}return d+=1,e+=h.bytes,h.mime&&f.add(h.mime),[]});if(0===d)return{...a,content:g};let h=f.size>0?`: ${[...f].join(", ")}`:"";return g.push({type:"text",text:`[${d} tool result image${1===d?"":"s"} omitted from initial history payload${h}, ~${e} bytes]`}),{...a,content:g}}((0,h.B)(a.message),b.sessionId,a.id):(0,h.B)(a.message),d="assistant"===c.role?c.content:void 0;if("string"==typeof d&&(c={...c,content:[{type:"text",text:d}]}),!b.deferThinking||"assistant"!==c.role)return c;let e=c.content;return{...c,content:e.map(a=>"thinking"===a.type&&""!==a.thinking.trim()?{...a,thinking:"",deferred:!0}:a)}}case"compaction":return{role:"custom",customType:"compaction",content:a.summary,display:!0,details:{tokensBefore:a.tokensBefore,firstKeptEntryId:a.firstKeptEntryId},timestamp:F(a.timestamp)};case"branch_summary":if(!a.summary)return null;return{role:"user",content:`*The conversation briefly explored another branch and returned with this summary:*
1
+ exports.id=5582,exports.ids=[5582],exports.modules={6999:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Tu:()=>o,o$:()=>n});var e=c(73024),f=c(76760),g=c(80974),h=c.n(g),i=c(75430),j=c(8102),k=a([i]);i=(k.then?(await k)():k)[0];let p={retries:{retries:10,factor:2,minTimeout:50,maxTimeout:2e3,randomize:!0},stale:3e4};function l(){return(0,f.join)((0,i.getAgentDir)(),"settings.json")}function m(){let a=l();if(!(0,e.existsSync)(a))return{};try{let b=JSON.parse((0,e.readFileSync)(a,"utf8"));return null===b||"object"!=typeof b||Array.isArray(b)?{}:b}catch{return{}}}async function n(a){let b=l(),c=null,d=await h().lock(b,{...p,onCompromised:a=>{c=a}});try{if(c)throw c;let d=m(),e=await a(d);if(c)throw c;if(!e||"object"!=typeof e||!e.settings)throw Error("settings.json mutation must return { settings }");if(!1===e.changed)return{changed:!1};if((0,j.$)(b,JSON.stringify(e.settings,null,2)),c)throw c;return{changed:!0}}finally{d().catch(()=>{})}}function o(){return m()}d()}catch(a){d(a)}})},7048:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{$u:()=>u,I6:()=>t,IR:()=>o,ph:()=>s,pv:()=>w,rh:()=>p,st:()=>x,tP:()=>v});var e=c(75430);c(90426);var f=c(29021),g=c(33873),h=c(21898);c(8102);var i=c(82536),j=c(41761),k=a([e]);e=(k.then?(await k)():k)[0];let v="pi-web:subagent",w="pi-web:subagent-result",x=["Agent","get_subagent_result","steer_subagent"],y=["read","bash","edit","write","grep","find","ls"],z=new Set(y),A=new Set(x),B=new Set(["off","minimal","low","medium","high","xhigh","max"]),C=[{name:"general-purpose",displayName:"General purpose",description:"Handle a focused implementation or investigation task",systemPrompt:"Work autonomously on the delegated task. Keep the final answer concise and include important files, decisions, and remaining risks.",tools:y,loadSkills:!1,loadExtensions:!1,inheritContext:!1,runInBackground:!1,enabled:!0,scope:"builtin"},{name:"explore",displayName:"Explore",description:"Quickly inspect a codebase without modifying it",systemPrompt:"Explore the codebase to answer the delegated question. Do not modify files. Report concrete findings with file paths and relevant symbols.",tools:[...j.kU],loadSkills:!1,loadExtensions:!1,inheritContext:!1,runInBackground:!1,enabled:!0,scope:"builtin"},{name:"plan",displayName:"Plan",description:"Design an implementation plan without modifying files",systemPrompt:"Produce an implementation-ready plan for the delegated task. Inspect the repository as needed, do not modify files, and call out dependencies, risks, and verification steps.",tools:[...j.kU],loadSkills:!1,loadExtensions:!1,inheritContext:!1,runInBackground:!1,enabled:!0,scope:"builtin"}];function l(a){return"string"==typeof a&&a.trim()?a.trim():void 0}function m(a,b){return"boolean"==typeof a?a:b}function n(a,b){let c=(Array.isArray(a)?a:"string"==typeof a?a.split(","):[]).map(a=>String(a).trim()).filter(Boolean);return c.includes("none")?[]:c.includes("all")||c.includes("*")?[...y]:0===c.length?[...b]:[...new Set(c.filter(a=>z.has(a)))]}function o(a){let b=new Map(C.map(a=>[a.name.toLowerCase(),{...a,tools:[...a.tools]}]));for(let[c,d]of[[(0,g.join)((0,e.getAgentDir)(),"agents"),"global"],[(0,g.join)((0,g.resolve)(a),".agents","agents"),"workspace"],[(0,g.join)((0,g.resolve)(a),".pi","agents"),"project"]])for(let e of function(a,b,c){return(0,f.existsSync)(a)?"global"===b||(0,i.x)(a,new Set([c]))?(0,f.readdirSync)(a,{withFileTypes:!0}).filter(a=>a.isFile()&&a.name.endsWith(".md")).map(c=>(function(a,b){try{let c=(0,f.readFileSync)(a,"utf8"),{data:d,rest:e}=(0,h.yv)(c),i=(0,g.basename)(a,".md"),j=l(d?.thinking),k="number"==typeof d?.max_turns?Math.floor(d.max_turns):void 0,o=n(d?.tools,y),p=new Set(n(d?.disallowed_tools,[]));return{name:i,displayName:l(d?.display_name)??i,description:l(d?.description)??i,systemPrompt:e.trim(),tools:o.filter(a=>!p.has(a)),loadSkills:m(d?.load_skills,!1),loadExtensions:m(d?.load_extensions,!1),...l(d?.model)?{model:l(d?.model)}:{},...j&&B.has(j)?{thinking:j}:{},...k&&k>0?{maxTurns:k}:{},inheritContext:m(d?.inherit_context,!1),runInBackground:m(d?.run_in_background,!1),enabled:m(d?.enabled,!0),scope:b,filePath:a}}catch{return null}})((0,g.join)(a,c.name),b)).filter(a=>null!==a):[]:[]}(c,d,a))b.set(e.name.toLowerCase(),e);return[...b.values()].sort((a,b)=>a.displayName.localeCompare(b.displayName))}function p(a,b){return o(a).find(a=>a.name.toLowerCase()===b.trim().toLowerCase()&&a.enabled)}function q(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function r(a){let b=a.find(a=>"custom"===a.type&&a.customType===v);if(!b||"custom"!==b.type||!q(b.data))return null;let c=b.data;return 1!==c.version||"string"!=typeof c.parentSessionId||"string"!=typeof c.parentSessionPath?null:c}function s(a){let b=r(a);if(!b)return null;let c=b.resourceSnapshot,d=q(c)&&!0===c.loadSkills,e=q(c)&&!0===c.loadExtensions;return q(c)&&1===c.version&&Array.isArray(c.appendSystemPrompt)&&c.appendSystemPrompt.every(a=>"string"==typeof a)&&Array.isArray(c.tools)&&c.tools.every(a=>"string"==typeof a&&a.length>0&&!A.has(a)&&(z.has(a)||e))?{appendSystemPrompt:[...c.appendSystemPrompt],tools:[...new Set(c.tools)],loadSkills:d,loadExtensions:e}:null}function t(a,b){return[...new Set([...a,...[...b].filter(a=>!A.has(a))])]}function u(a,b,c){let d=r(a);if(!d)return null;let e=[...a].reverse().find(a=>"custom"===a.type&&a.customType===w),f=e?.type==="custom"&&q(e.data)?e.data:void 0,g=f&&("completed"===f.status||"failed"===f.status||"aborted"===f.status)?f.status:"interrupted";return{sessionId:b,sessionPath:c,parentSessionId:d.parentSessionId,parentToolCallId:"string"==typeof d.parentToolCallId?d.parentToolCallId:"",profile:"string"==typeof d.profile?d.profile:"general-purpose",description:"string"==typeof d.description?d.description:"Subagent",task:"string"==typeof d.task?d.task:"",runInBackground:!0===d.runInBackground,status:g,createdAt:"string"==typeof d.createdAt?d.createdAt:"",...f&&"string"==typeof f.completedAt?{completedAt:f.completedAt}:{},...f&&"string"==typeof f.result?{result:f.result}:{},...f&&"string"==typeof f.error?{error:f.error}:{}}}d()}catch(a){d(a)}})},8102:(a,b,c)=>{"use strict";c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},12039:(a,b,c)=>{"use strict";function d(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function e(a){return function(a,b={}){if("assistant"!==a.role)return a;let c=a.content;if(!Array.isArray(c))return a;let e=c.map(a=>(function(a,b={}){if(!d(a)||"toolCall"!==a.type)return null;let c={type:"toolCall",toolCallId:"string"==typeof a.toolCallId?a.toolCallId:"string"==typeof a.id?a.id:"",toolName:"string"==typeof a.toolName?a.toolName:"string"==typeof a.name?a.name:"",input:"object"!=typeof a.input||null===a.input||Array.isArray(a.input)?"object"!=typeof a.arguments||null===a.arguments||Array.isArray(a.arguments)?{}:a.arguments:a.input},e=b.includeStreamingRawInput?function(a){if("string"==typeof a.rawInput)return a.rawInput;if("string"==typeof a.partialJson)return a.partialJson;if("string"==typeof a.partialArgs)return a.partialArgs;let b=d(a.customInput)?a.customInput:null,c=b&&"string"==typeof b.property?b.property:null,e=d(a.arguments)?a.arguments:null;return c&&e&&"string"==typeof e[c]?e[c]:void 0}(a):void 0;return void 0===e?c:{...c,rawInput:e}})(a,b)??a);return{...a,content:e}}(a)}c.d(b,{B:()=>e})},21898:(a,b,c)=>{"use strict";c.d(b,{yv:()=>f});var d=c(90426);let e=/^(?:\uFEFF)?---[ \t]*(?:\r\n|\n|\r)/;function f(a){let b=function(a){let b=e.exec(a);if(!b)return null;let c=/^---[ \t]*(?:(?:\r\n|\n|\r)|$)/gm;c.lastIndex=b[0].length;let d=c.exec(a);return d?{yaml:a.slice(b[0].length,d.index).replace(/(?:\r\n|\n|\r)$/,""),rest:a.slice(d.index+d[0].length)}:null}(a);if(!b)return{data:null,rest:a};try{let a=(0,d.Hh)(b.yaml);if(a&&"object"==typeof a&&!Array.isArray(a))return{data:a,rest:b.rest}}catch{}return{data:null,rest:b.rest}}},24923:(a,b,c)=>{"use strict";c.d(b,{IL:()=>v,KI:()=>p,P9:()=>r,l:()=>u,xw:()=>t});var d=c(79646),e=c(29021),f=c(33873),g=c(28354),h=c(25252),i=c(58864);let j=(0,g.promisify)(d.execFile);function k(){return globalThis.__piProjectCache||(globalThis.__piProjectCache=new Map),globalThis.__piProjectCache}let l=0;function m(){globalThis.__piProjectCache?.clear()}async function n(a,b){let{stdout:c}=await j("git",["-C",a,...b],{timeout:1e4,maxBuffer:1048576,env:{...process.env,LC_ALL:"C"}});return c.trim()}function o(a){try{return(0,e.realpathSync)(a)}catch{return a}}async function p(a){let b;!function(){let a=Date.now();if(a-l<6e4)return;l=a;let b=k();for(let[c,d]of b)d.expiresAt<=a&&b.delete(c)}();let c=k(),d=c.get(a);if(d&&d.expiresAt>Date.now())return d.info;try{if(!(0,e.existsSync)(a))return b=function(a){let b=(0,f.dirname)(a);if(!b.endsWith("-worktrees"))return null;let c=b.slice(0,-10);return c&&(0,e.existsSync)((0,f.join)(c,".git"))?{projectRoot:o(c),branch:(0,f.basename)(a),isWorktree:!0,isTopLevel:!0}:null}(a)??{projectRoot:a,branch:null,isWorktree:!1,isTopLevel:!1},c.set(a,{info:b,expiresAt:Date.now()+6e4}),b;let[d,g,h,j]=(await n(a,["rev-parse","--path-format=absolute","--git-common-dir","--git-dir","--show-toplevel","--abbrev-ref","HEAD"])).split("\n").map(a=>a.trim()),[k,l,m]=[d,g,h].map(i.gB),p=o(a),q=(0,i.Eb)(m,p),r=!(0,i.Eb)(l,k)&&q,s=r?(0,f.dirname)(k):m;b={projectRoot:q?o(s):a,branch:j&&"HEAD"!==j?j:null,isWorktree:r,isTopLevel:q}}catch{b={projectRoot:a,branch:null,isWorktree:!1,isTopLevel:!1}}return c.set(a,{info:b,expiresAt:Date.now()+6e4}),b}async function q(a){let b=await n(a,["rev-parse","--path-format=absolute","--git-common-dir"]);return o((0,f.dirname)((0,i.gB)(b)))}async function r(a){let b=await n(a,["worktree","list","--porcelain"]),c=[],d=null,f=()=>{d?.path&&!d.prunable&&(0,e.existsSync)(d.path)&&c.push({path:d.path,branch:d.branch??null,isMain:0===c.length}),d=null};for(let a of b.split("\n"))a.startsWith("worktree ")?(f(),d={path:(0,i.gB)(a.slice(9).trim())}):a.startsWith("branch ")&&d?d.branch=a.slice(7).trim().replace(/^refs\/heads\//,""):a.startsWith("prunable")&&d?d.prunable=!0:""===a.trim()&&f();return f(),c}function s(a,b){return a.find(a=>(0,i.Eb)(a.path,b))}function t(a,b){return s(a,o(b))?.path??null}async function u(a,b){let c=b.trim();if(!c)throw Error("Branch name is required");let d=c.replace(/[\/\\:*?"<>|\s]+/g,"-").replace(/^-+|-+$/g,"");if(!d)throw Error(`Invalid branch name: ${b}`);let g=await q(a),i=`${(0,f.resolve)(g)}-worktrees`,j=(0,f.join)(i,d);if((0,e.existsSync)(j))throw Error(`Directory already exists: ${j}`);(0,e.mkdirSync)(i,{recursive:!0});let k=!1;try{await n(g,["rev-parse","--verify","--quiet",`refs/heads/${c}`]),k=!0}catch{k=!1}try{k?await n(g,["worktree","add","--",j,c]):await n(g,["worktree","add","-b",c,"--",j])}catch(a){throw Error(w(a))}return(0,h.wz)(j),m(),{path:j,branch:c}}async function v(a,b,c=!1){let d=s(await r(a),b);if(!d)throw Error(`Not a worktree of this repository: ${b}`);if(d.isMain)throw Error("Cannot remove the main worktree");try{await n(a,["worktree","remove",...c?["--force"]:[],d.path])}catch(a){throw Error(w(a))}(0,h.sM)(b),m()}function w(a){let b=a.stderr;return"string"==typeof b&&b.trim()?b.trim():a instanceof Error?a.message:String(a)}},25252:(a,b,c)=>{"use strict";c.d(b,{HM:()=>f,Nw:()=>e,sM:()=>h,wz:()=>g});var d=c(58864);function e(a){return(0,d.W3)(a)}function f(){return globalThis.__piAdditionalAllowedRoots||(globalThis.__piAdditionalAllowedRoots=new Set),globalThis.__piAdditionalAllowedRoots}function g(a){if(!a)return;let b=e(a);f().add(b),globalThis.__piAllowedRootsCache?.roots.add(b)}function h(a){if(!a)return;let b=e(a);f().delete(b),globalThis.__piAllowedRootsCache=void 0}},40402:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{BR:()=>D,D5:()=>H,DK:()=>G,O8:()=>C,Sn:()=>I,Uv:()=>J,dQ:()=>w,eP:()=>F,mD:()=>x,os:()=>A,u1:()=>B,zH:()=>r});var e=c(75430),f=c(29021),g=c(79748),h=c(33873),i=c(4984),j=c(12039),k=c(67264),l=c(74244),m=c(45902),n=c(24923),o=c(6999),p=c(7048),q=a([e,o,p]);async function r(a){let b=[...new Set(a.map(a=>a.cwd).filter(Boolean))],c=new Map;return await Promise.all(b.map(async a=>{c.set(a,await (0,n.KI)(a))})),a.map(a=>{let b=a.cwd?c.get(a.cwd):void 0,d=b?.projectRoot??a.cwd;return{...a,projectRoot:d,projectKey:(0,l.z)(d),...b?.branch?{branch:b.branch}:{},...b?.isWorktree?{isWorktree:!0}:{}}})}function s(a){return"object"==typeof a&&null!==a&&"role"in a&&"content"in a}async function t(a,b){try{let c,d,e=null,g=0,h="";for await(let b of(0,i.createInterface)({input:(0,f.createReadStream)(a,{encoding:"utf8"}),crlfDelay:1/0})){let a;try{a=JSON.parse(b)}catch{continue}if("object"!=typeof a||null===a)continue;if(!e){if("session"!==a.type)return null;e=a;continue}if("session_info"===a.type){let b=a.name;c="string"==typeof b&&b.trim()?b.trim():void 0}if("message"!==a.type)continue;g++;let f=function(a){let b=a.message;if(!s(b)||"user"!==b.role&&"assistant"!==b.role)return;if("number"==typeof b.timestamp)return b.timestamp;let c=new Date("string"==typeof a.timestamp?a.timestamp:"").getTime();return Number.isNaN(c)?void 0:c}(a);"number"==typeof f&&(d=Math.max(d??0,f));let i=a.message;if(!s(i)||"user"!==i.role&&"assistant"!==i.role)continue;let j="string"==typeof i.content?i.content:i.content.filter(a=>"text"===a.type).map(a=>a.text??"").join(" ");j&&(h||"user"!==i.role||(h=j))}if(!e)return null;let j="string"==typeof e.timestamp?new Date(e.timestamp).getTime():NaN,k=new Date("number"==typeof d&&d>0?d:Number.isNaN(j)?b.mtimeMs:j);return{path:a,id:"string"==typeof e.id?e.id:"",cwd:"string"==typeof e.cwd?e.cwd:"",name:c,parentSessionPath:"string"==typeof e.parentSession?e.parentSession:void 0,created:new Date("string"==typeof e.timestamp?e.timestamp:b.mtimeMs),modified:k,messageCount:g,firstMessage:h||"(no messages)",allMessagesText:""}}catch{return null}}async function u(){let a,b=(0,h.join)((0,e.getAgentDir)(),"sessions");try{if(!(0,f.existsSync)(b))return[];a=await (0,g.readdir)(b,{withFileTypes:!0})}catch{return[]}let c=a.filter(a=>a.isDirectory()||a.isSymbolicLink()).map(a=>(0,h.join)(b,a.name)),d=[];for(let a of c)try{for(let b of(await (0,g.readdir)(a)))b.endsWith(".jsonl")&&d.push((0,h.join)(a,b))}catch{}let i=(globalThis.__piSessionFileInfoCache||(globalThis.__piSessionFileInfoCache=new Map),globalThis.__piSessionFileInfoCache),j=new Map,k=new Map,l=[];for(let[a,b]of(await Promise.all(d.map(async a=>{try{let b=await (0,g.stat)(a);k.set(a,{mtimeMs:b.mtimeMs,size:b.size})}catch{}})),k)){let c=i.get(a);c&&c.mtimeMs===b.mtimeMs&&c.size===b.size?j.set(a,c):l.push(a)}let m=0,n=async()=>{for(;m<l.length;){let a=l[m++],b=k.get(a);if(!b)continue;let c=await t(a,b);c&&j.set(a,{...b,info:c})}};await Promise.all(Array.from({length:Math.min(10,l.length)},()=>n())),globalThis.__piSessionFileInfoCache=j;let o=[...j.values()].map(a=>a.info);return o.sort((a,b)=>b.modified.getTime()-a.modified.getTime()),o}async function v(){let a=await u(),b=new Map;for(let c of a)b.set((0,m.$)(c.path),c.id);let c=(0,o.Tu)(),d=Array.isArray(c.sessionPins)?c.sessionPins:[],e=new Set(d.filter(a=>"string"==typeof a)),g=a.map(a=>{C(a.id,a.path);let c=a.parentSessionPath?b.get((0,m.$)(a.parentSessionPath)):void 0,d=null;if(a.parentSessionPath)try{var g;let b;d=(0,p.$u)((g=a.path,(b=E((function(a){let b=(0,f.openSync)(a,"r");try{let a=[],c=0,d=0,e=!1;for(;c<262144&&d<2;){let g=Buffer.allocUnsafe(Math.min(4096,262144-c)),h=(0,f.readSync)(b,g,0,g.length,c);if(0===h){e=!0;break}c+=h;let i=g.subarray(0,h),j=i.length;for(let a=0;a<i.length;a+=1)if(10===i[a]&&2===(d+=1)){j=a+1;break}a.push(i.subarray(0,j))}let g=Buffer.concat(a).toString("utf8"),h=g.split("\n");return e||g.endsWith("\n")||h.pop(),""===h.at(-1)&&h.pop(),h.map(a=>a.endsWith("\r")?a.slice(0,-1):a)}finally{(0,f.closeSync)(b)}})(g).slice(1))).some(a=>"custom"===a.type&&a.customType===p.tP)?[...b,...E(function(a){let b=(0,f.openSync)(a,"r");try{let a=(0,f.fstatSync)(b).size,c=Math.max(0,a-262144),d=Buffer.allocUnsafe(a-c),e=(0,f.readSync)(b,d,0,d.length,c);if(0===e)return[];let g=d.subarray(0,e).toString("utf8").split("\n");if(c>0){let a=Buffer.allocUnsafe(1);(0,f.readSync)(b,a,0,1,c-1),10!==a[0]&&g.shift()}return""===g.at(-1)&&g.pop(),g.map(a=>a.endsWith("\r")?a.slice(0,-1):a)}finally{(0,f.closeSync)(b)}}(g))]:b),a.id,a.path)}catch{}return{path:a.path,id:a.id,cwd:a.cwd,name:a.name,created:a.created instanceof Date?a.created.toISOString():String(a.created),modified:a.modified instanceof Date?a.modified.toISOString():String(a.modified),messageCount:a.messageCount,firstMessage:(0,k.CS)(a.firstMessage||"(no messages)").slice(0,N),parentSessionId:c,...d?{relation:{kind:"subagent",parentSessionId:d.parentSessionId,profile:d.profile,description:d.description,status:d.status}}:a.parentSessionPath?{relation:{kind:"fork",...c?{originSessionId:c}:{}}}:{},transient:!1,pinned:e.has(a.id),importedFrom:a.importedFrom}});return r(g)}async function w(a={}){a.force&&x();let b=globalThis.__piSessionListGeneration??0;if(globalThis.__piSessionListCache&&Date.now()-globalThis.__piSessionListCache.ts<M)return globalThis.__piSessionListCache.data;if(globalThis.__piSessionListPromise&&globalThis.__piSessionListPromiseGeneration===b)return globalThis.__piSessionListPromise;let c=v().then(a=>(globalThis.__piSessionListGeneration??0)!==b?w():(globalThis.__piSessionListCache={data:a,ts:Date.now()},a)).finally(()=>{globalThis.__piSessionListPromise===c&&(globalThis.__piSessionListPromise=void 0,globalThis.__piSessionListPromiseGeneration=void 0)});return globalThis.__piSessionListPromise=c,globalThis.__piSessionListPromiseGeneration=b,c}[e,o,p]=q.then?(await q)():q;let M=1e4,N=300,O=null;function x(){O||(O=setTimeout(()=>{O=null,globalThis.__piSessionListGeneration=(globalThis.__piSessionListGeneration??0)+1,globalThis.__piSessionListCache=void 0},300))}function y(){return globalThis.__piSessionPathCache||(globalThis.__piSessionPathCache=new Map),globalThis.__piSessionPathCache}function z(){return globalThis.__piPathToSessionIdCache||(globalThis.__piPathToSessionIdCache=new Map),globalThis.__piPathToSessionIdCache}async function A(a){let b=y().get(a);return b||(await w(),y().get(a)??null)}async function B(a){let b=(0,h.normalize)(a),c=z().get(b);return c||(await w(),z().get(b))}function C(a,b){let c=(0,h.normalize)(b),d=y(),e=z(),f=d.get(a),g=e.get(c);f&&f!==c&&e.get(f)===a&&e.delete(f),g&&g!==a&&d.get(g)===c&&d.delete(g),d.set(a,c),e.set(c,a);let i=y();for(z();i.size>4096;){let a=i.keys().next().value;if(void 0===a)break;D(a)}}function D(a){let b=y(),c=z(),d=b.get(a);b.delete(a),d&&c.get(d)===a&&c.delete(d)}function E(a){return a.flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}})}function F(a){let b=(0,f.openSync)(a,"r");try{let a=[],c=0,d=!1;for(;c<65536&&!d;){let e=Buffer.allocUnsafe(Math.min(4096,65536-c)),g=(0,f.readSync)(b,e,0,e.length,c);if(0===g)break;let h=e.subarray(0,g),i=h.indexOf(10);a.push(-1===i?h:h.subarray(0,i)),c+=g,d=-1!==i}if(!d&&c>=65536)return null;let e=Buffer.concat(a).toString("utf8").trimEnd();if(!e)return null;try{let a=JSON.parse(e);return"session"===a.type?a:null}catch{return null}}finally{(0,f.closeSync)(b)}}function G(a){return H(a).getEntries()}function H(a){let b=globalThis.__piSessionManagerCache??=new Map,c=0,d=0;try{let b=(0,f.statSync)(a);c=b.mtimeMs,d=b.size}catch{return b.delete(a),e.SessionManager.open(a)}let g=b.get(a);if(g&&g.mtimeMs===c&&g.size===d)return b.delete(a),b.set(a,g),g.sm;let h=e.SessionManager.open(a);for(b.set(a,{mtimeMs:c,size:d,sm:h});b.size>6;){let a=b.keys().next().value;if(void 0===a)break;b.delete(a)}return h}function I(a){let b=globalThis.__piSessionManagerCache;b&&(a?b.delete(a):b.clear())}function J(a,b,c={}){let{tail:d,excludeLeaf:f}=c,g=d&&d>0?function(a,b,c,d=!1){if(c<=0)return a;let e=new Map;for(let b of a)e.set(b.id,b);let f=b?e.get(b):a[a.length-1];if(d&&(f=f?.parentId?e.get(f.parentId):void 0),!f)return[];let g=[],h=f;for(;h&&g.length<c;)g.push(h),h=h.parentId?e.get(h.parentId):void 0;return g.reverse(),g}(a,b??null,d,f):a,h=!!(d&&d>0&&g[0]?.parentId),i=new Map;for(let a of g)i.set(a.id,a);let k=(0,e.buildContextEntries)(g,b,i),l=[],m=[];for(let a of k){let b=function(a,b){switch(a.type){case"message":{let c=b.deferToolResultImages?function(a,b,c){if("toolResult"!==a.role)return a;let d=0,e=0,f=new Set,g=a.content.flatMap((a,g)=>{let h=function(a){let b,c;if(!L(a)||"image"!==a.type||("string"==typeof a.data?(b=a.data,c="string"==typeof a.mimeType?a.mimeType:void 0):L(a.source)&&"base64"===a.source.type&&"string"==typeof a.source.data&&(b=a.source.data,c="string"==typeof a.source.media_type?a.source.media_type:void 0),!b))return null;let d=b.endsWith("==")?2:+!!b.endsWith("=");return{bytes:Math.max(0,Math.floor(3*b.length/4)-d),mime:c}}(a);if(!h)return[a];if(b){let a={type:"url",...h.mime?{media_type:h.mime}:{},url:`/api/sessions/${encodeURIComponent(b)}/entries/${encodeURIComponent(c)}/tool-result-image?blockIndex=${g}`};return[{type:"image",source:a}]}return d+=1,e+=h.bytes,h.mime&&f.add(h.mime),[]});if(0===d)return{...a,content:g};let h=f.size>0?`: ${[...f].join(", ")}`:"";return g.push({type:"text",text:`[${d} tool result image${1===d?"":"s"} omitted from initial history payload${h}, ~${e} bytes]`}),{...a,content:g}}((0,j.B)(a.message),b.sessionId,a.id):(0,j.B)(a.message),d="assistant"===c.role?c.content:void 0;if("string"==typeof d&&(c={...c,content:[{type:"text",text:d}]}),!b.deferThinking||"assistant"!==c.role)return c;let e=c.content;return{...c,content:e.map(a=>"thinking"===a.type&&""!==a.thinking.trim()?{...a,thinking:"",deferred:!0}:a)}}case"compaction":return{role:"custom",customType:"compaction",content:a.summary,display:!0,details:{tokensBefore:a.tokensBefore,firstKeptEntryId:a.firstKeptEntryId},timestamp:K(a.timestamp)};case"branch_summary":if(!a.summary)return null;return{role:"user",content:`*The conversation briefly explored another branch and returned with this summary:*
2
2
 
3
- ${a.summary}`,timestamp:F(a.timestamp)};case"custom_message":return{role:"custom",customType:a.customType,content:a.content,display:a.display,details:a.details,timestamp:F(a.timestamp)};default:return null}}(a,c);b&&(l.push(b),m.push(a.id))}return{messages:l,entryIds:m,oldestEntryId:g[0]?.id??null,hasMore:i,...function(a,b){let c,d;if(null===b)return{thinkingLevel:"off",model:null};let e=new Map(a.map(a=>[a.id,a])),f=b?e.get(b):void 0;for(f??=a[a.length-1];f&&(void 0===c||void 0===d);){if(void 0===c&&"thinking_level_change"===f.type&&(c=f.thinkingLevel),void 0===d&&"model_change"===f.type)d={provider:f.provider,modelId:f.modelId};else if(void 0===d&&"message"===f.type&&"assistant"===f.message.role){let a=f.message;"string"==typeof a.provider&&"string"==typeof a.model&&(d={provider:a.provider,modelId:a.model})}f=f.parentId?e.get(f.parentId):void 0}return{thinkingLevel:c??"off",model:d??null}}(a,b)}}function F(a){let b=Date.parse(a);return Number.isNaN(b)?void 0:b}function G(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}d()}catch(a){d(a)}})},41761:(a,b,c)=>{"use strict";c.d(b,{kU:()=>d});let d=["read","grep","find","ls"]},45902:(a,b,c)=>{"use strict";c.d(b,{$:()=>f});var d=c(76760),e=c.n(d);function f(a,b=process.platform){let c="win32"===b?e().win32.normalize(a):e().posix.normalize(a);return"win32"===b?c.toLowerCase():c}},58864:(a,b,c)=>{"use strict";c.d(b,{Eb:()=>j,W3:()=>i,gB:()=>h,pJ:()=>g,uK:()=>f});var d=c(33873);let e=/^[a-zA-Z]:[\\/]/;function f(a){return e.test(a)||a.startsWith("\\\\")||a.startsWith("//")}function g(a){let b=a.trim().match(/^([a-zA-Z]):(?:[\\/](.*))?$/);if(b){let a=b[1].toLowerCase(),c=(b[2]??"").replace(/\\/g,"/");return c?`/mnt/${a}/${c}`:`/mnt/${a}`}return a}function h(a){return a&&"win32"===process.platform?(0,d.normalize)(a):a}function i(a){return a.replace(/\\/g,"/")}function j(a,b){return a===b||!!a&&!!b&&"win32"===process.platform&&h(a).toLowerCase()===h(b).toLowerCase()}},67264:(a,b,c)=>{"use strict";c.d(b,{CS:()=>l,MJ:()=>k,Md:()=>g,UY:()=>h,g0:()=>j,wI:()=>i});let d="normal",e="full",f="auto";function g(){return{collaborationMode:d,tokenMode:e,toolApprovalMode:f,permissionRules:{allow:[],ask:[],deny:[]}}}function h(a){return"normal"===a||"plan"===a||"goal"===a?a:d}function i(a){return"economy"===a||"delivery"===a||"full"===a?a:e}function j(a){return"ask"===a||"auto"===a||"yolo"===a?a:f}let k=new Set(["read","grep","find","ls","bash_output","get_tools","get_commands","get_session_stats"]);function l(a){if(!a)return"";let b=a.replace(/^\uFEFF/,""),c=b;if((b=b.replace(/<(?:economy|delivery|goal)-profile>\n?[\s\S]*?<\/(?:economy|delivery|goal)-profile>\n*(?:Goal:\s*[^\n]*\n?)?/g,""))===c){let a=/^\s*<(?:economy|delivery|goal)-profile>\s*/.exec(b);if(a){let c=b.slice(a[0].length).match(/^[^.]*?\.\s+([\s\S]*)$/);b=c?c[1]:""}}return(b=b.replace(/^You are in PLAN MODE\.[\s\S]*?\n(?=\n|$)/,"")).replace(/^\s*\n/,"").trimStart()}},74244:(a,b,c)=>{"use strict";c.d(b,{z:()=>f});var d=c(76760),e=c.n(d);function f(a,b=process.platform){if(!a)return a;let c="win32"===b?e().win32:e().posix,d=c.normalize(a),g=c.parse(d).root.length,h=d.length;for(;h>g&&d[h-1]===c.sep;)h--;let i=d.slice(0,h);return"win32"===b?i.toLowerCase():i}},78335:()=>{},82536:(a,b,c)=>{"use strict";c.d(b,{o:()=>h,x:()=>i});var d=c(29021),e=c(33873),f=c.n(e),g=c(58864);function h(a,b){for(let c of b){let b=(0,g.uK)(a)||(0,g.uK)(c),d=b?f().win32:f(),e=b?"\\":f().sep,h=d.resolve(a),i=d.resolve(c),j=b?h.toLowerCase():h,k=b?i.toLowerCase():i,l=k.endsWith(e)?k:k+e;if(j===k||j.startsWith(l))return!0}return!1}function i(a,b){let c;try{c=(0,d.realpathSync)(a)}catch{return!1}let e=new Set;for(let a of b)try{e.add((0,d.realpathSync)(a))}catch{}return h(c,e)}},96487:()=>{}};
3
+ ${a.summary}`,timestamp:K(a.timestamp)};case"custom_message":return{role:"custom",customType:a.customType,content:a.content,display:a.display,details:a.details,timestamp:K(a.timestamp)};default:return null}}(a,c);b&&(l.push(b),m.push(a.id))}return{messages:l,entryIds:m,oldestEntryId:g[0]?.id??null,hasMore:h,...function(a,b){let c,d;if(null===b)return{thinkingLevel:"off",model:null};let e=new Map(a.map(a=>[a.id,a])),f=b?e.get(b):void 0;for(f??=a[a.length-1];f&&(void 0===c||void 0===d);){if(void 0===c&&"thinking_level_change"===f.type&&(c=f.thinkingLevel),void 0===d&&"model_change"===f.type)d={provider:f.provider,modelId:f.modelId};else if(void 0===d&&"message"===f.type&&"assistant"===f.message.role){let a=f.message;"string"==typeof a.provider&&"string"==typeof a.model&&(d={provider:a.provider,modelId:a.model})}f=f.parentId?e.get(f.parentId):void 0}return{thinkingLevel:c??"off",model:d??null}}(a,b)}}function K(a){let b=Date.parse(a);return Number.isNaN(b)?void 0:b}function L(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}d()}catch(a){d(a)}})},41761:(a,b,c)=>{"use strict";c.d(b,{kU:()=>d});let d=["read","grep","find","ls"]},45902:(a,b,c)=>{"use strict";c.d(b,{$:()=>f});var d=c(76760),e=c.n(d);function f(a,b=process.platform){let c="win32"===b?e().win32.normalize(a):e().posix.normalize(a);return"win32"===b?c.toLowerCase():c}},58864:(a,b,c)=>{"use strict";c.d(b,{Eb:()=>j,W3:()=>i,gB:()=>h,pJ:()=>g,uK:()=>f});var d=c(33873);let e=/^[a-zA-Z]:[\\/]/;function f(a){return e.test(a)||a.startsWith("\\\\")||a.startsWith("//")}function g(a){let b=a.trim().match(/^([a-zA-Z]):(?:[\\/](.*))?$/);if(b){let a=b[1].toLowerCase(),c=(b[2]??"").replace(/\\/g,"/");return c?`/mnt/${a}/${c}`:`/mnt/${a}`}return a}function h(a){return a&&"win32"===process.platform?(0,d.normalize)(a):a}function i(a){return a.replace(/\\/g,"/")}function j(a,b){return a===b||!!a&&!!b&&"win32"===process.platform&&h(a).toLowerCase()===h(b).toLowerCase()}},67264:(a,b,c)=>{"use strict";c.d(b,{CS:()=>l,MJ:()=>k,Md:()=>g,UY:()=>h,g0:()=>j,wI:()=>i});let d="normal",e="full",f="auto";function g(){return{collaborationMode:d,tokenMode:e,toolApprovalMode:f,permissionRules:{allow:[],ask:[],deny:[]}}}function h(a){return"normal"===a||"plan"===a||"goal"===a?a:d}function i(a){return"economy"===a||"delivery"===a||"full"===a?a:e}function j(a){return"ask"===a||"auto"===a||"yolo"===a?a:f}let k=new Set(["read","grep","find","ls","bash_output","get_tools","get_commands","get_session_stats"]);function l(a){if(!a)return"";let b=a.replace(/^\uFEFF/,""),c=b;if((b=b.replace(/<(?:economy|delivery|goal)-profile>\n?[\s\S]*?<\/(?:economy|delivery|goal)-profile>\n*(?:Goal:\s*[^\n]*\n?)?/g,""))===c){let a=/^\s*<(?:economy|delivery|goal)-profile>\s*/.exec(b);if(a){let c=b.slice(a[0].length).match(/^[^.]*?\.\s+([\s\S]*)$/);b=c?c[1]:""}}return(b=b.replace(/^You are in PLAN MODE\.[\s\S]*?\n(?=\n|$)/,"")).replace(/^\s*\n/,"").trimStart()}},74244:(a,b,c)=>{"use strict";c.d(b,{z:()=>f});var d=c(76760),e=c.n(d);function f(a,b=process.platform){if(!a)return a;let c="win32"===b?e().win32:e().posix,d=c.normalize(a),g=c.parse(d).root.length,h=d.length;for(;h>g&&d[h-1]===c.sep;)h--;let i=d.slice(0,h);return"win32"===b?i.toLowerCase():i}},78335:()=>{},82536:(a,b,c)=>{"use strict";c.d(b,{o:()=>h,x:()=>i});var d=c(29021),e=c(33873),f=c.n(e),g=c(58864);function h(a,b){for(let c of b){let b=(0,g.uK)(a)||(0,g.uK)(c),d=b?f().win32:f(),e=b?"\\":f().sep,h=d.resolve(a),i=d.resolve(c),j=b?h.toLowerCase():h,k=b?i.toLowerCase():i,l=k.endsWith(e)?k:k+e;if(j===k||j.startsWith(l))return!0}return!1}function i(a,b){let c;try{c=(0,d.realpathSync)(a)}catch{return!1}let e=new Set;for(let a of b)try{e.add((0,d.realpathSync)(a))}catch{}return h(c,e)}},96487:()=>{}};
@@ -14,7 +14,7 @@ ${a.inheritedParentContext}`:a.task,...b?{exactSystemPrompt:a.profileSystemPromp
14
14
  (spawning background process...)`}],details:{command:i,sessionId:h.id,spawning:!0}});let{output:o,exited:p,exitCode:q}=await a.poll(h.id,j),r=Date.now()-n;p&&a.remove(h.id);let s=m({output:o,exited:p,exitCode:q,sessionId:p?null:h.id,command:i,wallMs:r}),t={command:i,sessionId:p?null:h.id,exited:p,exitCode:p?q:null};return e&&e({content:[{type:"text",text:s}],details:t}),{content:[{type:"text",text:s}],details:t}}}),c=(0,g.defineTool)({name:"bash_io",label:"Interact with Background Process",description:'Interact with a background process started by bash. Can write text to the process\'s stdin, send Ctrl-C (use "\\u0003" as chars), or poll for new output (leave chars empty). Always waits yield_time_ms (default 5s) to collect output before returning. Use this to monitor long-running tasks, respond to prompts, or send additional commands.',parameters:h.ZUJ.Object({session_id:h.ZUJ.Integer({description:"The session_id returned by bash for the running process."}),chars:h.ZUJ.Optional(h.ZUJ.String({description:'Text to write to the process\'s stdin. Use "\\u0003" (Ctrl-C) to interrupt. Leave empty to just poll for output (no write). Defaults to empty.'})),yield_time_ms:h.ZUJ.Optional(h.ZUJ.Integer({description:"Milliseconds to wait for output after writing/polling (default: 5000, range: 250-30000)."}))}),promptSnippet:"bash_io(session_id, chars?, yield_time_ms?): poll or send input to a bash process",promptGuidelines:["`bash_io` interacts with a background process started by `bash` using its `session_id`.","Poll with empty `chars` to collect new output since the last poll.","Send input via `chars`; use `\\u0003` for Ctrl-C to interrupt the process.","If the process exited, `bash_io` reports the exit code and the process is cleaned up."],async execute(b,c,d,e){let f=c.session_id,g=c.chars??"",h=c.yield_time_ms?l(c.yield_time_ms,g?250:5e3):5e3,i=Date.now(),j=a.get(f);if(!j)throw Error(`No background process with session_id ${f}. The process may have exited and been cleaned up, or the ID is invalid. Use bash to start a new process.`);if(e){let a=""===g?"polling":"\x03"===g?"interrupting":"writing to";e({content:[{type:"text",text:`${a} process ${f} ($ ${j.command})`}],details:{sessionId:f,command:j.command,action:a}})}if(""!==g){let b=a.writeStdin(f,g);if(!b.ok)throw Error(b.error??"bash_io failed");await k(100)}let{output:n,exited:o,exitCode:p}=await a.poll(f,h),q=Date.now()-i;o&&a.remove(f);let r=m({output:n,exited:o,exitCode:p,sessionId:o?null:f,wallMs:q}),s={sessionId:o?null:f,exited:o,exitCode:o?p:null};return e&&e({content:[{type:"text",text:r}],details:s}),{content:[{type:"text",text:r}],details:s}}});return[b,c]}d()}catch(a){d(a)}})},46753:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{J8:()=>k,U6:()=>m,Vj:()=>l,o2:()=>j});var e=c(28802),f=c(75430),g=c(7048),h=c(99324),i=a([e,f,g]);[e,f,g]=i.then?(await i)():i;let n="pi-web-subagents",o=`<inline:${n}>`,p=new Set(g.st),q="pi-subagents";function j(a){return{kind:"pi-web-subagent",sessionId:a.sessionId,profile:a.profile,description:a.description,status:a.status,runInBackground:a.runInBackground,createdAt:a.createdAt,...a.completedAt?{completedAt:a.completedAt}:{},...a.error?{error:a.error}:{}}}function k(a){return"starting"===a.status||"running"===a.status?`Subagent ${a.sessionId} is ${a.status}.`:"completed"===a.status?a.result?.trim()||"Subagent completed without text output.":"aborted"===a.status?`Subagent ${a.sessionId} was stopped.`:"interrupted"===a.status?`Subagent ${a.sessionId} was interrupted before completion.`:`Subagent ${a.sessionId} failed: ${a.error??"Unknown error"}`}function l(a,b,c=()=>!0){return{name:n,hidden:!0,factory:d=>{let g;if(!c())return;let i=b().filter(a=>a.enabled),l=i.map(a=>a.name),m=l.length>0?l.join(", "):"none";d.registerTool((0,f.defineTool)({name:"Agent",label:"Agent",description:`Delegate a focused task to a configured subagent. Each subagent runs as a full, inspectable Pi session. Use background mode for independent work and foreground mode when the result is needed immediately.
15
15
 
16
16
  Available agent types:
17
- ${(g=i.filter(a=>a.enabled),0===g.length?"No subagent profiles are currently enabled.":g.map(a=>{let b=[`Tools: ${a.tools.length>0?a.tools.join(", "):"none"}`];return a.model&&b.push(`Model: ${a.model}`),`- ${a.name}: ${a.description} (${b.join("; ")})`}).join("\n"))}`,promptSnippet:"Delegate a focused task to an inspectable subagent session",promptGuidelines:["Use Agent for a focused task that benefits from an isolated context.","Use multiple background Agent calls in the same response for independent parallel work.","Do not duplicate work already delegated to a running subagent."],executionMode:"parallel",parameters:e.Type.Object({subagent_type:e.Type.Optional(e.Type.String({description:`Configured agent profile. Available types: ${m}. Default: general-purpose.`})),prompt:e.Type.String({description:"The complete task for the subagent."}),input_files:e.Type.Optional(e.Type.Array(e.Type.String(),{description:"UTF-8 text files under the session cwd to include with the task.",maxItems:h.Wv})),description:e.Type.String({description:"Short activity label shown in the UI."}),run_in_background:e.Type.Optional(e.Type.Boolean({description:"Return immediately and notify this session when complete."})),model:e.Type.Optional(e.Type.String({description:"Optional provider/modelId override."})),thinking:e.Type.Optional(e.Type.String({description:"Optional thinking level override."})),max_turns:e.Type.Optional(e.Type.Number({description:"Optional positive agent turn limit."})),inherit_context:e.Type.Optional(e.Type.Boolean({description:"Include the parent session's active conversation context."}))}),async execute(b,c,d,e,f){try{let g=await a.start({parentContext:f,parentToolCallId:b,profile:c.subagent_type??"general-purpose",task:c.prompt,...c.input_files?{inputFiles:c.input_files}:{},description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},...c.model?{model:c.model}:{},...c.thinking?{thinking:c.thinking}:{},...c.max_turns?{maxTurns:c.max_turns}:{},...void 0!==c.inherit_context?{inheritContext:c.inherit_context}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(g.run.runInBackground)return g.completion.then(b=>a.notifyParent(b)).catch(a=>{console.error("[pi-web] failed to deliver subagent completion:",a instanceof Error?a.message:a)}),{content:[{type:"text",text:`Subagent started in background. Session ID: ${g.run.sessionId}. You will be notified when it completes.`}],details:j(g.run)};let h=await g.completion;return{content:[{type:"text",text:k(h)}],details:j(h),..."failed"===h.status?{isError:!0}:{}}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}})),d.registerTool((0,f.defineTool)({name:"get_subagent_result",label:"Get agent result",description:"Check an inspectable subagent session and retrieve its latest result.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),wait:e.Type.Optional(e.Type.Boolean({description:"Wait until the subagent finishes."}))}),async execute(b,c,d){let e=await a.get(c.agent_id);if(!e)return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};for(;c.wait&&("starting"===e.status||"running"===e.status);)if(await new Promise((a,b)=>{let c=()=>{clearTimeout(e),b(Error("Result wait aborted"))},e=setTimeout(()=>{d?.removeEventListener("abort",c),a()},500);d?.aborted?c():d?.addEventListener("abort",c,{once:!0})}),!(e=await a.get(c.agent_id)))return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};return{content:[{type:"text",text:k(e)}],details:j(e),..."failed"===e.status?{isError:!0}:{}}}})),d.registerTool((0,f.defineTool)({name:"steer_subagent",label:"Steer agent",description:"Send a steering message to a currently running subagent session.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),message:e.Type.String({description:"Instruction to inject after the current tool execution."})}),async execute(b,c){try{return await a.steer(c.agent_id,c.message),{content:[{type:"text",text:`Steering message sent to ${c.agent_id}.`}],details:void 0}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}}))}}}function m(a){let b=a.extensions.find(a=>a.path===o);if(!b?.tools.has("Agent"))return a;let c=new Set(a.extensions.filter(a=>a.path!==o).filter(a=>{let b=(a.sourceInfo?.source??"").replace(/^npm:/,"").split("@")[0],c=a.path.replaceAll("\\","/").split("/");return b===q||c.some(a=>a===q)}).filter(a=>[...p].some(b=>a.tools.has(b))).map(a=>a.path));return 0===c.size?a:{...a,extensions:a.extensions.filter(a=>!c.has(a.path)),errors:a.errors.filter(a=>!c.has(a.path)&&(a.path!==o||![...c].some(b=>[...p].some(c=>a.error===`Tool "${c}" conflicts with ${b}`))))}}d()}catch(a){d(a)}})},53303:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$9:()=>h,J1:()=>i});var e=c(75430),f=c(76760),g=a([e]);function h(a,b=process.platform){let c={...a};for(let a of Object.keys(c))(function(a,b){let c="win32"===b?a.toUpperCase():a;return"PORT"===c||"NODE_ENV"===c||c.startsWith("NEXT_")})(a,b)&&delete c[a];return c}function i(a={}){let{agentBinDir:b=(0,f.join)((0,e.getAgentDir)(),"bin"),baseEnvironment:c=process.env,localOperations:d=(0,e.createLocalBashOperations)({shellPath:a.shellPath}),platform:g=process.platform}=a;return{exec(a,e,f){var i;let j,k,l,m=(i=h(f.env??c,g),j="win32"===g?Object.keys(i).find(a=>"PATH"===a.toUpperCase())??"PATH":"PATH",k="win32"===g?";":":",(l=i[j]??"").split(k).filter(Boolean).includes(b)||(i[j]=[b,l].filter(Boolean).join(k)),i);return d.exec(a,e,{...f,env:m})}}}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A4:()=>I,C4:()=>L,Fn:()=>M,HG:()=>O,OF:()=>U,_I:()=>J,d_:()=>P,iP:()=>S,l8:()=>Q,oA:()=>K});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(78970),k=c(43671),l=c(28967),m=c(18904),n=c(72498),o=c(40402),p=c(46753),q=c(7048),r=c(12568),s=c(27367),t=c(305),u=c(53303),v=c(30590),w=c(64735),x=c(36193),y=c(67264),z=c(71069),A=c(11301),B=c(4504),C=c(44271),D=a([e,f,m,n,o,p,q,r,s,t,u,w,A,C]);[e,f,m,n,o,p,q,r,s,t,u,w,A,C]=D.then?(await D)():D;let V=new Set(["agent_start","message_start","message_update","message_end","agent_end","entry_appended","session_info_changed","queue_update","prompt_done","agent_settled","auto_compaction_end","compaction_end"]),W=["read","bash","powershell","edit","write","grep","find","ls"];class X extends e.Theme{constructor(){super({thinkingXhigh:"",searchMatchText:""},{selectedBg:""},"truecolor")}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let Y=new X,Z=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function E(a,b){if(0===b.length)return[];let c=new Set(W),d=(0,t.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return[...new Set([...d,...e])]}class ${constructor(a,b){this.inner=a,this.cwd=b,this.listeners=[],this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.promptPhase=null,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.exactSystemPrompt=null,this.unsubscribe=null,this.idleTimer=null,this.subscriberCount=0,this.disposeGraceTimer=null,this.lastActivityAt=Date.now(),this.queueMirror=[],this.queueRecovery=[],this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this._alive=!0,this.approvalPolicy=(0,x.ni)((0,w.lN)().permissionRules),this.approvalMode=(0,w.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1,this.goalEngine=new B.aA,this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalContinuationInFlight=!1;const c=(0,w.lN)(a.sessionId);if(this.approvalMode=c.toolApprovalMode,this.approvalPolicy=(0,x.ni)(c.permissionRules),a.sessionFile){const b=(0,B.bo)(a.sessionFile);"idle"!==b.status&&this.goalEngine.hydrate(b)}}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}isAlive(){return this._alive}async waitUntilReady(){}isShuttingDown(){return null!==this.shutdownPromise}whenShutdown(){return this.shutdownPromise}isRunning(){return this._alive&&(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}runtimeSnapshot(){let a=this.inner.isStreaming,b=this.promptRunning,c=this.inner.isCompacting,d=this.inner.isBashRunning;return{id:this.sessionId,running:this.isRunning(),isStreaming:a,isPromptRunning:b,isCompacting:c,isBashRunning:d,phase:d?"running_command":this.promptPhase??(a||b||c?"waiting_model":null)}}start(){this.installApprovalHook(),this.goalEngine.setOnChanged(a=>{this.sessionFile&&(0,B.eG)(this.sessionFile,a),this.emit({type:"goal_state_changed",goalState:a}),S("goal_state_changed",this.sessionId,{type:"goal_state_changed",goalState:a})}),this.goalEngine.isRunning()&&this.scheduleGoalKick(),this.unsubscribe=this.inner.subscribe(a=>{("agent_end"===a.type||"message_end"===a.type||"entry_appended"===a.type||"session_info_changed"===a.type)&&(0,o.mD)(),("agent_end"===a.type||"agent_settled"===a.type||"auto_compaction_end"===a.type||"compaction_end"===a.type)&&this.resetIdleTimer(),"agent_start"===a.type&&this.goalEngine.onAgentStart(),"agent_settled"===a.type&&this.handleGoalSettled(),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),V.has(a.type)&&S(a.type,this.sessionId,a),this.emit(a),N()}),this.resetIdleTimer(),N()}loadQueueRecovery(){if(!this.sessionFile)return;let a=this.inner.getSteeringMessages(),b=this.inner.getFollowUpMessages();if(a.length||b.length){this.queueRecovery=[],this.reconcileQueue([...a],[...b]);return}this.queueRecovery=(0,k.ov)(this.sessionFile)}getGoalState(){return this.goalEngine.getState()}handleGoalSettled(){if(!this.goalEngine.isRunning())return void this.goalEngine.disarmContinuation();let a=this.inner.getLastAssistantText()??"",b=0,c=0;try{let a=this.inner.sessionManager.getEntries(),d=function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.usage;d&&(b+=(d.input??0)+(d.output??0)+(d.cacheRead??0)+(d.cacheWrite??0))}return b}(a);b=Math.max(0,d-this.goalTokensAccounted),this.goalTokensAccounted=d;let e=function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.content;if(Array.isArray(d))for(let a of d)a&&"object"==typeof a&&"toolCall"===a.type&&(b+=1)}return b}(a);c=Math.max(0,e-this.goalToolCallsAccounted),this.goalToolCallsAccounted=e}catch{}let{verdict:d}=this.goalEngine.settleTurn(a,b,c);"continue"!==d.action?this.goalEngine.disarmContinuation():this.scheduleGoalKick()}scheduleGoalKick(){if(this.goalEngine.isRunning()&&!this.goalContinuationInFlight){if(this.goalEngine.isContinuationArmed()){this.goalEngine.disarmContinuation(),this.driveGoalContinuation();return}this.inner.isStreaming||this.promptRunning||this.inner.pendingMessageCount>0||this.driveGoalContinuation()}}driveGoalContinuation(){this.goalEngine.isRunning()&&!this.goalContinuationInFlight&&(this.goalContinuationInFlight=!0,this.inner.followUp(B.LF).catch(()=>{}).finally(()=>{this.goalContinuationInFlight=!1}))}handleGoalStartCommand(a,b){let c=this.goalEngine.start(a,b);return this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,c}handleGoalStopCommand(){return this.goalEngine.stop(),this.goalTokensAccounted=0,this.goalEngine.getState()}setApprovalMode(a){this.approvalMode=a}setApprovalPolicy(a){this.approvalPolicy=a}installApprovalHook(){if(this.approvalHookInstalled||!this.inner.agent?.beforeToolCall)return;this.approvalHookInstalled=!0;let a=this.inner.agent.beforeToolCall;this.inner.agent.beforeToolCall=async b=>{let c=b.toolCall?.name??"",d=b.args,e=(0,x.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:y.MJ.has(c.toLowerCase()),args:d});if("deny"===e)return{block:!0,reason:`Denied by policy rule: ${c} is not permitted.`};if("ask"===e){let a=await this.askForApproval(c,d);if(!a.approve)return{block:!0,reason:a.reason||`Rejected by user: ${c}`}}return a?a(b):void 0}}askForApproval(a,b){return new Promise(c=>{let d=`approval-${++this.approvalSeq}`,e=setTimeout(()=>{this.pendingApprovals.delete(d),this.emit({type:"tool_approval_resolved",id:d,approve:!1,reason:`Approval request timed out after 120s: ${a}`}),c({approve:!1,reason:`Approval request timed out after 120s: ${a}`})},12e4);this.pendingApprovals.set(d,{resolve:c,timer:e,toolName:a}),this.emit({type:"tool_approval_request",id:d,toolName:a,args:function(a){if(null===a||"object"!=typeof a)return a;let b={};for(let[c,d]of Object.entries(a))if(null!=d&&"content"!==c&&"data"!==c&&"newString"!==c&&"oldString"!==c){if("string"==typeof d){b[c]=d.length>200?`${d.slice(0,200)}…`:d;continue}if("number"==typeof d||"boolean"==typeof d){b[c]=d;continue}b[c]=Array.isArray(d)?`[array:${d.length}]`:"[object]"}return b}(b)})})}resolveApproval(a,b,c){let d=this.pendingApprovals.get(a);return!!d&&(this.pendingApprovals.delete(a),clearTimeout(d.timer),d.resolve({approve:b,reason:c}),!0)}rejectAllApprovals(a){for(let[b,c]of this.pendingApprovals)this.pendingApprovals.delete(b),clearTimeout(c.timer),c.resolve({approve:!1,reason:a})}getPendingApprovals(){return Array.from(this.pendingApprovals.entries()).map(([a,b])=>({id:a,toolName:b.toolName}))}pendingRecoveryView(){return this.queueRecovery.map(({id:a,kind:b,text:c,images:d,queuedAt:e})=>({id:a,kind:b,text:c,hasImages:!!d?.length,queuedAt:e}))}persistQueue(){if(!this.sessionFile)return;let a=[...this.queueRecovery,...this.queueMirror];a.length?(0,k.pj)(this.sessionFile,a):(0,k.wx)(this.sessionFile)}hintQueueImages(a,b){this.pendingQueueHints[a].push(b?.length?b:[])}reconcileQueue(a,b){let c=(a,b)=>{if(!b)return this.queueMirror.filter(b=>b.kind===a);let c=new Set;return b.map(b=>{let d=this.queueMirror.find(d=>d.kind===a&&d.text===b&&!c.has(d));if(d)return c.add(d),d;let e=(0,k.Gc)(a,b,this.pendingQueueHints[a].shift());return c.add(e),e})};this.queueMirror=[...c("steer",a),...c("followUp",b)],this.persistQueue()}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);this.hintQueueImages(a.kind,a.images),"steer"===a.kind?await this.inner.steer(a.text,a.images):await this.inner.followUp(a.text,a.images)}ensureMirrored(a){this.queueMirror.find(b=>b.kind===a.kind&&b.text===a.text)||(this.queueMirror.push({...a}),this.pendingQueueHints[a.kind].pop())}async replaceLiveQueue(a,b){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))await this.requeueEntry(b);for(let a of b)await this.requeueEntry(a);let c={steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]};return this.reconcileQueue(c.steering,c.followUp),c}async withQueueMutation(a){let b,c=this.queueMutationTail;this.queueMutationTail=new Promise(a=>{b=a}),await c;try{return await a()}finally{b()}}async mutateLiveQueue(a,b){return this.withQueueMutation(async()=>{let c=this.queueMirror.filter(a=>"steer"===a.kind),d=this.queueMirror.filter(a=>"followUp"===a.kind),e=b("steer"===a?c:d),f=await this.replaceLiveQueue(c,d);return{value:e,queues:f}})}validateQueueEntries(a){for(let b of a){if("steer"!==b.kind&&"followUp"!==b.kind||"string"!=typeof b.text)continue;let a=(0,j.kc)(b.images);if(a)throw Error(a)}}runAgentContinue(){if(this.inner.isStreaming||this.inner.isBashRunning||this.promptRunning)return;let a=[...this.queueMirror];0!==a.length&&(this.queueMirror=[],this.persistQueue(),this.promptRunning=!0,this.promptPhase="waiting_model",this.bootstrapQueuedRun(a))}async bootstrapQueuedRun(a){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))try{await this.inner.prompt(b.text,b.images?.length?{images:b.images}:void 0)}catch(a){this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),(0,o.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),this.emit({type:"prompt_done"});return}this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),this.emit({type:"prompt_done"})}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}setExactSystemPrompt(a){this.exactSystemPrompt=a,this.applyExactSystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),this.extensionsBound)?(this.applyForcedEmptySystemPrompt(),Promise.resolve()):(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{if(!this._alive)return;let a=this.createExtensionUiContext();if("function"==typeof this.inner.bindExtensions){let b=this.inner.bindExtensions;await b.call(this.inner,{uiContext:a,mode:"rpc",commandContextActions:this.createExtensionCommandContextActions(),shutdownHandler:()=>this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in pi-web."}),onError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error})})}else this.inner.extensionRunner.setUIContext?.(a,"rpc");this.extensionsBound=!0,this.applyForcedEmptySystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`)})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}static{this.EXTENSION_BIND_TIMEOUT_MS=15e3}async waitForExtensionsBound(){let a=this.extensionBindingPromise;if(a)try{let b=new Promise((b,c)=>{let d=setTimeout(()=>c(Error("Extension binding timed out; continuing without waiting")),$.EXTENSION_BIND_TIMEOUT_MS);a.finally(()=>clearTimeout(d))});await Promise.race([a,b])}catch{}this.extensionBindingError&&console.warn("[pi-web] extension binding failed, continuing:",this.extensionBindingError)}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a}applyForcedEmptySystemPrompt(){this.inner.agent.state&&(this.forceEmptySystemPrompt?this.inner.agent.state.systemPrompt="":null!==this.exactSystemPrompt&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt))}applyExactSystemPrompt(){!this.forceEmptySystemPrompt&&null!==this.exactSystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt)}emit(a){for(let b of this.listeners)try{b(a)}catch(a){console.error(`[pi-web] session ${this.sessionId} event listener threw:`,a instanceof Error?a.message:a)}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.isRunning()&&(this.inner.isBashRunning&&this.inner.abortBash(),this.inner.abort().catch(()=>{})),this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},18e5)}touch(){this.lastActivityAt=Date.now(),this.cancelPendingDispose()}hasSubscribers(){return this.subscriberCount>0}get activityTimestamp(){return this.lastActivityAt}cancelPendingDispose(){this.disposeGraceTimer&&(clearTimeout(this.disposeGraceTimer),this.disposeGraceTimer=null)}scheduleDisposeIfIdle(){this.cancelPendingDispose(),!(this.subscriberCount>0||this.isRunning())&&this._alive&&(this.disposeGraceTimer=setTimeout(()=>{this.disposeGraceTimer=null,!(this.subscriberCount>0||this.isRunning())&&this._alive&&this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down unwatched session:",a instanceof Error?a.message:a)})},6e4))}persistSessionFileIfMissing(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,h.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";try{(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}catch(c){if("EEXIST"===c.code||(0,h.existsSync)(b)){a.flushed=!0,(0,o.O8)(this.inner.sessionId,b);return}throw c}a.flushed=!0,(0,o.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.subscriberCount+=1,this.cancelPendingDispose(),this.pendingUiRequests.values()))a(b);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1),this.subscriberCount>0&&(this.subscriberCount-=1),this.scheduleDisposeIfIdle()}}onDestroy(a){this.onDestroyCallback=a}async send(a){if(!this._alive)throw Error("Session is shutting down");this.touch(),this.resetIdleTimer();let b=a.type;if("prompt"===b||"steer"===b||"follow_up"===b||"requeue_at"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b)}switch(this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),b){case"prompt":{if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");let b=a.images,c=a.streamingBehavior;return c&&this.inner.isStreaming&&this.hintQueueImages("followUp"===c?"followUp":"steer",b),this.promptRunning=!0,this.promptPhase=String(a.message??"").trimStart().startsWith("/")?"running_command":"waiting_model",N(),this.inner.prompt(a.message,{...b?.length?{images:b}:{},...c?{streamingBehavior:c}:{},source:"rpc"}).then(()=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),c||this.emit({type:"prompt_done"}),N()}).catch(a=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),(0,o.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),c||this.emit({type:"prompt_done"}),N()}),null}case"abort":return await this.inner.abort(),null;case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.promptRunning,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,phase:this.runtimeSnapshot().phase,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.pendingMessageCount,queuedMessages:{steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]},pendingRecovery:this.pendingRecoveryView(),contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:this.inner.agent.state?.systemPrompt??"",thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),goalState:this.goalEngine.getState()}}case"goal_start":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_start requires a non-empty goalText");let c=a.tokenBudget,d="number"==typeof c&&Number.isFinite(c)&&c>0?Math.floor(c):null,e=this.handleGoalStartCommand(b,d);return this.scheduleGoalKick(),{goalState:e}}case"goal_pause":try{this.inner.clearQueue(),this.queueMirror=[],this.persistQueue()}catch{}return{goalState:this.goalEngine.pause()};case"goal_resume":{let a=this.goalEngine.resume();return"running"===a.status&&(this.goalEngine.armContinuation(),this.scheduleGoalKick()),{goalState:a}}case"goal_stop":try{this.inner.clearQueue(),this.queueMirror=[],this.persistQueue()}catch{}return{goalState:this.handleGoalStopCommand()};case"goal_edit":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_edit requires a non-empty goalText");let c=this.goalEngine.edit(b);return"running"===c.status&&this.scheduleGoalKick(),{goalState:c}}case"get_goal_state":return{goalState:this.goalEngine.getState()};case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(!d)try{await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)}catch{d=void 0}if(!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d),(0,l.k)(),(0,o.mD)(),{id:d.id,provider:d.provider}}case"fork":{let b,c=a.entryId,d=this.inner.sessionManager,f=this.inner.sessionFile;if(!d.isPersisted())return{cancelled:!0};if(!f)throw Error("Persisted session is missing a session file");let g=d.getEntry(c);if(!g)throw Error("Invalid entry ID for forking");let h=d.getSessionDir();if(g.parentId){let a=e.SessionManager.open(f,h).createBranchedSession(g.parentId);if(!a)throw Error("Failed to create forked session");b=a}else{let a=e.SessionManager.create(d.getCwd(),h);a.newSession({parentSession:f}),b=a.getSessionFile()}let i=e.SessionManager.open(b,h).getSessionId();return(0,o.O8)(i,b),(0,o.mD)(),await this.shutdown(),{cancelled:!1,newSessionId:i}}case"navigate_tree":return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,o.mD)(),null}case"compact":try{return await this.inner.compact(a.customInstructions)}finally{(0,o.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return this.inner.setSessionName(b),(0,o.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"clear_queue":return this.withQueueMutation(async()=>(this.queueMirror=[],this.pendingQueueHints={steer:[],followUp:[]},this.persistQueue(),this.inner.clearQueue()));case"move_queue":{let b=a.kind,c=Number(a.fromIndex),d=Number(a.toIndex);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!Number.isInteger(d))throw Error("move_queue requires a queue kind and integer indexes");let{queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length||d<0||d>=a.length)throw Error("move_queue index out of range");let[b]=a.splice(c,1);a.splice(d,0,b)});return e}case"recall_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("recall_queue_item requires a queue kind and integer index");let{value:d,queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("recall_queue_item index out of range");let[b]=a.splice(c,1);return b});return{entry:{text:d.text,images:d.images??[]},...e}}case"requeue_at":{let b=a.kind,c=Number(a.index),d=a.text;if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!d?.trim())throw Error("requeue_at requires a queue kind, integer index, and text");let e=a.images,{queues:f}=await this.mutateLiveQueue(b,a=>{if(c<0||c>a.length)throw Error("requeue_at index out of range");a.splice(c,0,(0,k.Gc)(b,d,e))});return f}case"remove_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("remove_queue_item requires a queue kind and integer index");let{queues:d}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("remove_queue_item index out of range");a.splice(c,1)});return d}case"resolve_recovery":return this.withQueueMutation(async()=>{let b=new Set(a.keep??[]),c=new Set(a.discard??[]),d=!0===a.continueRun,e=0;for(let a of this.queueRecovery)b.has(a.id)&&(await this.requeueEntry(a),this.ensureMirrored(a),e+=1);return this.queueRecovery=this.queueRecovery.filter(a=>!b.has(a.id)&&!c.has(a.id)),this.persistQueue(),d&&e>0&&this.runAgentContinue(),{remaining:this.pendingRecoveryView(),kept:e}});case"export_queue":return{live:this.queueMirror.map(a=>({...a})),recovery:this.queueRecovery.map(a=>({...a}))};case"import_queue":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("import_queue requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b){if("steer"!==a.kind&&"followUp"!==a.kind||"string"!=typeof a.text)continue;let b=(0,k.Gc)(a.kind,a.text,a.images);await this.requeueEntry(b),this.ensureMirrored(b),c+=1}return this.persistQueue(),{imported:c,steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]}});case"stage_recovery":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("stage_recovery requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b)("steer"===a.kind||"followUp"===a.kind)&&"string"==typeof a.text&&(this.queueRecovery.push((0,k.Gc)(a.kind,a.text,a.images)),c+=1);return this.persistQueue(),{staged:c,pendingRecovery:this.pendingRecoveryView()}});case"steer":{let b=a.images;this.hintQueueImages("steer",b),this.promptPhase="waiting_model",N();try{await this.inner.steer(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,N()}return null}case"follow_up":{let b=a.images;this.hintQueueImages("followUp",b),this.promptPhase="waiting_model",N();try{await this.inner.followUp(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,N()}return null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({name:a.name,description:a.description,active:b.has(a.name)}))}case"get_commands":{let a=[];for(let b of this.inner.extensionRunner.getRegisteredCommands())a.push({name:b.invocationName,description:b.description,source:"extension",sourceInfo:b.sourceInfo});for(let b of this.inner.promptTemplates)a.push({name:b.name,description:b.description,source:"prompt",sourceInfo:b.sourceInfo});for(let b of this.inner.resourceLoader.getSkills().skills)a.push({name:`skill:${b.name}`,description:b.description,source:"skill",sourceInfo:b.sourceInfo});return{commands:a}}case"set_tools":{let b=a.toolNames;return this.setForceEmptySystemPrompt(0===b.length),this.inner.setActiveToolsByName(E(this.inner,b)),this.applyForcedEmptySystemPrompt(),null}case"reload":{let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload(),this.inner.setActiveToolsByName(E(this.inner,a)),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),this.applyForcedEmptySystemPrompt(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"resolve_approval":return{resolved:this.resolveApproval(a.id,!!a.approve,a.reason)};case"set_approval_mode":{let b=a.mode;if("ask"!==b&&"auto"!==b&&"yolo"!==b)throw Error(`Invalid approval mode: ${String(b)}`);return this.setApprovalMode(b),null}case"set_approval_policy":{let b=a.policy;return this.setApprovalPolicy((0,x.ni)(b)),null}case"get_approval_state":return{mode:this.approvalMode,pending:this.getPendingApprovals()};case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"bash":{if(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.settingsManager?.getShellPath?.(),c=(0,u.J1)("string"==typeof b&&b?{shellPath:b}:{}),d=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:c});try{let a=await d;return this.persistSessionFileIfMissing(),a}finally{this.resetIdleTimer(),(0,o.mD)(),N()}}case"abort_bash":return this.inner.abortBash(),N(),null;default:throw Error(`Unsupported command: ${b}`)}}destroy(){if(!this._alive)return;for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.cancelPendingDispose(),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.sessionFile&&this.goalEngine.hasActiveGoal()&&(0,B.eG)(this.sessionFile,this.goalEngine.getState()),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear(),this.rejectAllApprovals("Session closed while approval was pending");let a=()=>{try{this.inner.dispose()}finally{try{this.onDestroyCallback?.()}finally{N()}}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():Promise.resolve(b.call(this.inner.extensionRunner,{type:"session_shutdown",reason:"dispose"})).catch(a=>{console.error("[pi-web] session_shutdown before dispose failed:",a instanceof Error?a.message:a)}).finally(a)}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}this.sessionShutdownEmitted||(this.sessionShutdownEmitted=!0,await this.inner.extensionRunner.emit?.({type:"session_shutdown",reason:"quit"}))}finally{this.destroy()}})(),this.shutdownPromise):void 0}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return z.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return z.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):z.p1}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){let c=this.activeCustomUis.get(a);if(c&&"string"==typeof b)try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=(0,g.randomUUID)(),d=this.getCustomUiWidth(b);return new Promise(b=>{let e=!1,f=(0,z.TQ)(()=>{let a=this.activeCustomUis.get(c);a&&this.emitCustomUiRender(c,a)},d),g=a=>{e||(e=!0,b(a))},h=a=>{this.activeCustomUis.has(c)?this.closeCustomUi(c,a):g(a)};Promise.resolve().then(()=>a(f,Y,Z,h)).then(a=>{if(e){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void g(void 0);let b={component:a,width:d,resolve:a=>g(a),settled:!1};this.activeCustomUis.set(c,b),this.emitCustomUiRender(c,b)}).catch(a=>{e||(this.emit({type:"extension_error",extensionPath:`custom-ui:${c}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),g(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=(0,g.randomUUID)(),h={type:"extension_ui_request",id:f,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise(a=>{let g,i=()=>{g&&clearTimeout(g),e?.removeEventListener("abort",k),this.pendingUiRequests.delete(f),this.pendingUiResponses.delete(f)},j=b=>{i(),a(b)},k=()=>j(b);d&&(g=setTimeout(()=>j(b),d)),e?.addEventListener("abort",k,{once:!0}),this.pendingUiRequests.set(f,h),this.pendingUiResponses.set(f,{resolve:a=>j(c(a)),cancel:()=>j(b)}),this.emit(h)})}createExtensionUiContext(){return{select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return Y},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in pi-web extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}syncProjectTrust(){this.inner.settingsManager.setProjectTrusted((0,n.Y1)(this.cwd,(0,e.getAgentDir)()).trusted)}createExtensionCommandContextActions(){return{waitForIdle:async()=>{let a=this.inner.agent;await a.waitForIdle?.()},newSession:async()=>({cancelled:!0}),fork:async()=>({cancelled:!0}),navigateTree:async(a,b)=>({cancelled:(await this.inner.navigateTree(a,{summarize:b?.summarize})).cancelled}),switchSession:async()=>({cancelled:!0}),reload:async()=>{this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}}),this.applyForcedEmptySystemPrompt()}}}}function F(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>Promise.allSettled(Array.from(globalThis.__piSessions?.values()??[],a=>a.shutdown()));process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",()=>{a().finally(()=>process.exit(130))}),process.once("SIGTERM",()=>{a().finally(()=>process.exit(143))})}return globalThis.__piSessions}function G(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}function H(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function I(a){return F().get(a)}function J(a){let b=G(a);return!!H().has(b)||Array.from(F().values()).some(a=>G(a.cwd)===b&&a.isRunning())}async function K(a){let b=G(a),c=Array.from(F().values()).filter(a=>G(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function L(){let a=[];for(let[b,c]of F()){if(!c.isAlive())continue;let d=c.runtimeSnapshot();d.running&&a.push({...d,id:d.id||b})}return a}function M(a){return globalThis.__piRunningListeners??=new Set,globalThis.__piRunningListeners.add(a),()=>globalThis.__piRunningListeners?.delete(a)}let _="";function N(){let a=globalThis.__piRunningListeners;if(!a||0===a.size){_="";return}let b=L(),c=JSON.stringify(b);if(c!==_)for(let d of(_=c,a))try{d(b)}catch{}}function O(){return L().map(a=>a.id)}let aa=(0,r.s)({getSession:a=>F().get(a),registerSession:(a,b)=>{let c,d,e;c=new $(a,a.sessionManager.getCwd()),b?.chatOnly?c.setForceEmptySystemPrompt(!0):b?.exactSystemPrompt&&c.setExactSystemPrompt(b.exactSystemPrompt),c.start(),d=a.sessionId,e=F(),c.onDestroy(()=>e.delete(d)),e.set(d,c)},reopenSession:async(a,b)=>(await U(a,b,void 0)).session,resolveSessionPath:o.os,invalidateSessionList:o.mD,notifyRunningChange:N,isBuiltInSubagentsEnabled:s.N});function P(a){return aa.get(a)}function Q(a){return globalThis.__piSessionBusListeners??=new Set,globalThis.__piSessionBusListeners.add(a),()=>globalThis.__piSessionBusListeners?.delete(a)}let ab=new Map;function R(a){let b=globalThis.__piSessionBusListeners;if(b&&0!==b.size)for(let c of b)try{c(a)}catch{}}function S(a,b,c){let d=globalThis.__piSessionBusListeners;if(!d||0===d.size)return;if("message_update"!==a)return void R({type:a,sessionId:b,payload:c});let e=ab.get(b),f={type:a,sessionId:b,payload:c};e?(clearTimeout(e.timer),e.event=f):ab.set(b,{event:f,timer:setTimeout(()=>{let a=ab.get(b);a&&(ab.delete(b),R(a.event))},80)})}function T(a,b){let c=Date.now(),{provider:d,modelId:e,sessionId:f}=b,g=a.result.bind(a);a.result=async()=>{let a,b,h,i,j,k=await g();return a=Date.now()-c,b="error"===k.stopReason||"aborted"===k.stopReason,h=k.errorMessage?.trim(),j=(i=h?.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b/))?Number(i[1]??i[2]):void 0,(0,A.wF)({level:b?"error":"info",source:"model-call",provider:d,model:e,sessionId:f,...void 0!==j?{statusCode:j}:{},message:b?`模型调用失败 ${d}/${e}${h?`:${h}`:""}`:`模型调用成功 ${d}/${e}`,details:b?void 0:`耗时 ${a}ms`}),k};let h=a[Symbol.asyncIterator].bind(a);return a[Symbol.asyncIterator]=()=>{let a=h();return{next:()=>a.next().catch(a=>{throw(0,A.wF)({level:"error",source:"model-call",provider:d,model:e,sessionId:f,message:`模型调用传输错误 ${d}/${e}:${a instanceof Error?a.message:String(a)}`}),a})}},a}async function U(a,b,d,f={}){let g,h,i,{toolNames:j,initialModel:k,thinkingLevel:r}=f,t=F(),u=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),w=t.get(a);if(w?.isAlive()&&!w.isShuttingDown())return{session:w,realSessionId:a};if(w){let a=w.whenShutdown();a&&await Promise.race([a,new Promise(a=>setTimeout(a,1e4))])}let x=u.get(a);if(x)return x;if(b)g=e.SessionManager.open(b,void 0);else{if(!d)throw Error("cwd is required for a new session");g=e.SessionManager.create(d,void 0)}let y=g.getCwd(),z=b?(0,q.ph)(g.getEntries()):null,A=(h=H(),i=G(y),h.set(i,(h.get(i)??0)+1),()=>{let a=(h.get(i)??1)-1;a>0?h.set(i,a):h.delete(i)}),B=new AbortController,D=setTimeout(()=>B.abort(),25e3),I=(async()=>{(0,e.initTheme)();let b=(0,e.getAgentDir)(),d=z?.tools;z||void 0===j||(d=0===j.length?[]:void 0);let f=z?void 0:(0,n.Fk)(y,b),h=await (0,e.createAgentSessionServices)({cwd:y,agentDir:b,modelRuntimeSignal:B.signal,resourceLoaderOptions:z?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,appendSystemPrompt:z.appendSystemPrompt}:{extensionFactories:[(0,p.Vj)(aa.extensionRuntime,()=>(0,q.IR)(y),s.N)],extensionsOverride:a=>(0,p.U6)(a)},...f?{resourceLoaderReloadOptions:f}:{}}),{createAsyncBashTools:i}=await Promise.resolve().then(c.bind(c,44271)),u=new C.B,w=i(u),x=await (0,m.py)(h.modelRuntime,h.settingsManager.getEnabledModels(),{signal:B.signal}),A=h.settingsManager.getDefaultProvider(),D=h.settingsManager.getDefaultModel(),G=g.getBranch().some(a=>"message"===a.type)?{scopedModels:[...x.scopedModels]}:(0,m.IR)(x,{...k?{requestedModel:k}:{},...A&&D?{defaultModel:{provider:A,modelId:D}}:{},...r?{thinkingLevel:r}:{}}),{session:H}=await (0,e.createAgentSessionFromServices)({services:h,sessionManager:g,...G.model?{model:G.model}:{},...G.thinkingLevel?{thinkingLevel:G.thinkingLevel}:{},...G.scopedModels.length>0?{scopedModels:G.scopedModels}:{},...void 0!==d?{tools:d}:{},customTools:w}),I=u.cleanup.bind(u);try{let b=H.agent,c=b.streamFunction;b.streamFunction=(b,d,e)=>{let f=c(b,d,e);return f instanceof Promise?f.then(c=>T(c,{provider:b.provider,modelId:b.id,sessionId:a})):T(f,{provider:b.provider,modelId:b.id,sessionId:a})},(await (0,v.o)(h.settingsManager,{...k?{model:k}:{},...r?{thinkingLevel:r}:{}},{...H.model?{model:{provider:H.model.provider,modelId:H.model.id}}:{},thinkingLevel:H.agent.state?.thinkingLevel??"off",supportsThinking:H.supportsThinking()})).modelDefaultChanged&&(0,l.k)(),!z&&j&&j.length>0&&H.setActiveToolsByName(E(H,j));let d=new $(H,y);j?.length===0||z?.tools.length===0?d.setForceEmptySystemPrompt(!0):z&&z.appendSystemPrompt.length>0&&d.setExactSystemPrompt(z.appendSystemPrompt[0]),d.start(),d.loadQueueRecovery();let e=H.sessionId,f=H.sessionFile;return f&&(0,o.O8)(e,f),d.persistSessionFileIfMissing(),d.onDestroy(()=>{I(),t.delete(e)}),t.set(e,d),d.beginExtensionBinding({forceEmptySystemPrompt:j?.length===0}),!function(){let a=F();if(a.size<=12)return;let b=Array.from(a.entries()).filter(([,a])=>a.isAlive()&&!a.isRunning()&&!a.hasSubscribers()).sort((a,b)=>a[1].activityTimestamp-b[1].activityTimestamp),c=a.size-12;for(let[d,e]of b){if(c<=0)break;a.has(d)&&(console.log(`[pi-web] evicting idle unwatched session ${d} (registry cap 12)`),e.shutdown().catch(a=>{console.error(`[pi-web] failed to evict session ${d}:`,a instanceof Error?a.message:a)}),c-=1)}}(),{session:d,realSessionId:e}}catch(a){try{H.dispose()}catch{}try{I()}catch{}throw a}})().finally(()=>{clearTimeout(D),u.delete(a),A()});return u.set(a,I),I}d()}catch(a){d(a)}})},64735:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{S3:()=>k,lN:()=>j});var e=c(6999),f=c(67264),g=c(36193),h=a([e]);e=(h.then?(await h)():h)[0];let l="modes",m="modesPerSession";function i(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let b=a.permissionRules,c=(0,g.kP)((0,g.ni)(b));return{collaborationMode:(0,f.UY)(a.collaborationMode),tokenMode:(0,f.wI)(a.tokenMode),toolApprovalMode:(0,f.g0)(a.toolApprovalMode),permissionRules:{allow:Array.isArray(c.allow)?c.allow:[],ask:Array.isArray(c.ask)?c.ask:[],deny:Array.isArray(c.deny)?c.deny:[]}}}function j(a){let b=(0,f.Md)(),c=(0,e.Tu)();if(a){let b=c[m];if(b&&"object"==typeof b&&!Array.isArray(b)){let c=i(b[a]);if(c)return c}}return i(c[l])??b}async function k(a,b){let c={collaborationMode:(0,f.UY)(a.collaborationMode),tokenMode:(0,f.wI)(a.tokenMode),toolApprovalMode:(0,f.g0)(a.toolApprovalMode),permissionRules:a.permissionRules};await (0,e.o$)(a=>{if(b){let d=a[m]??{};d[b]=c,a[m]=d}else a[l]=c;return{settings:a}})}d()}catch(a){d(a)}})},71069:(a,b,c)=>{c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>i,Y1:()=>g,er:()=>h});var e=c(75430),f=a([e]);function g(a,b){return a&&(0,e.hasTrustRequiringProjectResources)(a)?{requiresTrust:!0,trusted:!0===new e.ProjectTrustStore(b).get(a)}:{requiresTrust:!1,trusted:!0}}function h(a,b){let c=g(a,b);return c.requiresTrust?(new e.ProjectTrustStore(b).set(a,!0),{requiresTrust:!0,trusted:!0}):c}function i(a,b){if(!g(a,b).requiresTrust)return;let c=new e.ProjectTrustStore(b);return{resolveProjectTrust:async()=>!0===c.get(a)}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},78970:(a,b,c)=>{c.d(b,{kc:()=>d});function d(a){if(void 0===a)return null;if(!Array.isArray(a))return"images must be an array";if(a.length>10)return"A message can include at most 10 images";for(let b of a)if(!function(a){var b;if(!a||"object"!=typeof a||"image"!==a.type||"string"!=typeof a.data||"string"!=typeof a.mimeType||(b=a.mimeType,!/^image\/[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*$/.test(b)))return!1;let c=function(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b,d=null;for(let b=0;b<c;b+=1){var e;let c=(e=a.charCodeAt(b))>=65&&e<=90?e-65:e>=97&&e<=122?e-97+26:e>=48&&e<=57?e-48+52:43===e?62:47===e?63:null;if(null===c)return null;d=c}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return 2===b&&d%16!=0||1===b&&d%4!=0?null:a.length/4*3-b}(a.data);return null!==c&&c<=0xa00000}(b))return"Each image must be valid base64 image data with an image MIME type and be 10MB or smaller";return null}},99324:(a,b,c)=>{c.d(b,{Wv:()=>h,jN:()=>j,vH:()=>i});var d=c(29021),e=c(33873),f=c(82536),g=c(58864);let h=8;function i(a,b){if(b.length>h)throw Error(`Agent input_files accepts at most ${h} files`);let c=(0,d.realpathSync)(a),i=new Set([c]),j=new TextDecoder("utf-8",{fatal:!0}),k=new Set,l=[],m=0;for(let h of b){let b,n;if(!h.trim())throw Error("Agent input_files paths must not be empty");try{b=(0,d.realpathSync)((0,e.resolve)(a,h))}catch{throw Error(`Agent input file does not exist: ${h}`)}if(!(0,f.o)(b,i))throw Error(`Agent input file is outside the session cwd: ${h}`);if(!(0,d.statSync)(b).isFile())throw Error(`Agent input path is not a file: ${h}`);if(k.has(b))continue;k.add(b);let o=(0,d.readFileSync)(b);if((m+=o.byteLength)>524288)throw Error("Agent input_files exceeds the 524288-byte total limit");try{n=j.decode(o)}catch{throw Error(`Agent input file is not valid UTF-8 text: ${h}`)}l.push({path:(0,g.W3)((0,e.relative)(c,b)),content:n})}return l}function j(a,b){if(0===b.length)return a;let c=b.map(a=>`<document path=${JSON.stringify(a.path)}>
17
+ ${(g=i.filter(a=>a.enabled),0===g.length?"No subagent profiles are currently enabled.":g.map(a=>{let b=[`Tools: ${a.tools.length>0?a.tools.join(", "):"none"}`];return a.model&&b.push(`Model: ${a.model}`),`- ${a.name}: ${a.description} (${b.join("; ")})`}).join("\n"))}`,promptSnippet:"Delegate a focused task to an inspectable subagent session",promptGuidelines:["Use Agent for a focused task that benefits from an isolated context.","Use multiple background Agent calls in the same response for independent parallel work.","Do not duplicate work already delegated to a running subagent."],executionMode:"parallel",parameters:e.Type.Object({subagent_type:e.Type.Optional(e.Type.String({description:`Configured agent profile. Available types: ${m}. Default: general-purpose.`})),prompt:e.Type.String({description:"The complete task for the subagent."}),input_files:e.Type.Optional(e.Type.Array(e.Type.String(),{description:"UTF-8 text files under the session cwd to include with the task.",maxItems:h.Wv})),description:e.Type.String({description:"Short activity label shown in the UI."}),run_in_background:e.Type.Optional(e.Type.Boolean({description:"Return immediately and notify this session when complete."})),model:e.Type.Optional(e.Type.String({description:"Optional provider/modelId override."})),thinking:e.Type.Optional(e.Type.String({description:"Optional thinking level override."})),max_turns:e.Type.Optional(e.Type.Number({description:"Optional positive agent turn limit."})),inherit_context:e.Type.Optional(e.Type.Boolean({description:"Include the parent session's active conversation context."}))}),async execute(b,c,d,e,f){try{let g=await a.start({parentContext:f,parentToolCallId:b,profile:c.subagent_type??"general-purpose",task:c.prompt,...c.input_files?{inputFiles:c.input_files}:{},description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},...c.model?{model:c.model}:{},...c.thinking?{thinking:c.thinking}:{},...c.max_turns?{maxTurns:c.max_turns}:{},...void 0!==c.inherit_context?{inheritContext:c.inherit_context}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(g.run.runInBackground)return g.completion.then(b=>a.notifyParent(b)).catch(a=>{console.error("[pi-web] failed to deliver subagent completion:",a instanceof Error?a.message:a)}),{content:[{type:"text",text:`Subagent started in background. Session ID: ${g.run.sessionId}. You will be notified when it completes.`}],details:j(g.run)};let h=await g.completion;return{content:[{type:"text",text:k(h)}],details:j(h),..."failed"===h.status?{isError:!0}:{}}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}})),d.registerTool((0,f.defineTool)({name:"get_subagent_result",label:"Get agent result",description:"Check an inspectable subagent session and retrieve its latest result.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),wait:e.Type.Optional(e.Type.Boolean({description:"Wait until the subagent finishes."}))}),async execute(b,c,d){let e=await a.get(c.agent_id);if(!e)return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};for(;c.wait&&("starting"===e.status||"running"===e.status);)if(await new Promise((a,b)=>{let c=()=>{clearTimeout(e),b(Error("Result wait aborted"))},e=setTimeout(()=>{d?.removeEventListener("abort",c),a()},500);d?.aborted?c():d?.addEventListener("abort",c,{once:!0})}),!(e=await a.get(c.agent_id)))return{content:[{type:"text",text:`Subagent not found: ${c.agent_id}`}],details:void 0,isError:!0};return{content:[{type:"text",text:k(e)}],details:j(e),..."failed"===e.status?{isError:!0}:{}}}})),d.registerTool((0,f.defineTool)({name:"steer_subagent",label:"Steer agent",description:"Send a steering message to a currently running subagent session.",parameters:e.Type.Object({agent_id:e.Type.String({description:"Subagent session ID."}),message:e.Type.String({description:"Instruction to inject after the current tool execution."})}),async execute(b,c){try{return await a.steer(c.agent_id,c.message),{content:[{type:"text",text:`Steering message sent to ${c.agent_id}.`}],details:void 0}}catch(a){return{content:[{type:"text",text:a instanceof Error?a.message:String(a)}],details:void 0,isError:!0}}}}))}}}function m(a){let b=a.extensions.find(a=>a.path===o);if(!b?.tools.has("Agent"))return a;let c=new Set(a.extensions.filter(a=>a.path!==o).filter(a=>{let b=(a.sourceInfo?.source??"").replace(/^npm:/,"").split("@")[0],c=a.path.replaceAll("\\","/").split("/");return b===q||c.some(a=>a===q)}).filter(a=>[...p].some(b=>a.tools.has(b))).map(a=>a.path));return 0===c.size?a:{...a,extensions:a.extensions.filter(a=>!c.has(a.path)),errors:a.errors.filter(a=>!c.has(a.path)&&(a.path!==o||![...c].some(b=>[...p].some(c=>a.error===`Tool "${c}" conflicts with ${b}`))))}}d()}catch(a){d(a)}})},53303:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{$9:()=>h,J1:()=>i});var e=c(75430),f=c(76760),g=a([e]);function h(a,b=process.platform){let c={...a};for(let a of Object.keys(c))(function(a,b){let c="win32"===b?a.toUpperCase():a;return"PORT"===c||"NODE_ENV"===c||c.startsWith("NEXT_")})(a,b)&&delete c[a];return c}function i(a={}){let{agentBinDir:b=(0,f.join)((0,e.getAgentDir)(),"bin"),baseEnvironment:c=process.env,localOperations:d=(0,e.createLocalBashOperations)({shellPath:a.shellPath}),platform:g=process.platform}=a;return{exec(a,e,f){var i;let j,k,l,m=(i=h(f.env??c,g),j="win32"===g?Object.keys(i).find(a=>"PATH"===a.toUpperCase())??"PATH":"PATH",k="win32"===g?";":":",(l=i[j]??"").split(k).filter(Boolean).includes(b)||(i[j]=[b,l].filter(Boolean).join(k)),i);return d.exec(a,e,{...f,env:m})}}}e=(g.then?(await g)():g)[0],d()}catch(a){d(a)}})},56429:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{A4:()=>I,C4:()=>L,Fn:()=>M,HG:()=>O,OF:()=>U,_I:()=>J,d_:()=>P,iP:()=>S,l8:()=>Q,oA:()=>K});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(78970),k=c(43671),l=c(28967),m=c(18904),n=c(72498),o=c(40402),p=c(46753),q=c(7048),r=c(12568),s=c(27367),t=c(305),u=c(53303),v=c(30590),w=c(64735),x=c(36193),y=c(67264),z=c(71069),A=c(11301),B=c(4504),C=c(44271),D=a([e,f,m,n,o,p,q,r,s,t,u,w,A,C]);[e,f,m,n,o,p,q,r,s,t,u,w,A,C]=D.then?(await D)():D;let V=new Set(["agent_start","message_start","message_update","message_end","agent_end","entry_appended","session_info_changed","queue_update","prompt_done","agent_settled","auto_compaction_end","compaction_end"]),W=["read","bash","powershell","edit","write","grep","find","ls"];class X extends e.Theme{constructor(){super({thinkingXhigh:"",searchMatchText:""},{selectedBg:""},"truecolor")}fg(...[,a]){return a}bg(...[,a]){return a}bold(a){return a}italic(a){return a}underline(a){return a}inverse(a){return a}strikethrough(a){return a}getFgAnsi(){return""}getBgAnsi(){return""}getThinkingBorderColor(){return a=>a}getBashModeBorderColor(){return a=>a}}let Y=new X,Z=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function E(a,b){if(0===b.length)return[];let c=new Set(W),d=(0,t.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return[...new Set([...d,...e])]}class ${constructor(a,b){this.inner=a,this.cwd=b,this.listeners=[],this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionStatuses=new Map,this.extensionWidgets=new Map,this.promptRunning=!1,this.promptPhase=null,this.extensionsBound=!1,this.extensionBindingPromise=null,this.extensionBindingError=null,this.forceEmptySystemPrompt=!1,this.exactSystemPrompt=null,this.unsubscribe=null,this.idleTimer=null,this.subscriberCount=0,this.disposeGraceTimer=null,this.lastActivityAt=Date.now(),this.queueMirror=[],this.queueRecovery=[],this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this._alive=!0,this.approvalPolicy=(0,x.ni)((0,w.lN)().permissionRules),this.approvalMode=(0,w.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1,this.goalEngine=new B.aA,this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalContinuationInFlight=!1;const c=(0,w.lN)(a.sessionId);if(this.approvalMode=c.toolApprovalMode,this.approvalPolicy=(0,x.ni)(c.permissionRules),a.sessionFile){const b=(0,B.bo)(a.sessionFile);"idle"!==b.status&&this.goalEngine.hydrate(b)}}get sessionId(){return this.inner.sessionId}get sessionFile(){return this.inner.sessionFile??""}isAlive(){return this._alive}async waitUntilReady(){}isShuttingDown(){return null!==this.shutdownPromise}whenShutdown(){return this.shutdownPromise}isRunning(){return this._alive&&(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)}runtimeSnapshot(){let a=this.inner.isStreaming,b=this.promptRunning,c=this.inner.isCompacting,d=this.inner.isBashRunning;return{id:this.sessionId,running:this.isRunning(),isStreaming:a,isPromptRunning:b,isCompacting:c,isBashRunning:d,phase:d?"running_command":this.promptPhase??(a||b||c?"waiting_model":null)}}start(){this.installApprovalHook(),this.goalEngine.setOnChanged(a=>{this.sessionFile&&(0,B.eG)(this.sessionFile,a),this.emit({type:"goal_state_changed",goalState:a}),S("goal_state_changed",this.sessionId,{type:"goal_state_changed",goalState:a})}),this.goalEngine.isRunning()&&this.scheduleGoalKick(),this.unsubscribe=this.inner.subscribe(a=>{("agent_end"===a.type||"message_end"===a.type||"entry_appended"===a.type||"session_info_changed"===a.type)&&(0,o.mD)(),("agent_end"===a.type||"agent_settled"===a.type||"auto_compaction_end"===a.type||"compaction_end"===a.type)&&this.resetIdleTimer(),"agent_start"===a.type&&this.goalEngine.onAgentStart(),"agent_settled"===a.type&&this.handleGoalSettled(),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),V.has(a.type)&&S(a.type,this.sessionId,a),this.emit(a),N()}),this.resetIdleTimer(),N()}loadQueueRecovery(){if(!this.sessionFile)return;let a=this.inner.getSteeringMessages(),b=this.inner.getFollowUpMessages();if(a.length||b.length){this.queueRecovery=[],this.reconcileQueue([...a],[...b]);return}this.queueRecovery=(0,k.ov)(this.sessionFile)}getGoalState(){return this.goalEngine.getState()}handleGoalSettled(){if(!this.goalEngine.isRunning())return void this.goalEngine.disarmContinuation();let a=this.inner.getLastAssistantText()??"",b=0,c=0;try{let a=this.inner.sessionManager.getEntries(),d=function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.usage;d&&(b+=(d.input??0)+(d.output??0)+(d.cacheRead??0)+(d.cacheWrite??0))}return b}(a);b=Math.max(0,d-this.goalTokensAccounted),this.goalTokensAccounted=d;let e=function(a){let b=0;for(let c of a){let a=c?.message;if(!a||"assistant"!==a.role)continue;let d=a.content;if(Array.isArray(d))for(let a of d)a&&"object"==typeof a&&"toolCall"===a.type&&(b+=1)}return b}(a);c=Math.max(0,e-this.goalToolCallsAccounted),this.goalToolCallsAccounted=e}catch{}let{verdict:d}=this.goalEngine.settleTurn(a,b,c);"continue"!==d.action?this.goalEngine.disarmContinuation():this.scheduleGoalKick()}scheduleGoalKick(){if(this.goalEngine.isRunning()&&!this.goalContinuationInFlight){if(this.goalEngine.isContinuationArmed()){this.goalEngine.disarmContinuation(),this.driveGoalContinuation();return}this.inner.isStreaming||this.promptRunning||this.inner.pendingMessageCount>0||this.driveGoalContinuation()}}driveGoalContinuation(){this.goalEngine.isRunning()&&!this.goalContinuationInFlight&&(this.goalContinuationInFlight=!0,this.inner.followUp(B.LF).catch(()=>{}).finally(()=>{this.goalContinuationInFlight=!1}))}handleGoalStartCommand(a,b){let c=this.goalEngine.start(a,b);return this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,c}handleGoalStopCommand(){return this.goalEngine.stop(),this.goalTokensAccounted=0,this.goalEngine.getState()}setApprovalMode(a){this.approvalMode=a}setApprovalPolicy(a){this.approvalPolicy=a}installApprovalHook(){if(this.approvalHookInstalled||!this.inner.agent?.beforeToolCall)return;this.approvalHookInstalled=!0;let a=this.inner.agent.beforeToolCall;this.inner.agent.beforeToolCall=async b=>{let c=b.toolCall?.name??"",d=b.args,e=(0,x.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:y.MJ.has(c.toLowerCase()),args:d});if("deny"===e)return{block:!0,reason:`Denied by policy rule: ${c} is not permitted.`};if("ask"===e){let a=await this.askForApproval(c,d);if(!a.approve)return{block:!0,reason:a.reason||`Rejected by user: ${c}`}}return a?a(b):void 0}}askForApproval(a,b){return new Promise(c=>{let d=`approval-${++this.approvalSeq}`,e=setTimeout(()=>{this.pendingApprovals.delete(d),this.emit({type:"tool_approval_resolved",id:d,approve:!1,reason:`Approval request timed out after 120s: ${a}`}),c({approve:!1,reason:`Approval request timed out after 120s: ${a}`})},12e4);this.pendingApprovals.set(d,{resolve:c,timer:e,toolName:a}),this.emit({type:"tool_approval_request",id:d,toolName:a,args:function(a){if(null===a||"object"!=typeof a)return a;let b={};for(let[c,d]of Object.entries(a))if(null!=d&&"content"!==c&&"data"!==c&&"newString"!==c&&"oldString"!==c){if("string"==typeof d){b[c]=d.length>200?`${d.slice(0,200)}…`:d;continue}if("number"==typeof d||"boolean"==typeof d){b[c]=d;continue}b[c]=Array.isArray(d)?`[array:${d.length}]`:"[object]"}return b}(b)})})}resolveApproval(a,b,c){let d=this.pendingApprovals.get(a);return!!d&&(this.pendingApprovals.delete(a),clearTimeout(d.timer),d.resolve({approve:b,reason:c}),!0)}rejectAllApprovals(a){for(let[b,c]of this.pendingApprovals)this.pendingApprovals.delete(b),clearTimeout(c.timer),c.resolve({approve:!1,reason:a})}getPendingApprovals(){return Array.from(this.pendingApprovals.entries()).map(([a,b])=>({id:a,toolName:b.toolName}))}pendingRecoveryView(){return this.queueRecovery.map(({id:a,kind:b,text:c,images:d,queuedAt:e})=>({id:a,kind:b,text:c,hasImages:!!d?.length,queuedAt:e}))}persistQueue(){if(!this.sessionFile)return;let a=[...this.queueRecovery,...this.queueMirror];a.length?(0,k.pj)(this.sessionFile,a):(0,k.wx)(this.sessionFile)}hintQueueImages(a,b){this.pendingQueueHints[a].push(b?.length?b:[])}reconcileQueue(a,b){let c=(a,b)=>{if(!b)return this.queueMirror.filter(b=>b.kind===a);let c=new Set;return b.map(b=>{let d=this.queueMirror.find(d=>d.kind===a&&d.text===b&&!c.has(d));if(d)return c.add(d),d;let e=(0,k.Gc)(a,b,this.pendingQueueHints[a].shift());return c.add(e),e})};this.queueMirror=[...c("steer",a),...c("followUp",b)],this.persistQueue()}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);this.hintQueueImages(a.kind,a.images),"steer"===a.kind?await this.inner.steer(a.text,a.images):await this.inner.followUp(a.text,a.images)}ensureMirrored(a){this.queueMirror.find(b=>b.kind===a.kind&&b.text===a.text)||(this.queueMirror.push({...a}),this.pendingQueueHints[a.kind].pop())}async replaceLiveQueue(a,b){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))await this.requeueEntry(b);for(let a of b)await this.requeueEntry(a);let c={steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]};return this.reconcileQueue(c.steering,c.followUp),c}async withQueueMutation(a){let b,c=this.queueMutationTail;this.queueMutationTail=new Promise(a=>{b=a}),await c;try{return await a()}finally{b()}}async mutateLiveQueue(a,b){return this.withQueueMutation(async()=>{let c=this.queueMirror.filter(a=>"steer"===a.kind),d=this.queueMirror.filter(a=>"followUp"===a.kind),e=b("steer"===a?c:d),f=await this.replaceLiveQueue(c,d);return{value:e,queues:f}})}validateQueueEntries(a){for(let b of a){if("steer"!==b.kind&&"followUp"!==b.kind||"string"!=typeof b.text)continue;let a=(0,j.kc)(b.images);if(a)throw Error(a)}}runAgentContinue(){if(this.inner.isStreaming||this.inner.isBashRunning||this.promptRunning)return;let a=[...this.queueMirror];0!==a.length&&(this.queueMirror=[],this.persistQueue(),this.promptRunning=!0,this.promptPhase="waiting_model",this.bootstrapQueuedRun(a))}async bootstrapQueuedRun(a){for(let b of(this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},a))try{await this.inner.prompt(b.text,b.images?.length?{images:b.images}:void 0)}catch(a){this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),(0,o.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),this.emit({type:"prompt_done"});return}this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),this.emit({type:"prompt_done"})}setForceEmptySystemPrompt(a){this.forceEmptySystemPrompt=a,this.applyForcedEmptySystemPrompt()}setExactSystemPrompt(a){this.exactSystemPrompt=a,this.applyExactSystemPrompt()}beginExtensionBinding(a={}){this.ensureExtensionsBound(a).catch(a=>{console.error("[pi-web] failed to dispatch session_start to extensions:",a instanceof Error?a.message:a)})}ensureExtensionsBound(a={}){return(a.forceEmptySystemPrompt&&(this.forceEmptySystemPrompt=!0),this.extensionsBound)?(this.applyForcedEmptySystemPrompt(),Promise.resolve()):(this.extensionBindingPromise||(this.extensionBindingError=null,this.extensionBindingPromise=(async()=>{if(!this._alive)return;let a=this.createExtensionUiContext();if("function"==typeof this.inner.bindExtensions){let b=this.inner.bindExtensions;await b.call(this.inner,{uiContext:a,mode:"rpc",commandContextActions:this.createExtensionCommandContextActions(),shutdownHandler:()=>this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"notify",notifyType:"warning",message:"Extension requested shutdown, but shutdown is not supported in pi-web."}),onError:a=>this.emit({type:"extension_error",extensionPath:a.extensionPath,event:a.event,error:a.error})})}else this.inner.extensionRunner.setUIContext?.(a,"rpc");this.extensionsBound=!0,this.applyForcedEmptySystemPrompt(),console.log(`[pi-web] session_start dispatched to extensions for session ${this.inner.sessionId}`)})().catch(a=>{throw this.extensionBindingError=a,a})),this.extensionBindingPromise)}static{this.EXTENSION_BIND_TIMEOUT_MS=15e3}async waitForExtensionsBound(){let a=this.extensionBindingPromise;if(a)try{let b=new Promise((b,c)=>{let d=setTimeout(()=>c(Error("Extension binding timed out; continuing without waiting")),$.EXTENSION_BIND_TIMEOUT_MS);a.finally(()=>clearTimeout(d))});await Promise.race([a,b])}catch{}this.extensionBindingError&&console.warn("[pi-web] extension binding failed, continuing:",this.extensionBindingError)}shouldWaitForExtensions(a){return"prompt"===a||"steer"===a||"follow_up"===a||"get_commands"===a}applyForcedEmptySystemPrompt(){this.inner.agent.state&&(this.forceEmptySystemPrompt?this.inner.agent.state.systemPrompt="":null!==this.exactSystemPrompt&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt))}applyExactSystemPrompt(){!this.forceEmptySystemPrompt&&null!==this.exactSystemPrompt&&this.inner.agent.state&&(this.inner.agent.state.systemPrompt=this.exactSystemPrompt)}emit(a){for(let b of this.listeners)try{b(a)}catch(a){console.error(`[pi-web] session ${this.sessionId} event listener threw:`,a instanceof Error?a.message:a)}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=setTimeout(()=>{this.isRunning()&&(this.inner.isBashRunning&&this.inner.abortBash(),this.inner.abort().catch(()=>{})),this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},18e5)}touch(){this.lastActivityAt=Date.now(),this.cancelPendingDispose()}hasSubscribers(){return this.subscriberCount>0}get activityTimestamp(){return this.lastActivityAt}cancelPendingDispose(){this.disposeGraceTimer&&(clearTimeout(this.disposeGraceTimer),this.disposeGraceTimer=null)}scheduleDisposeIfIdle(){this.cancelPendingDispose(),!(this.subscriberCount>0||this.isRunning())&&this._alive&&(this.disposeGraceTimer=setTimeout(()=>{this.disposeGraceTimer=null,!(this.subscriberCount>0||this.isRunning())&&this._alive&&this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down unwatched session:",a instanceof Error?a.message:a)})},6e4))}persistSessionFileIfMissing(){let a=this.inner.sessionManager,b=a.getSessionFile();if(!b||(0,h.existsSync)(b))return;let c=a.getHeader();if(!c)return;let d=[c,...a.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";try{(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}catch(c){if("EEXIST"===c.code||(0,h.existsSync)(b)){a.flushed=!0,(0,o.O8)(this.inner.sessionId,b);return}throw c}a.flushed=!0,(0,o.O8)(this.inner.sessionId,b)}onEvent(a){for(let b of(this.listeners.push(a),this.subscriberCount+=1,this.cancelPendingDispose(),this.pendingUiRequests.values()))a(b);return()=>{let b=this.listeners.indexOf(a);-1!==b&&this.listeners.splice(b,1),this.subscriberCount>0&&(this.subscriberCount-=1),this.scheduleDisposeIfIdle()}}onDestroy(a){this.onDestroyCallback=a}async send(a){if(!this._alive)throw Error("Session is shutting down");this.touch(),this.resetIdleTimer();let b=a.type;if("prompt"===b||"steer"===b||"follow_up"===b||"requeue_at"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b)}switch(this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),b){case"prompt":{if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");let b=a.images,c=a.streamingBehavior;return c&&this.inner.isStreaming&&this.hintQueueImages("followUp"===c?"followUp":"steer",b),this.promptRunning=!0,this.promptPhase=String(a.message??"").trimStart().startsWith("/")?"running_command":"waiting_model",N(),this.inner.prompt(a.message,{...b?.length?{images:b}:{},...c?{streamingBehavior:c}:{},source:"rpc"}).then(()=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),c||this.emit({type:"prompt_done"}),N()}).catch(a=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),(0,o.mD)(),this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),c||this.emit({type:"prompt_done"}),N()}),null}case"abort":return await this.inner.abort(),null;case"get_state":{let a=this.inner.model,b=this.inner.getContextUsage();return{sessionId:this.inner.sessionId,sessionFile:this.inner.sessionFile??"",isStreaming:this.inner.isStreaming,isPromptRunning:this.promptRunning,isBashRunning:this.inner.isBashRunning,isCompacting:this.inner.isCompacting,phase:this.runtimeSnapshot().phase,model:a?{id:a.id,provider:a.provider}:void 0,messageCount:0,pendingMessageCount:this.inner.pendingMessageCount,queuedMessages:{steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]},pendingRecovery:this.pendingRecoveryView(),contextUsage:b?{percent:b.percent,contextWindow:b.contextWindow,tokens:b.tokens}:null,systemPrompt:this.inner.agent.state?.systemPrompt??"",thinkingLevel:this.inner.agent.state?.thinkingLevel??"off",extensionStatuses:this.getExtensionStatuses(),extensionWidgets:this.getExtensionWidgets(),goalState:this.goalEngine.getState()}}case"goal_start":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_start requires a non-empty goalText");let c=a.tokenBudget,d="number"==typeof c&&Number.isFinite(c)&&c>0?Math.floor(c):null,e=this.handleGoalStartCommand(b,d);return this.scheduleGoalKick(),{goalState:e}}case"goal_pause":try{this.inner.clearQueue(),this.queueMirror=[],this.persistQueue()}catch{}return{goalState:this.goalEngine.pause()};case"goal_resume":{let a=this.goalEngine.resume();return"running"===a.status&&(this.goalEngine.armContinuation(),this.scheduleGoalKick()),{goalState:a}}case"goal_stop":try{this.inner.clearQueue(),this.queueMirror=[],this.persistQueue()}catch{}return{goalState:this.handleGoalStopCommand()};case"goal_edit":{let b=String(a.goalText??"").trim();if(!b)throw Error("goal_edit requires a non-empty goalText");let c=this.goalEngine.edit(b);return"running"===c.status&&this.scheduleGoalKick(),{goalState:c}}case"get_goal_state":return{goalState:this.goalEngine.getState()};case"set_model":{let{provider:b,modelId:c}=a,d=this.inner.modelRuntime.getModel(b,c);if(!d)try{await this.inner.modelRuntime.refresh({allowNetwork:!1}),d=this.inner.modelRuntime.getModel(b,c)}catch{d=void 0}if(!d)throw Error(`Model not found: ${b}/${c}`);return await this.inner.setModel(d),(0,l.k)(),(0,o.mD)(),{id:d.id,provider:d.provider}}case"fork":{let b,c=a.entryId,d=this.inner.sessionManager,f=this.inner.sessionFile;if(!d.isPersisted())return{cancelled:!0};if(!f)throw Error("Persisted session is missing a session file");let g=d.getEntry(c);if(!g)throw Error("Invalid entry ID for forking");let h=d.getSessionDir();if(g.parentId){let a=e.SessionManager.open(f,h).createBranchedSession(g.parentId);if(!a)throw Error("Failed to create forked session");b=a}else{let a=e.SessionManager.create(d.getCwd(),h);a.newSession({parentSession:f}),b=a.getSessionFile()}let i=e.SessionManager.open(b,h).getSessionId();return(0,o.O8)(i,b),(0,o.mD)(),await this.shutdown(),{cancelled:!1,newSessionId:i}}case"navigate_tree":return{cancelled:(await this.inner.navigateTree(a.targetId,{})).cancelled};case"set_thinking_level":{let b=a.level;return this.inner.setThinkingLevel(b),"xhigh"===b&&this.inner.model?.compat?.thinkingFormat==="deepseek"&&this.inner.agent?.state&&(this.inner.agent.state.thinkingLevel="xhigh"),(0,o.mD)(),null}case"compact":try{return await this.inner.compact(a.customInstructions)}finally{(0,o.mD)()}case"set_session_name":{let b=a.name?.trim();if(!b)throw Error("Session name cannot be empty");return this.inner.setSessionName(b),(0,o.mD)(),null}case"get_session_stats":return{...this.inner.getSessionStats(),sessionName:this.inner.sessionManager.getSessionName()};case"get_last_assistant_text":return{text:this.inner.getLastAssistantText()??""};case"clear_queue":return this.withQueueMutation(async()=>(this.queueMirror=[],this.pendingQueueHints={steer:[],followUp:[]},this.persistQueue(),this.inner.clearQueue()));case"move_queue":{let b=a.kind,c=Number(a.fromIndex),d=Number(a.toIndex);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!Number.isInteger(d))throw Error("move_queue requires a queue kind and integer indexes");let{queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length||d<0||d>=a.length)throw Error("move_queue index out of range");let[b]=a.splice(c,1);a.splice(d,0,b)});return e}case"recall_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("recall_queue_item requires a queue kind and integer index");let{value:d,queues:e}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("recall_queue_item index out of range");let[b]=a.splice(c,1);return b});return{entry:{text:d.text,images:d.images??[]},...e}}case"requeue_at":{let b=a.kind,c=Number(a.index),d=a.text;if("steer"!==b&&"followUp"!==b||!Number.isInteger(c)||!d?.trim())throw Error("requeue_at requires a queue kind, integer index, and text");let e=a.images,{queues:f}=await this.mutateLiveQueue(b,a=>{if(c<0||c>a.length)throw Error("requeue_at index out of range");a.splice(c,0,(0,k.Gc)(b,d,e))});return f}case"remove_queue_item":{let b=a.kind,c=Number(a.index);if("steer"!==b&&"followUp"!==b||!Number.isInteger(c))throw Error("remove_queue_item requires a queue kind and integer index");let{queues:d}=await this.mutateLiveQueue(b,a=>{if(c<0||c>=a.length)throw Error("remove_queue_item index out of range");a.splice(c,1)});return d}case"resolve_recovery":return this.withQueueMutation(async()=>{let b=new Set(a.keep??[]),c=new Set(a.discard??[]),d=!0===a.continueRun,e=0;for(let a of this.queueRecovery)b.has(a.id)&&(await this.requeueEntry(a),this.ensureMirrored(a),e+=1);return this.queueRecovery=this.queueRecovery.filter(a=>!b.has(a.id)&&!c.has(a.id)),this.persistQueue(),d&&e>0&&this.runAgentContinue(),{remaining:this.pendingRecoveryView(),kept:e}});case"export_queue":return{live:this.queueMirror.map(a=>({...a})),recovery:this.queueRecovery.map(a=>({...a}))};case"import_queue":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("import_queue requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b){if("steer"!==a.kind&&"followUp"!==a.kind||"string"!=typeof a.text)continue;let b=(0,k.Gc)(a.kind,a.text,a.images);await this.requeueEntry(b),this.ensureMirrored(b),c+=1}return this.persistQueue(),{imported:c,steering:[...this.inner.getSteeringMessages()],followUp:[...this.inner.getFollowUpMessages()]}});case"stage_recovery":return this.withQueueMutation(async()=>{let b=a.entries;if(!Array.isArray(b))throw Error("stage_recovery requires entries[]");this.validateQueueEntries(b);let c=0;for(let a of b)("steer"===a.kind||"followUp"===a.kind)&&"string"==typeof a.text&&(this.queueRecovery.push((0,k.Gc)(a.kind,a.text,a.images)),c+=1);return this.persistQueue(),{staged:c,pendingRecovery:this.pendingRecoveryView()}});case"steer":{let b=a.images;this.hintQueueImages("steer",b),this.promptPhase="waiting_model",N();try{await this.inner.steer(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,N()}return null}case"follow_up":{let b=a.images;this.hintQueueImages("followUp",b),this.promptPhase="waiting_model",N();try{await this.inner.followUp(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,N()}return null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({name:a.name,description:a.description,active:b.has(a.name)}))}case"get_commands":{let a=[];for(let b of this.inner.extensionRunner.getRegisteredCommands())a.push({name:b.invocationName,description:b.description,source:"extension",sourceInfo:b.sourceInfo});for(let b of this.inner.promptTemplates)a.push({name:b.name,description:b.description,source:"prompt",sourceInfo:b.sourceInfo});for(let b of this.inner.resourceLoader.getSkills().skills)a.push({name:`skill:${b.name}`,description:b.description,source:"skill",sourceInfo:b.sourceInfo});return{commands:a}}case"set_tools":{let b=a.toolNames;return this.setForceEmptySystemPrompt(0===b.length),this.inner.setActiveToolsByName(E(this.inner,b)),this.applyForcedEmptySystemPrompt(),null}case"reload":{let a=this.inner.getActiveToolNames();return await this.waitForExtensionsBound(),this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload(),this.inner.setActiveToolsByName(E(this.inner,a)),"function"!=typeof this.inner.bindExtensions&&this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc"),this.applyForcedEmptySystemPrompt(),{success:!0}}case"abort_compaction":return this.inner.abortCompaction(),null;case"resolve_approval":return{resolved:this.resolveApproval(a.id,!!a.approve,a.reason)};case"set_approval_mode":{let b=a.mode;if("ask"!==b&&"auto"!==b&&"yolo"!==b)throw Error(`Invalid approval mode: ${String(b)}`);return this.setApprovalMode(b),null}case"set_approval_policy":{let b=a.policy;return this.setApprovalPolicy((0,x.ni)(b)),null}case"get_approval_state":return{mode:this.approvalMode,pending:this.getPendingApprovals()};case"extension_ui_response":return this.resolveExtensionUiResponse(a),null;case"extension_ui_input":return this.handleExtensionUiInput(a.id,a.data),null;case"bash":{if(this.promptRunning||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)throw Error("Cannot run a shell command while the session is busy");let b=this.inner.settingsManager?.getShellPath?.(),c=(0,u.J1)("string"==typeof b&&b?{shellPath:b}:{}),d=this.inner.executeBash(a.command,void 0,{excludeFromContext:a.excludeFromContext,operations:c});try{let a=await d;return this.persistSessionFileIfMissing(),a}finally{this.resetIdleTimer(),(0,o.mD)(),N()}}case"abort_bash":return this.inner.abortBash(),N(),null;default:throw Error(`Unsupported command: ${b}`)}}destroy(){if(!this._alive)return;for(let a of(this._alive=!1,this.idleTimer&&clearTimeout(this.idleTimer),this.cancelPendingDispose(),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.sessionFile&&this.goalEngine.hasActiveGoal()&&(0,B.eG)(this.sessionFile,this.goalEngine.getState()),this.pendingUiResponses.values()))a.cancel();for(let a of Array.from(this.activeCustomUis.keys()))this.closeCustomUi(a,void 0);this.pendingUiResponses.clear(),this.pendingUiRequests.clear(),this.rejectAllApprovals("Session closed while approval was pending");let a=()=>{try{this.inner.dispose()}finally{try{this.onDestroyCallback?.()}finally{N()}}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():Promise.resolve(b.call(this.inner.extensionRunner,{type:"session_shutdown",reason:"dispose"})).catch(a=>{console.error("[pi-web] session_shutdown before dispose failed:",a instanceof Error?a.message:a)}).finally(a)}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.shutdownPromise=(async()=>{try{try{await this.waitForExtensionsBound()}catch(a){console.error("[pi-web] extension binding failed before session shutdown:",a instanceof Error?a.message:a)}this.sessionShutdownEmitted||(this.sessionShutdownEmitted=!0,await this.inner.extensionRunner.emit?.({type:"session_shutdown",reason:"quit"}))}finally{this.destroy()}})(),this.shutdownPromise):void 0}resolveExtensionUiResponse(a){let b=this.pendingUiResponses.get(a.id);b&&b.resolve(a)}getExtensionStatuses(){return Array.from(this.extensionStatuses,([a,b])=>({key:a,text:b}))}getExtensionWidgets(){return Array.from(this.extensionWidgets.values())}getCustomUiWidth(a){if(!a||"object"!=typeof a)return z.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return z.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):z.p1}emitCustomUiRender(a,b){let c;try{c=b.component.render(b.width)}catch(a){c=[`Extension custom UI render failed: ${a instanceof Error?a.message:String(a)}`]}let d={type:"extension_ui_request",id:a,method:"custom",lines:c};this.pendingUiRequests.set(a,d),this.emit(d)}closeCustomUi(a,b){let c=this.activeCustomUis.get(a);if(c&&!c.settled){c.settled=!0,this.activeCustomUis.delete(a),this.pendingUiRequests.delete(a);try{c.component.dispose?.()}catch{}this.emit({type:"extension_ui_request",id:a,method:"custom",lines:[],closed:!0}),c.resolve(b)}}handleExtensionUiInput(a,b){let c=this.activeCustomUis.get(a);if(c&&"string"==typeof b)try{c.component.handleInput?.(b),this.activeCustomUis.has(a)&&this.emitCustomUiRender(a,c)}catch(b){this.closeCustomUi(a,void 0),this.emit({type:"extension_error",extensionPath:`custom-ui:${a}`,event:"custom_ui_input",error:b instanceof Error?b.message:String(b)})}}requestExtensionCustomUi(a,b){if("function"!=typeof a)return Promise.resolve(void 0);let c=(0,g.randomUUID)(),d=this.getCustomUiWidth(b);return new Promise(b=>{let e=!1,f=(0,z.TQ)(()=>{let a=this.activeCustomUis.get(c);a&&this.emitCustomUiRender(c,a)},d),g=a=>{e||(e=!0,b(a))},h=a=>{this.activeCustomUis.has(c)?this.closeCustomUi(c,a):g(a)};Promise.resolve().then(()=>a(f,Y,Z,h)).then(a=>{if(e){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void g(void 0);let b={component:a,width:d,resolve:a=>g(a),settled:!1};this.activeCustomUis.set(c,b),this.emitCustomUiRender(c,b)}).catch(a=>{e||(this.emit({type:"extension_error",extensionPath:`custom-ui:${c}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),g(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=(0,g.randomUUID)(),h={type:"extension_ui_request",id:f,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise(a=>{let g,i=()=>{g&&clearTimeout(g),e?.removeEventListener("abort",k),this.pendingUiRequests.delete(f),this.pendingUiResponses.delete(f)},j=b=>{i(),a(b)},k=()=>j(b);d&&(g=setTimeout(()=>j(b),d)),e?.addEventListener("abort",k,{once:!0}),this.pendingUiRequests.set(f,h),this.pendingUiResponses.set(f,{resolve:a=>j(c(a)),cancel:()=>j(b)}),this.emit(h)})}createExtensionUiContext(){return{select:(a,b,c)=>this.requestExtensionUi({method:"select",title:a,options:b,...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),confirm:(a,b,c)=>this.requestExtensionUi({method:"confirm",title:a,message:b,...c?.timeout?{timeout:c.timeout}:{}},!1,a=>"confirmed"in a&&a.confirmed,c?.timeout,c?.signal),input:(a,b,c)=>this.requestExtensionUi({method:"input",title:a,...void 0!==b?{placeholder:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),editor:(a,b,c)=>this.requestExtensionUi({method:"editor",title:a,...void 0!==b?{prefill:b}:{},...c?.timeout?{timeout:c.timeout}:{}},void 0,a=>"value"in a?a.value:void 0,c?.timeout,c?.signal),notify:(a,b)=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"notify",message:a,notifyType:b})},onTerminalInput:()=>()=>{},setStatus:(a,b)=>{void 0===b?this.extensionStatuses.delete(a):this.extensionStatuses.set(a,b),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setStatus",statusKey:a,statusText:b})},setWorkingMessage:()=>{},setWorkingVisible:()=>{},setWorkingIndicator:()=>{},setHiddenThinkingLabel:()=>{},setWidget:(a,b,c)=>{(void 0===b||Array.isArray(b))&&(void 0===b?this.extensionWidgets.delete(a):this.extensionWidgets.set(a,{key:a,lines:b,placement:c?.placement??"aboveEditor"}),this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setWidget",widgetKey:a,widgetLines:b,widgetPlacement:c?.placement}))},setFooter:()=>{},setHeader:()=>{},setTitle:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"setTitle",title:a})},custom:(a,b)=>this.requestExtensionCustomUi(a,b),pasteToEditor:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},setEditorText:a=>{this.emit({type:"extension_ui_request",id:(0,g.randomUUID)(),method:"set_editor_text",text:a})},getEditorText:()=>"",addAutocompleteProvider:()=>{},setEditorComponent:()=>{},getEditorComponent:()=>void 0,get theme(){return Y},getAllThemes:()=>[],getTheme:()=>void 0,setTheme:()=>({success:!1,error:"Theme switching is not supported in pi-web extension UI yet"}),getToolsExpanded:()=>!1,setToolsExpanded:()=>{}}}syncProjectTrust(){this.inner.settingsManager.setProjectTrusted((0,n.Y1)(this.cwd,(0,e.getAgentDir)()).trusted)}createExtensionCommandContextActions(){return{waitForIdle:async()=>{let a=this.inner.agent;await a.waitForIdle?.()},newSession:async()=>({cancelled:!0}),fork:async()=>({cancelled:!0}),navigateTree:async(a,b)=>({cancelled:(await this.inner.navigateTree(a,{summarize:b?.summarize})).cancelled}),switchSession:async()=>({cancelled:!0}),reload:async()=>{this.extensionStatuses.clear(),this.extensionWidgets.clear(),this.syncProjectTrust(),await this.inner.reload({beforeSessionStart:()=>{this.inner.extensionRunner.setUIContext?.(this.createExtensionUiContext(),"rpc")}}),this.applyForcedEmptySystemPrompt()}}}}function F(){if(!globalThis.__piSessions){globalThis.__piSessions=new Map;let a=()=>Promise.allSettled(Array.from(globalThis.__piSessions?.values()??[],a=>a.shutdown()));process.once("exit",()=>globalThis.__piSessions?.forEach(a=>a.destroy())),process.once("SIGINT",()=>{a().finally(()=>process.exit(130))}),process.once("SIGTERM",()=>{a().finally(()=>process.exit(143))})}return globalThis.__piSessions}function G(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}function H(){return globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),globalThis.__piStartingSessionCwds}function I(a){return F().get(a)}function J(a){let b=G(a);return!!H().has(b)||Array.from(F().values()).some(a=>G(a.cwd)===b&&a.isRunning())}async function K(a){let b=G(a),c=Array.from(F().values()).filter(a=>G(a.cwd)===b);return await Promise.all(c.map(a=>a.shutdown())),c.length}function L(){let a=[];for(let[b,c]of F()){if(!c.isAlive())continue;let d=c.runtimeSnapshot();d.running&&a.push({...d,id:d.id||b})}return a}function M(a){return globalThis.__piRunningListeners??=new Set,globalThis.__piRunningListeners.add(a),()=>globalThis.__piRunningListeners?.delete(a)}let _="";function N(){let a=globalThis.__piRunningListeners;if(!a||0===a.size){_="";return}let b=L(),c=JSON.stringify(b);if(c!==_)for(let d of(_=c,a))try{d(b)}catch{}}function O(){return L().map(a=>a.id)}let aa=(0,r.s)({getSession:a=>F().get(a),registerSession:(a,b)=>{let c,d,e;c=new $(a,a.sessionManager.getCwd()),b?.chatOnly?c.setForceEmptySystemPrompt(!0):b?.exactSystemPrompt&&c.setExactSystemPrompt(b.exactSystemPrompt),c.start(),d=a.sessionId,e=F(),c.onDestroy(()=>e.delete(d)),e.set(d,c)},reopenSession:async(a,b)=>(await U(a,b,void 0)).session,resolveSessionPath:o.os,invalidateSessionList:o.mD,notifyRunningChange:N,isBuiltInSubagentsEnabled:s.N});function P(a){return aa.get(a)}function Q(a){return globalThis.__piSessionBusListeners??=new Set,globalThis.__piSessionBusListeners.add(a),()=>globalThis.__piSessionBusListeners?.delete(a)}let ab=new Map;function R(a){let b=globalThis.__piSessionBusListeners;if(b&&0!==b.size)for(let c of b)try{c(a)}catch{}}function S(a,b,c){let d=globalThis.__piSessionBusListeners;if(!d||0===d.size)return;if("message_update"!==a)return void R({type:a,sessionId:b,payload:c});let e=ab.get(b),f={type:a,sessionId:b,payload:c};e?(clearTimeout(e.timer),e.event=f):ab.set(b,{event:f,timer:setTimeout(()=>{let a=ab.get(b);a&&(ab.delete(b),R(a.event))},80)})}function T(a,b){let c=Date.now(),{provider:d,modelId:e,sessionId:f}=b,g=a.result.bind(a);a.result=async()=>{let a,b,h,i,j,k=await g();return a=Date.now()-c,b="error"===k.stopReason||"aborted"===k.stopReason,h=k.errorMessage?.trim(),j=(i=h?.match(/\bHTTP\s+(\d{3})\b|\bstatus(?:\s+code)?\s*[:=]?\s*(\d{3})\b/))?Number(i[1]??i[2]):void 0,(0,A.wF)({level:b?"error":"info",source:"model-call",provider:d,model:e,sessionId:f,...void 0!==j?{statusCode:j}:{},message:b?`模型调用失败 ${d}/${e}${h?`:${h}`:""}`:`模型调用成功 ${d}/${e}`,details:b?void 0:`耗时 ${a}ms`}),k};let h=a[Symbol.asyncIterator].bind(a);return a[Symbol.asyncIterator]=()=>{let a=h();return{next:()=>a.next().catch(a=>{throw(0,A.wF)({level:"error",source:"model-call",provider:d,model:e,sessionId:f,message:`模型调用传输错误 ${d}/${e}:${a instanceof Error?a.message:String(a)}`}),a})}},a}async function U(a,b,d,f={}){let g,h,i,j,{toolNames:k,initialModel:r,thinkingLevel:t}=f,u=F(),w=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),x=u.get(a);if(x?.isAlive()&&!x.isShuttingDown())return{session:x,realSessionId:a};if(x){let a=x.whenShutdown();a&&await Promise.race([a,new Promise(a=>setTimeout(a,1e4))])}let y=w.get(a);if(y)return y;if(b)g=e.SessionManager.open(b,void 0);else{if(!d)throw Error("cwd is required for a new session");g=e.SessionManager.create(d,void 0)}let z=g.getCwd(),A=b?(0,q.ph)(g.getEntries()):null,B=(i=H(),j=G(z),i.set(j,(i.get(j)??0)+1),()=>{let a=(i.get(j)??1)-1;a>0?i.set(j,a):i.delete(j)}),D=new AbortController,I=setTimeout(()=>D.abort(),25e3),J=!1,K=!1,L=()=>{K||(K=!0,B())},M=(async()=>{let b;(0,e.initTheme)();let d=(0,e.getAgentDir)(),f=A?.tools;A||void 0===k||(f=0===k.length?[]:void 0);let h=A?void 0:(0,n.Fk)(z,d),i=await (0,e.createAgentSessionServices)({cwd:z,agentDir:d,modelRuntimeSignal:D.signal,resourceLoaderOptions:A?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,appendSystemPrompt:A.appendSystemPrompt}:{extensionFactories:[(0,p.Vj)(aa.extensionRuntime,()=>(0,q.IR)(z),s.N)],extensionsOverride:a=>(0,p.U6)(a)},...h?{resourceLoaderReloadOptions:h}:{}}),{createAsyncBashTools:j}=await Promise.resolve().then(c.bind(c,44271)),w=new C.B,x=j(w),y=await (0,m.py)(i.modelRuntime,i.settingsManager.getEnabledModels(),{signal:D.signal}),B=i.settingsManager.getDefaultProvider(),G=i.settingsManager.getDefaultModel(),H=g.getBranch().some(a=>"message"===a.type)?{scopedModels:[...y.scopedModels]}:(0,m.IR)(y,{...r?{requestedModel:r}:{},...B&&G?{defaultModel:{provider:B,modelId:G}}:{},...t?{thinkingLevel:t}:{}}),I=!1,K=(0,e.createAgentSessionFromServices)({services:i,sessionManager:g,...H.model?{model:H.model}:{},...H.thinkingLevel?{thinkingLevel:H.thinkingLevel}:{},...H.scopedModels.length>0?{scopedModels:H.scopedModels}:{},...void 0!==f?{tools:f}:{},customTools:x}),{session:L}=await Promise.race([K,new Promise((a,c)=>{b=setTimeout(()=>{I=!0,D.abort(),c(Error("Session startup timed out while binding extensions/resources (40s)"))},4e4)})]);clearTimeout(b),K.then(({session:a})=>{if(I)try{a.dispose()}catch{}},()=>{});let M=w.cleanup.bind(w);try{let b=L.agent,c=b.streamFunction;if(b.streamFunction=(b,d,e)=>{let f=c(b,d,e);return f instanceof Promise?f.then(c=>T(c,{provider:b.provider,modelId:b.id,sessionId:a})):T(f,{provider:b.provider,modelId:b.id,sessionId:a})},(await (0,v.o)(i.settingsManager,{...r?{model:r}:{},...t?{thinkingLevel:t}:{}},{...L.model?{model:{provider:L.model.provider,modelId:L.model.id}}:{},thinkingLevel:L.agent.state?.thinkingLevel??"off",supportsThinking:L.supportsThinking()})).modelDefaultChanged&&(0,l.k)(),!A&&k&&k.length>0&&L.setActiveToolsByName(E(L,k)),J){try{L.dispose()}catch{}try{M()}catch{}throw Error("Session startup abandoned after hard timeout")}let d=new $(L,z);k?.length===0||A?.tools.length===0?d.setForceEmptySystemPrompt(!0):A&&A.appendSystemPrompt.length>0&&d.setExactSystemPrompt(A.appendSystemPrompt[0]),d.start(),d.loadQueueRecovery();let e=L.sessionId,f=L.sessionFile;return f&&(0,o.O8)(e,f),d.persistSessionFileIfMissing(),d.onDestroy(()=>{M(),u.get(e)===d&&u.delete(e)}),u.set(e,d),d.beginExtensionBinding({forceEmptySystemPrompt:k?.length===0}),!function(){let a=F();if(a.size<=12)return;let b=Array.from(a.entries()).filter(([,a])=>a.isAlive()&&!a.isRunning()&&!a.hasSubscribers()).sort((a,b)=>a[1].activityTimestamp-b[1].activityTimestamp),c=a.size-12;for(let[d,e]of b){if(c<=0)break;a.has(d)&&(console.log(`[pi-web] evicting idle unwatched session ${d} (registry cap 12)`),e.shutdown().catch(a=>{console.error(`[pi-web] failed to evict session ${d}:`,a instanceof Error?a.message:a)}),c-=1)}}(),{session:d,realSessionId:e}}catch(a){try{L.dispose()}catch{}try{M()}catch{}throw a}})().finally(()=>{clearTimeout(I),clearTimeout(h),w.delete(a),L()}),N=Promise.race([M,new Promise((b,c)=>{h=setTimeout(()=>{J=!0,D.abort(),w.delete(a),L(),c(Error("Session startup timed out after 60s (extension/resource binding may be hung); the start lock was released — retry the request to start over."))},6e4)})]);return M.then(()=>{},()=>{}),w.set(a,N),N}d()}catch(a){d(a)}})},64735:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{S3:()=>k,lN:()=>j});var e=c(6999),f=c(67264),g=c(36193),h=a([e]);e=(h.then?(await h)():h)[0];let l="modes",m="modesPerSession";function i(a){if(!a||"object"!=typeof a||Array.isArray(a))return null;let b=a.permissionRules,c=(0,g.kP)((0,g.ni)(b));return{collaborationMode:(0,f.UY)(a.collaborationMode),tokenMode:(0,f.wI)(a.tokenMode),toolApprovalMode:(0,f.g0)(a.toolApprovalMode),permissionRules:{allow:Array.isArray(c.allow)?c.allow:[],ask:Array.isArray(c.ask)?c.ask:[],deny:Array.isArray(c.deny)?c.deny:[]}}}function j(a){let b=(0,f.Md)(),c=(0,e.Tu)();if(a){let b=c[m];if(b&&"object"==typeof b&&!Array.isArray(b)){let c=i(b[a]);if(c)return c}}return i(c[l])??b}async function k(a,b){let c={collaborationMode:(0,f.UY)(a.collaborationMode),tokenMode:(0,f.wI)(a.tokenMode),toolApprovalMode:(0,f.g0)(a.toolApprovalMode),permissionRules:a.permissionRules};await (0,e.o$)(a=>{if(b){let d=a[m]??{};d[b]=c,a[m]=d}else a[l]=c;return{settings:a}})}d()}catch(a){d(a)}})},71069:(a,b,c)=>{c.d(b,{TQ:()=>e,p1:()=>d});let d=92;function e(a,b=d,c=40){return Object.freeze({terminal:Object.freeze({columns:b,rows:c,kittyProtocolActive:!1}),requestRender:a})}},72498:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>i,Y1:()=>g,er:()=>h});var e=c(75430),f=a([e]);function g(a,b){return a&&(0,e.hasTrustRequiringProjectResources)(a)?{requiresTrust:!0,trusted:!0===new e.ProjectTrustStore(b).get(a)}:{requiresTrust:!1,trusted:!0}}function h(a,b){let c=g(a,b);return c.requiresTrust?(new e.ProjectTrustStore(b).set(a,!0),{requiresTrust:!0,trusted:!0}):c}function i(a,b){if(!g(a,b).requiresTrust)return;let c=new e.ProjectTrustStore(b);return{resolveProjectTrust:async()=>!0===c.get(a)}}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},78970:(a,b,c)=>{c.d(b,{kc:()=>d});function d(a){if(void 0===a)return null;if(!Array.isArray(a))return"images must be an array";if(a.length>10)return"A message can include at most 10 images";for(let b of a)if(!function(a){var b;if(!a||"object"!=typeof a||"image"!==a.type||"string"!=typeof a.data||"string"!=typeof a.mimeType||(b=a.mimeType,!/^image\/[A-Za-z0-9][A-Za-z0-9!#$&^_.+-]*$/.test(b)))return!1;let c=function(a){if(!a||a.length%4!=0)return null;let b=a.endsWith("==")?2:+!!a.endsWith("="),c=a.length-b,d=null;for(let b=0;b<c;b+=1){var e;let c=(e=a.charCodeAt(b))>=65&&e<=90?e-65:e>=97&&e<=122?e-97+26:e>=48&&e<=57?e-48+52:43===e?62:47===e?63:null;if(null===c)return null;d=c}for(let b=c;b<a.length;b+=1)if("="!==a[b])return null;return 2===b&&d%16!=0||1===b&&d%4!=0?null:a.length/4*3-b}(a.data);return null!==c&&c<=0xa00000}(b))return"Each image must be valid base64 image data with an image MIME type and be 10MB or smaller";return null}},99324:(a,b,c)=>{c.d(b,{Wv:()=>h,jN:()=>j,vH:()=>i});var d=c(29021),e=c(33873),f=c(82536),g=c(58864);let h=8;function i(a,b){if(b.length>h)throw Error(`Agent input_files accepts at most ${h} files`);let c=(0,d.realpathSync)(a),i=new Set([c]),j=new TextDecoder("utf-8",{fatal:!0}),k=new Set,l=[],m=0;for(let h of b){let b,n;if(!h.trim())throw Error("Agent input_files paths must not be empty");try{b=(0,d.realpathSync)((0,e.resolve)(a,h))}catch{throw Error(`Agent input file does not exist: ${h}`)}if(!(0,f.o)(b,i))throw Error(`Agent input file is outside the session cwd: ${h}`);if(!(0,d.statSync)(b).isFile())throw Error(`Agent input path is not a file: ${h}`);if(k.has(b))continue;k.add(b);let o=(0,d.readFileSync)(b);if((m+=o.byteLength)>524288)throw Error("Agent input_files exceeds the 524288-byte total limit");try{n=j.decode(o)}catch{throw Error(`Agent input file is not valid UTF-8 text: ${h}`)}l.push({path:(0,g.W3)((0,e.relative)(c,b)),content:n})}return l}function j(a,b){if(0===b.length)return a;let c=b.map(a=>`<document path=${JSON.stringify(a.path)}>
18
18
  ${a.content}
19
19
  </document>`).join("\n\n");return`${a}
20
20
 
@@ -1,2 +1,2 @@
1
- exports.id=7915,exports.ids=[7915],exports.modules={8102:(a,b,c)=>{"use strict";c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},39006:a=>{"use strict";a.exports=JSON.parse('{"name":"@qt4798/pi-web","version":"0.14.0","description":"Web workspace for the pi coding agent","homepage":"https://github.com/t479842598/pi-web-QT#readme","repository":{"type":"git","url":"git+https://github.com/t479842598/pi-web-QT.git"},"bugs":{"url":"https://github.com/t479842598/pi-web-QT/issues"},"license":"MIT","engines":{"node":">=22.19.0"},"bin":{"pi-web":"bin/pi-web.js"},"files":["bin",".next","!.next/cache","!.next/dev","!.next/standalone","!.next/**/*.js.map","lib/theme","public","next.config.ts","package.json"],"scripts":{"dev":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next dev -H 127.0.0.1 -p 0 --turbopack","dev:lan":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next dev -H 0.0.0.0 -p 0 --turbopack","build":"env -u TURBOPACK -u __NEXT_PRIVATE_STANDALONE_CONFIG next build --webpack","bundle:backend":"node scripts/bundle-backend.mjs","start":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next start -H 127.0.0.1 -p 0","start:lan":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next start -H 0.0.0.0 -p 0","lint":"eslint .","release":"npm version patch --no-git-tag-version && npm run build && npm publish --access public","test":"node --experimental-strip-types --test $(find app components hooks lib -name \'*.test.mjs\' -print)"},"dependencies":{"@earendil-works/pi-agent-core":"^0.84.3","@earendil-works/pi-ai":"^0.84.3","@earendil-works/pi-coding-agent":"^0.84.3","@earendil-works/pi-tui":"^0.84.3","@fontsource/ia-writer-quattro":"^5.3.0","@fontsource/lilex":"^5.3.0","@phosphor-icons/react":"^2.1.10","@tanstack/react-virtual":"^3.14.9","@tauri-apps/api":"^2.11.1","@types/react-syntax-highlighter":"^15.5.13","adm-zip":"^0.6.0","ansi_up":"^6.0.6","js-yaml":"^5.2.3","katex":"^0.16.47","mammoth":"^1.12.0","mermaid":"^11.14.0","next":"16.3.1","proper-lockfile":"4.1.2","react":"^19.2.4","react-dom":"^19.2.4","react-markdown":"^10.1.0","react-syntax-highlighter":"^16.1.1","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","undici":"^8.10.0"},"overrides":{"undici":"^8.10.0","@earendil-works/pi-coding-agent":{"undici":"^8.10.0"},"intersection-observer":"npm:noop2@2.0.0","node-domexception":"npm:@profoundlogic/node-domexception@1.0.2"},"allowScripts":{"@google/genai@1.52.0":true,"protobufjs@7.6.5":true,"sharp@0.34.5":true,"unrs-resolver@1.12.2":true},"devDependencies":{"@resvg/resvg-js":"^2.6.2","@tailwindcss/postcss":"^4.2.2","@types/js-yaml":"^4.0.9","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/react":"^19","@types/react-dom":"^19","eslint":"^9.39.5","eslint-config-next":"16.3.1","jiti":"^2.7.0","lightningcss":"^1.33.0","postcss":"^8","tailwindcss":"^4.2.2","to-ico":"^1.1.5","typescript":"^5.9.3"}}')},50593:(a,b,c)=>{"use strict";function d(a){return/^[a-zA-Z]:[\\/]/.test(a)||a.startsWith("\\\\")?a.replace(/\\/g,"/"):a}c.d(b,{A0:()=>d})},66544:(a,b,c)=>{"use strict";c.d(b,{E2:()=>j,EN:()=>i});var d=c(77030);function e(a){return(a.startsWith("[")&&a.endsWith("]")?a.slice(1,-1):a).toLowerCase().replace(/\.$/,"")}function f(a){if(!a||/[\s/@\\]/.test(a))return null;try{let b=new URL(`http://${a}`);if(b.username||b.password||"/"!==b.pathname||b.search||b.hash)return null;return e(b.hostname)}catch{return null}}function g(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter(a=>!!a?.trim())}let h=new Set(["POST","PUT","PATCH","DELETE"]);function i(a,b=g()){return!!function(a,b=g()){let c=a.headers.get("host"),h=c?f(c):null;return!!h&&(!!("localhost"===h||h.endsWith(".localhost")||(0,d.isIP)(h))||b.some(a=>{let b;return((b=a?.trim())?(0,d.isIP)(b)?e(b):f(b):null)===h}))}(a,b)&&(!!function(a){if("GET"!==a.method||"navigate"!==a.headers.get("sec-fetch-mode")||"document"!==a.headers.get("sec-fetch-dest")||"?1"!==a.headers.get("sec-fetch-user"))return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(a.url).pathname)}catch{return!1}}(a)||(a.headers.has("origin")||a.headers.has("sec-fetch-site")?function(a){let b,c,d,e;if("cross-site"===a.headers.get("sec-fetch-site"))return!1;let f=a.headers.get("origin");if(!f)return!0;let g=(b=new URL(a.url),(c=a.headers.get("host"))?function(a){try{return new URL(a).origin}catch{return null}}(`${b.protocol}//${c}`):null);if(!g)return!1;try{d=new URL(f),e=new URL(g)}catch{return!1}if(d.protocol!==e.protocol||d.hostname.toLowerCase()!==e.hostname.toLowerCase())return!1;if(!d.port)return!0;let h=e.port||("https:"===e.protocol?"443":"80");return d.port===h}(a):!h.has((a.method??"GET").toUpperCase())))}function j(a){let b=a.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return"application/json"===b||!!(b?.startsWith("application/")&&b.endsWith("+json"))}},78335:()=>{},89628:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DT:()=>y,dH:()=>A,g3:()=>z,jE:()=>v,lz:()=>B,uj:()=>t});var e=c(26106),f=c.n(e),g=c(29021),h=c(21820),i=c(33873),j=c(75430),k=c(50593),l=c(8102),m=a([j]);j=(m.then?(await m)():m)[0];let D="pi-backup",E="${agentDir}",F="${home}";function n(a){if(!(0,g.existsSync)(a))return null;try{let b=JSON.parse((0,g.readFileSync)(a,"utf8"));return null!==b&&"object"==typeof b?b:null}catch{return null}}function o(a){let b=[],c=[""];for(;c.length>0;){let d,e=c.pop(),f=(0,i.join)(a,e);try{d=(0,g.readdirSync)(f)}catch{continue}for(let a of d){let d;if("node_modules"===a||".git"===a)continue;let h=e?`${e}/${a}`:a,j=(0,i.join)(f,a);try{d=(0,g.statSync)(j)}catch{continue}d.isDirectory()?c.push(h):d.isFile()&&b.push(h)}}return b}function p(a){let b=(0,k.A0)((0,j.getAgentDir)()),c=(0,k.A0)((0,h.homedir)());return r(a,a=>{let d=(0,k.A0)(a);return d===b?E:d===c?F:d.startsWith(b+"/")?E+d.slice(b.length):d.startsWith(c+"/")?F+d.slice(c.length):a})}function q(a){let b=(0,j.getAgentDir)(),c=(0,h.homedir)();return r(a,a=>a===E?b:a===F?c:a.startsWith(E+"/")?(0,i.join)(b,...a.slice(E.length+1).split("/")):a.startsWith(F+"/")?(0,i.join)(c,...a.slice(F.length+1).split("/")):a)}function r(a,b){if("string"==typeof a)return b(a);if(Array.isArray(a))return a.map(a=>r(a,b));if(null!==a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=r(e,b);return c}return a}function s(a,b,c){a.addFile(`${D}/${b}`,Buffer.isBuffer(c)?c:Buffer.from(c,"utf8"))}function t(a){let b=(0,j.getAgentDir)(),d=new(f()),e={formatVersion:1,createdAt:new Date().toISOString(),...function(){try{return{piWebVersion:c(39006).version??"unknown",piSdkVersion:"unknown"}}catch{return{piWebVersion:"unknown",piSdkVersion:"unknown"}}}(),sourcePlatform:process.platform,includeSecrets:a.includeSecrets,includeSessions:a.includeSessions,files:[],mcpBinScripts:[],localPackages:[],absolutePaths:[],warnings:[]};for(let c of["models.json","auth.json","settings.json","mcp.json","models-store.json","AGENTS.md","APPEND_SYSTEM.md"]){let f=(0,i.join)(b,c);if(!(0,g.existsSync)(f)||"auth.json"===c&&!a.includeSecrets)continue;let h=(0,g.readFileSync)(f,"utf8");if("models.json"!==c||a.includeSecrets){if("settings.json"===c||"mcp.json"===c||"models.json"===c){let a=n(f);a&&(h=JSON.stringify(p(a),null,2))}}else{let a=n(f);a&&(h=JSON.stringify(function(a){let b=a.providers??{},c={};for(let[a,d]of Object.entries(b))c[a]={...d},"string"==typeof c[a].apiKey&&(c[a].apiKey="");return{...a,providers:c}}(a),null,2))}s(d,c,String(h)),e.files.push(`${D}/${c}`)}let h=(0,i.join)(b,"skills");if((0,g.existsSync)(h))for(let a of o(h))d.addFile(`${D}/skills/${a}`,(0,g.readFileSync)((0,i.join)(h,a))),e.files.push(`${D}/skills/${a}`);let l=n((0,i.join)(b,"settings.json"));for(let a of l?.packages??[]){let b="string"==typeof a?a:a?.source;if(!b||b.startsWith("npm:"))continue;let c=(0,k.A0)(b);if((0,i.isAbsolute)(c)&&(0,g.existsSync)(c)){let a=(0,i.basename)(c);for(let b of o(c))d.addFile(`${D}/local-packages/${a}/${b}`,(0,g.readFileSync)((0,i.join)(c,b))),e.files.push(`${D}/local-packages/${a}/${b}`);e.localPackages.push(a)}else e.warnings.push(`Local package skipped (not found or not absolute): ${b}`)}let m=n((0,i.join)(b,"mcp.json")),q=new Set;if(m?.mcpServers)for(let a of Object.values(m.mcpServers))!function a(b,c){if("string"==typeof b){let a=`${E}/bin/`;if(b.startsWith(a)){let d=b.slice(a.length).split("/")[0];d&&c.add(d)}return}if(Array.isArray(b)){for(let d of b)a(d,c);return}if(null!==b&&"object"==typeof b)for(let d of Object.values(b))a(d,c)}(p(a),q);for(let a of q){let c=(0,i.join)(b,"bin",a);(0,g.existsSync)(c)&&(0,g.statSync)(c).isFile()?(d.addFile(`${D}/bin/${a}`,(0,g.readFileSync)(c)),e.files.push(`${D}/bin/${a}`),e.mcpBinScripts.push(a)):e.warnings.push(`MCP bin script referenced but missing: ${a}`)}if(a.includeSessions){let a=(0,i.join)(b,"sessions");if((0,g.existsSync)(a))for(let b of o(a))d.addFile(`${D}/sessions/${b}`,(0,g.readFileSync)((0,i.join)(a,b))),e.files.push(`${D}/sessions/${b}`)}return s(d,"manifest.json",JSON.stringify(e,null,2)),d.toBuffer()}let G=new Set(["npx","uvx","node","uv","npm","git","python3","python","bun","deno"]);function u(a){let b=a.toString("utf8",0,256).split(/\r?\n/,1)[0]??"";return b.startsWith("#!")?b:null}function v(a,b,c){let d=(0,j.getAgentDir)(),e=c??process.platform,f="win32"===e,g=[],h=[];for(let[c,j]of Object.entries(a)){let a,l=q(j),m="string"==typeof l.command?l.command:"",n=Array.isArray(l.args)?l.args.map(String):[],o={command:m,args:n},p=function(a,b){if(!a)return"manual";if((0,k.A0)(a).startsWith((0,k.A0)(b)+"/bin/"))return"restore-script";if(a.includes("/")||a.includes("\\")||a.includes(":"))return"keep-with-warning";let c=a.split(/[\s]/)[0];return G.has(c),"keep"}(m,d),r=null;if("restore-script"===p){let j=(0,i.basename)((0,k.A0)(m)),l=b.get(j);if(!l){r=null,a=`bin script ${j} missing from backup`,h.push({name:c,original:o,adapted:r,action:"manual",platform:e,reason:a,installPrompt:C({name:c,original:o,adapted:r,action:"manual",platform:e,reason:a})});continue}if(!w(j)){a=`bin script name rejected (unsafe): ${j}`;let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`);continue}if(!x(l)){a="bin script content rejected (unrecognized shebang)";let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`);continue}if(f){let b=u(l);if(b&&b.includes("node"))r={command:(0,i.join)(d,"bin",`${j}.cmd`),args:n},h.push({name:c,original:o,adapted:r,action:"generate-cmd",platform:e,reason:(0,i.join)(d,"bin",j)});else{a="bash/other shebang wrapper cannot run on Windows; reinstall or adjust manually";let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`)}}else r={command:(0,i.join)(d,"bin",j),args:n},h.push({name:c,original:o,adapted:r,action:"restore-script",platform:e});continue}if("keep-with-warning"===p){r={command:m,args:n},a="absolute path outside agentDir/bin — verify it exists on this machine",h.push({name:c,original:o,adapted:r,action:"keep-with-warning",platform:e,reason:a}),g.push(`${c}: ${a}`);continue}r={command:m,args:n},h.push({name:c,original:o,adapted:r,action:"keep",platform:e})}return{servers:h,warnings:g}}function w(a){return/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(a)&&!a.includes("..")}function x(a){let b=u(a);if(!b)return!1;let c=b.slice(2).trim().split(/\s+/);if(0===c.length)return!1;let d=c[0],e=d.split("/").pop()??d;return!!["node","bash","sh","python3","python","zsh"].includes(e)||"env"===e&&c.length>1&&["node","bash","sh","python3","python"].includes(c[1].split("/").pop()??"")}function y(a){let b;try{b=new(f())(a)}catch(a){throw Error(`Not a valid zip archive: ${a instanceof Error?a.message:String(a)}`)}let c=b.getEntries(),d=(0,g.mkdtempSync)((0,i.join)((0,h.tmpdir)(),"pi-backup-")),e=(0,i.join)(d,D);(0,g.mkdirSync)(e,{recursive:!0});let j=0,k=0;for(let a of c){if(a.isDirectory)continue;let c=a.entryName.replace(/\\/g,"/");if(!c.startsWith(`${D}/`))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Unexpected entry outside ${D}/: ${c}`);let f=(0,i.resolve)(e,c.slice(D.length+1));if(!f.startsWith((0,i.resolve)(e)+i.sep))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Path traversal blocked: ${c}`);let h="number"==typeof a.header.size?a.header.size:0;if(j+=h,h>0x20000000||j>0x40000000)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Backup archive too large when extracted (entry: ${c})`);(0,g.mkdirSync)((0,i.dirname)(f),{recursive:!0}),b.extractEntryTo(a,(0,i.dirname)(f),!1,!0);let l=(0,g.statSync)(f).size;if(k+=l,l>0x20000000||k>0x40000000)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Backup archive too large when extracted (entry: ${c})`)}let l=(0,i.join)(e,"manifest.json");if(!(0,g.existsSync)(l))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error("Backup manifest.json missing — not a pi-web backup");let m=n(l);if(!m||1!==m.formatVersion)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Unsupported backup format version: ${m?.formatVersion??"unknown"} (expected 1)`);let o=n((0,i.join)(e,"mcp.json"))?.mcpServers??{},p=new Map;for(let a of m.mcpBinScripts??[]){let b=(0,i.join)(e,"bin",a);(0,g.existsSync)(b)&&p.set(a,(0,g.readFileSync)(b))}let q=["core","skills","packages","mcp"];return m.includeSessions&&q.push("sessions"),{manifest:m,tempDir:d,servers:o,binScripts:p,categories:q}}function z(a){(0,g.rmSync)(a.tempDir,{recursive:!0,force:!0})}function A(a,b){let c=(0,j.getAgentDir)(),{manifest:d}=a,e={restored:[],needsRestart:[],manual:[],warnings:[]},f=new Set(b.categories),h=new Set(b.skippedMcpServers),m=b=>{let d=(0,i.join)(c,b),f=(0,i.join)(a.tempDir,D,b);(0,g.existsSync)(f)&&((0,g.mkdirSync)((0,i.dirname)(d),{recursive:!0}),(0,l.$)(d,(0,g.readFileSync)(f,"utf8")),e.restored.push(b))};if(f.has("core"))for(let a of["models.json","auth.json","settings.json","mcp.json","models-store.json","AGENTS.md","APPEND_SYSTEM.md"])("auth.json"!==a||d.includeSecrets)&&(m(a),e.needsRestart.push(a));if(f.has("skills")){let b=(0,i.join)(a.tempDir,D,"skills");if((0,g.existsSync)(b)){for(let a of o(b)){let d=(0,i.join)(c,"skills",a);(0,g.mkdirSync)((0,i.dirname)(d),{recursive:!0}),(0,l.$)(d,(0,g.readFileSync)((0,i.join)(b,a),"utf8"))}e.restored.push("skills/")}}if(f.has("packages")){let b=(0,i.join)(c,"settings.json"),f=n(b)??{},h=f.packages??[],j=d.localPackages??[],m=(0,i.join)(a.tempDir,D,"local-packages");for(let a of j){if(!w(a)){e.warnings.push(`Local package ${a} not restored (unsafe name)`);continue}let b=(0,i.join)(m,a);if(!(0,g.existsSync)(b)){e.warnings.push(`Local package ${a} missing from backup`);continue}let d=(0,i.join)(c,"local-packages",a);for(let a of o(b)){let c=(0,i.join)(d,a);(0,g.mkdirSync)((0,i.dirname)(c),{recursive:!0}),(0,l.$)(c,(0,g.readFileSync)((0,i.join)(b,a),"utf8"))}e.restored.push(`local-packages/${a}`)}let p=!1,q=h.map(a=>{let b="string"==typeof a?a:a?.source;if("string"!=typeof b||b.startsWith("npm:"))return a;let d=(0,i.basename)((0,k.A0)(b));if(j.includes(d)){p=!0;let b=(0,i.join)(c,"local-packages",d);return"string"==typeof a?b:{...a,source:b}}return a});if(p){let a={...f,packages:q};(0,l.$)(b,JSON.stringify(a,null,2)),e.restored.push("settings.json (packages paths)"),e.needsRestart.push("settings.json (packages paths)")}for(let a of h.map(a=>"string"==typeof a?a:a?.source).filter(a=>"string"==typeof a&&a.startsWith("npm:")))e.restored.push(`npm package ${a} (queued for reinstall)`)}if(f.has("mcp")){let b=v(a.servers,a.binScripts);e.warnings.push(...b.warnings);let d=n((0,i.join)(c,"mcp.json"))??{},f={};for(let d of b.servers){if(h.has(d.name))continue;if("manual"===d.action){e.manual.push({server:d.name,message:d.reason??"cannot be adapted automatically"});continue}let b=a.servers[d.name]??{},j=q(b);if(f[d.name]={...j,command:d.adapted?.command??j.command,...d.adapted?{args:d.adapted.args}:{}},"restore-script"===d.action){let b=(0,i.basename)((0,k.A0)(String(d.adapted?.command??""))),f=a.binScripts.get(b);if(f&&w(b)&&x(f)){let a=(0,i.join)(c,"bin",b);(0,g.mkdirSync)((0,i.dirname)(a),{recursive:!0}),(0,l.$)(a,f.toString("utf8"));try{(0,g.chmodSync)(a,493)}catch{}e.restored.push(`bin/${b}`)}else e.warnings.push(`bin script ${b} not restored (unsafe name or content)`)}if("generate-cmd"===d.action){let b=(0,i.basename)((0,k.A0)(String(d.adapted?.command??""))).replace(/\.cmd$/,""),f=a.binScripts.get(b);if(f&&w(b)&&x(f)){let a=(0,i.join)(c,"bin",b);(0,g.mkdirSync)((0,i.dirname)(a),{recursive:!0}),(0,l.$)(a,f.toString("utf8"));let d=(0,i.join)(c,"bin",`${b}.cmd`),h=`%~dp0${b}`;(0,l.$)(d,`@node "${h}" %*\r
1
+ exports.id=7915,exports.ids=[7915],exports.modules={8102:(a,b,c)=>{"use strict";c.d(b,{$:()=>g});var d=c(55511),e=c(29021),f=c(33873);function g(a,b){let c=(0,f.dirname)(a),g=(0,f.join)(c,`.${(0,f.basename)(a)}-${(0,d.randomUUID)()}.tmp`),h=!1;try{(0,e.writeFileSync)(g,b,{encoding:"utf8",flag:"wx",mode:384,flush:!0}),(0,e.renameSync)(g,a)}catch(a){throw h=!0,a}finally{try{(0,e.unlinkSync)(g)}catch(a){if("ENOENT"!==a.code&&!h)throw a}}}},39006:a=>{"use strict";a.exports=JSON.parse('{"name":"@qt4798/pi-web","version":"0.14.3","description":"Web workspace for the pi coding agent","homepage":"https://github.com/t479842598/pi-web-QT#readme","repository":{"type":"git","url":"git+https://github.com/t479842598/pi-web-QT.git"},"bugs":{"url":"https://github.com/t479842598/pi-web-QT/issues"},"license":"MIT","engines":{"node":">=22.19.0"},"bin":{"pi-web":"bin/pi-web.js"},"files":["bin",".next","!.next/cache","!.next/dev","!.next/standalone","!.next/**/*.js.map","lib/theme","public","next.config.ts","package.json"],"scripts":{"dev":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next dev -H 127.0.0.1 -p 0 --turbopack","dev:lan":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next dev -H 0.0.0.0 -p 0 --turbopack","build":"env -u TURBOPACK -u __NEXT_PRIVATE_STANDALONE_CONFIG next build --webpack","bundle:backend":"node scripts/bundle-backend.mjs","start":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next start -H 127.0.0.1 -p 0","start:lan":"node bin/fix-pi-agent-undici.js && node bin/with-memory-limit.js node_modules/.bin/next start -H 0.0.0.0 -p 0","lint":"eslint .","release":"npm version patch --no-git-tag-version && npm run build && npm publish --access public","test":"node --experimental-strip-types --test $(find app components hooks lib -name \'*.test.mjs\' -print)"},"dependencies":{"@earendil-works/pi-agent-core":"^0.84.3","@earendil-works/pi-ai":"^0.84.3","@earendil-works/pi-coding-agent":"^0.84.3","@earendil-works/pi-tui":"^0.84.3","@fontsource/ia-writer-quattro":"^5.3.0","@fontsource/lilex":"^5.3.0","@phosphor-icons/react":"^2.1.10","@tanstack/react-virtual":"^3.14.9","@tauri-apps/api":"^2.11.1","@types/react-syntax-highlighter":"^15.5.13","adm-zip":"^0.6.0","ansi_up":"^6.0.6","js-yaml":"^5.2.3","katex":"^0.16.47","mammoth":"^1.12.0","mermaid":"^11.14.0","next":"16.3.1","proper-lockfile":"4.1.2","react":"^19.2.4","react-dom":"^19.2.4","react-markdown":"^10.1.0","react-syntax-highlighter":"^16.1.1","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1","remark-math":"^6.0.0","undici":"^8.10.0"},"overrides":{"undici":"^8.10.0","@earendil-works/pi-coding-agent":{"undici":"^8.10.0"},"intersection-observer":"npm:noop2@2.0.0","node-domexception":"npm:@profoundlogic/node-domexception@1.0.2"},"allowScripts":{"@google/genai@1.52.0":true,"protobufjs@7.6.5":true,"sharp@0.34.5":true,"unrs-resolver@1.12.2":true},"devDependencies":{"@resvg/resvg-js":"^2.6.2","@tailwindcss/postcss":"^4.2.2","@types/js-yaml":"^4.0.9","@types/node":"^25","@types/proper-lockfile":"4.1.4","@types/react":"^19","@types/react-dom":"^19","eslint":"^9.39.5","eslint-config-next":"16.3.1","jiti":"^2.7.0","lightningcss":"^1.33.0","postcss":"^8","tailwindcss":"^4.2.2","to-ico":"^1.1.5","typescript":"^5.9.3"}}')},50593:(a,b,c)=>{"use strict";function d(a){return/^[a-zA-Z]:[\\/]/.test(a)||a.startsWith("\\\\")?a.replace(/\\/g,"/"):a}c.d(b,{A0:()=>d})},66544:(a,b,c)=>{"use strict";c.d(b,{E2:()=>j,EN:()=>i});var d=c(77030);function e(a){return(a.startsWith("[")&&a.endsWith("]")?a.slice(1,-1):a).toLowerCase().replace(/\.$/,"")}function f(a){if(!a||/[\s/@\\]/.test(a))return null;try{let b=new URL(`http://${a}`);if(b.username||b.password||"/"!==b.pathname||b.search||b.hash)return null;return e(b.hostname)}catch{return null}}function g(){return[process.env.PI_WEB_HOSTNAME,...process.env.PI_WEB_ALLOWED_HOSTS?.split(",")??[]].filter(a=>!!a?.trim())}let h=new Set(["POST","PUT","PATCH","DELETE"]);function i(a,b=g()){return!!function(a,b=g()){let c=a.headers.get("host"),h=c?f(c):null;return!!h&&(!!("localhost"===h||h.endsWith(".localhost")||(0,d.isIP)(h))||b.some(a=>{let b;return((b=a?.trim())?(0,d.isIP)(b)?e(b):f(b):null)===h}))}(a,b)&&(!!function(a){if("GET"!==a.method||"navigate"!==a.headers.get("sec-fetch-mode")||"document"!==a.headers.get("sec-fetch-dest")||"?1"!==a.headers.get("sec-fetch-user"))return!1;try{return/^\/api\/sessions\/[^/]+\/export$/.test(new URL(a.url).pathname)}catch{return!1}}(a)||(a.headers.has("origin")||a.headers.has("sec-fetch-site")?function(a){let b,c,d,e;if("cross-site"===a.headers.get("sec-fetch-site"))return!1;let f=a.headers.get("origin");if(!f)return!0;let g=(b=new URL(a.url),(c=a.headers.get("host"))?function(a){try{return new URL(a).origin}catch{return null}}(`${b.protocol}//${c}`):null);if(!g)return!1;try{d=new URL(f),e=new URL(g)}catch{return!1}if(d.protocol!==e.protocol||d.hostname.toLowerCase()!==e.hostname.toLowerCase())return!1;if(!d.port)return!0;let h=e.port||("https:"===e.protocol?"443":"80");return d.port===h}(a):!h.has((a.method??"GET").toUpperCase())))}function j(a){let b=a.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase();return"application/json"===b||!!(b?.startsWith("application/")&&b.endsWith("+json"))}},78335:()=>{},89628:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{DT:()=>y,dH:()=>A,g3:()=>z,jE:()=>v,lz:()=>B,uj:()=>t});var e=c(26106),f=c.n(e),g=c(29021),h=c(21820),i=c(33873),j=c(75430),k=c(50593),l=c(8102),m=a([j]);j=(m.then?(await m)():m)[0];let D="pi-backup",E="${agentDir}",F="${home}";function n(a){if(!(0,g.existsSync)(a))return null;try{let b=JSON.parse((0,g.readFileSync)(a,"utf8"));return null!==b&&"object"==typeof b?b:null}catch{return null}}function o(a){let b=[],c=[""];for(;c.length>0;){let d,e=c.pop(),f=(0,i.join)(a,e);try{d=(0,g.readdirSync)(f)}catch{continue}for(let a of d){let d;if("node_modules"===a||".git"===a)continue;let h=e?`${e}/${a}`:a,j=(0,i.join)(f,a);try{d=(0,g.statSync)(j)}catch{continue}d.isDirectory()?c.push(h):d.isFile()&&b.push(h)}}return b}function p(a){let b=(0,k.A0)((0,j.getAgentDir)()),c=(0,k.A0)((0,h.homedir)());return r(a,a=>{let d=(0,k.A0)(a);return d===b?E:d===c?F:d.startsWith(b+"/")?E+d.slice(b.length):d.startsWith(c+"/")?F+d.slice(c.length):a})}function q(a){let b=(0,j.getAgentDir)(),c=(0,h.homedir)();return r(a,a=>a===E?b:a===F?c:a.startsWith(E+"/")?(0,i.join)(b,...a.slice(E.length+1).split("/")):a.startsWith(F+"/")?(0,i.join)(c,...a.slice(F.length+1).split("/")):a)}function r(a,b){if("string"==typeof a)return b(a);if(Array.isArray(a))return a.map(a=>r(a,b));if(null!==a&&"object"==typeof a){let c={};for(let[d,e]of Object.entries(a))c[d]=r(e,b);return c}return a}function s(a,b,c){a.addFile(`${D}/${b}`,Buffer.isBuffer(c)?c:Buffer.from(c,"utf8"))}function t(a){let b=(0,j.getAgentDir)(),d=new(f()),e={formatVersion:1,createdAt:new Date().toISOString(),...function(){try{return{piWebVersion:c(39006).version??"unknown",piSdkVersion:"unknown"}}catch{return{piWebVersion:"unknown",piSdkVersion:"unknown"}}}(),sourcePlatform:process.platform,includeSecrets:a.includeSecrets,includeSessions:a.includeSessions,files:[],mcpBinScripts:[],localPackages:[],absolutePaths:[],warnings:[]};for(let c of["models.json","auth.json","settings.json","mcp.json","models-store.json","AGENTS.md","APPEND_SYSTEM.md"]){let f=(0,i.join)(b,c);if(!(0,g.existsSync)(f)||"auth.json"===c&&!a.includeSecrets)continue;let h=(0,g.readFileSync)(f,"utf8");if("models.json"!==c||a.includeSecrets){if("settings.json"===c||"mcp.json"===c||"models.json"===c){let a=n(f);a&&(h=JSON.stringify(p(a),null,2))}}else{let a=n(f);a&&(h=JSON.stringify(function(a){let b=a.providers??{},c={};for(let[a,d]of Object.entries(b))c[a]={...d},"string"==typeof c[a].apiKey&&(c[a].apiKey="");return{...a,providers:c}}(a),null,2))}s(d,c,String(h)),e.files.push(`${D}/${c}`)}let h=(0,i.join)(b,"skills");if((0,g.existsSync)(h))for(let a of o(h))d.addFile(`${D}/skills/${a}`,(0,g.readFileSync)((0,i.join)(h,a))),e.files.push(`${D}/skills/${a}`);let l=n((0,i.join)(b,"settings.json"));for(let a of l?.packages??[]){let b="string"==typeof a?a:a?.source;if(!b||b.startsWith("npm:"))continue;let c=(0,k.A0)(b);if((0,i.isAbsolute)(c)&&(0,g.existsSync)(c)){let a=(0,i.basename)(c);for(let b of o(c))d.addFile(`${D}/local-packages/${a}/${b}`,(0,g.readFileSync)((0,i.join)(c,b))),e.files.push(`${D}/local-packages/${a}/${b}`);e.localPackages.push(a)}else e.warnings.push(`Local package skipped (not found or not absolute): ${b}`)}let m=n((0,i.join)(b,"mcp.json")),q=new Set;if(m?.mcpServers)for(let a of Object.values(m.mcpServers))!function a(b,c){if("string"==typeof b){let a=`${E}/bin/`;if(b.startsWith(a)){let d=b.slice(a.length).split("/")[0];d&&c.add(d)}return}if(Array.isArray(b)){for(let d of b)a(d,c);return}if(null!==b&&"object"==typeof b)for(let d of Object.values(b))a(d,c)}(p(a),q);for(let a of q){let c=(0,i.join)(b,"bin",a);(0,g.existsSync)(c)&&(0,g.statSync)(c).isFile()?(d.addFile(`${D}/bin/${a}`,(0,g.readFileSync)(c)),e.files.push(`${D}/bin/${a}`),e.mcpBinScripts.push(a)):e.warnings.push(`MCP bin script referenced but missing: ${a}`)}if(a.includeSessions){let a=(0,i.join)(b,"sessions");if((0,g.existsSync)(a))for(let b of o(a))d.addFile(`${D}/sessions/${b}`,(0,g.readFileSync)((0,i.join)(a,b))),e.files.push(`${D}/sessions/${b}`)}return s(d,"manifest.json",JSON.stringify(e,null,2)),d.toBuffer()}let G=new Set(["npx","uvx","node","uv","npm","git","python3","python","bun","deno"]);function u(a){let b=a.toString("utf8",0,256).split(/\r?\n/,1)[0]??"";return b.startsWith("#!")?b:null}function v(a,b,c){let d=(0,j.getAgentDir)(),e=c??process.platform,f="win32"===e,g=[],h=[];for(let[c,j]of Object.entries(a)){let a,l=q(j),m="string"==typeof l.command?l.command:"",n=Array.isArray(l.args)?l.args.map(String):[],o={command:m,args:n},p=function(a,b){if(!a)return"manual";if((0,k.A0)(a).startsWith((0,k.A0)(b)+"/bin/"))return"restore-script";if(a.includes("/")||a.includes("\\")||a.includes(":"))return"keep-with-warning";let c=a.split(/[\s]/)[0];return G.has(c),"keep"}(m,d),r=null;if("restore-script"===p){let j=(0,i.basename)((0,k.A0)(m)),l=b.get(j);if(!l){r=null,a=`bin script ${j} missing from backup`,h.push({name:c,original:o,adapted:r,action:"manual",platform:e,reason:a,installPrompt:C({name:c,original:o,adapted:r,action:"manual",platform:e,reason:a})});continue}if(!w(j)){a=`bin script name rejected (unsafe): ${j}`;let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`);continue}if(!x(l)){a="bin script content rejected (unrecognized shebang)";let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`);continue}if(f){let b=u(l);if(b&&b.includes("node"))r={command:(0,i.join)(d,"bin",`${j}.cmd`),args:n},h.push({name:c,original:o,adapted:r,action:"generate-cmd",platform:e,reason:(0,i.join)(d,"bin",j)});else{a="bash/other shebang wrapper cannot run on Windows; reinstall or adjust manually";let b={name:c,original:o,adapted:null,action:"manual",platform:e,reason:a};h.push({...b,installPrompt:C(b)}),g.push(`${c}: ${a}`)}}else r={command:(0,i.join)(d,"bin",j),args:n},h.push({name:c,original:o,adapted:r,action:"restore-script",platform:e});continue}if("keep-with-warning"===p){r={command:m,args:n},a="absolute path outside agentDir/bin — verify it exists on this machine",h.push({name:c,original:o,adapted:r,action:"keep-with-warning",platform:e,reason:a}),g.push(`${c}: ${a}`);continue}r={command:m,args:n},h.push({name:c,original:o,adapted:r,action:"keep",platform:e})}return{servers:h,warnings:g}}function w(a){return/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(a)&&!a.includes("..")}function x(a){let b=u(a);if(!b)return!1;let c=b.slice(2).trim().split(/\s+/);if(0===c.length)return!1;let d=c[0],e=d.split("/").pop()??d;return!!["node","bash","sh","python3","python","zsh"].includes(e)||"env"===e&&c.length>1&&["node","bash","sh","python3","python"].includes(c[1].split("/").pop()??"")}function y(a){let b;try{b=new(f())(a)}catch(a){throw Error(`Not a valid zip archive: ${a instanceof Error?a.message:String(a)}`)}let c=b.getEntries(),d=(0,g.mkdtempSync)((0,i.join)((0,h.tmpdir)(),"pi-backup-")),e=(0,i.join)(d,D);(0,g.mkdirSync)(e,{recursive:!0});let j=0,k=0;for(let a of c){if(a.isDirectory)continue;let c=a.entryName.replace(/\\/g,"/");if(!c.startsWith(`${D}/`))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Unexpected entry outside ${D}/: ${c}`);let f=(0,i.resolve)(e,c.slice(D.length+1));if(!f.startsWith((0,i.resolve)(e)+i.sep))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Path traversal blocked: ${c}`);let h="number"==typeof a.header.size?a.header.size:0;if(j+=h,h>0x20000000||j>0x40000000)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Backup archive too large when extracted (entry: ${c})`);(0,g.mkdirSync)((0,i.dirname)(f),{recursive:!0}),b.extractEntryTo(a,(0,i.dirname)(f),!1,!0);let l=(0,g.statSync)(f).size;if(k+=l,l>0x20000000||k>0x40000000)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Backup archive too large when extracted (entry: ${c})`)}let l=(0,i.join)(e,"manifest.json");if(!(0,g.existsSync)(l))throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error("Backup manifest.json missing — not a pi-web backup");let m=n(l);if(!m||1!==m.formatVersion)throw(0,g.rmSync)(d,{recursive:!0,force:!0}),Error(`Unsupported backup format version: ${m?.formatVersion??"unknown"} (expected 1)`);let o=n((0,i.join)(e,"mcp.json"))?.mcpServers??{},p=new Map;for(let a of m.mcpBinScripts??[]){let b=(0,i.join)(e,"bin",a);(0,g.existsSync)(b)&&p.set(a,(0,g.readFileSync)(b))}let q=["core","skills","packages","mcp"];return m.includeSessions&&q.push("sessions"),{manifest:m,tempDir:d,servers:o,binScripts:p,categories:q}}function z(a){(0,g.rmSync)(a.tempDir,{recursive:!0,force:!0})}function A(a,b){let c=(0,j.getAgentDir)(),{manifest:d}=a,e={restored:[],needsRestart:[],manual:[],warnings:[]},f=new Set(b.categories),h=new Set(b.skippedMcpServers),m=b=>{let d=(0,i.join)(c,b),f=(0,i.join)(a.tempDir,D,b);(0,g.existsSync)(f)&&((0,g.mkdirSync)((0,i.dirname)(d),{recursive:!0}),(0,l.$)(d,(0,g.readFileSync)(f,"utf8")),e.restored.push(b))};if(f.has("core"))for(let a of["models.json","auth.json","settings.json","mcp.json","models-store.json","AGENTS.md","APPEND_SYSTEM.md"])("auth.json"!==a||d.includeSecrets)&&(m(a),e.needsRestart.push(a));if(f.has("skills")){let b=(0,i.join)(a.tempDir,D,"skills");if((0,g.existsSync)(b)){for(let a of o(b)){let d=(0,i.join)(c,"skills",a);(0,g.mkdirSync)((0,i.dirname)(d),{recursive:!0}),(0,l.$)(d,(0,g.readFileSync)((0,i.join)(b,a),"utf8"))}e.restored.push("skills/")}}if(f.has("packages")){let b=(0,i.join)(c,"settings.json"),f=n(b)??{},h=f.packages??[],j=d.localPackages??[],m=(0,i.join)(a.tempDir,D,"local-packages");for(let a of j){if(!w(a)){e.warnings.push(`Local package ${a} not restored (unsafe name)`);continue}let b=(0,i.join)(m,a);if(!(0,g.existsSync)(b)){e.warnings.push(`Local package ${a} missing from backup`);continue}let d=(0,i.join)(c,"local-packages",a);for(let a of o(b)){let c=(0,i.join)(d,a);(0,g.mkdirSync)((0,i.dirname)(c),{recursive:!0}),(0,l.$)(c,(0,g.readFileSync)((0,i.join)(b,a),"utf8"))}e.restored.push(`local-packages/${a}`)}let p=!1,q=h.map(a=>{let b="string"==typeof a?a:a?.source;if("string"!=typeof b||b.startsWith("npm:"))return a;let d=(0,i.basename)((0,k.A0)(b));if(j.includes(d)){p=!0;let b=(0,i.join)(c,"local-packages",d);return"string"==typeof a?b:{...a,source:b}}return a});if(p){let a={...f,packages:q};(0,l.$)(b,JSON.stringify(a,null,2)),e.restored.push("settings.json (packages paths)"),e.needsRestart.push("settings.json (packages paths)")}for(let a of h.map(a=>"string"==typeof a?a:a?.source).filter(a=>"string"==typeof a&&a.startsWith("npm:")))e.restored.push(`npm package ${a} (queued for reinstall)`)}if(f.has("mcp")){let b=v(a.servers,a.binScripts);e.warnings.push(...b.warnings);let d=n((0,i.join)(c,"mcp.json"))??{},f={};for(let d of b.servers){if(h.has(d.name))continue;if("manual"===d.action){e.manual.push({server:d.name,message:d.reason??"cannot be adapted automatically"});continue}let b=a.servers[d.name]??{},j=q(b);if(f[d.name]={...j,command:d.adapted?.command??j.command,...d.adapted?{args:d.adapted.args}:{}},"restore-script"===d.action){let b=(0,i.basename)((0,k.A0)(String(d.adapted?.command??""))),f=a.binScripts.get(b);if(f&&w(b)&&x(f)){let a=(0,i.join)(c,"bin",b);(0,g.mkdirSync)((0,i.dirname)(a),{recursive:!0}),(0,l.$)(a,f.toString("utf8"));try{(0,g.chmodSync)(a,493)}catch{}e.restored.push(`bin/${b}`)}else e.warnings.push(`bin script ${b} not restored (unsafe name or content)`)}if("generate-cmd"===d.action){let b=(0,i.basename)((0,k.A0)(String(d.adapted?.command??""))).replace(/\.cmd$/,""),f=a.binScripts.get(b);if(f&&w(b)&&x(f)){let a=(0,i.join)(c,"bin",b);(0,g.mkdirSync)((0,i.dirname)(a),{recursive:!0}),(0,l.$)(a,f.toString("utf8"));let d=(0,i.join)(c,"bin",`${b}.cmd`),h=`%~dp0${b}`;(0,l.$)(d,`@node "${h}" %*\r
2
2
  `),e.restored.push(`bin/${b}`,`bin/${b}.cmd`)}else e.warnings.push(`bin script ${b} not restored (unsafe name or content)`)}}(0,l.$)((0,i.join)(c,"mcp.json"),JSON.stringify({...d,mcpServers:f},null,2)),e.restored.push("mcp.json"),e.needsRestart.push("mcp.json")}return{report:e,npmPackages:B(a)}}function B(a){let b=n((0,i.join)(a.tempDir,D,"settings.json"));return(b?.packages??[]).map(a=>"string"==typeof a?a:a?.source).filter(a=>"string"==typeof a&&a.startsWith("npm:"))}function C(a){let b=(0,j.getAgentDir)(),c="win32"===process.platform?"Windows":"darwin"===process.platform?"macOS":"Linux",d=JSON.stringify(a.original,null,2);return[`请在当前环境(${c})安装 MCP server「${a.name}」。`,"\n## 原始配置(来自备份)\n```json",d,"```\n\n## 统一安装约定",`- 脚本类工具统一安装到 \`${(0,i.join)(b,"bin")}\`(Windows 上同时生成同名 \`.cmd\` 包装)。`,`- npm 类工具统一通过 \`npx <pkg>\` 运行,或安装到 \`${(0,i.join)(b,"npm")}\` 后引用。`,"- 依赖(node/npx/uv 等)统一从 PATH 解析,不要硬编码本机绝对路径。\n- 安装完成后,输出可直接写入 `~/.pi/agent/mcp.json` 的完整 server 配置片段(含 command/args/transport/lifecycle)。\n- 不要修改 mcp.json 中其它 server 的配置。\n\n安装过程中如遇障碍,请说明原因并给出替代方案。"].join("\n")}d()}catch(a){d(a)}})},96487:()=>{}};
@@ -1 +1 @@
1
- "use strict";(()=>{var a={};a.id=6183,a.ids=[6183],a.modules={643:a=>{a.exports=require("node:perf_hooks")},4573:a=>{a.exports=require("node:buffer")},12412:a=>{a.exports=require("assert")},16698:a=>{a.exports=require("node:async_hooks")},27910:a=>{a.exports=require("stream")},28354:a=>{a.exports=require("util")},28802:a=>{a.exports=import("@earendil-works/pi-ai")},29021:a=>{a.exports=require("fs")},29862:a=>{a.exports=import("@earendil-works/pi-tui")},31421:a=>{a.exports=require("node:child_process")},32467:a=>{a.exports=require("node:http2")},33873:a=>{a.exports=require("path")},34589:a=>{a.exports=require("node:assert")},37067:a=>{a.exports=require("node:http")},37540:a=>{a.exports=require("node:console")},37830:a=>{a.exports=require("node:stream/web")},38522:a=>{a.exports=require("node:zlib")},40610:a=>{a.exports=require("node:dns")},41692:a=>{a.exports=require("node:tls")},41792:a=>{a.exports=require("node:querystring")},51455:a=>{a.exports=require("node:fs/promises")},53053:a=>{a.exports=require("node:diagnostics_channel")},53861:(a,b,c)=>{async function d(){let a=Number(process.env.PI_WEB_PARENT_PID??"");if(Number.isInteger(a)&&a>1){let{isPidAlive:b}=await c.e(4952).then(c.bind(c,24952)),d=setInterval(()=>{b(a)||(clearInterval(d),process.exit(0))},Number(process.env.PI_WEB_PARENT_WATCHDOG_MS??"")||1e4);d.unref()}let{readProxyConfig:b,applyProxyEnv:d}=await c.e(2834).then(c.bind(c,12834));d(b());let{configureHttpDispatcher:e}=await c.e(2349).then(c.bind(c,42349));e();try{let{ensureTaskEngine:a}=await c.e(4253).then(c.bind(c,14253));a()}catch{}}c.r(b),c.d(b,{register:()=>d})},55511:a=>{a.exports=require("crypto")},57075:a=>{a.exports=require("node:stream")},57975:a=>{a.exports=require("node:util")},73024:a=>{a.exports=require("node:fs")},73136:a=>{a.exports=require("node:url")},73429:a=>{a.exports=require("node:util/types")},75430:a=>{a.exports=import("@earendil-works/pi-coding-agent")},75919:a=>{a.exports=require("node:worker_threads")},76760:a=>{a.exports=require("node:path")},77030:a=>{a.exports=require("node:net")},77598:a=>{a.exports=require("node:crypto")},78474:a=>{a.exports=require("node:events")},79646:a=>{a.exports=require("child_process")},80099:a=>{a.exports=require("node:sqlite")},81115:a=>{a.exports=require("constants")},87997:a=>{a.exports=require("node:timers")},94735:a=>{a.exports=require("events")}};var b=require("./webpack-runtime.js");b.C(a);var c=b(b.s=53861);module.exports=c})();
1
+ "use strict";(()=>{var a={};a.id=6183,a.ids=[6183],a.modules={643:a=>{a.exports=require("node:perf_hooks")},4573:a=>{a.exports=require("node:buffer")},4984:a=>{a.exports=require("readline")},12412:a=>{a.exports=require("assert")},16698:a=>{a.exports=require("node:async_hooks")},27910:a=>{a.exports=require("stream")},28354:a=>{a.exports=require("util")},28802:a=>{a.exports=import("@earendil-works/pi-ai")},29021:a=>{a.exports=require("fs")},29862:a=>{a.exports=import("@earendil-works/pi-tui")},31421:a=>{a.exports=require("node:child_process")},32467:a=>{a.exports=require("node:http2")},33873:a=>{a.exports=require("path")},34589:a=>{a.exports=require("node:assert")},37067:a=>{a.exports=require("node:http")},37540:a=>{a.exports=require("node:console")},37830:a=>{a.exports=require("node:stream/web")},38522:a=>{a.exports=require("node:zlib")},40610:a=>{a.exports=require("node:dns")},41692:a=>{a.exports=require("node:tls")},41792:a=>{a.exports=require("node:querystring")},51455:a=>{a.exports=require("node:fs/promises")},53053:a=>{a.exports=require("node:diagnostics_channel")},53861:(a,b,c)=>{async function d(){let a=Number(process.env.PI_WEB_PARENT_PID??"");if(Number.isInteger(a)&&a>1){let{isPidAlive:b}=await c.e(4952).then(c.bind(c,24952)),d=setInterval(()=>{b(a)||(clearInterval(d),process.exit(0))},Number(process.env.PI_WEB_PARENT_WATCHDOG_MS??"")||1e4);d.unref()}let{readProxyConfig:b,applyProxyEnv:d}=await c.e(2834).then(c.bind(c,12834));d(b());let{configureHttpDispatcher:e}=await c.e(2349).then(c.bind(c,42349));e();try{let{ensureTaskEngine:a}=await c.e(4253).then(c.bind(c,14253));a()}catch{}}c.r(b),c.d(b,{register:()=>d})},55511:a=>{a.exports=require("crypto")},57075:a=>{a.exports=require("node:stream")},57975:a=>{a.exports=require("node:util")},73024:a=>{a.exports=require("node:fs")},73136:a=>{a.exports=require("node:url")},73429:a=>{a.exports=require("node:util/types")},75430:a=>{a.exports=import("@earendil-works/pi-coding-agent")},75919:a=>{a.exports=require("node:worker_threads")},76760:a=>{a.exports=require("node:path")},77030:a=>{a.exports=require("node:net")},77598:a=>{a.exports=require("node:crypto")},78474:a=>{a.exports=require("node:events")},79646:a=>{a.exports=require("child_process")},79748:a=>{a.exports=require("fs/promises")},80099:a=>{a.exports=require("node:sqlite")},81115:a=>{a.exports=require("constants")},87997:a=>{a.exports=require("node:timers")},94735:a=>{a.exports=require("events")}};var b=require("./webpack-runtime.js");b.C(a);var c=b(b.s=53861);module.exports=c})();
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/VVTAo7O30Oq9W1sG0KkEd/_buildManifest.js","static/VVTAo7O30Oq9W1sG0KkEd/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-db1e0c97e28a9854.js","static/chunks/4bd1b696-04d4e6726f46d1d5.js","static/chunks/3794-eb2b2ea32d17f197.js","static/chunks/main-app-0b45ce7a4444c85e.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/-KlXyudIresJbEC448mlv/_buildManifest.js","static/-KlXyudIresJbEC448mlv/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-db1e0c97e28a9854.js","static/chunks/4bd1b696-04d4e6726f46d1d5.js","static/chunks/3794-eb2b2ea32d17f197.js","static/chunks/main-app-0b45ce7a4444c85e.js"],rootMainFilesTree:{},pages:{"/_app":[]}};