@qt4798/pi-web 0.18.4 → 0.18.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +18 -18
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/app-update/route.js +1 -1
- package/.next/server/app/api/cwd/validate/route.js +1 -1
- package/.next/server/app/api/default-cwd/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +1 -1
- package/.next/server/app/api/git/diff/route.js +1 -1
- package/.next/server/app/api/git/push/route.js +1 -1
- package/.next/server/app/api/git/stash/route.js +1 -1
- package/.next/server/app/api/git/status/route.js +1 -1
- package/.next/server/app/api/import/discover/route.js +1 -1
- package/.next/server/app/api/logs/route.js +1 -1
- package/.next/server/app/api/mcp/restart/route.js +1 -1
- package/.next/server/app/api/mcp/route.js +1 -1
- package/.next/server/app/api/models-config/builtin/route.js +1 -1
- package/.next/server/app/api/models-config/catalog/route.js +1 -1
- package/.next/server/app/api/models-config/discover/route.js +1 -1
- package/.next/server/app/api/models-config/route.js +1 -1
- package/.next/server/app/api/models-config/test/route.js +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/project-state/route.js +1 -1
- package/.next/server/app/api/projects/visibility/route.js +1 -1
- package/.next/server/app/api/provider-usage/query/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/settings/title-model/route.js +1 -1
- package/.next/server/app/api/skills/install/route.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/snippets/[id]/route.js +1 -1
- package/.next/server/app/api/snippets/route.js +1 -1
- package/.next/server/app/api/subagents/settings/route.js +1 -1
- package/.next/server/app/api/tools/extension-tools/route.js +1 -1
- package/.next/server/app/api/tools/settings/route.js +1 -1
- package/.next/server/app/api/vision-config/route.js +1 -1
- package/.next/server/app/api/web-auth/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +4 -4
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login.html +1 -1
- package/.next/server/app/login.rsc +2 -2
- package/.next/server/app/login.segments/_full.segment.rsc +2 -2
- package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/page.js +10 -8
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +18 -18
- package/.next/server/chunks/154.js +12 -11
- package/.next/server/chunks/4253.js +14 -11
- package/.next/server/chunks/440.js +1 -1
- package/.next/server/chunks/5725.js +1 -1
- package/.next/server/chunks/6429.js +8 -5
- package/.next/server/chunks/7915.js +1 -1
- package/.next/server/chunks/9332.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/app/{page-bd73baeec065cb84.js → page-3d2a6181302c97c6.js} +10 -8
- package/.next/static/css/2f7c89d02f957732.css +1 -0
- package/.next/trace +8 -83
- package/.next/trace-build +1 -1
- package/package.json +1 -1
- package/.next/static/css/5418f5ea5454ad72.css +0 -1
- /package/.next/static/{I_FDqLx_bV7v2QRYgPTtm → cehSWrMOmfjQYl29EblqZ}/_buildManifest.js +0 -0
- /package/.next/static/{I_FDqLx_bV7v2QRYgPTtm → cehSWrMOmfjQYl29EblqZ}/_ssgManifest.js +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
exports.id=4253,exports.ids=[4253],exports.modules={4658:(a,b,c)=>{},5564:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{wQ:()=>g}),c(73024),c(76760);var e=c(75430);c(61446);var f=a([e]);e=(f.then?(await f)():f)[0];let h=new Set(["bash","powershell"]);function g(a,b,c=process.platform){return function(a,b){let c=b?"powershell":"bash",d=[];for(let b of a){let a=h.has(b)?c:b;d.includes(a)||d.push(a)}return d}(a,function(a,b=process.platform){return"win32"===b&&a?.includes("powershell")===!0&&!a.includes("bash")}(b,c))}d()}catch(a){d(a)}})},7535:(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}},7561:(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}},8084:(a,b,c)=>{"use strict";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(41035),h=c(16983),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}:{},...a.worktreePath?{worktreePath:a.worktreePath}:{},...a.worktreeBranch?{worktreeBranch:a.worktreeBranch}:{},...a.worktreeCleanupError?{worktreeCleanupError:a.worktreeCleanupError}:{}}}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.
|
|
2
2
|
|
|
3
3
|
Available agent types:
|
|
4
|
-
${(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."}),resume:e.Type.Optional(e.Type.String({description:"Existing subagent session ID to continue instead of creating a new session."})),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."})),isolation:e.Type.Optional(e.Type.String({description:"Run the subagent in an isolated git worktree."}))}),async execute(b,c,d,e,f){try{let g=c.resume?.trim(),h=g?await a.resume({parentContext:f,parentToolCallId:b,sessionId:g,task:c.prompt,description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})}):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}:{},..."worktree"===c.isolation?{isolation:"worktree"}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(h.run.runInBackground)return h.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: ${h.run.sessionId}. You will be notified when it completes.`}],details:j(h.run)};let i=await h.completion;return{content:[{type:"text",text:k(i)}],details:j(i),..."failed"===i.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)}})},12144:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{OF:()=>M});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(18437),k=c(17114),l=c(65869),m=c(96515),n=c(15253),o=c(69453),p=c(8084),q=c(41035);c(54035);var r=c(12559),s=c(84851),t=c(70274),u=c(5564),v=c(27486),w=c(81186),x=c(61577),y=c(44290),z=c(30116),A=c(97563),B=c(57856),C=c(29040),D=c(91099),E=c(12394),F=a([e,f,m,n,o,p,q,s,t,u,v,w,y,C,E]);[e,f,m,n,o,p,q,s,t,u,v,w,y,C,E]=F.then?(await F)():F;let N=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"]),O=function(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){let b=(a??"").trim();if(""===b)return 6e5;let c=Number(b);return!Number.isFinite(c)||c<0||!Number.isInteger(c)||c>0x7fffffff?(console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 600000ms`),6e5):c}(),P=new Set(["fork","clone"]),Q=new Set(["get_state","abort","steer","follow_up_draft"]),R=["read","bash","powershell","edit","write","grep","find","ls"];class S extends e.Theme{constructor(){super({muted:"",text:"",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 T=new S,U=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function G(a,b){if(0===b.length)return[];let c=new Set(R),d=(0,u.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return(0,v.H4)([...new Set([...d,...e])],(0,v.t0)())}class V{constructor(a,b=""){this.inner=a,this.listeners=[],this.activeToolEvents=new Map,this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionUiAbortController=new AbortController,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.pendingPromptCount=0,this.activeMutatingCommands=0,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.sessionReplacement=null,this.forceShutdownOnIdle=!1,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,z.ni)((0,y.lN)().permissionRules),this.approvalMode=(0,y.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1,this.goalEngine=new D.aA,this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalContinuationInFlight=!1,this.goalContinuationPending=!1,this.goalDriveScheduled=!1,this.wrapperChatOnly=!1,this.wrapperSuppressNotifications=!1,this.cwd="string"==typeof b?b:"";const c="string"==typeof b?{}:b;c.onAgentRunComplete&&(this.onAgentRunComplete=c.onAgentRunComplete),c.suppressCompletionNotifications&&this.setSuppressCompletionNotifications(!0),c.chatOnly&&this.setChatOnly(!0),c.exactSystemPrompt&&(this.exactSystemPrompt=c.exactSystemPrompt(),this.installExactSystemPromptContinuation(),this.applyExactSystemPrompt());const d=(0,y.lN)(a.sessionId);if(this.approvalMode=d.toolApprovalMode,this.approvalPolicy=(0,z.ni)(d.permissionRules),a.sessionFile){const b=(0,D.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.pendingPromptCount>0||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)}}setChatOnly(a){this.wrapperChatOnly=a}setSuppressCompletionNotifications(a){this.wrapperSuppressNotifications=a}isChatOnly(){return this.wrapperChatOnly}hasSuppressedCompletionNotifications(){return this.wrapperSuppressNotifications}start(){this.installApprovalHook(),this.goalEngine.setOnChanged(a=>{this.sessionFile&&(0,D.eG)(this.sessionFile,a),this.emit({type:"goal_state_changed",goalState:a}),K("goal_state_changed",this.sessionId,{type:"goal_state_changed",goalState:a})}),this.goalEngine.isRunning()&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),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(),this.agentRunNeedsCompletion=!0),"agent_settled"===a.type&&(this.handleGoalSettled(),this.notifyAgentRunCompleteIfIdle()),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),N.has(a.type)&&K(a.type,this.sessionId,a);let b=a.toolCallId;"string"==typeof b&&("tool_execution_start"===a.type||"tool_execution_update"===a.type?this.activeToolEvents.set(b,a):"tool_execution_end"===a.type&&this.activeToolEvents.delete(b)),this.emit(a),I()}),this.resetIdleTimer()}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()){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}let a=this.inner.getLastAssistantText()??"",b=this.currentSessionUsageTotal(),c=Math.max(0,b-this.goalTokensAccounted);this.goalTokensAccounted=b;let d=this.currentSessionToolCallTotal(),e=Math.max(0,d-this.goalToolCallsAccounted);this.goalToolCallsAccounted=d;let{verdict:f}=this.goalEngine.settleTurn(a,c,e);if("continue"!==f.action){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()}maybeDriveGoalContinuation(){if(this.goalContinuationPending&&!this.goalDriveScheduled){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalDriveScheduled=!0,setTimeout(()=>{this.goalDriveScheduled=!1,this.tryDriveGoalContinuation()},0)}}cancelGoalContinuation(){this.goalContinuationPending=!1,this.goalEngine.disarmContinuation()}tryDriveGoalContinuation(){if(this.goalContinuationPending){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalContinuationInFlight||this.promptRunning||this.inner.isStreaming||this.inner.isBashRunning||(this.goalContinuationPending=!1,this.driveGoalContinuation())}}driveGoalContinuation(){if(!this.goalEngine.isRunning()||this.goalContinuationInFlight)return;this.goalContinuationInFlight=!0,this.promptRunning=!0,this.promptPhase="waiting_model",this.resetIdleTimer(),I();let a=()=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),I()};this.acquirePromptAdmission().then(async b=>{try{if(!this.goalEngine.isRunning())return void a();await this.inner.prompt(D.LF),a(),this.emit({type:"prompt_done"}),this.maybeDriveGoalContinuation()}catch(b){a(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)})}finally{b(),this.goalContinuationInFlight=!1}})}handleGoalStartCommand(a,b){let c=this.goalEngine.start(a,b);return this.goalTokensAccounted=this.currentSessionUsageTotal(),this.goalToolCallsAccounted=this.currentSessionToolCallTotal(),c}handleGoalStopCommand(){return this.goalEngine.stop(),this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalEngine.getState()}currentSessionUsageTotal(){try{return 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}(this.inner.sessionManager.getEntries())}catch{return 0}}currentSessionToolCallTotal(){try{return 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}(this.inner.sessionManager.getEntries())}catch{return 0}}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,z.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:A.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()}validateImagesSupportedByCurrentModel(){let a=this.inner.model;return!a?.id||Array.isArray(a.input)&&a.input.includes("image")?null:`Model "${a.id}" does not accept image input. Switch to a model with image support.`}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(a.images?.length){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}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.applyExactSystemPrompt(),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.applyExactSystemPrompt(),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")),V.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||"get_state"===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)}}installExactSystemPromptContinuation(){if(!this.exactSystemPrompt)return;let a=this.inner.agent,b=a.prepareNextTurnWithContext;a.prepareNextTurnWithContext=async(a,c)=>{let d=await b?.(a,c);return{...d,context:{...d?.context??a.context,systemPrompt:this.exactSystemPrompt}}}}setActiveToolSelection(a){this.inner.setActiveToolsByName(G(this.inner,a)),this.applyExactSystemPrompt()}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())&&(this.agentRunNeedsCompletion=!1,!this.wrapperSuppressNotifications))try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this._alive&&0!==O&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||(0,r.Vj)({sessionId:this.sessionId,sessionFile:this.sessionFile||void 0}))?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},O))}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);for(let b of this.activeToolEvents.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 withSessionReplacement(a,b){if(this.sessionReplacement)throw Error("Session is already being copied");this.sessionReplacement=a;try{return await b()}finally{this._alive&&(this.sessionReplacement=null)}}isSessionRunningForReplacement(){return this.inner.isBashRunning||this.inner.isStreaming||this.inner.isCompacting||this.pendingPromptCount>0}async shutdownAfterSessionReplacement(a){try{await this.shutdown()}catch(b){console.error(`[pi-web] ${a} succeeded, but source session shutdown failed:`,b instanceof Error?b.message:b)}}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);if(Array.isArray(a.images)&&a.images.length>0){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}}let c=Q.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(P.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound();let d=!c;d&&(this.activeMutatingCommands+=1);try{if("get_state"!==b&&this.resetIdleTimer(),this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound(),this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if("prompt"===b||"steer"===b||"follow_up"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b)}switch(b){case"prompt":{let b=await this.acquirePromptAdmission();try{let b,c,d;if(this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let e=a.images,f=a.streamingBehavior;f&&this.inner.isStreaming&&this.hintQueueImages("followUp"===f?"followUp":"steer",e);let g=!1,h=!1,i=!1,j=new Promise((a,d)=>{b=()=>{g=!0,this.agentRunNeedsCompletion=!0,h||(h=!0,a())},c=a=>{h||(h=!0,d(a))}}),k=()=>{i||(i=!0,this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.resetIdleTimer(),this.notifyAgentRunCompleteIfIdle())};this.pendingPromptCount+=1,this.promptRunning=!0,this.promptPhase=String(a.message??"").trimStart().startsWith("/")?"running_command":"waiting_model",I();try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{a&&(this.applyExactSystemPrompt(),b())}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),this.promptRunning=!1,this.promptPhase=null,f||this.emit({type:"prompt_done"}),I(),this.maybeDriveGoalContinuation()},a=>{c(a),k(),this.promptRunning=!1,this.promptPhase=null,(0,o.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"})),I(),this.maybeDriveGoalContinuation()}).catch(a=>{console.error("[pi-web] prompt completion handler failed:",a instanceof Error?a.message:a)}),await j,null}finally{b()}}case"abort":this.forceShutdownOnIdle=!0,this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{await this.inner.abort()}finally{this.resetIdleTimer(),this.isRunning()||(this.forceShutdownOnIdle=!1)}return 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.pendingPromptCount>0,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.goalContinuationPending=!0,this.maybeDriveGoalContinuation(),{goalState:e}}case"goal_pause":return this.cancelGoalContinuation(),{goalState:this.goalEngine.pause()};case"goal_resume":{let a=this.goalEngine.resume();return"running"===a.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:a}}case"goal_stop":return this.cancelGoalContinuation(),{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.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{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,d=a.entryId,f=this.inner.sessionManager,g=this.inner.sessionFile;if(!f.isPersisted())return{cancelled:!0};if(!g)throw Error("Persisted session is missing a session file");let i=f.getEntry(d);if(!i)throw Error("Invalid entry ID for forking");let j=f.getSessionDir();if(i.parentId){let a=(c=e.SessionManager.open(g,j)).createBranchedSession(i.parentId);if(!a)throw Error("Failed to create forked session");b=a}else b=(c=e.SessionManager.create(f.getCwd(),j,{parentSession:g})).getSessionFile();if(!(0,h.existsSync)(b)){let a=c.getHeader();if(!a)throw Error("Forked session is missing a session header");let d=[a,...c.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}let k=c.getSessionId();return(0,o.O8)(k,b),(0,o.mD)(),{cancelled:!1,newSessionId:k}}case"clone":{if(this.isSessionRunningForReplacement())throw Error("Cannot clone while the session is running");let b=this.inner.sessionManager,c=this.inner.sessionFile,d="string"==typeof a.leafId?a.leafId:b.getLeafId(),f=d&&b.getBranch(d).some(a=>"message"===a.type&&"assistant"===a.message.role);if(!b.isPersisted()||!d||!f||!c||!(0,h.existsSync)(c))return{cancelled:!0};return this.withSessionReplacement("clone",async()=>{let a=b.getSessionDir(),f=e.SessionManager.open(c,a).createBranchedSession(d);if(!f||!(0,h.existsSync)(f))throw Error("Failed to clone current session branch");let g=e.SessionManager.open(f,a).getSessionId();return(0,o.O8)(g,f),(0,o.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}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",I();try{await this.inner.steer(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,I()}return null}case"follow_up":{let b=a.images;this.hintQueueImages("followUp",b),this.promptPhase="waiting_model",I();try{await this.inner.followUp(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,I()}return null}case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({...a,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.setActiveToolSelection(b),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(G(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,z.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,w.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)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,this.inner.abortBash(),I(),null;default:throw Error(`Unsupported command: ${b}`)}}finally{d&&(this.activeMutatingCommands=Math.max(0,this.activeMutatingCommands-1))}}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,D.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.activeToolEvents.clear(),this.rejectAllApprovals("Session closed while approval was pending");let a=()=>{try{this.inner.dispose()}finally{try{this.onDestroyCallback?.()}finally{I()}}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():Promise.resolve().then(()=>b.call(this.inner.extensionRunner,{type:"session_shutdown",reason:"quit"})).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 B.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return B.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):B.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=this.extensionUiAbortController.signal;if(c.aborted)return Promise.reject(c.reason);let d=(0,g.randomUUID)(),e=this.getCustomUiWidth(b);return new Promise((b,f)=>{let g=!1,h=(0,B.TQ)(()=>{let a=this.activeCustomUis.get(d);a&&this.emitCustomUiRender(d,a)},e),i=a=>{g||(g=!0,c.removeEventListener("abort",k),c.aborted?f(c.reason):b(a))},j=a=>{this.activeCustomUis.has(d)?this.closeCustomUi(d,a):i(a)},k=()=>j(void 0);c.addEventListener("abort",k,{once:!0}),Promise.resolve().then(()=>g?void 0:a(h,T,U,j)).then(a=>{if(g){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void i(void 0);let b={component:a,width:e,resolve:a=>i(a),settled:!1};this.activeCustomUis.set(d,b),this.emitCustomUiRender(d,b)}).catch(a=>{g||(this.emit({type:"extension_error",extensionPath:`custom-ui:${d}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),i(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=this.extensionUiAbortController.signal;if(f.aborted)return Promise.reject(f.reason);let h=e?AbortSignal.any([e,f]):f,i=(0,g.randomUUID)(),j={type:"extension_ui_request",id:i,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise((a,e)=>{let g,k=!1,l=()=>{g&&clearTimeout(g),h.removeEventListener("abort",n),this.pendingUiRequests.delete(i),this.pendingUiResponses.delete(i),this.emit({type:"extension_ui_closed",id:i})},m=b=>{k||(k=!0,l(),f.aborted?e(f.reason):a(b))},n=()=>m(b);d&&(g=setTimeout(()=>m(b),d)),h.addEventListener("abort",n,{once:!0}),this.pendingUiRequests.set(i,j),this.pendingUiResponses.set(i,{resolve:a=>m(c(a)),cancel:()=>m(b)}),this.emit(j)})}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 T},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.applyExactSystemPrompt()}}}}function H(){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}let W="";function I(){let a=globalThis.__piRunningListeners;if(!a||0===a.size){W="";return}let b=function(){let a=[];for(let[b,c]of H()){if(!c.isAlive())continue;let d=c.runtimeSnapshot();d.running&&a.push({...d,id:d.id||b})}return a}(),c=JSON.stringify(b);if(c!==W)for(let d of(W=c,a))try{d(b)}catch{}}let X=(0,s.s)({getSession:a=>H().get(a),registerSession:(a,b)=>{let c,d,e;c=new V(a,a.sessionManager.getCwd()),b?.chatOnly?c.setForceEmptySystemPrompt(!0):b?.exactSystemPrompt&&c.setExactSystemPrompt(b.exactSystemPrompt),c.setChatOnly(!!b?.chatOnly),c.setSuppressCompletionNotifications(!0),c.start(),d=a.sessionId,e=H(),c.onDestroy(()=>e.delete(d)),e.set(d,c)},reopenSession:async(a,b)=>(await M(a,b,void 0)).session,resolveSessionPath:o.os,invalidateSessionList:o.mD,notifyRunningChange:I,isBuiltInSubagentsEnabled:t.N});!function(){try{let a=(0,t.M6)();if((0,h.existsSync)(a))return;(0,h.mkdirSync)(a.slice(0,a.lastIndexOf("/")),{recursive:!0}),(0,h.writeFileSync)(a,JSON.stringify({builtInEnabled:!0},null,2)+"\n")}catch(a){console.warn("[pi-web] failed to seed agents/settings.json:",a instanceof Error?a.message:a)}}();let Y=new Map;function J(a){let b=globalThis.__piSessionBusListeners;if(b&&0!==b.size)for(let c of b)try{c(a)}catch{}}function K(a,b,c){let d=globalThis.__piSessionBusListeners;if(!d||0===d.size)return;if("message_update"!==a)return void J({type:a,sessionId:b,payload:c});let e=Y.get(b),f={type:a,sessionId:b,payload:c};e?(clearTimeout(e.timer),e.event=f):Y.set(b,{event:f,timer:setTimeout(()=>{let a=Y.get(b);a&&(Y.delete(b),J(a.event))},80)})}function L(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,C.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,C.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 M(a,b,d,f={}){let g,j,k,r,{toolNames:s,initialModel:u,thinkingLevel:v,allowInitialModelFallback:w}=f,y=H(),z=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),A=y.get(a);if(A?.isAlive()&&!A.isShuttingDown())return{session:A,realSessionId:a,created:!1};if(A){let a=A.whenShutdown();a&&await Promise.race([a,new Promise(a=>setTimeout(a,1e4))])}let B=z.get(a);if(B)return B;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 C=g.getCwd(),D=b?(0,q.ph)(g.getEntries()):null,F=(globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),k=globalThis.__piStartingSessionCwds,r=function(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}(C),k.set(r,(k.get(r)??0)+1),()=>{let a=(k.get(r)??1)-1;a>0?k.set(r,a):k.delete(r)}),I=new AbortController,J=setTimeout(()=>I.abort(),25e3),K=!1,N=!1,O=()=>{N||(N=!0,F())},P=(async()=>{let b,d=D?.tools??s??[],f=0===d.length;f||(0,e.initTheme)();let h=(0,e.getAgentDir)(),i=D?.tools;D||void 0===s||(i=0===d.length?[]:void 0);let j=D?void 0:(0,n.Fk)(C,h),k=await (0,e.createAgentSessionServices)({cwd:C,agentDir:h,modelRuntimeSignal:I.signal,resourceLoaderOptions:D?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,appendSystemPrompt:D.appendSystemPrompt}:{extensionFactories:[(0,p.Vj)(X.extensionRuntime,()=>(0,q.IR)(C),t.N)],extensionsOverride:a=>(0,p.U6)(a)},...j?{resourceLoaderReloadOptions:j}:{}}),{createAsyncBashTools:r}=await Promise.resolve().then(c.bind(c,12394)),z=new E.B,A=r(z),B=await (0,m.py)(k.modelRuntime,k.settingsManager.getEnabledModels(),{signal:I.signal}),F=u&&(!w||B.visible.some(a=>a.provider===u.provider&&a.id===u.modelId))?u:void 0,J=k.settingsManager.getDefaultProvider(),M=k.settingsManager.getDefaultModel(),N=g.getBranch(),O=N.some(a=>"message"===a.type),P=O?(0,o.Vg)(N):null,Q=P?k.modelRuntime.getModel(P.provider,P.modelId):void 0,R=O?null:(0,m.IR)(B,{...F?{requestedModel:F}:{},...J&&M?{defaultModel:{provider:J,modelId:M}}:{},...v?{thinkingLevel:v}:{}}),S=Q&&k.modelRuntime.hasConfiguredAuth(Q.provider)?Q:R?.model,T=!1,U=(0,e.createAgentSessionFromServices)({services:k,sessionManager:g,...S?{model:S}:{},...R?.thinkingLevel?{thinkingLevel:R.thinkingLevel}:{},...B.scopedModels.length>0?{scopedModels:[...B.scopedModels]}:{},...void 0!==i?{tools:i}:{},customTools:A}),{session:W}=await Promise.race([U,new Promise((a,c)=>{b=setTimeout(()=>{T=!0,I.abort(),c(Error("Session startup timed out while binding extensions/resources (40s)"))},4e4)})]);clearTimeout(b),U.then(({session:a})=>{if(T)try{a.dispose()}catch{}},()=>{});let Y=z.cleanup.bind(z);try{let b=W.agent,c=b.streamFunction;if(b.streamFunction=(b,d,e)=>{let f=c(b,d,e);return f instanceof Promise?f.then(c=>L(c,{provider:b.provider,modelId:b.id,sessionId:a})):L(f,{provider:b.provider,modelId:b.id,sessionId:a})},(await (0,x.o)(k.settingsManager,{...u?{model:u}:{},...v?{thinkingLevel:v}:{}},{...W.model?{model:{provider:W.model.provider,modelId:W.model.id}}:{},thinkingLevel:W.agent.state?.thinkingLevel??"off",supportsThinking:W.supportsThinking()})).modelDefaultChanged&&(0,l.k)(),!D&&s&&s.length>0&&W.setActiveToolsByName(G(W,s)),K){try{W.dispose()}catch{}try{Y()}catch{}throw Error("Session startup abandoned after hard timeout")}let d=new V(W,C);d.setChatOnly(f),d.setSuppressCompletionNotifications(void 0!==D),s?.length===0||D?.tools.length===0?d.setForceEmptySystemPrompt(!0):D&&D.appendSystemPrompt.length>0&&d.setExactSystemPrompt(D.appendSystemPrompt[0]),d.start(),d.loadQueueRecovery();let e=W.sessionId,g=W.sessionFile;return g&&(0,o.O8)(e,g),d.persistSessionFileIfMissing(),d.onDestroy(()=>{Y(),y.get(e)===d&&y.delete(e)}),y.set(e,d),d.beginExtensionBinding({forceEmptySystemPrompt:s?.length===0}),!function(){let a=H();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,created:!0}}catch(a){try{W.dispose()}catch{}try{Y()}catch{}throw a}})().finally(()=>{clearTimeout(J),clearTimeout(j),z.delete(a),O()}),Q=Promise.race([P,new Promise((b,c)=>{j=setTimeout(()=>{K=!0,I.abort(),z.delete(a),O(),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 P.then(()=>{},()=>{}),z.set(a,Q),Q}d()}catch(a){d(a)}})},12394:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{B:()=>p,createAsyncBashTools:()=>n});var e=c(31421),f=c(81186),g=c(75430),h=c(45399),i=a([f,g]);[f,g]=i.then?(await i)():i;class o{append(a){for(this.totalBytes+=a.length,this.tail.push(a),this.tailBytes+=a.length;this.tailBytes>258048&&this.tail.length>1;){let a=this.tail.shift();this.tailBytes-=a.length}if(this.headBytes<4096){let b=4096-this.headBytes;a.length<=b?(this.head.push(a),this.headBytes+=a.length):(this.head.push(a.subarray(0,b)),this.headBytes=4096)}}get hasOmission(){return this.totalBytes>this.headBytes+this.tailBytes}get omittedBytes(){return Math.max(0,this.totalBytes-this.headBytes-this.tailBytes)}toSnapshot(){if(!this.hasOmission)return Buffer.concat(this.tail).toString("utf-8");let a=[...this.head];return a.push(Buffer.from(`
|
|
4
|
+
${(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."}),resume:e.Type.Optional(e.Type.String({description:"Existing subagent session ID to continue instead of creating a new session."})),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."})),isolation:e.Type.Optional(e.Type.String({description:"Run the subagent in an isolated git worktree."}))}),async execute(b,c,d,e,f){try{let g=c.resume?.trim(),h=g?await a.resume({parentContext:f,parentToolCallId:b,sessionId:g,task:c.prompt,description:c.description,...void 0!==c.run_in_background?{runInBackground:c.run_in_background}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})}):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}:{},..."worktree"===c.isolation?{isolation:"worktree"}:{},signal:d,onUpdate:a=>e?.({content:[{type:"text",text:`${a.profile}: ${a.description} (${a.status})`}],details:j(a)})});if(h.run.runInBackground)return h.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: ${h.run.sessionId}. You will be notified when it completes.`}],details:j(h.run)};let i=await h.completion;return{content:[{type:"text",text:k(i)}],details:j(i),..."failed"===i.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)}})},12144:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{OF:()=>P});var e=c(75430),f=c(29862),g=c(55511),h=c(29021),i=c(33873),j=c(18437),k=c(17114),l=c(65869),m=c(96515),n=c(15253),o=c(69453),p=c(8084),q=c(41035);c(54035);var r=c(12559),s=c(84851),t=c(70274),u=c(5564),v=c(27486),w=c(81186),x=c(61577),y=c(44290),z=c(30116),A=c(97563),B=c(57856),C=c(29040),D=c(91099),E=c(12394),F=a([e,f,m,n,o,p,q,s,t,u,v,w,y,C,E]);[e,f,m,n,o,p,q,s,t,u,v,w,y,C,E]=F.then?(await F)():F;let Q=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"]),R=function(a=process.env.PI_WEB_IDLE_TIMEOUT_MS){let b=(a??"").trim();if(""===b)return 6e5;let c=Number(b);return!Number.isFinite(c)||c<0||!Number.isInteger(c)||c>0x7fffffff?(console.warn(`[pi-web] invalid PI_WEB_IDLE_TIMEOUT_MS "${a}", falling back to 600000ms`),6e5):c}(),S=new Set(["fork","clone"]),T=new Set(["get_state","abort","steer","follow_up_draft"]),U=["read","bash","powershell","edit","write","grep","find","ls"];class V extends e.Theme{constructor(){super({muted:"",text:"",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 W=new V,X=new f.KeybindingsManager(f.TUI_KEYBINDINGS);function G(a,b){if(0===b.length)return[];let c=new Set(U),d=(0,u.wQ)(b,a.settingsManager.getDefaultTools()),e=a.getAllTools().map(a=>a.name).filter(a=>!c.has(a));return(0,v.H4)([...new Set([...d,...e])],(0,v.t0)())}class Y{constructor(a,b=""){this.inner=a,this.listeners=[],this.activeToolEvents=new Map,this.pendingUiResponses=new Map,this.pendingUiRequests=new Map,this.activeCustomUis=new Map,this.extensionUiAbortController=new AbortController,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.pendingPromptCount=0,this.activeMutatingCommands=0,this.agentRunNeedsCompletion=!1,this.promptAdmissionTail=Promise.resolve(),this.sessionReplacement=null,this.forceShutdownOnIdle=!1,this.unsubscribe=null,this.idleTimer=null,this.subscriberCount=0,this.disposeGraceTimer=null,this.lastActivityAt=Date.now(),this.queueMirror=[],this.queueRecovery=[],this.persistenceRevoked=!1,this.queueBootstrap=null,this.pendingQueueHints={steer:[],followUp:[]},this.queueMutationTail=Promise.resolve(),this.onDestroyCallback=null,this.shutdownPromise=null,this.sessionShutdownEmitted=!1,this._alive=!0,this.approvalPolicy=(0,z.ni)((0,y.lN)().permissionRules),this.approvalMode=(0,y.lN)().toolApprovalMode,this.pendingApprovals=new Map,this.approvalSeq=0,this.approvalHookInstalled=!1,this.goalEngine=new D.aA,this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalContinuationInFlight=!1,this.goalContinuationPending=!1,this.goalDriveScheduled=!1,this.wrapperChatOnly=!1,this.wrapperSuppressNotifications=!1,this.cwd="string"==typeof b?b:"";const c="string"==typeof b?{}:b;c.onAgentRunComplete&&(this.onAgentRunComplete=c.onAgentRunComplete),c.suppressCompletionNotifications&&this.setSuppressCompletionNotifications(!0),c.chatOnly&&this.setChatOnly(!0),c.exactSystemPrompt&&(this.exactSystemPrompt=c.exactSystemPrompt(),this.installExactSystemPromptContinuation(),this.applyExactSystemPrompt());const d=(0,y.lN)(a.sessionId);if(this.approvalMode=d.toolApprovalMode,this.approvalPolicy=(0,z.ni)(d.permissionRules),a.sessionFile){const b=(0,D.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.pendingPromptCount>0||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)}}setChatOnly(a){this.wrapperChatOnly=a}setSuppressCompletionNotifications(a){this.wrapperSuppressNotifications=a}isChatOnly(){return this.wrapperChatOnly}hasSuppressedCompletionNotifications(){return this.wrapperSuppressNotifications}start(){this.installApprovalHook(),this.goalEngine.setOnChanged(a=>{this.sessionFile&&!this.persistenceRevoked&&(0,D.eG)(this.sessionFile,a),this.emit({type:"goal_state_changed",goalState:a}),N("goal_state_changed",this.sessionId,{type:"goal_state_changed",goalState:a})}),this.goalEngine.isRunning()&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),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(),this.agentRunNeedsCompletion=!0),"agent_settled"===a.type&&(this.handleGoalSettled(),this.notifyAgentRunCompleteIfIdle()),"queue_update"===a.type&&this.reconcileQueue(a.steering,a.followUp),Q.has(a.type)&&N(a.type,this.sessionId,a);let b=a.toolCallId;"string"==typeof b&&("tool_execution_start"===a.type||"tool_execution_update"===a.type?this.activeToolEvents.set(b,a):"tool_execution_end"===a.type&&this.activeToolEvents.delete(b)),this.emit(a),L()}),this.resetIdleTimer()}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()){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}let a=this.inner.getLastAssistantText()??"",b=this.currentSessionUsageTotal(),c=Math.max(0,b-this.goalTokensAccounted);this.goalTokensAccounted=b;let d=this.currentSessionToolCallTotal(),e=Math.max(0,d-this.goalToolCallsAccounted);this.goalToolCallsAccounted=d;let{verdict:f}=this.goalEngine.settleTurn(a,c,e);if("continue"!==f.action){this.goalEngine.disarmContinuation(),this.goalContinuationPending=!1;return}this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()}maybeDriveGoalContinuation(){if(this.goalContinuationPending&&!this.goalDriveScheduled){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalDriveScheduled=!0,setTimeout(()=>{this.goalDriveScheduled=!1,this.tryDriveGoalContinuation()},0)}}cancelGoalContinuation(){this.goalContinuationPending=!1,this.goalEngine.disarmContinuation()}tryDriveGoalContinuation(){let a=I(this.sessionId);if(!this._alive||this.isShuttingDown()||a.deleted||a.barriers>0)return void this.cancelGoalContinuation();if(this.goalContinuationPending){if(!this.goalEngine.isRunning()){this.goalContinuationPending=!1;return}this.goalContinuationInFlight||this.promptRunning||this.inner.isStreaming||this.inner.isBashRunning||(this.goalContinuationPending=!1,this.driveGoalContinuation())}}driveGoalContinuation(){if(!this.goalEngine.isRunning()||this.goalContinuationInFlight)return;this.goalContinuationInFlight=!0,this.promptRunning=!0,this.promptPhase="waiting_model",this.resetIdleTimer(),L();let a=()=>{this.promptRunning=!1,this.promptPhase=null,this.resetIdleTimer(),L()};this.acquirePromptAdmission().then(async b=>{try{if(!this.goalEngine.isRunning())return void a();let b=this.goalEngine.getState().goalText;if(!this._alive||this.isShuttingDown()||!b)return void a();J(this.sessionId),await this.inner.prompt((0,D.bx)(b),{source:"rpc",preflightResult:a=>{if(a){if(!this._alive||this.isShuttingDown()||!this.goalEngine.isRunning())throw new DOMException("Goal continuation cancelled","AbortError");J(this.sessionId)}}}),a(),this.emit({type:"prompt_done"}),this.maybeDriveGoalContinuation()}catch(b){a(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)})}finally{b(),this.goalContinuationInFlight=!1}})}handleGoalStartCommand(a,b){let c=this.goalEngine.start(a,b);return this.goalTokensAccounted=this.currentSessionUsageTotal(),this.goalToolCallsAccounted=this.currentSessionToolCallTotal(),c}handleGoalStopCommand(){return this.goalEngine.stop(),this.goalTokensAccounted=0,this.goalToolCallsAccounted=0,this.goalEngine.getState()}currentSessionUsageTotal(){try{return 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}(this.inner.sessionManager.getEntries())}catch{return 0}}currentSessionToolCallTotal(){try{return 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}(this.inner.sessionManager.getEntries())}catch{return 0}}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,z.LD)(this.approvalPolicy,c,{mode:this.approvalMode,readOnly:A.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||this.persistenceRevoked)return;let a=[...this.queueRecovery,...this.queueBootstrap?.entries??[],...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()}validateImagesSupportedByCurrentModel(){let a=this.inner.model;return!a?.id||Array.isArray(a.input)&&a.input.includes("image")?null:`Model "${a.id}" does not accept image input. Switch to a model with image support.`}async requeueEntry(a){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(a.images?.length){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}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{if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");return J(this.sessionId),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._alive||this.isShuttingDown()||this.queueBootstrap||this.isRunning()||this.promptRunning)return;let a=[...this.queueMirror];if(0===a.length)return;let b={entries:a,cancelled:!1};this.queueBootstrap=b,this.queueMirror=[],this.persistQueue(),this.inner.clearQueue(),this.pendingQueueHints={steer:[],followUp:[]},this.pendingPromptCount+=1,this.promptRunning=!0,this.promptPhase="waiting_model",L(),this.bootstrapQueuedRun(b)}cancelQueuedRun(){let a=this.queueBootstrap;a&&(a.cancelled=!0,this.queueRecovery.push(...a.entries),a.entries=[],this.persistQueue())}async bootstrapQueuedRun(a){try{for(let b of[...a.entries]){let c,d,e=await this.acquirePromptAdmission();try{let f,g;if(a.cancelled||!this._alive||this.isShuttingDown()||this.inner.isStreaming||this.inner.isCompacting||this.inner.isBashRunning)break;J(this.sessionId),this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let h=!1,i=()=>{h=!0,e()},j=!1,k=this.inner.sessionManager,l=k.appendMessage,m=function(c){let d=l.call(this,c);return c===f&&(g=d),!j&&g&&k.isPersisted()&&k.flushed&&(j=!0,a.entries=a.entries.filter(a=>a.id!==b.id),n()),d},n=()=>{this.queueRecovery=this.queueRecovery.filter(a=>a.id!==b.id),this.persistQueue()};k.appendMessage=m,d=()=>{k.appendMessage===m&&(k.appendMessage=l)},c=this.inner.subscribe(b=>{"message_start"!==b.type&&"message_end"!==b.type||"user"!==b.message.role||f||!h&&a.cancelled||(f=b.message,i(),c?.(),c=void 0)}),await this.inner.prompt(b.text,{...b.images?.length?{images:b.images}:{},source:"rpc",preflightResult:b=>{if(b){if(a.cancelled||!this._alive||this.isShuttingDown())throw new DOMException("Queued run cancelled","AbortError");J(this.sessionId),this.applyExactSystemPrompt(),i()}}})}finally{c?.(),d?.(),e()}}}catch(b){!a.cancelled&&this._alive&&((0,o.mD)(),this.emit({type:"prompt_error",errorMessage:b instanceof Error?b.message:String(b)}))}finally{this.queueRecovery.push(...a.entries),a.entries=[],this.queueBootstrap===a&&(this.queueBootstrap=null),this.persistQueue(),this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.promptRunning=this.pendingPromptCount>0,this.promptRunning||(this.promptPhase=null),this.resetIdleTimer(),L(),this._alive&&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.applyExactSystemPrompt(),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.applyExactSystemPrompt(),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")),Y.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||"get_state"===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)}}installExactSystemPromptContinuation(){if(!this.exactSystemPrompt)return;let a=this.inner.agent,b=a.prepareNextTurnWithContext;a.prepareNextTurnWithContext=async(a,c)=>{let d=await b?.(a,c);return{...d,context:{...d?.context??a.context,systemPrompt:this.exactSystemPrompt}}}}setActiveToolSelection(a){this.inner.setActiveToolsByName(G(this.inner,a)),this.applyExactSystemPrompt()}async acquirePromptAdmission(){let a,b=this.promptAdmissionTail;return this.promptAdmissionTail=new Promise(b=>{a=b}),await b,a}notifyAgentRunCompleteIfIdle(){if(!(!this.agentRunNeedsCompletion||this.isRunning())&&(this.agentRunNeedsCompletion=!1,!this.wrapperSuppressNotifications))try{this.onAgentRunComplete?.(this.sessionId)}catch(a){console.error("[pi-web] completion listener failed:",a instanceof Error?a.message:a)}}resetIdleTimer(){this.idleTimer&&clearTimeout(this.idleTimer),this._alive&&0!==R&&(this.isRunning()||(this.forceShutdownOnIdle=!1),this.idleTimer=setTimeout(()=>{!this.forceShutdownOnIdle&&(this.isRunning()||(0,r.Vj)({sessionId:this.sessionId,sessionFile:this.sessionFile||void 0}))?this.resetIdleTimer():this.shutdown().catch(a=>{console.error("[pi-web] failed to shut down idle session:",a instanceof Error?a.message:a)})},R))}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(){if(this.persistenceRevoked||!this._alive)return;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);for(let b of this.activeToolEvents.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 withSessionReplacement(a,b){if(this.sessionReplacement)throw Error("Session is already being copied");this.sessionReplacement=a;try{return await b()}finally{this._alive&&(this.sessionReplacement=null)}}isSessionRunningForReplacement(){return this.inner.isBashRunning||this.inner.isStreaming||this.inner.isCompacting||this.pendingPromptCount>0}async shutdownAfterSessionReplacement(a){try{await this.shutdown()}catch(b){console.error(`[pi-web] ${a} succeeded, but source session shutdown failed:`,b instanceof Error?b.message:b)}}async send(a){if(!this._alive)throw Error("Session is shutting down");J(this.sessionId),this.touch();let b=a.type;if(b.startsWith("get_")||"export_queue"===b||this.resetIdleTimer(),"prompt"===b||"steer"===b||"follow_up"===b||"requeue_at"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b);if(Array.isArray(a.images)&&a.images.length>0){let a=this.validateImagesSupportedByCurrentModel();if(a)throw Error(a)}}let c=T.has(b);if(this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if(S.has(b)&&this.activeMutatingCommands>0)throw Error(`Cannot ${b} while another session command is running`);this.shouldWaitForExtensions(b)&&await this.waitForExtensionsBound();let d=!c;d&&(this.activeMutatingCommands+=1);try{if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");if(J(this.sessionId),this.sessionReplacement&&!c)throw Error("Session is being copied to a new session");if("prompt"===b||"steer"===b||"follow_up"===b){let b=(0,j.kc)(a.images);if(b)throw Error(b)}switch(b){case"prompt":{let b=await this.acquirePromptAdmission();try{let b,c,d;if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");if(J(this.sessionId),this.inner.isBashRunning)throw Error("Cannot send a prompt while a shell command is running");this.extensionUiAbortController.signal.aborted&&(this.extensionUiAbortController=new AbortController);let e=a.images,f=a.streamingBehavior;f&&this.inner.isStreaming&&this.hintQueueImages("followUp"===f?"followUp":"steer",e);let g=!1,h=!1,i=!1,j=new Promise((a,d)=>{b=()=>{g=!0,this.agentRunNeedsCompletion=!0,h||(h=!0,a())},c=a=>{h||(h=!0,d(a))}}),k=()=>{i||(i=!0,this.pendingPromptCount=Math.max(0,this.pendingPromptCount-1),this.resetIdleTimer(),this.notifyAgentRunCompleteIfIdle())};this.pendingPromptCount+=1,this.promptRunning=!0,this.promptPhase=String(a.message??"").trimStart().startsWith("/")?"running_command":"waiting_model",L();try{d=this.inner.prompt(a.message,{...e?.length?{images:e}:{},...f?{streamingBehavior:f}:{},source:"rpc",preflightResult:a=>{if(a){if(!this._alive||this.isShuttingDown())throw Error("Session is shutting down");J(this.sessionId),this.applyExactSystemPrompt(),b()}}})}catch(a){throw k(),a}return d.then(()=>{b(),k(),this.promptRunning=!1,this.promptPhase=null,f||this.emit({type:"prompt_done"}),L(),this.maybeDriveGoalContinuation()},a=>{c(a),k(),this.promptRunning=!1,this.promptPhase=null,(0,o.mD)(),g&&(this.emit({type:"prompt_error",errorMessage:a instanceof Error?a.message:String(a)}),f||this.emit({type:"prompt_done"})),L(),this.maybeDriveGoalContinuation()}).catch(a=>{console.error("[pi-web] prompt completion handler failed:",a instanceof Error?a.message:a)}),await j,null}finally{b()}}case"abort":this.cancelQueuedRun(),this.cancelGoalContinuation(),this.forceShutdownOnIdle=!0,this.extensionUiAbortController.abort(new DOMException("Extension UI cancelled by Stop","AbortError"));try{await this.inner.abort()}finally{this.resetIdleTimer(),this.isRunning()||(this.forceShutdownOnIdle=!1)}return 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.pendingPromptCount>0,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.goalContinuationPending=!0,this.maybeDriveGoalContinuation(),{goalState:e}}case"goal_pause":return this.cancelGoalContinuation(),{goalState:this.goalEngine.pause()};case"goal_resume":{let a=this.goalEngine.resume();return"running"===a.status&&(this.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{goalState:a}}case"goal_stop":return this.cancelGoalContinuation(),{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.goalContinuationPending=!0,this.maybeDriveGoalContinuation()),{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,d=a.entryId,f=this.inner.sessionManager,g=this.inner.sessionFile;if(!f.isPersisted())return{cancelled:!0};if(!g)throw Error("Persisted session is missing a session file");let i=f.getEntry(d);if(!i)throw Error("Invalid entry ID for forking");let j=f.getSessionDir();if(i.parentId){let a=(c=e.SessionManager.open(g,j)).createBranchedSession(i.parentId);if(!a)throw Error("Failed to create forked session");b=a}else b=(c=e.SessionManager.create(f.getCwd(),j,{parentSession:g})).getSessionFile();if(!(0,h.existsSync)(b)){let a=c.getHeader();if(!a)throw Error("Forked session is missing a session header");let d=[a,...c.getEntries()].map(a=>JSON.stringify(a)).join("\n")+"\n";(0,h.writeFileSync)(b,d,{encoding:"utf8",flag:"wx"})}let k=c.getSessionId();return(0,o.O8)(k,b),(0,o.mD)(),{cancelled:!1,newSessionId:k}}case"clone":{if(this.isSessionRunningForReplacement())throw Error("Cannot clone while the session is running");let b=this.inner.sessionManager,c=this.inner.sessionFile,d="string"==typeof a.leafId?a.leafId:b.getLeafId(),f=d&&b.getBranch(d).some(a=>"message"===a.type&&"assistant"===a.message.role);if(!b.isPersisted()||!d||!f||!c||!(0,h.existsSync)(c))return{cancelled:!0};return this.withSessionReplacement("clone",async()=>{let a=b.getSessionDir(),f=e.SessionManager.open(c,a).createBranchedSession(d);if(!f||!(0,h.existsSync)(f))throw Error("Failed to clone current session branch");let g=e.SessionManager.open(f,a).getSessionId();return(0,o.O8)(g,f),(0,o.mD)(),await this.shutdownAfterSessionReplacement("clone"),{cancelled:!1,newSessionId:g}})}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":return this.withQueueMutation(async()=>{let b=a.images;this.hintQueueImages("steer",b),this.promptPhase="waiting_model",L();try{await this.inner.steer(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,L()}return null});case"follow_up":return this.withQueueMutation(async()=>{let b=a.images;this.hintQueueImages("followUp",b),this.promptPhase="waiting_model",L();try{await this.inner.followUp(a.message,b?.length?b:void 0)}finally{this.promptPhase=null,L()}return null});case"get_tools":{let a=this.inner.getAllTools(),b=new Set(this.inner.getActiveToolNames());return a.map(a=>({...a,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.setActiveToolSelection(b),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(G(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,z.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,w.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)()}}case"abort_bash":return this.forceShutdownOnIdle=!0,this.inner.abortBash(),L(),null;default:throw Error(`Unsupported command: ${b}`)}}finally{d&&(this.activeMutatingCommands=Math.max(0,this.activeMutatingCommands-1))}}destroy(){if(!this._alive)return;for(let a of(this._alive=!1,this.cancelQueuedRun(),this.cancelGoalContinuation(),this.idleTimer&&clearTimeout(this.idleTimer),this.cancelPendingDispose(),this.inner.isBashRunning&&this.inner.abortBash(),this.unsubscribe?.(),this.sessionFile&&!this.persistenceRevoked&&this.goalEngine.hasActiveGoal()&&(0,D.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.activeToolEvents.clear(),this.rejectAllApprovals("Session closed while approval was pending");let a=()=>{try{this.inner.dispose()}finally{try{this.onDestroyCallback?.()}finally{L()}}};if(this.sessionShutdownEmitted)return void a();this.sessionShutdownEmitted=!0;let b=this.inner.extensionRunner?.emit;"function"!=typeof b?a():Promise.resolve().then(()=>b.call(this.inner.extensionRunner,{type:"session_shutdown",reason:"quit"})).catch(a=>{console.error("[pi-web] session_shutdown before dispose failed:",a instanceof Error?a.message:a)}).finally(a)}revokePersistenceForDeletion(){this.persistenceRevoked=!0,H(this.inner.sessionManager),this.cancelQueuedRun(),this.cancelGoalContinuation()}async drainForSessionRewrite(){this.cancelQueuedRun(),this.cancelGoalContinuation(),this.extensionUiAbortController.abort(new DOMException("Session is being changed","AbortError")),await this.inner.abort()}async shutdown(){return this.shutdownPromise?this.shutdownPromise:this._alive?(this.cancelQueuedRun(),this.cancelGoalContinuation(),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 B.p1;let b=a.overlayOptions,c="function"==typeof b?b():b;if(!c||"object"!=typeof c)return B.p1;let d=c.width;return"number"==typeof d&&Number.isFinite(d)?Math.max(40,Math.min(140,Math.round(d))):B.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=this.extensionUiAbortController.signal;if(c.aborted)return Promise.reject(c.reason);let d=(0,g.randomUUID)(),e=this.getCustomUiWidth(b);return new Promise((b,f)=>{let g=!1,h=(0,B.TQ)(()=>{let a=this.activeCustomUis.get(d);a&&this.emitCustomUiRender(d,a)},e),i=a=>{g||(g=!0,c.removeEventListener("abort",k),c.aborted?f(c.reason):b(a))},j=a=>{this.activeCustomUis.has(d)?this.closeCustomUi(d,a):i(a)},k=()=>j(void 0);c.addEventListener("abort",k,{once:!0}),Promise.resolve().then(()=>g?void 0:a(h,W,X,j)).then(a=>{if(g){try{a?.dispose?.()}catch{}return}if(!a||"object"!=typeof a||"function"!=typeof a.render)return void i(void 0);let b={component:a,width:e,resolve:a=>i(a),settled:!1};this.activeCustomUis.set(d,b),this.emitCustomUiRender(d,b)}).catch(a=>{g||(this.emit({type:"extension_error",extensionPath:`custom-ui:${d}`,event:"custom_ui",error:a instanceof Error?a.message:String(a)}),i(void 0))})})}requestExtensionUi(a,b,c,d,e){if(e?.aborted)return Promise.resolve(b);let f=this.extensionUiAbortController.signal;if(f.aborted)return Promise.reject(f.reason);let h=e?AbortSignal.any([e,f]):f,i=(0,g.randomUUID)(),j={type:"extension_ui_request",id:i,...a,...d?{timeout:d,expiresAt:Date.now()+d}:{}};return new Promise((a,e)=>{let g,k=!1,l=()=>{g&&clearTimeout(g),h.removeEventListener("abort",n),this.pendingUiRequests.delete(i),this.pendingUiResponses.delete(i),this.emit({type:"extension_ui_closed",id:i})},m=b=>{k||(k=!0,l(),f.aborted?e(f.reason):a(b))},n=()=>m(b);d&&(g=setTimeout(()=>m(b),d)),h.addEventListener("abort",n,{once:!0}),this.pendingUiRequests.set(i,j),this.pendingUiResponses.set(i,{resolve:a=>m(c(a)),cancel:()=>m(b)}),this.emit(j)})}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 W},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.applyExactSystemPrompt()}}}}function H(a){a&&(a.persist=!1)}function I(a){globalThis.__piSessionLifecycles??=new Map;let b=globalThis.__piSessionLifecycles.get(a);return b||(b={generation:0,barriers:0,deleted:!1,starts:new Set},globalThis.__piSessionLifecycles.set(a,b)),b}function J(a,b){let c=I(a);if(c.deleted||c.barriers>0||void 0!==b&&c.generation!==b)throw Error("Session was deleted or is being changed; retry after the operation finishes")}function K(){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}let Z="";function L(){let a=globalThis.__piRunningListeners;if(!a||0===a.size){Z="";return}let b=function(){let a=[];for(let[b,c]of K()){if(!c.isAlive())continue;let d=c.runtimeSnapshot();d.running&&a.push({...d,id:d.id||b})}return a}(),c=JSON.stringify(b);if(c!==Z)for(let d of(Z=c,a))try{d(b)}catch{}}let $=(0,s.s)({getSession:a=>K().get(a),registerSession:(a,b)=>{let c,d,e;c=new Y(a,a.sessionManager.getCwd()),b?.chatOnly?c.setForceEmptySystemPrompt(!0):b?.exactSystemPrompt&&c.setExactSystemPrompt(b.exactSystemPrompt),c.setChatOnly(!!b?.chatOnly),c.setSuppressCompletionNotifications(!0),c.start(),d=a.sessionId,e=K(),c.onDestroy(()=>e.delete(d)),e.set(d,c)},reopenSession:async(a,b)=>(await P(a,b,void 0)).session,resolveSessionPath:o.os,invalidateSessionList:o.mD,notifyRunningChange:L,isBuiltInSubagentsEnabled:t.N});!function(){try{let a=(0,t.M6)();if((0,h.existsSync)(a))return;(0,h.mkdirSync)(a.slice(0,a.lastIndexOf("/")),{recursive:!0}),(0,h.writeFileSync)(a,JSON.stringify({builtInEnabled:!0},null,2)+"\n")}catch(a){console.warn("[pi-web] failed to seed agents/settings.json:",a instanceof Error?a.message:a)}}();let _=new Map;function M(a){let b=globalThis.__piSessionBusListeners;if(b&&0!==b.size)for(let c of b)try{c(a)}catch{}}function N(a,b,c){let d=globalThis.__piSessionBusListeners;if(!d||0===d.size)return;if("message_update"!==a)return void M({type:a,sessionId:b,payload:c});let e=_.get(b),f={type:a,sessionId:b,payload:c};e?(clearTimeout(e.timer),e.event=f):_.set(b,{event:f,timer:setTimeout(()=>{let a=_.get(b);a&&(_.delete(b),M(a.event))},80)})}function O(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,C.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,C.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 P(a,b,d,f={}){let g,j,k,r,s,u,v,w,y,z,{toolNames:A,initialModel:B,thinkingLevel:C,allowInitialModelFallback:D}=f,F=K(),L=(globalThis.__piStartLocks||(globalThis.__piStartLocks=new Map),globalThis.__piStartLocks),M=I(a),N=M.generation;J(a,N);let Q=F.get(a);if(Q?.isAlive()&&!Q.isShuttingDown())return{session:Q,realSessionId:a,created:!1};if(Q){let a=Q.whenShutdown();if(a){let b;try{await Promise.race([a,new Promise(a=>{b=setTimeout(a,1e4)})])}finally{clearTimeout(b)}}}J(a,N);let R=L.get(a);if(R)return R;if(b){if(!(0,h.existsSync)(b))throw Error("Session not found");if((g=e.SessionManager.open(b,void 0)).getSessionId()!==a)throw Error("Session identity changed")}else{if(!d)throw Error("cwd is required for a new session");g=e.SessionManager.create(d,void 0)}let S=g.getSessionId(),T=I(S),U=T.generation;J(S,U);let V=g.getCwd(),W=b?(0,q.ph)(g.getEntries()):null,X=(globalThis.__piStartingSessionCwds||(globalThis.__piStartingSessionCwds=new Map),y=globalThis.__piStartingSessionCwds,z=function(a){let b=(0,i.resolve)(a);try{return(0,h.realpathSync)(b)}catch{return b}}(V),y.set(z,(y.get(z)??0)+1),()=>{let a=(y.get(z)??1)-1;a>0?y.set(z,a):y.delete(z)}),Z=new AbortController,_=setTimeout(()=>Z.abort(),25e3),aa=!1,ab=!1,ac=()=>{if(r&&!ab){ab=!0;try{r.cleanup()}catch{}}},ad=()=>{H(g);let a=s;if(a&&v!==a)if(v=a,u)u.destroy();else try{a.dispose()}catch{}ac()},ae=new Promise((a,b)=>{w=b}),af={settled:Promise.resolve(),cancel:a=>{k||(k=a,Z.abort(a),ad(),w(a))}};M.starts.add(af),T.starts.add(af);let ag=()=>{if(k)throw k;J(a,N),J(S,U)},ah=(async()=>{let b=W?.tools??A??[],d=0===b.length;d||(0,e.initTheme)();let f=(0,e.getAgentDir)(),h=W?.tools;W||void 0===A||(h=0===b.length?[]:void 0);let i=W?void 0:(0,n.Fk)(V,f),v=await (0,e.createAgentSessionServices)({cwd:V,agentDir:f,modelRuntimeSignal:Z.signal,resourceLoaderOptions:W?{noExtensions:!0,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,appendSystemPrompt:W.appendSystemPrompt}:{extensionFactories:[(0,p.Vj)($.extensionRuntime,()=>(0,q.IR)(V),t.N)],extensionsOverride:a=>(0,p.U6)(a)},...i?{resourceLoaderReloadOptions:i}:{}});ag();let{createAsyncBashTools:w}=await Promise.resolve().then(c.bind(c,12394));ag(),r=new E.B;let y=w(r),z=await (0,m.py)(v.modelRuntime,v.settingsManager.getEnabledModels(),{signal:Z.signal});ag();let H=B&&(!D||z.visible.some(a=>a.provider===B.provider&&a.id===B.modelId))?B:void 0,I=v.settingsManager.getDefaultProvider(),J=v.settingsManager.getDefaultModel(),L=g.getBranch(),M=L.some(a=>"message"===a.type),N=M?(0,o.Vg)(L):null,P=N?v.modelRuntime.getModel(N.provider,N.modelId):void 0,Q=M?null:(0,m.IR)(z,{...H?{requestedModel:H}:{},...I&&J?{defaultModel:{provider:I,modelId:J}}:{},...C?{thinkingLevel:C}:{}}),R=P&&v.modelRuntime.hasConfiguredAuth(P.provider)?P:Q?.model;ag();let S=(0,e.createAgentSessionFromServices)({services:v,sessionManager:g,...R?{model:R}:{},...Q?.thinkingLevel?{thinkingLevel:Q.thinkingLevel}:{},...z.scopedModels.length>0?{scopedModels:[...z.scopedModels]}:{},...void 0!==h?{tools:h}:{},customTools:y});S.then(({session:a})=>{s=a,k&&ad()},()=>{}),j=setTimeout(()=>{af.cancel(Error("Session startup timed out while binding extensions/resources (40s)"))},4e4);let{session:T}=await Promise.race([S,ae]);clearTimeout(j),ag();try{let b=T.agent,c=b.streamFunction;b.streamFunction=(b,d,e)=>{let f=c(b,d,e);return f instanceof Promise?f.then(c=>O(c,{provider:b.provider,modelId:b.id,sessionId:a})):O(f,{provider:b.provider,modelId:b.id,sessionId:a})},ag();let e=await (0,x.o)(v.settingsManager,{...B?{model:B}:{},...C?{thinkingLevel:C}:{}},{...T.model?{model:{provider:T.model.provider,modelId:T.model.id}}:{},thinkingLevel:T.agent.state?.thinkingLevel??"off",supportsThinking:T.supportsThinking()});ag(),e.modelDefaultChanged&&(0,l.k)(),!W&&A&&A.length>0&&T.setActiveToolsByName(G(T,A)),ag();let f=new Y(T,V);u=f,f.setChatOnly(d),f.setSuppressCompletionNotifications(void 0!==W),A?.length===0||W?.tools.length===0?f.setForceEmptySystemPrompt(!0):W&&W.appendSystemPrompt.length>0&&f.setExactSystemPrompt(W.appendSystemPrompt[0]),f.start(),f.loadQueueRecovery();let g=T.sessionId,h=T.sessionFile;return h&&(0,o.O8)(g,h),f.persistSessionFileIfMissing(),f.onDestroy(()=>{ac(),F.get(g)===f&&F.delete(g)}),F.set(g,f),f.beginExtensionBinding({forceEmptySystemPrompt:A?.length===0}),!function(){let a=K();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:f,realSessionId:g,created:!0}}catch(a){throw ad(),a}})().catch(a=>{throw ad(),a}),ai=setTimeout(()=>{af.cancel(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),aj=Promise.race([ah,ae]).finally(()=>{L.get(a)===aj&&L.delete(a),aa||(aa=!0,clearTimeout(_),clearTimeout(ai),clearTimeout(j),M.starts.delete(af),T.starts.delete(af),X())});return af.settled=aj,L.set(a,aj),aj}d()}catch(a){d(a)}})},12394:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{B:()=>p,createAsyncBashTools:()=>n});var e=c(31421),f=c(81186),g=c(75430),h=c(45399),i=a([f,g]);[f,g]=i.then?(await i)():i;class o{append(a){for(this.totalBytes+=a.length,this.tail.push(a),this.tailBytes+=a.length;this.tailBytes>258048&&this.tail.length>1;){let a=this.tail.shift();this.tailBytes-=a.length}if(this.headBytes<4096){let b=4096-this.headBytes;a.length<=b?(this.head.push(a),this.headBytes+=a.length):(this.head.push(a.subarray(0,b)),this.headBytes=4096)}}get hasOmission(){return this.totalBytes>this.headBytes+this.tailBytes}get omittedBytes(){return Math.max(0,this.totalBytes-this.headBytes-this.tailBytes)}toSnapshot(){if(!this.hasOmission)return Buffer.concat(this.tail).toString("utf-8");let a=[...this.head];return a.push(Buffer.from(`
|
|
5
5
|
... ${this.omittedBytes} bytes omitted ...
|
|
6
6
|
|
|
7
7
|
`)),a.push(...this.tail),Buffer.concat(a).toString("utf-8")}reset(){this.head=[],this.tail=[],this.headBytes=0,this.tailBytes=0,this.totalBytes=0}constructor(){this.head=[],this.tail=[],this.headBytes=0,this.tailBytes=0,this.totalBytes=0}}function j(a){if("win32"===process.platform)try{(0,e.spawn)("taskkill",["/F","/T","/PID",String(a)],{stdio:"ignore",detached:!0,windowsHide:!0})}catch{}else try{process.kill(-a,"SIGKILL")}catch{try{process.kill(a,"SIGKILL")}catch{}}}class p{spawn(a,b,c){let d,f=this.nextId++,h=(0,g.getShellConfig)(),i="stdin"===h.commandTransport,j=i?h.args:[...h.args,a],k=(0,e.spawn)(h.shell,j,{cwd:b,detached:"win32"!==process.platform,env:{...c,NO_COLOR:"1",TERM:"dumb"},stdio:["pipe","pipe","pipe"],windowsHide:!0});k.stdin?.on("error",()=>{}),i&&k.stdin?.end(a);let l=new Promise(a=>{d=a}),m={id:f,child:k,command:a,cwd:b,startedAt:Date.now(),buffer:new o,deltaBuffer:new o,exitCode:null,exited:!1,settled:l},n=a=>{m.buffer.append(a),m.deltaBuffer.append(a)};return k.stdout?.on("data",n),k.stderr?.on("data",n),k.once("exit",a=>{m.exited=!0,m.exitCode=a}),k.once("close",()=>d()),k.once("error",a=>{m.exited=!0;let b=Buffer.from(`
|
|
8
8
|
[process error] ${a.message}
|
|
9
9
|
`);m.buffer.append(b),m.deltaBuffer.append(b),d()}),this.processes.set(f,m),m}get(a){return this.processes.get(a)}writeStdin(a,b){let c=this.processes.get(a);if(!c)return{ok:!1,error:`No process with session_id ${a}`};if(c.exited)return{ok:!1,error:`Process ${a} has already exited`};if(!c.child.stdin||c.child.stdin.destroyed)return{ok:!1,error:`Process ${a} stdin is not available`};if("\x03"===b)try{c.child.kill("SIGINT")}catch{return{ok:!1,error:`Failed to send SIGINT to process ${a}`}}else try{c.child.stdin.write(b)}catch(b){return{ok:!1,error:`Failed to write to process ${a}: ${b}`}}return{ok:!0}}async poll(a,b){let c=this.processes.get(a);if(!c)return{output:`Process ${a} not found (it may have been cleaned up)`,exited:!0,exitCode:null};c.exited||await Promise.race([k(b),c.settled]);let d=c.deltaBuffer.toSnapshot();return c.deltaBuffer.reset(),{output:d,exited:c.exited,exitCode:c.exitCode}}kill(a){let b=this.processes.get(a);return!!b&&(b.child.pid&&j(b.child.pid),this.remove(a),!0)}remove(a){let b=this.processes.get(a);if(b&&b.child.pid&&function(a){try{return process.kill(-a,0),!0}catch(b){let a=b.code;return"EPERM"===a}}(b.child.pid))try{j(b.child.pid)}catch{}this.processes.delete(a)}cleanup(){for(let a of Array.from(this.processes.values()))!a.exited&&a.child.pid&&j(a.child.pid);this.processes.clear()}constructor(){this.processes=new Map,this.nextId=1}}function k(a){return new Promise(b=>setTimeout(b,a))}function l(a,b=250){return Math.max(b,Math.min(a,3e4))}function m(a){let b=[];if(a.command&&b.push(`$ ${a.command}`),a.output.trim()?b.push(a.output):b.push("(no new output)"),b.push(""),a.exited){let c=a.exitCode;0===c?b.push("Process exited successfully (code 0)."):null===c?b.push("Process exited (no exit code captured)."):b.push(`Process exited with code ${c}.`),b.push("No further interaction is possible. Do not call bash_io for this session.")}else null!==a.sessionId&&(b.push(`Process is still running (session_id: ${a.sessionId}).`),b.push(`Call bash_io with session_id ${a.sessionId} to poll for more output (leave chars empty) or to send input.`));return b.push(`Wall time: ${(a.wallMs/1e3).toFixed(1)}s`),b.join("\n")}function n(a){let b=(0,g.defineTool)({name:"bash",label:"Bash",description:"Execute a bash command in the current working directory. Spawns the command and waits up to yield_time_ms (default 2s) for output, then returns. If the command finishes within the wait, returns the full output and exit code. If the command is still running after the wait, returns the output collected so far plus a session_id - use bash_io with that session_id to poll for more output, send input, or interrupt. This is the primary shell tool; use it for all commands including ls, grep, find, builds, tests, and dev servers.",parameters:h.ZUJ.Object({command:h.ZUJ.String({description:"Bash command to execute"}),yield_time_ms:h.ZUJ.Optional(h.ZUJ.Integer({description:"Milliseconds to wait for output before returning (default: 2000, range: 250-30000). If the command is still running after this time, it continues in the background and a session_id is returned for bash_io."}))}),promptSnippet:"bash(command, yield_time_ms?): run any shell command; long-running ones return session_id for bash_io",promptGuidelines:["`bash` runs all shell commands. Short commands finish within yield_time_ms (default 2s) and return full output directly.","For commands still running after the wait, `bash` returns a `session_id` - poll it via `bash_io` (empty chars) or raise yield_time_ms for commands that need more time to produce output.","Poll a running process by calling `bash_io` with an empty `chars` string and the `session_id`.","Send input or Ctrl-C to a running process via `bash_io` with `chars` set to the input text or `\\u0003` for Ctrl-C.","After a process exits (exit code returned), do NOT call `bash_io` for that `session_id` again.","Like a human monitoring a long task: every few minutes poll the running process with bash_io, inspect the log, and decide whether to keep waiting, send input, or interrupt (Ctrl-C) and adjust."],async execute(b,c,d,e,g){let h,i=c.command,j=c.yield_time_ms?l(c.yield_time_ms):2e3,k=g.cwd,n=Date.now();try{h=a.spawn(i,k,(0,f.$9)(process.env))}catch(a){throw Error(`Failed to spawn command: ${a instanceof Error?a.message:String(a)}`)}e&&e({content:[{type:"text",text:`$ ${i}
|
|
10
|
-
(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)}})},12559:(a,b,c)=>{"use strict";function d(a,b){if("string"!=typeof a||0===a.trim().length)throw Error(`Session liveness provider ${b} must be a non-empty string`)}c.d(b,{Vj:()=>f});let e=function(){let a,b=globalThis,c=Symbol.for("@agegr/pi-web/session-liveness/v1"),e=b[c];if(e&&"object"==typeof e&&1===e.version&&"function"==typeof e.register&&"function"==typeof e.hasActiveProvider)return e;let f=(a=new Map,{version:1,register(b){if(!b||"object"!=typeof b)throw Error("Session liveness provider must be an object");if(d(b.name,"name"),d(b.sessionId,"sessionId"),void 0!==b.sessionFile&&d(b.sessionFile,"sessionFile"),"function"!=typeof b.isActive)throw Error("Session liveness provider isActive must be a function");let c=Symbol(b.name);a.set(c,b);let e=!1;return()=>{e||(e=!0,a.delete(c))}},hasActiveProvider(b){let c=new Set([b.sessionId,b.sessionFile].filter(a=>!!a));for(let b of a.values())if(c.has(b.sessionId)||b.sessionFile&&c.has(b.sessionFile))try{let a=b.isActive();if("boolean"!=typeof a)throw Error("isActive() must return a boolean");if(a)return!0}catch(a){return console.error(`[pi-web] Session liveness provider '${b.name}' failed; preserving the session:`,a),!0}return!1}});return b[c]=f,f}();function f(a){return e.hasActiveProvider(a)}},12817:a=>{"use strict";a.exports=function(a){if(null===a||"object"!=typeof a)return a;if(a instanceof Object)var c={__proto__:b(a)};else var c=Object.create(null);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c};var b=Object.getPrototypeOf||function(a){return a.__proto__}},12969:(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}}}},13884:(a,b,c)=>{"use strict";let d=c(93329);a.exports={toPromise:function(a){return(...b)=>new Promise((c,d)=>{b.push((a,b)=>{a?d(a):c(b)}),a(...b)})},toSync:function(a){return(...b)=>{let c,d;if(b.push((a,b)=>{c=a,d=b}),a(...b),c)throw c;return d}},toSyncOptions:function(a){var b;let c;if((a={...a}).fs=(c={...b=a.fs||d},["mkdir","realpath","stat","rmdir","utimes"].forEach(a=>{c[a]=(...c)=>{let d,e=c.pop();try{d=b[`${a}Sync`](...c)}catch(a){return e(a)}e(null,d)}}),c),"number"==typeof a.retries&&a.retries>0||a.retries&&"number"==typeof a.retries.retries&&a.retries.retries>0)throw Object.assign(Error("Cannot use retries with the sync api"),{code:"ESYNC"});return a}}},14253:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{ensureTaskEngine:()=>n});var e=c(29021),f=c(33873),g=c(79646),h=c(88002),i=c(65562),j=c(12144),k=a([i,j]);[i,j]=k.then?(await k)():k;let B=new Set,C=null,D="__piTaskEngine";function l(){return globalThis[D]??C}function m(){let a=l();if(!a)throw Error("task engine not running");return a}function n(){if(l())return!0;if(!function(){let a=(0,i.z1)("__engine__"),b=(0,f.join)(a,"engine.lock");try{if((0,e.mkdirSync)(a,{recursive:!0}),(0,e.existsSync)(b)&&!function(a){try{let b=Number((0,e.readFileSync)(a,"utf8").trim());if(Number.isInteger(b)&&b>0&&function(a){try{return process.kill(a,0),!0}catch{return!1}}(b))return!1;return(0,e.unlinkSync)(a),!0}catch{try{return(0,e.unlinkSync)(a),!0}catch{return!1}}}(b))return!1;let c=(0,e.openSync)(b,"wx");return(0,e.writeFileSync)(c,String(process.pid)),globalThis.__taskEngineLockFd=c,!0}catch{return!1}}())return!1;let a={live:new Map,byTask:new Map,launching:new Map,pumpLocks:new Map,reconcileTimer:null,stopped:!1};return C=a,globalThis[D]=a,z(),a.reconcileTimer=setInterval(()=>{A().catch(a=>{console.error("[tasks] periodic reconcile failed:",a instanceof Error?a.message:a)})},3e4),!0}function o(){return new Date().toISOString()}function p(a,b,c="engine",d){(0,i.fd)(a),b&&(0,i.Q1)(a.projectRoot,{taskId:a.id,kind:b,actor:c,payload:d??null});var e={type:"upsert",id:a.id};for(let a of B)a(e)}function q(a,b,c,d,f){let g=function(a){for(let b of l()?.byTask.values()??[])if(b.taskId===a)return(0,i._o)(b.projectRoot,a)??null;let b=(0,i.z1)("__engine__").replace(/__engine__$/,"");if(!(0,e.existsSync)(b))return null;for(let c of(0,e.readdirSync)(b,{withFileTypes:!0})){if(!c.isDirectory()||"__engine__"===c.name)continue;let b=(0,i._o)(y(c.name),a);if(b)return b}return null}(a);if(!g||g.runSeq!==b||!c.includes(g.status))return null;let h={...g,...f,status:d,updatedAt:o()};return p(h),h}async function r(a){let b=m(),c=(b.pumpLocks.get(a)??Promise.resolve()).then(()=>s(a));b.pumpLocks.set(a,c.catch(()=>void 0)),await c}async function s(a){let b=m();if(b.stopped)return;let c=(0,i.Rv)(a);if(!c.autoProcess)return;let d=(0,i.h6)(a),e=[...b.byTask.values()].filter(b=>b.projectRoot===a).length,f=c.maxConcurrent>0?c.maxConcurrent:1/0;if(!(e>=f))for(let c of d.filter(a=>"queued"===a.status).sort((a,b)=>a.sortOrder-b.sortOrder)){if(e>=f)break;!b.launching.has(c.id)&&await t(c.id,a)&&(e+=1)}}async function t(a,b){let c=m(),d=(0,i._o)(b,a);if(!d||"queued"!==d.status)return!1;let e=globalThis,f=e.__taskLaunchToken=(e.__taskLaunchToken??0)+1;if(c.launching.set(a,f),!q(a,d.runSeq,["queued"],"preparing",{startedAt:o()}))return c.launching.delete(a),!1;(0,i.Q1)(b,{taskId:a,kind:"preparing",actor:"engine"});try{var j,k,l,n,p;let e,f,r,s,t,x,y=await (0,h.KI)(b);if(!y.projectRoot)throw Error("Not a git repository");let z=`task/${a}-${d.title.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)||"task"}`,A=null;try{A=(await (0,h.l)(y.projectRoot,z)).path}catch(b){let a=await u(y.projectRoot,z);if(!a)throw b;A=a}let B=y.branch??null,C=(0,i.Rv)(b);C.initCommand&&await (j=A,k=C.initCommand,new Promise((a,b)=>{let c=(0,g.spawn)(k,{cwd:j,shell:!0,stdio:"ignore"});c.on("error",b),c.on("exit",c=>{0===c?a():b(Error(`init command exited with code ${c??"null"}`))})}));let{session:D}=await v(d,A),E={taskId:a,runSeq:d.runSeq,connectionId:D.sessionId,projectRoot:b,session:D,pendingRequests:new Set};if(c.live.set(D.sessionId,E),c.byTask.set(a,E),(l=E).session.onEvent(a=>{let b=a.type;(async()=>{var c,d,e,f;let j=m().live.get(l.connectionId);if(!j||j.taskId!==l.taskId)return;let k=(0,i._o)(l.projectRoot,l.taskId);if(k&&("running"===k.status||"awaiting_input"===k.status||"merging"===k.status))switch(b){case"extension_ui_request":{let b=a.method,c=a.id;b&&c&&["confirm","input","select","editor"].includes(b)&&(l.pendingRequests.add(c),"running"===k.status&&(q(l.taskId,l.runSeq,["running"],"awaiting_input"),(0,i.Q1)(k.projectRoot,{taskId:l.taskId,kind:"awaiting_input",actor:"engine",payload:{method:b,id:c}})));break}case"extension_ui_response":{let b=a.id;b&&l.pendingRequests.delete(b)&&0===l.pendingRequests.size&&"awaiting_input"===k.status&&q(l.taskId,l.runSeq,["awaiting_input"],"running");break}case"agent_end":if(l.pendingRequests.size>0)break;if("merging"===k.status){let a;c=l,(a=(0,i._o)(c.projectRoot,c.taskId))&&"merging"===a.status&&(d=c.session.cwd,e=["rev-parse","--short","HEAD"],new Promise(a=>{let b=(0,g.spawn)("git",e,{cwd:d}),c="";b.stdout?.on("data",a=>{c+=a.toString()}),b.stderr?.on("data",a=>{c+=a.toString()}),b.on("error",()=>a({code:1,output:c})),b.on("exit",b=>a({code:b,output:c}))})).then(a=>a.output.trim()).catch(()=>null).then(async a=>{let b=(0,i._o)(c.projectRoot,c.taskId);if(b){q(b.id,b.runSeq,["merging"],"done",{mergeCommit:a,finishedAt:o()}),(0,i.Q1)(b.projectRoot,{taskId:b.id,kind:"merged",actor:"engine",payload:{commit:a}});try{var d,e;b.worktreePath&&await (0,h.IL)(c.projectRoot,b.worktreePath,!0).catch(()=>void 0),b.workBranch&&await (d=c.projectRoot,e=["branch","-D",b.workBranch],new Promise((a,b)=>{let c=(0,g.spawn)("git",e,{cwd:d,stdio:"ignore"});c.on("error",b),c.on("exit",c=>{0===c?a():b(Error(`git ${e[0]??""} exited with code ${c??"null"}`))})})).catch(()=>void 0)}catch{}}});break}w(l,k);break;case"prompt_error":{let b,c=a.errorMessage??"agent error";q(l.taskId,l.runSeq,["running","awaiting_input"],"failed",{failureReason:"agent_error",lastError:c,settledAt:o(),finishedAt:o()}),(0,i.Q1)(k.projectRoot,{taskId:l.taskId,kind:"failed",actor:"engine",payload:{reason:"agent_error",message:c}}),f=l,(b=m()).live.delete(f.connectionId),b.byTask.delete(f.taskId);break}case"agent_start":"awaiting_input"===k.status&&0===l.pendingRequests.size&&q(l.taskId,l.runSeq,["awaiting_input"],"running")}})()}),!q(a,d.runSeq,["preparing"],"running",{worktreePath:A,workBranch:z,baseBranch:B,conversationId:D.sessionId,sessionFile:D.sessionFile,runSeq:d.runSeq}))return c.live.delete(D.sessionId),c.byTask.delete(a),D.shutdown().catch(()=>void 0),!1;(0,i.Q1)(b,{taskId:a,kind:"started",actor:"engine",payload:{runSeq:d.runSeq,branch:z}});let F=(n=d,p=C,e=n.config?.prompt??n.title,f=p.stagePrompts?.work??p.stagePrompts?.all??"",r=n.config?.agentType??p.defaultAgentType,s=`You are working on task "${n.title}" in a git worktree branch.
|
|
11
|
-
`+(
|
|
10
|
+
(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)}})},12559:(a,b,c)=>{"use strict";function d(a,b){if("string"!=typeof a||0===a.trim().length)throw Error(`Session liveness provider ${b} must be a non-empty string`)}c.d(b,{Vj:()=>f});let e=function(){let a,b=globalThis,c=Symbol.for("@agegr/pi-web/session-liveness/v1"),e=b[c];if(e&&"object"==typeof e&&1===e.version&&"function"==typeof e.register&&"function"==typeof e.hasActiveProvider)return e;let f=(a=new Map,{version:1,register(b){if(!b||"object"!=typeof b)throw Error("Session liveness provider must be an object");if(d(b.name,"name"),d(b.sessionId,"sessionId"),void 0!==b.sessionFile&&d(b.sessionFile,"sessionFile"),"function"!=typeof b.isActive)throw Error("Session liveness provider isActive must be a function");let c=Symbol(b.name);a.set(c,b);let e=!1;return()=>{e||(e=!0,a.delete(c))}},hasActiveProvider(b){let c=new Set([b.sessionId,b.sessionFile].filter(a=>!!a));for(let b of a.values())if(c.has(b.sessionId)||b.sessionFile&&c.has(b.sessionFile))try{let a=b.isActive();if("boolean"!=typeof a)throw Error("isActive() must return a boolean");if(a)return!0}catch(a){return console.error(`[pi-web] Session liveness provider '${b.name}' failed; preserving the session:`,a),!0}return!1}});return b[c]=f,f}();function f(a){return e.hasActiveProvider(a)}},12817:a=>{"use strict";a.exports=function(a){if(null===a||"object"!=typeof a)return a;if(a instanceof Object)var c={__proto__:b(a)};else var c=Object.create(null);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c};var b=Object.getPrototypeOf||function(a){return a.__proto__}},12969:(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}}}},13884:(a,b,c)=>{"use strict";let d=c(93329);a.exports={toPromise:function(a){return(...b)=>new Promise((c,d)=>{b.push((a,b)=>{a?d(a):c(b)}),a(...b)})},toSync:function(a){return(...b)=>{let c,d;if(b.push((a,b)=>{c=a,d=b}),a(...b),c)throw c;return d}},toSyncOptions:function(a){var b;let c;if((a={...a}).fs=(c={...b=a.fs||d},["mkdir","realpath","stat","rmdir","utimes"].forEach(a=>{c[a]=(...c)=>{let d,e=c.pop();try{d=b[`${a}Sync`](...c)}catch(a){return e(a)}e(null,d)}}),c),"number"==typeof a.retries&&a.retries>0||a.retries&&"number"==typeof a.retries.retries&&a.retries.retries>0)throw Object.assign(Error("Cannot use retries with the sync api"),{code:"ESYNC"});return a}}},14253:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{ensureTaskEngine:()=>n});var e=c(29021),f=c(33873),g=c(79646),h=c(88002),i=c(65562),j=c(12144),k=a([i,j]);[i,j]=k.then?(await k)():k;let O=new Set,P=null,Q="__piTaskEngine";function l(){return globalThis[Q]??P}function m(){let a=l();if(!a)throw Error("task engine not running");return a}function n(){if(l())return!0;if(!function(){let a=(0,i.z1)("__engine__"),b=(0,f.join)(a,"engine.lock");try{if((0,e.mkdirSync)(a,{recursive:!0}),(0,e.existsSync)(b)&&!function(a){try{let b=Number((0,e.readFileSync)(a,"utf8").trim());if(Number.isInteger(b)&&b>0&&function(a){try{return process.kill(a,0),!0}catch{return!1}}(b))return!1;return(0,e.unlinkSync)(a),!0}catch{try{return(0,e.unlinkSync)(a),!0}catch{return!1}}}(b))return!1;let c=(0,e.openSync)(b,"wx");return(0,e.writeFileSync)(c,String(process.pid)),globalThis.__taskEngineLockFd=c,!0}catch{return!1}}())return!1;let a={live:new Map,byTask:new Map,launching:new Map,merging:new Map,pumpLocks:new Map,reconcileTimer:null,stopped:!1};return P=a,globalThis[Q]=a,M(),a.reconcileTimer=setInterval(()=>{N().catch(a=>{console.error("[tasks] periodic reconcile failed:",a instanceof Error?a.message:a)})},3e4),!0}function o(){return new Date().toISOString()}function p(a,b,c="engine",d){(0,i.fd)(a),b&&(0,i.Q1)(a.projectRoot,{taskId:a.id,kind:b,actor:c,payload:d??null});var e={type:"upsert",id:a.id};for(let a of O)a(e)}function q(a,b,c,d,f){let g=function(a){for(let b of l()?.byTask.values()??[])if(b.taskId===a)return(0,i._o)(b.projectRoot,a)??null;let b=(0,i.z1)("__engine__").replace(/__engine__$/,"");if(!(0,e.existsSync)(b))return null;for(let c of(0,e.readdirSync)(b,{withFileTypes:!0})){if(!c.isDirectory()||"__engine__"===c.name)continue;let b=(0,i._o)(C(c.name),a);if(b)return b}return null}(a);if(!g||g.runSeq!==b||!c.includes(g.status))return null;let h={...g,...f,status:d,updatedAt:o()};return p(h),h}async function r(a){let b=m(),c=(b.pumpLocks.get(a)??Promise.resolve()).then(()=>s(a));b.pumpLocks.set(a,c.catch(()=>void 0)),await c}async function s(a){let b=m();if(b.stopped)return;let c=(0,i.Rv)(a);if(!c.autoProcess)return;let d=(0,i.h6)(a),e=[...b.byTask.values()].filter(b=>b.projectRoot===a).length,f=c.maxConcurrent>0?c.maxConcurrent:1/0;if(!(e>=f))for(let c of d.filter(a=>"queued"===a.status).sort((a,b)=>a.sortOrder-b.sortOrder)){if(e>=f)break;!b.launching.has(c.id)&&await t(c.id,a)&&(e+=1)}}async function t(a,b){let c=m(),d=(0,i._o)(b,a);if(!d||"queued"!==d.status)return!1;let e=globalThis,f=e.__taskLaunchToken=(e.__taskLaunchToken??0)+1;if(c.launching.set(a,f),!q(a,d.runSeq,["queued"],"preparing",{startedAt:o()}))return c.launching.delete(a),!1;(0,i.Q1)(b,{taskId:a,kind:"preparing",actor:"engine"});try{var j,k,l,n,p;let e,f,m,o,r,s,t=await (0,h.KI)(b);if(!t.projectRoot)throw Error("Not a git repository");let x=`task/${a}-${d.title.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)||"task"}`,z=null;try{z=(await (0,h.l)(t.projectRoot,x)).path}catch(b){let a=await u(t.projectRoot,x);if(!a)throw b;z=a}let A=t.branch??null,C=(0,i.Rv)(b);C.initCommand&&await (j=z,k=C.initCommand,new Promise((a,b)=>{let c=(0,g.spawn)(k,{cwd:j,shell:!0,stdio:"ignore"});c.on("error",b),c.on("exit",c=>{0===c?a():b(Error(`init command exited with code ${c??"null"}`))})}));let{session:D}=await v(d,z),E={taskId:a,runSeq:d.runSeq,connectionId:D.sessionId,projectRoot:b,session:D,pendingRequests:new Set},F=c.byTask.get(a);if(F&&B(F),c.live.set(D.sessionId,E),c.byTask.set(a,E),(l=E).unsubscribe=l.session.onEvent(a=>{let b=w(l);if(b&&["running","awaiting_input","merging"].includes(b.status))switch(a.type){case"extension_ui_request":{let c=a.method,d=a.id;c&&d&&["confirm","input","select","editor"].includes(c)&&(l.pendingRequests.add(d),q(l.taskId,l.runSeq,["running"],"awaiting_input")&&(0,i.Q1)(b.projectRoot,{taskId:l.taskId,kind:"awaiting_input",actor:"engine",payload:{method:c,id:d}}));break}case"extension_ui_response":{let b=a.id;b&&l.pendingRequests.delete(b)&&0===l.pendingRequests.size&&q(l.taskId,l.runSeq,["awaiting_input"],"running");break}case"message_end":{let b=a.message;b?.role==="assistant"&&(l.lastAssistant=b);break}case"agent_end":{let b=a.messages,c=b?.findLast(a=>"assistant"===a.role);c&&(l.lastAssistant=c),l.retrying=!0===a.willRetry;break}case"auto_retry_start":l.retrying=!0;break;case"auto_retry_end":l.retrying=!1,!1===a.success&&(l.promptError=String(a.finalError??"Agent retry failed"));break;case"prompt_error":l.promptError=String(a.errorMessage??"agent error"),y(l);break;case"prompt_done":case"agent_settled":y(l);break;case"agent_start":l.lastAssistant=void 0,l.promptError=void 0,l.retrying=!1,0===l.pendingRequests.size&&q(l.taskId,l.runSeq,["awaiting_input"],"running")}}),!q(a,d.runSeq,["preparing"],"running",{worktreePath:z,workBranch:x,baseBranch:A,conversationId:D.sessionId,sessionFile:D.sessionFile,runSeq:d.runSeq}))return B(E),D.shutdown().catch(()=>void 0),!1;(0,i.Q1)(b,{taskId:a,kind:"started",actor:"engine",payload:{runSeq:d.runSeq,branch:x}});let G=(n=d,p=C,e=n.config?.prompt??n.title,f=p.stagePrompts?.work??p.stagePrompts?.all??"",m=n.config?.agentType??p.defaultAgentType,o=`You are working on task "${n.title}" in a git worktree branch.
|
|
11
|
+
`+(m?`Agent: ${m}
|
|
12
12
|
`:"")+`Complete the work described below.
|
|
13
13
|
|
|
14
14
|
`+`IMPORTANT RULES:
|
|
@@ -17,12 +17,12 @@ ${(g=i.filter(a=>a.enabled),0===g.length?"No subagent profiles are currently ena
|
|
|
17
17
|
`+`- Do NOT modify files outside this worktree.
|
|
18
18
|
`+`- When you are done, write a short "Result summary" paragraph describing what you changed.
|
|
19
19
|
|
|
20
|
-
`,
|
|
21
|
-
${
|
|
20
|
+
`,s=(r=n.userNote?.trim())?`User note on this (re)start:
|
|
21
|
+
${r}
|
|
22
22
|
|
|
23
|
-
`:"",s+
|
|
23
|
+
`:"",o+s+e+(f?`
|
|
24
24
|
|
|
25
|
-
${f}`:""));return await D.send({type:"prompt",message:F}),!0}catch(e){let c=e instanceof Error?e.message:String(e),d=(0,i._o)(b,a);return d&&("preparing"===d.status||"queued"===d.status)&&(q(a,d.runSeq,[d.status],"failed",{failureReason:"setup_error",lastError:c,settledAt:o(),finishedAt:o()}),(0,i.Q1)(b,{taskId:a,kind:"failed",actor:"engine",payload:{reason:"setup_error",message:c}})),!1}finally{c.launching.delete(a)}}async function u(a,b){try{let c=(await (0,h.P9)(a)).find(a=>a.branch===b);return c?.path??null}catch{return null}}async function v(a,b){let c=`task-${a.id}`,{session:d}=await (0,j.OF)(c,"",b,{});return{session:d}}async function w(a,b){let c=m().live.get(a.connectionId);if(!c||c.taskId!==a.taskId||!q(a.taskId,a.runSeq,["running","awaiting_input"],"review",{settledAt:o()}))return;(0,i.Q1)(b.projectRoot,{taskId:a.taskId,kind:"review",actor:"engine"});let d=(0,i.Rv)(b.projectRoot);d.preflightCommand&&await x(a,d.preflightCommand)}async function x(a,b){let c=(0,i._o)(a.projectRoot,a.taskId);if(c){p({...c,preflight:{status:"running",command:b}},"preflight_start","engine",{command:b});try{var d,e;let c=await (d=a.session.cwd,e=b,new Promise(a=>{let b=(0,g.spawn)(e,{cwd:d,shell:!0}),c="";b.stdout?.on("data",a=>{c+=a.toString()}),b.stderr?.on("data",a=>{c+=a.toString()}),b.on("error",()=>a({code:1,output:c})),b.on("exit",b=>a({code:b,output:c}))})),f=(0,i._o)(a.projectRoot,a.taskId);if(!f)return;p({...f,preflight:{status:0===c.code?"passed":"failed",command:b,exitCode:c.code,outputTail:0===c.code?null:c.output.slice(-4e3)}},0===c.code?"preflight_passed":"preflight_failed","engine",{command:b,exitCode:c.code})}catch(d){let c=(0,i._o)(a.projectRoot,a.taskId);if(!c)return;p({...c,preflight:{status:"failed",command:b,outputTail:d instanceof Error?d.message:String(d)}},"preflight_failed","engine",{command:b})}}}function y(a){return"/"+a.split("--").map(a=>decodeURIComponent(a)).join("/")}async function z(){try{await A()}catch{}}async function A(){let a=m();if(!a)return;let b=(0,i.z1)("__engine__").replace(/__engine__$/,"");if((0,e.existsSync)(b))for(let c of(0,e.readdirSync)(b,{withFileTypes:!0})){if(!c.isDirectory()||"__engine__"===c.name)continue;let b=y(c.name);for(let c of(0,i.h6)(b)){let d=a.byTask.get(c.id);d||"running"!==c.status&&"awaiting_input"!==c.status&&"merging"!==c.status?d||"preparing"!==c.status||(q(c.id,c.runSeq,["preparing"],"todo",{startedAt:null}),(0,i.Q1)(b,{taskId:c.id,kind:"recovered",actor:"engine"})):(q(c.id,c.runSeq,[c.status],"failed",{failureReason:"interrupted",lastError:"Engine restarted; the run was interrupted.",settledAt:o(),finishedAt:o()}),(0,i.Q1)(b,{taskId:c.id,kind:"interrupted",actor:"engine"}))}l()&&r(b)}}d()}catch(a){d(a)}})},14916:(a,b,c)=>{"use strict";c.d(b,{C1:()=>e,kU:()=>d});let d=["read","grep","find","ls"],e=["bash","read","edit","write","grep","find","ls"];[...e]},15011:(a,b,c)=>{"use strict";c.d(b,{Eb:()=>i,W3:()=>h,gB:()=>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){return a&&"win32"===process.platform?(0,d.normalize)(a):a}function h(a){return a.replace(/\\/g,"/")}function i(a,b){return a===b||!!a&&!!b&&"win32"===process.platform&&g(a).toLowerCase()===g(b).toLowerCase()}},15253:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>h,Y1:()=>g});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){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)}})},16176:a=>{"use strict";let b=Symbol();a.exports.probe=function(a,c,d){let e=c[b];if(e)return c.stat(a,(a,b)=>{if(a)return d(a);d(null,b.mtime,e)});let f=new Date(1e3*Math.ceil(Date.now()/1e3)+5);c.utimes(a,f,f,e=>{if(e)return d(e);c.stat(a,(a,e)=>{if(a)return d(a);let f=e.mtime.getTime()%1e3==0?"s":"ms";Object.defineProperty(c,b,{value:f}),d(null,e.mtime,f)})})},a.exports.getMtime=function(a){let b=Date.now();return"s"===a&&(b=1e3*Math.ceil(b/1e3)),new Date(b)}},16983:(a,b,c)=>{"use strict";c.d(b,{Wv:()=>h,jN:()=>j,vH:()=>i});var d=c(29021),e=c(33873),f=c(83739),g=c(15011);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)}>
|
|
25
|
+
${f}`:""));return await D.send({type:"prompt",message:G}),!0}catch(h){let e=h instanceof Error?h.message:String(h),f=(0,i._o)(b,a),g=c.byTask.get(a);return g?.runSeq===d.runSeq&&f?.status==="running"?x(g,e):f?.runSeq===d.runSeq&&("preparing"===f.status||"queued"===f.status)&&(q(a,d.runSeq,[f.status],"failed",{failureReason:"setup_error",lastError:e,settledAt:o(),finishedAt:o()}),(0,i.Q1)(b,{taskId:a,kind:"failed",actor:"engine",payload:{reason:"setup_error",message:e}})),!1}finally{c.launching.delete(a)}}async function u(a,b){try{let c=(await (0,h.P9)(a)).find(a=>a.branch===b);return c?.path??null}catch{return null}}async function v(a,b){let c=`task-${a.id}`,{session:d}=await (0,j.OF)(c,"",b,{});return{session:d}}function w(a){let b=l();if(b?.live.get(a.connectionId)!==a||b.byTask.get(a.taskId)!==a)return null;let c=(0,i._o)(a.projectRoot,a.taskId);return c?.runSeq===a.runSeq?c:null}function x(a,b){let c=w(a);if(c){if("merging"===c.status){var d,e;d=c,e=b,q(d.id,d.runSeq,["merging"],"review",{lastError:`Merge failed: ${e}`})&&(0,i.Q1)(d.projectRoot,{taskId:d.id,kind:"merge_failed",actor:"engine",payload:{message:e}}),a.mergeIntent=void 0;return}q(a.taskId,a.runSeq,["running","awaiting_input"],"failed",{failureReason:"agent_error",lastError:b,settledAt:o(),finishedAt:o()})&&((0,i.Q1)(c.projectRoot,{taskId:a.taskId,kind:"failed",actor:"engine",payload:{reason:"agent_error",message:b}}),B(a))}}function y(a){let b=w(a);if(!b||!["running","awaiting_input","merging"].includes(b.status)||a.settling||a.session.isRunning())return;let c=a.promptError??(a.lastAssistant?.stopReason==="error"||a.lastAssistant?.stopReason==="aborted"?a.lastAssistant.errorMessage||`Agent ended with ${a.lastAssistant.stopReason}`:void 0);if(c)return void x(a,c);if(!a.pendingRequests.size&&!a.retrying){if(!a.lastAssistant||"stop"!==a.lastAssistant.stopReason)return void x(a,`Agent did not finish successfully (${a.lastAssistant?.stopReason??"no assistant result"})`);a.settling=("merging"===b.status?L(a):z(a,b)).catch(b=>x(a,b instanceof Error?b.message:String(b))).finally(()=>{a.settling=void 0})}}async function z(a,b){if(!w(a)||!q(a.taskId,a.runSeq,["running","awaiting_input"],"review",{settledAt:o()}))return;(0,i.Q1)(b.projectRoot,{taskId:a.taskId,kind:"review",actor:"engine"});let c=(0,i.Rv)(b.projectRoot);c.preflightCommand&&await A(a,c.preflightCommand)}async function A(a,b){let c=w(a);if(c&&"review"===c.status){p({...c,preflight:{status:"running",command:b}},"preflight_start","engine",{command:b});try{var d,e;let c=await (d=a.session.cwd,e=b,new Promise(a=>{let b=(0,g.spawn)(e,{cwd:d,shell:!0}),c="";b.stdout?.on("data",a=>{c+=a.toString()}),b.stderr?.on("data",a=>{c+=a.toString()}),b.on("error",()=>a({code:1,output:c})),b.on("exit",b=>a({code:b,output:c}))})),f=w(a);if(!f||"review"!==f.status)return;p({...f,preflight:{status:0===c.code?"passed":"failed",command:b,exitCode:c.code,outputTail:0===c.code?null:c.output.slice(-4e3)}},0===c.code?"preflight_passed":"preflight_failed","engine",{command:b,exitCode:c.code})}catch(d){let c=w(a);if(!c||"review"!==c.status)return;p({...c,preflight:{status:"failed",command:b,outputTail:d instanceof Error?d.message:String(d)}},"preflight_failed","engine",{command:b})}}}function B(a){a.unsubscribe?.(),a.unsubscribe=void 0;let b=l();b?.live.get(a.connectionId)===a&&b.live.delete(a.connectionId),b?.byTask.get(a.taskId)===a&&b.byTask.delete(a.taskId)}function C(a){return"/"+a.split("--").map(a=>decodeURIComponent(a)).join("/")}function D(a,b){let c=(0,i._o)(a.projectRoot,a.id);return c?.runSeq===a.runSeq&&c.status===b}function E(a){return async(b,c,d=[0])=>{if(!a())throw Error("Task run was superseded");let e=await new Promise(a=>{let d=(0,g.spawn)("git",c,{cwd:b}),e="";d.stdout?.on("data",a=>{e+=a.toString()}),d.stderr?.on("data",a=>{e+=a.toString()}),d.on("error",()=>a({code:1,output:e})),d.on("exit",b=>a({code:b,output:e}))});if(!a())throw Error("Task run was superseded");if(!d.includes(e.code??-1))throw Error(e.output.trim()||`git ${c[0]} failed (${e.code})`);return{...e,output:e.output.trim()}}}async function F(a,b,c=!1){if((await a(b,["status","--porcelain=v1","--untracked-files=all",...c?["--ignored"]:[]])).output)throw Error(`Checkout has uncommitted or untracked changes: ${b}`)}async function G(a,b){if(!a.worktreePath||!a.workBranch||!a.baseBranch)throw Error("A worktree and explicit base/work branch are required");let c=`refs/heads/${a.baseBranch}`,d=`refs/heads/${a.workBranch}`;if(c===d)throw Error("Task branch must differ from the base branch");if((await b(a.projectRoot,["symbolic-ref","-q","HEAD"])).output!==c)throw Error(`Base checkout must be on branch ${a.baseBranch}; refusing to merge another branch`);if((await b(a.worktreePath,["symbolic-ref","-q","HEAD"])).output!==d)throw Error(`Worktree must be on branch ${a.workBranch}`);await F(b,a.projectRoot),await F(b,a.worktreePath);let e=(await b(a.projectRoot,["rev-parse","--verify",`${c}^{commit}`])).output,f=(await b(a.projectRoot,["rev-parse","--verify",`${d}^{commit}`])).output;return{baseRef:c,workRef:d,base:e,source:f}}async function H(a,b){let c=globalThis,d=c.__piTaskMergeLocks??=new Map,e=(d.get(a)??Promise.resolve()).catch(()=>void 0).then(b);d.set(a,e);try{await e}finally{d.get(a)===e&&d.delete(a)}}async function I(a,b,c){let d=l(),e=d?d.merging??=new Map:void 0,f={projectRoot:a.projectRoot,runSeq:a.runSeq};if(D(a,"merging")){e?.set(a.id,f);try{await H(a.projectRoot,()=>J(a,b,c,()=>!e||e.get(a.id)===f))}finally{e?.get(a.id)===f&&e.delete(a.id)}}}async function J(a,b,c,d){let e,f=E(()=>d()&&D(a,"merging")&&(!c||!!w(c))),{baseRef:g,workRef:h,base:j,source:k}=await G(a,f),l=await f(a.projectRoot,["merge-base","--is-ancestor",k,j],[0,1]);if(0!==l.code){let c=b.message||`Merge task ${a.id}: ${a.title}`;if("squash"===b.strategy){await f(a.projectRoot,["merge","--squash","--no-commit",k]),e=(await f(a.projectRoot,["write-tree"])).output;let b=await f(a.projectRoot,["diff","--cached","--quiet"],[0,1]);1===b.code&&await f(a.projectRoot,["commit","-m",c])}else await f(a.projectRoot,["merge","--no-ff","--no-edit","-m",c,k])}let m=(await f(a.projectRoot,["rev-parse","--verify",`${g}^{commit}`])).output;if((await f(a.projectRoot,["symbolic-ref","-q","HEAD"])).output!==g)throw Error("Base branch changed during merge");if((await f(a.projectRoot,["rev-parse","--verify",`${h}^{commit}`])).output!==k)throw Error("Task branch changed during merge; keeping the worktree");if(await f(a.projectRoot,["merge-base","--is-ancestor",j,m]),e){if((await f(a.projectRoot,["rev-parse",`${m}^{tree}`])).output!==e)throw Error("Base commit does not contain the verified squash result")}else await f(a.projectRoot,["merge-base","--is-ancestor",k,m]);await F(f,a.projectRoot),await F(f,a.worktreePath),q(a.id,a.runSeq,["merging"],"done",{mergeCommit:m,lastError:null,finishedAt:o()})&&((0,i.Q1)(a.projectRoot,{taskId:a.id,kind:"merged",actor:"engine",payload:{commit:m,baseBranch:a.baseBranch}}),c&&B(c),b.deleteWorktree&&await K(a,k,m))}async function K(a,b,c){let d=E(()=>D(a,"done"));try{let e=`refs/heads/${a.workBranch}`;if((await d(a.projectRoot,["rev-parse","--verify",e])).output!==b)throw Error("Task branch changed after merge");if(await d(a.projectRoot,["merge-base","--is-ancestor",c,`refs/heads/${a.baseBranch}`]),await F(d,a.worktreePath,!0),!D(a,"done")||(await (0,h.IL)(a.projectRoot,a.worktreePath),!D(a,"done")))return;if((await (0,h.P9)(a.projectRoot)).some(b=>b.branch===a.workBranch))throw Error("Task branch is still checked out; keeping it");await d(a.projectRoot,["update-ref","-d",e,b])}catch(d){let b=(0,i._o)(a.projectRoot,a.id);if(!b||b.runSeq!==a.runSeq||"done"!==b.status)return;let c=d instanceof Error?d.message:String(d);p({...b,lastError:`Merged, but cleanup failed: ${c}`},"cleanup_failed","engine",{message:c})}}async function L(a){let b=w(a);b&&"merging"===b.status&&a.mergeIntent&&await I(b,a.mergeIntent,a)}async function M(){try{await N()}catch{}}async function N(){let a=m();if(!a)return;let b=(0,i.z1)("__engine__").replace(/__engine__$/,"");if((0,e.existsSync)(b))for(let c of(0,e.readdirSync)(b,{withFileTypes:!0})){if(!c.isDirectory()||"__engine__"===c.name)continue;let b=C(c.name);for(let c of(0,i.h6)(b)){let d=a.byTask.get(c.id),e=a.merging?.get(c.id);d?.runSeq===c.runSeq||"merging"===c.status&&e?.runSeq===c.runSeq&&e.projectRoot===c.projectRoot||"running"!==c.status&&"awaiting_input"!==c.status&&"merging"!==c.status?d||"preparing"!==c.status||(q(c.id,c.runSeq,["preparing"],"todo",{startedAt:null}),(0,i.Q1)(b,{taskId:c.id,kind:"recovered",actor:"engine"})):(q(c.id,c.runSeq,[c.status],"failed",{failureReason:"interrupted",lastError:"Engine restarted; the run was interrupted.",settledAt:o(),finishedAt:o()}),(0,i.Q1)(b,{taskId:c.id,kind:"interrupted",actor:"engine"}))}l()&&r(b)}}d()}catch(a){d(a)}})},14916:(a,b,c)=>{"use strict";c.d(b,{C1:()=>e,kU:()=>d});let d=["read","grep","find","ls"],e=["bash","read","edit","write","grep","find","ls"];[...e]},15011:(a,b,c)=>{"use strict";c.d(b,{Eb:()=>i,W3:()=>h,gB:()=>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){return a&&"win32"===process.platform?(0,d.normalize)(a):a}function h(a){return a.replace(/\\/g,"/")}function i(a,b){return a===b||!!a&&!!b&&"win32"===process.platform&&g(a).toLowerCase()===g(b).toLowerCase()}},15253:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Fk:()=>h,Y1:()=>g});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){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)}})},16176:a=>{"use strict";let b=Symbol();a.exports.probe=function(a,c,d){let e=c[b];if(e)return c.stat(a,(a,b)=>{if(a)return d(a);d(null,b.mtime,e)});let f=new Date(1e3*Math.ceil(Date.now()/1e3)+5);c.utimes(a,f,f,e=>{if(e)return d(e);c.stat(a,(a,e)=>{if(a)return d(a);let f=e.mtime.getTime()%1e3==0?"s":"ms";Object.defineProperty(c,b,{value:f}),d(null,e.mtime,f)})})},a.exports.getMtime=function(a){let b=Date.now();return"s"===a&&(b=1e3*Math.ceil(b/1e3)),new Date(b)}},16983:(a,b,c)=>{"use strict";c.d(b,{Wv:()=>h,jN:()=>j,vH:()=>i});var d=c(29021),e=c(33873),f=c(83739),g=c(15011);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)}>
|
|
26
26
|
${a.content}
|
|
27
27
|
</document>`).join("\n\n");return`${a}
|
|
28
28
|
|
|
@@ -36,9 +36,12 @@ ${a.mark.snippet}`),`${a.reason} ${c}`):a.reason}var ah=class a extends Error{re
|
|
|
36
36
|
${h}`}let k=ae(a.buffer,e[g],f[g],a.position,j);h+=`${" ".repeat(c.indent)}${af((a.line+1).toString(),i)} | ${k.str}
|
|
37
37
|
${"-".repeat(c.indent+i+3+k.pos)}^
|
|
38
38
|
`;for(let b=1;b<=c.linesAfter&&!(g+b>=f.length);b++){let d=ae(a.buffer,e[g+b],f[g+b],a.position-(e[g]-e[g+b]),j);h+=`${" ".repeat(c.indent)}${af((a.line+b+1).toString(),i)} | ${d.str}
|
|
39
|
-
`}return h.replace(/\n$/,"")}(h),new a(d,h)}};function ai(a){switch(a){case 48:return"\0";case 97:return"\x07";case 98:return"\b";case 116:case 9:return" ";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 101:return"\x1b";case 32:return" ";case 34:return'"';case 47:return"/";case 92:return"\\";case 78:return"\x85";case 95:return"\xa0";case 76:return"\u2028";case 80:return"\u2029";default:return""}}var aj=Array(256),ak=Array(256);for(let a=0;a<256;a++)aj[a]=+!!ai(a),ak[a]=ai(a);function al(a,b,c){let d=0;for(;b<c;){let c=a.charCodeAt(b);if(10===c)d++,b++;else if(13===c)d++,b++,10===a.charCodeAt(b)&&b++;else if(32===c||9===c)b++;else break}return{position:b,breaks:d}}function am(a){return 1===a?" ":"\n".repeat(a-1)}function an(a,b,c,d,e,f){let g=d<0?0:d,h=a.slice(b,c).replace(/\r\n?/g,"\n"),i=""===h?[]:(h.endsWith("\n")?h.slice(0,-1):h).split("\n"),j="",k=!1,l=0,m=!1;for(let a of i){let b=0;for(;b<g&&32===a.charCodeAt(b);)b++;if(d<0||b>=a.length){l++;continue}let c=a.slice(g),e=c.charCodeAt(0);f?32===e||9===e?(m=!0,j+="\n".repeat(k?1+l:l)):m?(m=!1,j+="\n".repeat(l+1)):0===l?k&&(j+=" "):j+="\n".repeat(l):j+="\n".repeat(k?1+l:l),j+=c,k=!0,l=0}return 3===e?j+="\n".repeat(k?1+l:l):2!==e&&k&&(j+="\n"),j}var ao=Object.assign(Object.create(null),{"!":"!","!!":"tag:yaml.org,2002:"});function ap(a,b){if(a.startsWith("!<")&&a.endsWith(">"))return decodeURIComponent(a.slice(2,-1));let c=a.indexOf("!",1),d=-1===c?"!":a.slice(0,c+1);return decodeURIComponent(b?.[d]??ao[d]??d)+decodeURIComponent(a.slice(d.length))}var aq={filename:"",schema:ab,json:!1,maxTotalMergeKeys:1e4,maxAliases:-1};function ar(a,b){ah.throwAt(a.source,a.position,b,a.filename)}function as(a,b,c,d){try{return c.finalize(d)}catch(c){if(c instanceof ah)throw c;ah.throwAt(a.source,b,c instanceof Error?c.message:String(c),a.filename)}}function at(a,b,c){let d=-1===b.tagStart?"":a.source.slice(b.tagStart,b.tagEnd);return""===d||"!"===d?c:ap(d,a.tagHandlers)}function au(a){return"mapping"===a.nodeKind}function av(a,b,c,d){for(let e of d.keys(c)){if(-1!==a.maxTotalMergeKeys&&++a.totalMergeKeys>a.maxTotalMergeKeys&&ar(a,`merge keys exceeded maxTotalMergeKeys (${a.maxTotalMergeKeys})`),b.tag.has(b.value,e))continue;let f=b.tag.addPair(b.value,e,d.get(c,e));f&&ar(a,f),(b.overridable??=new Set).add(e)}}function aw(a,b,c){let d=a.frames[a.frames.length-1];if("document"===d.kind)d.value=b,d.hasValue=!0;else if("sequence"===d.kind){au(c)&&a.nodeTags.set(b,c);let e=d.tag.addItem(d.value,b,d.index++);e&&ar(a,e)}else if(d.hasKey){let e=d.key;d.key=void 0,d.hasKey=!1,function(a,b,c,d,e){if(a.position=b.keyPosition,b.keyIsMerge){var f=a,g=b,h=d,i=e;if(f.position=g.keyPosition,au(i))av(f,g,h,i);else if("sequence"===i.nodeKind&&Array.isArray(h))for(let a of h){let b=f.nodeTags.get(a);b||ar(f,"cannot merge mappings; the provided source object is unacceptable"),av(f,g,a,b)}else ar(f,"cannot merge mappings; the provided source object is unacceptable");return}!a.json&&b.tag.has(b.value,c)&&!b.overridable?.has(c)&&ar(a,"duplicated mapping key");let j=b.tag.addPair(b.value,c,d);j&&ar(a,j),b.overridable?.delete(c)}(a,d,e,b,c)}else d.key=b,d.keyPosition=a.position,d.hasKey=!0,d.keyIsMerge="tag:yaml.org,2002:merge"===c.tagName}function ax(a,b,c,d,e){if(-1!==b.anchorStart){let f={value:c,tag:d,isValueFinal:e};return a.anchors.set(a.source.slice(b.anchorStart,b.anchorEnd),f),f}return null}var ay=Object.prototype.hasOwnProperty,az=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,aA=/[,\[\]{}]/,aB=/^(?:!|!!|![0-9A-Za-z-]+!)$/,aC=String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]])`,aD=String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$.~*'()_])`,aE=RegExp(`^(?:${aC})*$`),aF=RegExp(`^(?:${aD})+$`),aG=RegExp(`^(?:!(?:${aC})*|${aD}(?:${aC})*)$`),aH={filename:"",maxDepth:100};function aI(a,b,c,d,e,f,g){a.events.push({type:2,start:b,anchorStart:c,anchorEnd:d,tagStart:e,tagEnd:f,style:g})}function aJ(a,b,c,d,e,f,g){a.events.push({type:3,start:b,anchorStart:c,anchorEnd:d,tagStart:e,tagEnd:f,style:g})}function aK(a,b){a.events.splice(b.eventsLength,0,{type:3,start:b.position,anchorStart:-1,anchorEnd:-1,tagStart:-1,tagEnd:-1,style:2})}function aL(a,b,c,d,e,f,g,h,i=1,j=-1,k=!1){a.events.push({type:4,valueStart:b,valueEnd:c,anchorStart:d,anchorEnd:e,tagStart:f,tagEnd:g,style:h,chomping:i,indent:j,fast:k})}function aM(a){a.events.push({type:6})}function aN(a){aL(a,-1,-1,-1,-1,-1,-1,1)}function aO(){return{anchorStart:-1,anchorEnd:-1,tagStart:-1,tagEnd:-1}}function aP(a){return{position:a.position,line:a.line,lineStart:a.lineStart,lineIndent:a.lineIndent,firstTabInLine:a.firstTabInLine,eventsLength:a.events.length}}function aQ(a,b){a.position=b.position,a.line=b.line,a.lineStart=b.lineStart,a.lineIndent=b.lineIndent,a.firstTabInLine=b.firstTabInLine,a.events.length=b.eventsLength}function aR(a,b){ah.throwAt(a.input.slice(0,a.length),a.position,b,a.filename)}function aS(a){return 10===a||13===a}function aT(a){return 9===a||32===a}function aU(a){return aT(a)||aS(a)}function aV(a){return 0===a||aU(a)}function aW(a){return 44===a||91===a||93===a||123===a||125===a}function aX(a){10===a.input.charCodeAt(a.position)?a.position++:(a.position++,10===a.input.charCodeAt(a.position)&&a.position++),a.line++,a.lineStart=a.position,a.lineIndent=0,a.firstTabInLine=-1}function aY(a,b){let c=0,d=a.input.charCodeAt(a.position),e=a.position===a.lineStart||aU(a.input.charCodeAt(a.position-1));for(;0!==d;){for(;aT(d);)e=!0,9===d&&-1===a.firstTabInLine&&(a.firstTabInLine=a.position),d=a.input.charCodeAt(++a.position);if(b&&e&&35===d)do d=a.input.charCodeAt(++a.position);while(!aS(d)&&0!==d);if(!aS(d))break;for(aX(a),c++,e=!0,d=a.input.charCodeAt(a.position);32===d;)a.lineIndent++,d=a.input.charCodeAt(++a.position)}return c}function aZ(a,b=a.position){let c=a.input.charCodeAt(b);if((45===c||46===c)&&c===a.input.charCodeAt(b+1)&&c===a.input.charCodeAt(b+2)){let c=a.input.charCodeAt(b+3);return 0===c||aU(c)}return!1}function a$(a){let b=a.input.charCodeAt(a.position);for(;0!==b&&!aS(b);)b=a.input.charCodeAt(++a.position)}function a_(a,b,c){az.test(a.input.slice(b,c))&&aR(a,"the stream contains non-printable characters")}function a0(a,b){aY(a,!1),a.lineIndent<b&&aR(a,"deficient indentation")}function a1(a,b){let c=a.line;aY(a,!0),(a.line>c&&a.lineIndent<b||-1!==a.firstTabInLine&&a.lineIndent<b)&&aR(a,"deficient indentation")}function a2(a,b,c){if(-1!==a.firstTabInLine||45!==a.input.charCodeAt(a.position)||!aV(a.input.charCodeAt(a.position+1)))return!1;for(aI(a,a.position,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,1);45===a.input.charCodeAt(a.position)&&aV(a.input.charCodeAt(a.position+1));){-1!==a.firstTabInLine&&(a.position=a.firstTabInLine,aR(a,"tab characters must not be used in indentation"));let c=a.line;a.position++;let d=aY(a,!0)>0;if(-1!==a.firstTabInLine&&45===a.input.charCodeAt(a.position)&&aV(a.input.charCodeAt(a.position+1))&&aR(a,"bad indentation of a sequence entry"),d&&a.lineIndent<=b?aN(a):a4(a,b,3,!1,!0),aY(a,!0),a.lineIndent<b||a.position>=a.length)break;a.lineIndent>b&&aR(a,"bad indentation of a sequence entry"),a.line===c&&45===a.input.charCodeAt(a.position)&&aV(a.input.charCodeAt(a.position+1))&&aR(a,"bad indentation of a sequence entry")}return aM(a),!0}function a3(a,b,c,d){let e=!1,f=!1,g=!1,h=!1;if(-1!==a.firstTabInLine)return!1;let i=a.input.charCodeAt(a.position);for(;0!==i;){e||-1===a.firstTabInLine||(a.position=a.firstTabInLine,aR(a,"tab characters must not be used in indentation"));let j=a.input.charCodeAt(a.position+1),k=a.line;if((63===i||58===i)&&aV(j))g||(aJ(a,a.position,d.anchorStart,d.anchorEnd,d.tagStart,d.tagEnd,1),g=!0),63===i?(e&&aN(a),f=!0,e=!0):(e||(aN(a),f=!0),e=!1),a.position+=1,h=!0;else{e&&(aN(a),e=!1);let b=aP(a);if(!a4(a,c,2,!1,!0))break;if(a.line===k){for(i=a.input.charCodeAt(a.position);aT(i);)i=a.input.charCodeAt(++a.position);if(58===i){if(aV(i=a.input.charCodeAt(++a.position))||aR(a,"a whitespace character is expected after the key-value separator within a block mapping"),!g){for(aQ(a,b),aJ(a,b.position,d.anchorStart,d.anchorEnd,d.tagStart,d.tagEnd,1),g=!0,a4(a,c,2,!1,!0),i=a.input.charCodeAt(a.position);aT(i);)i=a.input.charCodeAt(++a.position);a.position++}f=!0,e=!1,h=!1}else if(f)aR(a,"expected ':' after a mapping key");else{if(-1!==d.anchorStart||-1!==d.tagStart)return aQ(a,b),!1;return!0}}else if(f)aR(a,"can not read a block mapping entry; a multiline key may not be an implicit key");else{if(-1!==d.anchorStart||-1!==d.tagStart)return aQ(a,b),!1;return!0}}if(a4(a,b,4,!0,h)&&(h=!1),!e&&h&&(aN(a),h=!1),aY(a,!0),i=a.input.charCodeAt(a.position),(a.line===k||a.lineIndent>b)&&0!==i)aR(a,"bad indentation of a mapping entry");else if(a.lineIndent<b)break}return!!f&&(e&&aN(a),g&&aM(a),!0)}function a4(a,b,c,d,e,f=!0){a.depth>=a.maxDepth&&aR(a,`nesting exceeded maxDepth (${a.maxDepth})`),a.depth++;let g=1,h=!1,i=!1,j=null,k=aO(),l=4===c||3===c,m=l,n=l;if(d&&aY(a,!0)&&(h=!0,g=a.lineIndent>b?1:a.lineIndent===b?0:-1),1===g)for(;;){let d=a.input.charCodeAt(a.position),e=aP(a);if(h&&1!==g&&(33===d||38===d))break;if(h&&n&&(-1!==k.tagStart||-1!==k.anchorStart)&&(33===d||38===d)){let c=aP(a),d=b+1;if(a3(a,a.position-a.lineStart,d,k)&&a.events[c.eventsLength]?.type===3)return a.depth--,!0;aQ(a,c)}if(h&&(33===d&&-1!==k.tagStart||38===d&&-1!==k.anchorStart)||!function(a,b,c){let d;if(33!==a.input.charCodeAt(a.position))return!1;-1!==b.tagStart&&aR(a,"duplication of a tag property");let e=a.position,f=!1,g=!1,h="!",i=a.input.charCodeAt(++a.position);60===i?(f=!0,i=a.input.charCodeAt(++a.position)):33===i&&(g=!0,h="!!",i=a.input.charCodeAt(++a.position));let j=a.position;if(f){for(;0!==i&&62!==i;)i=a.input.charCodeAt(++a.position);62!==i&&aR(a,"unexpected end of the stream within a verbatim tag"),d=a.input.slice(j,a.position),a.position++}else{for(;0!==i&&!aU(i)&&!(c&&aW(i));)33===i&&(g?aR(a,"tag suffix cannot contain exclamation marks"):(h=a.input.slice(j-1,a.position+1),aB.test(h)||aR(a,"named tag handle cannot contain such characters"),g=!0,j=a.position+1)),i=a.input.charCodeAt(++a.position);d=a.input.slice(j,a.position),aA.test(d)&&aR(a,"tag suffix cannot contain flow indicator characters")}return!d||(f?aE.test(d):aF.test(d))||aR(a,`tag name cannot contain such characters: ${d}`),f||"!"===h||"!!"===h||ay.call(a.tagHandlers,h)||aR(a,`undeclared tag handle "${h}"`),b.tagStart=e,b.tagEnd=a.position,!0}(a,k,1===c)&&!function(a,b){if(38!==a.input.charCodeAt(a.position))return!1;-1!==b.anchorStart&&aR(a,"duplication of an anchor property"),a.position++;let c=a.position;for(;0!==a.input.charCodeAt(a.position)&&!aU(a.input.charCodeAt(a.position))&&!aW(a.input.charCodeAt(a.position));)a.position++;return a.position===c&&aR(a,"name of an anchor node must contain at least one character"),b.anchorStart=c,b.anchorEnd=a.position,!0}(a,k))break;null===j&&(j=e),aY(a,!0)?(h=!0,m=n,g=a.lineIndent>b?1:a.lineIndent===b?0:-1):m=!1}if(m&&(m=h||e),1===g||4===c){let d=1===c||2===c?b:b+1,e=a.position-a.lineStart;if(1===g)if(m&&(a2(a,e,k)||a3(a,e,d,k))||function(a,b,c){let d=a.input.charCodeAt(a.position),e=123===d,f=a.position,g=!0;if(91!==d&&123!==d)return!1;let h=e?125:93;for(e?aJ(a,f,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,2):aI(a,f,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,2),a.position++;0!==a.input.charCodeAt(a.position);){a1(a,b);let c=a.input.charCodeAt(a.position);if(c===h)return a.position++,aM(a),!0;g?44===c&&aR(a,"expected the node content, but found ','"):aR(a,"missed comma between flow collection entries");let d=!1,f=!1;63===c&&aU(a.input.charCodeAt(a.position+1))&&(d=f=!0,a.position+=1,a1(a,b));let i=a.line,j=aP(a),k=a4(a,b,1,!1,!0);a1(a,b),c=a.input.charCodeAt(a.position),(e||f||a.line===i)&&58===c?(d=!0,a.position++,a1(a,b),e||aK(a,j),k||aN(a),a4(a,b,1,!1,!0)||aN(a),a1(a,b),e||aM(a)):e&&d?(k||aN(a),aN(a)):e?aN(a):d&&(aK(a,j),k||aN(a),aN(a),aM(a)),44===(c=a.input.charCodeAt(a.position))?(g=!0,a.position++):g=!1}aR(a,"unexpected end of the stream within a flow collection")}(a,d,k))i=!0;else{let b=a.input.charCodeAt(a.position);if(null!==j&&f&&n&&!m&&124!==b&&62!==b){let b=aP(a),c=j.position-j.lineStart;aQ(a,j),a3(a,c,d,aO())&&a.events[b.eventsLength]?.type===3?i=!0:aQ(a,b)}!i&&(l&&function(a,b,c){let d=a.input.charCodeAt(a.position),e=1,f=-1,g=!1;if(124!==d&&62!==d)return!1;for(a.position++;0!==a.input.charCodeAt(a.position);){let c=a.input.charCodeAt(a.position),d=c>=48&&c<=57?c-48:-1;if(43===c||45===c)1!==e&&aR(a,"repeat of a chomping mode identifier"),e=43===c?3:2,a.position++;else if(d>=0)0===d&&aR(a,"bad explicit indentation width of a block scalar; it cannot be less than one"),g&&aR(a,"repeat of an indentation width identifier"),f=b+d-1,g=!0,a.position++;else break}let h=!1;for(;aT(a.input.charCodeAt(a.position));)h=!0,a.position++;h&&35===a.input.charCodeAt(a.position)&&a$(a),aS(a.input.charCodeAt(a.position))?aX(a):0!==a.input.charCodeAt(a.position)&&aR(a,"a line break is expected");let i=g?f:-1,j=0,k=a.position,l=a.position;for(;0!==a.input.charCodeAt(a.position);){let c=a.position,d=0;for(;32===a.input.charCodeAt(c+d);)d++;let e=a.input.charCodeAt(c+d);if(0===e){i>=0?d>i&&(l=c+d):d>0&&(l=c+d);break}if(c===a.lineStart&&aZ(a,c))break;if(!g&&-1===i&&aS(e)&&(j=Math.max(j,d)),g||-1!==i||aS(e)||(9===e&&d<b&&(a.position=c+d,aR(a,"tab characters must not be used in indentation")),d<j&&(a.position=c+d,aR(a,"bad indentation of a mapping entry"))),-1===i&&0!==e&&!aS(e)&&d<b){a.lineIndent=d,a.position=c+d;break}g||0===e||aS(e)||-1!==i||(i=d);let f=-1===i?b+1:i;if(0!==e&&!aS(e)&&d<f){a.lineIndent=d,a.position=c+d;break}a$(a),l=a.position,aS(a.input.charCodeAt(a.position))&&(aX(a),l=a.position)}return a_(a,k,l),aL(a,k,l,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,124===d?4:5,e,i),!0}(a,d,k)||function(a,b,c){if(39!==a.input.charCodeAt(a.position))return!1;a.position++;let d=a.position,e=!0;for(;0!==a.input.charCodeAt(a.position);){let f=a.input.charCodeAt(a.position);if(39===f){if(39===a.input.charCodeAt(a.position+1)){e=!1,a.position+=2;continue}let b=a.position;return a.position++,aL(a,d,b,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,2,1,-1,e),!0}aS(f)?(e=!1,a0(a,b)):a.position===a.lineStart&&aZ(a)?aR(a,"unexpected end of the document within a single quoted scalar"):9!==f&&f<32?aR(a,"expected valid JSON character"):a.position++}aR(a,"unexpected end of the stream within a single quoted scalar")}(a,d,k)||function(a,b,c){if(34!==a.input.charCodeAt(a.position))return!1;a.position++;let d=a.position,e=!0;for(;0!==a.input.charCodeAt(a.position);){let f=a.input.charCodeAt(a.position);if(34===f){let b=a.position;return a.position++,aL(a,d,b,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,3,1,-1,e),!0}if(92===f){e=!1;let c=a.input.charCodeAt(++a.position);if(aS(c))a0(a,b);else if(48===c||97===c||98===c||116===c||9===c||110===c||118===c||102===c||114===c||101===c||32===c||34===c||47===c||92===c||78===c||95===c||76===c||80===c)a.position++;else{let b=120===c?2:117===c?4:8*(85===c);for(0===b&&aR(a,"unknown escape sequence");b-- >0;)a.position++,0>function(a){if(a>=48&&a<=57)return a-48;let b=32|a;return b>=97&&b<=102?b-97+10:-1}(a.input.charCodeAt(a.position))&&aR(a,"expected hexadecimal character");a.position++}}else aS(f)?(e=!1,a0(a,b)):a.position===a.lineStart&&aZ(a)?aR(a,"unexpected end of the document within a double quoted scalar"):9!==f&&f<32?aR(a,"expected valid JSON character"):a.position++}aR(a,"unexpected end of the stream within a double quoted scalar")}(a,d,k)||function(a,b){var c;if(42!==a.input.charCodeAt(a.position))return!1;(-1!==b.anchorStart||-1!==b.tagStart)&&aR(a,"alias node should not have any properties"),a.position++;let d=a.position;for(;0!==a.input.charCodeAt(a.position)&&!aU(a.input.charCodeAt(a.position))&&!aW(a.input.charCodeAt(a.position));)a.position++;return a.position===d&&aR(a,"name of an alias node must contain at least one character"),c=a.position,a.events.push({type:5,anchorStart:d,anchorEnd:c}),!0}(a,k)||function(a,b,c,d){if(!function(a,b){let c=a.input.charCodeAt(a.position),d=1===b;if(0===c||aU(c)||35===c||38===c||42===c||33===c||124===c||62===c||39===c||34===c||37===c||64===c||96===c||d&&aW(c))return!1;if(63===c||45===c){let b=a.input.charCodeAt(a.position+1);if(aV(b)||d&&aW(b))return!1}return!0}(a,c))return!1;let e=a.position,f=a.position,g=a.input.charCodeAt(a.position),h=1===c,i=!1;for(;0!==g&&!(a.position===a.lineStart&&aZ(a));){if(58===g){let b=a.input.charCodeAt(a.position+1);if(aV(b)||h&&aW(b))break}else if(35===g){if(aU(a.input.charCodeAt(a.position-1)))break}else if(h&&aW(g))break;else if(aS(g)){let c=a.position,d=a.line,e=a.lineStart,f=a.lineIndent;if(aY(a,!1),a.lineIndent>=b){i=!0,g=a.input.charCodeAt(a.position);continue}a.position=c,a.line=d,a.lineStart=e,a.lineIndent=f;break}aT(g)||(f=a.position+1),g=a.input.charCodeAt(++a.position)}return f!==e&&(a_(a,e,f),aL(a,e,f,d.anchorStart,d.anchorEnd,d.tagStart,d.tagEnd,1,1,-1,!i),!0)}(a,d,c,k))&&(i=!0)}else 0===g&&(i=m&&a2(a,e,k))}return l=l&&!i,!i&&(-1!==k.anchorStart||-1!==k.tagStart||l)&&(aL(a,-1,-1,k.anchorStart,k.anchorEnd,k.tagStart,k.tagEnd,1),i=!0),a.depth--,i||-1!==k.anchorStart||-1!==k.tagStart}var a5={...aH,...aq};function a6(a,b){let c=function(a,b={}){let c={...a5,...b},e=String(a),f=Object.keys(aH),g=Object.keys(aq);return function(a,b){let c={...aq,...b,events:a,documents:[],eventIndex:0,position:0,frames:[],anchors:new Map,nodeTags:new Map,tagHandlers:Object.create(null),totalMergeKeys:0,aliasCount:0};for(;c.eventIndex<c.events.length;){let a=c.events[c.eventIndex++];switch(c.position="tagStart"in a&&-1!==a.tagStart?a.tagStart:"anchorStart"in a&&-1!==a.anchorStart?a.anchorStart:"valueStart"in a&&-1!==a.valueStart?a.valueStart:"start"in a?a.start:0,a.type){case 1:for(let b of(c.anchors=new Map,c.nodeTags=new Map,c.aliasCount=0,c.tagHandlers=Object.create(null),a.directives))"tag"===b.kind&&(c.tagHandlers[b.handle]=b.prefix);c.frames.push({kind:"document",position:c.position,value:void 0,hasValue:!1});break;case 4:{let{value:b,tag:e}=function(a,b){let c=function(a,b){if(-1===b.valueStart)return"";let{valueStart:c,valueEnd:d}=b;if(b.fast)return a.slice(c,d);switch(b.style){case 2:return function(a,b,c){let d="",e=b,f=b,g=b;for(;e<c;){let b=a.charCodeAt(e);if(39===b)d+=a.slice(f,e)+"'",e+=2,f=g=e;else if(10===b||13===b){d+=a.slice(f,g);let b=al(a,e,c);d+=am(b.breaks),e=f=g=b.position}else e++,32!==b&&9!==b&&(g=e)}return d+a.slice(f,c)}(a,c,d);case 3:return function(a,b,c){let d="",e=b,f=b,g=b;for(;e<c;){let b=a.charCodeAt(e);if(92===b){d+=a.slice(f,e),e++;let b=a.charCodeAt(e);if(10===b||13===b)e=al(a,e,c).position;else if(b<256&&aj[b])d+=ak[b],e++;else{var h,i;let c=120===b?2:117===b?4:8,f=0;for(;c>0;c--)e++,f=(f<<4)+((h=a.charCodeAt(e))>=48&&h<=57?h-48:(32|h)-97+10);d+=(i=f)<=65535?String.fromCharCode(i):String.fromCharCode((i-65536>>10)+55296,(i-65536&1023)+56320),e++}f=g=e}else if(10===b||13===b){d+=a.slice(f,g);let b=al(a,e,c);d+=am(b.breaks),e=f=g=b.position}else e++,32!==b&&9!==b&&(g=e)}return d+a.slice(f,c)}(a,c,d);case 4:return an(a,c,d,b.indent,b.chomping,!1);case 5:return an(a,c,d,b.indent,b.chomping,!0);default:return function(a,b,c){let d="",e=b,f=b,g=b;for(;e<c;){let b=a.charCodeAt(e);if(10===b||13===b){d+=a.slice(f,g);let b=al(a,e,c);d+=am(b.breaks),e=f=g=b.position}else e++,32!==b&&9!==b&&(g=e)}return d+a.slice(f,g)}(a,c,d)}}(a.source,b),e=-1===b.tagStart?"":a.source.slice(b.tagStart,b.tagEnd),f=a.schema.defaultScalarTag;if(""!==e){if("!"===e)return{value:c,tag:f};let b=ap(e,a.tagHandlers),g=a.schema.lookupScalarTag(b);if(g){let e=g.resolve(c,!0,b);return e===d&&ar(a,`cannot resolve a node with !<${b}> explicit tag`),{value:e,tag:g}}let h=a.schema.lookupMappingTag(b)??a.schema.lookupSequenceTag(b);if(h){""!==c&&ar(a,`cannot resolve a node with !<${b}> explicit tag`);let d=h.create(b);return{value:h.carrierIsResult?d:as(a,a.position,h,d),tag:h}}ar(a,`unknown scalar tag !<${b}>`)}return 1===b.style?a.schema.resolveImplicitScalarTag(c):{value:f.resolve(c,!1,f.tagName),tag:f}}(c,a);ax(c,a,b,e,!0),aw(c,b,e);break}case 2:{let b=at(c,a,"tag:yaml.org,2002:seq"),d=c.schema.lookupSequenceTag(b);d||ar(c,`unknown sequence tag !<${b}>`);let e=d.create(b),f=ax(c,a,e,d,d.carrierIsResult);c.frames.push({kind:"sequence",position:c.position,value:e,tag:d,anchor:f,index:0});break}case 3:{let b=at(c,a,"tag:yaml.org,2002:map"),d=c.schema.lookupMappingTag(b);d||ar(c,`unknown mapping tag !<${b}>`);let e=d.create(b),f=ax(c,a,e,d,d.carrierIsResult);c.frames.push({kind:"mapping",position:c.position,value:e,tag:d,anchor:f,key:void 0,keyPosition:c.position,hasKey:!1,keyIsMerge:!1,overridable:null});break}case 5:{-1!==c.maxAliases&&++c.aliasCount>c.maxAliases&&ar(c,`aliases exceeded maxAliases (${c.maxAliases})`);let b=c.source.slice(a.anchorStart,a.anchorEnd),d=c.anchors.get(b);d||ar(c,`unidentified alias "${b}"`),d.isValueFinal||ar(c,`recursive alias "${b}" is not supported for tag ${d.tag.tagName} because it uses finalize()`),aw(c,d.value,d.tag);break}case 6:{let a=c.frames.pop();if("mapping"===a.kind&&a.hasKey&&(c.position=a.keyPosition,ar(c,"incomplete mapping pair in event stream")),"document"===a.kind)c.documents.push(a.value);else{let b=a.tag.carrierIsResult?a.value:as(c,a.position,a.tag,a.value);a.anchor&&(a.anchor.value=b,a.anchor.isValueFinal=!0),aw(c,b,a.tag)}}}}return c.documents}(function(a,b){let c=a.length,d={...aH,...b,input:`${a}\0`,length:c,position:0,line:0,lineStart:0,lineIndent:0,firstTabInLine:-1,depth:0,directives:[],tagHandlers:Object.create(null),events:[]},e=a.indexOf("\0");for(-1!==e&&ah.throwAt(a,e,"null byte is not allowed in input",d.filename),65279===d.input.charCodeAt(d.position)&&d.position++;d.position<d.length&&(aY(d,!0),!(d.position>=d.length));){let a=d.position;!function(a){var b;a.directives=[],a.tagHandlers=Object.create(null);let c=!1;for(aY(a,!0);function(a){if(a.lineIndent>0||37!==a.input.charCodeAt(a.position))return!1;a.position++;let b=a.position;for(;0!==a.input.charCodeAt(a.position)&&!aU(a.input.charCodeAt(a.position));)a.position++;let c=a.input.slice(b,a.position),d=[];for(0===c.length&&aR(a,"directive name must not be less than one character in length");0!==a.input.charCodeAt(a.position)&&!aS(a.input.charCodeAt(a.position));){for(;aT(a.input.charCodeAt(a.position));)a.position++;if(35===a.input.charCodeAt(a.position)||aS(a.input.charCodeAt(a.position))||0===a.input.charCodeAt(a.position))break;let b=a.position;for(;0!==a.input.charCodeAt(a.position)&&!aU(a.input.charCodeAt(a.position));)a.position++;d.push(a.input.slice(b,a.position))}if(aS(a.input.charCodeAt(a.position))&&aX(a),"YAML"===c){a.directives.some(a=>"yaml"===a.kind)&&aR(a,"duplication of %YAML directive"),1!==d.length&&aR(a,"YAML directive accepts exactly one argument");let b=/^([0-9]+)\.([0-9]+)$/.exec(d[0]);null===b&&aR(a,"ill-formed argument of the YAML directive"),1!==parseInt(b[1],10)&&aR(a,"unacceptable YAML version of the document"),a.directives.push({kind:"yaml",version:d[0]})}else if("TAG"===c){2!==d.length&&aR(a,"TAG directive accepts exactly two arguments");let[b,c]=d;aB.test(b)||aR(a,"ill-formed tag handle (first argument) of the TAG directive"),ay.call(a.tagHandlers,b)&&aR(a,`there is a previously declared suffix for "${b}" tag handle`),aG.test(c)||aR(a,"ill-formed tag prefix (second argument) of the TAG directive"),a.tagHandlers[b]=c,a.directives.push({kind:"tag",handle:b,prefix:c})}return!0}(a);)c=!0,aY(a,!0);let d=!1,e=!1,f=!0;if(0===a.lineIndent&&45===a.input.charCodeAt(a.position)&&45===a.input.charCodeAt(a.position+1)&&45===a.input.charCodeAt(a.position+2)&&aV(a.input.charCodeAt(a.position+3))){d=!0;let b=a.line;a.position+=3,aY(a,!0),f=a.line>b}else c&&aR(a,"directives end mark is expected");let g=a.events.length;if(!d&&a.position===a.lineStart&&46===a.input.charCodeAt(a.position)&&aZ(a)){a.position+=3,aY(a,!0);return}if(b=d,a.events.push({type:1,explicitStart:b,explicitEnd:!1,directives:a.directives}),a4(a,a.lineIndent-1,4,!1,f,f)||aN(a),aY(a,!0),a.position===a.lineStart&&aZ(a)&&(e=46===a.input.charCodeAt(a.position))){let b=a.line;a.position+=3,aY(a,!0),a.line===b&&a.position<a.length&&aR(a,"end of the stream or a document separator is expected")}let h=a.events[g];h?.type===1&&(h.explicitEnd=e),aM(a),e||!(a.position<a.length)||a.position===a.lineStart&&aZ(a)||aR(a,"end of the stream or a document separator is expected")}(d),d.position===a&&aR(d,"can not read a document")}return d.events}(e,W(c,f)),{...W(c,g),source:e})}(a,b);if(0===c.length)throw new ah("expected a document, but the input is empty");if(1===c.length)return c[0];throw new ah("expected a single document in the stream, but found more")}Symbol("INVALID"),Symbol("visit:break"),Symbol("visit:skip");var a7={};a7[0]="\\0",a7[7]="\\a",a7[8]="\\b",a7[9]="\\t",a7[10]="\\n",a7[11]="\\v",a7[12]="\\f",a7[13]="\\r",a7[27]="\\e",a7[34]='\\"',a7[92]="\\\\",a7[133]="\\N",a7[160]="\\_",a7[8232]="\\L",a7[8233]="\\P"},83739:(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(15011);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)}},84851:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{s:()=>t});var e=c(75430),f=c(8084),g=c(41035),h=c(35015),i=c(16983),j=c(15253),k=c(5564),l=c(70274),m=c(55950),n=c(88002),o=c(77598),p=a([e,f,g,j,k,l]);[e,f,g,j,k,l]=p.then?(await p)():p;let u=new Set(["off","minimal","low","medium","high","xhigh","max"]);function q(){return globalThis.__piSubagentRuns||(globalThis.__piSubagentRuns=new Map),globalThis.__piSubagentRuns}function r(){return globalThis.__piSubagentQueue||(globalThis.__piSubagentQueue=new m.V),globalThis.__piSubagentQueue}async function s(a,b){if(b)try{await (0,n.IL)(a,b.path);return}catch(a){return`Worktree retained at ${b.path}: ${a instanceof Error?a.message:String(a)}`}}function t(a){async function b(b){let d;if(!(a.isBuiltInSubagentsEnabled??l.N)())throw Error("Pi Web built-in sub-agents are disabled");let e=b.parentContext.sessionManager.getSessionId(),f=await c(b.sessionId);if(!f)throw Error(`Subagent not found: ${b.sessionId}`);if(f.parentSessionId!==e)throw Error("Subagent does not belong to this parent session");if("running"===f.status||"queued"===f.status)throw Error("Subagent is already running");let h=a.getSession(e);if(!h?.isAlive())throw Error("Parent session is no longer available");let i=f.sessionPath||await a.resolveSessionPath(b.sessionId);if(!i)throw Error(`Subagent session file not found: ${b.sessionId}`);let j=a.getSession(b.sessionId);if(j?.isAlive()||(j=await a.reopenSession(b.sessionId,i)),!j.isAlive())throw Error("Subagent session is no longer available");if(j.isRunning())throw Error("Subagent is already running");let k=b.runInBackground??f.runInBackground,m={...f,parentToolCallId:b.parentToolCallId,task:b.task,description:b.description.trim()||f.description,runInBackground:k,status:"queued",completedAt:void 0,result:void 0,error:void 0},n=j.inner.sessionManager,o=new Promise(a=>{d=a}),p={run:m,completion:o,abortRequested:!1};q().set(b.sessionId,p),b.onUpdate?.(m),a.invalidateSessionList();let s=()=>{p.abortRequested=!0,"queued"===p.run.status?p.cancelQueued?.():j.inner.abort()};k||b.signal?.addEventListener("abort",s,{once:!0});let t=async()=>{let c;if(p.abortRequested){let a={...m,status:"aborted",completedAt:new Date().toISOString()};return n.appendCustomEntry(g.pv,{version:1,status:"aborted",completedAt:a.completedAt}),p.run=a,q().delete(b.sessionId),d(a),a}p.run={...p.run,status:"running"},n.appendCustomEntry(g.o2,{version:1,status:"running"}),b.onUpdate?.(p.run);try{await j.inner.prompt(b.task,{source:"rpc"});let a=j.inner.getLastAssistantText()?.trim();c={...m,status:p.abortRequested?"aborted":"completed",completedAt:new Date().toISOString(),...a?{result:a}:{}}}catch(a){c={...m,status:p.abortRequested||b.signal?.aborted?"aborted":"failed",completedAt:new Date().toISOString(),...!p.abortRequested&&!b.signal?.aborted?{error:a instanceof Error?a.message:String(a)}:{}}}finally{b.signal?.removeEventListener("abort",s)}return n.appendCustomEntry(g.pv,{version:1,status:c.status,completedAt:c.completedAt,...c.result?{result:c.result}:{},...c.error?{error:c.error}:{}}),p.run=c,b.onUpdate?.(c),q().delete(b.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),c},u=r().enqueue(e,(0,l.hd)().maxConcurrent,t,c=>{"queued"===c&&n.appendCustomEntry(g.o2,{version:1,status:"queued"}),p.run={...p.run,status:c},b.onUpdate?.(p.run),a.invalidateSessionList()},()=>{if("queued"!==p.run.status)return;let c={...m,status:"aborted",completedAt:new Date().toISOString()};n.appendCustomEntry(g.pv,{version:1,status:"aborted",completedAt:c.completedAt}),p.run=c,b.onUpdate?.(c),q().delete(b.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),d(c)});return p.cancelQueued=u.cancel,u.promise.then(d,a=>d({...m,status:"failed",completedAt:new Date().toISOString(),error:a instanceof Error?a.message:String(a)})),{run:p.run,completion:o}}async function c(b){let c=q().get(b);if(c)return c.run;let d=a.getSession(b);if(d?.isAlive()){let a=(0,g.$u)(d.inner.sessionManager.getEntries(),b,d.sessionFile);if(a&&d.isRunning())return{...a,status:"running"};if(a)return a}let f=await a.resolveSessionPath(b);if(!f)return null;let h=e.SessionManager.open(f);return(0,g.$u)(h.getEntries(),b,f)}async function d(b,c){let d=a.getSession(b);if(!d?.isAlive()||!d.isRunning())throw Error("Subagent is not running");if(!c.trim())throw Error("Steering message is required");await d.inner.steer(c.trim())}async function m(b){let c=a.getSession(b.parentSessionId);if(!c?.isAlive()){let d=await a.resolveSessionPath(b.parentSessionId);if(!d)throw Error(`Parent session not found: ${b.parentSessionId}`);c=await a.reopenSession(b.parentSessionId,d)}if(await c.waitUntilReady(),!c.isAlive())throw Error(`Parent session is no longer available: ${b.parentSessionId}`);await c.inner.sendCustomMessage({customType:"pi-web:subagent-notification",content:(0,f.J8)(b),display:!0,details:(0,f.o2)(b)},{deliverAs:"followUp",triggerTurn:!0})}async function p(b){let c=a.getSession(b),d=q().get(b);if(d?.run.status==="queued"){if(d.abortRequested=!0,!d.cancelQueued?.())throw Error("Subagent is no longer queued");return}if(!c?.isAlive()||!c.isRunning())throw Error("Subagent is not running");d&&(d.abortRequested=!0),await c.inner.abort()}return{extensionRuntime:{start:async function(b){let c;if(!(a.isBuiltInSubagentsEnabled??l.N)())throw Error("Pi Web built-in sub-agents are disabled");let d=b.parentContext.sessionManager.getSessionId(),f=a.getSession(d);if(!f?.isAlive())throw Error("Parent session is no longer available");if(!f.sessionFile)throw Error("Parent session must be persisted before starting a subagent");try{let m,p,t,v=(0,g.rh)(f.cwd,b.profile);if(!v)throw Error(`Unknown or disabled subagent profile: ${b.profile}`);let w=b.runInBackground??v.runInBackground,x="off"===v.isolation?void 0:b.isolation??v.isolation;"worktree"===x&&(c=await (0,n.l)(f.cwd,`pi-web-agent-${(0,o.randomUUID)()}`));let y=c?.path??f.cwd,z=b.inheritContext??v.inheritContext,A=b.maxTurns??v.maxTurns;if(void 0!==A&&(!Number.isFinite(A)||A<0))throw Error("max_turns must be a non-negative number");let B=A&&A>0?Math.floor(A):void 0,C=b.thinking??v.thinking??f.inner.agent.state?.thinkingLevel;if(C&&!u.has(C))throw Error(`Invalid subagent thinking level: ${C}`);let D=(0,e.getAgentDir)(),E=f.inner.modelRuntime,F=e.SettingsManager.create(y,D),G=z?`The following is the active conversation context from the parent session. Use it only as background for the delegated task:
|
|
40
|
-
${
|
|
41
|
-
[Parent context truncated]`}`:void 0,H=(0,i.vH)(f.cwd,b.inputFiles??[]),I=(0,h.r)({profileSystemPrompt:v.systemPrompt,tools:v.tools,loadSkills:v.loadSkills,loadExtensions:v.loadExtensions,promptMode:v.promptMode,task:(0,i.jN)(b.task,H),inheritedParentContext:G}),{chatOnly:J,appendSystemPrompt:K,delegatedTask:L}=I;J||(0,e.initTheme)();let M=await (0,e.createAgentSessionServices)({cwd:y,agentDir:D,modelRuntime:E,settingsManager:F,resourceLoaderOptions:{noExtensions:!v.loadExtensions,noSkills:!v.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...J||void 0!==I.exactSystemPrompt?{systemPrompt:" ",systemPromptOverride:()=>void 0}:{},appendSystemPrompt:K},...v.loadExtensions||v.loadSkills?{resourceLoaderReloadOptions:(0,j.Fk)(y,D)}:{}}),N=v.loadExtensions?v.extensionTools?.length?(0,g.gY)(M.resourceLoader.getExtensions().extensions,v.extensionTools):M.resourceLoader.getExtensions().extensions.flatMap(a=>[...a.tools.keys()]):[],O=(0,k.wQ)((0,g.I6)(v.tools,N),F.getDefaultTools()),P=c?e.SessionManager.create(y,void 0,{parentSession:f.sessionFile}):e.SessionManager.create(f.cwd,void 0,{parentSession:f.sessionFile}),Q=new Date().toISOString(),R={version:1,parentSessionId:d,parentSessionPath:f.sessionFile,parentToolCallId:b.parentToolCallId,profile:v.name,description:b.description.trim()||v.displayName,task:b.task,runInBackground:w,createdAt:Q,resourceSnapshot:{version:1,appendSystemPrompt:[...K],tools:[...O],loadSkills:v.loadSkills,loadExtensions:v.loadExtensions,...void 0!==I.exactSystemPrompt?{exactSystemPrompt:I.exactSystemPrompt}:{}},...c?{worktreePath:c.path,worktreeBranch:c.branch}:{}};P.appendCustomEntry(g.tP,R),P.appendSessionInfo(R.description);let S=function(a,b){if(!b?.trim())return;let c=b.trim(),d=c.indexOf("/");if(d>0){let b=c.slice(0,d),e=c.slice(d+1),f=a.getModel(b,e);if(!f)throw Error(`Subagent model not found: ${c}`);return f}let e=a.getModels().filter(a=>a.id===c);if(1===e.length)return e[0];if(0===e.length)throw Error(`Subagent model not found: ${c}`);throw Error(`Subagent model is ambiguous; use provider/modelId: ${c}`)}(E,b.model??v.model),T=f.inner.model,{session:U}=await (0,e.createAgentSessionFromServices)({services:M,sessionManager:P,model:S??T,...C?{thinkingLevel:C}:{},tools:O,excludeTools:[...g.st]});a.registerSession(U,{...void 0!==I.exactSystemPrompt?{exactSystemPrompt:I.exactSystemPrompt}:{},chatOnly:J});let V={sessionId:U.sessionId,sessionPath:U.sessionFile??P.getSessionFile()??"",parentSessionId:d,parentToolCallId:b.parentToolCallId,profile:v.name,description:R.description,task:b.task,runInBackground:w,status:"queued",createdAt:Q,...c?{worktreePath:c.path,worktreeBranch:c.branch}:{}},W=0,X=!1,Y=!1,Z=B?U.subscribe(a=>{"turn_end"===a.type&&(W+=1,!Y&&W>=B?(Y=!0,U.steer("You have reached your turn limit. Wrap up immediately and provide your final answer now.")):Y&&W>=B+1&&(X=!0,U.abort()))}):()=>{},$=new Promise(a=>{m=a}),_={run:V,completion:$,abortRequested:!1};q().set(V.sessionId,_),b.onUpdate?.(V),a.invalidateSessionList();let aa=()=>{_.abortRequested=!0,"queued"===_.run.status?_.cancelQueued?.():U.abort()};w||b.signal?.addEventListener("abort",aa,{once:!0});let ab=async()=>{let d;if(_.abortRequested){let d={...V,status:"aborted",completedAt:new Date().toISOString()};return P.appendCustomEntry(g.pv,{version:1,status:"aborted",completedAt:d.completedAt}),await s(f.cwd,c),_.run=d,b.onUpdate?.(d),q().delete(V.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),d}_.run={..._.run,status:"running"},P.appendCustomEntry(g.o2,{version:1,status:"running"}),b.onUpdate?.(_.run),a.invalidateSessionList();try{await U.prompt(L,{source:"rpc",...J?{preflightResult:a=>{a&&U.agent.state&&(U.agent.state.systemPrompt=v.systemPrompt)}}:{}});let a=U.getLastAssistantText()?.trim(),b=_.abortRequested&&!X;d={...V,status:b?"aborted":"completed",completedAt:new Date().toISOString(),...a?{result:a}:{}}}catch(e){let a=U.getLastAssistantText()?.trim(),c=_.abortRequested||b.signal?.aborted;d={...V,status:c?"aborted":X?"completed":"failed",completedAt:new Date().toISOString(),...a?{result:a}:{},...!c&&!X?{error:e instanceof Error?e.message:String(e)}:{}}}finally{Z(),b.signal?.removeEventListener("abort",aa)}let e=await s(f.cwd,c);e&&(d={...d,worktreeCleanupError:e});let h={version:1,status:d.status,completedAt:d.completedAt,...d.result?{result:d.result}:{},...d.error?{error:d.error}:{},...d.worktreeCleanupError?{worktreeCleanupError:d.worktreeCleanupError}:{}};return P.appendCustomEntry(g.pv,h),_.run=d,b.onUpdate?.(d),q().delete(V.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),d},ac=async()=>{if("queued"!==_.run.status)return;let d={...V,status:"aborted",completedAt:new Date().toISOString()},e=await s(f.cwd,c),h=e?{...d,worktreeCleanupError:e}:d;P.appendCustomEntry(g.pv,{version:1,status:"aborted",completedAt:h.completedAt,...e?{worktreeCleanupError:e}:{}}),_.run=h,b.onUpdate?.(h),q().delete(V.sessionId),a.invalidateSessionList(),a.notifyRunningChange?.(),m(h)},ad=r().enqueue(d,(0,l.hd)().maxConcurrent,ab,c=>{"queued"===c&&P.appendCustomEntry(g.o2,{version:1,status:"queued"}),b.onUpdate?.({..._.run,status:c}),_.run={..._.run,status:c},a.invalidateSessionList()},ac);return _.cancelQueued=ad.cancel,ad.promise.then(m,a=>{m({...V,status:"failed",completedAt:new Date().toISOString(),error:a instanceof Error?a.message:String(a)})}),{run:_.run,completion:_.completion}}catch(a){if(c)try{await (0,n.IL)(f.cwd,c.path)}catch{}throw a}},resume:b,get:c,steer:d,notifyParent:m},get:c,steer:d,abort:p}}d()}catch(a){d(a)}})},85895:(a,b,c)=>{"use strict";c.d(b,{JJ:()=>g});var d=c(76760),e=c(73024);function f(a){let b={};if(!a||"object"!=typeof a||Array.isArray(a))return b;for(let[c,d]of Object.entries(a)){if(!c||!d||"object"!=typeof d||Array.isArray(d))continue;let a=d.archivedAt;b[c]={archivedAt:"string"==typeof a?a:""}}return b}function g(a){var b=(0,d.join)(a,"session-archive.json");if(!(0,e.existsSync)(b))return f(void 0);try{return f(JSON.parse((0,e.readFileSync)(b,"utf8")))}catch{return f(void 0)}}c(61446),c(12969)},88002:(a,b,c)=>{"use strict";c.d(b,{l:()=>s,P9:()=>r,IL:()=>t,KI:()=>p});var d=c(79646),e=c(29021),f=c(33873),g=c(28354),h=c(15011);function i(){return globalThis.__piAdditionalAllowedRoots||(globalThis.__piAdditionalAllowedRoots=new Set),globalThis.__piAdditionalAllowedRoots}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,i,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,i].map(h.gB),p=o(a),q=(0,h.Eb)(m,p),r=!(0,h.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,h.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,h.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}async function s(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),j=`${(0,f.resolve)(g)}-worktrees`,k=(0,f.join)(j,d);if((0,e.existsSync)(k))throw Error(`Directory already exists: ${k}`);(0,e.mkdirSync)(j,{recursive:!0});let l=!1;try{await n(g,["rev-parse","--verify","--quiet",`refs/heads/${c}`]),l=!0}catch{l=!1}try{l?await n(g,["worktree","add","--",k,c]):await n(g,["worktree","add","-b",c,"--",k])}catch(a){throw Error(u(a))}return!function(a){if(!a)return;let b=(0,h.W3)(a);i().add(b),globalThis.__piAllowedRootsCache?.roots.add(b)}(k),m(),{path:k,branch:c}}async function t(a,b,c=!1){var d;let e=(d=await r(a),d.find(a=>(0,h.Eb)(a.path,b)));if(!e)throw Error(`Not a worktree of this repository: ${b}`);if(e.isMain)throw Error("Cannot remove the main worktree");try{await n(a,["worktree","remove",...c?["--force"]:[],e.path])}catch(a){throw Error(u(a))}!function(a){if(!a)return;let b=(0,h.W3)(a);i().delete(b),globalThis.__piAllowedRootsCache=void 0}(b),m()}function u(a){let b=a.stderr;return"string"==typeof b&&b.trim()?b.trim():a instanceof Error?a.message:String(a)}},88449:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{q8:()=>r});var e=c(73024),f=c(51455),g=c(76760),h=c(80481),i=c(75430),j=c(12969),k=a([i]);function l(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}async function m(a){try{let b,c,d=await (0,f.stat)(a),g=null,i=0,j="";for await(let d of(0,h.createInterface)({input:(0,e.createReadStream)(a,{encoding:"utf8"}),crlfDelay:1/0})){let a=function(a){if(!a.trim())return null;try{let b=JSON.parse(a);return b&&"object"==typeof b?b:null}catch{return null}}(d);if(!a)continue;if(!g){if("session"!==a.type)return null;g=a;continue}if("session_info"===a.type&&(b="string"==typeof a.name&&a.name.trim()?a.name.trim():void 0),"message"!==a.type)continue;i++;let e=function(a){let b=a.message;if(!b||"string"!=typeof b.role||!("content"in b)||"user"!==b.role&&"assistant"!==b.role)return;if("number"==typeof b.timestamp)return b.timestamp;let c=new Date(a.timestamp).getTime();return Number.isNaN(c)?void 0:c}(a);"number"==typeof e&&(c=Math.max(c??0,e));let f=a.message;if(!f||"string"!=typeof f.role||!("content"in f)||"user"!==f.role&&"assistant"!==f.role)continue;let h=function(a){let b=a.content;return"string"==typeof b?b:Array.isArray(b)?b.filter(a=>!!a&&"object"==typeof a&&"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join(" "):""}(f);h&&(j||"user"!==f.role||(j=h))}if(!g)return null;let k="string"==typeof g.cwd?g.cwd:"",l="string"==typeof g.parentSession?g.parentSession:void 0,m="string"==typeof g.timestamp?new Date(g.timestamp).getTime():NaN,n="number"==typeof c&&c>0?new Date(c):Number.isNaN(m)?d.mtime:new Date(m);return{path:a,id:g.id,cwd:k,name:b,parentSessionPath:l,created:new Date(g.timestamp),modified:n,messageCount:i,firstMessage:j||"(no messages)"}}catch{return null}}async function n(a){let b;try{b=(await (0,f.readdir)(a,{withFileTypes:!0})).filter(a=>a.isDirectory()||a.isSymbolicLink())}catch{return[]}let c=[];for(let d of b){let b=(0,g.join)(a,d.name);try{for(let a of(await (0,f.readdir)(b)))a.endsWith(".jsonl")&&c.push((0,g.join)(b,a))}catch{}}return c}async function o(a,b){let c=0,d=new Set;for(;c<a.length||d.size>0;){for(;c<a.length&&d.size<10;){let e=a[c++],f=b(e).finally(()=>d.delete(f));d.add(f)}d.size>0&&await Promise.race(d)}}function p(){return globalThis.__piWebScanIndex||(globalThis.__piWebScanIndex=new Map),globalThis.__piWebScanIndex}function q(){return(0,g.join)((0,i.getAgentDir)(),"pi-web-session-index.json")}async function r(){!function(){if(globalThis.__piWebScanIndexLoaded)return;globalThis.__piWebScanIndexLoaded=!0;let a=q();if((0,e.existsSync)(a))try{let b=JSON.parse((0,e.readFileSync)(a,"utf8"));if(!l(b)||1!==b.version||!l(b.entries))return;let c=p();for(let[a,d]of Object.entries(b.entries)){if(!l(d)||!l(d.fp)||!l(d.info))continue;let{fp:b,info:e}=d;if("number"!=typeof b.size||!Number.isSafeInteger(b.size)||b.size<0||"number"!=typeof b.mtimeMs||!Number.isFinite(b.mtimeMs)||e.path!==a||"string"!=typeof e.id||"string"!=typeof e.cwd||"string"!=typeof e.firstMessage||void 0!==e.name&&"string"!=typeof e.name||void 0!==e.parentSessionPath&&"string"!=typeof e.parentSessionPath||"number"!=typeof e.messageCount||!Number.isSafeInteger(e.messageCount)||e.messageCount<0||"string"!=typeof e.created||"string"!=typeof e.modified)continue;let f=new Date(e.created),g=new Date(e.modified);Number.isFinite(f.getTime())&&Number.isFinite(g.getTime())&&c.set(a,{fp:{size:b.size,mtimeMs:b.mtimeMs},info:{path:a,id:e.id,cwd:e.cwd,name:e.name,parentSessionPath:e.parentSessionPath,firstMessage:e.firstMessage,messageCount:e.messageCount,created:f,modified:g}})}}catch{}}();let a=(0,g.join)((0,i.getAgentDir)(),"sessions"),b=await n(a),c=p(),d=new Set(b),h=[];for(let a of c.keys())d.has(a)||h.push(a);for(let a of h)c.delete(a);let k=await Promise.all(b.map(async a=>{try{let b=await (0,f.stat)(a);return{filePath:a,fp:{size:b.size,mtimeMs:b.mtimeMs}}}catch{return{filePath:a,fp:null}}})),r=[],s=Array(b.length).fill(null);for(let[a,{filePath:b,fp:d}]of k.entries()){if(!d){c.delete(b);continue}let e=c.get(b);if(e&&e.fp.size===d.size&&e.fp.mtimeMs===d.mtimeMs){s[a]=e.info;continue}r.push({filePath:b,fp:d,resultIndex:a})}return await o(r,async({filePath:a,fp:b,resultIndex:d})=>{let e=await m(a);e?(c.set(a,{fp:b,info:e}),s[d]=e):c.delete(a)}),(r.length>0||h.length>0)&&(globalThis.__piWebScanIndexSaveQueued||(globalThis.__piWebScanIndexSaveQueued=!0,queueMicrotask(()=>{globalThis.__piWebScanIndexSaveQueued=void 0;try{let a={};for(let[b,c]of p())a[b]=c;(0,j.$)(q(),JSON.stringify({version:1,entries:a}))}catch{}}))),s.filter(a=>null!==a).sort((a,b)=>b.modified.getTime()-a.modified.getTime())}i=(k.then?(await k)():k)[0],d()}catch(a){d(a)}})},91099:(a,b,c)=>{"use strict";c.d(b,{LF:()=>e,aA:()=>j,bo:()=>g,eG:()=>i});var d=c(29021);let e=`Continue pursuing the active goal. Do the next useful work, then report your disposition:
|
|
39
|
+
`}return h.replace(/\n$/,"")}(h),new a(d,h)}};function ai(a){switch(a){case 48:return"\0";case 97:return"\x07";case 98:return"\b";case 116:case 9:return" ";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 101:return"\x1b";case 32:return" ";case 34:return'"';case 47:return"/";case 92:return"\\";case 78:return"\x85";case 95:return"\xa0";case 76:return"\u2028";case 80:return"\u2029";default:return""}}var aj=Array(256),ak=Array(256);for(let a=0;a<256;a++)aj[a]=+!!ai(a),ak[a]=ai(a);function al(a,b,c){let d=0;for(;b<c;){let c=a.charCodeAt(b);if(10===c)d++,b++;else if(13===c)d++,b++,10===a.charCodeAt(b)&&b++;else if(32===c||9===c)b++;else break}return{position:b,breaks:d}}function am(a){return 1===a?" ":"\n".repeat(a-1)}function an(a,b,c,d,e,f){let g=d<0?0:d,h=a.slice(b,c).replace(/\r\n?/g,"\n"),i=""===h?[]:(h.endsWith("\n")?h.slice(0,-1):h).split("\n"),j="",k=!1,l=0,m=!1;for(let a of i){let b=0;for(;b<g&&32===a.charCodeAt(b);)b++;if(d<0||b>=a.length){l++;continue}let c=a.slice(g),e=c.charCodeAt(0);f?32===e||9===e?(m=!0,j+="\n".repeat(k?1+l:l)):m?(m=!1,j+="\n".repeat(l+1)):0===l?k&&(j+=" "):j+="\n".repeat(l):j+="\n".repeat(k?1+l:l),j+=c,k=!0,l=0}return 3===e?j+="\n".repeat(k?1+l:l):2!==e&&k&&(j+="\n"),j}var ao=Object.assign(Object.create(null),{"!":"!","!!":"tag:yaml.org,2002:"});function ap(a,b){if(a.startsWith("!<")&&a.endsWith(">"))return decodeURIComponent(a.slice(2,-1));let c=a.indexOf("!",1),d=-1===c?"!":a.slice(0,c+1);return decodeURIComponent(b?.[d]??ao[d]??d)+decodeURIComponent(a.slice(d.length))}var aq={filename:"",schema:ab,json:!1,maxTotalMergeKeys:1e4,maxAliases:-1};function ar(a,b){ah.throwAt(a.source,a.position,b,a.filename)}function as(a,b,c,d){try{return c.finalize(d)}catch(c){if(c instanceof ah)throw c;ah.throwAt(a.source,b,c instanceof Error?c.message:String(c),a.filename)}}function at(a,b,c){let d=-1===b.tagStart?"":a.source.slice(b.tagStart,b.tagEnd);return""===d||"!"===d?c:ap(d,a.tagHandlers)}function au(a){return"mapping"===a.nodeKind}function av(a,b,c,d){for(let e of d.keys(c)){if(-1!==a.maxTotalMergeKeys&&++a.totalMergeKeys>a.maxTotalMergeKeys&&ar(a,`merge keys exceeded maxTotalMergeKeys (${a.maxTotalMergeKeys})`),b.tag.has(b.value,e))continue;let f=b.tag.addPair(b.value,e,d.get(c,e));f&&ar(a,f),(b.overridable??=new Set).add(e)}}function aw(a,b,c){let d=a.frames[a.frames.length-1];if("document"===d.kind)d.value=b,d.hasValue=!0;else if("sequence"===d.kind){au(c)&&a.nodeTags.set(b,c);let e=d.tag.addItem(d.value,b,d.index++);e&&ar(a,e)}else if(d.hasKey){let e=d.key;d.key=void 0,d.hasKey=!1,function(a,b,c,d,e){if(a.position=b.keyPosition,b.keyIsMerge){var f=a,g=b,h=d,i=e;if(f.position=g.keyPosition,au(i))av(f,g,h,i);else if("sequence"===i.nodeKind&&Array.isArray(h))for(let a of h){let b=f.nodeTags.get(a);b||ar(f,"cannot merge mappings; the provided source object is unacceptable"),av(f,g,a,b)}else ar(f,"cannot merge mappings; the provided source object is unacceptable");return}!a.json&&b.tag.has(b.value,c)&&!b.overridable?.has(c)&&ar(a,"duplicated mapping key");let j=b.tag.addPair(b.value,c,d);j&&ar(a,j),b.overridable?.delete(c)}(a,d,e,b,c)}else d.key=b,d.keyPosition=a.position,d.hasKey=!0,d.keyIsMerge="tag:yaml.org,2002:merge"===c.tagName}function ax(a,b,c,d,e){if(-1!==b.anchorStart){let f={value:c,tag:d,isValueFinal:e};return a.anchors.set(a.source.slice(b.anchorStart,b.anchorEnd),f),f}return null}var ay=Object.prototype.hasOwnProperty,az=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,aA=/[,\[\]{}]/,aB=/^(?:!|!!|![0-9A-Za-z-]+!)$/,aC=String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]])`,aD=String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$.~*'()_])`,aE=RegExp(`^(?:${aC})*$`),aF=RegExp(`^(?:${aD})+$`),aG=RegExp(`^(?:!(?:${aC})*|${aD}(?:${aC})*)$`),aH={filename:"",maxDepth:100};function aI(a,b,c,d,e,f,g){a.events.push({type:2,start:b,anchorStart:c,anchorEnd:d,tagStart:e,tagEnd:f,style:g})}function aJ(a,b,c,d,e,f,g){a.events.push({type:3,start:b,anchorStart:c,anchorEnd:d,tagStart:e,tagEnd:f,style:g})}function aK(a,b){a.events.splice(b.eventsLength,0,{type:3,start:b.position,anchorStart:-1,anchorEnd:-1,tagStart:-1,tagEnd:-1,style:2})}function aL(a,b,c,d,e,f,g,h,i=1,j=-1,k=!1){a.events.push({type:4,valueStart:b,valueEnd:c,anchorStart:d,anchorEnd:e,tagStart:f,tagEnd:g,style:h,chomping:i,indent:j,fast:k})}function aM(a){a.events.push({type:6})}function aN(a){aL(a,-1,-1,-1,-1,-1,-1,1)}function aO(){return{anchorStart:-1,anchorEnd:-1,tagStart:-1,tagEnd:-1}}function aP(a){return{position:a.position,line:a.line,lineStart:a.lineStart,lineIndent:a.lineIndent,firstTabInLine:a.firstTabInLine,eventsLength:a.events.length}}function aQ(a,b){a.position=b.position,a.line=b.line,a.lineStart=b.lineStart,a.lineIndent=b.lineIndent,a.firstTabInLine=b.firstTabInLine,a.events.length=b.eventsLength}function aR(a,b){ah.throwAt(a.input.slice(0,a.length),a.position,b,a.filename)}function aS(a){return 10===a||13===a}function aT(a){return 9===a||32===a}function aU(a){return aT(a)||aS(a)}function aV(a){return 0===a||aU(a)}function aW(a){return 44===a||91===a||93===a||123===a||125===a}function aX(a){10===a.input.charCodeAt(a.position)?a.position++:(a.position++,10===a.input.charCodeAt(a.position)&&a.position++),a.line++,a.lineStart=a.position,a.lineIndent=0,a.firstTabInLine=-1}function aY(a,b){let c=0,d=a.input.charCodeAt(a.position),e=a.position===a.lineStart||aU(a.input.charCodeAt(a.position-1));for(;0!==d;){for(;aT(d);)e=!0,9===d&&-1===a.firstTabInLine&&(a.firstTabInLine=a.position),d=a.input.charCodeAt(++a.position);if(b&&e&&35===d)do d=a.input.charCodeAt(++a.position);while(!aS(d)&&0!==d);if(!aS(d))break;for(aX(a),c++,e=!0,d=a.input.charCodeAt(a.position);32===d;)a.lineIndent++,d=a.input.charCodeAt(++a.position)}return c}function aZ(a,b=a.position){let c=a.input.charCodeAt(b);if((45===c||46===c)&&c===a.input.charCodeAt(b+1)&&c===a.input.charCodeAt(b+2)){let c=a.input.charCodeAt(b+3);return 0===c||aU(c)}return!1}function a$(a){let b=a.input.charCodeAt(a.position);for(;0!==b&&!aS(b);)b=a.input.charCodeAt(++a.position)}function a_(a,b,c){az.test(a.input.slice(b,c))&&aR(a,"the stream contains non-printable characters")}function a0(a,b){aY(a,!1),a.lineIndent<b&&aR(a,"deficient indentation")}function a1(a,b){let c=a.line;aY(a,!0),(a.line>c&&a.lineIndent<b||-1!==a.firstTabInLine&&a.lineIndent<b)&&aR(a,"deficient indentation")}function a2(a,b,c){if(-1!==a.firstTabInLine||45!==a.input.charCodeAt(a.position)||!aV(a.input.charCodeAt(a.position+1)))return!1;for(aI(a,a.position,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,1);45===a.input.charCodeAt(a.position)&&aV(a.input.charCodeAt(a.position+1));){-1!==a.firstTabInLine&&(a.position=a.firstTabInLine,aR(a,"tab characters must not be used in indentation"));let c=a.line;a.position++;let d=aY(a,!0)>0;if(-1!==a.firstTabInLine&&45===a.input.charCodeAt(a.position)&&aV(a.input.charCodeAt(a.position+1))&&aR(a,"bad indentation of a sequence entry"),d&&a.lineIndent<=b?aN(a):a4(a,b,3,!1,!0),aY(a,!0),a.lineIndent<b||a.position>=a.length)break;a.lineIndent>b&&aR(a,"bad indentation of a sequence entry"),a.line===c&&45===a.input.charCodeAt(a.position)&&aV(a.input.charCodeAt(a.position+1))&&aR(a,"bad indentation of a sequence entry")}return aM(a),!0}function a3(a,b,c,d){let e=!1,f=!1,g=!1,h=!1;if(-1!==a.firstTabInLine)return!1;let i=a.input.charCodeAt(a.position);for(;0!==i;){e||-1===a.firstTabInLine||(a.position=a.firstTabInLine,aR(a,"tab characters must not be used in indentation"));let j=a.input.charCodeAt(a.position+1),k=a.line;if((63===i||58===i)&&aV(j))g||(aJ(a,a.position,d.anchorStart,d.anchorEnd,d.tagStart,d.tagEnd,1),g=!0),63===i?(e&&aN(a),f=!0,e=!0):(e||(aN(a),f=!0),e=!1),a.position+=1,h=!0;else{e&&(aN(a),e=!1);let b=aP(a);if(!a4(a,c,2,!1,!0))break;if(a.line===k){for(i=a.input.charCodeAt(a.position);aT(i);)i=a.input.charCodeAt(++a.position);if(58===i){if(aV(i=a.input.charCodeAt(++a.position))||aR(a,"a whitespace character is expected after the key-value separator within a block mapping"),!g){for(aQ(a,b),aJ(a,b.position,d.anchorStart,d.anchorEnd,d.tagStart,d.tagEnd,1),g=!0,a4(a,c,2,!1,!0),i=a.input.charCodeAt(a.position);aT(i);)i=a.input.charCodeAt(++a.position);a.position++}f=!0,e=!1,h=!1}else if(f)aR(a,"expected ':' after a mapping key");else{if(-1!==d.anchorStart||-1!==d.tagStart)return aQ(a,b),!1;return!0}}else if(f)aR(a,"can not read a block mapping entry; a multiline key may not be an implicit key");else{if(-1!==d.anchorStart||-1!==d.tagStart)return aQ(a,b),!1;return!0}}if(a4(a,b,4,!0,h)&&(h=!1),!e&&h&&(aN(a),h=!1),aY(a,!0),i=a.input.charCodeAt(a.position),(a.line===k||a.lineIndent>b)&&0!==i)aR(a,"bad indentation of a mapping entry");else if(a.lineIndent<b)break}return!!f&&(e&&aN(a),g&&aM(a),!0)}function a4(a,b,c,d,e,f=!0){a.depth>=a.maxDepth&&aR(a,`nesting exceeded maxDepth (${a.maxDepth})`),a.depth++;let g=1,h=!1,i=!1,j=null,k=aO(),l=4===c||3===c,m=l,n=l;if(d&&aY(a,!0)&&(h=!0,g=a.lineIndent>b?1:a.lineIndent===b?0:-1),1===g)for(;;){let d=a.input.charCodeAt(a.position),e=aP(a);if(h&&1!==g&&(33===d||38===d))break;if(h&&n&&(-1!==k.tagStart||-1!==k.anchorStart)&&(33===d||38===d)){let c=aP(a),d=b+1;if(a3(a,a.position-a.lineStart,d,k)&&a.events[c.eventsLength]?.type===3)return a.depth--,!0;aQ(a,c)}if(h&&(33===d&&-1!==k.tagStart||38===d&&-1!==k.anchorStart)||!function(a,b,c){let d;if(33!==a.input.charCodeAt(a.position))return!1;-1!==b.tagStart&&aR(a,"duplication of a tag property");let e=a.position,f=!1,g=!1,h="!",i=a.input.charCodeAt(++a.position);60===i?(f=!0,i=a.input.charCodeAt(++a.position)):33===i&&(g=!0,h="!!",i=a.input.charCodeAt(++a.position));let j=a.position;if(f){for(;0!==i&&62!==i;)i=a.input.charCodeAt(++a.position);62!==i&&aR(a,"unexpected end of the stream within a verbatim tag"),d=a.input.slice(j,a.position),a.position++}else{for(;0!==i&&!aU(i)&&!(c&&aW(i));)33===i&&(g?aR(a,"tag suffix cannot contain exclamation marks"):(h=a.input.slice(j-1,a.position+1),aB.test(h)||aR(a,"named tag handle cannot contain such characters"),g=!0,j=a.position+1)),i=a.input.charCodeAt(++a.position);d=a.input.slice(j,a.position),aA.test(d)&&aR(a,"tag suffix cannot contain flow indicator characters")}return!d||(f?aE.test(d):aF.test(d))||aR(a,`tag name cannot contain such characters: ${d}`),f||"!"===h||"!!"===h||ay.call(a.tagHandlers,h)||aR(a,`undeclared tag handle "${h}"`),b.tagStart=e,b.tagEnd=a.position,!0}(a,k,1===c)&&!function(a,b){if(38!==a.input.charCodeAt(a.position))return!1;-1!==b.anchorStart&&aR(a,"duplication of an anchor property"),a.position++;let c=a.position;for(;0!==a.input.charCodeAt(a.position)&&!aU(a.input.charCodeAt(a.position))&&!aW(a.input.charCodeAt(a.position));)a.position++;return a.position===c&&aR(a,"name of an anchor node must contain at least one character"),b.anchorStart=c,b.anchorEnd=a.position,!0}(a,k))break;null===j&&(j=e),aY(a,!0)?(h=!0,m=n,g=a.lineIndent>b?1:a.lineIndent===b?0:-1):m=!1}if(m&&(m=h||e),1===g||4===c){let d=1===c||2===c?b:b+1,e=a.position-a.lineStart;if(1===g)if(m&&(a2(a,e,k)||a3(a,e,d,k))||function(a,b,c){let d=a.input.charCodeAt(a.position),e=123===d,f=a.position,g=!0;if(91!==d&&123!==d)return!1;let h=e?125:93;for(e?aJ(a,f,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,2):aI(a,f,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,2),a.position++;0!==a.input.charCodeAt(a.position);){a1(a,b);let c=a.input.charCodeAt(a.position);if(c===h)return a.position++,aM(a),!0;g?44===c&&aR(a,"expected the node content, but found ','"):aR(a,"missed comma between flow collection entries");let d=!1,f=!1;63===c&&aU(a.input.charCodeAt(a.position+1))&&(d=f=!0,a.position+=1,a1(a,b));let i=a.line,j=aP(a),k=a4(a,b,1,!1,!0);a1(a,b),c=a.input.charCodeAt(a.position),(e||f||a.line===i)&&58===c?(d=!0,a.position++,a1(a,b),e||aK(a,j),k||aN(a),a4(a,b,1,!1,!0)||aN(a),a1(a,b),e||aM(a)):e&&d?(k||aN(a),aN(a)):e?aN(a):d&&(aK(a,j),k||aN(a),aN(a),aM(a)),44===(c=a.input.charCodeAt(a.position))?(g=!0,a.position++):g=!1}aR(a,"unexpected end of the stream within a flow collection")}(a,d,k))i=!0;else{let b=a.input.charCodeAt(a.position);if(null!==j&&f&&n&&!m&&124!==b&&62!==b){let b=aP(a),c=j.position-j.lineStart;aQ(a,j),a3(a,c,d,aO())&&a.events[b.eventsLength]?.type===3?i=!0:aQ(a,b)}!i&&(l&&function(a,b,c){let d=a.input.charCodeAt(a.position),e=1,f=-1,g=!1;if(124!==d&&62!==d)return!1;for(a.position++;0!==a.input.charCodeAt(a.position);){let c=a.input.charCodeAt(a.position),d=c>=48&&c<=57?c-48:-1;if(43===c||45===c)1!==e&&aR(a,"repeat of a chomping mode identifier"),e=43===c?3:2,a.position++;else if(d>=0)0===d&&aR(a,"bad explicit indentation width of a block scalar; it cannot be less than one"),g&&aR(a,"repeat of an indentation width identifier"),f=b+d-1,g=!0,a.position++;else break}let h=!1;for(;aT(a.input.charCodeAt(a.position));)h=!0,a.position++;h&&35===a.input.charCodeAt(a.position)&&a$(a),aS(a.input.charCodeAt(a.position))?aX(a):0!==a.input.charCodeAt(a.position)&&aR(a,"a line break is expected");let i=g?f:-1,j=0,k=a.position,l=a.position;for(;0!==a.input.charCodeAt(a.position);){let c=a.position,d=0;for(;32===a.input.charCodeAt(c+d);)d++;let e=a.input.charCodeAt(c+d);if(0===e){i>=0?d>i&&(l=c+d):d>0&&(l=c+d);break}if(c===a.lineStart&&aZ(a,c))break;if(!g&&-1===i&&aS(e)&&(j=Math.max(j,d)),g||-1!==i||aS(e)||(9===e&&d<b&&(a.position=c+d,aR(a,"tab characters must not be used in indentation")),d<j&&(a.position=c+d,aR(a,"bad indentation of a mapping entry"))),-1===i&&0!==e&&!aS(e)&&d<b){a.lineIndent=d,a.position=c+d;break}g||0===e||aS(e)||-1!==i||(i=d);let f=-1===i?b+1:i;if(0!==e&&!aS(e)&&d<f){a.lineIndent=d,a.position=c+d;break}a$(a),l=a.position,aS(a.input.charCodeAt(a.position))&&(aX(a),l=a.position)}return a_(a,k,l),aL(a,k,l,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,124===d?4:5,e,i),!0}(a,d,k)||function(a,b,c){if(39!==a.input.charCodeAt(a.position))return!1;a.position++;let d=a.position,e=!0;for(;0!==a.input.charCodeAt(a.position);){let f=a.input.charCodeAt(a.position);if(39===f){if(39===a.input.charCodeAt(a.position+1)){e=!1,a.position+=2;continue}let b=a.position;return a.position++,aL(a,d,b,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,2,1,-1,e),!0}aS(f)?(e=!1,a0(a,b)):a.position===a.lineStart&&aZ(a)?aR(a,"unexpected end of the document within a single quoted scalar"):9!==f&&f<32?aR(a,"expected valid JSON character"):a.position++}aR(a,"unexpected end of the stream within a single quoted scalar")}(a,d,k)||function(a,b,c){if(34!==a.input.charCodeAt(a.position))return!1;a.position++;let d=a.position,e=!0;for(;0!==a.input.charCodeAt(a.position);){let f=a.input.charCodeAt(a.position);if(34===f){let b=a.position;return a.position++,aL(a,d,b,c.anchorStart,c.anchorEnd,c.tagStart,c.tagEnd,3,1,-1,e),!0}if(92===f){e=!1;let c=a.input.charCodeAt(++a.position);if(aS(c))a0(a,b);else if(48===c||97===c||98===c||116===c||9===c||110===c||118===c||102===c||114===c||101===c||32===c||34===c||47===c||92===c||78===c||95===c||76===c||80===c)a.position++;else{let b=120===c?2:117===c?4:8*(85===c);for(0===b&&aR(a,"unknown escape sequence");b-- >0;)a.position++,0>function(a){if(a>=48&&a<=57)return a-48;let b=32|a;return b>=97&&b<=102?b-97+10:-1}(a.input.charCodeAt(a.position))&&aR(a,"expected hexadecimal character");a.position++}}else aS(f)?(e=!1,a0(a,b)):a.position===a.lineStart&&aZ(a)?aR(a,"unexpected end of the document within a double quoted scalar"):9!==f&&f<32?aR(a,"expected valid JSON character"):a.position++}aR(a,"unexpected end of the stream within a double quoted scalar")}(a,d,k)||function(a,b){var c;if(42!==a.input.charCodeAt(a.position))return!1;(-1!==b.anchorStart||-1!==b.tagStart)&&aR(a,"alias node should not have any properties"),a.position++;let d=a.position;for(;0!==a.input.charCodeAt(a.position)&&!aU(a.input.charCodeAt(a.position))&&!aW(a.input.charCodeAt(a.position));)a.position++;return a.position===d&&aR(a,"name of an alias node must contain at least one character"),c=a.position,a.events.push({type:5,anchorStart:d,anchorEnd:c}),!0}(a,k)||function(a,b,c,d){if(!function(a,b){let c=a.input.charCodeAt(a.position),d=1===b;if(0===c||aU(c)||35===c||38===c||42===c||33===c||124===c||62===c||39===c||34===c||37===c||64===c||96===c||d&&aW(c))return!1;if(63===c||45===c){let b=a.input.charCodeAt(a.position+1);if(aV(b)||d&&aW(b))return!1}return!0}(a,c))return!1;let e=a.position,f=a.position,g=a.input.charCodeAt(a.position),h=1===c,i=!1;for(;0!==g&&!(a.position===a.lineStart&&aZ(a));){if(58===g){let b=a.input.charCodeAt(a.position+1);if(aV(b)||h&&aW(b))break}else if(35===g){if(aU(a.input.charCodeAt(a.position-1)))break}else if(h&&aW(g))break;else if(aS(g)){let c=a.position,d=a.line,e=a.lineStart,f=a.lineIndent;if(aY(a,!1),a.lineIndent>=b){i=!0,g=a.input.charCodeAt(a.position);continue}a.position=c,a.line=d,a.lineStart=e,a.lineIndent=f;break}aT(g)||(f=a.position+1),g=a.input.charCodeAt(++a.position)}return f!==e&&(a_(a,e,f),aL(a,e,f,d.anchorStart,d.anchorEnd,d.tagStart,d.tagEnd,1,1,-1,!i),!0)}(a,d,c,k))&&(i=!0)}else 0===g&&(i=m&&a2(a,e,k))}return l=l&&!i,!i&&(-1!==k.anchorStart||-1!==k.tagStart||l)&&(aL(a,-1,-1,k.anchorStart,k.anchorEnd,k.tagStart,k.tagEnd,1),i=!0),a.depth--,i||-1!==k.anchorStart||-1!==k.tagStart}var a5={...aH,...aq};function a6(a,b){let c=function(a,b={}){let c={...a5,...b},e=String(a),f=Object.keys(aH),g=Object.keys(aq);return function(a,b){let c={...aq,...b,events:a,documents:[],eventIndex:0,position:0,frames:[],anchors:new Map,nodeTags:new Map,tagHandlers:Object.create(null),totalMergeKeys:0,aliasCount:0};for(;c.eventIndex<c.events.length;){let a=c.events[c.eventIndex++];switch(c.position="tagStart"in a&&-1!==a.tagStart?a.tagStart:"anchorStart"in a&&-1!==a.anchorStart?a.anchorStart:"valueStart"in a&&-1!==a.valueStart?a.valueStart:"start"in a?a.start:0,a.type){case 1:for(let b of(c.anchors=new Map,c.nodeTags=new Map,c.aliasCount=0,c.tagHandlers=Object.create(null),a.directives))"tag"===b.kind&&(c.tagHandlers[b.handle]=b.prefix);c.frames.push({kind:"document",position:c.position,value:void 0,hasValue:!1});break;case 4:{let{value:b,tag:e}=function(a,b){let c=function(a,b){if(-1===b.valueStart)return"";let{valueStart:c,valueEnd:d}=b;if(b.fast)return a.slice(c,d);switch(b.style){case 2:return function(a,b,c){let d="",e=b,f=b,g=b;for(;e<c;){let b=a.charCodeAt(e);if(39===b)d+=a.slice(f,e)+"'",e+=2,f=g=e;else if(10===b||13===b){d+=a.slice(f,g);let b=al(a,e,c);d+=am(b.breaks),e=f=g=b.position}else e++,32!==b&&9!==b&&(g=e)}return d+a.slice(f,c)}(a,c,d);case 3:return function(a,b,c){let d="",e=b,f=b,g=b;for(;e<c;){let b=a.charCodeAt(e);if(92===b){d+=a.slice(f,e),e++;let b=a.charCodeAt(e);if(10===b||13===b)e=al(a,e,c).position;else if(b<256&&aj[b])d+=ak[b],e++;else{var h,i;let c=120===b?2:117===b?4:8,f=0;for(;c>0;c--)e++,f=(f<<4)+((h=a.charCodeAt(e))>=48&&h<=57?h-48:(32|h)-97+10);d+=(i=f)<=65535?String.fromCharCode(i):String.fromCharCode((i-65536>>10)+55296,(i-65536&1023)+56320),e++}f=g=e}else if(10===b||13===b){d+=a.slice(f,g);let b=al(a,e,c);d+=am(b.breaks),e=f=g=b.position}else e++,32!==b&&9!==b&&(g=e)}return d+a.slice(f,c)}(a,c,d);case 4:return an(a,c,d,b.indent,b.chomping,!1);case 5:return an(a,c,d,b.indent,b.chomping,!0);default:return function(a,b,c){let d="",e=b,f=b,g=b;for(;e<c;){let b=a.charCodeAt(e);if(10===b||13===b){d+=a.slice(f,g);let b=al(a,e,c);d+=am(b.breaks),e=f=g=b.position}else e++,32!==b&&9!==b&&(g=e)}return d+a.slice(f,g)}(a,c,d)}}(a.source,b),e=-1===b.tagStart?"":a.source.slice(b.tagStart,b.tagEnd),f=a.schema.defaultScalarTag;if(""!==e){if("!"===e)return{value:c,tag:f};let b=ap(e,a.tagHandlers),g=a.schema.lookupScalarTag(b);if(g){let e=g.resolve(c,!0,b);return e===d&&ar(a,`cannot resolve a node with !<${b}> explicit tag`),{value:e,tag:g}}let h=a.schema.lookupMappingTag(b)??a.schema.lookupSequenceTag(b);if(h){""!==c&&ar(a,`cannot resolve a node with !<${b}> explicit tag`);let d=h.create(b);return{value:h.carrierIsResult?d:as(a,a.position,h,d),tag:h}}ar(a,`unknown scalar tag !<${b}>`)}return 1===b.style?a.schema.resolveImplicitScalarTag(c):{value:f.resolve(c,!1,f.tagName),tag:f}}(c,a);ax(c,a,b,e,!0),aw(c,b,e);break}case 2:{let b=at(c,a,"tag:yaml.org,2002:seq"),d=c.schema.lookupSequenceTag(b);d||ar(c,`unknown sequence tag !<${b}>`);let e=d.create(b),f=ax(c,a,e,d,d.carrierIsResult);c.frames.push({kind:"sequence",position:c.position,value:e,tag:d,anchor:f,index:0});break}case 3:{let b=at(c,a,"tag:yaml.org,2002:map"),d=c.schema.lookupMappingTag(b);d||ar(c,`unknown mapping tag !<${b}>`);let e=d.create(b),f=ax(c,a,e,d,d.carrierIsResult);c.frames.push({kind:"mapping",position:c.position,value:e,tag:d,anchor:f,key:void 0,keyPosition:c.position,hasKey:!1,keyIsMerge:!1,overridable:null});break}case 5:{-1!==c.maxAliases&&++c.aliasCount>c.maxAliases&&ar(c,`aliases exceeded maxAliases (${c.maxAliases})`);let b=c.source.slice(a.anchorStart,a.anchorEnd),d=c.anchors.get(b);d||ar(c,`unidentified alias "${b}"`),d.isValueFinal||ar(c,`recursive alias "${b}" is not supported for tag ${d.tag.tagName} because it uses finalize()`),aw(c,d.value,d.tag);break}case 6:{let a=c.frames.pop();if("mapping"===a.kind&&a.hasKey&&(c.position=a.keyPosition,ar(c,"incomplete mapping pair in event stream")),"document"===a.kind)c.documents.push(a.value);else{let b=a.tag.carrierIsResult?a.value:as(c,a.position,a.tag,a.value);a.anchor&&(a.anchor.value=b,a.anchor.isValueFinal=!0),aw(c,b,a.tag)}}}}return c.documents}(function(a,b){let c=a.length,d={...aH,...b,input:`${a}\0`,length:c,position:0,line:0,lineStart:0,lineIndent:0,firstTabInLine:-1,depth:0,directives:[],tagHandlers:Object.create(null),events:[]},e=a.indexOf("\0");for(-1!==e&&ah.throwAt(a,e,"null byte is not allowed in input",d.filename),65279===d.input.charCodeAt(d.position)&&d.position++;d.position<d.length&&(aY(d,!0),!(d.position>=d.length));){let a=d.position;!function(a){var b;a.directives=[],a.tagHandlers=Object.create(null);let c=!1;for(aY(a,!0);function(a){if(a.lineIndent>0||37!==a.input.charCodeAt(a.position))return!1;a.position++;let b=a.position;for(;0!==a.input.charCodeAt(a.position)&&!aU(a.input.charCodeAt(a.position));)a.position++;let c=a.input.slice(b,a.position),d=[];for(0===c.length&&aR(a,"directive name must not be less than one character in length");0!==a.input.charCodeAt(a.position)&&!aS(a.input.charCodeAt(a.position));){for(;aT(a.input.charCodeAt(a.position));)a.position++;if(35===a.input.charCodeAt(a.position)||aS(a.input.charCodeAt(a.position))||0===a.input.charCodeAt(a.position))break;let b=a.position;for(;0!==a.input.charCodeAt(a.position)&&!aU(a.input.charCodeAt(a.position));)a.position++;d.push(a.input.slice(b,a.position))}if(aS(a.input.charCodeAt(a.position))&&aX(a),"YAML"===c){a.directives.some(a=>"yaml"===a.kind)&&aR(a,"duplication of %YAML directive"),1!==d.length&&aR(a,"YAML directive accepts exactly one argument");let b=/^([0-9]+)\.([0-9]+)$/.exec(d[0]);null===b&&aR(a,"ill-formed argument of the YAML directive"),1!==parseInt(b[1],10)&&aR(a,"unacceptable YAML version of the document"),a.directives.push({kind:"yaml",version:d[0]})}else if("TAG"===c){2!==d.length&&aR(a,"TAG directive accepts exactly two arguments");let[b,c]=d;aB.test(b)||aR(a,"ill-formed tag handle (first argument) of the TAG directive"),ay.call(a.tagHandlers,b)&&aR(a,`there is a previously declared suffix for "${b}" tag handle`),aG.test(c)||aR(a,"ill-formed tag prefix (second argument) of the TAG directive"),a.tagHandlers[b]=c,a.directives.push({kind:"tag",handle:b,prefix:c})}return!0}(a);)c=!0,aY(a,!0);let d=!1,e=!1,f=!0;if(0===a.lineIndent&&45===a.input.charCodeAt(a.position)&&45===a.input.charCodeAt(a.position+1)&&45===a.input.charCodeAt(a.position+2)&&aV(a.input.charCodeAt(a.position+3))){d=!0;let b=a.line;a.position+=3,aY(a,!0),f=a.line>b}else c&&aR(a,"directives end mark is expected");let g=a.events.length;if(!d&&a.position===a.lineStart&&46===a.input.charCodeAt(a.position)&&aZ(a)){a.position+=3,aY(a,!0);return}if(b=d,a.events.push({type:1,explicitStart:b,explicitEnd:!1,directives:a.directives}),a4(a,a.lineIndent-1,4,!1,f,f)||aN(a),aY(a,!0),a.position===a.lineStart&&aZ(a)&&(e=46===a.input.charCodeAt(a.position))){let b=a.line;a.position+=3,aY(a,!0),a.line===b&&a.position<a.length&&aR(a,"end of the stream or a document separator is expected")}let h=a.events[g];h?.type===1&&(h.explicitEnd=e),aM(a),e||!(a.position<a.length)||a.position===a.lineStart&&aZ(a)||aR(a,"end of the stream or a document separator is expected")}(d),d.position===a&&aR(d,"can not read a document")}return d.events}(e,W(c,f)),{...W(c,g),source:e})}(a,b);if(0===c.length)throw new ah("expected a document, but the input is empty");if(1===c.length)return c[0];throw new ah("expected a single document in the stream, but found more")}Symbol("INVALID"),Symbol("visit:break"),Symbol("visit:skip");var a7={};a7[0]="\\0",a7[7]="\\a",a7[8]="\\b",a7[9]="\\t",a7[10]="\\n",a7[11]="\\v",a7[12]="\\f",a7[13]="\\r",a7[27]="\\e",a7[34]='\\"',a7[92]="\\\\",a7[133]="\\N",a7[160]="\\_",a7[8232]="\\L",a7[8233]="\\P"},83739:(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(15011);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)}},84851:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{s:()=>t});var e=c(75430),f=c(8084),g=c(41035),h=c(35015),i=c(16983),j=c(15253),k=c(5564),l=c(70274),m=c(55950),n=c(88002),o=c(77598),p=a([e,f,g,j,k,l]);[e,f,g,j,k,l]=p.then?(await p)():p;let u=new Set(["off","minimal","low","medium","high","xhigh","max"]);function q(){return globalThis.__piSubagentRuns||(globalThis.__piSubagentRuns=new Map),globalThis.__piSubagentRuns}async function r(a,b){if(b)try{await (0,n.IL)(a,b.path);return}catch(a){return`Worktree retained at ${b.path}: ${a instanceof Error?a.message:String(a)}`}}function s(a){let b,c=!1,d=()=>{c||b?.()};a?.addEventListener("abort",d,{once:!0});let e={get aborted(){return!c&&a?.aborted===!0},throwIfAborted(){if(e.aborted)throw new DOMException("Subagent was stopped during setup","AbortError")},setHandler(a){b=a,e.aborted&&a()},dispose(){a?.removeEventListener("abort",d),b=void 0},ignore(){c=!0,e.dispose()}};return e}function t(a){async function b(b){let c=a.getSession(b.sessionId);c?.inner===b&&c.shutdown?await c.shutdown():b.dispose()}function c(b){let c,d,{initialRun:e,inner:f,request:h,cancellation:i}=b,j=new Promise(a=>{c=a}),k={run:e,completion:j,abortRequested:i.aborted},n=!1,o=()=>({...e,status:"aborted",completedAt:new Date().toISOString()}),p=a=>{try{h.onUpdate?.(a)}catch(a){console.error("[subagents] update listener failed:",a)}},r=h=>d||(k.run=h,k.cancelQueued=void 0,i.dispose(),b.unsubscribe?.(),d=Promise.resolve().then(async()=>{let d=h;try{let a=await b.cleanup?.(h);a&&(d={...h,worktreeCleanupError:a});let c={version:1,status:d.status,completedAt:d.completedAt,...d.result?{result:d.result}:{},...d.error?{error:d.error}:{},...d.worktreeCleanupError?{worktreeCleanupError:d.worktreeCleanupError}:{}};f.sessionManager.appendCustomEntry(g.pv,c)}catch(a){d={...d,error:a instanceof Error?a.message:String(a)},"aborted"!==d.status&&(d.status="failed")}finally{try{await b.close?.(d)}catch(a){console.error("[subagents] session shutdown failed:",a)}k.run=d,q().get(e.sessionId)===k&&q().delete(e.sessionId),p(d),a.invalidateSessionList(),a.notifyRunningChange?.(),c(d)}return d})),s=async()=>{let a;if(k.abortRequested||i.aborted)return r(o());try{n=!0,await b.prompt(()=>{if(k.abortRequested||i.aborted)throw new DOMException("Subagent was stopped before prompt preflight completed","AbortError")});let c=f.getLastAssistantText()?.trim();a={...e,status:k.abortRequested||i.aborted?"aborted":"completed",completedAt:new Date().toISOString(),...c?{result:c}:{}}}catch(h){let c=k.abortRequested||i.aborted,d=f.getLastAssistantText()?.trim(),g=b.maxTurnsReached?.()===!0;a={...e,status:c?"aborted":g?"completed":"failed",completedAt:new Date().toISOString(),...d?{result:d}:{},...!c&&!g?{error:h instanceof Error?h.message:String(h)}:{}}}finally{n=!1}return r(a)};if(q().set(e.sessionId,k),i.setHandler(()=>{k.abortRequested=!0,"queued"===k.run.status?k.cancelQueued?.():n&&f.abort().catch(()=>void 0)}),p(e),a.invalidateSessionList(),k.abortRequested||i.aborted)r(o());else try{let b=(!globalThis.__piSubagentQueue&&(globalThis.__piSubagentQueue=new m.V),globalThis.__piSubagentQueue).enqueue(e.parentSessionId,(0,l.hd)().maxConcurrent,s,b=>{d||(k.run={...k.run,status:b},f.sessionManager.appendCustomEntry(g.o2,{version:1,status:b}),p(k.run),a.invalidateSessionList())},async()=>{await r(o())});k.cancelQueued=b.cancel,(k.abortRequested||i.aborted)&&"queued"===k.run.status&&b.cancel(),b.promise.catch(a=>r(k.abortRequested||i.aborted?o():{...e,status:"failed",completedAt:new Date().toISOString(),error:a instanceof Error?a.message:String(a)}))}catch(a){r(k.abortRequested||i.aborted?o():{...e,status:"failed",completedAt:new Date().toISOString(),error:a instanceof Error?a.message:String(a)})}return{run:k.run,completion:j}}async function d(d){let e;if(!(a.isBuiltInSubagentsEnabled??l.N)())throw Error("Pi Web built-in sub-agents are disabled");let f=d.parentContext.sessionManager.getSessionId(),g=s(!0===d.runInBackground?void 0:d.signal);try{!1===d.runInBackground&&g.throwIfAborted();let h=await p(d.sessionId);if(!h)throw Error(`Subagent not found: ${d.sessionId}`);if(h.parentSessionId!==f)throw Error("Subagent does not belong to this parent session");let i=d.runInBackground??h.runInBackground;if(i&&g.ignore(),g.throwIfAborted(),"running"===h.status||"queued"===h.status)throw Error("Subagent is already running");let j=a.getSession(f);if(!j?.isAlive())throw Error("Parent session is no longer available");let k=h.sessionPath||await a.resolveSessionPath(d.sessionId);if(g.throwIfAborted(),!k)throw Error(`Subagent session file not found: ${d.sessionId}`);let l=a.getSession(d.sessionId);if(l?.isAlive()||(e=l=await a.reopenSession(d.sessionId,k),g.throwIfAborted()),!l.isAlive())throw Error("Subagent session is no longer available");if(l.isRunning()||q().has(d.sessionId))throw Error("Subagent is already running");let m={...h,parentToolCallId:d.parentToolCallId,task:d.task,description:d.description.trim()||h.description,runInBackground:i,status:"queued",completedAt:void 0,result:void 0,error:void 0},n=l.inner;return c({initialRun:m,inner:n,request:d,cancellation:g,prompt:a=>n.prompt(d.task,{source:"rpc",preflightResult:b=>{b&&a()}}),close:async a=>{"aborted"===a.status&&await b(n)}})}catch(a){throw g.dispose(),!e||e.isRunning()||q().has(d.sessionId)||await b(e.inner),g.throwIfAborted(),a}}async function p(b){let c=q().get(b);if(c)return c.run;let d=a.getSession(b);if(d?.isAlive()){let a=(0,g.$u)(d.inner.sessionManager.getEntries(),b,d.sessionFile);if(a&&d.isRunning())return{...a,status:"running"};if(a)return a}let f=await a.resolveSessionPath(b);if(!f)return null;let h=e.SessionManager.open(f);return(0,g.$u)(h.getEntries(),b,f)}async function t(b,c){let d=a.getSession(b);if(!d?.isAlive()||!d.isRunning())throw Error("Subagent is not running");if(!c.trim())throw Error("Steering message is required");await d.inner.steer(c.trim())}async function v(b){let c=a.getSession(b.parentSessionId);if(!c?.isAlive()){let d=await a.resolveSessionPath(b.parentSessionId);if(!d)throw Error(`Parent session not found: ${b.parentSessionId}`);c=await a.reopenSession(b.parentSessionId,d)}if(await c.waitUntilReady(),!c.isAlive())throw Error(`Parent session is no longer available: ${b.parentSessionId}`);await c.inner.sendCustomMessage({customType:"pi-web:subagent-notification",content:(0,f.J8)(b),display:!0,details:(0,f.o2)(b)},{deliverAs:"followUp",triggerTurn:!0})}async function w(b){let c=a.getSession(b),d=q().get(b);if(d?.run.status==="queued"){if(d.abortRequested=!0,!d.cancelQueued?.())throw Error("Subagent is no longer queued");return}if(!c?.isAlive()||!c.isRunning())throw Error("Subagent is not running");d&&(d.abortRequested=!0),await c.inner.abort()}return{extensionRuntime:{start:async function(d){let f,m,p;if(!(a.isBuiltInSubagentsEnabled??l.N)())throw Error("Pi Web built-in sub-agents are disabled");let q=d.parentContext.sessionManager.getSessionId(),t=a.getSession(q);if(!t?.isAlive())throw Error("Parent session is no longer available");if(!t.sessionFile)throw Error("Parent session must be persisted before starting a subagent");let v=(0,g.rh)(t.cwd,d.profile);if(!v)throw Error(`Unknown or disabled subagent profile: ${d.profile}`);let w=d.runInBackground??v.runInBackground,x=s(w?void 0:d.signal);try{let l,s;x.throwIfAborted();let y="off"===v.isolation?void 0:d.isolation??v.isolation;"worktree"===y&&(f=await (0,n.l)(t.cwd,`pi-web-agent-${(0,o.randomUUID)()}`),x.throwIfAborted());let z=f?.path??t.cwd,A=d.inheritContext??v.inheritContext,B=d.maxTurns??v.maxTurns;if(void 0!==B&&(!Number.isFinite(B)||B<0))throw Error("max_turns must be a non-negative number");let C=B&&B>0?Math.floor(B):void 0,D=d.thinking??v.thinking??t.inner.agent.state?.thinkingLevel;if(D&&!u.has(D))throw Error(`Invalid subagent thinking level: ${D}`);let E=(0,e.getAgentDir)(),F=t.inner.modelRuntime,G=e.SettingsManager.create(z,E),H=A?`The following is the active conversation context from the parent session. Use it only as background for the delegated task:
|
|
40
|
+
${l=t.inner.sessionManager.buildSessionContext().messages,(s=JSON.stringify(l)).length<=5e4?s:`${s.slice(0,5e4)}
|
|
41
|
+
[Parent context truncated]`}`:void 0,I=(0,i.vH)(t.cwd,d.inputFiles??[]),J=(0,h.r)({profileSystemPrompt:v.systemPrompt,tools:v.tools,loadSkills:v.loadSkills,loadExtensions:v.loadExtensions,promptMode:v.promptMode,task:(0,i.jN)(d.task,I),inheritedParentContext:H}),{chatOnly:K,appendSystemPrompt:L,delegatedTask:M}=J;K||(0,e.initTheme)();let N=await (0,e.createAgentSessionServices)({cwd:z,agentDir:E,modelRuntime:F,settingsManager:G,resourceLoaderOptions:{noExtensions:!v.loadExtensions,noSkills:!v.loadSkills,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,...K||void 0!==J.exactSystemPrompt?{systemPrompt:" ",systemPromptOverride:()=>void 0}:{},appendSystemPrompt:L},...v.loadExtensions||v.loadSkills?{resourceLoaderReloadOptions:(0,j.Fk)(z,E)}:{}});x.throwIfAborted();let O=v.loadExtensions?v.extensionTools?.length?(0,g.gY)(N.resourceLoader.getExtensions().extensions,v.extensionTools):N.resourceLoader.getExtensions().extensions.flatMap(a=>[...a.tools.keys()]):[],P=(0,k.wQ)((0,g.I6)(v.tools,O),G.getDefaultTools()),Q=f?e.SessionManager.create(z,void 0,{parentSession:t.sessionFile}):e.SessionManager.create(t.cwd,void 0,{parentSession:t.sessionFile});p=Q;let R=new Date().toISOString(),S={version:1,parentSessionId:q,parentSessionPath:t.sessionFile,parentToolCallId:d.parentToolCallId,profile:v.name,description:d.description.trim()||v.displayName,task:d.task,runInBackground:w,createdAt:R,resourceSnapshot:{version:1,appendSystemPrompt:[...L],tools:[...P],loadSkills:v.loadSkills,loadExtensions:v.loadExtensions,...void 0!==J.exactSystemPrompt?{exactSystemPrompt:J.exactSystemPrompt}:{}},...f?{worktreePath:f.path,worktreeBranch:f.branch}:{}};Q.appendCustomEntry(g.tP,S),Q.appendSessionInfo(S.description);let T=function(a,b){if(!b?.trim())return;let c=b.trim(),d=c.indexOf("/");if(d>0){let b=c.slice(0,d),e=c.slice(d+1),f=a.getModel(b,e);if(!f)throw Error(`Subagent model not found: ${c}`);return f}let e=a.getModels().filter(a=>a.id===c);if(1===e.length)return e[0];if(0===e.length)throw Error(`Subagent model not found: ${c}`);throw Error(`Subagent model is ambiguous; use provider/modelId: ${c}`)}(F,d.model??v.model),U=t.inner.model,{session:V}=await (0,e.createAgentSessionFromServices)({services:N,sessionManager:Q,model:T??U,...D?{thinkingLevel:D}:{},tools:P,excludeTools:[...g.st]});m=V,x.throwIfAborted(),a.registerSession(V,{...void 0!==J.exactSystemPrompt?{exactSystemPrompt:J.exactSystemPrompt}:{},chatOnly:K});let W={sessionId:V.sessionId,sessionPath:V.sessionFile??Q.getSessionFile()??"",parentSessionId:q,parentToolCallId:d.parentToolCallId,profile:v.name,description:S.description,task:d.task,runInBackground:w,status:"queued",createdAt:R,...f?{worktreePath:f.path,worktreeBranch:f.branch}:{}},X=0,Y=!1,Z=!1,$=C?V.subscribe(a=>{"turn_end"===a.type&&(X+=1,!Z&&X>=C?(Z=!0,V.steer("You have reached your turn limit. Wrap up immediately and provide your final answer now.")):Z&&X>=C+1&&(Y=!0,V.abort()))}):()=>{};return c({initialRun:W,inner:m,request:d,cancellation:x,unsubscribe:$,maxTurnsReached:()=>Y,prompt:a=>V.prompt(M,{source:"rpc",preflightResult:b=>{b&&(a(),K&&V.agent.state&&(V.agent.state.systemPrompt=v.systemPrompt))}}),cleanup:()=>r(t.cwd,f),close:async a=>{(f||"aborted"===a.status)&&await b(m)}})}catch(d){x.dispose();let a=await r(t.cwd,f),c=x.aborted;try{p?.appendCustomEntry(g.pv,{version:1,status:c?"aborted":"failed",completedAt:new Date().toISOString(),...a?{worktreeCleanupError:a}:{}})}finally{m&&await b(m)}if(c)throw new DOMException(`Subagent was stopped during setup${a?`; ${a}`:""}`,"AbortError");if(a)throw Error(`${d instanceof Error?d.message:String(d)}; ${a}`,{cause:d});throw d}},resume:d,get:p,steer:t,notifyParent:v},get:p,steer:t,abort:w}}d()}catch(a){d(a)}})},85895:(a,b,c)=>{"use strict";c.d(b,{JJ:()=>g});var d=c(76760),e=c(73024);function f(a){let b={};if(!a||"object"!=typeof a||Array.isArray(a))return b;for(let[c,d]of Object.entries(a)){if(!c||!d||"object"!=typeof d||Array.isArray(d))continue;let a=d.archivedAt;b[c]={archivedAt:"string"==typeof a?a:""}}return b}function g(a){var b=(0,d.join)(a,"session-archive.json");if(!(0,e.existsSync)(b))return f(void 0);try{return f(JSON.parse((0,e.readFileSync)(b,"utf8")))}catch{return f(void 0)}}c(61446),c(12969)},88002:(a,b,c)=>{"use strict";c.d(b,{l:()=>s,P9:()=>r,IL:()=>t,KI:()=>p});var d=c(79646),e=c(29021),f=c(33873),g=c(28354),h=c(15011);function i(){return globalThis.__piAdditionalAllowedRoots||(globalThis.__piAdditionalAllowedRoots=new Set),globalThis.__piAdditionalAllowedRoots}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,i,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,i].map(h.gB),p=o(a),q=(0,h.Eb)(m,p),r=!(0,h.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,h.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,h.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}async function s(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),j=`${(0,f.resolve)(g)}-worktrees`,k=(0,f.join)(j,d);if((0,e.existsSync)(k))throw Error(`Directory already exists: ${k}`);(0,e.mkdirSync)(j,{recursive:!0});let l=!1;try{await n(g,["rev-parse","--verify","--quiet",`refs/heads/${c}`]),l=!0}catch{l=!1}try{l?await n(g,["worktree","add","--",k,c]):await n(g,["worktree","add","-b",c,"--",k])}catch(a){throw Error(u(a))}return!function(a){if(!a)return;let b=(0,h.W3)(a);i().add(b),globalThis.__piAllowedRootsCache?.roots.add(b)}(k),m(),{path:k,branch:c}}async function t(a,b,c=!1){var d;let e=(d=await r(a),d.find(a=>(0,h.Eb)(a.path,b)));if(!e)throw Error(`Not a worktree of this repository: ${b}`);if(e.isMain)throw Error("Cannot remove the main worktree");try{await n(a,["worktree","remove",...c?["--force"]:[],e.path])}catch(a){throw Error(u(a))}!function(a){if(!a)return;let b=(0,h.W3)(a);i().delete(b),globalThis.__piAllowedRootsCache=void 0}(b),m()}function u(a){let b=a.stderr;return"string"==typeof b&&b.trim()?b.trim():a instanceof Error?a.message:String(a)}},88449:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{q8:()=>r});var e=c(73024),f=c(51455),g=c(76760),h=c(80481),i=c(75430),j=c(12969),k=a([i]);function l(a){return null!==a&&"object"==typeof a&&!Array.isArray(a)}async function m(a){try{let b,c,d=await (0,f.stat)(a),g=null,i=0,j="";for await(let d of(0,h.createInterface)({input:(0,e.createReadStream)(a,{encoding:"utf8"}),crlfDelay:1/0})){let a=function(a){if(!a.trim())return null;try{let b=JSON.parse(a);return b&&"object"==typeof b?b:null}catch{return null}}(d);if(!a)continue;if(!g){if("session"!==a.type)return null;g=a;continue}if("session_info"===a.type&&(b="string"==typeof a.name&&a.name.trim()?a.name.trim():void 0),"message"!==a.type)continue;i++;let e=function(a){let b=a.message;if(!b||"string"!=typeof b.role||!("content"in b)||"user"!==b.role&&"assistant"!==b.role)return;if("number"==typeof b.timestamp)return b.timestamp;let c=new Date(a.timestamp).getTime();return Number.isNaN(c)?void 0:c}(a);"number"==typeof e&&(c=Math.max(c??0,e));let f=a.message;if(!f||"string"!=typeof f.role||!("content"in f)||"user"!==f.role&&"assistant"!==f.role)continue;let h=function(a){let b=a.content;return"string"==typeof b?b:Array.isArray(b)?b.filter(a=>!!a&&"object"==typeof a&&"text"===a.type&&"string"==typeof a.text).map(a=>a.text).join(" "):""}(f);h&&(j||"user"!==f.role||(j=h))}if(!g)return null;let k="string"==typeof g.cwd?g.cwd:"",l="string"==typeof g.parentSession?g.parentSession:void 0,m="string"==typeof g.timestamp?new Date(g.timestamp).getTime():NaN,n="number"==typeof c&&c>0?new Date(c):Number.isNaN(m)?d.mtime:new Date(m);return{path:a,id:g.id,cwd:k,name:b,parentSessionPath:l,created:new Date(g.timestamp),modified:n,messageCount:i,firstMessage:j||"(no messages)"}}catch{return null}}async function n(a){let b;try{b=(await (0,f.readdir)(a,{withFileTypes:!0})).filter(a=>a.isDirectory()||a.isSymbolicLink())}catch{return[]}let c=[];for(let d of b){let b=(0,g.join)(a,d.name);try{for(let a of(await (0,f.readdir)(b)))a.endsWith(".jsonl")&&c.push((0,g.join)(b,a))}catch{}}return c}async function o(a,b){let c=0,d=new Set;for(;c<a.length||d.size>0;){for(;c<a.length&&d.size<10;){let e=a[c++],f=b(e).finally(()=>d.delete(f));d.add(f)}d.size>0&&await Promise.race(d)}}function p(){return globalThis.__piWebScanIndex||(globalThis.__piWebScanIndex=new Map),globalThis.__piWebScanIndex}function q(){return(0,g.join)((0,i.getAgentDir)(),"pi-web-session-index.json")}async function r(){!function(){if(globalThis.__piWebScanIndexLoaded)return;globalThis.__piWebScanIndexLoaded=!0;let a=q();if((0,e.existsSync)(a))try{let b=JSON.parse((0,e.readFileSync)(a,"utf8"));if(!l(b)||1!==b.version||!l(b.entries))return;let c=p();for(let[a,d]of Object.entries(b.entries)){if(!l(d)||!l(d.fp)||!l(d.info))continue;let{fp:b,info:e}=d;if("number"!=typeof b.size||!Number.isSafeInteger(b.size)||b.size<0||"number"!=typeof b.mtimeMs||!Number.isFinite(b.mtimeMs)||e.path!==a||"string"!=typeof e.id||"string"!=typeof e.cwd||"string"!=typeof e.firstMessage||void 0!==e.name&&"string"!=typeof e.name||void 0!==e.parentSessionPath&&"string"!=typeof e.parentSessionPath||"number"!=typeof e.messageCount||!Number.isSafeInteger(e.messageCount)||e.messageCount<0||"string"!=typeof e.created||"string"!=typeof e.modified)continue;let f=new Date(e.created),g=new Date(e.modified);Number.isFinite(f.getTime())&&Number.isFinite(g.getTime())&&c.set(a,{fp:{size:b.size,mtimeMs:b.mtimeMs},info:{path:a,id:e.id,cwd:e.cwd,name:e.name,parentSessionPath:e.parentSessionPath,firstMessage:e.firstMessage,messageCount:e.messageCount,created:f,modified:g}})}}catch{}}();let a=(0,g.join)((0,i.getAgentDir)(),"sessions"),b=await n(a),c=p(),d=new Set(b),h=[];for(let a of c.keys())d.has(a)||h.push(a);for(let a of h)c.delete(a);let k=await Promise.all(b.map(async a=>{try{let b=await (0,f.stat)(a);return{filePath:a,fp:{size:b.size,mtimeMs:b.mtimeMs}}}catch{return{filePath:a,fp:null}}})),r=[],s=Array(b.length).fill(null);for(let[a,{filePath:b,fp:d}]of k.entries()){if(!d){c.delete(b);continue}let e=c.get(b);if(e&&e.fp.size===d.size&&e.fp.mtimeMs===d.mtimeMs){s[a]=e.info;continue}r.push({filePath:b,fp:d,resultIndex:a})}return await o(r,async({filePath:a,fp:b,resultIndex:d})=>{let e=await m(a);e?(c.set(a,{fp:b,info:e}),s[d]=e):c.delete(a)}),(r.length>0||h.length>0)&&(globalThis.__piWebScanIndexSaveQueued||(globalThis.__piWebScanIndexSaveQueued=!0,queueMicrotask(()=>{globalThis.__piWebScanIndexSaveQueued=void 0;try{let a={};for(let[b,c]of p())a[b]=c;(0,j.$)(q(),JSON.stringify({version:1,entries:a}))}catch{}}))),s.filter(a=>null!==a).sort((a,b)=>b.modified.getTime()-a.modified.getTime())}i=(k.then?(await k)():k)[0],d()}catch(a){d(a)}})},91099:(a,b,c)=>{"use strict";c.d(b,{aA:()=>k,bo:()=>h,bx:()=>f,eG:()=>j});var d=c(29021);let e=`Continue pursuing the active goal. Do the next useful work, then report your disposition:
|
|
42
42
|
- "continue" with the next concrete step;
|
|
43
43
|
- "complete" only when fully done and verified;
|
|
44
|
-
- "blocked" when only the user can unblock you.`;function f(a){return`${a}.goal.json`}function g(a){let b=f(a);if(!(0,d.existsSync)(b))return h();try{var c;let a=JSON.parse((0,d.readFileSync)(b,"utf8"));if(!a||1!==a.version||!a.state||"object"!=typeof a.state)return h();let e=a.state;return{status:(c=e.status,["idle","running","paused","blocked","budget_limited","complete"].includes(c)?c:"idle"),goalText:"string"==typeof e.goalText?e.goalText:null,turnsUsed:Number.isFinite(e.turnsUsed)?e.turnsUsed:0,turnsLimit:Number.isFinite(e.turnsLimit)?e.turnsLimit:10,noProgressTurns:Number.isFinite(e.noProgressTurns)?e.noProgressTurns:0,noProgressLimit:Number.isFinite(e.noProgressLimit)?e.noProgressLimit:4,tokensUsed:Number.isFinite(e.tokensUsed)?e.tokensUsed:0,tokenBudget:null===e.tokenBudget||Number.isFinite(e.tokenBudget)?e.tokenBudget??null:null,timeUsedSeconds:Number.isFinite(e.timeUsedSeconds)?e.timeUsedSeconds:0,startedAt:Number.isFinite(e.startedAt)?e.startedAt:void 0,updatedAt:Number.isFinite(e.updatedAt)?e.updatedAt:void 0}}catch{return h()}}function h(){return{status:"idle",goalText:null,turnsUsed:0,turnsLimit:10,noProgressTurns:0,noProgressLimit:4,tokensUsed:0,tokenBudget:null,timeUsedSeconds:0}}function i(a,b){let c=f(a),e=`${c}.tmp`;try{(0,d.writeFileSync)(e,JSON.stringify({version:1,state:b}),{encoding:"utf8",mode:384}),(0,d.renameSync)(e,c)}catch{try{(0,d.rmSync)(e,{force:!0})}catch{}}}class j{constructor(a){this.continuationArmed=!1,this.turnStartMs=0,this.onChanged=null,this.state=a?g(a):h()}hydrate(a){this.state={...a}}getState(){return{...this.state}}isRunning(){return"running"===this.state.status}hasActiveGoal(){return"idle"!==this.state.status}isContinuable(){return"running"===this.state.status}isContinuationArmed(){return this.continuationArmed}armContinuation(){this.continuationArmed=!0}disarmContinuation(){this.continuationArmed=!1}onAgentStart(){this.continuationArmed=!1,this.turnStartMs=Date.now()}setOnChanged(a){this.onChanged=a}commit(a){a.updatedAt=Date.now(),this.state=a,this.onChanged?.(this.getState())}start(a,b=null){let c=Date.now(),d=b??this.state.tokenBudget??null,e={status:"running",goalText:a.trim(),turnsUsed:0,turnsLimit:this.state.turnsLimit,noProgressTurns:0,noProgressLimit:this.state.noProgressLimit,tokensUsed:0,tokenBudget:d,timeUsedSeconds:0,startedAt:c,updatedAt:c};return this.commit(e),this.getState()}pause(){return"running"!==this.state.status||this.commit({...this.state,status:"paused"}),this.getState()}resume(){return"paused"!==this.state.status&&"blocked"!==this.state.status||this.commit({...this.state,status:"running"}),this.getState()}stop(){if("idle"===this.state.status)return this.getState();let a=h();return a.turnsLimit=this.state.turnsLimit,a.noProgressLimit=this.state.noProgressLimit,this.commit(a),this.continuationArmed=!1,this.getState()}edit(a){if("idle"===this.state.status)return this.getState();let b="complete"===this.state.status||"budget_limited"===this.state.status?"running":this.state.status;return this.commit({...this.state,goalText:a.trim(),status:b}),this.getState()}settleTurn(a,b,c){if("running"!==this.state.status)return{verdict:{action:"continue"},state:this.getState()};let d=(a??"").toLowerCase(),e=this.turnStartMs>0?Math.max(0,Math.round((Date.now()-this.turnStartMs)/1e3)):0,f=this.state.tokensUsed+Math.max(0,b),g=this.state.timeUsedSeconds+e,h=this.state.turnsUsed+1;if(d.includes("[goal: complete]")||/(?:^|\n|[.!?]\s+)(?:goal(?:\s+is)?\s+complete|goal\s+complete)\b/.test(d)){let a={...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g};return this.commit({...a,status:"complete"}),{verdict:{action:"complete"},state:this.getState()}}if(function(a){let b;if(a.includes("[goal: blocked]")||a.includes("goal blocked"))return!0;let c=/(?:^|[^a-z])blocked\s*:/g;for(;null!==(b=c.exec(a));){let c=a.slice(0,b.index).trimEnd();if(!/\bnot$/.test(c))return!0}return!1}(d)){let a={...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g};return this.commit({...a,status:"blocked"}),{verdict:{action:"blocked"},state:this.getState()}}let i=0===c?this.state.noProgressTurns+1:0;return null!==this.state.tokenBudget&&f>=this.state.tokenBudget?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"budget_limited"}),{verdict:{action:"budget_limited"},state:this.getState()}):i>=this.state.noProgressLimit?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"blocked"}),{verdict:{action:"blocked"},state:this.getState()}):h>=this.state.turnsLimit?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"paused"}),{verdict:{action:"pause"},state:this.getState()}):(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i}),{verdict:{action:"continue"},state:this.getState()})}}},92759:a=>{function b(a,b){"boolean"==typeof b&&(b={forever:b}),this._originalTimeouts=JSON.parse(JSON.stringify(a)),this._timeouts=a,this._options=b||{},this._maxRetryTime=b&&b.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}a.exports=b,b.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts},b.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null},b.prototype.retry=function(a){if(this._timeout&&clearTimeout(this._timeout),!a)return!1;var b=new Date().getTime();if(a&&b-this._operationStart>=this._maxRetryTime)return this._errors.unshift(Error("RetryOperation timeout occurred")),!1;this._errors.push(a);var c=this._timeouts.shift();if(void 0===c)if(!this._cachedTimeouts)return!1;else this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),c=this._timeouts.shift();var d=this,e=setTimeout(function(){d._attempts++,d._operationTimeoutCb&&(d._timeout=setTimeout(function(){d._operationTimeoutCb(d._attempts)},d._operationTimeout),d._options.unref&&d._timeout.unref()),d._fn(d._attempts)},c);return this._options.unref&&e.unref(),!0},b.prototype.attempt=function(a,b){this._fn=a,b&&(b.timeout&&(this._operationTimeout=b.timeout),b.cb&&(this._operationTimeoutCb=b.cb));var c=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){c._operationTimeoutCb()},c._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)},b.prototype.try=function(a){console.log("Using RetryOperation.try() is deprecated"),this.attempt(a)},b.prototype.start=function(a){console.log("Using RetryOperation.start() is deprecated"),this.attempt(a)},b.prototype.start=b.prototype.try,b.prototype.errors=function(){return this._errors},b.prototype.attempts=function(){return this._attempts},b.prototype.mainError=function(){if(0===this._errors.length)return null;for(var a={},b=null,c=0,d=0;d<this._errors.length;d++){var e=this._errors[d],f=e.message,g=(a[f]||0)+1;a[f]=g,g>=c&&(b=e,c=g)}return b}},93329:(a,b,c)=>{var d,e,f,g=c(29021),h=c(39466),i=c(18827),j=c(12817),k=c(28354);function l(a,b){Object.defineProperty(a,d,{get:function(){return b}})}"function"==typeof Symbol&&"function"==typeof Symbol.for?(d=Symbol.for("graceful-fs.queue"),e=Symbol.for("graceful-fs.previous")):(d="___graceful-fs.queue",e="___graceful-fs.previous");var m=function(){};function n(a){h(a),a.gracefulify=n,a.createReadStream=function(b,c){return new a.ReadStream(b,c)},a.createWriteStream=function(b,c){return new a.WriteStream(b,c)};var b=a.readFile;a.readFile=function(a,c,d){return"function"==typeof c&&(d=c,c=null),function a(c,d,e,f){return b(c,d,function(b){b&&("EMFILE"===b.code||"ENFILE"===b.code)?o([a,[c,d,e],b,f||Date.now(),Date.now()]):"function"==typeof e&&e.apply(this,arguments)})}(a,c,d)};var c=a.writeFile;a.writeFile=function(a,b,d,e){return"function"==typeof d&&(e=d,d=null),function a(b,d,e,f,g){return c(b,d,e,function(c){c&&("EMFILE"===c.code||"ENFILE"===c.code)?o([a,[b,d,e,f],c,g||Date.now(),Date.now()]):"function"==typeof f&&f.apply(this,arguments)})}(a,b,d,e)};var d=a.appendFile;d&&(a.appendFile=function(a,b,c,e){return"function"==typeof c&&(e=c,c=null),function a(b,c,e,f,g){return d(b,c,e,function(d){d&&("EMFILE"===d.code||"ENFILE"===d.code)?o([a,[b,c,e,f],d,g||Date.now(),Date.now()]):"function"==typeof f&&f.apply(this,arguments)})}(a,b,c,e)});var e=a.copyFile;e&&(a.copyFile=function(a,b,c,d){return"function"==typeof c&&(d=c,c=0),function a(b,c,d,f,g){return e(b,c,d,function(e){e&&("EMFILE"===e.code||"ENFILE"===e.code)?o([a,[b,c,d,f],e,g||Date.now(),Date.now()]):"function"==typeof f&&f.apply(this,arguments)})}(a,b,c,d)});var f=a.readdir;a.readdir=function(a,b,c){"function"==typeof b&&(c=b,b=null);var d=g.test(process.version)?function(a,b,c,d){return f(a,e(a,b,c,d))}:function(a,b,c,d){return f(a,b,e(a,b,c,d))};return d(a,b,c);function e(a,b,c,e){return function(f,g){f&&("EMFILE"===f.code||"ENFILE"===f.code)?o([d,[a,b,c],f,e||Date.now(),Date.now()]):(g&&g.sort&&g.sort(),"function"==typeof c&&c.call(this,f,g))}}};var g=/^v[0-5]\./;if("v0.8"===process.version.substr(0,4)){var j=i(a);q=j.ReadStream,r=j.WriteStream}var k=a.ReadStream;k&&(q.prototype=Object.create(k.prototype),q.prototype.open=function(){var a=this;t(a.path,a.flags,a.mode,function(b,c){b?(a.autoClose&&a.destroy(),a.emit("error",b)):(a.fd=c,a.emit("open",c),a.read())})});var l=a.WriteStream;l&&(r.prototype=Object.create(l.prototype),r.prototype.open=function(){var a=this;t(a.path,a.flags,a.mode,function(b,c){b?(a.destroy(),a.emit("error",b)):(a.fd=c,a.emit("open",c))})}),Object.defineProperty(a,"ReadStream",{get:function(){return q},set:function(a){q=a},enumerable:!0,configurable:!0}),Object.defineProperty(a,"WriteStream",{get:function(){return r},set:function(a){r=a},enumerable:!0,configurable:!0});var m=q;Object.defineProperty(a,"FileReadStream",{get:function(){return m},set:function(a){m=a},enumerable:!0,configurable:!0});var p=r;function q(a,b){return this instanceof q?(k.apply(this,arguments),this):q.apply(Object.create(q.prototype),arguments)}function r(a,b){return this instanceof r?(l.apply(this,arguments),this):r.apply(Object.create(r.prototype),arguments)}Object.defineProperty(a,"FileWriteStream",{get:function(){return p},set:function(a){p=a},enumerable:!0,configurable:!0});var s=a.open;function t(a,b,c,d){return"function"==typeof c&&(d=c,c=null),function a(b,c,d,e,f){return s(b,c,d,function(g,h){g&&("EMFILE"===g.code||"ENFILE"===g.code)?o([a,[b,c,d,e],g,f||Date.now(),Date.now()]):"function"==typeof e&&e.apply(this,arguments)})}(a,b,c,d)}return a.open=t,a}function o(a){m("ENQUEUE",a[0].name,a[1]),g[d].push(a),q()}function p(){for(var a=Date.now(),b=0;b<g[d].length;++b)g[d][b].length>2&&(g[d][b][3]=a,g[d][b][4]=a);q()}function q(){if(clearTimeout(f),f=void 0,0!==g[d].length){var a=g[d].shift(),b=a[0],c=a[1],e=a[2],h=a[3],i=a[4];if(void 0===h)m("RETRY",b.name,c),b.apply(null,c);else if(Date.now()-h>=6e4){m("TIMEOUT",b.name,c);var j=c.pop();"function"==typeof j&&j.call(null,e)}else Date.now()-i>=Math.min(1.2*Math.max(i-h,1),100)?(m("RETRY",b.name,c),b.apply(null,c.concat([h]))):g[d].push(a);void 0===f&&(f=setTimeout(q,0))}}k.debuglog?m=k.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(m=function(){var a=k.format.apply(k,arguments);console.error(a="GFS4: "+a.split(/\n/).join("\nGFS4: "))}),!g[d]&&(l(g,global[d]||[]),g.close=function(a){function b(b,c){return a.call(g,b,function(a){a||p(),"function"==typeof c&&c.apply(this,arguments)})}return Object.defineProperty(b,e,{value:a}),b}(g.close),g.closeSync=function(a){function b(b){a.apply(g,arguments),p()}return Object.defineProperty(b,e,{value:a}),b}(g.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){m(g[d]),c(12412).equal(g[d].length,0)})),global[d]||l(global,g[d]),a.exports=n(j(g)),process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!g.__patched&&(a.exports=n(g),g.__patched=!0)},96515:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{IR:()=>m,py:()=>l});var e=c(75430),f=c(80723),g=c(32982),h=a([e,f]);[e,f]=h.then?(await h)():h;let n=null;async function i(a,b){let c=Date.now();if(n&&c-n.at<6e4)return n.data;let d=await a.getAvailable(void 0,b?{signal:b}:void 0);return n={data:d,at:c},d}let o=new Set(["off","minimal","low","medium","high","xhigh","max"]);function j(a,b){return a.provider===b.provider&&a.id===b.modelId}function k(a,b){let c=a.toLowerCase(),d=b.filter(a=>`${a.provider}/${a.id}`.toLowerCase()===c);return d.length>0?d:b.filter(a=>a.id.toLowerCase()===c)}async function l(a,b,c={}){let d=(0,f.fr)().providers??{},h=new Set;for(let[a,b]of Object.entries(d)){let c=(0,g.du)(b);for(let[b,d]of Object.entries(c))!0===d.hidden&&h.add(`${a}/${b}`)}let j=await i(a,c.signal),m=(b??[]).map(a=>a.trim()).filter(Boolean),n=[],p=[],q={},r=[];if(0===m.length)n=j;else{!function(a,b){for(let c of a){if(c.includes("*")||c.includes("?")||c.includes("["))continue;let a=k(c,b);if(0===a.length){let d=c.lastIndexOf(":"),e=d>=0?c.slice(d+1):"";o.has(e)&&(a=k(c.slice(0,d),b))}if(a.length>1){let b=a.map(a=>`${a.provider}/${a.id}`).sort().join(", ");throw Error(`Ambiguous enabledModels entry "${c}" matches multiple models: ${b}. Use provider/modelId.`)}}}(m,j);let a=await (0,e.resolveModelScopeWithDiagnostics)(m,{getAvailable:async()=>j});for(let b of(p=a.scopedModels,n=a.scopedModels.length>0?a.scopedModels.map(a=>a.model):j,r.push(...a.diagnostics.map(a=>a.message)),p))b.thinkingLevel&&(q[`${b.model.provider}/${b.model.id}`]=b.thinkingLevel)}return c.includeHidden||(n=n.filter(a=>!h.has(`${a.provider}/${a.id}`))),{visible:n,scopedModels:c.includeHidden||n.length===p.length?p:p.filter(a=>!h.has(`${a.model.provider}/${a.model.id}`)),thinkingLevelPins:q,warnings:r}}function m(a,b={}){let c=b.requestedModel?a.visible.find(a=>j(a,b.requestedModel)):void 0;if(b.requestedModel&&!c)throw Error(`Model is not available in the enabled scope: ${b.requestedModel.provider}/${b.requestedModel.modelId}`);let d=c?a.scopedModels.find(a=>j(a.model,{provider:c.provider,modelId:c.id})):void 0,e=!c&&b.defaultModel?a.scopedModels.find(a=>j(a.model,b.defaultModel)):void 0,f=c?void 0:e??a.scopedModels[0],g=c||f||!b.defaultModel?void 0:a.visible.find(a=>j(a,b.defaultModel)),h=c??f?.model??g,i=d??f,k=b.thinkingLevel??i?.thinkingLevel;return{...h?{model:h}:{},...k?{thinkingLevel:k}:{},scopedModels:[...a.scopedModels]}}d()}catch(a){d(a)}})},97563:(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()}}};
|
|
44
|
+
- "blocked" when only the user can unblock you.`;function f(a){return`${e}
|
|
45
|
+
|
|
46
|
+
Current goal:
|
|
47
|
+
${a}`}function g(a){return`${a}.goal.json`}function h(a){let b=g(a);if(!(0,d.existsSync)(b))return i();try{var c;let a=JSON.parse((0,d.readFileSync)(b,"utf8"));if(!a||1!==a.version||!a.state||"object"!=typeof a.state)return i();let e=a.state;return{status:(c=e.status,["idle","running","paused","blocked","budget_limited","complete"].includes(c)?c:"idle"),goalText:"string"==typeof e.goalText?e.goalText:null,turnsUsed:Number.isFinite(e.turnsUsed)?e.turnsUsed:0,turnsLimit:Number.isFinite(e.turnsLimit)?e.turnsLimit:10,noProgressTurns:Number.isFinite(e.noProgressTurns)?e.noProgressTurns:0,noProgressLimit:Number.isFinite(e.noProgressLimit)?e.noProgressLimit:4,tokensUsed:Number.isFinite(e.tokensUsed)?e.tokensUsed:0,tokenBudget:null===e.tokenBudget||Number.isFinite(e.tokenBudget)?e.tokenBudget??null:null,timeUsedSeconds:Number.isFinite(e.timeUsedSeconds)?e.timeUsedSeconds:0,startedAt:Number.isFinite(e.startedAt)?e.startedAt:void 0,updatedAt:Number.isFinite(e.updatedAt)?e.updatedAt:void 0}}catch{return i()}}function i(){return{status:"idle",goalText:null,turnsUsed:0,turnsLimit:10,noProgressTurns:0,noProgressLimit:4,tokensUsed:0,tokenBudget:null,timeUsedSeconds:0}}function j(a,b){let c=g(a),e=`${c}.tmp`;try{(0,d.writeFileSync)(e,JSON.stringify({version:1,state:b}),{encoding:"utf8",mode:384}),(0,d.renameSync)(e,c)}catch{try{(0,d.rmSync)(e,{force:!0})}catch{}}}class k{constructor(a){this.continuationArmed=!1,this.turnStartMs=0,this.onChanged=null,this.state=a?h(a):i()}hydrate(a){this.state={...a}}getState(){return{...this.state}}isRunning(){return"running"===this.state.status}hasActiveGoal(){return"idle"!==this.state.status}isContinuable(){return"running"===this.state.status}isContinuationArmed(){return this.continuationArmed}armContinuation(){this.continuationArmed=!0}disarmContinuation(){this.continuationArmed=!1}onAgentStart(){this.continuationArmed=!1,this.turnStartMs=Date.now()}setOnChanged(a){this.onChanged=a}commit(a){a.updatedAt=Date.now(),this.state=a,this.onChanged?.(this.getState())}start(a,b=null){let c=Date.now(),d=b??this.state.tokenBudget??null,e={status:"running",goalText:a.trim(),turnsUsed:0,turnsLimit:this.state.turnsLimit,noProgressTurns:0,noProgressLimit:this.state.noProgressLimit,tokensUsed:0,tokenBudget:d,timeUsedSeconds:0,startedAt:c,updatedAt:c};return this.commit(e),this.getState()}pause(){return"running"!==this.state.status||this.commit({...this.state,status:"paused"}),this.getState()}resume(){return"paused"!==this.state.status&&"blocked"!==this.state.status||this.commit({...this.state,status:"running"}),this.getState()}stop(){if("idle"===this.state.status)return this.getState();let a=i();return a.turnsLimit=this.state.turnsLimit,a.noProgressLimit=this.state.noProgressLimit,this.commit(a),this.continuationArmed=!1,this.getState()}edit(a){if("idle"===this.state.status)return this.getState();let b="complete"===this.state.status||"budget_limited"===this.state.status?"running":this.state.status;return this.commit({...this.state,goalText:a.trim(),status:b}),this.getState()}settleTurn(a,b,c){if("running"!==this.state.status)return{verdict:{action:"continue"},state:this.getState()};let d=(a??"").toLowerCase(),e=this.turnStartMs>0?Math.max(0,Math.round((Date.now()-this.turnStartMs)/1e3)):0,f=this.state.tokensUsed+Math.max(0,b),g=this.state.timeUsedSeconds+e,h=this.state.turnsUsed+1;if(d.includes("[goal: complete]")||/(?:^|\n|[.!?]\s+)(?:goal(?:\s+is)?\s+complete|goal\s+complete)\b/.test(d)){let a={...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g};return this.commit({...a,status:"complete"}),{verdict:{action:"complete"},state:this.getState()}}if(function(a){let b;if(a.includes("[goal: blocked]")||a.includes("goal blocked"))return!0;let c=/(?:^|[^a-z])blocked\s*:/g;for(;null!==(b=c.exec(a));){let c=a.slice(0,b.index).trimEnd();if(!/\bnot$/.test(c))return!0}return!1}(d)){let a={...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g};return this.commit({...a,status:"blocked"}),{verdict:{action:"blocked"},state:this.getState()}}let i=0===c?this.state.noProgressTurns+1:0;return null!==this.state.tokenBudget&&f>=this.state.tokenBudget?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"budget_limited"}),{verdict:{action:"budget_limited"},state:this.getState()}):i>=this.state.noProgressLimit?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"blocked"}),{verdict:{action:"blocked"},state:this.getState()}):h>=this.state.turnsLimit?(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i,status:"paused"}),{verdict:{action:"pause"},state:this.getState()}):(this.commit({...this.state,turnsUsed:h,tokensUsed:f,timeUsedSeconds:g,noProgressTurns:i}),{verdict:{action:"continue"},state:this.getState()})}}},92759:a=>{function b(a,b){"boolean"==typeof b&&(b={forever:b}),this._originalTimeouts=JSON.parse(JSON.stringify(a)),this._timeouts=a,this._options=b||{},this._maxRetryTime=b&&b.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}a.exports=b,b.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts},b.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null},b.prototype.retry=function(a){if(this._timeout&&clearTimeout(this._timeout),!a)return!1;var b=new Date().getTime();if(a&&b-this._operationStart>=this._maxRetryTime)return this._errors.unshift(Error("RetryOperation timeout occurred")),!1;this._errors.push(a);var c=this._timeouts.shift();if(void 0===c)if(!this._cachedTimeouts)return!1;else this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),c=this._timeouts.shift();var d=this,e=setTimeout(function(){d._attempts++,d._operationTimeoutCb&&(d._timeout=setTimeout(function(){d._operationTimeoutCb(d._attempts)},d._operationTimeout),d._options.unref&&d._timeout.unref()),d._fn(d._attempts)},c);return this._options.unref&&e.unref(),!0},b.prototype.attempt=function(a,b){this._fn=a,b&&(b.timeout&&(this._operationTimeout=b.timeout),b.cb&&(this._operationTimeoutCb=b.cb));var c=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){c._operationTimeoutCb()},c._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)},b.prototype.try=function(a){console.log("Using RetryOperation.try() is deprecated"),this.attempt(a)},b.prototype.start=function(a){console.log("Using RetryOperation.start() is deprecated"),this.attempt(a)},b.prototype.start=b.prototype.try,b.prototype.errors=function(){return this._errors},b.prototype.attempts=function(){return this._attempts},b.prototype.mainError=function(){if(0===this._errors.length)return null;for(var a={},b=null,c=0,d=0;d<this._errors.length;d++){var e=this._errors[d],f=e.message,g=(a[f]||0)+1;a[f]=g,g>=c&&(b=e,c=g)}return b}},93329:(a,b,c)=>{var d,e,f,g=c(29021),h=c(39466),i=c(18827),j=c(12817),k=c(28354);function l(a,b){Object.defineProperty(a,d,{get:function(){return b}})}"function"==typeof Symbol&&"function"==typeof Symbol.for?(d=Symbol.for("graceful-fs.queue"),e=Symbol.for("graceful-fs.previous")):(d="___graceful-fs.queue",e="___graceful-fs.previous");var m=function(){};function n(a){h(a),a.gracefulify=n,a.createReadStream=function(b,c){return new a.ReadStream(b,c)},a.createWriteStream=function(b,c){return new a.WriteStream(b,c)};var b=a.readFile;a.readFile=function(a,c,d){return"function"==typeof c&&(d=c,c=null),function a(c,d,e,f){return b(c,d,function(b){b&&("EMFILE"===b.code||"ENFILE"===b.code)?o([a,[c,d,e],b,f||Date.now(),Date.now()]):"function"==typeof e&&e.apply(this,arguments)})}(a,c,d)};var c=a.writeFile;a.writeFile=function(a,b,d,e){return"function"==typeof d&&(e=d,d=null),function a(b,d,e,f,g){return c(b,d,e,function(c){c&&("EMFILE"===c.code||"ENFILE"===c.code)?o([a,[b,d,e,f],c,g||Date.now(),Date.now()]):"function"==typeof f&&f.apply(this,arguments)})}(a,b,d,e)};var d=a.appendFile;d&&(a.appendFile=function(a,b,c,e){return"function"==typeof c&&(e=c,c=null),function a(b,c,e,f,g){return d(b,c,e,function(d){d&&("EMFILE"===d.code||"ENFILE"===d.code)?o([a,[b,c,e,f],d,g||Date.now(),Date.now()]):"function"==typeof f&&f.apply(this,arguments)})}(a,b,c,e)});var e=a.copyFile;e&&(a.copyFile=function(a,b,c,d){return"function"==typeof c&&(d=c,c=0),function a(b,c,d,f,g){return e(b,c,d,function(e){e&&("EMFILE"===e.code||"ENFILE"===e.code)?o([a,[b,c,d,f],e,g||Date.now(),Date.now()]):"function"==typeof f&&f.apply(this,arguments)})}(a,b,c,d)});var f=a.readdir;a.readdir=function(a,b,c){"function"==typeof b&&(c=b,b=null);var d=g.test(process.version)?function(a,b,c,d){return f(a,e(a,b,c,d))}:function(a,b,c,d){return f(a,b,e(a,b,c,d))};return d(a,b,c);function e(a,b,c,e){return function(f,g){f&&("EMFILE"===f.code||"ENFILE"===f.code)?o([d,[a,b,c],f,e||Date.now(),Date.now()]):(g&&g.sort&&g.sort(),"function"==typeof c&&c.call(this,f,g))}}};var g=/^v[0-5]\./;if("v0.8"===process.version.substr(0,4)){var j=i(a);q=j.ReadStream,r=j.WriteStream}var k=a.ReadStream;k&&(q.prototype=Object.create(k.prototype),q.prototype.open=function(){var a=this;t(a.path,a.flags,a.mode,function(b,c){b?(a.autoClose&&a.destroy(),a.emit("error",b)):(a.fd=c,a.emit("open",c),a.read())})});var l=a.WriteStream;l&&(r.prototype=Object.create(l.prototype),r.prototype.open=function(){var a=this;t(a.path,a.flags,a.mode,function(b,c){b?(a.destroy(),a.emit("error",b)):(a.fd=c,a.emit("open",c))})}),Object.defineProperty(a,"ReadStream",{get:function(){return q},set:function(a){q=a},enumerable:!0,configurable:!0}),Object.defineProperty(a,"WriteStream",{get:function(){return r},set:function(a){r=a},enumerable:!0,configurable:!0});var m=q;Object.defineProperty(a,"FileReadStream",{get:function(){return m},set:function(a){m=a},enumerable:!0,configurable:!0});var p=r;function q(a,b){return this instanceof q?(k.apply(this,arguments),this):q.apply(Object.create(q.prototype),arguments)}function r(a,b){return this instanceof r?(l.apply(this,arguments),this):r.apply(Object.create(r.prototype),arguments)}Object.defineProperty(a,"FileWriteStream",{get:function(){return p},set:function(a){p=a},enumerable:!0,configurable:!0});var s=a.open;function t(a,b,c,d){return"function"==typeof c&&(d=c,c=null),function a(b,c,d,e,f){return s(b,c,d,function(g,h){g&&("EMFILE"===g.code||"ENFILE"===g.code)?o([a,[b,c,d,e],g,f||Date.now(),Date.now()]):"function"==typeof e&&e.apply(this,arguments)})}(a,b,c,d)}return a.open=t,a}function o(a){m("ENQUEUE",a[0].name,a[1]),g[d].push(a),q()}function p(){for(var a=Date.now(),b=0;b<g[d].length;++b)g[d][b].length>2&&(g[d][b][3]=a,g[d][b][4]=a);q()}function q(){if(clearTimeout(f),f=void 0,0!==g[d].length){var a=g[d].shift(),b=a[0],c=a[1],e=a[2],h=a[3],i=a[4];if(void 0===h)m("RETRY",b.name,c),b.apply(null,c);else if(Date.now()-h>=6e4){m("TIMEOUT",b.name,c);var j=c.pop();"function"==typeof j&&j.call(null,e)}else Date.now()-i>=Math.min(1.2*Math.max(i-h,1),100)?(m("RETRY",b.name,c),b.apply(null,c.concat([h]))):g[d].push(a);void 0===f&&(f=setTimeout(q,0))}}k.debuglog?m=k.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(m=function(){var a=k.format.apply(k,arguments);console.error(a="GFS4: "+a.split(/\n/).join("\nGFS4: "))}),!g[d]&&(l(g,global[d]||[]),g.close=function(a){function b(b,c){return a.call(g,b,function(a){a||p(),"function"==typeof c&&c.apply(this,arguments)})}return Object.defineProperty(b,e,{value:a}),b}(g.close),g.closeSync=function(a){function b(b){a.apply(g,arguments),p()}return Object.defineProperty(b,e,{value:a}),b}(g.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){m(g[d]),c(12412).equal(g[d].length,0)})),global[d]||l(global,g[d]),a.exports=n(j(g)),process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!g.__patched&&(a.exports=n(g),g.__patched=!0)},96515:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{IR:()=>m,py:()=>l});var e=c(75430),f=c(80723),g=c(32982),h=a([e,f]);[e,f]=h.then?(await h)():h;let n=null;async function i(a,b){let c=Date.now();if(n&&c-n.at<6e4)return n.data;let d=await a.getAvailable(void 0,b?{signal:b}:void 0);return n={data:d,at:c},d}let o=new Set(["off","minimal","low","medium","high","xhigh","max"]);function j(a,b){return a.provider===b.provider&&a.id===b.modelId}function k(a,b){let c=a.toLowerCase(),d=b.filter(a=>`${a.provider}/${a.id}`.toLowerCase()===c);return d.length>0?d:b.filter(a=>a.id.toLowerCase()===c)}async function l(a,b,c={}){let d=(0,f.fr)().providers??{},h=new Set;for(let[a,b]of Object.entries(d)){let c=(0,g.du)(b);for(let[b,d]of Object.entries(c))!0===d.hidden&&h.add(`${a}/${b}`)}let j=await i(a,c.signal),m=(b??[]).map(a=>a.trim()).filter(Boolean),n=[],p=[],q={},r=[];if(0===m.length)n=j;else{!function(a,b){for(let c of a){if(c.includes("*")||c.includes("?")||c.includes("["))continue;let a=k(c,b);if(0===a.length){let d=c.lastIndexOf(":"),e=d>=0?c.slice(d+1):"";o.has(e)&&(a=k(c.slice(0,d),b))}if(a.length>1){let b=a.map(a=>`${a.provider}/${a.id}`).sort().join(", ");throw Error(`Ambiguous enabledModels entry "${c}" matches multiple models: ${b}. Use provider/modelId.`)}}}(m,j);let a=await (0,e.resolveModelScopeWithDiagnostics)(m,{getAvailable:async()=>j});for(let b of(p=a.scopedModels,n=a.scopedModels.length>0?a.scopedModels.map(a=>a.model):j,r.push(...a.diagnostics.map(a=>a.message)),p))b.thinkingLevel&&(q[`${b.model.provider}/${b.model.id}`]=b.thinkingLevel)}return c.includeHidden||(n=n.filter(a=>!h.has(`${a.provider}/${a.id}`))),{visible:n,scopedModels:c.includeHidden||n.length===p.length?p:p.filter(a=>!h.has(`${a.model.provider}/${a.model.id}`)),thinkingLevelPins:q,warnings:r}}function m(a,b={}){let c=b.requestedModel?a.visible.find(a=>j(a,b.requestedModel)):void 0;if(b.requestedModel&&!c)throw Error(`Model is not available in the enabled scope: ${b.requestedModel.provider}/${b.requestedModel.modelId}`);let d=c?a.scopedModels.find(a=>j(a.model,{provider:c.provider,modelId:c.id})):void 0,e=!c&&b.defaultModel?a.scopedModels.find(a=>j(a.model,b.defaultModel)):void 0,f=c?void 0:e??a.scopedModels[0],g=c||f||!b.defaultModel?void 0:a.visible.find(a=>j(a,b.defaultModel)),h=c??f?.model??g,i=d??f,k=b.thinkingLevel??i?.thinkingLevel;return{...h?{model:h}:{},...k?{thinkingLevel:k}:{},scopedModels:[...a.scopedModels]}}d()}catch(a){d(a)}})},97563:(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()}}};
|