@robota-sdk/agent-framework 3.0.0-beta.74 → 3.0.0-beta.76

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.
@@ -1,6 +1,6 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("@robota-sdk/agent-core"),l=require("@robota-sdk/agent-executor"),u=require("@robota-sdk/agent-tools"),d=require("zod"),f=require("@robota-sdk/agent-session"),p=require("node:crypto"),m=require("node:fs"),h=require("node:fs/promises"),g=require("node:path");g=s(g,1);let _=require("node:os"),v=require("fs"),y=require("path"),ee=require("node:url");const te=1e3;var ne=class{manager;now;idFactory;unsubscribeManager;listeners=new Set;groups=new Map;sequence=0;constructor(e){this.manager=e.manager,this.now=e.now??(()=>new Date().toISOString()),this.idFactory=e.idFactory??(()=>this.nextGroupId()),this.sequence=e.initialGroups?.length??0;for(let t of e.initialGroups??[])this.restoreGroup(t);this.unsubscribeManager=this.manager.subscribe(e=>this.handleTaskEvent(e))}createGroup(e){let t=this.now(),n={id:this.idFactory(e),parentSessionId:e.parentSessionId,waitPolicy:e.waitPolicy,taskIds:[...e.taskIds],status:`running`,createdAt:t,updatedAt:t,results:[],...e.label?{label:e.label}:{}},r=this.createRecord(n);return this.groups.set(n.id,r),this.captureExistingTerminalTasks(r),this.emit({type:`background_job_group_created`,group:x(r.state)}),this.evaluateCompletion(r),x(r.state)}listGroups(){return[...this.groups.values()].map(e=>x(e.state))}getGroup(e){let t=this.groups.get(e);return t?x(t.state):void 0}waitGroup(e){let t=this.groups.get(e);return t?t.completion:Promise.reject(Error(`Unknown background job group: ${e}`))}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}dispose(){this.unsubscribeManager(),this.listeners.clear()}nextGroupId(){return this.sequence+=1,`group_${this.sequence}`}restoreGroup(e){let t=this.createRecord(x(e));this.groups.set(e.id,t),e.status===`completed`&&t.resolve(x(e))}createRecord(e){let t=()=>{};return{state:e,completion:new Promise(e=>{t=e}),resolve:t}}captureExistingTerminalTasks(e){for(let t of e.state.taskIds){let n=this.manager.get(t);n&&(0,l.isTerminalBackgroundTaskStatus)(n.status)&&this.captureTask(e,n)}}handleTaskEvent(e){let t=re(e);if(t)for(let e of this.groups.values())e.state.taskIds.includes(t.id)&&this.captureTask(e,t)&&(e.state.status===`running`?this.evaluateCompletion(e):this.emit({type:`background_job_group_updated`,group:x(e.state)}))}captureTask(e,t){return e.state.results.some(e=>e.taskId===t.id)?!1:(e.state.results=[...e.state.results,ae(t)],e.state.updatedAt=this.now(),!0)}evaluateCompletion(e){if(e.state.status===`completed`)return;if(!ie(e.state)){this.emit({type:`background_job_group_updated`,group:x(e.state)});return}let t=this.now();e.state.status=`completed`,e.state.completedAt=t,e.state.updatedAt=t;let n=x(e.state);e.resolve(n),this.emit({type:`background_job_group_completed`,group:n})}emit(e){for(let t of this.listeners)t(e)}};function re(e){if(e.type===`background_task_completed`||e.type===`background_task_failed`||e.type===`background_task_cancelled`)return e.task}function ie(e){return e.waitPolicy===`manual`?!1:e.waitPolicy===`wait_any`?e.results.length>0:e.taskIds.every(t=>e.results.some(e=>e.taskId===t))}function ae(e){return{taskId:e.id,label:e.label,status:e.status,...e.result?.output?{summary:oe(e.result.output)}:{},...e.transcriptPath||e.logPath?{outputRef:e.transcriptPath??e.logPath}:{},...e.error?{error:{...e.error}}:{},...e.startedAt?{startedAt:e.startedAt}:{},...e.completedAt?{completedAt:e.completedAt}:{}}}function oe(e){let t=e.trim();return t.length<=te?t:`${t.slice(0,te)}...`}function se(e){let t=b(e,`completed`),n=b(e,`failed`),r=b(e,`cancelled`);return{groupId:e.id,status:e.status,total:e.taskIds.length,completed:t,failed:n,cancelled:r,pending:Math.max(e.taskIds.length-e.results.length,0),lines:e.results.map(e=>ce(e))}}function b(e,t){return e.results.filter(e=>e.status===t).length}function ce(e){let t=le(e),n=e.outputRef&&e.summary?` (output: ${e.outputRef})`:``;return`[${e.status}] ${e.label} ${e.taskId}: ${t}${n}`}function le(e){let t=(e.error?.message??e.summary??``).replace(/\s+/g,` `).trim();return t.length>0?t:`(no summary)`}function x(e){return{...e,taskIds:[...e.taskIds],results:e.results.map(e=>({...e,...e.error?{error:{...e.error}}:{}}))}}const S={kind:`executionOriginKind`,sessionId:`executionOriginSessionId`,turnId:`executionOriginTurnId`,commandName:`executionOriginCommandName`,toolCallId:`executionOriginToolCallId`,skillId:`executionOriginSkillId`,label:`executionOriginLabel`};function C(e){return[`main`,e].join(`:`)}function w(e){return[`task`,e].join(`:`)}function ue(e){return[`group`,e].join(`:`)}function de(e){let[t,n]=e.split(`:`,2);if(n){if(t===`main`)return{kind:`main_thread`,sourceId:n};if(t===`task`)return{kind:`background_task`,sourceId:n};if(t===`group`)return{kind:`background_group`,sourceId:n}}}function T(e){return{[S.kind]:e.kind,[S.sessionId]:e.sessionId,...e.turnId?{[S.turnId]:e.turnId}:{},...e.commandName?{[S.commandName]:e.commandName}:{},...e.toolCallId?{[S.toolCallId]:e.toolCallId}:{},...e.skillId?{[S.skillId]:e.skillId}:{},...e.label?{[S.label]:e.label}:{}}}function fe(e){let t=_e(e.groups),n=[pe(e.mainThread),...Oe(e.groups).map(e=>he(e)),...De(e.tasks).map(e=>me(e,t.get(e.id)))].filter(t=>Ee(t,e.filter));return{sessionId:e.sessionId,selectedEntryId:e.selectedEntryId??n.find(e=>e.kind===`main_thread`)?.id??C(e.sessionId),updatedAt:n[0]?.updatedAt??e.mainThread.updatedAt,entries:n}}function pe(e){return{id:C(e.sessionId),sourceId:e.sessionId,kind:`main_thread`,origin:{kind:`user_prompt`,sessionId:e.sessionId},status:e.isExecuting?`active`:`idle`,title:`Main thread`,subtitle:e.hasPendingPrompt?`prompt queued`:`${e.historyLength} history entries`,preview:E(e.preview),unread:!1,attention:`none`,visibility:`default`,updatedAt:e.updatedAt,controls:[`select`]}}function me(e,t){return{id:w(e.id),sourceId:e.id,kind:`background_task`,parentId:e.parentTaskId?w(e.parentTaskId):C(e.parentSessionId),...t?{groupId:ue(t)}:{},origin:ge(e.metadata,{kind:`system`,sessionId:e.parentSessionId}),taskKind:e.kind,status:e.status,title:e.label,subtitle:ye(e),preview:Se(e),currentAction:e.currentAction,unread:e.unread,attention:Ce(e),visibility:we(e),updatedAt:e.lastActivityAt??e.updatedAt,controls:ve(e)}}function he(e){let t=E(e.results.map(e=>e.summary??e.error?.message).join(` `));return{id:ue(e.id),sourceId:e.id,kind:`background_group`,parentId:C(e.parentSessionId),origin:{kind:`system`,sessionId:e.parentSessionId,label:e.label},status:e.status,title:e.label??e.id,subtitle:`${e.results.length}/${e.taskIds.length} tasks`,preview:t,unread:!1,attention:Te(e),visibility:e.status===`completed`?`collapsed`:`default`,updatedAt:e.updatedAt,controls:e.status===`running`?[`select`,`wait`]:[`select`]}}function ge(e,t){let n=ke(e?.[S.kind]),r=D(e?.[S.sessionId]);return{kind:n??t.kind,sessionId:r??t.sessionId,turnId:D(e?.[S.turnId])??t.turnId,commandName:D(e?.[S.commandName])??t.commandName,toolCallId:D(e?.[S.toolCallId])??t.toolCallId,skillId:D(e?.[S.skillId])??t.skillId,label:D(e?.[S.label])??t.label}}function _e(e){return new Map(e.flatMap(e=>e.taskIds.map(t=>[t,e.id])))}function ve(e){let t=[`select`];return(0,l.isTerminalBackgroundTaskStatus)(e.status)?t.push(`close`):t.push(`cancel`),e.kind===`agent`&&e.status===`running`&&t.push(`send`),(e.logPath||e.transcriptPath)&&t.push(`read_log`),t}function ye(e){if(e.kind===`agent`)return e.agentType??e.cwd;let t=e.schedule?.agentInstruction;if(e.status===`sleeping`&&e.nextFireAt!==void 0){let n=`next: ${xe(e.nextFireAt)}`;return t===void 0?n:`↻ wake "${be(t)}" · ${n}`}return e.cwd}function be(e){let t=e.trim();return t.length>32?`${t.slice(0,32)}…`:t}function xe(e){let t=new Date(e),n=new Date,r=t.getTime()-n.getTime();if(r<=0)return`now`;let i=Math.round(r/1e3);if(i<60)return`${i}s`;let a=Math.round(i/60);return a<60?`${a}m`:`${Math.round(a/60)}h`}function Se(e){return e.status===`failed`?E(e.error?.message):e.status===`completed`?E(e.result?.output):E(e.promptPreview??e.commandPreview)}function Ce(e){return e.status===`failed`?`failed`:e.status===`waiting_permission`?`permission`:e.unread?`unread`:e.status===`completed`?`completed`:`none`}function we(e){return e.status===`completed`&&!e.unread&&!e.error&&(e.result?.exitCode??0)===0&&!e.result?.signalCode&&!e.worktreePath&&!e.branchName?`collapsed`:`default`}function Te(e){return e.results.some(e=>e.status===`failed`)?`failed`:e.status===`completed`?`completed`:`none`}function Ee(e,t){return t?!(t.includeMainThread===!1&&e.kind===`main_thread`||t.kinds&&!t.kinds.includes(e.kind)||t.visibility&&!t.visibility.includes(e.visibility)):!0}function De(e){return[...e].sort((e,t)=>(t.lastActivityAt??t.updatedAt).localeCompare(e.lastActivityAt??e.updatedAt))}function Oe(e){return[...e].sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt))}function E(e){let t=e?.trim().replace(/\s+/g,` `);if(t)return t.length>120?`${t.slice(0,120)}...`:t}function D(e){return typeof e==`string`?e:void 0}function ke(e){if(e===`user_prompt`||e===`slash_command`||e===`model_command`||e===`tool_call`||e===`skill`||e===`transport`||e===`system`)return e}function Ae(e){let t=je(e.cursor?.offset),n=e.history.slice(t,t+80),r=n.map(e=>({id:e.id,kind:e.category===`chat`?`message`:`progress`,text:Me(e),timestamp:e.timestamp.toISOString(),sourceId:e.type}));return{entryId:e.entryId,...e.cursor?{cursor:e.cursor}:{},...t+n.length<e.history.length?{nextCursor:{offset:t+n.length}}:{},records:r}}function O(e){let t=e.cursor?.offset??0,n=e.lines.map((n,r)=>({id:`${e.entryId}:${t}:${r}`,kind:e.kind??`process_output`,text:n}));return{entryId:e.entryId,...e.cursor?{cursor:e.cursor}:{},...e.nextCursor?{nextCursor:e.nextCursor}:{},records:n}}function je(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):0}function Me(e){return typeof e.data==`string`?e.data:e.type}function Ne(e){return{spawnAgent:t=>e.manager.spawn(Pe(e,t)),spawnProcess:t=>e.manager.spawn(Fe(e,t)),createGroup:t=>e.groupOrchestrator.createGroup({parentSessionId:e.sessionId,waitPolicy:t.waitPolicy,taskIds:[...t.taskIds],label:t.label})}}function Pe(e,t){return{kind:`agent`,label:t.label,mode:t.mode??`background`,parentSessionId:e.sessionId,parentTaskId:t.parentTaskId,depth:t.depth??1,cwd:t.cwd??e.cwd,agentType:t.agentType,prompt:t.prompt,model:t.model,isolation:t.isolation,allowedTools:t.allowedTools?[...t.allowedTools]:void 0,disallowedTools:t.disallowedTools?[...t.disallowedTools]:void 0,permissionPolicy:t.permissionPolicy??`inherit-allowlist`,timeoutMs:t.timeoutMs,idleTimeoutMs:t.idleTimeoutMs,maxRuntimeMs:t.maxRuntimeMs,outputLimitBytes:t.outputLimitBytes,maxTextDeltas:t.maxTextDeltas,repetitionWindow:t.repetitionWindow,repetitionThreshold:t.repetitionThreshold,metadata:T(e.origin)}}function Fe(e,t){return{kind:`process`,label:t.label??t.command,mode:t.mode??`background`,parentSessionId:e.sessionId,parentTaskId:t.parentTaskId,depth:t.depth??0,cwd:t.cwd??e.cwd,command:t.command,shell:t.shell,env:t.env,stdin:t.stdin,timeoutMs:t.timeoutMs,idleTimeoutMs:t.idleTimeoutMs,maxRuntimeMs:t.maxRuntimeMs,outputLimitBytes:t.outputLimitBytes,metadata:T(e.origin)}}const Ie=new WeakMap;function Le(e,t){Ie.set(e,t)}function Re(e){return Ie.get(e)}function ze(e){let t=e.jobs.filter(e=>e.success),n=e.jobs.map(e=>e.agentId).filter(e=>typeof e==`string`&&e.length>0),r=e.jobs.filter(e=>!e.success).length;return JSON.stringify({success:e.jobs.every(e=>e.success),mode:`batch`,output:t.map(e=>e.output??``).filter(Boolean).join(`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("@robota-sdk/agent-core"),l=require("@robota-sdk/agent-executor"),u=require("@robota-sdk/agent-tools"),d=require("zod"),f=require("@robota-sdk/agent-session"),p=require("node:crypto"),m=require("node:fs"),h=require("node:fs/promises"),g=require("node:path");g=s(g,1);let _=require("node:os"),v=require("fs"),y=require("path"),ee=require("node:url");const te=1e3;var ne=class{manager;now;idFactory;unsubscribeManager;listeners=new Set;groups=new Map;sequence=0;constructor(e){this.manager=e.manager,this.now=e.now??(()=>new Date().toISOString()),this.idFactory=e.idFactory??(()=>this.nextGroupId()),this.sequence=e.initialGroups?.length??0;for(let t of e.initialGroups??[])this.restoreGroup(t);this.unsubscribeManager=this.manager.subscribe(e=>this.handleTaskEvent(e))}createGroup(e){let t=this.now(),n={id:this.idFactory(e),parentSessionId:e.parentSessionId,waitPolicy:e.waitPolicy,taskIds:[...e.taskIds],status:`running`,createdAt:t,updatedAt:t,results:[],...e.label?{label:e.label}:{}},r=this.createRecord(n);return this.groups.set(n.id,r),this.captureExistingTerminalTasks(r),this.emit({type:`background_job_group_created`,group:x(r.state)}),this.evaluateCompletion(r),x(r.state)}listGroups(){return[...this.groups.values()].map(e=>x(e.state))}getGroup(e){let t=this.groups.get(e);return t?x(t.state):void 0}waitGroup(e){let t=this.groups.get(e);return t?t.completion:Promise.reject(Error(`Unknown background job group: ${e}`))}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}dispose(){this.unsubscribeManager(),this.listeners.clear()}nextGroupId(){return this.sequence+=1,`group_${this.sequence}`}restoreGroup(e){let t=this.createRecord(x(e));this.groups.set(e.id,t),e.status===`completed`&&t.resolve(x(e))}createRecord(e){let t=()=>{};return{state:e,completion:new Promise(e=>{t=e}),resolve:t}}captureExistingTerminalTasks(e){for(let t of e.state.taskIds){let n=this.manager.get(t);n&&(0,l.isTerminalBackgroundTaskStatus)(n.status)&&this.captureTask(e,n)}}handleTaskEvent(e){let t=re(e);if(t)for(let e of this.groups.values())e.state.taskIds.includes(t.id)&&this.captureTask(e,t)&&(e.state.status===`running`?this.evaluateCompletion(e):this.emit({type:`background_job_group_updated`,group:x(e.state)}))}captureTask(e,t){return e.state.results.some(e=>e.taskId===t.id)?!1:(e.state.results=[...e.state.results,ae(t)],e.state.updatedAt=this.now(),!0)}evaluateCompletion(e){if(e.state.status===`completed`)return;if(!ie(e.state)){this.emit({type:`background_job_group_updated`,group:x(e.state)});return}let t=this.now();e.state.status=`completed`,e.state.completedAt=t,e.state.updatedAt=t;let n=x(e.state);e.resolve(n),this.emit({type:`background_job_group_completed`,group:n})}emit(e){for(let t of this.listeners)t(e)}};function re(e){if(e.type===`background_task_completed`||e.type===`background_task_failed`||e.type===`background_task_cancelled`)return e.task}function ie(e){return e.waitPolicy===`manual`?!1:e.waitPolicy===`wait_any`?e.results.length>0:e.taskIds.every(t=>e.results.some(e=>e.taskId===t))}function ae(e){return{taskId:e.id,label:e.label,status:e.status,...e.result?.output?{summary:oe(e.result.output)}:{},...e.transcriptPath||e.logPath?{outputRef:e.transcriptPath??e.logPath}:{},...e.error?{error:{...e.error}}:{},...e.startedAt?{startedAt:e.startedAt}:{},...e.completedAt?{completedAt:e.completedAt}:{}}}function oe(e){let t=e.trim();return t.length<=te?t:`${t.slice(0,te)}...`}function se(e){let t=b(e,`completed`),n=b(e,`failed`),r=b(e,`cancelled`);return{groupId:e.id,status:e.status,total:e.taskIds.length,completed:t,failed:n,cancelled:r,pending:Math.max(e.taskIds.length-e.results.length,0),lines:e.results.map(e=>ce(e))}}function b(e,t){return e.results.filter(e=>e.status===t).length}function ce(e){let t=le(e),n=e.outputRef&&e.summary?` (output: ${e.outputRef})`:``;return`[${e.status}] ${e.label} ${e.taskId}: ${t}${n}`}function le(e){let t=(e.error?.message??e.summary??``).replace(/\s+/g,` `).trim();return t.length>0?t:`(no summary)`}function x(e){return{...e,taskIds:[...e.taskIds],results:e.results.map(e=>({...e,...e.error?{error:{...e.error}}:{}}))}}const S={kind:`executionOriginKind`,sessionId:`executionOriginSessionId`,turnId:`executionOriginTurnId`,commandName:`executionOriginCommandName`,toolCallId:`executionOriginToolCallId`,skillId:`executionOriginSkillId`,label:`executionOriginLabel`};function C(e){return[`main`,e].join(`:`)}function w(e){return[`task`,e].join(`:`)}function T(e){return[`group`,e].join(`:`)}function ue(e){let[t,n]=e.split(`:`,2);if(n){if(t===`main`)return{kind:`main_thread`,sourceId:n};if(t===`task`)return{kind:`background_task`,sourceId:n};if(t===`group`)return{kind:`background_group`,sourceId:n}}}function E(e){return{[S.kind]:e.kind,[S.sessionId]:e.sessionId,...e.turnId?{[S.turnId]:e.turnId}:{},...e.commandName?{[S.commandName]:e.commandName}:{},...e.toolCallId?{[S.toolCallId]:e.toolCallId}:{},...e.skillId?{[S.skillId]:e.skillId}:{},...e.label?{[S.label]:e.label}:{}}}function de(e){let t=ge(e.groups),n=[fe(e.mainThread),...De(e.groups).map(e=>me(e)),...Ee(e.tasks).map(e=>pe(e,t.get(e.id)))].filter(t=>Te(t,e.filter));return{sessionId:e.sessionId,selectedEntryId:e.selectedEntryId??n.find(e=>e.kind===`main_thread`)?.id??C(e.sessionId),updatedAt:n[0]?.updatedAt??e.mainThread.updatedAt,entries:n}}function fe(e){return{id:C(e.sessionId),sourceId:e.sessionId,kind:`main_thread`,origin:{kind:`user_prompt`,sessionId:e.sessionId},status:e.isExecuting?`active`:`idle`,title:`Main thread`,subtitle:e.hasPendingPrompt?`prompt queued`:`${e.historyLength} history entries`,preview:D(e.preview),unread:!1,attention:`none`,visibility:`default`,updatedAt:e.updatedAt,controls:[`select`]}}function pe(e,t){return{id:w(e.id),sourceId:e.id,kind:`background_task`,parentId:e.parentTaskId?w(e.parentTaskId):C(e.parentSessionId),...t?{groupId:T(t)}:{},origin:he(e.metadata,{kind:`system`,sessionId:e.parentSessionId}),taskKind:e.kind,status:e.status,title:e.label,subtitle:ve(e),preview:xe(e),currentAction:e.currentAction,unread:e.unread,attention:Se(e),visibility:Ce(e),updatedAt:e.lastActivityAt??e.updatedAt,controls:_e(e)}}function me(e){let t=D(e.results.map(e=>e.summary??e.error?.message).join(` `));return{id:T(e.id),sourceId:e.id,kind:`background_group`,parentId:C(e.parentSessionId),origin:{kind:`system`,sessionId:e.parentSessionId,label:e.label},status:e.status,title:e.label??e.id,subtitle:`${e.results.length}/${e.taskIds.length} tasks`,preview:t,unread:!1,attention:we(e),visibility:e.status===`completed`?`collapsed`:`default`,updatedAt:e.updatedAt,controls:e.status===`running`?[`select`,`wait`]:[`select`]}}function he(e,t){let n=Oe(e?.[S.kind]),r=O(e?.[S.sessionId]);return{kind:n??t.kind,sessionId:r??t.sessionId,turnId:O(e?.[S.turnId])??t.turnId,commandName:O(e?.[S.commandName])??t.commandName,toolCallId:O(e?.[S.toolCallId])??t.toolCallId,skillId:O(e?.[S.skillId])??t.skillId,label:O(e?.[S.label])??t.label}}function ge(e){return new Map(e.flatMap(e=>e.taskIds.map(t=>[t,e.id])))}function _e(e){let t=[`select`];return(0,l.isTerminalBackgroundTaskStatus)(e.status)?t.push(`close`):t.push(`cancel`),e.kind===`agent`&&e.status===`running`&&t.push(`send`),(e.logPath||e.transcriptPath)&&t.push(`read_log`),t}function ve(e){if(e.kind===`agent`)return e.agentType??e.cwd;let t=e.schedule?.agentInstruction;if(e.status===`sleeping`&&e.nextFireAt!==void 0){let n=`next: ${be(e.nextFireAt)}`;return t===void 0?n:`↻ wake "${ye(t)}" · ${n}`}return e.cwd}function ye(e){let t=e.trim();return t.length>32?`${t.slice(0,32)}…`:t}function be(e){let t=new Date(e),n=new Date,r=t.getTime()-n.getTime();if(r<=0)return`now`;let i=Math.round(r/1e3);if(i<60)return`${i}s`;let a=Math.round(i/60);return a<60?`${a}m`:`${Math.round(a/60)}h`}function xe(e){return e.status===`failed`?D(e.error?.message):e.status===`completed`?D(e.result?.output):D(e.promptPreview??e.commandPreview)}function Se(e){return e.status===`failed`?`failed`:e.status===`waiting_permission`?`permission`:e.unread?`unread`:e.status===`completed`?`completed`:`none`}function Ce(e){return e.status===`completed`&&!e.unread&&!e.error&&(e.result?.exitCode??0)===0&&!e.result?.signalCode&&!e.worktreePath&&!e.branchName?`collapsed`:`default`}function we(e){return e.results.some(e=>e.status===`failed`)?`failed`:e.status===`completed`?`completed`:`none`}function Te(e,t){return t?!(t.includeMainThread===!1&&e.kind===`main_thread`||t.kinds&&!t.kinds.includes(e.kind)||t.visibility&&!t.visibility.includes(e.visibility)):!0}function Ee(e){return[...e].sort((e,t)=>(t.lastActivityAt??t.updatedAt).localeCompare(e.lastActivityAt??e.updatedAt))}function De(e){return[...e].sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt))}function D(e){let t=e?.trim().replace(/\s+/g,` `);if(t)return t.length>120?`${t.slice(0,120)}...`:t}function O(e){return typeof e==`string`?e:void 0}function Oe(e){if(e===`user_prompt`||e===`slash_command`||e===`model_command`||e===`tool_call`||e===`skill`||e===`transport`||e===`system`)return e}function ke(e){let t=je(e.cursor?.offset),n=e.history.slice(t,t+80),r=n.map(e=>({id:e.id,kind:e.category===`chat`?`message`:`progress`,text:Me(e),timestamp:e.timestamp.toISOString(),sourceId:e.type}));return{entryId:e.entryId,...e.cursor?{cursor:e.cursor}:{},...t+n.length<e.history.length?{nextCursor:{offset:t+n.length}}:{},records:r}}function Ae(e){let t=e.cursor?.offset??0,n=e.lines.map((n,r)=>({id:`${e.entryId}:${t}:${r}`,kind:e.kind??`process_output`,text:n}));return{entryId:e.entryId,...e.cursor?{cursor:e.cursor}:{},...e.nextCursor?{nextCursor:e.nextCursor}:{},records:n}}function je(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):0}function Me(e){return typeof e.data==`string`?e.data:e.type}function Ne(e){return{spawnAgent:t=>e.manager.spawn(Pe(e,t)),spawnProcess:t=>e.manager.spawn(Fe(e,t)),createGroup:t=>e.groupOrchestrator.createGroup({parentSessionId:e.sessionId,waitPolicy:t.waitPolicy,taskIds:[...t.taskIds],label:t.label})}}function Pe(e,t){return{kind:`agent`,label:t.label,mode:t.mode??`background`,parentSessionId:e.sessionId,parentTaskId:t.parentTaskId,depth:t.depth??1,cwd:t.cwd??e.cwd,agentType:t.agentType,prompt:t.prompt,model:t.model,isolation:t.isolation,allowedTools:t.allowedTools?[...t.allowedTools]:void 0,disallowedTools:t.disallowedTools?[...t.disallowedTools]:void 0,permissionPolicy:t.permissionPolicy??`inherit-allowlist`,timeoutMs:t.timeoutMs,idleTimeoutMs:t.idleTimeoutMs,maxRuntimeMs:t.maxRuntimeMs,outputLimitBytes:t.outputLimitBytes,maxTextDeltas:t.maxTextDeltas,repetitionWindow:t.repetitionWindow,repetitionThreshold:t.repetitionThreshold,metadata:E(e.origin)}}function Fe(e,t){return{kind:`process`,label:t.label??t.command,mode:t.mode??`background`,parentSessionId:e.sessionId,parentTaskId:t.parentTaskId,depth:t.depth??0,cwd:t.cwd??e.cwd,command:t.command,shell:t.shell,env:t.env,stdin:t.stdin,timeoutMs:t.timeoutMs,idleTimeoutMs:t.idleTimeoutMs,maxRuntimeMs:t.maxRuntimeMs,outputLimitBytes:t.outputLimitBytes,metadata:E(e.origin)}}const Ie=new WeakMap;function Le(e,t){Ie.set(e,t)}function Re(e){return Ie.get(e)}function ze(e){let t=e.jobs.filter(e=>e.success),n=e.jobs.map(e=>e.agentId).filter(e=>typeof e==`string`&&e.length>0),r=e.jobs.filter(e=>!e.success).length;return JSON.stringify({success:e.jobs.every(e=>e.success),mode:`batch`,output:t.map(e=>e.output??``).filter(Boolean).join(`
2
2
 
3
- `),groupId:e.groupId,requestedJobCount:e.requestedJobCount,startedJobCount:n.length,failedJobCount:r,agentIds:n,jobs:e.jobs,provenance:{source:`agent-tool-batch`,groupId:e.groupId,requestedJobCount:e.requestedJobCount,startedJobCount:n.length,failedJobCount:r}})}function Be(){return`agent_group_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}function Ve(e,t){let n=e?.trim();return n&&n.length>0?n:t}function He(e,t,n){let r=e.subagent_type??`general-purpose`,i=n.resolveAgentDefinition(r,n.deps.customAgentRegistry);return{index:t,job:e,agentType:r,agentDef:i,label:Ve(e.label,i?.name??r)}}function Ue(e){return e.agentDef!==void 0}function We(e,t){return{index:e.index,success:!1,groupId:t,label:e.label,subagent_type:e.agentType,prompt:e.job.prompt,error:`Unknown agent type: ${e.agentType}`}}async function Ge(e,t){try{let n=await t.manager.spawn(t.createSpawnRequest(e.job,e.agentType,e.agentDef,t.deps,e.label,t.toolCallId));return{...e,agentId:n.id}}catch(t){let n=t instanceof Error?t.message:String(t);return{...e,spawnError:n}}}function Ke(e,t){return{index:e.index,success:!1,groupId:t,label:e.label,subagent_type:e.agentType,prompt:e.job.prompt,error:`Sub-agent error: ${e.spawnError??`missing agent id`}`}}function qe(e,t,n){return{index:e.index,success:!0,groupId:t,label:e.label,agentId:n.jobId,subagent_type:e.agentType,prompt:e.job.prompt,output:n.output,metadata:n.metadata}}function Je(e,t,n){return{index:e.index,success:!1,groupId:t,label:e.label,agentId:e.agentId,subagent_type:e.agentType,prompt:e.job.prompt,error:`Sub-agent error: ${n}`}}async function Ye(e,t,n){if(e.agentId===void 0)return Ke(e,t);try{let r=await n.wait(e.agentId);return qe({...e,agentId:e.agentId},t,r)}catch(n){let r=n instanceof Error?n.message:String(n);return Je({...e,agentId:e.agentId},t,r)}}async function Xe(e){let t=Be(),n=e.jobs.map((t,n)=>He(t,n,e)),r=n.filter(e=>!Ue(e)).map(e=>We(e,t)),i=await Promise.all(n.filter(Ue).map(t=>Ge(t,e))),a=await Promise.all(i.map(n=>Ye(n,t,e.manager))),o=[...r,...a].sort((e,t)=>e.index-t.index);return ze({groupId:t,requestedJobCount:e.jobs.length,jobs:o})}function Ze(e){return JSON.stringify({success:!1,mode:`single`,requestedJobCount:1,startedJobCount:0,failedJobCount:1,output:``,error:`Unknown agent type: ${e}`,provenance:{source:`agent-tool-single`,requestedJobCount:1,startedJobCount:0,failedJobCount:1}})}function Qe(e){let t=e.metadata?.worktreePath,n=e.metadata?.branchName,r=e.metadata?.worktreeStatus,i=e.metadata?.worktreeNextAction;return JSON.stringify({success:!0,mode:`single`,requestedJobCount:1,startedJobCount:1,failedJobCount:0,output:e.output,agentId:e.jobId,agentIds:[e.jobId],provenance:{source:`agent-tool-single`,requestedJobCount:1,startedJobCount:1,failedJobCount:0},metadata:e.metadata,...typeof t==`string`?{worktreePath:t}:{},...typeof n==`string`?{branchName:n}:{},...typeof r==`string`?{worktreeStatus:r}:{},...typeof i==`string`?{worktreeNextAction:i}:{}})}function $e(e,t){let n=t===void 0?0:1;return JSON.stringify({success:!1,mode:`single`,requestedJobCount:1,startedJobCount:n,failedJobCount:1,output:``,error:`Sub-agent error: ${e}`,agentId:t,...t===void 0?{}:{agentIds:[t]},provenance:{source:`agent-tool-single`,requestedJobCount:1,startedJobCount:n,failedJobCount:1}})}const et=[{name:`general-purpose`,description:`General-purpose task execution agent with full tool access.`,systemPrompt:`You are a general-purpose task execution agent. You have access to all tools available in the parent session and can perform any task delegated to you.
3
+ `),groupId:e.groupId,requestedJobCount:e.requestedJobCount,startedJobCount:n.length,failedJobCount:r,agentIds:n,jobs:e.jobs,provenance:{source:`agent-tool-batch`,groupId:e.groupId,requestedJobCount:e.requestedJobCount,startedJobCount:n.length,failedJobCount:r}})}function Be(){return`agent_group_${Date.now()}_${Math.random().toString(36).slice(2,10)}`}function Ve(e,t){let n=e?.trim();return n&&n.length>0?n:t}function He(e,t,n){let r=e.subagent_type??`general-purpose`,i=n.resolveAgentDefinition(r,n.deps.customAgentRegistry);return{index:t,job:e,agentType:r,agentDef:i,label:Ve(e.label,i?.name??r)}}function Ue(e){return e.agentDef!==void 0}function We(e,t){return{index:e.index,success:!1,groupId:t,label:e.label,subagent_type:e.agentType,prompt:e.job.prompt,error:`Unknown agent type: ${e.agentType}`}}async function Ge(e,t){try{let n=await t.manager.spawn(t.createSpawnRequest(e.job,e.agentType,e.agentDef,t.deps,e.label,t.toolCallId));return{...e,agentId:n.id}}catch(t){let n=t instanceof Error?t.message:String(t);return{...e,spawnError:n}}}function Ke(e,t){return{index:e.index,success:!1,groupId:t,label:e.label,subagent_type:e.agentType,prompt:e.job.prompt,error:`Sub-agent error: ${e.spawnError??`missing agent id`}`}}function qe(e,t,n){return{index:e.index,success:!0,groupId:t,label:e.label,agentId:n.jobId,subagent_type:e.agentType,prompt:e.job.prompt,output:n.output,metadata:n.metadata}}function Je(e,t,n){return{index:e.index,success:!1,groupId:t,label:e.label,agentId:e.agentId,subagent_type:e.agentType,prompt:e.job.prompt,error:`Sub-agent error: ${n}`}}async function Ye(e,t,n){if(e.agentId===void 0)return Ke(e,t);try{let r=await n.wait(e.agentId);return qe({...e,agentId:e.agentId},t,r)}catch(n){let r=n instanceof Error?n.message:String(n);return Je({...e,agentId:e.agentId},t,r)}}async function Xe(e){let t=Be(),n=e.jobs.map((t,n)=>He(t,n,e)),r=n.filter(e=>!Ue(e)).map(e=>We(e,t)),i=await Promise.all(n.filter(Ue).map(t=>Ge(t,e))),a=await Promise.all(i.map(n=>Ye(n,t,e.manager))),o=[...r,...a].sort((e,t)=>e.index-t.index);return ze({groupId:t,requestedJobCount:e.jobs.length,jobs:o})}function Ze(e){return JSON.stringify({success:!1,mode:`single`,requestedJobCount:1,startedJobCount:0,failedJobCount:1,output:``,error:`Unknown agent type: ${e}`,provenance:{source:`agent-tool-single`,requestedJobCount:1,startedJobCount:0,failedJobCount:1}})}function Qe(){return JSON.stringify({success:!1,mode:`single`,requestedJobCount:0,startedJobCount:0,failedJobCount:0,output:``,error:`Parallel subagents are disabled for the active preset.`,provenance:{source:`agent-tool-single`,requestedJobCount:0,startedJobCount:0,failedJobCount:0}})}function $e(e){let t=e.metadata?.worktreePath,n=e.metadata?.branchName,r=e.metadata?.worktreeStatus,i=e.metadata?.worktreeNextAction;return JSON.stringify({success:!0,mode:`single`,requestedJobCount:1,startedJobCount:1,failedJobCount:0,output:e.output,agentId:e.jobId,agentIds:[e.jobId],provenance:{source:`agent-tool-single`,requestedJobCount:1,startedJobCount:1,failedJobCount:0},metadata:e.metadata,...typeof t==`string`?{worktreePath:t}:{},...typeof n==`string`?{branchName:n}:{},...typeof r==`string`?{worktreeStatus:r}:{},...typeof i==`string`?{worktreeNextAction:i}:{}})}function et(e,t){let n=t===void 0?0:1;return JSON.stringify({success:!1,mode:`single`,requestedJobCount:1,startedJobCount:n,failedJobCount:1,output:``,error:`Sub-agent error: ${e}`,agentId:t,...t===void 0?{}:{agentIds:[t]},provenance:{source:`agent-tool-single`,requestedJobCount:1,startedJobCount:n,failedJobCount:1}})}const tt=[{name:`general-purpose`,description:`General-purpose task execution agent with full tool access.`,systemPrompt:`You are a general-purpose task execution agent. You have access to all tools available in the parent session and can perform any task delegated to you.
4
4
 
5
5
  Your role is to complete the assigned task thoroughly and accurately. Follow these guidelines:
6
6
 
@@ -33,70 +33,78 @@ Your role is to:
33
33
  - Produce a structured implementation plan with clear steps, file lists, and ordering.
34
34
  - Consider edge cases, error handling, and test coverage requirements.
35
35
 
36
- Output your plan in a structured format with numbered steps. For each step, specify which files are involved and what changes are needed. Flag any decisions that require human judgment or clarification.`,disallowedTools:[`Write`,`Edit`]}];function k(e){return et.find(t=>t.name===e)}function tt(){return`When you complete the task, respond with a concise report covering what was done and any key findings — the caller will relay this to the user, so it only needs the essentials.
36
+ Output your plan in a structured format with numbered steps. For each step, specify which files are involved and what changes are needed. Flag any decisions that require human judgment or clarification.`,disallowedTools:[`Write`,`Edit`]}];function k(e){return tt.find(t=>t.name===e)}function nt(){return`When you complete the task, respond with a concise report covering what was done and any key findings — the caller will relay this to the user, so it only needs the essentials.
37
37
 
38
38
  In your final response, share file paths (always absolute, never relative) that are relevant to the task. Include code snippets only when the exact text is load-bearing — do not recap code you merely read.
39
39
 
40
- Do not use emojis.`}function nt(){return`You are a worker subagent executing a specific task. Do NOT spawn sub-agents; execute directly. Keep your report under 500 words. Use this structure:
40
+ Do not use emojis.`}function rt(){return`You are a worker subagent executing a specific task. Do NOT spawn sub-agents; execute directly. Keep your report under 500 words. Use this structure:
41
41
  - Scope: What was requested
42
42
  - Result: What was done
43
43
  - Key files: Relevant file paths (absolute)
44
44
  - Files changed: List of modifications
45
- - Issues: Any problems encountered`}function rt(e){let t=[e.agentBody];e.claudeMd&&t.push(e.claudeMd),e.agentsMd&&t.push(e.agentsMd);let n=e.isForkWorker?nt():tt();return t.push(n),t.join(`
45
+ - Issues: Any problems encountered`}function it(e){let t=[e.agentBody];e.claudeMd&&t.push(e.claudeMd),e.agentsMd&&t.push(e.agentsMd);let n=e.isForkWorker?rt():nt();return t.push(n),t.join(`
46
46
 
47
- `)}const it=`robota_command_`,at=/^[A-Za-z0-9_-]{1,64}$/;function ot(e){return e}function A(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function st(e){let t=A(e);if(!t)throw Error(`Model command descriptor name must not be empty.`);let n=t.replace(/[^A-Za-z0-9_-]/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``);if(!n)throw Error(`Model command descriptor name cannot be projected safely: ${e}`);let r=`${it}${n}`;if(at.test(r))return r;let i=(0,p.createHash)(`sha256`).update(t).digest(`hex`).slice(0,8),a=`${it}${n.slice(0,40).replace(/[_-]+$/g,``)||`command`}_${i}`;if(!at.test(a))throw Error(`Projected model command tool name is not provider-safe: ${a}`);return a}function ct(e){let t=new Set,n=new Map,r=new Map,i=[];for(let a of e){let e=A(a.name);if(!e)throw Error(`Model command descriptor name must not be empty.`);if(t.has(e))throw Error(`Duplicate model command descriptor: ${e}`);t.add(e);let o=st(e),s=n.get(o);if(s!==void 0)throw Error(`Model command projection collision: ${s} and ${e} both map to ${o}`);n.set(o,e),r.set(e,o),i.push({commandName:e,toolName:o,description:pt(e,a),descriptor:a,requiresPermission:a.requiresPermission!==!1})}return{commandTools:i,toolNameToCommandName:n,commandNameToToolName:r}}function lt(e){return`${e.toolName} — ${e.descriptor.description}`}function ut(e,t){return JSON.stringify(t?{success:t.success,command:e,message:t.message,data:t.data}:{success:!1,command:e,error:`Unknown command: ${e}`})}function dt(e){return ct(e.commandDescriptors).commandTools.map(t=>{let n=ft(t.descriptor);return(0,u.createZodFunctionTool)(t.toolName,t.description,ot(n),async r=>{let i=n.parse(r);return e.isModelInvocable(t.commandName)?ut(t.commandName,await e.execute(t.commandName,i.args??``)):JSON.stringify({success:!1,command:t.commandName,error:`Command is not model-invocable: ${t.commandName}`})})})}function ft(e){let t=e.argumentHint?`Arguments for the command. Expected grammar: ${e.argumentHint}`:`Arguments for the command as a single string.`;return d.z.object({args:d.z.string().optional().describe(t)})}function pt(e,t){let n=[t.description.trim(),`Robota command id: ${e}.`];return t.argumentHint&&n.push(`Argument grammar: ${t.argumentHint}`),n.filter(e=>e.length>0).join(`
47
+ `)}const at=`robota_command_`,ot=/^[A-Za-z0-9_-]{1,64}$/;function st(e){return e}function A(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function ct(e){let t=A(e);if(!t)throw Error(`Model command descriptor name must not be empty.`);let n=t.replace(/[^A-Za-z0-9_-]/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``);if(!n)throw Error(`Model command descriptor name cannot be projected safely: ${e}`);let r=`${at}${n}`;if(ot.test(r))return r;let i=(0,p.createHash)(`sha256`).update(t).digest(`hex`).slice(0,8),a=`${at}${n.slice(0,40).replace(/[_-]+$/g,``)||`command`}_${i}`;if(!ot.test(a))throw Error(`Projected model command tool name is not provider-safe: ${a}`);return a}function lt(e){let t=new Set,n=new Map,r=new Map,i=[];for(let a of e){let e=A(a.name);if(!e)throw Error(`Model command descriptor name must not be empty.`);if(t.has(e))throw Error(`Duplicate model command descriptor: ${e}`);t.add(e);let o=ct(e),s=n.get(o);if(s!==void 0)throw Error(`Model command projection collision: ${s} and ${e} both map to ${o}`);n.set(o,e),r.set(e,o),i.push({commandName:e,toolName:o,description:mt(e,a),descriptor:a,requiresPermission:a.requiresPermission!==!1})}return{commandTools:i,toolNameToCommandName:n,commandNameToToolName:r}}function ut(e){return`${e.toolName} — ${e.descriptor.description}`}function dt(e,t){return JSON.stringify(t?{success:t.success,command:e,message:t.message,data:t.data}:{success:!1,command:e,error:`Unknown command: ${e}`})}function ft(e){return lt(e.commandDescriptors).commandTools.map(t=>{let n=pt(t.descriptor);return(0,u.createZodFunctionTool)(t.toolName,t.description,st(n),async r=>{let i=n.parse(r);return e.isModelInvocable(t.commandName)?dt(t.commandName,await e.execute(t.commandName,i.args??``)):JSON.stringify({success:!1,command:t.commandName,error:`Command is not model-invocable: ${t.commandName}`})})})}function pt(e){let t=e.argumentHint?`Arguments for the command. Expected grammar: ${e.argumentHint}`:`Arguments for the command as a single string.`;return d.z.object({args:d.z.string().optional().describe(t)})}function mt(e,t){let n=[t.description.trim(),`Robota command id: ${e}.`];return t.argumentHint&&n.push(`Argument grammar: ${t.argumentHint}`),n.filter(e=>e.length>0).join(`
48
48
 
49
- `)}const mt={sonnet:`claude-sonnet-4-6`,haiku:`claude-haiku-4-5`,opus:`claude-opus-4-6`},ht=st(`agent`);function gt(e,t){return mt[e]??e}function _t(e,t){let n=[...e];if(t.disallowedTools){let e=new Set(t.disallowedTools);n=n.filter(t=>!e.has(t.getName()))}if(t.tools){let e=new Set(t.tools);n=n.filter(t=>e.has(t.getName()))}return n=n.filter(e=>e.getName()!==`Agent`&&e.getName()!==ht),n}function vt(e){let{agentDefinition:t,parentConfig:n,parentContext:r,parentTools:i,terminal:a}=e,o=_t(i,t),s=t.model?gt(t.model,n.provider.model):n.provider.model,c=rt({agentBody:t.systemPrompt,claudeMd:r.claudeMd,agentsMd:r.agentsMd,isForkWorker:e.isForkWorker??!1}),l=e.provider;return new f.Session({tools:o,provider:l,systemMessage:c,terminal:a,...e.sessionId===void 0?{}:{sessionId:e.sessionId},...e.sessionLogger===void 0?{}:{sessionLogger:e.sessionLogger},model:s,maxTurns:t.maxTurns,permissions:n.permissions,permissionMode:e.permissionMode,defaultTrustLevel:n.defaultTrustLevel,permissionHandler:e.permissionHandler,hooks:e.hooks,hookTypeExecutors:e.hookTypeExecutors,onTextDelta:e.onTextDelta,onToolExecution:e.onToolExecution})}function yt(e,t){let n=t?.(e)??k(e);if(!n)throw Error(`Unknown agent type: ${e}`);return n}function bt(e,t){return{...e,...t.request.model?{model:t.request.model}:{},...t.request.allowedTools?{tools:t.request.allowedTools}:{},...t.request.disallowedTools?{disallowedTools:t.request.disallowedTools}:{}}}function xt(e){if(!e)return;let t=Object.values(e)[0];if(t!==void 0)return typeof t==`object`?JSON.stringify(t):String(t)}function St(e){if(e.request.isolation===`worktree`)throw Error(`Worktree isolation requires a runtime shell subagent runner`)}function Ct(e,t){if(t.type===`start`){e.emit?.({type:`background_task_tool_start`,toolName:t.toolName,firstArg:xt(t.toolArgs)});return}e.emit?.({type:`background_task_tool_end`,toolName:t.toolName,success:t.success??!0})}function wt(e){return{start(t){St(t);let n=vt({agentDefinition:bt(yt(t.request.type,e.customAgentRegistry),t),parentConfig:e.config,parentContext:e.context,parentTools:e.tools,provider:e.provider,terminal:e.terminal,permissionMode:e.permissionMode,permissionHandler:e.permissionHandler,hooks:e.hooks,hookTypeExecutors:e.hookTypeExecutors,onTextDelta:n=>{t.emit?.({type:`background_task_text_delta`,delta:n}),e.onTextDelta?.(n)},onToolExecution:n=>{Ct(t,n),e.onToolExecution?.(n)}});return{jobId:t.jobId,result:n.run(t.request.prompt).then(e=>({jobId:t.jobId,output:e})),cancel:()=>(n.abort(),Promise.resolve())}}}}const Tt=[`Creates delegated subagent jobs in isolated contexts.`,`Without jobs, one tool call creates one subagent job from prompt.`,`For explicit multi-agent or parallel-agent requests, use one Agent tool call with jobs containing one entry per requested role and a stable label for each role.`,`When the user explicitly asks to create, run, spawn, delegate to, or use agents/subagents, start the requested subagent job immediately.`,`Do not ask a follow-up question unless execution is impossible or unsafe.`,`Subagent jobs run as background tasks by default.`,`The tool waits for a terminal result and returns completed, failed, or timed-out outcome data with structured requested/started job counts.`,`After the tool returns, base user-facing claims on returned mode and counts; do not say parallel or multiple jobs started unless the result proves those jobs started.`,`Execution is represented by a real tool call and runtime background task event.`].join(` `);function Et(e){return e}const Dt=d.z.object({prompt:d.z.string().optional().describe(`The task for a single subagent to perform. Required when jobs is omitted.`),subagent_type:d.z.string().optional().describe(`Agent type: "general-purpose", "Explore", "Plan", or a custom agent name`),model:d.z.string().optional().describe(`Optional model override`),isolation:d.z.enum([`none`,`worktree`]).optional().describe(`Optional runtime isolation mode. "worktree" runs in a Git worktree.`),jobs:d.z.array(d.z.object({label:d.z.string().optional().describe(`Stable role label for this batch job`),prompt:d.z.string().describe(`The task for this subagent to perform`),subagent_type:d.z.string().optional().describe(`Agent type for this job`),model:d.z.string().optional().describe(`Optional model override for this job`),isolation:d.z.enum([`none`,`worktree`]).optional().describe(`Isolation for this job`)}).passthrough()).optional().describe(`Batch of subagent jobs to start in one Agent tool call`)}).passthrough(),Ot=new WeakMap;function kt(e,t){Ot.set(e,t)}function j(e){return Ot.get(e)}function At(e,t){if(t){let n=t(e);if(n)return n}let n=k(e);if(n)return n}function jt(e){return e.subagentManager??new l.SubagentManager({runner:wt(e)})}function Mt(e,t,n,r,i=n.name,a){return{type:t,label:i,parentSessionId:r.parentSessionId??`unknown-session`,mode:`background`,depth:r.subagentDepth??1,cwd:r.cwd??process.cwd(),prompt:e.prompt,model:e.model,isolation:e.isolation,metadata:T({kind:`tool_call`,sessionId:r.parentSessionId??`unknown-session`,label:i,...a?{toolCallId:a}:{}})}}async function Nt(e,t,n,r){if(typeof e.prompt!=`string`||e.prompt.length===0)return $e(`prompt is required when jobs is omitted`);let i={...e,prompt:e.prompt},a=e.subagent_type??`general-purpose`,o=At(a,t.customAgentRegistry);if(!o)return Ze(a);let s;try{let e=await n.spawn(Mt(i,a,o,t,void 0,r));return s=e.id,Qe(await n.wait(e.id))}catch(e){return $e(e instanceof Error?e.message:String(e),s)}}function Pt(e){let t=jt(e);return(0,u.createZodFunctionTool)(`Agent`,Tt,Et(Dt),async(n,r)=>{let i=n,a=r?.executionId;return Array.isArray(i.jobs)&&i.jobs.length>0?Xe({jobs:i.jobs,deps:e,manager:t,resolveAgentDefinition:At,createSpawnRequest:Mt,toolCallId:a}):Nt({prompt:i.prompt,...i.subagent_type===void 0?{}:{subagent_type:i.subagent_type},...i.model===void 0?{}:{model:i.model},...i.isolation===void 0?{}:{isolation:i.isolation}},e,t,a)})}var Ft=class{getManager;onChanged;emitTaskEvent;emitGroupEvent;persistSession;onWake;appendSystemNote;backgroundTasks=[];backgroundTaskEvents=[];backgroundJobGroups=[];backgroundJobGroupEvents=[];backgroundTaskUnsubscribe=null;backgroundJobUnsubscribe=null;backgroundJobOrchestrator=null;constructor(e,t,n,r,i,a,o){this.getManager=e,this.onChanged=t,this.emitTaskEvent=n,this.emitGroupEvent=r,this.persistSession=i,this.onWake=a,this.appendSystemNote=o}subscribe(e){if(this.backgroundTaskUnsubscribe)return;let t=Re(e)??j(e)?.backgroundTaskManager;t&&(this.backgroundTaskUnsubscribe=t.subscribe(e=>{this.recordTaskEvent(e),this.emitTaskEvent(e),e.type===`background_task_waking`&&e.instruction!==void 0&&this.onWake?.(e.instruction,e.taskId)}),this.reArmRestoredSchedules(t))}reArmRestoredSchedules(e){let t=Date.now();for(let n of this.backgroundTasks)n.kind!==`scheduled`||n.status!==`sleeping`||!n.schedule||(n.nextFireAt!==void 0&&new Date(n.nextFireAt).getTime()<t&&this.appendSystemNote?.(`Missed scheduled wake "${n.label}" (was due ${n.nextFireAt} while the session was closed); re-arming.`),e.spawn({kind:`scheduled`,cronExpression:n.schedule.cronExpression,label:n.label,mode:n.mode,parentSessionId:n.parentSessionId,depth:n.depth,cwd:n.cwd,...n.schedule.agentInstruction===void 0?{}:{agentInstruction:n.schedule.agentInstruction},...n.schedule.command===void 0?{}:{command:n.schedule.command},...n.schedule.shell===void 0?{}:{shell:n.schedule.shell},...n.schedule.env===void 0?{}:{env:{...n.schedule.env}}}))}dispose(){this.backgroundTaskUnsubscribe?.(),this.backgroundTaskUnsubscribe=null,this.backgroundJobUnsubscribe?.(),this.backgroundJobUnsubscribe=null,this.backgroundJobOrchestrator?.dispose(),this.backgroundJobOrchestrator=null}restoreState(e){this.backgroundTasks=e.tasks,this.backgroundTaskEvents=e.taskEvents,this.backgroundJobGroups=e.groups,this.backgroundJobGroupEvents=e.groupEvents}getState(){return{tasks:this.getTaskSnapshots(),taskEvents:this.backgroundTaskEvents,groups:this.getGroupSnapshots(),groupEvents:this.backgroundJobGroupEvents}}getManagerOrThrow(){let e=this.getManager();if(!e)throw Error(`Background task manager is not available for this session.`);return e}getOrchestratorOrThrow(e){if(this.backgroundJobOrchestrator)return this.backgroundJobOrchestrator;let t=this.getManagerOrThrow();return this.backgroundJobOrchestrator=new ne({manager:t,initialGroups:this.backgroundJobGroups}),this.subscribeGroupEvents(e),this.backgroundJobOrchestrator}async cancelTask(e,t){await this.getManagerOrThrow().cancel(e,t)}async closeTask(e){await this.getManagerOrThrow().close(e)}async sendTask(e,t){await this.getManagerOrThrow().send(e,t)}async readTaskLog(e,t){return this.getManagerOrThrow().readLog(e,t)}listTasks(e){return this.getManagerOrThrow().list(e)}getTask(e){return this.getManagerOrThrow().get(e)}createGroup(e,t){return this.getOrchestratorOrThrow(t).createGroup({...e,parentSessionId:t})}listGroups(e){return this.getOrchestratorOrThrow(e).listGroups()}getGroup(e,t){return this.getOrchestratorOrThrow(t).getGroup(e)}async waitGroup(e,t){return this.getOrchestratorOrThrow(t).waitGroup(e)}async readTaskDetail(e,t,n){let r=this.getManagerOrThrow().get(t);if(!r)throw Error(`Unknown background task: ${t}`);if(r.logPath||r.transcriptPath){let i=await this.getManagerOrThrow().readLog(t,n);return O({entryId:e,lines:i.lines,cursor:i.cursor,nextCursor:i.nextCursor,kind:r.kind===`process`?`process_output`:`progress`})}let i=r.status===`failed`?`error`:r.status===`completed`?`result`:`progress`;return O({entryId:e,lines:[r.error?.message??r.result?.output??r.currentAction??r.promptPreview??r.commandPreview??r.status],cursor:n,kind:i})}readGroupDetail(e,t,n){let r=this.getOrchestratorOrThrow(n).getGroup(t);if(!r)throw Error(`Unknown background job group: ${t}`);return O({entryId:e,lines:se(r).lines,kind:`group_summary`})}getTaskSnapshots(){try{return this.getManagerOrThrow().list()}catch{return this.backgroundTasks}}getGroupSnapshots(){try{return this.backgroundJobOrchestrator?.listGroups()??this.backgroundJobGroups}catch{return this.backgroundJobGroups}}subscribeGroupEvents(e){this.backgroundJobUnsubscribe||!this.backgroundJobOrchestrator||(this.backgroundJobUnsubscribe=this.backgroundJobOrchestrator.subscribe(t=>{this.recordGroupEvent(t,e),this.emitGroupEvent(t)}))}recordTaskEvent(e){this.backgroundTasks=this.getTaskSnapshots(),this.backgroundTaskEvents.push(e),this.persistSession(),this.onChanged(`background_task`,It(e))}recordGroupEvent(e,t){this.backgroundJobGroups=this.getGroupSnapshots(),this.backgroundJobGroupEvents.push(e),this.persistSession(),this.onChanged(`background_group`,ue(e.group.id))}};function It(e){if(`task`in e)return w(e.task.id);if(`taskId`in e)return w(e.taskId)}function Lt(e){let t=j(e);if(!t)throw Error(`Agent runtime dependencies are not available for this session.`);if(!t.backgroundTaskManager)throw Error(`Background task manager is not available for this session.`);return t}function M(e){let t=Lt(e);if(!t.subagentManager)throw Error(`Subagent manager is not available for this session.`);return t.subagentManager}function Rt(e,t){let n=t.customAgentRegistry?.(e);if(!n)throw Error(`Unknown agent type: ${e}`);return n}function zt(e){return(j(e)?.agentDefinitions??[]).map(e=>({name:e.name,description:e.description}))}async function Bt(e,t,n,r){let i=Lt(e),a=Rt(t.agentType,i),o=e.getSessionId();return M(e).spawn({type:t.agentType,label:t.label,parentSessionId:o,mode:t.mode,depth:(i.subagentDepth??0)+1,cwd:i.cwd??n??process.cwd(),prompt:t.prompt,model:t.model??a.model,isolation:t.isolation,allowedTools:a.tools,disallowedTools:a.disallowedTools,metadata:T({kind:r===`model`?`model_command`:`slash_command`,sessionId:o,commandName:`agent`,label:t.label})})}async function Vt(e,t){return M(e).wait(t)}async function Ht(e,t,n){await M(e).send(t,n)}async function Ut(e,t,n){await M(e).cancel(t,n)}async function Wt(e,t){await M(e).close(t)}function Gt(e){return M(e).list()}function Kt(e,t={}){let{sessionId:n,execCtrl:r,histTracker:i,bgTracker:a}=e,o=i.getHistory();return fe({sessionId:n,mainThread:{sessionId:n,isExecuting:r.executing,hasPendingPrompt:r.pendingPrompt!==null,historyLength:o.length,updatedAt:o.at(-1)?.timestamp.toISOString()??new Date(0).toISOString(),preview:r.streamingText.trim().length>0?r.streamingText:o.at(-1)?.type},tasks:a.getTaskSnapshots(),groups:a.getGroupSnapshots(),selectedEntryId:t.selectedEntryId,filter:t.filter})}async function qt(e,t,n,r,i){let a=de(e);if(!a)throw Error(`Unknown execution workspace entry: ${e}`);return a.kind===`main_thread`?Ae({entryId:e,history:t(),cursor:i}):a.kind===`background_group`?n.readGroupDetail(e,a.sourceId,r):n.readTaskDetail(e,a.sourceId,i)}function Jt(e,t,n,r){return Ne({manager:e.getManagerOrThrow(),groupOrchestrator:e.getOrchestratorOrThrow(t),sessionId:t,cwd:n,origin:{...r,sessionId:r.sessionId||t}})}var Yt=class{isExecuting(){return this.execCtrl.executing}getPendingPrompt(){return this.execCtrl.pendingPrompt}getStreamingText(){return this.execCtrl.streamingText}getActiveTools(){return this.execCtrl.activeTools}cancelQueue(){this.execCtrl.clearPendingQueue()}async executeCommand(e,t){return await this.ensureInitialized(),this.execCtrl.executing?{success:!1,message:`Another prompt or command is already running. Wait for it to finish.`}:this.skillRouter.executeCommand(e,t)}async executeModelCommand(e,t){return await this.ensureInitialized(),this.skillRouter.executeModelCommand(e,t)}getCommandInvocationSource(){return this.skillRouter.getCommandInvocationSource()}async executeSkillCommandByName(e,t,n){return await this.ensureInitialized(),this.skillRouter.executeSkillCommandByName(e,t,n)}listCommands(){return this.skillRouter.listCommands()}listSkills(){return this.skillRouter.listSkills()}listModelInvocableCommands(){return this.skillRouter.listModelInvocableCommands()}getCommandHostAdapters(){return this.skillRouter.getCommandHostAdapters()}getSkillActivationEvents(){return this.histTracker.getSkillActivationEvents()}getContextState(){return this.getSessionOrThrow().getContextState()}async compactContext(e){await this.getSessionOrThrow().compact(e)}getFullHistory(){return this.histTracker.getHistory()}getMessages(){return this.histTracker.getHistory().filter(e=>e.category===`chat`).map(e=>e.data)}listEditCheckpoints(){return this.histTracker.listEditCheckpoints()}inspectEditCheckpoint(e){return this.histTracker.inspectEditCheckpoint(e)}async restoreEditCheckpoint(e){return await this.ensureInitialized(),this.histTracker.restoreEditCheckpoint(e)}async rollbackEditCheckpoint(e){return await this.ensureInitialized(),this.histTracker.rollbackEditCheckpoint(e)}getUsedMemoryReferences(){return this.histTracker.getUsedMemoryReferences()}recordMemoryEvent(e){this.histTracker.recordMemoryEvent(e)}listContextReferences(){return this.histTracker.listContextReferences()}async addContextReference(e){return this.histTracker.addContextReference(e)}removeContextReference(e){return this.histTracker.removeContextReference(e)}clearContextReferences(){return this.histTracker.clearContextReferences()}listBackgroundTasks(e){return this.bgTracker.listTasks(e)}getBackgroundTask(e){return this.bgTracker.getTask(e)}async cancelBackgroundTask(e,t){await this.ensureInitialized(),await this.bgTracker.cancelTask(e,t)}async closeBackgroundTask(e){await this.ensureInitialized(),await this.bgTracker.closeTask(e)}async sendBackgroundTask(e,t){await this.ensureInitialized(),await this.bgTracker.sendTask(e,t)}async readBackgroundTaskLog(e,t){return await this.ensureInitialized(),this.bgTracker.readTaskLog(e,t)}createBackgroundJobGroup(e){return this.bgTracker.createGroup(e,this.getSessionOrThrow().getSessionId())}listBackgroundJobGroups(){return this.bgTracker.listGroups(this.getSessionOrThrow().getSessionId())}getBackgroundJobGroup(e){return this.bgTracker.getGroup(e,this.getSessionOrThrow().getSessionId())}async waitBackgroundJobGroup(e){return await this.ensureInitialized(),this.bgTracker.waitGroup(e,this.getSessionOrThrow().getSessionId())}getExecutionWorkspaceSnapshot(e={}){return Kt({sessionId:this.getSessionOrThrow().getSessionId(),execCtrl:this.execCtrl,histTracker:this.histTracker,bgTracker:this.bgTracker},e)}listExecutionWorkspaceEntries(e){return[...this.getExecutionWorkspaceSnapshot({filter:e}).entries]}getExecutionWorkspaceEntry(e){return this.getExecutionWorkspaceSnapshot().entries.find(t=>t.id===e)}async readExecutionWorkspaceDetail(e,t){return await this.ensureInitialized(),qt(e,()=>this.histTracker.getHistory(),this.bgTracker,this.getSessionOrThrow().getSessionId(),t)}createExecutionWorkspaceTaskSpawner(e){return Jt(this.bgTracker,this.getSessionOrThrow().getSessionId(),this.getCwd(),e)}listAgentDefinitions(){return zt(this.getSessionOrThrow())}listAgentJobs(){return Gt(this.getSessionOrThrow())}async spawnAgentJob(e){return await this.ensureInitialized(),Bt(this.getSessionOrThrow(),e,this.getCwd(),this.skillRouter.getCommandInvocationSource())}async waitAgentJob(e){return await this.ensureInitialized(),Vt(this.getSessionOrThrow(),e)}async sendAgentJob(e,t){await this.ensureInitialized(),await Ht(this.getSessionOrThrow(),e,t)}async cancelAgentJob(e,t){await this.ensureInitialized(),await Ut(this.getSessionOrThrow(),e,t)}async closeAgentJob(e){await this.ensureInitialized(),await Wt(this.getSessionOrThrow(),e)}async spawnScheduledWake(e){return await this.ensureInitialized(),this.bgTracker.getManagerOrThrow().spawn({kind:`scheduled`,label:e.label,mode:`background`,parentSessionId:this.getSessionOrThrow().getSessionId(),depth:0,cwd:this.getCwd(),cronExpression:e.cronExpression,agentInstruction:e.agentInstruction})}async spawnMonitorWake(e){return await this.ensureInitialized(),this.bgTracker.getManagerOrThrow().spawn({kind:`process`,label:e.label,mode:`background`,parentSessionId:this.getSessionOrThrow().getSessionId(),depth:0,cwd:this.getCwd(),command:e.command,matchPattern:e.matchPattern,agentInstruction:e.agentInstruction})}},N=class{existsSync(e){return(0,m.existsSync)(e)}readFileSync(e,t){return(0,m.readFileSync)(e,t)}writeFileSync(e,t,n){(0,m.writeFileSync)(e,t,n??`utf8`)}mkdirSync(e,t){(0,m.mkdirSync)(e,t)}readdirSync(e,t){return t?.withFileTypes?(0,m.readdirSync)(e,{withFileTypes:!0}):(0,m.readdirSync)(e)}statSync(e){return(0,m.statSync)(e)}rmSync(e,t){(0,m.rmSync)(e,t)}cpSync(e,t,n){(0,m.cpSync)(e,t,n)}renameSync(e,t){(0,m.renameSync)(e,t)}get constants(){return m.constants}},P=class{async access(e,t){await(0,h.access)(e,t)}async copyFile(e,t,n){await(0,h.copyFile)(e,t,n)}async mkdir(e,t){await(0,h.mkdir)(e,t)}async readFile(e,t){return(0,h.readFile)(e,t)}async readdir(e,t){return t?.withFileTypes?await(0,h.readdir)(e,{withFileTypes:!0}):(0,h.readdir)(e)}async realpath(e){return(0,h.realpath)(e)}async rename(e,t){await(0,h.rename)(e,t)}async rm(e,t){await(0,h.rm)(e,t)}async stat(e){return(0,h.stat)(e)}async writeFile(e,t,n){await(0,h.writeFile)(e,t,n??`utf8`)}};function Xt(e){return(0,p.createHash)(`sha256`).update(e,`utf-8`).digest(`hex`)}function Zt(e,t=new N){let n=t.readFileSync(e,`utf-8`);return{filePath:e,content:n,contentHash:Xt(n)}}async function Qt(e,t=new N){let n=[],r=[];for(let i of e){if(!t.existsSync(i.filePath)){r.push(i);continue}Xt(t.readFileSync(i.filePath,`utf-8`))===i.contentHash?r.push(i):n.push(i)}return{stale:n,fresh:r}}async function $t(e,t=new N){let{stale:n}=await Qt(e,t),r=new Set(n.map(e=>e.filePath)),i=[];return{updated:e.map(e=>{if(!r.has(e.filePath))return e;let n=t.readFileSync(e.filePath,`utf-8`);return i.push(e.filePath),{filePath:e.filePath,content:n,contentHash:Xt(n)}}),refreshed:i}}async function en(e,t,n,r,i,a){if(!n)return;let o=[...e,...t];if(o.length===0)return;let s=e.length,{updated:c,refreshed:l}=await $t(o);if(l.length===0)return;let u=c.slice(0,s),d=c.slice(s);r(u,d);let f=n(u.map(e=>e.content).join(`
49
+ `)}const ht={sonnet:`claude-sonnet-4-6`,haiku:`claude-haiku-4-5`,opus:`claude-opus-4-6`},gt=ct(`agent`);function _t(e,t){return ht[e]??e}function vt(e,t){let n=[...e];if(t.disallowedTools){let e=new Set(t.disallowedTools);n=n.filter(t=>!e.has(t.getName()))}if(t.tools){let e=new Set(t.tools);n=n.filter(t=>e.has(t.getName()))}return n=n.filter(e=>e.getName()!==`Agent`&&e.getName()!==gt),n}function yt(e){let{agentDefinition:t,parentConfig:n,parentContext:r,parentTools:i,terminal:a}=e,o=vt(i,t),s=t.model?_t(t.model,n.provider.model):n.provider.model,c=it({agentBody:t.systemPrompt,claudeMd:r.claudeMd,agentsMd:r.agentsMd,isForkWorker:e.isForkWorker??!1}),l=e.provider;return new f.Session({tools:o,provider:l,systemMessage:c,terminal:a,...e.sessionId===void 0?{}:{sessionId:e.sessionId},...e.sessionLogger===void 0?{}:{sessionLogger:e.sessionLogger},model:s,maxTurns:t.maxTurns,permissions:n.permissions,permissionMode:e.permissionMode,defaultTrustLevel:n.defaultTrustLevel,permissionHandler:e.permissionHandler,hooks:e.hooks,hookTypeExecutors:e.hookTypeExecutors,onTextDelta:e.onTextDelta,onToolExecution:e.onToolExecution})}function bt(e,t){let n=t?.(e)??k(e);if(!n)throw Error(`Unknown agent type: ${e}`);return n}function xt(e,t){return{...e,...t.request.model?{model:t.request.model}:{},...t.request.allowedTools?{tools:t.request.allowedTools}:{},...t.request.disallowedTools?{disallowedTools:t.request.disallowedTools}:{}}}function St(e){if(!e)return;let t=Object.values(e)[0];if(t!==void 0)return typeof t==`object`?JSON.stringify(t):String(t)}function Ct(e){if(e.request.isolation===`worktree`)throw Error(`Worktree isolation requires a runtime shell subagent runner`)}function wt(e,t){if(t.type===`start`){e.emit?.({type:`background_task_tool_start`,toolName:t.toolName,firstArg:St(t.toolArgs)});return}e.emit?.({type:`background_task_tool_end`,toolName:t.toolName,success:t.success??!0})}function Tt(e){return{start(t){Ct(t);let n=yt({agentDefinition:xt(bt(t.request.type,e.customAgentRegistry),t),parentConfig:e.config,parentContext:e.context,parentTools:e.tools,provider:e.provider,terminal:e.terminal,permissionMode:e.permissionMode,permissionHandler:e.permissionHandler,hooks:e.hooks,hookTypeExecutors:e.hookTypeExecutors,onTextDelta:n=>{t.emit?.({type:`background_task_text_delta`,delta:n}),e.onTextDelta?.(n)},onToolExecution:n=>{wt(t,n),e.onToolExecution?.(n)}});return{jobId:t.jobId,result:n.run(t.request.prompt).then(e=>({jobId:t.jobId,output:e})),cancel:()=>(n.abort(),Promise.resolve())}}}}const Et=[`Creates delegated subagent jobs in isolated contexts.`,`Without jobs, one tool call creates one subagent job from prompt.`,`For explicit multi-agent or parallel-agent requests, use one Agent tool call with jobs containing one entry per requested role and a stable label for each role.`,`When the user explicitly asks to create, run, spawn, delegate to, or use agents/subagents, start the requested subagent job immediately.`,`Do not ask a follow-up question unless execution is impossible or unsafe.`,`Subagent jobs run as background tasks by default.`,`The tool waits for a terminal result and returns completed, failed, or timed-out outcome data with structured requested/started job counts.`,`After the tool returns, base user-facing claims on returned mode and counts; do not say parallel or multiple jobs started unless the result proves those jobs started.`,`Execution is represented by a real tool call and runtime background task event.`].join(` `);function Dt(e){return e}const Ot=d.z.object({prompt:d.z.string().optional().describe(`The task for a single subagent to perform. Required when jobs is omitted.`),subagent_type:d.z.string().optional().describe(`Agent type: "general-purpose", "Explore", "Plan", or a custom agent name`),model:d.z.string().optional().describe(`Optional model override`),isolation:d.z.enum([`none`,`worktree`]).optional().describe(`Optional runtime isolation mode. "worktree" runs in a Git worktree.`),jobs:d.z.array(d.z.object({label:d.z.string().optional().describe(`Stable role label for this batch job`),prompt:d.z.string().describe(`The task for this subagent to perform`),subagent_type:d.z.string().optional().describe(`Agent type for this job`),model:d.z.string().optional().describe(`Optional model override for this job`),isolation:d.z.enum([`none`,`worktree`]).optional().describe(`Isolation for this job`)}).passthrough()).optional().describe(`Batch of subagent jobs to start in one Agent tool call`)}).passthrough(),kt=new WeakMap;function At(e,t){kt.set(e,t)}function j(e){return kt.get(e)}function jt(e,t){if(t){let n=t(e);if(n)return n}let n=k(e);if(n)return n}function Mt(e){return e.subagentManager??new l.SubagentManager({runner:Tt(e)})}function Nt(e,t,n,r,i=n.name,a){return{type:t,label:i,parentSessionId:r.parentSessionId??`unknown-session`,mode:`background`,depth:r.subagentDepth??1,cwd:r.cwd??process.cwd(),prompt:e.prompt,model:e.model,isolation:e.isolation,metadata:E({kind:`tool_call`,sessionId:r.parentSessionId??`unknown-session`,label:i,...a?{toolCallId:a}:{}})}}async function Pt(e,t,n,r){if(typeof e.prompt!=`string`||e.prompt.length===0)return et(`prompt is required when jobs is omitted`);let i={...e,prompt:e.prompt},a=e.subagent_type??`general-purpose`,o=jt(a,t.customAgentRegistry);if(!o)return Ze(a);let s;try{let e=await n.spawn(Nt(i,a,o,t,void 0,r));return s=e.id,$e(await n.wait(e.id))}catch(e){return et(e instanceof Error?e.message:String(e),s)}}function Ft(e){let t=Mt(e);return(0,u.createZodFunctionTool)(`Agent`,Et,Dt(Ot),async(n,r)=>{let i=n,a=r?.executionId;return e.isParallelSubagentsEnabled!==void 0&&!e.isParallelSubagentsEnabled()?Qe():Array.isArray(i.jobs)&&i.jobs.length>0?Xe({jobs:i.jobs,deps:e,manager:t,resolveAgentDefinition:jt,createSpawnRequest:Nt,toolCallId:a}):Pt({prompt:i.prompt,...i.subagent_type===void 0?{}:{subagent_type:i.subagent_type},...i.model===void 0?{}:{model:i.model},...i.isolation===void 0?{}:{isolation:i.isolation}},e,t,a)})}var It=class{getManager;onChanged;emitTaskEvent;emitGroupEvent;persistSession;onWake;appendSystemNote;backgroundTasks=[];backgroundTaskEvents=[];backgroundJobGroups=[];backgroundJobGroupEvents=[];backgroundTaskUnsubscribe=null;backgroundJobUnsubscribe=null;backgroundJobOrchestrator=null;constructor(e,t,n,r,i,a,o){this.getManager=e,this.onChanged=t,this.emitTaskEvent=n,this.emitGroupEvent=r,this.persistSession=i,this.onWake=a,this.appendSystemNote=o}subscribe(e){if(this.backgroundTaskUnsubscribe)return;let t=Re(e)??j(e)?.backgroundTaskManager;t&&(this.backgroundTaskUnsubscribe=t.subscribe(e=>{this.recordTaskEvent(e),this.emitTaskEvent(e),e.type===`background_task_waking`&&e.instruction!==void 0&&this.onWake?.(e.instruction,e.taskId)}),this.reArmRestoredSchedules(t))}reArmRestoredSchedules(e){let t=Date.now();for(let n of this.backgroundTasks)n.kind!==`scheduled`||n.status!==`sleeping`||!n.schedule||(n.nextFireAt!==void 0&&new Date(n.nextFireAt).getTime()<t&&this.appendSystemNote?.(`Missed scheduled wake "${n.label}" (was due ${n.nextFireAt} while the session was closed); re-arming.`),e.spawn({kind:`scheduled`,cronExpression:n.schedule.cronExpression,label:n.label,mode:n.mode,parentSessionId:n.parentSessionId,depth:n.depth,cwd:n.cwd,...n.schedule.agentInstruction===void 0?{}:{agentInstruction:n.schedule.agentInstruction},...n.schedule.command===void 0?{}:{command:n.schedule.command},...n.schedule.shell===void 0?{}:{shell:n.schedule.shell},...n.schedule.env===void 0?{}:{env:{...n.schedule.env}}}))}dispose(){this.backgroundTaskUnsubscribe?.(),this.backgroundTaskUnsubscribe=null,this.backgroundJobUnsubscribe?.(),this.backgroundJobUnsubscribe=null,this.backgroundJobOrchestrator?.dispose(),this.backgroundJobOrchestrator=null}restoreState(e){this.backgroundTasks=e.tasks,this.backgroundTaskEvents=e.taskEvents,this.backgroundJobGroups=e.groups,this.backgroundJobGroupEvents=e.groupEvents}getState(){return{tasks:this.getTaskSnapshots(),taskEvents:this.backgroundTaskEvents,groups:this.getGroupSnapshots(),groupEvents:this.backgroundJobGroupEvents}}getManagerOrThrow(){let e=this.getManager();if(!e)throw Error(`Background task manager is not available for this session.`);return e}getOrchestratorOrThrow(e){if(this.backgroundJobOrchestrator)return this.backgroundJobOrchestrator;let t=this.getManagerOrThrow();return this.backgroundJobOrchestrator=new ne({manager:t,initialGroups:this.backgroundJobGroups}),this.subscribeGroupEvents(e),this.backgroundJobOrchestrator}async cancelTask(e,t){await this.getManagerOrThrow().cancel(e,t)}async closeTask(e){await this.getManagerOrThrow().close(e)}async sendTask(e,t){await this.getManagerOrThrow().send(e,t)}async readTaskLog(e,t){return this.getManagerOrThrow().readLog(e,t)}listTasks(e){return this.getManagerOrThrow().list(e)}getTask(e){return this.getManagerOrThrow().get(e)}createGroup(e,t){return this.getOrchestratorOrThrow(t).createGroup({...e,parentSessionId:t})}listGroups(e){return this.getOrchestratorOrThrow(e).listGroups()}getGroup(e,t){return this.getOrchestratorOrThrow(t).getGroup(e)}async waitGroup(e,t){return this.getOrchestratorOrThrow(t).waitGroup(e)}async readTaskDetail(e,t,n){let r=this.getManagerOrThrow().get(t);if(!r)throw Error(`Unknown background task: ${t}`);if(r.logPath||r.transcriptPath){let i=await this.getManagerOrThrow().readLog(t,n);return Ae({entryId:e,lines:i.lines,cursor:i.cursor,nextCursor:i.nextCursor,kind:r.kind===`process`?`process_output`:`progress`})}let i=r.status===`failed`?`error`:r.status===`completed`?`result`:`progress`;return Ae({entryId:e,lines:[r.error?.message??r.result?.output??r.currentAction??r.promptPreview??r.commandPreview??r.status],cursor:n,kind:i})}readGroupDetail(e,t,n){let r=this.getOrchestratorOrThrow(n).getGroup(t);if(!r)throw Error(`Unknown background job group: ${t}`);return Ae({entryId:e,lines:se(r).lines,kind:`group_summary`})}getTaskSnapshots(){try{return this.getManagerOrThrow().list()}catch{return this.backgroundTasks}}getGroupSnapshots(){try{return this.backgroundJobOrchestrator?.listGroups()??this.backgroundJobGroups}catch{return this.backgroundJobGroups}}subscribeGroupEvents(e){this.backgroundJobUnsubscribe||!this.backgroundJobOrchestrator||(this.backgroundJobUnsubscribe=this.backgroundJobOrchestrator.subscribe(t=>{this.recordGroupEvent(t,e),this.emitGroupEvent(t)}))}recordTaskEvent(e){this.backgroundTasks=this.getTaskSnapshots(),this.backgroundTaskEvents.push(e),this.persistSession(),this.onChanged(`background_task`,Lt(e))}recordGroupEvent(e,t){this.backgroundJobGroups=this.getGroupSnapshots(),this.backgroundJobGroupEvents.push(e),this.persistSession(),this.onChanged(`background_group`,T(e.group.id))}};function Lt(e){if(`task`in e)return w(e.task.id);if(`taskId`in e)return w(e.taskId)}function Rt(e){let t=j(e);if(!t)throw Error(`Agent runtime dependencies are not available for this session.`);if(!t.backgroundTaskManager)throw Error(`Background task manager is not available for this session.`);return t}function M(e){let t=Rt(e);if(!t.subagentManager)throw Error(`Subagent manager is not available for this session.`);return t.subagentManager}function zt(e,t){let n=t.customAgentRegistry?.(e);if(!n)throw Error(`Unknown agent type: ${e}`);return n}function Bt(e){return(j(e)?.agentDefinitions??[]).map(e=>({name:e.name,description:e.description}))}async function Vt(e,t,n,r){let i=Rt(e),a=zt(t.agentType,i),o=e.getSessionId();return M(e).spawn({type:t.agentType,label:t.label,parentSessionId:o,mode:t.mode,depth:(i.subagentDepth??0)+1,cwd:i.cwd??n??process.cwd(),prompt:t.prompt,model:t.model??a.model,isolation:t.isolation,allowedTools:a.tools,disallowedTools:a.disallowedTools,metadata:E({kind:r===`model`?`model_command`:`slash_command`,sessionId:o,commandName:`agent`,label:t.label})})}async function Ht(e,t){return M(e).wait(t)}async function Ut(e,t,n){await M(e).send(t,n)}async function Wt(e,t,n){await M(e).cancel(t,n)}async function Gt(e,t){await M(e).close(t)}function Kt(e){return M(e).list()}function qt(e,t={}){let{sessionId:n,execCtrl:r,histTracker:i,bgTracker:a}=e,o=i.getHistory();return de({sessionId:n,mainThread:{sessionId:n,isExecuting:r.executing,hasPendingPrompt:r.pendingPrompt!==null,historyLength:o.length,updatedAt:o.at(-1)?.timestamp.toISOString()??new Date(0).toISOString(),preview:r.streamingText.trim().length>0?r.streamingText:o.at(-1)?.type},tasks:a.getTaskSnapshots(),groups:a.getGroupSnapshots(),selectedEntryId:t.selectedEntryId,filter:t.filter})}async function Jt(e,t,n,r,i){let a=ue(e);if(!a)throw Error(`Unknown execution workspace entry: ${e}`);return a.kind===`main_thread`?ke({entryId:e,history:t(),cursor:i}):a.kind===`background_group`?n.readGroupDetail(e,a.sourceId,r):n.readTaskDetail(e,a.sourceId,i)}function Yt(e,t,n,r){return Ne({manager:e.getManagerOrThrow(),groupOrchestrator:e.getOrchestratorOrThrow(t),sessionId:t,cwd:n,origin:{...r,sessionId:r.sessionId||t}})}var Xt=class{isExecuting(){return this.execCtrl.executing}getPendingPrompt(){return this.execCtrl.pendingPrompt}getStreamingText(){return this.execCtrl.streamingText}getActiveTools(){return this.execCtrl.activeTools}cancelQueue(){this.execCtrl.clearPendingQueue()}async executeCommand(e,t){return await this.ensureInitialized(),this.execCtrl.executing?{success:!1,message:`Another prompt or command is already running. Wait for it to finish.`}:this.skillRouter.executeCommand(e,t)}async executeModelCommand(e,t){return await this.ensureInitialized(),this.skillRouter.executeModelCommand(e,t)}getCommandInvocationSource(){return this.skillRouter.getCommandInvocationSource()}async executeSkillCommandByName(e,t,n){return await this.ensureInitialized(),this.skillRouter.executeSkillCommandByName(e,t,n)}listCommands(){return this.skillRouter.listCommands()}listSkills(){return this.skillRouter.listSkills()}listModelInvocableCommands(){return this.skillRouter.listModelInvocableCommands()}getCommandHostAdapters(){return this.skillRouter.getCommandHostAdapters()}getSkillActivationEvents(){return this.histTracker.getSkillActivationEvents()}getContextState(){return this.getSessionOrThrow().getContextState()}async compactContext(e){await this.getSessionOrThrow().compact(e)}getFullHistory(){return this.histTracker.getHistory()}getMessages(){return this.histTracker.getHistory().filter(e=>e.category===`chat`).map(e=>e.data)}listEditCheckpoints(){return this.histTracker.listEditCheckpoints()}inspectEditCheckpoint(e){return this.histTracker.inspectEditCheckpoint(e)}async restoreEditCheckpoint(e){return await this.ensureInitialized(),this.histTracker.restoreEditCheckpoint(e)}async rollbackEditCheckpoint(e){return await this.ensureInitialized(),this.histTracker.rollbackEditCheckpoint(e)}getUsedMemoryReferences(){return this.histTracker.getUsedMemoryReferences()}recordMemoryEvent(e){this.histTracker.recordMemoryEvent(e)}listContextReferences(){return this.histTracker.listContextReferences()}async addContextReference(e){return this.histTracker.addContextReference(e)}removeContextReference(e){return this.histTracker.removeContextReference(e)}clearContextReferences(){return this.histTracker.clearContextReferences()}listBackgroundTasks(e){return this.bgTracker.listTasks(e)}getBackgroundTask(e){return this.bgTracker.getTask(e)}async cancelBackgroundTask(e,t){await this.ensureInitialized(),await this.bgTracker.cancelTask(e,t)}async closeBackgroundTask(e){await this.ensureInitialized(),await this.bgTracker.closeTask(e)}async sendBackgroundTask(e,t){await this.ensureInitialized(),await this.bgTracker.sendTask(e,t)}async readBackgroundTaskLog(e,t){return await this.ensureInitialized(),this.bgTracker.readTaskLog(e,t)}createBackgroundJobGroup(e){return this.bgTracker.createGroup(e,this.getSessionOrThrow().getSessionId())}listBackgroundJobGroups(){return this.bgTracker.listGroups(this.getSessionOrThrow().getSessionId())}getBackgroundJobGroup(e){return this.bgTracker.getGroup(e,this.getSessionOrThrow().getSessionId())}async waitBackgroundJobGroup(e){return await this.ensureInitialized(),this.bgTracker.waitGroup(e,this.getSessionOrThrow().getSessionId())}getExecutionWorkspaceSnapshot(e={}){return qt({sessionId:this.getSessionOrThrow().getSessionId(),execCtrl:this.execCtrl,histTracker:this.histTracker,bgTracker:this.bgTracker},e)}listExecutionWorkspaceEntries(e){return[...this.getExecutionWorkspaceSnapshot({filter:e}).entries]}getExecutionWorkspaceEntry(e){return this.getExecutionWorkspaceSnapshot().entries.find(t=>t.id===e)}async readExecutionWorkspaceDetail(e,t){return await this.ensureInitialized(),Jt(e,()=>this.histTracker.getHistory(),this.bgTracker,this.getSessionOrThrow().getSessionId(),t)}createExecutionWorkspaceTaskSpawner(e){return Yt(this.bgTracker,this.getSessionOrThrow().getSessionId(),this.getCwd(),e)}listAgentDefinitions(){return Bt(this.getSessionOrThrow())}listAgentJobs(){return Kt(this.getSessionOrThrow())}async spawnAgentJob(e){return await this.ensureInitialized(),Vt(this.getSessionOrThrow(),e,this.getCwd(),this.skillRouter.getCommandInvocationSource())}async waitAgentJob(e){return await this.ensureInitialized(),Ht(this.getSessionOrThrow(),e)}async sendAgentJob(e,t){await this.ensureInitialized(),await Ut(this.getSessionOrThrow(),e,t)}async cancelAgentJob(e,t){await this.ensureInitialized(),await Wt(this.getSessionOrThrow(),e,t)}async closeAgentJob(e){await this.ensureInitialized(),await Gt(this.getSessionOrThrow(),e)}async spawnScheduledWake(e){return await this.ensureInitialized(),this.bgTracker.getManagerOrThrow().spawn({kind:`scheduled`,label:e.label,mode:`background`,parentSessionId:this.getSessionOrThrow().getSessionId(),depth:0,cwd:this.getCwd(),cronExpression:e.cronExpression,agentInstruction:e.agentInstruction})}async spawnMonitorWake(e){return await this.ensureInitialized(),this.bgTracker.getManagerOrThrow().spawn({kind:`process`,label:e.label,mode:`background`,parentSessionId:this.getSessionOrThrow().getSessionId(),depth:0,cwd:this.getCwd(),command:e.command,matchPattern:e.matchPattern,agentInstruction:e.agentInstruction})}},N=class{existsSync(e){return(0,m.existsSync)(e)}readFileSync(e,t){return(0,m.readFileSync)(e,t)}writeFileSync(e,t,n){(0,m.writeFileSync)(e,t,n??`utf8`)}mkdirSync(e,t){(0,m.mkdirSync)(e,t)}readdirSync(e,t){return t?.withFileTypes?(0,m.readdirSync)(e,{withFileTypes:!0}):(0,m.readdirSync)(e)}statSync(e){return(0,m.statSync)(e)}rmSync(e,t){(0,m.rmSync)(e,t)}cpSync(e,t,n){(0,m.cpSync)(e,t,n)}renameSync(e,t){(0,m.renameSync)(e,t)}get constants(){return m.constants}},P=class{async access(e,t){await(0,h.access)(e,t)}async copyFile(e,t,n){await(0,h.copyFile)(e,t,n)}async mkdir(e,t){await(0,h.mkdir)(e,t)}async readFile(e,t){return(0,h.readFile)(e,t)}async readdir(e,t){return t?.withFileTypes?await(0,h.readdir)(e,{withFileTypes:!0}):(0,h.readdir)(e)}async realpath(e){return(0,h.realpath)(e)}async rename(e,t){await(0,h.rename)(e,t)}async rm(e,t){await(0,h.rm)(e,t)}async stat(e){return(0,h.stat)(e)}async writeFile(e,t,n){await(0,h.writeFile)(e,t,n??`utf8`)}};function Zt(e){return(0,p.createHash)(`sha256`).update(e,`utf-8`).digest(`hex`)}function Qt(e,t=new N){let n=t.readFileSync(e,`utf-8`);return{filePath:e,content:n,contentHash:Zt(n)}}async function $t(e,t=new N){let n=[],r=[];for(let i of e){if(!t.existsSync(i.filePath)){r.push(i);continue}Zt(t.readFileSync(i.filePath,`utf-8`))===i.contentHash?r.push(i):n.push(i)}return{stale:n,fresh:r}}async function en(e,t=new N){let{stale:n}=await $t(e,t),r=new Set(n.map(e=>e.filePath)),i=[];return{updated:e.map(e=>{if(!r.has(e.filePath))return e;let n=t.readFileSync(e.filePath,`utf-8`);return i.push(e.filePath),{filePath:e.filePath,content:n,contentHash:Zt(n)}}),refreshed:i}}async function tn(e,t,n,r,i,a){if(!n)return;let o=[...e,...t];if(o.length===0)return;let s=e.length,{updated:c,refreshed:l}=await en(o);if(l.length===0)return;let u=c.slice(0,s),d=c.slice(s);r(u,d);let f=n(u.map(e=>e.content).join(`
50
50
 
51
51
  `),d.map(e=>e.content).join(`
52
52
 
53
- `));i().updateSystemMessage(f);for(let e of l)a(`context_file_refreshed`,{filePath:e})}function tn(e,t,n,r=new Date().toISOString()){return{id:`${t}:${e.relativePath}`,sourcePath:e.sourcePath,relativePath:e.relativePath,originalReference:e.originalReference,loadType:t,status:n,byteLength:e.byteLength,loadedAt:r,lastUsedAt:r}}function nn(e,t,n){let r=e.find(e=>e.sourcePath===t.sourcePath),i=e.filter(e=>e.sourcePath!==t.sourcePath),a=r?cn(r,t):t;return ln([...i,a],n)}function rn(e,t){let n=fn(t),r=e.find(e=>pn(e,n));return r?{references:e.filter(e=>e.sourcePath!==r.sourcePath),result:{removed:r}}:{references:[...e],result:{}}}function an(e){return{removed:[...e]}}function on(e){return e.filter(e=>e.status===`active`)}function sn(e){return e.filter(e=>e.loadType!==`system`).map(e=>({originalReference:e.originalReference,sourcePath:e.sourcePath,relativePath:e.relativePath,reason:e.loadType,depth:0,byteLength:e.byteLength}))}function cn(e,t){return t.status===`active`?{...t,loadedAt:e.loadedAt}:{...e,byteLength:t.byteLength,originalReference:t.originalReference,lastUsedAt:t.lastUsedAt}}function ln(e,t){let n=t?.maxActiveReferences??8,r=t?.maxActiveBytes??262144,i=t?.maxObservedReferences??32,a=[],o=[...e];for(;un(o)>n||dn(o)>r;){let e=o.find(e=>e.status===`active`);if(!e)break;a.push(e),o=o.filter(t=>t.sourcePath!==e.sourcePath)}let s=o.filter(e=>e.status===`observed`);if(s.length>i){let e=s.slice(0,s.length-i);a.push(...e),o=o.filter(t=>t.status!==`observed`||!e.some(e=>e.sourcePath===t.sourcePath))}return{references:o,evicted:a}}function un(e){return e.filter(e=>e.status===`active`).length}function dn(e){return e.reduce((e,t)=>e+(t.status===`active`?t.byteLength:0),0)}function fn(e){return e.startsWith(`@`)?e.slice(1):e}function pn(e,t){return e.relativePath===t||e.sourcePath===t||e.originalReference===t||e.originalReference===`@${t}`}function mn(e,t){return t.length===0?e:[e,`<robota_file_references>`,...t.map(e=>{let t=e.content.replaceAll(`</file>`,`<\\/file>`);return[`<file path="${vn(e.relativePath)}" bytes="${e.byteLength}" reason="${e.reason}">`,t,`</file>`].join(`
53
+ `));i().updateSystemMessage(f);for(let e of l)a(`context_file_refreshed`,{filePath:e})}function nn(e,t,n,r=new Date().toISOString()){return{id:`${t}:${e.relativePath}`,sourcePath:e.sourcePath,relativePath:e.relativePath,originalReference:e.originalReference,loadType:t,status:n,byteLength:e.byteLength,loadedAt:r,lastUsedAt:r}}function rn(e,t,n){let r=e.find(e=>e.sourcePath===t.sourcePath),i=e.filter(e=>e.sourcePath!==t.sourcePath),a=r?ln(r,t):t;return un([...i,a],n)}function an(e,t){let n=pn(t),r=e.find(e=>mn(e,n));return r?{references:e.filter(e=>e.sourcePath!==r.sourcePath),result:{removed:r}}:{references:[...e],result:{}}}function on(e){return{removed:[...e]}}function sn(e){return e.filter(e=>e.status===`active`)}function cn(e){return e.filter(e=>e.loadType!==`system`).map(e=>({originalReference:e.originalReference,sourcePath:e.sourcePath,relativePath:e.relativePath,reason:e.loadType,depth:0,byteLength:e.byteLength}))}function ln(e,t){return t.status===`active`?{...t,loadedAt:e.loadedAt}:{...e,byteLength:t.byteLength,originalReference:t.originalReference,lastUsedAt:t.lastUsedAt}}function un(e,t){let n=t?.maxActiveReferences??8,r=t?.maxActiveBytes??262144,i=t?.maxObservedReferences??32,a=[],o=[...e];for(;dn(o)>n||fn(o)>r;){let e=o.find(e=>e.status===`active`);if(!e)break;a.push(e),o=o.filter(t=>t.sourcePath!==e.sourcePath)}let s=o.filter(e=>e.status===`observed`);if(s.length>i){let e=s.slice(0,s.length-i);a.push(...e),o=o.filter(t=>t.status!==`observed`||!e.some(e=>e.sourcePath===t.sourcePath))}return{references:o,evicted:a}}function dn(e){return e.filter(e=>e.status===`active`).length}function fn(e){return e.reduce((e,t)=>e+(t.status===`active`?t.byteLength:0),0)}function pn(e){return e.startsWith(`@`)?e.slice(1):e}function mn(e,t){return e.relativePath===t||e.sourcePath===t||e.originalReference===t||e.originalReference===`@${t}`}function hn(e,t){return t.length===0?e:[e,`<robota_file_references>`,...t.map(e=>{let t=e.content.replaceAll(`</file>`,`<\\/file>`);return[`<file path="${yn(e.relativePath)}" bytes="${e.byteLength}" reason="${e.reason}">`,t,`</file>`].join(`
54
54
  `)}),`</robota_file_references>`].join(`
55
55
 
56
- `)}function hn(e){return e.some(e=>e.severity===`error`)}function gn(e){return e.length===0?``:[`File reference error:`,...e.map(e=>`- ${e.reference}: ${e.message}`)].join(`
57
- `)}function F(e){return e.map(({content:e,...t})=>t)}function _n(e){let t=F(e);return{id:`prompt_file_reference_${(0,p.randomUUID)()}`,timestamp:new Date,category:`event`,type:`prompt-file-reference`,data:{message:yn(t),references:t}}}function vn(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`)}function yn(e){return`Loaded file references: ${e.map(e=>`${e.relativePath} (${e.byteLength} B)`).join(`, `)}`}const bn=/(^|[\s([{])@([^\s)\]}>,;"'`]+)/g;function xn(e){let t=[];for(let n of e.matchAll(bn)){let e=Sn(n[2]??``);Cn(e)&&t.push({original:`@${e}`,path:e,index:n.index??0})}return t}function Sn(e){let t=e.length;for(;t>0&&/[.,:;!?]/.test(e[t-1]??``);)--t;return e.slice(0,t)}function Cn(e){return e.length===0||e.includes(`://`)?!1:e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`.`)||e.includes(`.`)}function wn(e,t){return e.startsWith(`~/`)?(0,g.resolve)((0,_.homedir)(),e.slice(2)):(0,g.isAbsolute)(e)?(0,g.resolve)(e):(0,g.resolve)(t,e)}function Tn(e,t){let n=(0,g.relative)(t,e);return n===``||!n.startsWith(`..`)&&!(0,g.isAbsolute)(n)}function En(e,t){return(0,g.relative)(e,t).split(g.sep).join(`/`)}async function Dn(e,t){let n=await kn(t);for(let t of xn(e))await Nn(t,0,[],n);return An(n)}async function On(e,t){let n=await kn(t);for(let t of e)await Nn({original:`@${t}`,path:t,index:0},0,[],n);return An(n)}async function kn(e){let t=e.fsAsync??new P;return{rootPath:await Mn(e.cwd,t),limits:jn(e.limits),reason:e.reason??`prompt-reference`,references:[],diagnostics:[],loadedPaths:new Set,totalBytes:0,fsAsync:t}}function An(e){return{references:e.references,diagnostics:e.diagnostics}}function jn(e){return{maxDepth:e?.maxDepth??2,maxReferences:e?.maxReferences??8,maxFileBytes:e?.maxFileBytes??65536,maxTotalBytes:e?.maxTotalBytes??262144}}async function Mn(e,t){try{return await t.realpath(e)}catch{return(0,g.resolve)(e)}}async function Nn(e,t,n,r){if(!Pn(e,t,r))return;let i=await Fn(e,r);if(i===void 0||!In(e,i,n,r))return;let a=await Ln(e,i,r);if(a===void 0)return;let o=await Rn(e,i,r);o!==void 0&&(r.loadedPaths.add(i),r.totalBytes+=a.byteLength,r.references.push(zn(e,a,t,o,r)),await Bn(o,t,[...n,i],r))}function Pn(e,t,n){return n.references.length>=n.limits.maxReferences?(I(n,`too-many-references`,e,`Too many file references.`),!1):t>n.limits.maxDepth?(I(n,`max-depth`,e,`File reference nesting is too deep.`),!1):!0}async function Fn(e,t){let n=wn(e.path,t.rootPath);if(!Tn(n,t.rootPath)){I(t,`outside-root`,e,`Referenced path is outside the workspace.`);return}try{let r=await t.fsAsync.realpath(n);if(Tn(r,t.rootPath))return r;I(t,`outside-root`,e,`Referenced path resolves outside the workspace.`)}catch{I(t,`not-found`,e,`Referenced file was not found.`)}}function In(e,t,n,r){return n.includes(t)?(I(r,`circular-reference`,e,`Circular file reference detected.`),!1):!r.loadedPaths.has(t)}async function Ln(e,t,n){try{let r=await n.fsAsync.stat(t);if(r.isDirectory()){I(n,`directory-not-supported`,e,`Directory references are not supported.`);return}if(r.size>n.limits.maxFileBytes){I(n,`file-too-large`,e,`Referenced file exceeds the per-file size limit.`);return}if(n.totalBytes+r.size>n.limits.maxTotalBytes){I(n,`total-too-large`,e,`Referenced files exceed the total size limit.`);return}return{sourcePath:t,byteLength:r.size}}catch{I(n,`unreadable`,e,`Referenced file could not be inspected.`);return}}async function Rn(e,t,n){try{return await n.fsAsync.readFile(t,`utf8`)}catch{I(n,`unreadable`,e,`Referenced file could not be read.`);return}}function zn(e,t,n,r,i){return{originalReference:e.original,sourcePath:t.sourcePath,relativePath:En(i.rootPath,t.sourcePath),reason:i.reason,depth:n,byteLength:t.byteLength,content:r}}async function Bn(e,t,n,r){for(let i of xn(e))await Nn(i,t+1,n,r)}function I(e,t,n,r){e.diagnostics.push({code:t,severity:`error`,reference:n.original,message:r,path:n.path})}function Vn(e){return e instanceof DOMException&&e.name===`AbortError`||e instanceof Error&&(e.message.includes(`aborted`)||e.message.includes(`abort`))}function Hn(e,t){let n=[];for(let r=t;r<e.length;r++){let t=e[r];if(t?.role===`assistant`&&t.toolCalls)for(let e of t.toolCalls)n.push({name:e.function.name,args:e.function.arguments})}return n}function Un(e,t,n,r,i,a){let o=Hn(t,r),s=Jn(t,r,i);return{response:e,history:n,toolSummaries:o,contextState:i,...s&&{usage:s},...a&&a.length>0?{promptFileReferences:[...a]}:{}}}function Wn(e,t,n,r){let i=Hn(e,n),a=[];for(let t=n;t<e.length;t++){let n=e[t];n?.role===`assistant`&&n.content&&a.push(n.content)}let o=Jn(e,n,r);return{response:a.join(`
56
+ `)}function gn(e){return e.some(e=>e.severity===`error`)}function _n(e){return e.length===0?``:[`File reference error:`,...e.map(e=>`- ${e.reference}: ${e.message}`)].join(`
57
+ `)}function F(e){return e.map(({content:e,...t})=>t)}function vn(e){let t=F(e);return{id:`prompt_file_reference_${(0,p.randomUUID)()}`,timestamp:new Date,category:`event`,type:`prompt-file-reference`,data:{message:bn(t),references:t}}}function yn(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`"`,`&quot;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`)}function bn(e){return`Loaded file references: ${e.map(e=>`${e.relativePath} (${e.byteLength} B)`).join(`, `)}`}const xn=/(^|[\s([{])@([^\s)\]}>,;"'`]+)/g;function Sn(e){let t=[];for(let n of e.matchAll(xn)){let e=Cn(n[2]??``);wn(e)&&t.push({original:`@${e}`,path:e,index:n.index??0})}return t}function Cn(e){let t=e.length;for(;t>0&&/[.,:;!?]/.test(e[t-1]??``);)--t;return e.slice(0,t)}function wn(e){return e.length===0||e.includes(`://`)?!1:e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`.`)||e.includes(`.`)}function Tn(e,t){return e.startsWith(`~/`)?(0,g.resolve)((0,_.homedir)(),e.slice(2)):(0,g.isAbsolute)(e)?(0,g.resolve)(e):(0,g.resolve)(t,e)}function En(e,t){let n=(0,g.relative)(t,e);return n===``||!n.startsWith(`..`)&&!(0,g.isAbsolute)(n)}function Dn(e,t){return(0,g.relative)(e,t).split(g.sep).join(`/`)}async function On(e,t){let n=await An(t);for(let t of Sn(e))await Pn(t,0,[],n);return jn(n)}async function kn(e,t){let n=await An(t);for(let t of e)await Pn({original:`@${t}`,path:t,index:0},0,[],n);return jn(n)}async function An(e){let t=e.fsAsync??new P;return{rootPath:await Nn(e.cwd,t),limits:Mn(e.limits),reason:e.reason??`prompt-reference`,references:[],diagnostics:[],loadedPaths:new Set,totalBytes:0,fsAsync:t}}function jn(e){return{references:e.references,diagnostics:e.diagnostics}}function Mn(e){return{maxDepth:e?.maxDepth??2,maxReferences:e?.maxReferences??8,maxFileBytes:e?.maxFileBytes??65536,maxTotalBytes:e?.maxTotalBytes??262144}}async function Nn(e,t){try{return await t.realpath(e)}catch{return(0,g.resolve)(e)}}async function Pn(e,t,n,r){if(!Fn(e,t,r))return;let i=await In(e,r);if(i===void 0||!Ln(e,i,n,r))return;let a=await Rn(e,i,r);if(a===void 0)return;let o=await zn(e,i,r);o!==void 0&&(r.loadedPaths.add(i),r.totalBytes+=a.byteLength,r.references.push(Bn(e,a,t,o,r)),await Vn(o,t,[...n,i],r))}function Fn(e,t,n){return n.references.length>=n.limits.maxReferences?(I(n,`too-many-references`,e,`Too many file references.`),!1):t>n.limits.maxDepth?(I(n,`max-depth`,e,`File reference nesting is too deep.`),!1):!0}async function In(e,t){let n=Tn(e.path,t.rootPath);if(!En(n,t.rootPath)){I(t,`outside-root`,e,`Referenced path is outside the workspace.`);return}try{let r=await t.fsAsync.realpath(n);if(En(r,t.rootPath))return r;I(t,`outside-root`,e,`Referenced path resolves outside the workspace.`)}catch{I(t,`not-found`,e,`Referenced file was not found.`)}}function Ln(e,t,n,r){return n.includes(t)?(I(r,`circular-reference`,e,`Circular file reference detected.`),!1):!r.loadedPaths.has(t)}async function Rn(e,t,n){try{let r=await n.fsAsync.stat(t);if(r.isDirectory()){I(n,`directory-not-supported`,e,`Directory references are not supported.`);return}if(r.size>n.limits.maxFileBytes){I(n,`file-too-large`,e,`Referenced file exceeds the per-file size limit.`);return}if(n.totalBytes+r.size>n.limits.maxTotalBytes){I(n,`total-too-large`,e,`Referenced files exceed the total size limit.`);return}return{sourcePath:t,byteLength:r.size}}catch{I(n,`unreadable`,e,`Referenced file could not be inspected.`);return}}async function zn(e,t,n){try{return await n.fsAsync.readFile(t,`utf8`)}catch{I(n,`unreadable`,e,`Referenced file could not be read.`);return}}function Bn(e,t,n,r,i){return{originalReference:e.original,sourcePath:t.sourcePath,relativePath:Dn(i.rootPath,t.sourcePath),reason:i.reason,depth:n,byteLength:t.byteLength,content:r}}async function Vn(e,t,n,r){for(let i of Sn(e))await Pn(i,t+1,n,r)}function I(e,t,n,r){e.diagnostics.push({code:t,severity:`error`,reference:n.original,message:r,path:n.path})}function Hn(e){return e instanceof DOMException&&e.name===`AbortError`||e instanceof Error&&(e.message.includes(`aborted`)||e.message.includes(`abort`))}function Un(e,t){let n=[];for(let r=t;r<e.length;r++){let t=e[r];if(t?.role===`assistant`&&t.toolCalls)for(let e of t.toolCalls)n.push({name:e.function.name,args:e.function.arguments})}return n}function Wn(e,t,n,r,i,a){let o=Un(t,r),s=Yn(t,r,i);return{response:e,history:n,toolSummaries:o,contextState:i,...s&&{usage:s},...a&&a.length>0?{promptFileReferences:[...a]}:{}}}function Gn(e,t,n,r){let i=Un(e,n),a=[];for(let t=n;t<e.length;t++){let n=e[t];n?.role===`assistant`&&n.content&&a.push(n.content)}let o=Yn(e,n,r);return{response:a.join(`
58
58
 
59
- `),history:t,toolSummaries:i,contextState:r,...o&&{usage:o}}}function Gn(e){return{id:`usage_${(0,p.randomUUID)()}`,timestamp:new Date,category:`event`,type:`usage-summary`,data:e}}async function Kn(e,t,n,r=[]){let i=await On(on(r).map(e=>e.sourcePath),{cwd:t,reason:`manual`}),a=await Dn(e,{cwd:t}),o=[...i.diagnostics,...a.diagnostics];if(hn(o))throw Error(gn(o));let s=mn(e,qn([...i.references,...a.references])),c=n??(s===e?void 0:e),l=F(i.references),u=F(a.references),d=a.references.length>0?_n(a.references):void 0;return{modelInput:s,...c===void 0?{}:{hookInput:c},activeContextReferenceRecords:l,promptFileReferenceRecords:u,...d===void 0?{}:{promptFileReferenceEntry:d}}}function qn(e){return[...new Map(e.map(e=>[e.sourcePath,e])).values()]}function Jn(e,t,n){let r=e.slice(t),i=0,a=0,o=!1;for(let e of r){if(e.role!==`assistant`)continue;let t=(0,c.collectAssistantUsageMetadata)(e);t&&(o=!0,i+=t.inputTokens,a+=t.outputTokens)}if(o)return{kind:`exact`,scope:`turn`,promptTokens:i,completionTokens:a,totalTokens:i+a,contextUsedTokens:n.usedTokens,contextMaxTokens:n.maxTokens,contextUsedPercentage:n.usedPercentage,costStatus:`unknown`}}const Yn={write:()=>{},writeLine:()=>{},writeMarkdown:()=>{},writeError:()=>{},prompt:()=>Promise.resolve(``),select:()=>Promise.resolve(0),spinner:()=>({stop:()=>{},update:()=>{}})};function Xn(e){if(!e)return``;let t=Object.values(e)[0],n=typeof t==`string`?t:JSON.stringify(t??``);return n.length>80?n.slice(0,47)+`...`+n.slice(-30):n}function Zn(e,t,n){let r=e?.[t]??e?.[n];return typeof r==`string`?r:null}function Qn(e){if(!e)return 1;try{let t=JSON.parse(e);return typeof t.startLine==`number`&&Number.isFinite(t.startLine)?t.startLine:1}catch{return 1}}function $n(e){if(e.toolName!==`Edit`)return{};let t=Zn(e.toolArgs,`file_path`,`filePath`),n=Zn(e.toolArgs,`old_string`,`oldString`),r=Zn(e.toolArgs,`new_string`,`newString`);return!t||n===null||r===null||n===r?{}:{diffFile:t,diffLines:tr(n,r,Qn(e.toolResultData),t)}}function er(e,t,n){return[...e.split(`
59
+ `),history:t,toolSummaries:i,contextState:r,...o&&{usage:o}}}function Kn(e){return{id:`usage_${(0,p.randomUUID)()}`,timestamp:new Date,category:`event`,type:`usage-summary`,data:e}}async function qn(e,t,n,r=[]){let i=await kn(sn(r).map(e=>e.sourcePath),{cwd:t,reason:`manual`}),a=await On(e,{cwd:t}),o=[...i.diagnostics,...a.diagnostics];if(gn(o))throw Error(_n(o));let s=hn(e,Jn([...i.references,...a.references])),c=n??(s===e?void 0:e),l=F(i.references),u=F(a.references),d=a.references.length>0?vn(a.references):void 0;return{modelInput:s,...c===void 0?{}:{hookInput:c},activeContextReferenceRecords:l,promptFileReferenceRecords:u,...d===void 0?{}:{promptFileReferenceEntry:d}}}function Jn(e){return[...new Map(e.map(e=>[e.sourcePath,e])).values()]}function Yn(e,t,n){let r=e.slice(t),i=0,a=0,o=!1;for(let e of r){if(e.role!==`assistant`)continue;let t=(0,c.collectAssistantUsageMetadata)(e);t&&(o=!0,i+=t.inputTokens,a+=t.outputTokens)}if(o)return{kind:`exact`,scope:`turn`,promptTokens:i,completionTokens:a,totalTokens:i+a,contextUsedTokens:n.usedTokens,contextMaxTokens:n.maxTokens,contextUsedPercentage:n.usedPercentage,costStatus:`unknown`}}const Xn={write:()=>{},writeLine:()=>{},writeMarkdown:()=>{},writeError:()=>{},prompt:()=>Promise.resolve(``),select:()=>Promise.resolve(0),spinner:()=>({stop:()=>{},update:()=>{}})};function Zn(e){if(!e)return``;let t=Object.values(e)[0],n=typeof t==`string`?t:JSON.stringify(t??``);return n.length>80?n.slice(0,47)+`...`+n.slice(-30):n}function Qn(e,t,n){let r=e?.[t]??e?.[n];return typeof r==`string`?r:null}function $n(e){if(!e)return 1;try{let t=JSON.parse(e);return typeof t.startLine==`number`&&Number.isFinite(t.startLine)?t.startLine:1}catch{return 1}}function er(e){if(e.toolName!==`Edit`)return{};let t=Qn(e.toolArgs,`file_path`,`filePath`),n=Qn(e.toolArgs,`old_string`,`oldString`),r=Qn(e.toolArgs,`new_string`,`newString`);return!t||n===null||r===null||n===r?{}:{diffFile:t,diffLines:nr(n,r,$n(e.toolResultData),t)}}function tr(e,t,n){return[...e.split(`
60
60
  `).map((e,t)=>({type:`remove`,text:e,lineNumber:n+t})),...t.split(`
61
- `).map((e,t)=>({type:`add`,text:e,lineNumber:n+t}))]}function tr(e,t,n,r,i=new N){let a=er(e,t,n),o;try{o=i.readFileSync(r,`utf8`).split(`
61
+ `).map((e,t)=>({type:`add`,text:e,lineNumber:n+t}))]}function nr(e,t,n,r,i=new N){let a=tr(e,t,n),o;try{o=i.readFileSync(r,`utf8`).split(`
62
62
  `)}catch{return a}let s=[],c=Math.max(0,n-1-3);for(let e=c;e<n-1;e++)e<o.length&&s.push({type:`context`,text:o[e],lineNumber:e+1});let l=[],u=n-1+t.split(`
63
63
  `).length;for(let e=u;e<u+3;e++)e<o.length&&l.push({type:`context`,text:o[e],lineNumber:e+1});let d=s[0]?.lineNumber??a[0]?.lineNumber??l[0]?.lineNumber??n,f=e.split(`
64
64
  `).length,p=t.split(`
65
65
  `).length;return[{type:`hunk`,text:`@@ -${d},${s.length+f+l.length} +${d},${s.length+p+l.length} @@`,lineNumber:d},...s,...a,...l]}function L(e){if(e.activeTools.length===0)return;let t=e.activeTools.map(e=>`${e.isRunning?`⟳`:e.result===`success`?`✓`:e.result===`error`?`✗`:`⊘`} ${e.toolName}${e.firstArg?`(${e.firstArg})`:``}`).join(`
66
- `);e.history.push({id:(0,p.randomUUID)(),timestamp:new Date,category:`event`,type:`tool-summary`,data:{tools:e.activeTools.map(e=>({toolName:e.toolName,firstArg:e.firstArg,isRunning:e.isRunning,result:e.result,diffFile:e.diffFile,diffLines:e.diffLines,toolResultData:e.toolResultData})),summary:t}})}function nr(e){let t=e.filter(e=>!e.isRunning);if(t.length<=50)return e;let n=t.length-50,r=0;return e.filter(e=>!e.isRunning&&r<n?(r++,!1):!0)}function rr(e,t){let n=Xn(t.toolArgs),r={toolName:t.toolName,firstArg:n,isRunning:!0,...t.executionId?{executionId:t.executionId}:{}};return e.activeTools.push(r),e.history.push({id:(0,p.randomUUID)(),timestamp:new Date,category:`event`,type:`tool-start`,data:{toolName:t.toolName,firstArg:n,isRunning:!0}}),r}function ir(e,t){let n=t.denied?`denied`:t.success===!1?`error`:`success`,r=e.activeTools.findIndex(e=>e.toolName===t.toolName&&e.isRunning);if(r===-1)return null;let i={...e.activeTools[r],...$n(t),isRunning:!1,result:n,toolResultData:t.toolResultData};return e.activeTools[r]=i,e.activeTools=nr(e.activeTools),e.history.push({id:(0,p.randomUUID)(),timestamp:new Date,category:`event`,type:`tool-end`,data:{toolName:i.toolName,firstArg:i.firstArg,isRunning:!1,result:n,toolResultData:t.toolResultData}}),i}const ar=[{pattern:/\b401\b|invalid.*api.?key|authentication.*fail|unauthorized/i,message:"Invalid API key. Run `/provider` to reconfigure, or check your settings file (~/.robota/settings.json)."},{pattern:/\b403\b|permission.*denied|forbidden/i,message:"Access denied. Your API key may lack permission for this model. Check your provider plan or run `/provider` to switch accounts."},{pattern:/\b429\b|rate.?limit|too many requests|quota.*exceeded/i,message:"Rate limit reached. Wait a moment and try again. Consider switching to a different model with `/model`."},{pattern:/\b500\b|internal server error/i,message:`The AI provider returned an internal error. This is usually temporary — try again.`},{pattern:/\b503\b|service.*unavailable|overloaded/i,message:`The AI provider is temporarily unavailable or overloaded. Try again in a few seconds.`},{pattern:/\b502\b|bad gateway/i,message:`The AI provider gateway is unreachable. Check your network or try again shortly.`},{pattern:/\btimeout\b|timed.?out|ETIMEDOUT/i,message:`The request timed out. Check your internet connection, or try a shorter prompt to reduce response time.`},{pattern:/ENOTFOUND|ECONNREFUSED|ECONNRESET|network.*error|fetch.*fail/i,message:`Network connection failed. Check your internet connection and verify your provider URL in settings.`}];function or(e){if(e instanceof c.AuthenticationError)return"Invalid API key. Run `/provider` to reconfigure, or check your settings file (~/.robota/settings.json).";if(e instanceof c.RateLimitError)return`Rate limit reached${e.retryAfter?` (retry after ${e.retryAfter}s)`:``}. Wait a moment and try again. Consider switching to a different model with \`/model\`.`;if(e instanceof c.NetworkError)return`Network connection failed. Check your internet connection and verify your provider URL in settings.`;if(e instanceof c.ProviderError&&e.originalError)return or(e.originalError);let t=e.message;for(let{pattern:e,message:n}of ar)if(e.test(t))return n;return t}async function sr(e,t,n,r){let i=r.getHistory();i.push((0,c.messageToHistoryEntry)((0,c.createUserMessage)(t??e))),r.onWorkspaceUpdated();let a=r.getSession().getHistory().length;r.resetUsedMemoryReferences();try{let o=await Kn(e,r.getCwd(),n,r.getContextReferences());o.promptFileReferenceEntry&&i.push(o.promptFileReferenceEntry),r.recordContextReferenceUsage(o.activeContextReferenceRecords),r.recordPromptContextReferences(o.promptFileReferenceRecords),await r.beginEditCheckpointTurn(t??e);let s=await r.getSession().run(o.modelInput,o.hookInput);r.flushStreaming(),L({activeTools:r.getActiveTools(),history:i}),r.clearStreaming();let l=Un(s||`(empty response)`,r.getSession().getHistory(),i,a,r.getSession().getContextState(),o.promptFileReferenceRecords);i.push((0,c.messageToHistoryEntry)((0,c.createAssistantMessage)(l.response))),l.usage&&i.push(Gn(l.usage)),r.onComplete(l),r.onContextUpdate()}catch(e){if(r.flushStreaming(),Vn(e)){let e=Wn(r.getSession().getHistory(),i,a,r.getSession().getContextState());L({activeTools:r.getActiveTools(),history:i}),r.clearStreaming(),e.response&&i.push((0,c.messageToHistoryEntry)((0,c.createAssistantMessage)(e.response))),e.usage&&i.push(Gn(e.usage)),i.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Interrupted by user.`))),r.onInterrupted(e)}else{L({activeTools:r.getActiveTools(),history:i}),r.clearStreaming();let t=e instanceof Error?e:Error(String(e)),n=or(t);i.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Error: ${n}`))),r.onError(t)}}}var cr=class{histTracker;skillRouter;callbacks;executing=!1;streamingText=``;flushTimer=null;activeTools=[];pendingPrompt=null;pendingDisplayInput;pendingRawInput;pendingTurnOptions={};shuttingDown=!1;wakeTaskIds=new Set;constructor(e,t,n){this.histTracker=e,this.skillRouter=t,this.callbacks=n}clearPendingQueue(){this.pendingPrompt=null,this.pendingDisplayInput=void 0,this.pendingRawInput=void 0,this.pendingTurnOptions={}}clearStreaming(){this.streamingText=``,this.activeTools=[],this.flushTimer&&=(clearTimeout(this.flushTimer),null)}flushStreaming(){this.flushTimer&&=(clearTimeout(this.flushTimer),null)}handleTextDelta(e){this.streamingText+=e,this.callbacks.emit(`text_delta`,e),this.flushTimer||=setTimeout(()=>{this.flushTimer=null},16)}handleCompactEvent(e){e.trigger===`auto`&&this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Auto compacted context: ${Math.round(e.before.usedPercentage)}% -> ${Math.round(e.after.usedPercentage)}%`))),this.callbacks.emit(`compact`,e),this.callbacks.emit(`context_update`,e.after)}handleToolExecution(e){let t={activeTools:this.activeTools,history:this.histTracker.getHistory()};if(e.type===`start`){let n=rr(t,e);this.activeTools=t.activeTools,this.callbacks.emit(`tool_start`,n)}else{let n=ir(t,e);this.activeTools=t.activeTools,n&&this.callbacks.emit(`tool_end`,n)}}emitExecutionWorkspaceUpdated(e,t){this.callbacks.getSession()&&this.callbacks.emit(`execution_workspace_event`,{type:`execution_workspace_updated`,cause:e,...t?{entryId:t}:{},snapshot:this.callbacks.getExecutionWorkspaceSnapshot()})}drainPendingQueue(e){if(!this.shuttingDown&&this.pendingPrompt){let t=this.pendingPrompt,n=this.pendingDisplayInput,r=this.pendingRawInput,i=this.pendingTurnOptions;this.clearPendingQueue(),setTimeout(()=>void e(t,n,r,i),0)}}async executePrompt(e,t,n,r,i,a,o,s,c={}){await en(r,i,a,o,()=>this.callbacks.getSessionOrThrow(),(e,t)=>this.callbacks.emit(e,t)),this.executing=!0,this.clearStreaming(),this.callbacks.emit(`turn_source`,c.turnSource??`user`),this.callbacks.emit(`user_message`,t??e),this.callbacks.emit(`thinking`,!0);try{await sr(e,t,n,{getSession:()=>this.callbacks.getSessionOrThrow(),getCwd:()=>this.callbacks.getCwd(),getHistory:()=>this.histTracker.getHistory(),getContextReferences:()=>this.histTracker.listInjectionContextReferences(),getActiveTools:()=>this.activeTools,resetUsedMemoryReferences:()=>this.histTracker.resetUsedMemoryReferences(),recordContextReferenceUsage:e=>this.histTracker.recordContextReferenceUsage(e),recordPromptContextReferences:e=>this.histTracker.recordPromptContextReferences(e),beginEditCheckpointTurn:e=>this.histTracker.beginEditCheckpointTurn(e),flushStreaming:()=>this.flushStreaming(),clearStreaming:()=>this.clearStreaming(),onWorkspaceUpdated:()=>this.emitExecutionWorkspaceUpdated(`main_thread`),onComplete:e=>{this.callbacks.emit(`complete`,e)},onInterrupted:e=>{this.callbacks.emit(`interrupted`,e)},onError:e=>{this.callbacks.emit(`error`,e)},onContextUpdate:()=>{this.callbacks.emit(`context_update`,this.callbacks.getContextState())}})}finally{try{await this.histTracker.finalizeEditCheckpointTurn()}catch(e){this.callbacks.emit(`error`,e instanceof Error?e:Error(String(e)))}this.executing=!1,this.callbacks.emit(`thinking`,!1),c.wakeTaskId!==void 0&&this.wakeTaskIds.delete(c.wakeTaskId),this.emitExecutionWorkspaceUpdated(`main_thread`),this.callbacks.persistSession(),this.drainPendingQueue(s)}}async executeForkSkillCommand(e,t,n,r,i,a){if(this.executing)throw Error(`Cannot execute fork skill while another prompt is running.`);this.executing=!0,this.clearStreaming(),this.callbacks.emit(`thinking`,!0),this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createUserMessage)(n??`/${e.name}`))),this.emitExecutionWorkspaceUpdated(`main_thread`);try{let n=await this.skillRouter.executeSkillWithActivation(e,t,i,r);return await this.applyForkSkillResult(n.result??`(empty response)`),n}catch(e){let t=e instanceof Error?e:Error(String(e));return this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Error: ${or(t)}`))),this.callbacks.emit(`error`,t),{mode:`fork`,result:``}}finally{this.executing=!1,this.callbacks.emit(`thinking`,!1),this.emitExecutionWorkspaceUpdated(`main_thread`),this.callbacks.persistSession(),this.drainPendingQueue(a)}}async executeForegroundCommand(e,t){this.executing=!0,this.clearStreaming(),this.callbacks.emit(`thinking`,!0),this.emitExecutionWorkspaceUpdated(`main_thread`);try{let t=await e();return this.callbacks.emit(`context_update`,this.callbacks.getContextState()),t}catch(e){return{success:!1,message:`Error: ${e instanceof Error?e.message:String(e)}`}}finally{this.executing=!1,this.callbacks.emit(`thinking`,!1),this.emitExecutionWorkspaceUpdated(`main_thread`),this.callbacks.persistSession(),this.drainPendingQueue(t)}}async applyForkSkillResult(e){this.flushStreaming(),L({activeTools:this.activeTools,history:this.histTracker.getHistory()}),this.clearStreaming();let t={response:e,history:this.histTracker.getHistory(),toolSummaries:[],contextState:this.callbacks.getContextState()};this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createAssistantMessage)(e))),this.callbacks.emit(`complete`,t),this.callbacks.emit(`context_update`,this.callbacks.getContextState())}};function lr(e,t,n){let r=j(n)?.customAgentRegistry?.(e)??k(e);if(!r)throw Error(`Unknown agent type: ${e}`);return t.allowedTools?{...r,tools:t.allowedTools}:r}async function ur(e,t,n){let r=j(n);if(!r)throw Error(`Fork execution is not available. Agent runtime deps may not be initialized.`);return vt({agentDefinition:lr(t.agent??`general-purpose`,t,n),parentConfig:r.config,parentContext:r.context,parentTools:r.tools,provider:r.provider,terminal:r.terminal,isForkWorker:!0,permissionMode:r.permissionMode,permissionHandler:r.permissionHandler,hooks:r.hooks,hookTypeExecutors:r.hookTypeExecutors,onTextDelta:r.onTextDelta,onToolExecution:r.onToolExecution}).run(e)}async function dr(e,t,n){let r=await On([t],{cwd:n,reason:`manual`});if(hn(r.diagnostics))return{references:[...e],result:{evicted:[],diagnostics:[gn(r.diagnostics)]}};let i=r.references[0];if(!i)return{references:[...e],result:{evicted:[],diagnostics:[`No context reference was resolved.`]}};let a=tn(F([i])[0],`manual`,`active`),o=nn(e,a);return{references:o.references,result:{reference:a,evicted:o.evicted,diagnostics:[]}}}function fr(e,t,n){if(t.length===0)return[...e];let r=new Date().toISOString(),i=[...e];for(let e of t){let t=tn(e,n.loadType,n.status,r);i=nn(i,t).references}return i}function pr(e,t){let n=new Date().toISOString();return e.map(e=>{let r=(0,g.relative)(t,e.filePath);return{id:`system:${r}`,sourcePath:e.filePath,relativePath:r,originalReference:r,loadType:`system`,status:`active`,byteLength:Buffer.byteLength(e.content,`utf-8`),loadedAt:n,lastUsedAt:n}})}function R(e){let t=(0,g.join)(e,`.robota`);return{settings:(0,g.join)(t,`settings.json`),settingsLocal:(0,g.join)(t,`settings.local.json`),logs:(0,g.join)(t,`logs`),sessions:(0,g.join)(t,`sessions`),memory:(0,g.join)(t,`memory`),checkpoints:(0,g.join)(t,`checkpoints`)}}function mr(){let e=(0,g.join)((0,_.homedir)(),`.robota`);return{settings:(0,g.join)(e,`settings.json`),sessions:(0,g.join)(e,`sessions`),onboarded:(0,g.join)(e,`onboarded`)}}function hr(e){let t=e.fs??new N,n=e.manifests.filter(t=>t.sequence>e.target.sequence),r=e.manifests.filter(t=>t.sequence>=e.target.sequence);return{target:gr(e.target),capturedFiles:e.target.files.map(n=>{let r=n.snapshotFile?(0,g.join)(e.checkpointDir(e.sessionId,e.target.id),n.snapshotFile):void 0,i=r?vr(r,t):void 0;return{originalPath:n.originalPath,relativePath:(0,g.relative)(e.cwd,n.originalPath),existed:n.existed,restoreAction:n.existed?`restore-preimage`:`delete-created-file`,snapshotAvailable:n.existed?i!==void 0:!1,...i?{snapshotSizeBytes:i.size}:{}}}),restoreToCheckpoint:_r(n),rollbackThroughCheckpoint:_r(r)}}function gr(e){return{id:e.id,sessionId:e.sessionId,sequence:e.sequence,prompt:e.prompt,createdAt:e.createdAt,fileCount:e.fileCount}}function _r(e){return{checkpointIds:e.map(e=>e.id),fileCount:e.reduce((e,t)=>e+t.fileCount,0)}}function vr(e,t){try{return t.statSync(e)}catch{return}}const yr=`manifest.json`,br=`files`;var z=class{fs;fsAsync;cwd;rootDir;now;activeTurn=null;constructor(e,t=new N,n=new P){this.fs=t,this.fsAsync=n,this.cwd=(0,g.resolve)(e.cwd),this.rootDir=R(this.cwd).checkpoints,this.now=e.now??(()=>new Date)}async beginTurn(e){this.activeTurn&&await this.finalizeTurn();let t=this.nextSequence(e.sessionId),n=`turn-${String(t).padStart(4,`0`)}`,r=(0,g.join)(this.sessionDir(e.sessionId),n);await this.fsAsync.mkdir((0,g.join)(r,br),{recursive:!0});let i={version:1,id:n,sessionId:e.sessionId,sequence:t,prompt:e.prompt,createdAt:this.now().toISOString(),fileCount:0,files:[]};return this.activeTurn={manifest:i,dir:r,capturedPaths:new Set},B(i)}async captureFile(e){if(!this.activeTurn)return;let t=(0,g.resolve)(this.cwd,e);if(this.activeTurn.capturedPaths.has(t)||Sr(this.rootDir,t))return;let n=await this.createFileRecord(t,this.activeTurn);this.activeTurn.manifest.files.push(n),this.activeTurn.manifest.fileCount=this.activeTurn.manifest.files.length,this.activeTurn.capturedPaths.add(t)}async finalizeTurn(){if(!this.activeTurn)return;let e=this.activeTurn;return this.activeTurn=null,await this.writeManifest(e.dir,e.manifest),B(e.manifest)}list(e){return this.loadManifests(e).map(B)}inspect(e,t){let n=this.loadManifests(e),r=n.find(e=>e.id===t);if(!r)throw Error(`Unknown edit checkpoint: ${t}`);return hr({cwd:this.cwd,sessionId:e,target:r,manifests:n,checkpointDir:(e,t)=>this.checkpointDir(e,t)})}async restoreToCheckpoint(e,t){let n=this.loadManifests(e),r=n.find(e=>e.id===t);if(!r)throw Error(`Unknown edit checkpoint: ${t}`);let i=n.filter(e=>e.sequence>r.sequence).sort((e,t)=>t.sequence-e.sequence),a=0;for(let t of i)for(let n of t.files)await this.restoreFile(e,t.id,n),a+=1;for(let t of i)await this.fsAsync.rm(this.checkpointDir(e,t.id),{recursive:!0,force:!0});return{target:B(r),restoredCheckpointCount:i.length,restoredFileCount:a,removedCheckpointCount:i.length}}async rollbackThroughCheckpoint(e,t){let n=this.loadManifests(e),r=n.find(e=>e.id===t);if(!r)throw Error(`Unknown edit checkpoint: ${t}`);let i=n.filter(e=>e.sequence>=r.sequence).sort((e,t)=>t.sequence-e.sequence),a=0;for(let t of i)for(let n of t.files)await this.restoreFile(e,t.id,n),a+=1;for(let t of i)await this.fsAsync.rm(this.checkpointDir(e,t.id),{recursive:!0,force:!0});return{target:B(r),restoredCheckpointCount:i.length,restoredFileCount:a,removedCheckpointCount:i.length}}async createFileRecord(e,t){if(!await Cr(this.fsAsync,this.fs,e))return{originalPath:e,existed:!1};let n=(0,g.join)(br,`${String(t.manifest.files.length+1).padStart(6,`0`)}.content`);return await this.fsAsync.copyFile(e,(0,g.join)(t.dir,n)),{originalPath:e,existed:!0,snapshotFile:n}}async restoreFile(e,t,n){if(!n.existed){await this.fsAsync.rm(n.originalPath,{force:!0});return}if(!n.snapshotFile)throw Error(`Checkpoint file record is missing a snapshot: ${n.originalPath}`);await this.fsAsync.mkdir((0,g.dirname)(n.originalPath),{recursive:!0}),await this.fsAsync.copyFile((0,g.join)(this.checkpointDir(e,t),n.snapshotFile),n.originalPath)}loadManifests(e){let t=this.sessionDir(e);return wr(this.fs,t).map(e=>(0,g.join)(t,e,yr)).map(e=>Tr(this.fs,e)).filter(e=>e!==void 0).sort((e,t)=>e.sequence-t.sequence)}nextSequence(e){return(this.list(e).at(-1)?.sequence??0)+1}async writeManifest(e,t){await this.fsAsync.mkdir(e,{recursive:!0});let n=(0,g.join)(e,yr),r=`${n}.tmp`;await this.fsAsync.writeFile(r,JSON.stringify(t,null,2),`utf8`),await this.fsAsync.rename(r,n)}sessionDir(e){return(0,g.join)(this.rootDir,xr(e))}checkpointDir(e,t){return(0,g.join)(this.sessionDir(e),xr(t))}};function B(e){return{id:e.id,sessionId:e.sessionId,sequence:e.sequence,prompt:e.prompt,createdAt:e.createdAt,fileCount:e.fileCount}}function xr(e){return e.replace(/[^a-zA-Z0-9._-]/g,`_`)}function Sr(e,t){let n=(0,g.relative)(e,t);return n.length===0||!n.startsWith(`..`)&&!n.startsWith(`/`)}async function Cr(e,t,n){try{return await e.access(n,t.constants.F_OK),!0}catch{return!1}}function wr(e,t){try{return e.readdirSync(t)}catch{return[]}}function Tr(e,t){try{let n=e.readFileSync(t,`utf8`);return JSON.parse(n)}catch{return}}function Er(e){return e.source===`plugin`?`plugin`:`skill`}function Dr(e){return e.context===`fork`?`fork`:`inject`}function Or(e){return{type:`skill-activation`,skillName:e.skill.name,source:Er(e.skill),invocation:e.invocation,mode:Dr(e.skill),status:e.status,timestamp:new Date().toISOString(),...e.qualifiedName===void 0?{}:{qualifiedName:e.qualifiedName},...e.error===void 0?{}:{error:e.error}}}function kr(e){let t=e.source===`plugin`?`plugin skill`:`skill`;return e.status===`failed`?`Skill failed: ${e.skillName}${e.error?` (${e.error})`:``}`:e.status===`completed`?`Skill completed: ${e.skillName}`:`Invoking ${t}: ${e.skillName}`}const Ar=new Set([`memory_candidate_saved`,`memory_candidate_approved`,`memory_candidate_rejected`,`memory_retrieved`]);function jr(e){let t=e.topic?`: ${e.topic}`:``;switch(e.type){case`memory_candidate_saved`:return`Memory saved${t}`;case`memory_candidate_approved`:return`Memory approved${t}`;case`memory_candidate_rejected`:return`Memory rejected${t}${e.reason?` (${e.reason})`:``}`;case`memory_retrieved`:return`Memory recalled${t}`;case`memory_candidate_extracted`:return`Memory candidate extracted${t}`;case`memory_candidate_queued`:return`Memory candidate queued${t}`;case`memory_candidate_skipped`:return`Memory candidate skipped${t}${e.reason?` (${e.reason})`:``}`}}var Mr=class{cwd;getSessionId;getExecuting;persistSession;emitSkillActivation;emitMemoryEvent;history=[];editCheckpointStore=null;memoryEvents=[];usedMemoryReferences=[];contextReferences=[];systemContextReferences=[];skillActivationEvents=[];constructor(e,t,n,r,i,a,o=null){this.cwd=e,this.getSessionId=t,this.getExecuting=n,this.persistSession=r,this.emitSkillActivation=i,this.emitMemoryEvent=a,this.editCheckpointStore=o}restoreState(e){this.history=e.history,this.memoryEvents=e.memoryEvents,this.usedMemoryReferences=e.usedMemoryReferences,this.contextReferences=e.contextReferences,this.skillActivationEvents=e.skillActivationEvents}getState(){return{history:this.history,memoryEvents:this.memoryEvents,usedMemoryReferences:this.usedMemoryReferences,contextReferences:this.contextReferences,skillActivationEvents:this.skillActivationEvents}}append(e){this.history.push(e)}getHistory(){return this.history}clearHistory(){this.history=[],this.memoryEvents=[],this.usedMemoryReferences=[]}resetUsedMemoryReferences(){this.usedMemoryReferences=[]}recordContextReferenceUsage(e){this.contextReferences=fr(this.contextReferences,e,{loadType:`manual`,status:`active`}),this.persistSession()}recordPromptContextReferences(e){this.contextReferences=fr(this.contextReferences,e,{loadType:`prompt-reference`,status:`observed`}),this.persistSession()}listEditCheckpoints(){let e=this.getSessionId();return this.getCheckpointStore().list(e)}inspectEditCheckpoint(e){let t=this.getSessionId();return this.getCheckpointStore().inspect(t,e)}async restoreEditCheckpoint(e){if(this.getExecuting())throw Error(`Cannot restore edit checkpoint while a prompt is running.`);let t=await this.getCheckpointStore().restoreToCheckpoint(this.getSessionId(),e);return this.history.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Restored edit checkpoint: ${e}`))),this.persistSession(),t}async rollbackEditCheckpoint(e){if(this.getExecuting())throw Error(`Cannot rollback edit checkpoint while a prompt is running.`);let t=await this.getCheckpointStore().rollbackThroughCheckpoint(this.getSessionId(),e);return this.history.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Rolled back edit checkpoint: ${e}`))),this.persistSession(),t}async beginEditCheckpointTurn(e){this.editCheckpointStore&&await this.editCheckpointStore.beginTurn({sessionId:this.getSessionId(),prompt:e})}async finalizeEditCheckpointTurn(){if(this.editCheckpointStore)try{await this.editCheckpointStore.finalizeTurn()}catch(e){let t=e instanceof Error?e:Error(String(e));throw this.history.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Checkpoint error: ${t.message}`))),t}}setEditCheckpointStore(e){this.editCheckpointStore=e}getUsedMemoryReferences(){return[...this.usedMemoryReferences]}recordMemoryEvent(e){this.memoryEvents.push(e),Ar.has(e.type)&&this.history.push({id:(0,p.randomUUID)(),timestamp:new Date(e.at),category:`event`,type:`memory-event`,data:{...e,message:jr(e)}}),this.emitMemoryEvent(e),this.persistSession()}recordSystemContextFiles(e){this.systemContextReferences=pr(e,this.cwd)}listContextReferences(){return[...this.systemContextReferences,...this.contextReferences]}listInjectionContextReferences(){return[...this.contextReferences]}async addContextReference(e){let{references:t,result:n}=await dr(this.contextReferences,e,this.cwd);return this.contextReferences=t,this.persistSession(),n}removeContextReference(e){let t=rn(this.contextReferences,e);return this.contextReferences=t.references,this.persistSession(),t.result}clearContextReferences(){let e=an(this.contextReferences);return this.contextReferences=[],this.persistSession(),e}getSkillActivationEvents(){return[...this.skillActivationEvents]}recordSkillActivationEvent(e,t){this.skillActivationEvents.push(e),t&&this.history.push({id:(0,p.randomUUID)(),timestamp:new Date(e.timestamp),category:`event`,type:`skill-activation`,data:{...e,message:kr(e)}}),this.emitSkillActivation(e),this.persistSession()}getCheckpointStore(){return this.editCheckpointStore||=new z({cwd:this.cwd}),this.editCheckpointStore}};function Nr(e){if((0,v.existsSync)(e))try{return JSON.parse((0,v.readFileSync)(e,`utf-8`))}catch{return}}function Pr(e){if((0,v.existsSync)((0,y.join)(e,`pnpm-workspace.yaml`))||(0,v.existsSync)((0,y.join)(e,`pnpm-lock.yaml`)))return`pnpm`;if((0,v.existsSync)((0,y.join)(e,`yarn.lock`)))return`yarn`;if((0,v.existsSync)((0,y.join)(e,`bun.lockb`)))return`bun`;if((0,v.existsSync)((0,y.join)(e,`package-lock.json`)))return`npm`}async function Fr(e){let t=(0,y.join)(e,`package.json`),n=(0,y.join)(e,`tsconfig.json`),r=(0,y.join)(e,`pyproject.toml`),i=(0,y.join)(e,`Cargo.toml`),a=(0,y.join)(e,`go.mod`);if((0,v.existsSync)(t)){let r=Nr(t),i=(0,v.existsSync)(n)?`typescript`:`javascript`,a=Pr(e);return{type:`node`,name:r?.name,packageManager:a,language:i}}return(0,v.existsSync)(r)||(0,v.existsSync)((0,y.join)(e,`setup.py`))?{type:`python`,language:`python`}:(0,v.existsSync)(i)?{type:`rust`,language:`rust`}:(0,v.existsSync)(a)?{type:`go`,language:`go`}:{type:`unknown`,language:`unknown`}}function Ir(e,t){e.injectRawMessage(t)}function Lr(e,t,n){let r=e.load(t);if(!r)return{history:[],sessionName:void 0,pendingRestoreMessages:null,backgroundTasks:[],backgroundTaskEvents:[],backgroundJobGroups:[],backgroundJobGroupEvents:[],skillActivationEvents:[],memoryEvents:[],usedMemoryReferences:[],contextReferences:[],sandboxSnapshotId:void 0};let i=r.history??[],a=r.backgroundTasks??[],o=r.backgroundTaskEvents??[],s=r.backgroundJobGroups??[],c=r.backgroundJobGroupEvents??[],l=r.skillActivationEvents??[],u=r.memoryEvents??[],d=r.usedMemoryReferences??[],f=r.contextReferences??[],p=r.sandboxSnapshotId,{backgroundTasks:m,backgroundTaskEvents:h}=Rr(a,o),g=r.name,_=null;if(r.messages)if(n)for(let e of r.messages)Ir(n,e);else _=r.messages;return{history:i,sessionName:g,pendingRestoreMessages:_,backgroundTasks:m,backgroundTaskEvents:h,backgroundJobGroups:s,backgroundJobGroupEvents:c,skillActivationEvents:l,memoryEvents:u,usedMemoryReferences:d,contextReferences:f,sandboxSnapshotId:p}}function Rr(e,t){let n=new Date().toISOString(),r=[];return{backgroundTasks:e.map(e=>{if(zr(e.status)||Br(e))return e;let t={...e,status:`failed`,timeoutReason:`stale_worker`,error:{category:`timeout`,message:`Restored background task is stale; worker cannot be reattached`,recoverable:!0},unread:!0,completedAt:n,updatedAt:n};return r.push({type:`background_task_failed`,task:t}),t}),backgroundTaskEvents:[...t,...r]}}function zr(e){return e===`completed`||e===`failed`||e===`cancelled`}function Br(e){return e.kind===`scheduled`&&e.status===`sleeping`&&e.schedule!==void 0}function Vr(e){if(e.type===`background_task_started`&&e.task.kind===`agent`)return`SubagentStart`;if((e.type===`background_task_completed`||e.type===`background_task_failed`||e.type===`background_task_cancelled`)&&e.task.kind===`agent`)return`SubagentStop`}function Hr(e,t,n,r){let i=Vr(e);!i||!(`task`in e)||(0,c.runHooks)(n,i,{session_id:e.task.parentSessionId,cwd:t,hook_event_name:i,agent_id:e.task.id,agent_type:e.task.agentType??e.task.label,...e.task.transcriptPath?{agent_transcript_path:e.task.transcriptPath,transcript_path:e.task.transcriptPath}:{},...e.task.error?.message||e.task.timeoutReason?{reason:e.task.error?.message??e.task.timeoutReason}:{},...i===`SubagentStop`?{stop_hook_active:!1,...e.task.result?.output?{last_assistant_message:e.task.result.output}:{}}:{},env:{CLAUDE_PROJECT_DIR:t,CLAUDE_SESSION_ID:e.task.parentSessionId,ROBOTA_AGENT_ID:e.task.id,ROBOTA_AGENT_TYPE:e.task.agentType??e.task.label}},r).catch(()=>void 0)}const Ur=[`Bash — execute shell commands`,`Read — read file contents with line numbers`,`Write — write content to a file`,`Edit — replace a string in a file`,`Glob — find files matching a pattern`,`Grep — search file contents with regex`,`WebFetch — fetch URL content as text`,`WebSearch — search the internet through the configured local tool`];function Wr(e={}){return[(0,u.createBashTool)(e),(0,u.createReadTool)(e),(0,u.createWriteTool)(e),(0,u.createEditTool)(e),u.globTool,u.grepTool,u.webFetchTool,u.webSearchTool]}const Gr=new Set([`tools`,`disallowedTools`]),Kr=new Set([`maxTurns`]);function qr(e){let t=e.includes(`,`)?/\s*,\s*/:/\s+/;return e.split(t).map(e=>e.trim()).filter(e=>e.length>0)}function Jr(e){let t=e.split(`
67
- `);if(t[0]?.trim()!==`---`)return{frontmatter:null,body:e};let n=-1;for(let e=1;e<t.length;e++)if(t[e]?.trim()===`---`){n=e;break}if(n===-1)return{frontmatter:null,body:e};let r={};for(let e=1;e<n;e++){let n=t[e].match(/^([a-zA-Z][a-zA-Z0-9]*(?:[A-Z][a-z]*)*):\s*(.+)/);if(!n)continue;let i=n[1],a=n[2].trim();Gr.has(i)?r[i]=qr(a):Kr.has(i)?r[i]=parseInt(a,10):r[i]=a}let i=t.slice(n+1).join(`
68
- `).trim();return{frontmatter:Object.keys(r).length>0?r:null,body:i}}function V(e,t){if(!t.existsSync(e))return[];let n=[],r;try{r=t.readdirSync(e,{withFileTypes:!0})}catch{return[]}for(let i of r){if(!i.isFile()||!i.name.endsWith(`.md`))continue;let r=(0,g.join)(e,i.name),{frontmatter:a,body:o}=Jr(t.readFileSync(r,`utf-8`)),s=(0,g.basename)(i.name,`.md`),c={name:a?.name??s,description:a?.description??``,systemPrompt:o};a?.model!==void 0&&(c.model=a.model),a?.maxTurns!==void 0&&(c.maxTurns=a.maxTurns),a?.tools!==void 0&&(c.tools=a.tools),a?.disallowedTools!==void 0&&(c.disallowedTools=a.disallowedTools),n.push(c)}return n}var Yr=class{cwd;home;fs;constructor(e,t,n=new N){this.cwd=e,this.home=t??(0,_.homedir)(),this.fs=n}loadAll(){let e=[V((0,g.join)(this.cwd,`.robota`,`agents`),this.fs),V((0,g.join)(this.cwd,`.agents`,`agents`),this.fs),V((0,g.join)(this.cwd,`.claude`,`agents`),this.fs),V((0,g.join)(this.home,`.robota`,`agents`),this.fs),V((0,g.join)(this.home,`.claude`,`agents`),this.fs)],t=new Set,n=[];for(let r of e)for(let e of r)t.has(e.name)||(t.add(e.name),n.push(e));let r=[...n];for(let e of et)t.has(e.name)||r.push(e);return r}getAgent(e){return this.loadAll().find(t=>t.name===e)}};function Xr(e){let t=e.content.trim();return e.title?[`## ${e.title}`,t].join(`
69
- `):t}function Zr(e){return[...e].filter(e=>e.content.trim().length>0).sort((e,t)=>e.priority-t.priority||e.id.localeCompare(t.id)).map(e=>Xr(e)).join(`
70
-
71
- `)}function H(e,t,n,r,i){return{id:e,title:t,priority:n,content:r,source:i}}function Qr(e){if(e)return H(`runtime-cwd`,`Working Directory`,30,`\`${e}\``,`runtime`)}function $r(e){let t=[];return e.name!==void 0&&t.push(`- **Name:** ${e.name}`),e.type!==`unknown`&&t.push(`- **Type:** ${e.type}`),e.language!==`unknown`&&t.push(`- **Language:** ${e.language}`),e.packageManager!==void 0&&t.push(`- **Package manager:** ${e.packageManager}`),H(`runtime-project`,`Current Project`,40,t.join(`
72
- `),`runtime`)}function ei(e){return H(`permission-mode`,`Permission Mode`,50,`- **Permission mode:** ${e}`,`permissions`)}function ti(e){if(!(e===void 0||e.trim().length===0))return H(`runtime-response-language`,`Response Language`,45,e,`runtime`)}function ni(e){if(e.trim().length!==0)return H(`project-agents-md`,`Agent Instructions`,10,e,`project-instructions`)}function ri(e){if(e.trim().length!==0)return H(`project-claude-md`,`Project Notes`,20,e,`project-instructions`)}function ii(e){if(!(e===void 0||e.trim().length===0))return H(`project-memory`,`Project Memory`,25,e,`project-instructions`)}function ai(e){if(!(e===void 0||e.trim().length===0))return H(`active-task-context`,`Active Task Context`,27,e,`project-instructions`)}function oi(e){if(e.length!==0)return H(`tool-descriptions`,`Available Tools`,60,e.map(e=>`- ${e}`).join(`
73
- `),`tool`)}function si(e){let t=e.argumentHint?` ${e.argumentHint}`:``;return`- ${e.name}${t}: ${e.description}`}function ci(e,t,n,r,i){let a=i.filter(t=>t.modelInvocable&&t.kind===e).map(si);if(a.length!==0)return H(`capability-${e}`,t,n,a.join(`
74
- `),r)}function li(e){let t=[],n=ci(`builtin-command`,`Built-in Commands`,70,`command`,e),r=ci(`skill`,`Skills`,80,`skill`,e),i=ci(`agent`,`Agents`,90,`agent`,e),a=ci(`tool`,`Tools`,100,`tool`,e);return n&&t.push(n),r&&t.push(r),i&&t.push(i),a&&t.push(a),t}function U(e,t){t!==void 0&&e.push(t)}function ui(e){return e.map(e=>({name:e.name,kind:`skill`,description:e.description,userInvocable:!0,modelInvocable:e.disableModelInvocation!==!0}))}function di(e){return e.map(e=>({name:e.name,kind:`agent`,description:e.description,userInvocable:!1,modelInvocable:!0,safety:`background-agent`}))}function fi(e){return[...e.commandDescriptors??[],...e.skills?ui(e.skills):[],...e.agents?di(e.agents):[]]}function pi(e){let t=[];return U(t,ni(e.agentsMd)),U(t,ri(e.claudeMd)),U(t,ii(e.memoryMd)),U(t,ai(e.taskContext)),U(t,Qr(e.cwd)),t.push($r(e.projectInfo)),U(t,ti(e.language)),t.push(ei(e.permissionMode)),U(t,oi(e.toolDescriptions)),t.push(...li(fi(e))),Zr(t)}function mi(e){return e}const hi=d.z.object({command:d.z.string().describe(`The shell command to start in the background`),timeout:d.z.number().optional().describe(`Optional timeout in milliseconds. Default is 120000.`),workingDirectory:d.z.string().optional().describe(`Working directory for the command. Defaults to the current project directory.`),stdin:d.z.string().optional().describe(`Optional stdin to write after the process starts.`),outputLimitBytes:d.z.number().optional().describe(`Maximum captured output bytes kept in the task result.`)});function gi(e,t,n){return JSON.stringify({success:!0,background:!0,output:``,taskId:e,status:t,command:n})}function _i(e){return JSON.stringify({success:!1,background:!0,output:``,error:`Background process error: ${e}`})}async function vi(e,t){try{let n=await t.backgroundTaskManager.spawn({kind:`process`,label:e.command,mode:`background`,parentSessionId:t.parentSessionId??`unknown-session`,depth:0,cwd:e.workingDirectory??t.cwd??process.cwd(),command:e.command,stdin:e.stdin,timeoutMs:e.timeout??12e4,outputLimitBytes:e.outputLimitBytes,metadata:t.metadata});return gi(n.id,n.status,e.command)}catch(e){return _i(e instanceof Error?e.message:String(e))}}function yi(e){return(0,u.createZodFunctionTool)(`BackgroundProcess`,`Start a shell command as a managed background task. Use this for long-running commands that should not block the current conversation. Use /background list, /background read <taskId>, /background cancel <taskId>, or /background close <taskId> to inspect or control it.`,mi(hi),async t=>vi(t,e))}function bi(e,t,n,r,i,a){let o,s=[],c;if(e.enableAgentRuntime){let u=new Yr(n);s=u.loadAll(),o={config:e.config,context:e.context,tools:i,terminal:e.terminal,provider:r,cwd:n,parentSessionId:t,permissionMode:e.permissionMode,permissionHandler:e.permissionHandler,hooks:e.config.hooks,hookTypeExecutors:a.length>0?a:void 0,onTextDelta:e.onTextDelta,onToolExecution:e.onToolExecution,customAgentRegistry:e=>u.getAgent(e),agentDefinitions:s};let d=new l.SubagentManager({runner:(e.subagentRunnerFactory??wt)(o),backgroundTaskRunners:e.backgroundTaskRunners});o.subagentManager=d,c=d.getBackgroundTaskManager(),o.backgroundTaskManager=c}else c=new l.BackgroundTaskManager({runners:e.backgroundTaskRunners??[]});let u=e.sessionLogger;return u&&c.subscribe(e=>wi(u,t,e)),c.subscribe(t=>Hr(t,n,e.config.hooks,a.length>0?a:void 0)),{agentToolDeps:o,agentDefinitions:s,backgroundTaskManager:c}}function xi(e,t,n,r,i){if(!e.backgroundTaskRunners?.some(e=>e.kind===`process`))return{backgroundProcessToolDeps:void 0};let a={backgroundTaskManager:t,cwd:r,parentSessionId:n,metadata:T({kind:`tool_call`,sessionId:n,label:`BackgroundProcess`})};return i.push(yi(a)),{backgroundProcessToolDeps:a}}function Si(e,t,n,r,i,a,o){let s=e.systemPromptBuilder??pi,l=[...Ur,...r?r.commandTools.map(lt):[]],u=e.toolDescriptions??(i?[...l,`BackgroundProcess — start long-running shell commands as managed background tasks`]:l),d={agentsMd:e.context.agentsMd,claudeMd:e.context.claudeMd,memoryMd:e.context.memoryMd,taskContext:e.context.taskContext,toolDescriptions:u,permissionMode:e.permissionMode??c.TRUST_TO_MODE[e.config.defaultTrustLevel]??`default`,projectInfo:e.projectInfo??{type:`unknown`,language:`unknown`},cwd:t,language:e.config.language,skills:a.map(e=>({name:e.name,description:e.description,disableModelInvocation:e.disableModelInvocation})),...o.length>0?{agents:o.map(e=>({name:e.name,description:e.description}))}:{},commandDescriptors:e.commandDescriptors??[]},f=s(d);return{finalSystemMessage:e.appendSystemPrompt?`${f}\n\n${e.appendSystemPrompt}`:f,rebuildSystemMessage:(t,n)=>{let r=s({...d,agentsMd:t,claudeMd:n});return e.appendSystemPrompt?`${r}\n\n${e.appendSystemPrompt}`:r}}}function Ci(e,t,n,r){t&&(t.parentSessionId=e.getSessionId()),n&&(n.parentSessionId=e.getSessionId()),Le(e,r),t&&kt(e,t)}function wi(e,t,n){let r={};if(n.type===`background_task_created`){r.taskId=n.task.id;let e=n.task.metadata?.executionOriginToolCallId;typeof e==`string`&&(r.originToolCallId=e)}e.log(t,`background_task_event`,{backgroundEventType:n.type,backgroundEvent:n,...r})}const Ti=new Set([`Write`,`Edit`]);function Ei(e,t){return e.map(e=>Ti.has(e.getName())?new Di(e,t):e)}var Di=class{delegate;recorder;schema;constructor(e,t){this.delegate=e,this.recorder=t,this.schema=e.schema}setEventService(e){this.delegate.setEventService(e)}async execute(e,t){let n=Oi(e);return n&&await this.recorder.captureFile(n),this.delegate.execute(e,t)}validate(e){return this.delegate.validate(e)}validateParameters(e){return this.delegate.validateParameters(e)}getDescription(){return this.delegate.getDescription()}getName(){return this.delegate.getName()}};function Oi(e){if(!e||typeof e!=`object`)return;let t=e.filePath;return typeof t==`string`&&t.length>0?t:void 0}const ki=new Set([`disable-model-invocation`,`user-invocable`]),Ai=new Set([`allowed-tools`]);function ji(e){return e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}function Mi(e){let t=e.includes(`,`)?/\s*,\s*/:/\s+/;return e.split(t).map(e=>e.trim()).filter(e=>e.length>0)}function Ni(e){let t=e.split(`
75
- `);if(t[0]?.trim()!==`---`)return null;let n={};for(let e=1;e<t.length;e++){let r=t[e];if(r.trim()===`---`)break;let i=r.match(/^([a-z][a-z0-9-]*):\s*(.+)/);if(!i)continue;let a=i[1],o=i[2].trim(),s=ji(a);ki.has(a)?n[s]=o===`true`:Ai.has(a)?n[s]=Mi(o):n[s]=o}return Object.keys(n).length>0?n:null}function Pi(e,t,n){let r={name:e?.name??n,description:e?.description??`Skill: ${n}`,source:`skill`,skillContent:t};return e?.argumentHint!==void 0&&(r.argumentHint=e.argumentHint),e?.disableModelInvocation!==void 0&&(r.disableModelInvocation=e.disableModelInvocation),e?.userInvocable!==void 0&&(r.userInvocable=e.userInvocable),e?.allowedTools!==void 0&&(r.allowedTools=e.allowedTools),e?.model!==void 0&&(r.model=e.model),e?.effort!==void 0&&(r.effort=e.effort),e?.context!==void 0&&(r.context=e.context),e?.agent!==void 0&&(r.agent=e.agent),r}function Fi(e,t){if(!t.existsSync(e))return[];let n=[],r=t.readdirSync(e,{withFileTypes:!0});for(let i of r){if(!i.isDirectory())continue;let r=(0,g.join)(e,i.name,`SKILL.md`);if(!t.existsSync(r))continue;let a=t.readFileSync(r,`utf-8`),o=Ni(a);n.push(Pi(o,a,i.name))}return n}function Ii(e,t){if(!t.existsSync(e))return[];let n=[],r=t.readdirSync(e,{withFileTypes:!0});for(let i of r){if(!i.isFile()||!i.name.endsWith(`.md`))continue;let r=(0,g.join)(e,i.name),a=t.readFileSync(r,`utf-8`),o=Ni(a),s=(0,g.basename)(i.name,`.md`);n.push(Pi(o,a,s))}return n}var Li=class{name=`skill`;cwd;home;fs;cachedCommands=null;constructor(e,t,n=new N){this.cwd=e,this.home=t??(0,_.homedir)(),this.fs=n}getCommands(){if(this.cachedCommands)return this.cachedCommands;let e=[Fi((0,g.join)(this.cwd,`.claude`,`skills`),this.fs),Ii((0,g.join)(this.cwd,`.claude`,`commands`),this.fs),Fi((0,g.join)(this.home,`.robota`,`skills`),this.fs),Fi((0,g.join)(this.cwd,`.agents`,`skills`),this.fs)],t=new Set,n=[];for(let r of e)for(let e of r)t.has(e.name)||(t.add(e.name),n.push(e));return this.cachedCommands=n,this.cachedCommands}getModelInvocableSkills(){return this.getCommands().filter(e=>e.disableModelInvocation!==!0)}getUserInvocableSkills(){return this.getCommands().filter(e=>e.userInvocable!==!1)}},Ri=class extends Error{filePath;constructor(e,t){super(`Settings file ${e} contains invalid JSON: ${t}. Fix or delete the file, or run robota diagnose.`),this.name=`SettingsParseError`,this.filePath=e}};function zi(){return(0,g.join)(process.env.HOME??process.env.USERPROFILE??`/`,`.robota`,`settings.json`)}function Bi(e,t){return t===void 0||t===`user`?zi():(0,g.join)(e,`.robota`,`settings.local.json`)}function W(e){if(!(0,m.existsSync)(e))return{};let t=(0,m.readFileSync)(e,`utf8`);try{return JSON.parse(t)}catch(t){throw new Ri(e,t instanceof Error?t.message:String(t))}}function G(e,t){(0,m.mkdirSync)((0,g.dirname)(e),{recursive:!0}),(0,m.writeFileSync)(e,JSON.stringify(t,null,2)+`
76
- `,`utf8`)}function Vi(e,t){let n=W(e),r=n.currentProvider,i=n.providers;if(typeof r==`string`&&Hi(i)){let e=i;e[r]={...Hi(e[r])?e[r]:{},model:t},n.providers=e}else n.provider={...Hi(n.provider)?n.provider:{},model:t};G(e,n)}function Hi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Ui(e){return(0,m.existsSync)(e)?((0,m.unlinkSync)(e),!0):!1}function Wi(e){let t=/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(e);return t?t[1].trim():e.trim()}var Gi=class{type=`agent`;sessionFactory;constructor(e){this.sessionFactory=e.sessionFactory}async execute(e,t){let n=e,r=n.maxTurns??50,i=n.timeout??60;try{let e=this.sessionFactory({maxTurns:r,timeout:i}),n=`Hook input:\n${JSON.stringify(t)}\n\nRespond with JSON: { "ok": boolean, "reason"?: string }`,a=await e.run(n),o=Wi(a),s;try{s=JSON.parse(o)}catch{return{exitCode:1,stdout:``,stderr:`Failed to parse agent response as JSON: ${a}`}}return s.ok?{exitCode:0,stdout:JSON.stringify(s),stderr:``}:{exitCode:2,stdout:``,stderr:s.reason??`Blocked by agent hook`}}catch(e){return{exitCode:1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}}};function Ki(e){let t=/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(e);return t?t[1].trim():e.trim()}var qi=class{type=`prompt`;providerFactory;defaultModel;constructor(e){this.providerFactory=e.providerFactory,this.defaultModel=e.defaultModel}async execute(e,t){let n=e,r=n.model??this.defaultModel;try{let e=this.providerFactory(r),i=`${n.prompt}\n\nContext:\n${JSON.stringify(t)}\n\nRespond with JSON: { "ok": boolean, "reason"?: string }`,a=await e.complete(i),o=Ki(a),s;try{s=JSON.parse(o)}catch{return{exitCode:1,stdout:``,stderr:`Failed to parse AI response as JSON: ${a}`}}return s.ok?{exitCode:0,stdout:JSON.stringify(s),stderr:``}:{exitCode:2,stdout:``,stderr:s.reason??`Blocked by prompt hook`}}catch(e){return{exitCode:1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}}};const Ji=new Set([`Write`,`Edit`]),Yi=new Set([`Bash`,`BackgroundProcess`]),Xi=new Set([`Read`,`Glob`,`Grep`,`WebFetch`,`WebSearch`]);function Zi(e){let t=e.toolName;return Xi.has(t)?{toolName:t,reversible:!0,sideEffect:`none`,rollbackLayer:`none`,status:`read-only`,message:`${t} does not mutate the local workspace.`}:Ji.has(t)?e.context.isolation===`worktree`||e.context.isolation===`provider-sandbox`?ea(t,`file-mutation`,e.context):e.context.checkpointAvailable?{toolName:t,reversible:!0,sideEffect:`file-mutation`,rollbackLayer:`edit-checkpoint`,status:`reversible`,message:`${t} is reversible through the active edit checkpoint.`}:{toolName:t,reversible:!1,sideEffect:`file-mutation`,rollbackLayer:`none`,status:`requires-checkpoint`,message:`${t} requires an edit checkpoint before file mutation.`}:Yi.has(t)?ea(t,`shell-process`,e.context):t===`Agent`?ta(e.toolArgs,e.context):{toolName:t,reversible:!1,sideEffect:`unknown`,rollbackLayer:`none`,status:`unknown`,message:`${t} has no reversible execution contract.`}}function Qi(e,t){let n={checkpointAvailable:t.checkpointAvailable,isolation:t.isolation??`none`},r=t.enforceUntrackedSideEffects??!0;return e.map(e=>new $i(e,{safetyContext:n,enforceUntrackedSideEffects:r}))}var $i=class{delegate;options;schema;constructor(e,t){this.delegate=e,this.options=t,this.schema=e.schema}setEventService(e){this.delegate.setEventService(e)}async execute(e,t){let n=Zi({toolName:this.getName(),toolArgs:aa(e),context:this.options.safetyContext});return!n.reversible&&this.options.enforceUntrackedSideEffects?oa(n):this.delegate.execute(e,t)}validate(e){return this.delegate.validate(e)}validateParameters(e){return this.delegate.validateParameters(e)}getDescription(){return this.delegate.getDescription()}getName(){return this.delegate.getName()}};function ea(e,t,n){return n.isolation===`worktree`?{toolName:e,reversible:!0,sideEffect:t,rollbackLayer:`worktree`,status:`reversible`,message:`${e} side effects are contained in an isolated Git worktree.`}:n.isolation===`provider-sandbox`?{toolName:e,reversible:!0,sideEffect:t,rollbackLayer:`provider-sandbox`,status:`reversible`,message:`${e} side effects are contained in a provider sandbox snapshot.`}:{toolName:e,reversible:!1,sideEffect:t,rollbackLayer:`none`,status:`requires-isolation`,message:`${e} can create host shell side effects that edit checkpoints cannot restore; use worktree or provider sandbox isolation.`}}function ta(e,t){return t.isolation===`worktree`||t.isolation===`provider-sandbox`?ea(`Agent`,`subagent`,t):na(e)?{toolName:`Agent`,reversible:!0,sideEffect:`subagent`,rollbackLayer:`worktree`,status:`reversible`,message:`Agent jobs request worktree isolation, so shell side effects stay outside the parent workspace.`}:{toolName:`Agent`,reversible:!1,sideEffect:`subagent`,rollbackLayer:`none`,status:`requires-isolation`,message:`Agent jobs must request worktree isolation to be reversible in local-first mode.`}}function na(e){if(!e)return!1;let t=e.jobs;return Array.isArray(t)?t.length>0&&t.every(e=>ia(e)?ra(e)===`worktree`:!1):ra(e)===`worktree`}function ra(e){let t=e.isolation;return typeof t==`string`?t:void 0}function ia(e){return e!==void 0&&typeof e==`object`&&!Array.isArray(e)}function aa(e){if(!(!e||typeof e!=`object`||Array.isArray(e)))return e}function oa(e){return{success:!0,data:{success:!1,output:``,error:e.message,reversibleSafety:{toolName:e.toolName,sideEffect:e.sideEffect,rollbackLayer:e.rollbackLayer,status:e.status}},metadata:{reversibleSafetyStatus:e.status,rollbackLayer:e.rollbackLayer}}}function sa(e){return(e??[]).filter(e=>e.modelInvocable&&e.kind===`builtin-command`)}function ca(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function la(e,t){return e.some(e=>ca(e.name)===t)}function ua(e){if(!e.provider)throw Error(`provider is required. SDK is provider-neutral — consumer must create and pass a provider instance.`);let t=e.provider,n=e.cwd??process.cwd(),r=e.sessionId??da(),i=new Li(n),a=sa(e.commandDescriptors),o=a.length>0&&e.modelCommandExecutor!==void 0&&e.isModelCommandInvocable!==void 0,s=o?ct(a):void 0,c=la(a,`skills`)?i.getModelInvocableSkills():[],l=Wr({sandboxClient:e.sandboxClient,cwd:n}),u=e.editCheckpointRecorder!==void 0&&e.sandboxClient===void 0,d=[...u&&e.editCheckpointRecorder?Ei(l,e.editCheckpointRecorder):l,...e.additionalTools??[]],p=e.reversibleExecution?{...e.reversibleExecution,isolation:e.reversibleExecution.isolation??(e.sandboxClient?`provider-sandbox`:void 0)}:void 0,m=p?Qi(d,{...p,checkpointAvailable:u}):d;o&&e.modelCommandExecutor!==void 0&&e.isModelCommandInvocable!==void 0&&m.push(...dt({execute:e.modelCommandExecutor,isModelInvocable:e.isModelCommandInvocable,commandDescriptors:a}));let h=[];e.providerFactory&&h.push(new qi({providerFactory:e.providerFactory,defaultModel:e.config.provider.model})),e.sessionFactory&&h.push(new Gi({sessionFactory:e.sessionFactory})),e.additionalHookExecutors&&h.push(...e.additionalHookExecutors);let{agentToolDeps:_,agentDefinitions:v,backgroundTaskManager:y}=bi(e,r,n,t,m,h),{backgroundProcessToolDeps:ee}=xi(e,y,r,n,m),{finalSystemMessage:te,rebuildSystemMessage:ne}=Si(e,n,a,s,ee,c,v),re=[`Read(.agents/**)`,`Read(.claude/**)`,`Read(.robota/**)`,`Glob(.agents/**)`,`Glob(.claude/**)`,`Glob(.robota/**)`],ie=s?s.commandTools.filter(e=>!e.requiresPermission).map(e=>e.toolName):[],ae=(e.allowedTools??[]).map(e=>`${e}(*)`),oe=(e.deniedTools??[]).map(e=>`${e}(*)`),se={allow:[...re,...ie,...e.config.permissions.allow??[],...ae],deny:[...e.config.permissions.deny??[],...oe]},b=(0,g.join)(n,`.robota`,`settings.local.json`);function ce(e){let t=`${e}(*)`,n=W(b),r=Array.isArray(n.permissions)?[]:n.permissions?.allow??[];r.includes(t)||G(b,{...n,permissions:{...n.permissions??{},allow:[...r,t]}})}let le=new f.Session({tools:m,provider:t,systemMessage:te,terminal:e.terminal,permissions:se,hooks:e.config.hooks,permissionMode:e.permissionMode,defaultTrustLevel:e.config.defaultTrustLevel,model:e.model??e.config.provider.model,providerTimeout:e.config.provider.timeout??12e4,maxTurns:e.maxTurns,sessionStore:e.sessionStore,sessionId:r,permissionHandler:e.permissionHandler,onProjectAllowTool:ce,onTextDelta:e.onTextDelta,onContextUpdate:e.onContextUpdate,onToolExecution:e.onToolExecution,promptForApproval:e.promptForApproval,onCompact:e.onCompact,onCompactEvent:e.onCompactEvent,compactInstructions:e.compactInstructions??e.context.compactInstructions,autoCompactThreshold:e.autoCompactThreshold??e.config.autoCompactThreshold,sessionLogger:e.sessionLogger,hookTypeExecutors:h.length>0?h:void 0,agentName:e.agentName,...e.responseFormat?{responseFormat:e.responseFormat}:{}});return Ci(le,_,ee,y),{session:le,rebuildSystemMessage:ne}}function da(){return`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function fa(e,t,n,r=new N){let i=(0,g.join)(n,e,`subagents`);return r.mkdirSync(i,{recursive:!0}),new f.FileSessionLogger(i)}function pa(e,t){return(0,g.join)(t,e,`subagents`)}const K=d.z.lazy(()=>d.z.union([d.z.string(),d.z.number(),d.z.boolean(),d.z.null(),d.z.undefined(),d.z.date(),d.z.array(K),d.z.record(K)])),ma=d.z.object({name:d.z.string().optional(),model:d.z.string().optional(),apiKey:d.z.string().optional(),baseURL:d.z.string().optional(),timeout:d.z.number().optional(),options:d.z.record(K).optional()}),ha=d.z.object({type:d.z.string().optional(),model:d.z.string().optional(),apiKey:d.z.string().optional(),baseURL:d.z.string().optional(),timeout:d.z.number().optional(),options:d.z.record(K).optional()}),ga=d.z.object({allow:d.z.array(d.z.string()).optional(),deny:d.z.array(d.z.string()).optional()}),_a=d.z.record(d.z.string()).optional(),va=d.z.object({type:d.z.literal(`command`),command:d.z.string(),timeout:d.z.number().optional()}),ya=d.z.object({type:d.z.literal(`http`),url:d.z.string(),headers:d.z.record(d.z.string()).optional(),timeout:d.z.number().optional()}),ba=d.z.object({type:d.z.literal(`prompt`),prompt:d.z.string(),model:d.z.string().optional()}),xa=d.z.object({type:d.z.literal(`agent`),agent:d.z.string(),maxTurns:d.z.number().optional(),timeout:d.z.number().optional()}),Sa=d.z.discriminatedUnion(`type`,[va,ya,ba,xa]),q=d.z.object({matcher:d.z.string(),hooks:d.z.array(Sa)}),Ca=d.z.object({PreToolUse:d.z.array(q).optional(),PostToolUse:d.z.array(q).optional(),SessionStart:d.z.array(q).optional(),SessionEnd:d.z.array(q).optional(),Stop:d.z.array(q).optional(),StopFailure:d.z.array(q).optional(),PreCompact:d.z.array(q).optional(),PostCompact:d.z.array(q).optional(),UserPromptSubmit:d.z.array(q).optional(),SubagentStart:d.z.array(q).optional(),SubagentStop:d.z.array(q).optional(),WorktreeCreate:d.z.array(q).optional(),WorktreeRemove:d.z.array(q).optional()}).optional(),wa=d.z.record(d.z.boolean()).optional(),Ta=d.z.object({source:d.z.object({type:d.z.enum([`github`,`git`,`local`,`url`]),repo:d.z.string().optional(),url:d.z.string().optional(),path:d.z.string().optional(),ref:d.z.string().optional()})}),Ea=d.z.record(Ta).optional().catch(void 0),Da=d.z.union([d.z.number().gt(0).lte(1),d.z.literal(!1)]).optional(),Oa=d.z.object({enabled:d.z.boolean().optional(),options:d.z.record(K).optional()}),ka=d.z.object({defaultTrustLevel:d.z.enum([`safe`,`moderate`,`full`]).optional(),language:d.z.string().optional(),currentProvider:d.z.string().optional(),providers:d.z.record(ha).optional(),provider:ma.optional(),permissions:ga.optional(),env:_a,hooks:Ca,enabledPlugins:wa,extraKnownMarketplaces:Ea,autoCompactThreshold:Da,transports:d.z.record(Oa).optional()});function Aa(){return process.env.HOME??process.env.USERPROFILE??`/`}const J={defaultTrustLevel:`moderate`,provider:{name:`anthropic`,model:`claude-opus-4-5`,apiKey:void 0},permissions:{allow:[],deny:[]},env:{}};function ja(e){if(!(0,v.existsSync)(e))return;let t=(0,v.readFileSync)(e,`utf-8`).trim();if(t.length!==0)try{return JSON.parse(t)}catch{return}}function Ma(e){if(e.startsWith(`$ENV:`)){let t=e.slice(5);return process.env[t]??e}return e}function Na(e){let t=e.provider?.apiKey===void 0?e.provider:Pa(e.provider);if(e.providers!==void 0){let n=Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,Pa(t)]));return{...e,provider:t,providers:n}}return{...e,provider:t}}function Pa(e){return{...e,...e.apiKey!==void 0&&{apiKey:Ma(e.apiKey)}}}function Fa(e){return e.reduce((e,t)=>({...e,...t,provider:e.provider!==void 0||t.provider!==void 0?{...e.provider,...t.provider}:void 0,permissions:e.permissions!==void 0||t.permissions!==void 0?{allow:t.permissions?.allow??e.permissions?.allow,deny:t.permissions?.deny??e.permissions?.deny}:void 0,env:{...e.env??{},...t.env??{}},providers:e.providers!==void 0||t.providers!==void 0?Ia(e.providers,t.providers):void 0,enabledPlugins:e.enabledPlugins!==void 0||t.enabledPlugins!==void 0?{...e.enabledPlugins??{},...t.enabledPlugins??{}}:void 0,extraKnownMarketplaces:t.extraKnownMarketplaces??e.extraKnownMarketplaces,autoCompactThreshold:t.autoCompactThreshold??e.autoCompactThreshold}),{})}function Ia(e,t){let n={...e??{}};for(let[e,r]of Object.entries(t??{}))n[e]={...n[e],...r};return n}function La(e){if(e.currentProvider!==void 0)return Ra(e);if(e.provider!==void 0)throw Error(`Legacy flat "provider" settings are not supported. Migrate to "currentProvider" + "providers" format.`);return{...J.provider}}function Ra(e){let t=e.currentProvider;if(t===void 0)throw Error(`currentProvider is required`);let n=e.providers?.[t];if(n===void 0)throw Error(`currentProvider "${t}" was not found in providers`);if(n.type===void 0)throw Error(`Provider profile "${t}" is missing type`);return{name:n.type,model:n.model??J.provider.model,apiKey:n.apiKey??J.provider.apiKey,...n.baseURL!==void 0&&{baseURL:n.baseURL},...n.timeout!==void 0&&{timeout:n.timeout},...n.options!==void 0&&{options:n.options}}}function za(e){return{defaultTrustLevel:e.defaultTrustLevel??J.defaultTrustLevel,language:e.language,currentProvider:e.currentProvider,provider:La(e),permissions:{allow:e.permissions?.allow??J.permissions.allow,deny:e.permissions?.deny??J.permissions.deny},env:e.env??J.env,hooks:e.hooks??void 0,enabledPlugins:e.enabledPlugins??void 0,extraKnownMarketplaces:e.extraKnownMarketplaces??void 0,autoCompactThreshold:e.autoCompactThreshold}}function Ba(e){let t=Aa();return[(0,y.join)(t,`.robota`,`settings.json`),(0,y.join)(t,`.claude`,`settings.json`),(0,y.join)(e,`.robota`,`settings.json`),(0,y.join)(e,`.robota`,`settings.local.json`),(0,y.join)(e,`.claude`,`settings.json`),(0,y.join)(e,`.claude`,`settings.local.json`)]}async function Va(e){let t=Ba(e),n=[];for(let e of t){let t=ja(e);t!==void 0&&n.push({raw:t,path:e})}return za(Fa(n.map(({raw:e,path:t})=>{let n=ka.safeParse(e);if(!n.success)throw Error(`Invalid settings in ${t}: ${n.error.message}`);return Na(n.data)})))}const Ha=(0,g.join)(`.agents`,`tasks`),Ua={"in-progress":1,todo:2,blocked:3,unknown:4,completed:5};function Wa(e){let t=e?.trim().toLowerCase();return t===`todo`||t===`in-progress`||t===`blocked`||t===`completed`?t:`unknown`}function Ga(e,t){return e.split(/\r?\n/).find(e=>/^#\s+/.test(e))?.replace(/^#\s+/,``).trim()||(0,g.basename)(t,`.md`)}function Ka(e,t){return RegExp(`^- \\*\\*${t}\\*\\*:\\s*(.+)$`,`im`).exec(e)?.[1]?.trim()}function qa(e,t){let n=e.split(/\r?\n/),r=RegExp(`^(#{2,6})\\s+${t}\\b`,`i`),i=n.findIndex(e=>r.test(e));if(i<0)return;let a=[];for(let e of n.slice(i+1)){if(/^##\s+/.test(e))break;a.push(e)}let o=a.join(`
77
- `).trim();return o.length>0?o:void 0}function Ja(e){return e.split(/\r?\n/).map(e=>/^- \[ \]\s+(.+)$/.exec(e)?.[1]?.trim()).filter(e=>e!==void 0&&e.length>0)}function Ya(e,t){return t&&e.branch===t?0:Ua[e.status]}function Xa(e){let t=[`### ${e.title}`,`- **Path:** \`${e.relativePath}\``];return t.push(`- **Status:** ${e.status}`),e.branch&&t.push(`- **Branch:** ${e.branch}`),e.scope&&t.push(`- **Scope:** ${e.scope}`),e.objective&&t.push(`- **Objective:** ${e.objective}`),e.openItems.length>0&&(t.push(`- **Open items:**`),t.push(...e.openItems.map(e=>` - ${e}`))),t.join(`
78
- `)}function Za(e){return e.toISOString().slice(0,10)}function Qa(e,t){let n=e.split(/\r?\n/),r=`- **Status**: ${t}`,i=n.findIndex(e=>/^- \*\*Status\*\*:\s*/.test(e));return i>=0?(n[i]=r,n.join(`
66
+ `);e.history.push({id:(0,p.randomUUID)(),timestamp:new Date,category:`event`,type:`tool-summary`,data:{tools:e.activeTools.map(e=>({toolName:e.toolName,firstArg:e.firstArg,isRunning:e.isRunning,result:e.result,diffFile:e.diffFile,diffLines:e.diffLines,toolResultData:e.toolResultData})),summary:t}})}function rr(e){let t=e.filter(e=>!e.isRunning);if(t.length<=50)return e;let n=t.length-50,r=0;return e.filter(e=>!e.isRunning&&r<n?(r++,!1):!0)}function ir(e,t){let n=Zn(t.toolArgs),r={toolName:t.toolName,firstArg:n,isRunning:!0,...t.executionId?{executionId:t.executionId}:{}};return e.activeTools.push(r),e.history.push({id:(0,p.randomUUID)(),timestamp:new Date,category:`event`,type:`tool-start`,data:{toolName:t.toolName,firstArg:n,isRunning:!0}}),r}function ar(e,t){let n=t.denied?`denied`:t.success===!1?`error`:`success`,r=e.activeTools.findIndex(e=>e.toolName===t.toolName&&e.isRunning);if(r===-1)return null;let i={...e.activeTools[r],...er(t),isRunning:!1,result:n,toolResultData:t.toolResultData};return e.activeTools[r]=i,e.activeTools=rr(e.activeTools),e.history.push({id:(0,p.randomUUID)(),timestamp:new Date,category:`event`,type:`tool-end`,data:{toolName:i.toolName,firstArg:i.firstArg,isRunning:!1,result:n,toolResultData:t.toolResultData}}),i}const or=[{pattern:/\b401\b|invalid.*api.?key|authentication.*fail|unauthorized/i,message:"Invalid API key. Run `/provider` to reconfigure, or check your settings file (~/.robota/settings.json)."},{pattern:/\b403\b|permission.*denied|forbidden/i,message:"Access denied. Your API key may lack permission for this model. Check your provider plan or run `/provider` to switch accounts."},{pattern:/\b429\b|rate.?limit|too many requests|quota.*exceeded/i,message:"Rate limit reached. Wait a moment and try again. Consider switching to a different model with `/model`."},{pattern:/\b500\b|internal server error/i,message:`The AI provider returned an internal error. This is usually temporary — try again.`},{pattern:/\b503\b|service.*unavailable|overloaded/i,message:`The AI provider is temporarily unavailable or overloaded. Try again in a few seconds.`},{pattern:/\b502\b|bad gateway/i,message:`The AI provider gateway is unreachable. Check your network or try again shortly.`},{pattern:/\btimeout\b|timed.?out|ETIMEDOUT/i,message:`The request timed out. Check your internet connection, or try a shorter prompt to reduce response time.`},{pattern:/ENOTFOUND|ECONNREFUSED|ECONNRESET|network.*error|fetch.*fail/i,message:`Network connection failed. Check your internet connection and verify your provider URL in settings.`}];function sr(e){if(e instanceof c.AuthenticationError)return"Invalid API key. Run `/provider` to reconfigure, or check your settings file (~/.robota/settings.json).";if(e instanceof c.RateLimitError)return`Rate limit reached${e.retryAfter?` (retry after ${e.retryAfter}s)`:``}. Wait a moment and try again. Consider switching to a different model with \`/model\`.`;if(e instanceof c.NetworkError)return`Network connection failed. Check your internet connection and verify your provider URL in settings.`;if(e instanceof c.ProviderError&&e.originalError)return sr(e.originalError);let t=e.message;for(let{pattern:e,message:n}of or)if(e.test(t))return n;return t}async function cr(e,t,n,r){let i=r.getHistory();i.push((0,c.messageToHistoryEntry)((0,c.createUserMessage)(t??e))),r.onWorkspaceUpdated();let a=r.getSession().getHistory().length;r.resetUsedMemoryReferences();try{let o=await qn(e,r.getCwd(),n,r.getContextReferences());o.promptFileReferenceEntry&&i.push(o.promptFileReferenceEntry),r.recordContextReferenceUsage(o.activeContextReferenceRecords),r.recordPromptContextReferences(o.promptFileReferenceRecords),await r.beginEditCheckpointTurn(t??e);let s=await r.getSession().run(o.modelInput,o.hookInput);r.flushStreaming(),L({activeTools:r.getActiveTools(),history:i}),r.clearStreaming();let l=Wn(s||`(empty response)`,r.getSession().getHistory(),i,a,r.getSession().getContextState(),o.promptFileReferenceRecords);i.push((0,c.messageToHistoryEntry)((0,c.createAssistantMessage)(l.response))),l.usage&&i.push(Kn(l.usage)),r.onComplete(l),r.onContextUpdate()}catch(e){if(r.flushStreaming(),Hn(e)){let e=Gn(r.getSession().getHistory(),i,a,r.getSession().getContextState());L({activeTools:r.getActiveTools(),history:i}),r.clearStreaming(),e.response&&i.push((0,c.messageToHistoryEntry)((0,c.createAssistantMessage)(e.response))),e.usage&&i.push(Kn(e.usage)),i.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Interrupted by user.`))),r.onInterrupted(e)}else{L({activeTools:r.getActiveTools(),history:i}),r.clearStreaming();let t=e instanceof Error?e:Error(String(e)),n=sr(t);i.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Error: ${n}`))),r.onError(t)}}}var lr=class{histTracker;skillRouter;callbacks;executing=!1;streamingText=``;flushTimer=null;activeTools=[];pendingPrompt=null;pendingDisplayInput;pendingRawInput;pendingTurnOptions={};shuttingDown=!1;wakeTaskIds=new Set;constructor(e,t,n){this.histTracker=e,this.skillRouter=t,this.callbacks=n}clearPendingQueue(){this.pendingPrompt=null,this.pendingDisplayInput=void 0,this.pendingRawInput=void 0,this.pendingTurnOptions={}}clearStreaming(){this.streamingText=``,this.activeTools=[],this.flushTimer&&=(clearTimeout(this.flushTimer),null)}flushStreaming(){this.flushTimer&&=(clearTimeout(this.flushTimer),null)}handleTextDelta(e){this.streamingText+=e,this.callbacks.emit(`text_delta`,e),this.flushTimer||=setTimeout(()=>{this.flushTimer=null},16)}handleCompactEvent(e){e.trigger===`auto`&&this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Auto compacted context: ${Math.round(e.before.usedPercentage)}% -> ${Math.round(e.after.usedPercentage)}%`))),this.callbacks.emit(`compact`,e),this.callbacks.emit(`context_update`,e.after)}handleToolExecution(e){let t={activeTools:this.activeTools,history:this.histTracker.getHistory()};if(e.type===`start`){let n=ir(t,e);this.activeTools=t.activeTools,this.callbacks.emit(`tool_start`,n)}else{let n=ar(t,e);this.activeTools=t.activeTools,n&&this.callbacks.emit(`tool_end`,n)}}emitExecutionWorkspaceUpdated(e,t){this.callbacks.getSession()&&this.callbacks.emit(`execution_workspace_event`,{type:`execution_workspace_updated`,cause:e,...t?{entryId:t}:{},snapshot:this.callbacks.getExecutionWorkspaceSnapshot()})}drainPendingQueue(e){if(!this.shuttingDown&&this.pendingPrompt){let t=this.pendingPrompt,n=this.pendingDisplayInput,r=this.pendingRawInput,i=this.pendingTurnOptions;this.clearPendingQueue(),setTimeout(()=>void e(t,n,r,i),0)}}async executePrompt(e,t,n,r,i,a,o,s,c={}){await tn(r,i,a,o,()=>this.callbacks.getSessionOrThrow(),(e,t)=>this.callbacks.emit(e,t)),this.executing=!0,this.clearStreaming(),this.callbacks.emit(`turn_source`,c.turnSource??`user`),this.callbacks.emit(`user_message`,t??e),this.callbacks.emit(`thinking`,!0);try{await cr(e,t,n,{getSession:()=>this.callbacks.getSessionOrThrow(),getCwd:()=>this.callbacks.getCwd(),getHistory:()=>this.histTracker.getHistory(),getContextReferences:()=>this.histTracker.listInjectionContextReferences(),getActiveTools:()=>this.activeTools,resetUsedMemoryReferences:()=>this.histTracker.resetUsedMemoryReferences(),recordContextReferenceUsage:e=>this.histTracker.recordContextReferenceUsage(e),recordPromptContextReferences:e=>this.histTracker.recordPromptContextReferences(e),beginEditCheckpointTurn:e=>this.histTracker.beginEditCheckpointTurn(e),flushStreaming:()=>this.flushStreaming(),clearStreaming:()=>this.clearStreaming(),onWorkspaceUpdated:()=>this.emitExecutionWorkspaceUpdated(`main_thread`),onComplete:e=>{this.callbacks.emit(`complete`,e)},onInterrupted:e=>{this.callbacks.emit(`interrupted`,e)},onError:e=>{this.callbacks.emit(`error`,e)},onContextUpdate:()=>{this.callbacks.emit(`context_update`,this.callbacks.getContextState())}})}finally{try{await this.histTracker.finalizeEditCheckpointTurn()}catch(e){this.callbacks.emit(`error`,e instanceof Error?e:Error(String(e)))}this.executing=!1,this.callbacks.emit(`thinking`,!1),c.wakeTaskId!==void 0&&this.wakeTaskIds.delete(c.wakeTaskId),this.emitExecutionWorkspaceUpdated(`main_thread`),this.callbacks.persistSession(),this.drainPendingQueue(s)}}async executeForkSkillCommand(e,t,n,r,i,a){if(this.executing)throw Error(`Cannot execute fork skill while another prompt is running.`);this.executing=!0,this.clearStreaming(),this.callbacks.emit(`thinking`,!0),this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createUserMessage)(n??`/${e.name}`))),this.emitExecutionWorkspaceUpdated(`main_thread`);try{let n=await this.skillRouter.executeSkillWithActivation(e,t,i,r);return await this.applyForkSkillResult(n.result??`(empty response)`),n}catch(e){let t=e instanceof Error?e:Error(String(e));return this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Error: ${sr(t)}`))),this.callbacks.emit(`error`,t),{mode:`fork`,result:``}}finally{this.executing=!1,this.callbacks.emit(`thinking`,!1),this.emitExecutionWorkspaceUpdated(`main_thread`),this.callbacks.persistSession(),this.drainPendingQueue(a)}}async executeForegroundCommand(e,t){this.executing=!0,this.clearStreaming(),this.callbacks.emit(`thinking`,!0),this.emitExecutionWorkspaceUpdated(`main_thread`);try{let t=await e();return this.callbacks.emit(`context_update`,this.callbacks.getContextState()),t}catch(e){return{success:!1,message:`Error: ${e instanceof Error?e.message:String(e)}`}}finally{this.executing=!1,this.callbacks.emit(`thinking`,!1),this.emitExecutionWorkspaceUpdated(`main_thread`),this.callbacks.persistSession(),this.drainPendingQueue(t)}}async applyForkSkillResult(e){this.flushStreaming(),L({activeTools:this.activeTools,history:this.histTracker.getHistory()}),this.clearStreaming();let t={response:e,history:this.histTracker.getHistory(),toolSummaries:[],contextState:this.callbacks.getContextState()};this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createAssistantMessage)(e))),this.callbacks.emit(`complete`,t),this.callbacks.emit(`context_update`,this.callbacks.getContextState())}};function ur(e,t,n){let r=j(n)?.customAgentRegistry?.(e)??k(e);if(!r)throw Error(`Unknown agent type: ${e}`);return t.allowedTools?{...r,tools:t.allowedTools}:r}async function dr(e,t,n){let r=j(n);if(!r)throw Error(`Fork execution is not available. Agent runtime deps may not be initialized.`);return yt({agentDefinition:ur(t.agent??`general-purpose`,t,n),parentConfig:r.config,parentContext:r.context,parentTools:r.tools,provider:r.provider,terminal:r.terminal,isForkWorker:!0,permissionMode:r.permissionMode,permissionHandler:r.permissionHandler,hooks:r.hooks,hookTypeExecutors:r.hookTypeExecutors,onTextDelta:r.onTextDelta,onToolExecution:r.onToolExecution}).run(e)}async function fr(e,t,n){let r=await kn([t],{cwd:n,reason:`manual`});if(gn(r.diagnostics))return{references:[...e],result:{evicted:[],diagnostics:[_n(r.diagnostics)]}};let i=r.references[0];if(!i)return{references:[...e],result:{evicted:[],diagnostics:[`No context reference was resolved.`]}};let a=nn(F([i])[0],`manual`,`active`),o=rn(e,a);return{references:o.references,result:{reference:a,evicted:o.evicted,diagnostics:[]}}}function pr(e,t,n){if(t.length===0)return[...e];let r=new Date().toISOString(),i=[...e];for(let e of t){let t=nn(e,n.loadType,n.status,r);i=rn(i,t).references}return i}function mr(e,t){let n=new Date().toISOString();return e.map(e=>{let r=(0,g.relative)(t,e.filePath);return{id:`system:${r}`,sourcePath:e.filePath,relativePath:r,originalReference:r,loadType:`system`,status:`active`,byteLength:Buffer.byteLength(e.content,`utf-8`),loadedAt:n,lastUsedAt:n}})}function R(e){let t=(0,g.join)(e,`.robota`);return{settings:(0,g.join)(t,`settings.json`),settingsLocal:(0,g.join)(t,`settings.local.json`),logs:(0,g.join)(t,`logs`),sessions:(0,g.join)(t,`sessions`),memory:(0,g.join)(t,`memory`),checkpoints:(0,g.join)(t,`checkpoints`)}}function hr(){let e=(0,g.join)((0,_.homedir)(),`.robota`);return{settings:(0,g.join)(e,`settings.json`),sessions:(0,g.join)(e,`sessions`),onboarded:(0,g.join)(e,`onboarded`)}}function gr(e){let t=e.fs??new N,n=e.manifests.filter(t=>t.sequence>e.target.sequence),r=e.manifests.filter(t=>t.sequence>=e.target.sequence);return{target:_r(e.target),capturedFiles:e.target.files.map(n=>{let r=n.snapshotFile?(0,g.join)(e.checkpointDir(e.sessionId,e.target.id),n.snapshotFile):void 0,i=r?yr(r,t):void 0;return{originalPath:n.originalPath,relativePath:(0,g.relative)(e.cwd,n.originalPath),existed:n.existed,restoreAction:n.existed?`restore-preimage`:`delete-created-file`,snapshotAvailable:n.existed?i!==void 0:!1,...i?{snapshotSizeBytes:i.size}:{}}}),restoreToCheckpoint:vr(n),rollbackThroughCheckpoint:vr(r)}}function _r(e){return{id:e.id,sessionId:e.sessionId,sequence:e.sequence,prompt:e.prompt,createdAt:e.createdAt,fileCount:e.fileCount}}function vr(e){return{checkpointIds:e.map(e=>e.id),fileCount:e.reduce((e,t)=>e+t.fileCount,0)}}function yr(e,t){try{return t.statSync(e)}catch{return}}const br=`manifest.json`,xr=`files`;var z=class{fs;fsAsync;cwd;rootDir;now;activeTurn=null;constructor(e,t=new N,n=new P){this.fs=t,this.fsAsync=n,this.cwd=(0,g.resolve)(e.cwd),this.rootDir=R(this.cwd).checkpoints,this.now=e.now??(()=>new Date)}async beginTurn(e){this.activeTurn&&await this.finalizeTurn();let t=this.nextSequence(e.sessionId),n=`turn-${String(t).padStart(4,`0`)}`,r=(0,g.join)(this.sessionDir(e.sessionId),n);await this.fsAsync.mkdir((0,g.join)(r,xr),{recursive:!0});let i={version:1,id:n,sessionId:e.sessionId,sequence:t,prompt:e.prompt,createdAt:this.now().toISOString(),fileCount:0,files:[]};return this.activeTurn={manifest:i,dir:r,capturedPaths:new Set},B(i)}async captureFile(e){if(!this.activeTurn)return;let t=(0,g.resolve)(this.cwd,e);if(this.activeTurn.capturedPaths.has(t)||Cr(this.rootDir,t))return;let n=await this.createFileRecord(t,this.activeTurn);this.activeTurn.manifest.files.push(n),this.activeTurn.manifest.fileCount=this.activeTurn.manifest.files.length,this.activeTurn.capturedPaths.add(t)}async finalizeTurn(){if(!this.activeTurn)return;let e=this.activeTurn;return this.activeTurn=null,await this.writeManifest(e.dir,e.manifest),B(e.manifest)}list(e){return this.loadManifests(e).map(B)}inspect(e,t){let n=this.loadManifests(e),r=n.find(e=>e.id===t);if(!r)throw Error(`Unknown edit checkpoint: ${t}`);return gr({cwd:this.cwd,sessionId:e,target:r,manifests:n,checkpointDir:(e,t)=>this.checkpointDir(e,t)})}async restoreToCheckpoint(e,t){let n=this.loadManifests(e),r=n.find(e=>e.id===t);if(!r)throw Error(`Unknown edit checkpoint: ${t}`);let i=n.filter(e=>e.sequence>r.sequence).sort((e,t)=>t.sequence-e.sequence),a=0;for(let t of i)for(let n of t.files)await this.restoreFile(e,t.id,n),a+=1;for(let t of i)await this.fsAsync.rm(this.checkpointDir(e,t.id),{recursive:!0,force:!0});return{target:B(r),restoredCheckpointCount:i.length,restoredFileCount:a,removedCheckpointCount:i.length}}async rollbackThroughCheckpoint(e,t){let n=this.loadManifests(e),r=n.find(e=>e.id===t);if(!r)throw Error(`Unknown edit checkpoint: ${t}`);let i=n.filter(e=>e.sequence>=r.sequence).sort((e,t)=>t.sequence-e.sequence),a=0;for(let t of i)for(let n of t.files)await this.restoreFile(e,t.id,n),a+=1;for(let t of i)await this.fsAsync.rm(this.checkpointDir(e,t.id),{recursive:!0,force:!0});return{target:B(r),restoredCheckpointCount:i.length,restoredFileCount:a,removedCheckpointCount:i.length}}async createFileRecord(e,t){if(!await wr(this.fsAsync,this.fs,e))return{originalPath:e,existed:!1};let n=(0,g.join)(xr,`${String(t.manifest.files.length+1).padStart(6,`0`)}.content`);return await this.fsAsync.copyFile(e,(0,g.join)(t.dir,n)),{originalPath:e,existed:!0,snapshotFile:n}}async restoreFile(e,t,n){if(!n.existed){await this.fsAsync.rm(n.originalPath,{force:!0});return}if(!n.snapshotFile)throw Error(`Checkpoint file record is missing a snapshot: ${n.originalPath}`);await this.fsAsync.mkdir((0,g.dirname)(n.originalPath),{recursive:!0}),await this.fsAsync.copyFile((0,g.join)(this.checkpointDir(e,t),n.snapshotFile),n.originalPath)}loadManifests(e){let t=this.sessionDir(e);return Tr(this.fs,t).map(e=>(0,g.join)(t,e,br)).map(e=>Er(this.fs,e)).filter(e=>e!==void 0).sort((e,t)=>e.sequence-t.sequence)}nextSequence(e){return(this.list(e).at(-1)?.sequence??0)+1}async writeManifest(e,t){await this.fsAsync.mkdir(e,{recursive:!0});let n=(0,g.join)(e,br),r=`${n}.tmp`;await this.fsAsync.writeFile(r,JSON.stringify(t,null,2),`utf8`),await this.fsAsync.rename(r,n)}sessionDir(e){return(0,g.join)(this.rootDir,Sr(e))}checkpointDir(e,t){return(0,g.join)(this.sessionDir(e),Sr(t))}};function B(e){return{id:e.id,sessionId:e.sessionId,sequence:e.sequence,prompt:e.prompt,createdAt:e.createdAt,fileCount:e.fileCount}}function Sr(e){return e.replace(/[^a-zA-Z0-9._-]/g,`_`)}function Cr(e,t){let n=(0,g.relative)(e,t);return n.length===0||!n.startsWith(`..`)&&!n.startsWith(`/`)}async function wr(e,t,n){try{return await e.access(n,t.constants.F_OK),!0}catch{return!1}}function Tr(e,t){try{return e.readdirSync(t)}catch{return[]}}function Er(e,t){try{let n=e.readFileSync(t,`utf8`);return JSON.parse(n)}catch{return}}function Dr(e){return e.source===`plugin`?`plugin`:`skill`}function Or(e){return e.context===`fork`?`fork`:`inject`}function kr(e){return{type:`skill-activation`,skillName:e.skill.name,source:Dr(e.skill),invocation:e.invocation,mode:Or(e.skill),status:e.status,timestamp:new Date().toISOString(),...e.qualifiedName===void 0?{}:{qualifiedName:e.qualifiedName},...e.error===void 0?{}:{error:e.error}}}function Ar(e){let t=e.source===`plugin`?`plugin skill`:`skill`;return e.status===`failed`?`Skill failed: ${e.skillName}${e.error?` (${e.error})`:``}`:e.status===`completed`?`Skill completed: ${e.skillName}`:`Invoking ${t}: ${e.skillName}`}const jr=new Set([`memory_candidate_saved`,`memory_candidate_approved`,`memory_candidate_rejected`,`memory_retrieved`]);function Mr(e){let t=e.topic?`: ${e.topic}`:``;switch(e.type){case`memory_candidate_saved`:return`Memory saved${t}`;case`memory_candidate_approved`:return`Memory approved${t}`;case`memory_candidate_rejected`:return`Memory rejected${t}${e.reason?` (${e.reason})`:``}`;case`memory_retrieved`:return`Memory recalled${t}`;case`memory_candidate_extracted`:return`Memory candidate extracted${t}`;case`memory_candidate_queued`:return`Memory candidate queued${t}`;case`memory_candidate_skipped`:return`Memory candidate skipped${t}${e.reason?` (${e.reason})`:``}`}}var Nr=class{cwd;getSessionId;getExecuting;persistSession;emitSkillActivation;emitMemoryEvent;history=[];editCheckpointStore=null;memoryEvents=[];usedMemoryReferences=[];contextReferences=[];systemContextReferences=[];skillActivationEvents=[];constructor(e,t,n,r,i,a,o=null){this.cwd=e,this.getSessionId=t,this.getExecuting=n,this.persistSession=r,this.emitSkillActivation=i,this.emitMemoryEvent=a,this.editCheckpointStore=o}restoreState(e){this.history=e.history,this.memoryEvents=e.memoryEvents,this.usedMemoryReferences=e.usedMemoryReferences,this.contextReferences=e.contextReferences,this.skillActivationEvents=e.skillActivationEvents}getState(){return{history:this.history,memoryEvents:this.memoryEvents,usedMemoryReferences:this.usedMemoryReferences,contextReferences:this.contextReferences,skillActivationEvents:this.skillActivationEvents}}append(e){this.history.push(e)}getHistory(){return this.history}clearHistory(){this.history=[],this.memoryEvents=[],this.usedMemoryReferences=[]}resetUsedMemoryReferences(){this.usedMemoryReferences=[]}recordContextReferenceUsage(e){this.contextReferences=pr(this.contextReferences,e,{loadType:`manual`,status:`active`}),this.persistSession()}recordPromptContextReferences(e){this.contextReferences=pr(this.contextReferences,e,{loadType:`prompt-reference`,status:`observed`}),this.persistSession()}listEditCheckpoints(){let e=this.getSessionId();return this.getCheckpointStore().list(e)}inspectEditCheckpoint(e){let t=this.getSessionId();return this.getCheckpointStore().inspect(t,e)}async restoreEditCheckpoint(e){if(this.getExecuting())throw Error(`Cannot restore edit checkpoint while a prompt is running.`);let t=await this.getCheckpointStore().restoreToCheckpoint(this.getSessionId(),e);return this.history.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Restored edit checkpoint: ${e}`))),this.persistSession(),t}async rollbackEditCheckpoint(e){if(this.getExecuting())throw Error(`Cannot rollback edit checkpoint while a prompt is running.`);let t=await this.getCheckpointStore().rollbackThroughCheckpoint(this.getSessionId(),e);return this.history.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Rolled back edit checkpoint: ${e}`))),this.persistSession(),t}async beginEditCheckpointTurn(e){this.editCheckpointStore&&await this.editCheckpointStore.beginTurn({sessionId:this.getSessionId(),prompt:e})}async finalizeEditCheckpointTurn(){if(this.editCheckpointStore)try{await this.editCheckpointStore.finalizeTurn()}catch(e){let t=e instanceof Error?e:Error(String(e));throw this.history.push((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Checkpoint error: ${t.message}`))),t}}setEditCheckpointStore(e){this.editCheckpointStore=e}getUsedMemoryReferences(){return[...this.usedMemoryReferences]}recordMemoryEvent(e){this.memoryEvents.push(e),jr.has(e.type)&&this.history.push({id:(0,p.randomUUID)(),timestamp:new Date(e.at),category:`event`,type:`memory-event`,data:{...e,message:Mr(e)}}),this.emitMemoryEvent(e),this.persistSession()}recordSystemContextFiles(e){this.systemContextReferences=mr(e,this.cwd)}listContextReferences(){return[...this.systemContextReferences,...this.contextReferences]}listInjectionContextReferences(){return[...this.contextReferences]}async addContextReference(e){let{references:t,result:n}=await fr(this.contextReferences,e,this.cwd);return this.contextReferences=t,this.persistSession(),n}removeContextReference(e){let t=an(this.contextReferences,e);return this.contextReferences=t.references,this.persistSession(),t.result}clearContextReferences(){let e=on(this.contextReferences);return this.contextReferences=[],this.persistSession(),e}getSkillActivationEvents(){return[...this.skillActivationEvents]}recordSkillActivationEvent(e,t){this.skillActivationEvents.push(e),t&&this.history.push({id:(0,p.randomUUID)(),timestamp:new Date(e.timestamp),category:`event`,type:`skill-activation`,data:{...e,message:Ar(e)}}),this.emitSkillActivation(e),this.persistSession()}getCheckpointStore(){return this.editCheckpointStore||=new z({cwd:this.cwd}),this.editCheckpointStore}};function Pr(e){if((0,v.existsSync)(e))try{return JSON.parse((0,v.readFileSync)(e,`utf-8`))}catch{return}}function Fr(e){if((0,v.existsSync)((0,y.join)(e,`pnpm-workspace.yaml`))||(0,v.existsSync)((0,y.join)(e,`pnpm-lock.yaml`)))return`pnpm`;if((0,v.existsSync)((0,y.join)(e,`yarn.lock`)))return`yarn`;if((0,v.existsSync)((0,y.join)(e,`bun.lockb`)))return`bun`;if((0,v.existsSync)((0,y.join)(e,`package-lock.json`)))return`npm`}async function Ir(e){let t=(0,y.join)(e,`package.json`),n=(0,y.join)(e,`tsconfig.json`),r=(0,y.join)(e,`pyproject.toml`),i=(0,y.join)(e,`Cargo.toml`),a=(0,y.join)(e,`go.mod`);if((0,v.existsSync)(t)){let r=Pr(t),i=(0,v.existsSync)(n)?`typescript`:`javascript`,a=Fr(e);return{type:`node`,name:r?.name,packageManager:a,language:i}}return(0,v.existsSync)(r)||(0,v.existsSync)((0,y.join)(e,`setup.py`))?{type:`python`,language:`python`}:(0,v.existsSync)(i)?{type:`rust`,language:`rust`}:(0,v.existsSync)(a)?{type:`go`,language:`go`}:{type:`unknown`,language:`unknown`}}function Lr(e,t){e.injectRawMessage(t)}function Rr(e,t,n){let r=e.load(t);if(!r)return{history:[],sessionName:void 0,pendingRestoreMessages:null,backgroundTasks:[],backgroundTaskEvents:[],backgroundJobGroups:[],backgroundJobGroupEvents:[],skillActivationEvents:[],memoryEvents:[],usedMemoryReferences:[],contextReferences:[],sandboxSnapshotId:void 0};let i=r.history??[],a=r.backgroundTasks??[],o=r.backgroundTaskEvents??[],s=r.backgroundJobGroups??[],c=r.backgroundJobGroupEvents??[],l=r.skillActivationEvents??[],u=r.memoryEvents??[],d=r.usedMemoryReferences??[],f=r.contextReferences??[],p=r.sandboxSnapshotId,{backgroundTasks:m,backgroundTaskEvents:h}=zr(a,o),g=r.name,_=null;if(r.messages)if(n)for(let e of r.messages)Lr(n,e);else _=r.messages;return{history:i,sessionName:g,pendingRestoreMessages:_,backgroundTasks:m,backgroundTaskEvents:h,backgroundJobGroups:s,backgroundJobGroupEvents:c,skillActivationEvents:l,memoryEvents:u,usedMemoryReferences:d,contextReferences:f,sandboxSnapshotId:p}}function zr(e,t){let n=new Date().toISOString(),r=[];return{backgroundTasks:e.map(e=>{if(Br(e.status)||Vr(e))return e;let t={...e,status:`failed`,timeoutReason:`stale_worker`,error:{category:`timeout`,message:`Restored background task is stale; worker cannot be reattached`,recoverable:!0},unread:!0,completedAt:n,updatedAt:n};return r.push({type:`background_task_failed`,task:t}),t}),backgroundTaskEvents:[...t,...r]}}function Br(e){return e===`completed`||e===`failed`||e===`cancelled`}function Vr(e){return e.kind===`scheduled`&&e.status===`sleeping`&&e.schedule!==void 0}function Hr(e){if(e.type===`background_task_started`&&e.task.kind===`agent`)return`SubagentStart`;if((e.type===`background_task_completed`||e.type===`background_task_failed`||e.type===`background_task_cancelled`)&&e.task.kind===`agent`)return`SubagentStop`}function Ur(e,t,n,r){let i=Hr(e);!i||!(`task`in e)||(0,c.runHooks)(n,i,{session_id:e.task.parentSessionId,cwd:t,hook_event_name:i,agent_id:e.task.id,agent_type:e.task.agentType??e.task.label,...e.task.transcriptPath?{agent_transcript_path:e.task.transcriptPath,transcript_path:e.task.transcriptPath}:{},...e.task.error?.message||e.task.timeoutReason?{reason:e.task.error?.message??e.task.timeoutReason}:{},...i===`SubagentStop`?{stop_hook_active:!1,...e.task.result?.output?{last_assistant_message:e.task.result.output}:{}}:{},env:{CLAUDE_PROJECT_DIR:t,CLAUDE_SESSION_ID:e.task.parentSessionId,ROBOTA_AGENT_ID:e.task.id,ROBOTA_AGENT_TYPE:e.task.agentType??e.task.label}},r).catch(()=>void 0)}const Wr=[`Bash — execute shell commands`,`Read — read file contents with line numbers`,`Write — write content to a file`,`Edit — replace a string in a file`,`Glob — find files matching a pattern`,`Grep — search file contents with regex`,`WebFetch — fetch URL content as text`,`WebSearch — search the internet through the configured local tool`];function Gr(e={}){return[(0,u.createBashTool)(e),(0,u.createReadTool)(e),(0,u.createWriteTool)(e),(0,u.createEditTool)(e),u.globTool,u.grepTool,u.webFetchTool,u.webSearchTool]}const Kr=new Set([`tools`,`disallowedTools`]),qr=new Set([`maxTurns`]);function Jr(e){let t=e.includes(`,`)?/\s*,\s*/:/\s+/;return e.split(t).map(e=>e.trim()).filter(e=>e.length>0)}function Yr(e){let t=e.split(`
67
+ `);if(t[0]?.trim()!==`---`)return{frontmatter:null,body:e};let n=-1;for(let e=1;e<t.length;e++)if(t[e]?.trim()===`---`){n=e;break}if(n===-1)return{frontmatter:null,body:e};let r={};for(let e=1;e<n;e++){let n=t[e].match(/^([a-zA-Z][a-zA-Z0-9]*(?:[A-Z][a-z]*)*):\s*(.+)/);if(!n)continue;let i=n[1],a=n[2].trim();Kr.has(i)?r[i]=Jr(a):qr.has(i)?r[i]=parseInt(a,10):r[i]=a}let i=t.slice(n+1).join(`
68
+ `).trim();return{frontmatter:Object.keys(r).length>0?r:null,body:i}}function V(e,t){if(!t.existsSync(e))return[];let n=[],r;try{r=t.readdirSync(e,{withFileTypes:!0})}catch{return[]}for(let i of r){if(!i.isFile()||!i.name.endsWith(`.md`))continue;let r=(0,g.join)(e,i.name),{frontmatter:a,body:o}=Yr(t.readFileSync(r,`utf-8`)),s=(0,g.basename)(i.name,`.md`),c={name:a?.name??s,description:a?.description??``,systemPrompt:o};a?.model!==void 0&&(c.model=a.model),a?.maxTurns!==void 0&&(c.maxTurns=a.maxTurns),a?.tools!==void 0&&(c.tools=a.tools),a?.disallowedTools!==void 0&&(c.disallowedTools=a.disallowedTools),n.push(c)}return n}var Xr=class{cwd;home;fs;constructor(e,t,n=new N){this.cwd=e,this.home=t??(0,_.homedir)(),this.fs=n}loadAll(){let e=[V((0,g.join)(this.cwd,`.robota`,`agents`),this.fs),V((0,g.join)(this.cwd,`.agents`,`agents`),this.fs),V((0,g.join)(this.cwd,`.claude`,`agents`),this.fs),V((0,g.join)(this.home,`.robota`,`agents`),this.fs),V((0,g.join)(this.home,`.claude`,`agents`),this.fs)],t=new Set,n=[];for(let r of e)for(let e of r)t.has(e.name)||(t.add(e.name),n.push(e));let r=[...n];for(let e of tt)t.has(e.name)||r.push(e);return r}getAgent(e){return this.loadAll().find(t=>t.name===e)}};function Zr(e){let t=e.content.trim();return e.title?[`## ${e.title}`,t].join(`
69
+ `):t}function Qr(e){return[...e].filter(e=>e.content.trim().length>0).sort((e,t)=>e.priority-t.priority||e.id.localeCompare(t.id)).map(e=>Zr(e)).join(`
70
+
71
+ `)}function H(e,t,n,r,i){return{id:e,title:t,priority:n,content:r,source:i}}function $r(e){return H(`preset-persona`,void 0,5,e,`persona`)}function ei(){return H(`preset-self-verification`,void 0,6,`Before you report a task complete, verify your work against this session's tool results — re-run the relevant checks and confirm the outcome matches what was asked. If something is not yet verified, say so plainly rather than implying it is done.`,`self-verification`)}function ti(e){if(e)return H(`runtime-cwd`,`Working Directory`,30,`\`${e}\``,`runtime`)}function ni(e){let t=[];return e.name!==void 0&&t.push(`- **Name:** ${e.name}`),e.type!==`unknown`&&t.push(`- **Type:** ${e.type}`),e.language!==`unknown`&&t.push(`- **Language:** ${e.language}`),e.packageManager!==void 0&&t.push(`- **Package manager:** ${e.packageManager}`),H(`runtime-project`,`Current Project`,40,t.join(`
72
+ `),`runtime`)}function ri(e){return H(`permission-mode`,`Permission Mode`,50,`- **Permission mode:** ${e}`,`permissions`)}function ii(e){if(!(e===void 0||e.trim().length===0))return H(`runtime-response-language`,`Response Language`,45,e,`runtime`)}function ai(e){if(e.trim().length!==0)return H(`project-agents-md`,`Agent Instructions`,10,e,`project-instructions`)}function oi(e){if(e.trim().length!==0)return H(`project-claude-md`,`Project Notes`,20,e,`project-instructions`)}function si(e){if(!(e===void 0||e.trim().length===0))return H(`project-memory`,`Project Memory`,25,e,`project-instructions`)}function ci(e){if(!(e===void 0||e.trim().length===0))return H(`active-task-context`,`Active Task Context`,27,e,`project-instructions`)}function li(e){if(e.length!==0)return H(`tool-descriptions`,`Available Tools`,60,e.map(e=>`- ${e}`).join(`
73
+ `),`tool`)}function ui(e){let t=e.argumentHint?` ${e.argumentHint}`:``;return`- ${e.name}${t}: ${e.description}`}function di(e,t,n,r,i){let a=i.filter(t=>t.modelInvocable&&t.kind===e).map(ui);if(a.length!==0)return H(`capability-${e}`,t,n,a.join(`
74
+ `),r)}function fi(e){let t=[],n=di(`builtin-command`,`Built-in Commands`,70,`command`,e),r=di(`skill`,`Skills`,80,`skill`,e),i=di(`agent`,`Agents`,90,`agent`,e),a=di(`tool`,`Tools`,100,`tool`,e);return n&&t.push(n),r&&t.push(r),i&&t.push(i),a&&t.push(a),t}function U(e,t){t!==void 0&&e.push(t)}function pi(e){return e.map(e=>({name:e.name,kind:`skill`,description:e.description,userInvocable:!0,modelInvocable:e.disableModelInvocation!==!0}))}function mi(e){return e.map(e=>({name:e.name,kind:`agent`,description:e.description,userInvocable:!1,modelInvocable:!0,safety:`background-agent`}))}function hi(e){return[...e.commandDescriptors??[],...e.skills?pi(e.skills):[],...e.agents?mi(e.agents):[]]}function gi(e){let t=[];return U(t,e.persona!==void 0&&e.persona.trim().length>0?$r(e.persona):void 0),U(t,e.selfVerification===!0?ei():void 0),U(t,ai(e.agentsMd)),U(t,oi(e.claudeMd)),U(t,si(e.memoryMd)),U(t,ci(e.taskContext)),U(t,ti(e.cwd)),t.push(ni(e.projectInfo)),U(t,ii(e.language)),t.push(ri(e.permissionMode)),U(t,li(e.toolDescriptions)),t.push(...fi(hi(e))),Qr(t)}function _i(e){return e}const vi=d.z.object({command:d.z.string().describe(`The shell command to start in the background`),timeout:d.z.number().optional().describe(`Optional timeout in milliseconds. Default is 120000.`),workingDirectory:d.z.string().optional().describe(`Working directory for the command. Defaults to the current project directory.`),stdin:d.z.string().optional().describe(`Optional stdin to write after the process starts.`),outputLimitBytes:d.z.number().optional().describe(`Maximum captured output bytes kept in the task result.`)});function yi(e,t,n){return JSON.stringify({success:!0,background:!0,output:``,taskId:e,status:t,command:n})}function bi(e){return JSON.stringify({success:!1,background:!0,output:``,error:`Background process error: ${e}`})}async function xi(e,t){try{let n=await t.backgroundTaskManager.spawn({kind:`process`,label:e.command,mode:`background`,parentSessionId:t.parentSessionId??`unknown-session`,depth:0,cwd:e.workingDirectory??t.cwd??process.cwd(),command:e.command,stdin:e.stdin,timeoutMs:e.timeout??12e4,outputLimitBytes:e.outputLimitBytes,metadata:t.metadata});return yi(n.id,n.status,e.command)}catch(e){return bi(e instanceof Error?e.message:String(e))}}function Si(e){return(0,u.createZodFunctionTool)(`BackgroundProcess`,`Start a shell command as a managed background task. Use this for long-running commands that should not block the current conversation. Use /background list, /background read <taskId>, /background cancel <taskId>, or /background close <taskId> to inspect or control it.`,_i(vi),async t=>xi(t,e))}function Ci(e,t,n,r,i,a){let o,s=[],c;if(e.enableAgentRuntime||e.enableParallelSubagents){let u=new Xr(n);s=u.loadAll(),o={config:e.config,context:e.context,tools:i,terminal:e.terminal,provider:r,cwd:n,parentSessionId:t,permissionMode:e.permissionMode,permissionHandler:e.permissionHandler,hooks:e.config.hooks,hookTypeExecutors:a.length>0?a:void 0,onTextDelta:e.onTextDelta,onToolExecution:e.onToolExecution,customAgentRegistry:e=>u.getAgent(e),agentDefinitions:s};let d=new l.SubagentManager({runner:(e.subagentRunnerFactory??Tt)(o),backgroundTaskRunners:e.backgroundTaskRunners});o.subagentManager=d,c=d.getBackgroundTaskManager(),o.backgroundTaskManager=c}else c=new l.BackgroundTaskManager({runners:e.backgroundTaskRunners??[]});let u=e.sessionLogger;return u&&c.subscribe(e=>Oi(u,t,e)),c.subscribe(t=>Ur(t,n,e.config.hooks,a.length>0?a:void 0)),{agentToolDeps:o,agentDefinitions:s,backgroundTaskManager:c}}function wi(e,t,n,r,i){if(!e.backgroundTaskRunners?.some(e=>e.kind===`process`))return{backgroundProcessToolDeps:void 0};let a={backgroundTaskManager:t,cwd:r,parentSessionId:n,metadata:E({kind:`tool_call`,sessionId:n,label:`BackgroundProcess`})};return i.push(Si(a)),{backgroundProcessToolDeps:a}}function Ti(e,t,n,r,i){return{agentsMd:e.context.agentsMd,claudeMd:e.context.claudeMd,memoryMd:e.context.memoryMd,taskContext:e.context.taskContext,toolDescriptions:n,permissionMode:e.permissionMode??c.TRUST_TO_MODE[e.config.defaultTrustLevel]??`default`,projectInfo:e.projectInfo??{type:`unknown`,language:`unknown`},cwd:t,language:e.config.language,skills:r.map(e=>({name:e.name,description:e.description,disableModelInvocation:e.disableModelInvocation})),...i.length>0?{agents:i.map(e=>({name:e.name,description:e.description}))}:{},commandDescriptors:e.commandDescriptors??[]}}function Ei(e,t,n,r,i,a,o){let s=e.systemPromptBuilder??gi,c=[...Wr,...r?r.commandTools.map(ut):[]],l=e.toolDescriptions??(i?[...c,`BackgroundProcess — start long-running shell commands as managed background tasks`]:c),u=e.persona,d=e.selfVerification,f=Ti(e,t,l,a,o),p=s({...f,...u===void 0?{}:{persona:u},...d===void 0?{}:{selfVerification:d}});return{finalSystemMessage:e.appendSystemPrompt?`${p}\n\n${e.appendSystemPrompt}`:p,rebuildSystemMessage:(t,n,r)=>{r?.persona!==void 0&&(u=r.persona),r?.selfVerification!==void 0&&(d=r.selfVerification);let i=s({...f,...u===void 0?{}:{persona:u},...d===void 0?{}:{selfVerification:d},agentsMd:t,claudeMd:n});return e.appendSystemPrompt?`${i}\n\n${e.appendSystemPrompt}`:i}}}function Di(e,t,n,r){t&&(t.parentSessionId=e.getSessionId()),t&&(t.isParallelSubagentsEnabled=()=>e.getParallelSubagentsEnabled()),n&&(n.parentSessionId=e.getSessionId()),Le(e,r),t&&At(e,t)}function Oi(e,t,n){let r={};if(n.type===`background_task_created`){r.taskId=n.task.id;let e=n.task.metadata?.executionOriginToolCallId;typeof e==`string`&&(r.originToolCallId=e)}e.log(t,`background_task_event`,{backgroundEventType:n.type,backgroundEvent:n,...r})}const ki=new Set([`Write`,`Edit`]);function Ai(e,t){return e.map(e=>ki.has(e.getName())?new ji(e,t):e)}var ji=class{delegate;recorder;schema;constructor(e,t){this.delegate=e,this.recorder=t,this.schema=e.schema}setEventService(e){this.delegate.setEventService(e)}async execute(e,t){let n=Mi(e);return n&&await this.recorder.captureFile(n),this.delegate.execute(e,t)}validate(e){return this.delegate.validate(e)}validateParameters(e){return this.delegate.validateParameters(e)}getDescription(){return this.delegate.getDescription()}getName(){return this.delegate.getName()}};function Mi(e){if(!e||typeof e!=`object`)return;let t=e.filePath;return typeof t==`string`&&t.length>0?t:void 0}const Ni=new Set([`disable-model-invocation`,`user-invocable`]),Pi=new Set([`allowed-tools`]);function Fi(e){return e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}function Ii(e){let t=e.includes(`,`)?/\s*,\s*/:/\s+/;return e.split(t).map(e=>e.trim()).filter(e=>e.length>0)}function Li(e){let t=e.split(`
75
+ `);if(t[0]?.trim()!==`---`)return null;let n={};for(let e=1;e<t.length;e++){let r=t[e];if(r.trim()===`---`)break;let i=r.match(/^([a-z][a-z0-9-]*):\s*(.+)/);if(!i)continue;let a=i[1],o=i[2].trim(),s=Fi(a);Ni.has(a)?n[s]=o===`true`:Pi.has(a)?n[s]=Ii(o):n[s]=o}return Object.keys(n).length>0?n:null}function Ri(e,t,n){let r={name:e?.name??n,description:e?.description??`Skill: ${n}`,source:`skill`,skillContent:t};return e?.argumentHint!==void 0&&(r.argumentHint=e.argumentHint),e?.disableModelInvocation!==void 0&&(r.disableModelInvocation=e.disableModelInvocation),e?.userInvocable!==void 0&&(r.userInvocable=e.userInvocable),e?.allowedTools!==void 0&&(r.allowedTools=e.allowedTools),e?.model!==void 0&&(r.model=e.model),e?.effort!==void 0&&(r.effort=e.effort),e?.context!==void 0&&(r.context=e.context),e?.agent!==void 0&&(r.agent=e.agent),r}function zi(e,t){if(!t.existsSync(e))return[];let n=[],r=t.readdirSync(e,{withFileTypes:!0});for(let i of r){if(!i.isDirectory())continue;let r=(0,g.join)(e,i.name,`SKILL.md`);if(!t.existsSync(r))continue;let a=t.readFileSync(r,`utf-8`),o=Li(a);n.push(Ri(o,a,i.name))}return n}function Bi(e,t){if(!t.existsSync(e))return[];let n=[],r=t.readdirSync(e,{withFileTypes:!0});for(let i of r){if(!i.isFile()||!i.name.endsWith(`.md`))continue;let r=(0,g.join)(e,i.name),a=t.readFileSync(r,`utf-8`),o=Li(a),s=(0,g.basename)(i.name,`.md`);n.push(Ri(o,a,s))}return n}var Vi=class{name=`skill`;cwd;home;fs;cachedCommands=null;constructor(e,t,n=new N){this.cwd=e,this.home=t??(0,_.homedir)(),this.fs=n}getCommands(){if(this.cachedCommands)return this.cachedCommands;let e=[zi((0,g.join)(this.cwd,`.claude`,`skills`),this.fs),Bi((0,g.join)(this.cwd,`.claude`,`commands`),this.fs),zi((0,g.join)(this.home,`.robota`,`skills`),this.fs),zi((0,g.join)(this.cwd,`.agents`,`skills`),this.fs)],t=new Set,n=[];for(let r of e)for(let e of r)t.has(e.name)||(t.add(e.name),n.push(e));return this.cachedCommands=n,this.cachedCommands}getModelInvocableSkills(){return this.getCommands().filter(e=>e.disableModelInvocation!==!0)}getUserInvocableSkills(){return this.getCommands().filter(e=>e.userInvocable!==!1)}},Hi=class extends Error{filePath;constructor(e,t){super(`Settings file ${e} contains invalid JSON: ${t}. Fix or delete the file, or run robota diagnose.`),this.name=`SettingsParseError`,this.filePath=e}};function Ui(){return(0,g.join)(process.env.HOME??process.env.USERPROFILE??`/`,`.robota`,`settings.json`)}function Wi(e,t){return t===void 0||t===`user`?Ui():(0,g.join)(e,`.robota`,`settings.local.json`)}function W(e){if(!(0,m.existsSync)(e))return{};let t=(0,m.readFileSync)(e,`utf8`);try{return JSON.parse(t)}catch(t){throw new Hi(e,t instanceof Error?t.message:String(t))}}function G(e,t){(0,m.mkdirSync)((0,g.dirname)(e),{recursive:!0}),(0,m.writeFileSync)(e,JSON.stringify(t,null,2)+`
76
+ `,`utf8`)}function Gi(e,t){let n=W(e),r=n.currentProvider,i=n.providers;if(typeof r==`string`&&Ki(i)){let e=i;e[r]={...Ki(e[r])?e[r]:{},model:t},n.providers=e}else n.provider={...Ki(n.provider)?n.provider:{},model:t};G(e,n)}function Ki(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function qi(e){return(0,m.existsSync)(e)?((0,m.unlinkSync)(e),!0):!1}function Ji(e){let t=/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(e);return t?t[1].trim():e.trim()}var Yi=class{type=`agent`;sessionFactory;constructor(e){this.sessionFactory=e.sessionFactory}async execute(e,t){let n=e,r=n.maxTurns??50,i=n.timeout??60;try{let e=this.sessionFactory({maxTurns:r,timeout:i}),n=`Hook input:\n${JSON.stringify(t)}\n\nRespond with JSON: { "ok": boolean, "reason"?: string }`,a=await e.run(n),o=Ji(a),s;try{s=JSON.parse(o)}catch{return{exitCode:1,stdout:``,stderr:`Failed to parse agent response as JSON: ${a}`}}return s.ok?{exitCode:0,stdout:JSON.stringify(s),stderr:``}:{exitCode:2,stdout:``,stderr:s.reason??`Blocked by agent hook`}}catch(e){return{exitCode:1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}}};function Xi(e){let t=/```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(e);return t?t[1].trim():e.trim()}var Zi=class{type=`prompt`;providerFactory;defaultModel;constructor(e){this.providerFactory=e.providerFactory,this.defaultModel=e.defaultModel}async execute(e,t){let n=e,r=n.model??this.defaultModel;try{let e=this.providerFactory(r),i=`${n.prompt}\n\nContext:\n${JSON.stringify(t)}\n\nRespond with JSON: { "ok": boolean, "reason"?: string }`,a=await e.complete(i),o=Xi(a),s;try{s=JSON.parse(o)}catch{return{exitCode:1,stdout:``,stderr:`Failed to parse AI response as JSON: ${a}`}}return s.ok?{exitCode:0,stdout:JSON.stringify(s),stderr:``}:{exitCode:2,stdout:``,stderr:s.reason??`Blocked by prompt hook`}}catch(e){return{exitCode:1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}}};const Qi=new Set([`Write`,`Edit`]),$i=new Set([`Bash`,`BackgroundProcess`]),ea=new Set([`Read`,`Glob`,`Grep`,`WebFetch`,`WebSearch`]);function ta(e){let t=e.toolName;return ea.has(t)?{toolName:t,reversible:!0,sideEffect:`none`,rollbackLayer:`none`,status:`read-only`,message:`${t} does not mutate the local workspace.`}:Qi.has(t)?e.context.isolation===`worktree`||e.context.isolation===`provider-sandbox`?ia(t,`file-mutation`,e.context):e.context.checkpointAvailable?{toolName:t,reversible:!0,sideEffect:`file-mutation`,rollbackLayer:`edit-checkpoint`,status:`reversible`,message:`${t} is reversible through the active edit checkpoint.`}:{toolName:t,reversible:!1,sideEffect:`file-mutation`,rollbackLayer:`none`,status:`requires-checkpoint`,message:`${t} requires an edit checkpoint before file mutation.`}:$i.has(t)?ia(t,`shell-process`,e.context):t===`Agent`?aa(e.toolArgs,e.context):{toolName:t,reversible:!1,sideEffect:`unknown`,rollbackLayer:`none`,status:`unknown`,message:`${t} has no reversible execution contract.`}}function na(e,t){let n={checkpointAvailable:t.checkpointAvailable,isolation:t.isolation??`none`},r=t.enforceUntrackedSideEffects??!0;return e.map(e=>new ra(e,{safetyContext:n,enforceUntrackedSideEffects:r}))}var ra=class{delegate;options;schema;constructor(e,t){this.delegate=e,this.options=t,this.schema=e.schema}setEventService(e){this.delegate.setEventService(e)}async execute(e,t){let n=ta({toolName:this.getName(),toolArgs:la(e),context:this.options.safetyContext});return!n.reversible&&this.options.enforceUntrackedSideEffects?ua(n):this.delegate.execute(e,t)}validate(e){return this.delegate.validate(e)}validateParameters(e){return this.delegate.validateParameters(e)}getDescription(){return this.delegate.getDescription()}getName(){return this.delegate.getName()}};function ia(e,t,n){return n.isolation===`worktree`?{toolName:e,reversible:!0,sideEffect:t,rollbackLayer:`worktree`,status:`reversible`,message:`${e} side effects are contained in an isolated Git worktree.`}:n.isolation===`provider-sandbox`?{toolName:e,reversible:!0,sideEffect:t,rollbackLayer:`provider-sandbox`,status:`reversible`,message:`${e} side effects are contained in a provider sandbox snapshot.`}:{toolName:e,reversible:!1,sideEffect:t,rollbackLayer:`none`,status:`requires-isolation`,message:`${e} can create host shell side effects that edit checkpoints cannot restore; use worktree or provider sandbox isolation.`}}function aa(e,t){return t.isolation===`worktree`||t.isolation===`provider-sandbox`?ia(`Agent`,`subagent`,t):oa(e)?{toolName:`Agent`,reversible:!0,sideEffect:`subagent`,rollbackLayer:`worktree`,status:`reversible`,message:`Agent jobs request worktree isolation, so shell side effects stay outside the parent workspace.`}:{toolName:`Agent`,reversible:!1,sideEffect:`subagent`,rollbackLayer:`none`,status:`requires-isolation`,message:`Agent jobs must request worktree isolation to be reversible in local-first mode.`}}function oa(e){if(!e)return!1;let t=e.jobs;return Array.isArray(t)?t.length>0&&t.every(e=>ca(e)?sa(e)===`worktree`:!1):sa(e)===`worktree`}function sa(e){let t=e.isolation;return typeof t==`string`?t:void 0}function ca(e){return e!==void 0&&typeof e==`object`&&!Array.isArray(e)}function la(e){if(!(!e||typeof e!=`object`||Array.isArray(e)))return e}function ua(e){return{success:!0,data:{success:!1,output:``,error:e.message,reversibleSafety:{toolName:e.toolName,sideEffect:e.sideEffect,rollbackLayer:e.rollbackLayer,status:e.status}},metadata:{reversibleSafetyStatus:e.status,rollbackLayer:e.rollbackLayer}}}function da(e){return(e??[]).filter(e=>e.modelInvocable&&e.kind===`builtin-command`)}function fa(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function pa(e,t){return e.some(e=>fa(e.name)===t)}function ma(e){if(!e.provider)throw Error(`provider is required. SDK is provider-neutral — consumer must create and pass a provider instance.`);let t=e.provider,n=e.cwd??process.cwd(),r=e.sessionId??ha(),i=new Vi(n),a=da(e.commandDescriptors),o=a.length>0&&e.modelCommandExecutor!==void 0&&e.isModelCommandInvocable!==void 0,s=o?lt(a):void 0,c=pa(a,`skills`)?i.getModelInvocableSkills():[],l=Gr({sandboxClient:e.sandboxClient,cwd:n}),u=e.editCheckpointRecorder!==void 0&&e.sandboxClient===void 0,d=[...u&&e.editCheckpointRecorder?Ai(l,e.editCheckpointRecorder):l,...e.additionalTools??[]],p=e.reversibleExecution?{...e.reversibleExecution,isolation:e.reversibleExecution.isolation??(e.sandboxClient?`provider-sandbox`:void 0)}:void 0,m=p?na(d,{...p,checkpointAvailable:u}):d;o&&e.modelCommandExecutor!==void 0&&e.isModelCommandInvocable!==void 0&&m.push(...ft({execute:e.modelCommandExecutor,isModelInvocable:e.isModelCommandInvocable,commandDescriptors:a}));let h=[];e.providerFactory&&h.push(new Zi({providerFactory:e.providerFactory,defaultModel:e.config.provider.model})),e.sessionFactory&&h.push(new Yi({sessionFactory:e.sessionFactory})),e.additionalHookExecutors&&h.push(...e.additionalHookExecutors);let{agentToolDeps:_,agentDefinitions:v,backgroundTaskManager:y}=Ci(e,r,n,t,m,h),{backgroundProcessToolDeps:ee}=wi(e,y,r,n,m),{finalSystemMessage:te,rebuildSystemMessage:ne}=Ei(e,n,a,s,ee,c,v),re=[`Read(.agents/**)`,`Read(.claude/**)`,`Read(.robota/**)`,`Glob(.agents/**)`,`Glob(.claude/**)`,`Glob(.robota/**)`],ie=s?s.commandTools.filter(e=>!e.requiresPermission).map(e=>e.toolName):[],ae=(e.allowedTools??[]).map(e=>`${e}(*)`),oe=(e.deniedTools??[]).map(e=>`${e}(*)`),se={allow:[...re,...ie,...e.config.permissions.allow??[],...ae],deny:[...e.config.permissions.deny??[],...oe]},b=(0,g.join)(n,`.robota`,`settings.local.json`);function ce(e){let t=`${e}(*)`,n=W(b),r=Array.isArray(n.permissions)?[]:n.permissions?.allow??[];r.includes(t)||G(b,{...n,permissions:{...n.permissions??{},allow:[...r,t]}})}let le=new f.Session({tools:m,provider:t,systemMessage:te,terminal:e.terminal,permissions:se,hooks:e.config.hooks,permissionMode:e.permissionMode,defaultTrustLevel:e.config.defaultTrustLevel,model:e.model??e.config.provider.model,providerTimeout:e.config.provider.timeout??12e4,maxTurns:e.maxTurns,sessionStore:e.sessionStore,sessionId:r,permissionHandler:e.permissionHandler,onProjectAllowTool:ce,onTextDelta:e.onTextDelta,onContextUpdate:e.onContextUpdate,onToolExecution:e.onToolExecution,promptForApproval:e.promptForApproval,onCompact:e.onCompact,onCompactEvent:e.onCompactEvent,compactInstructions:e.compactInstructions??e.context.compactInstructions,autoCompactThreshold:e.autoCompactThreshold??e.config.autoCompactThreshold,sessionLogger:e.sessionLogger,hookTypeExecutors:h.length>0?h:void 0,agentName:e.agentName,...e.activePresetId===void 0?{}:{activePresetId:e.activePresetId},...e.responseFormat?{responseFormat:e.responseFormat}:{},...e.effort===void 0?{}:{effort:e.effort}});return Di(le,_,ee,y),{session:le,rebuildSystemMessage:ne}}function ha(){return`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function ga(e,t,n,r=new N){let i=(0,g.join)(n,e,`subagents`);return r.mkdirSync(i,{recursive:!0}),new f.FileSessionLogger(i)}function _a(e,t){return(0,g.join)(t,e,`subagents`)}const K=d.z.lazy(()=>d.z.union([d.z.string(),d.z.number(),d.z.boolean(),d.z.null(),d.z.undefined(),d.z.date(),d.z.array(K),d.z.record(K)])),va=d.z.object({name:d.z.string().optional(),model:d.z.string().optional(),apiKey:d.z.string().optional(),baseURL:d.z.string().optional(),timeout:d.z.number().optional(),options:d.z.record(K).optional()}),ya=d.z.object({type:d.z.string().optional(),model:d.z.string().optional(),apiKey:d.z.string().optional(),baseURL:d.z.string().optional(),timeout:d.z.number().optional(),options:d.z.record(K).optional()}),ba=d.z.object({allow:d.z.array(d.z.string()).optional(),deny:d.z.array(d.z.string()).optional()}),xa=d.z.record(d.z.string()).optional(),Sa=d.z.object({type:d.z.literal(`command`),command:d.z.string(),timeout:d.z.number().optional()}),Ca=d.z.object({type:d.z.literal(`http`),url:d.z.string(),headers:d.z.record(d.z.string()).optional(),timeout:d.z.number().optional()}),wa=d.z.object({type:d.z.literal(`prompt`),prompt:d.z.string(),model:d.z.string().optional()}),Ta=d.z.object({type:d.z.literal(`agent`),agent:d.z.string(),maxTurns:d.z.number().optional(),timeout:d.z.number().optional()}),Ea=d.z.discriminatedUnion(`type`,[Sa,Ca,wa,Ta]),q=d.z.object({matcher:d.z.string(),hooks:d.z.array(Ea)}),Da=d.z.object({PreToolUse:d.z.array(q).optional(),PostToolUse:d.z.array(q).optional(),SessionStart:d.z.array(q).optional(),SessionEnd:d.z.array(q).optional(),Stop:d.z.array(q).optional(),StopFailure:d.z.array(q).optional(),PreCompact:d.z.array(q).optional(),PostCompact:d.z.array(q).optional(),UserPromptSubmit:d.z.array(q).optional(),SubagentStart:d.z.array(q).optional(),SubagentStop:d.z.array(q).optional(),WorktreeCreate:d.z.array(q).optional(),WorktreeRemove:d.z.array(q).optional()}).optional(),Oa=d.z.record(d.z.boolean()).optional(),ka=d.z.object({source:d.z.object({type:d.z.enum([`github`,`git`,`local`,`url`]),repo:d.z.string().optional(),url:d.z.string().optional(),path:d.z.string().optional(),ref:d.z.string().optional()})}),Aa=d.z.record(ka).optional().catch(void 0),ja=d.z.union([d.z.number().gt(0).lte(1),d.z.literal(!1)]).optional(),Ma=d.z.object({enabled:d.z.boolean().optional(),options:d.z.record(K).optional()}),Na=d.z.object({defaultTrustLevel:d.z.enum([`safe`,`moderate`,`full`]).optional(),language:d.z.string().optional(),preset:d.z.string().optional(),currentProvider:d.z.string().optional(),providers:d.z.record(ya).optional(),provider:va.optional(),permissions:ba.optional(),env:xa,hooks:Da,enabledPlugins:Oa,extraKnownMarketplaces:Aa,autoCompactThreshold:ja,transports:d.z.record(Ma).optional()});function Pa(){return process.env.HOME??process.env.USERPROFILE??`/`}const J={defaultTrustLevel:`moderate`,provider:{name:`anthropic`,model:`claude-opus-4-5`,apiKey:void 0},permissions:{allow:[],deny:[]},env:{}};function Fa(e){if(!(0,v.existsSync)(e))return;let t=(0,v.readFileSync)(e,`utf-8`).trim();if(t.length!==0)try{return JSON.parse(t)}catch{return}}function Ia(e){if(e.startsWith(`$ENV:`)){let t=e.slice(5);return process.env[t]??e}return e}function La(e){let t=e.provider?.apiKey===void 0?e.provider:Ra(e.provider);if(e.providers!==void 0){let n=Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,Ra(t)]));return{...e,provider:t,providers:n}}return{...e,provider:t}}function Ra(e){return{...e,...e.apiKey!==void 0&&{apiKey:Ia(e.apiKey)}}}function za(e){return e.reduce((e,t)=>({...e,...t,provider:e.provider!==void 0||t.provider!==void 0?{...e.provider,...t.provider}:void 0,permissions:e.permissions!==void 0||t.permissions!==void 0?{allow:t.permissions?.allow??e.permissions?.allow,deny:t.permissions?.deny??e.permissions?.deny}:void 0,env:{...e.env??{},...t.env??{}},providers:e.providers!==void 0||t.providers!==void 0?Ba(e.providers,t.providers):void 0,enabledPlugins:e.enabledPlugins!==void 0||t.enabledPlugins!==void 0?{...e.enabledPlugins??{},...t.enabledPlugins??{}}:void 0,extraKnownMarketplaces:t.extraKnownMarketplaces??e.extraKnownMarketplaces,autoCompactThreshold:t.autoCompactThreshold??e.autoCompactThreshold}),{})}function Ba(e,t){let n={...e??{}};for(let[e,r]of Object.entries(t??{}))n[e]={...n[e],...r};return n}function Va(e){if(e.currentProvider!==void 0)return Ha(e);if(e.provider!==void 0)throw Error(`Legacy flat "provider" settings are not supported. Migrate to "currentProvider" + "providers" format.`);return{...J.provider}}function Ha(e){let t=e.currentProvider;if(t===void 0)throw Error(`currentProvider is required`);let n=e.providers?.[t];if(n===void 0)throw Error(`currentProvider "${t}" was not found in providers`);if(n.type===void 0)throw Error(`Provider profile "${t}" is missing type`);return{name:n.type,model:n.model??J.provider.model,apiKey:n.apiKey??J.provider.apiKey,...n.baseURL!==void 0&&{baseURL:n.baseURL},...n.timeout!==void 0&&{timeout:n.timeout},...n.options!==void 0&&{options:n.options}}}function Ua(e){return{defaultTrustLevel:e.defaultTrustLevel??J.defaultTrustLevel,language:e.language,currentProvider:e.currentProvider,provider:Va(e),permissions:{allow:e.permissions?.allow??J.permissions.allow,deny:e.permissions?.deny??J.permissions.deny},env:e.env??J.env,hooks:e.hooks??void 0,enabledPlugins:e.enabledPlugins??void 0,extraKnownMarketplaces:e.extraKnownMarketplaces??void 0,autoCompactThreshold:e.autoCompactThreshold}}function Wa(e){let t=Pa();return[(0,y.join)(t,`.robota`,`settings.json`),(0,y.join)(t,`.claude`,`settings.json`),(0,y.join)(e,`.robota`,`settings.json`),(0,y.join)(e,`.robota`,`settings.local.json`),(0,y.join)(e,`.claude`,`settings.json`),(0,y.join)(e,`.claude`,`settings.local.json`)]}async function Ga(e){let t=Wa(e),n=[];for(let e of t){let t=Fa(e);t!==void 0&&n.push({raw:t,path:e})}return Ua(za(n.map(({raw:e,path:t})=>{let n=Na.safeParse(e);if(!n.success)throw Error(`Invalid settings in ${t}: ${n.error.message}`);return La(n.data)})))}const Ka=(0,g.join)(`.agents`,`tasks`),qa={"in-progress":1,todo:2,blocked:3,unknown:4,completed:5};function Ja(e){let t=e?.trim().toLowerCase();return t===`todo`||t===`in-progress`||t===`blocked`||t===`completed`?t:`unknown`}function Ya(e,t){return e.split(/\r?\n/).find(e=>/^#\s+/.test(e))?.replace(/^#\s+/,``).trim()||(0,g.basename)(t,`.md`)}function Xa(e,t){return RegExp(`^- \\*\\*${t}\\*\\*:\\s*(.+)$`,`im`).exec(e)?.[1]?.trim()}function Za(e,t){let n=e.split(/\r?\n/),r=RegExp(`^(#{2,6})\\s+${t}\\b`,`i`),i=n.findIndex(e=>r.test(e));if(i<0)return;let a=[];for(let e of n.slice(i+1)){if(/^##\s+/.test(e))break;a.push(e)}let o=a.join(`
77
+ `).trim();return o.length>0?o:void 0}function Qa(e){return e.split(/\r?\n/).map(e=>/^- \[ \]\s+(.+)$/.exec(e)?.[1]?.trim()).filter(e=>e!==void 0&&e.length>0)}function $a(e,t){return t&&e.branch===t?0:qa[e.status]}function eo(e){let t=[`### ${e.title}`,`- **Path:** \`${e.relativePath}\``];return t.push(`- **Status:** ${e.status}`),e.branch&&t.push(`- **Branch:** ${e.branch}`),e.scope&&t.push(`- **Scope:** ${e.scope}`),e.objective&&t.push(`- **Objective:** ${e.objective}`),e.openItems.length>0&&(t.push(`- **Open items:**`),t.push(...e.openItems.map(e=>` - ${e}`))),t.join(`
78
+ `)}function to(e){return e.toISOString().slice(0,10)}function no(e,t){let n=e.split(/\r?\n/),r=`- **Status**: ${t}`,i=n.findIndex(e=>/^- \*\*Status\*\*:\s*/.test(e));return i>=0?(n[i]=r,n.join(`
79
79
  `)):(n.length>0&&/^#\s+/.test(n[0])?n.splice(1,0,``,r):n.unshift(r,``),n.join(`
80
- `))}function $a(e,t,n){let r=[`### ${Za(t)}`,`- ${n.trim()}`],i=e.replace(/\s+$/u,``).split(/\r?\n/),a=i.findIndex(e=>/^## Progress\s*$/.test(e));if(a<0)return[...i,``,`## Progress`,``,...r,``].join(`
80
+ `))}function ro(e,t,n){let r=[`### ${to(t)}`,`- ${n.trim()}`],i=e.replace(/\s+$/u,``).split(/\r?\n/),a=i.findIndex(e=>/^## Progress\s*$/.test(e));if(a<0)return[...i,``,`## Progress`,``,...r,``].join(`
81
81
  `);let o=i.findIndex((e,t)=>t>a&&/^##\s+/.test(e));return o<0?[...i,``,...r,``].join(`
82
82
  `):(i.splice(o,0,``,...r,``),i.join(`
83
- `))}function eo(e,t){let n=(0,g.resolve)(e),r=!1;for(;!r;){let e=(0,g.join)(n,`.git`);if(t.existsSync(e)){if(t.statSync(e).isDirectory())return e;let r=t.readFileSync(e,`utf8`).trim().match(/^gitdir:\s*(.+)$/)?.[1];if(r)return(0,g.isAbsolute)(r)?r:(0,g.resolve)(n,r)}let i=(0,g.dirname)(n);r=i===n,n=i}}function to(e,t=new N){let n=eo(e,t);if(!n)return;let r=(0,g.join)(n,`HEAD`);if(t.existsSync(r))return(t.readFileSync(r,`utf8`).trim().match(/^ref:\s+refs\/heads\/(.+)$/)?.[1])?.trim()}function no(e,t=new N){let n=(0,g.join)(e,Ha);return t.existsSync(n)?t.readdirSync(n,{withFileTypes:!0}).filter(e=>e.isFile()).map(e=>e.name).filter(e=>e!==`README.md`&&e.endsWith(`.md`)).sort((e,t)=>e.localeCompare(t)).map(e=>(0,g.join)(n,e)):[]}function ro(e,t,n=new N){let r=n.readFileSync(e,`utf8`);return{path:e,relativePath:(0,g.relative)(t,e),title:Ga(r,e),status:Wa(Ka(r,`Status`)),branch:Ka(r,`Branch`),scope:Ka(r,`Scope`),objective:qa(r,`Objective`),openItems:Ja(r)}}function io(e,t={}){let n=t.maxTasks??3;return[...e].filter(e=>e.status!==`completed`).sort((e,n)=>Ya(e,t.currentBranch)-Ya(n,t.currentBranch)||e.relativePath.localeCompare(n.relativePath)).slice(0,n)}function ao(e){return e.map(Xa).join(`
83
+ `))}function io(e,t){let n=(0,g.resolve)(e),r=!1;for(;!r;){let e=(0,g.join)(n,`.git`);if(t.existsSync(e)){if(t.statSync(e).isDirectory())return e;let r=t.readFileSync(e,`utf8`).trim().match(/^gitdir:\s*(.+)$/)?.[1];if(r)return(0,g.isAbsolute)(r)?r:(0,g.resolve)(n,r)}let i=(0,g.dirname)(n);r=i===n,n=i}}function ao(e,t=new N){let n=io(e,t);if(!n)return;let r=(0,g.join)(n,`HEAD`);if(t.existsSync(r))return(t.readFileSync(r,`utf8`).trim().match(/^ref:\s+refs\/heads\/(.+)$/)?.[1])?.trim()}function oo(e,t=new N){let n=(0,g.join)(e,Ka);return t.existsSync(n)?t.readdirSync(n,{withFileTypes:!0}).filter(e=>e.isFile()).map(e=>e.name).filter(e=>e!==`README.md`&&e.endsWith(`.md`)).sort((e,t)=>e.localeCompare(t)).map(e=>(0,g.join)(n,e)):[]}function so(e,t,n=new N){let r=n.readFileSync(e,`utf8`);return{path:e,relativePath:(0,g.relative)(t,e),title:Ya(r,e),status:Ja(Xa(r,`Status`)),branch:Xa(r,`Branch`),scope:Xa(r,`Scope`),objective:Za(r,`Objective`),openItems:Qa(r)}}function co(e,t={}){let n=t.maxTasks??3;return[...e].filter(e=>e.status!==`completed`).sort((e,n)=>$a(e,t.currentBranch)-$a(n,t.currentBranch)||e.relativePath.localeCompare(n.relativePath)).slice(0,n)}function lo(e){return e.map(eo).join(`
84
84
 
85
- `)}function oo(e,t={},n=new N){let r=t.currentBranch??to(e,n);return ao(io(no(e,n).map(t=>ro(t,e,n)),{...t,currentBranch:r}))}function so(e,t,n={},r=new N){let i=Qa(r.readFileSync(e,`utf8`),t),a=n.progressMessage?$a(i,n.now??new Date,n.progressMessage):i;r.writeFileSync(e,a,`utf8`)}const co=25600,lo=[`user`,`feedback`,`project`,`reference`];function uo(e){return lo.includes(e)}function fo(e){return(0,y.join)(e,`.robota`,`memory`)}function po(e,t){let n=Buffer.from(e,`utf8`);return n.byteLength<=t?e:n.subarray(0,t).toString(`utf8`)}function mo(e,t){let n=e.split(/\r?\n/);return{content:n.slice(0,t).join(`
86
- `).trimEnd(),truncated:n.length>t}}function ho(e){return e.trim().toLowerCase().replace(/[^a-z0-9가-힣_-]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,80)||`general`}function go(e,t,n){let r=e.toISOString().slice(0,10),i=t.text.trim().replace(/\s+/g,` `);return`[${r}] (${t.type}/${n}) ${i}`}function _o(e){return e.trim().replace(/\s+/g,` `)}var vo=class{cwd;now;constructor(e,t=()=>new Date){this.cwd=e,this.now=t}getIndexPath(){return(0,y.join)(fo(this.cwd),`MEMORY.md`)}getTopicsPath(){return(0,y.join)(fo(this.cwd),`topics`)}loadStartupMemory(){let e=this.getIndexPath();if(!(0,v.existsSync)(e))return{content:``,path:e,lineCount:0,truncated:!1};let t=(0,v.readFileSync)(e,`utf8`),n=po(t,co),r=Buffer.byteLength(t,`utf8`)>co,i=mo(n,200);return{content:i.content,path:e,lineCount:i.content.length===0?0:i.content.split(/\r?\n/).length,truncated:r||i.truncated}}list(){let e=this.getTopicsPath(),t=(0,v.existsSync)(e)?(0,v.readdirSync)(e,{withFileTypes:!0}).filter(e=>e.isFile()&&e.name.endsWith(`.md`)).map(t=>({name:(0,y.basename)(t.name,`.md`),path:(0,y.join)(e,t.name)})).sort((e,t)=>e.name.localeCompare(t.name)):[];return{indexPath:this.getIndexPath(),topicsPath:e,topics:t}}readTopic(e){let t=ho(e),n=(0,y.join)(this.getTopicsPath(),`${t}.md`);return(0,v.existsSync)(n)?(0,v.readFileSync)(n,`utf8`).trimEnd():``}append(e){let t=ho(e.topic),n=fo(this.cwd),r=this.getTopicsPath();(0,v.mkdirSync)(r,{recursive:!0});let i=this.getIndexPath(),a=(0,y.join)(r,`${t}.md`),o=go(this.now(),e,t),s=(0,v.existsSync)(a)?``:`# ${t}\n\n`,c=_o(e.text);return(0,v.existsSync)(a)&&(0,v.readFileSync)(a,`utf8`).includes(`) ${c}`)?{indexPath:i,topicPath:a,topic:t,deduplicated:!0}:((0,v.existsSync)(i)||((0,v.mkdirSync)(n,{recursive:!0}),(0,v.writeFileSync)(i,`# Project Memory
85
+ `)}function uo(e,t={},n=new N){let r=t.currentBranch??ao(e,n);return lo(co(oo(e,n).map(t=>so(t,e,n)),{...t,currentBranch:r}))}function fo(e,t,n={},r=new N){let i=no(r.readFileSync(e,`utf8`),t),a=n.progressMessage?ro(i,n.now??new Date,n.progressMessage):i;r.writeFileSync(e,a,`utf8`)}const po=25600,mo=[`user`,`feedback`,`project`,`reference`];function ho(e){return mo.includes(e)}function go(e){return(0,y.join)(e,`.robota`,`memory`)}function _o(e,t){let n=Buffer.from(e,`utf8`);return n.byteLength<=t?e:n.subarray(0,t).toString(`utf8`)}function vo(e,t){let n=e.split(/\r?\n/);return{content:n.slice(0,t).join(`
86
+ `).trimEnd(),truncated:n.length>t}}function yo(e){return e.trim().toLowerCase().replace(/[^a-z0-9가-힣_-]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,80)||`general`}function bo(e,t,n){let r=e.toISOString().slice(0,10),i=t.text.trim().replace(/\s+/g,` `);return`[${r}] (${t.type}/${n}) ${i}`}function xo(e){return e.trim().replace(/\s+/g,` `)}var So=class{cwd;now;constructor(e,t=()=>new Date){this.cwd=e,this.now=t}getIndexPath(){return(0,y.join)(go(this.cwd),`MEMORY.md`)}getTopicsPath(){return(0,y.join)(go(this.cwd),`topics`)}loadStartupMemory(){let e=this.getIndexPath();if(!(0,v.existsSync)(e))return{content:``,path:e,lineCount:0,truncated:!1};let t=(0,v.readFileSync)(e,`utf8`),n=_o(t,po),r=Buffer.byteLength(t,`utf8`)>po,i=vo(n,200);return{content:i.content,path:e,lineCount:i.content.length===0?0:i.content.split(/\r?\n/).length,truncated:r||i.truncated}}list(){let e=this.getTopicsPath(),t=(0,v.existsSync)(e)?(0,v.readdirSync)(e,{withFileTypes:!0}).filter(e=>e.isFile()&&e.name.endsWith(`.md`)).map(t=>({name:(0,y.basename)(t.name,`.md`),path:(0,y.join)(e,t.name)})).sort((e,t)=>e.name.localeCompare(t.name)):[];return{indexPath:this.getIndexPath(),topicsPath:e,topics:t}}readTopic(e){let t=yo(e),n=(0,y.join)(this.getTopicsPath(),`${t}.md`);return(0,v.existsSync)(n)?(0,v.readFileSync)(n,`utf8`).trimEnd():``}append(e){let t=yo(e.topic),n=go(this.cwd),r=this.getTopicsPath();(0,v.mkdirSync)(r,{recursive:!0});let i=this.getIndexPath(),a=(0,y.join)(r,`${t}.md`),o=bo(this.now(),e,t),s=(0,v.existsSync)(a)?``:`# ${t}\n\n`,c=xo(e.text);return(0,v.existsSync)(a)&&(0,v.readFileSync)(a,`utf8`).includes(`) ${c}`)?{indexPath:i,topicPath:a,topic:t,deduplicated:!0}:((0,v.existsSync)(i)||((0,v.mkdirSync)(n,{recursive:!0}),(0,v.writeFileSync)(i,`# Project Memory
87
87
 
88
- `,`utf8`)),(0,v.appendFileSync)(i,`- ${o}\n`,`utf8`),(0,v.appendFileSync)(a,`${s}- ${o}\n`,`utf8`),{indexPath:i,topicPath:a,topic:t,deduplicated:!1})}};function yo(e,t){let n=[],r=(0,y.resolve)(e),i=!1;for(;!i;){let e=(0,y.join)(r,t);(0,v.existsSync)(e)&&n.push(e);let a=(0,y.dirname)(r);i=a===r,i||(r=a)}return n.reverse()}function bo(e){let t=e.split(`
88
+ `,`utf8`)),(0,v.appendFileSync)(i,`- ${o}\n`,`utf8`),(0,v.appendFileSync)(a,`${s}- ${o}\n`,`utf8`),{indexPath:i,topicPath:a,topic:t,deduplicated:!1})}};function Co(e,t){let n=[],r=(0,y.resolve)(e),i=!1;for(;!i;){let e=(0,y.join)(r,t);(0,v.existsSync)(e)&&n.push(e);let a=(0,y.dirname)(r);i=a===r,i||(r=a)}return n.reverse()}function wo(e){let t=e.split(`
89
89
  `),n=!1,r=0,i=[];for(let e of t){let t=/^(#{1,6})\s+/.exec(e);if(t){if(n&&t[1].length<=r)break;if(/compact\s+instructions/i.test(e)){n=!0,r=t[1].length;continue}}n&&i.push(e)}return i.join(`
90
- `).trim()||void 0}async function xo(e){let t=yo(e,`AGENTS.md`),n=yo(e,`CLAUDE.md`),r=t.map(e=>Zt(e)),i=n.map(e=>Zt(e)),a=r.map(e=>e.content).join(`
90
+ `).trim()||void 0}async function To(e){let t=Co(e,`AGENTS.md`),n=Co(e,`CLAUDE.md`),r=t.map(e=>Qt(e)),i=n.map(e=>Qt(e)),a=r.map(e=>e.content).join(`
91
91
 
92
92
  `),o=i.map(e=>e.content).join(`
93
93
 
94
- `),s=bo(o),c=new vo(e).loadStartupMemory().content||void 0,l=oo(e);return{agentsMd:a,claudeMd:o,memoryMd:c,taskContext:l.trim().length>0?l:void 0,compactInstructions:s,agentsFileEntries:r,claudeFileEntries:i}}var So=class{settingsPath;fs;constructor(e,t=new N){this.settingsPath=e,this.fs=t}readAll(){if(!this.fs.existsSync(this.settingsPath))return{};try{let e=this.fs.readFileSync(this.settingsPath,`utf-8`),t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return{}}}writeAll(e){let t=(0,g.dirname)(this.settingsPath);this.fs.existsSync(t)||this.fs.mkdirSync(t,{recursive:!0}),this.fs.writeFileSync(this.settingsPath,JSON.stringify(e,null,2),`utf-8`)}getEnabledPlugins(){let e=this.readAll().enabledPlugins;return typeof e==`object`&&e?e:{}}setPluginEnabled(e,t){let n=this.readAll(),r=this.getEnabledPluginsFrom(n);r[e]=t,n.enabledPlugins=r,this.writeAll(n)}removePluginEntry(e){let t=this.readAll(),n=this.getEnabledPluginsFrom(t);delete n[e],t.enabledPlugins=n,this.writeAll(t)}getMarketplaceSources(){let e=this.readAll().extraKnownMarketplaces;return typeof e==`object`&&e?e:{}}setMarketplaceSource(e,t){let n=this.readAll(),r=this.getMarketplaceSourcesFrom(n);r[e]={source:t},n.extraKnownMarketplaces=r,this.writeAll(n)}removeMarketplaceSource(e){let t=this.readAll(),n=this.getMarketplaceSourcesFrom(t);delete n[e],t.extraKnownMarketplaces=n,this.writeAll(t)}getEnabledPluginsFrom(e){let t=e.enabledPlugins;return typeof t==`object`&&t?t:{}}getMarketplaceSourcesFrom(e){let t=e.extraKnownMarketplaces;return typeof t==`object`&&t?t:{}}};function Co(e){let t=e.trimStart();if(!t.startsWith(`---`))return{metadata:{},content:e};let n=t.indexOf(`---`,3);if(n===-1)return{metadata:{},content:e};let r=t.slice(3,n).trim(),i=t.slice(n+3).trimStart(),a={};for(let e of r.split(`
95
- `)){let t=e.indexOf(`:`);if(t===-1)continue;let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();typeof r==`string`&&r.startsWith(`[`)&&r.endsWith(`]`)&&(r=r.slice(1,-1).split(`,`).map(e=>e.trim()).filter(e=>e.length>0)),n&&(a[n]=r)}return{metadata:a,content:i}}function wo(e){if(typeof e!=`object`||!e)return null;let t=e;if(typeof t.name!=`string`||typeof t.version!=`string`||typeof t.description!=`string`)return null;let n=typeof t.features==`object`&&t.features!==null?t.features:{};return{name:t.name,version:t.version,description:t.description,features:{commands:n.commands===!0?!0:void 0,agents:n.agents===!0?!0:void 0,skills:n.skills===!0?!0:void 0,hooks:n.hooks===!0?!0:void 0,mcp:n.mcp===!0?!0:void 0}}}function To(e,t=new N){if(!t.existsSync(e))return[];try{return t.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name).sort()}catch{return[]}}var Eo=class{pluginsDir;enabledPlugins;fs;constructor(e,t,n=new N){this.pluginsDir=e,this.enabledPlugins=t??{},this.fs=n}loadPluginsSync(){return this.discoverAndLoad()}async loadAll(){return this.discoverAndLoad()}discoverAndLoad(){let e=(0,g.join)(this.pluginsDir,`cache`);if(!this.fs.existsSync(e))return[];let t=[],n=To(e,this.fs);for(let r of n){let n=(0,g.join)(e,r),i=To(n,this.fs);for(let e of i){let i=(0,g.join)(n,e),a=To(i,this.fs);if(a.length===0)continue;let o=a[a.length-1],s=(0,g.join)(i,o),c=(0,g.join)(s,`.claude-plugin`,`plugin.json`);if(!this.fs.existsSync(c))continue;let l=this.readManifest(c);if(!l)continue;let u=`${l.name}@${r}`;if(this.isDisabled(u,l.name))continue;let d=this.loadPlugin(s,l);t.push(d)}}return t}readManifest(e){let t=this.fs.readFileSync(e,`utf-8`);return wo(JSON.parse(t))}isDisabled(e,t){return e in this.enabledPlugins?this.enabledPlugins[e]===!1:t in this.enabledPlugins?this.enabledPlugins[t]===!1:!1}loadPlugin(e,t){return{manifest:t,skills:this.loadSkills(e,t.name),commands:this.loadCommands(e,t.name),hooks:this.loadHooks(e),mcpConfig:this.loadMcpConfig(e),agents:this.loadAgents(e),pluginDir:e}}loadSkills(e,t){let n=(0,g.join)(e,`skills`);if(!this.fs.existsSync(n))return[];let r=this.fs.readdirSync(n,{withFileTypes:!0}),i=[];for(let e of r){if(!e.isDirectory())continue;let t=(0,g.join)(n,e.name,`SKILL.md`);if(!this.fs.existsSync(t))continue;let{metadata:r,content:a}=Co(this.fs.readFileSync(t,`utf-8`)),o=typeof r.description==`string`?r.description:``,s={name:e.name,description:o,skillContent:a,...r};i.push(s)}return i}loadCommands(e,t){let n=(0,g.join)(e,`commands`);if(!this.fs.existsSync(n))return[];let r=this.fs.readdirSync(n,{withFileTypes:!0}),i=[];for(let e of r){if(!e.isFile()||!e.name.endsWith(`.md`))continue;let{metadata:r,content:a}=Co(this.fs.readFileSync((0,g.join)(n,e.name),`utf-8`)),o=typeof r.name==`string`?r.name:e.name.replace(/\.md$/,``),s=typeof r.description==`string`?r.description:``;i.push({...r,name:`${t}:${o}`,description:s,skillContent:a})}return i}loadHooks(e){let t=(0,g.join)(e,`hooks`,`hooks.json`);if(!this.fs.existsSync(t))return{};let n=this.fs.readFileSync(t,`utf-8`),r=JSON.parse(n);return typeof r==`object`&&r?r:{}}loadMcpConfig(e){let t=(0,g.join)(e,`.mcp.json`);if(!this.fs.existsSync(t))return;let n=this.fs.readFileSync(t,`utf-8`);return JSON.parse(n)}loadAgents(e){let t=(0,g.join)(e,`agents`);return this.fs.existsSync(t)?this.fs.readdirSync(t,{withFileTypes:!0}).filter(e=>e.isDirectory()||e.name.endsWith(`.md`)).map(e=>e.name.replace(/\.md$/,``)):[]}},Do=class{pluginsDir;cacheDir;registryPath;settingsStore;marketplaceClient;exec;fs;constructor(e){this.pluginsDir=e.pluginsDir,this.cacheDir=(0,g.join)(this.pluginsDir,`cache`),this.registryPath=(0,g.join)(this.pluginsDir,`installed_plugins.json`),this.settingsStore=e.settingsStore,this.marketplaceClient=e.marketplaceClient,this.exec=e.exec,this.fs=e.fs??new N}async install(e,t){let n=this.marketplaceClient.fetchManifest(t).plugins.find(t=>t.name===e);if(!n)throw Error(`Plugin "${e}" not found in marketplace "${t}"`);let r=this.resolveVersion(n,t),i=(0,g.join)(this.cacheDir,t,e,r);if(this.fs.existsSync(i))throw Error(`Plugin "${e}" version "${r}" is already installed from "${t}"`);this.resolveAndInstall(n.source,t,e,i);let a=`${e}@${t}`,o=this.readRegistry();o[a]={pluginName:e,marketplace:t,version:r,installPath:i,installedAt:new Date().toISOString()},this.writeRegistry(o)}async uninstall(e){let t=this.readRegistry(),n=t[e];if(!n)throw Error(`Plugin "${e}" is not installed`);this.fs.existsSync(n.installPath)&&this.fs.rmSync(n.installPath,{recursive:!0,force:!0}),delete t[e],this.writeRegistry(t),this.settingsStore.removePluginEntry(e)}async enable(e){this.settingsStore.setPluginEnabled(e,!0)}async disable(e){this.settingsStore.setPluginEnabled(e,!1)}getInstalledPlugins(){return this.readRegistry()}getPluginsByMarketplace(e){let t=this.readRegistry();return Object.values(t).filter(t=>t.marketplace===e)}resolveVersion(e,t){let n=e;return typeof n.version==`string`&&n.version?n.version:this.marketplaceClient.getMarketplaceSha(t)}normalizeSource(e){if(typeof e==`string`)return e;let t=e;return!t.type&&typeof t.source==`string`?{...t,type:t.source}:e}resolveAndInstall(e,t,n,r){this.fs.mkdirSync(r,{recursive:!0});let i=this.normalizeSource(e);try{if(typeof i==`string`){let e=(0,g.join)(this.marketplaceClient.getMarketplaceDir(t),i);if(!this.fs.existsSync(e))throw Error(`Plugin source path "${i}" not found in marketplace "${t}"`);this.fs.cpSync(e,r,{recursive:!0})}else if(i.type===`github`){let e=`https://github.com/${i.repo}.git`;this.cloneToDir(e,r,n)}else if(i.type===`url`&&typeof i.url==`string`&&i.url.endsWith(`.git`))this.cloneToDir(i.url,r,n);else if(i.type===`url`)throw Error(`URL source "${i.url}" is not a git repository (must end with .git)`);else throw Error(`Unknown source type: ${JSON.stringify(i)}`)}catch(e){throw this.fs.existsSync(r)&&this.fs.rmSync(r,{recursive:!0,force:!0}),e}}cloneToDir(e,t,n){this.fs.rmSync(t,{recursive:!0,force:!0});let r=`git clone --depth 1 ${e} ${t}`;try{this.exec(r,{timeout:6e4,stdio:`pipe`})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to clone plugin "${n}": ${t}`)}}readRegistry(){if(!this.fs.existsSync(this.registryPath))return{};try{let e=this.fs.readFileSync(this.registryPath,`utf-8`),t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return{}}}writeRegistry(e){let t=(0,g.dirname)(this.registryPath);this.fs.existsSync(t)||this.fs.mkdirSync(t,{recursive:!0}),this.fs.writeFileSync(this.registryPath,JSON.stringify(e,null,2),`utf-8`)}};function Y(e,t=new N){if(!t.existsSync(e))return{};try{let n=t.readFileSync(e,`utf-8`),r=JSON.parse(n);return typeof r==`object`&&r?r:{}}catch{return{}}}function Oo(e,t,n=new N){let r=(0,g.dirname)(e);n.existsSync(r)||n.mkdirSync(r,{recursive:!0}),n.writeFileSync(e,JSON.stringify(t,null,2),`utf-8`)}function ko(e,t,n=new N){let r=(0,g.join)(e,`installed_plugins.json`);if(!n.existsSync(r))return;let i;try{let e=n.readFileSync(r,`utf-8`),t=JSON.parse(e);if(typeof t!=`object`||!t)return;i=t}catch{return}let a=!1;for(let[e,r]of Object.entries(i))r.marketplace===t&&(r.installPath&&n.existsSync(r.installPath)&&n.rmSync(r.installPath,{recursive:!0,force:!0}),delete i[e],a=!0);if(a){let e=(0,g.dirname)(r);n.existsSync(e)||n.mkdirSync(e,{recursive:!0}),n.writeFileSync(r,JSON.stringify(i,null,2),`utf-8`)}}const Ao=6e4;var jo=class{pluginsDir;exec;marketplacesDir;registryPath;fs;constructor(e){this.pluginsDir=e.pluginsDir,this.exec=e.exec,this.marketplacesDir=(0,g.join)(this.pluginsDir,`marketplaces`),this.registryPath=(0,g.join)(this.pluginsDir,`known_marketplaces.json`),this.fs=e.fs??new N}addMarketplace(e){let t=`temp-`+Date.now().toString(36),n=(0,g.join)(this.marketplacesDir,t);if(this.fs.mkdirSync(this.marketplacesDir,{recursive:!0}),e.type===`local`){if(!this.fs.existsSync(e.path))throw Error(`Local marketplace path does not exist: ${e.path}`);this.fs.cpSync(e.path,n,{recursive:!0})}else{let t=`git clone --depth 1 ${this.resolveCloneUrl(e)} ${n}`;try{this.exec(t,{timeout:Ao,stdio:`pipe`})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to clone marketplace: ${t}`)}}let r=(0,g.join)(n,`.claude-plugin`,`marketplace.json`);if(!this.fs.existsSync(r))throw this.fs.rmSync(n,{recursive:!0,force:!0}),Error(e.type===`local`?`Local directory does not contain .claude-plugin/marketplace.json`:`Cloned repository does not contain .claude-plugin/marketplace.json`);let i=this.readManifestFromPath(r).name;if(!i)throw this.fs.rmSync(n,{recursive:!0,force:!0}),Error(`Marketplace manifest does not contain a "name" field`);let a=Y(this.registryPath,this.fs);if(a[i])throw this.fs.rmSync(n,{recursive:!0,force:!0}),Error(`Marketplace "${i}" already exists`);let o=(0,g.join)(this.marketplacesDir,i);return this.fs.renameSync(n,o),a[i]={source:e,installLocation:o,lastUpdated:new Date().toISOString()},Oo(this.registryPath,a,this.fs),i}removeMarketplace(e){let t=Y(this.registryPath,this.fs),n=t[e];if(!n)throw Error(`Marketplace "${e}" not found`);ko(this.pluginsDir,e,this.fs),this.fs.existsSync(n.installLocation)&&this.fs.rmSync(n.installLocation,{recursive:!0,force:!0}),delete t[e],Oo(this.registryPath,t,this.fs)}updateMarketplace(e){let t=Y(this.registryPath,this.fs),n=t[e];if(!n)throw Error(`Marketplace "${e}" not found`);if(!this.fs.existsSync(n.installLocation))throw Error(`Marketplace directory for "${e}" does not exist`);if(n.source.type===`local`){let e=n.source;if(!this.fs.existsSync(e.path))throw Error(`Local marketplace path does not exist: ${e.path}`);this.fs.rmSync(n.installLocation,{recursive:!0,force:!0}),this.fs.cpSync(e.path,n.installLocation,{recursive:!0})}else{let t=`git -C ${n.installLocation} pull`;try{this.exec(t,{timeout:Ao,stdio:`pipe`})}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Failed to update marketplace "${e}": ${n}`)}}n.lastUpdated=new Date().toISOString(),Oo(this.registryPath,t,this.fs)}listMarketplaces(){let e=Y(this.registryPath,this.fs);return Object.entries(e).map(([e,t])=>({name:e,source:t.source,lastUpdated:t.lastUpdated}))}fetchManifest(e){let t=Y(this.registryPath,this.fs)[e];if(!t)throw Error(`Marketplace "${e}" not found`);let n=(0,g.join)(t.installLocation,`.claude-plugin`,`marketplace.json`);if(!this.fs.existsSync(n))throw Error(`Marketplace "${e}" does not contain .claude-plugin/marketplace.json`);return this.readManifestFromPath(n)}getMarketplaceDir(e){let t=Y(this.registryPath,this.fs)[e];if(!t)throw Error(`Marketplace "${e}" not found`);return t.installLocation}getMarketplaceSha(e){let t=this.getMarketplaceDir(e);try{return this.exec(`git -C ${t} rev-parse HEAD`,{timeout:Ao,stdio:`pipe`}).toString().trim().slice(0,12)}catch{return`unknown`}}listAvailablePlugins(){let e=[],t=this.listMarketplaces();for(let{name:n}of t)try{let t=this.fetchManifest(n);for(let r of t.plugins)e.push({...r,marketplace:n})}catch{}return e}resolveCloneUrl(e){switch(e.type){case`github`:return`https://github.com/${e.repo}.git`;case`git`:return e.url;case`local`:throw Error(`Local source type does not use git cloning`);case`url`:throw Error(`URL marketplace source is not yet supported`)}}readManifestFromPath(e){let t=this.fs.readFileSync(e,`utf-8`),n=JSON.parse(t);if(typeof n!=`object`||!n)throw Error(`Invalid marketplace manifest: not an object`);if(typeof n.name!=`string`)throw Error(`Invalid marketplace manifest: missing "name" field`);return n}};function Mo(e){let t=(0,g.join)((0,g.dirname)((0,g.dirname)(e.pluginDir)),`data`,e.manifest.name);return{CLAUDE_PLUGIN_ROOT:e.pluginDir,CLAUDE_PLUGIN_PATH:e.pluginDir,CLAUDE_PLUGIN_DATA:t}}function No(e,t){return Array.isArray(e.hooks)?{...e,hooks:e.hooks.map(e=>typeof e.command==`string`?{...e,command:e.command.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g,t)}:e)}:e}function Po(e){let t={};for(let n of e){let e=n.hooks;if(!e)continue;let r=Mo(n),i=e.hooks??e;for(let[e,a]of Object.entries(i)){if(!Array.isArray(a))continue;t[e]||(t[e]=[]);let i=a.map(e=>{let t=No(e,n.pluginDir);return t.env=r,t});t[e].push(...i)}}return t}function Fo(e,t){if(Object.keys(t).length===0)return e;let n={};for(let[e,r]of Object.entries(t))n[e]=[...r];if(e)for(let[t,r]of Object.entries(e))Array.isArray(r)&&(n[t]||(n[t]=[]),n[t].push(...r));return n}async function Io(e){let t=e.cwd,[n,r,i]=await Promise.all([e.config?Promise.resolve(e.config):Va(t),e.bare?Promise.resolve({agentsMd:``,claudeMd:``,agentsFileEntries:[],claudeFileEntries:[]}):xo(t),e.bare?Promise.resolve({type:`unknown`,language:`unknown`}):Fr(t)]),a=e.language?{...n,language:e.language}:n,o=new Eo((0,g.join)((0,_.homedir)(),`.robota`,`plugins`));if(!e.bare)try{let e=o.loadPluginsSync();if(e.length>0){let t=Po(e);a={...a,hooks:Fo(a.hooks,t)}}}catch{}let s=R(t);await Ro(e)||await Lo(e,t);let c=e.resumeSessionId&&!e.forkSession?e.resumeSessionId:void 0,{session:l,rebuildSystemMessage:u}=ua({config:a,cwd:t,context:r,projectInfo:i,permissionMode:e.permissionMode,maxTurns:e.maxTurns,terminal:Yn,sessionLogger:new f.FileSessionLogger(s.logs),permissionHandler:e.permissionHandler,provider:e.provider,onTextDelta:e.onTextDelta,onContextUpdate:e.onContextUpdate,onCompactEvent:e.onCompactEvent,onToolExecution:e.onToolExecution,sessionId:c,allowedTools:e.allowedTools,deniedTools:e.deniedTools,model:e.model,appendSystemPrompt:e.appendSystemPrompt,...e.systemPrompt?{systemPromptBuilder:()=>e.systemPrompt}:{},backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,...e.commandModules?.some(e=>e.sessionRequirements?.includes(`agent-runtime`))?{enableAgentRuntime:!0}:{},...e.commandModules||e.commandDescriptors?{commandDescriptors:[...e.commandDescriptors??[],...e.commandModules?.flatMap(e=>e.commandDescriptors??[])??[]]}:{},modelCommandExecutor:e.modelCommandExecutor,isModelCommandInvocable:e.isModelCommandInvocable,editCheckpointRecorder:e.editCheckpointRecorder,reversibleExecution:e.reversibleExecution,sandboxClient:e.sandboxClient,agentName:e.agentName,...e.additionalTools?{additionalTools:e.additionalTools}:{},...e.responseFormat?{responseFormat:e.responseFormat}:{}});return{session:l,agentsFileEntries:r.agentsFileEntries??[],claudeFileEntries:r.claudeFileEntries??[],rebuildSystemMessage:u}}async function Lo(e,t){if(e.workspaceManifest){if(!e.sandboxClient)throw Error(`workspaceManifest requires sandboxClient.`);await(0,u.applyWorkspaceManifest)(e.sandboxClient,e.workspaceManifest,{hostRoot:t,...e.sandboxWorkspaceRoot?{targetRoot:e.sandboxWorkspaceRoot}:{}})}}async function Ro(e){if(!e.sandboxSnapshotId)return!1;if(!e.sandboxClient?.restore)throw Error(`sandboxSnapshotId requires sandboxClient with restore().`);return await e.sandboxClient.restore(e.sandboxSnapshotId),!0}async function zo(e,t){let n=e.config??await Va(e.cwd),r=n.autoCompactThreshold===void 0?`default`:`settings`,i=new z({cwd:e.cwd});t.setEditCheckpointStore(i);let a=await Io({cwd:e.cwd,provider:e.provider,config:n,permissionMode:e.permissionMode,maxTurns:e.maxTurns,permissionHandler:e.permissionHandler,resumeSessionId:t.resumeSessionId,forkSession:e.forkSession,onTextDelta:t.onTextDelta,onContextUpdate:t.onContextUpdate,onCompactEvent:t.onCompactEvent,onToolExecution:t.onToolExecution,bare:e.bare,allowedTools:e.allowedTools,deniedTools:e.deniedTools,model:e.model,appendSystemPrompt:e.appendSystemPrompt,...e.systemPrompt?{systemPrompt:e.systemPrompt}:{},language:e.language,backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,...e.commandModules?{commandModules:e.commandModules}:{},editCheckpointRecorder:i,...e.reversibleExecution?{reversibleExecution:e.reversibleExecution}:{},...e.sandboxClient?{sandboxClient:e.sandboxClient}:{},...e.workspaceManifest?{workspaceManifest:e.workspaceManifest}:{},...e.sandboxWorkspaceRoot?{sandboxWorkspaceRoot:e.sandboxWorkspaceRoot}:{},...t.sandboxSnapshotId?{sandboxSnapshotId:t.sandboxSnapshotId}:{},...e.agentName?{agentName:e.agentName}:{},...e.additionalTools?{additionalTools:e.additionalTools}:{},...e.responseFormat?{responseFormat:e.responseFormat}:{},commandDescriptors:t.commandDescriptors,...t.commandDescriptors.length>0?{modelCommandExecutor:t.executeModelCommand,isModelCommandInvocable:t.isModelCommandInvocable}:{}});if(t.pendingRestoreMessages){for(let e of t.pendingRestoreMessages)Ir(a.session,e);a.session.syncContextFromHistory()}return{session:a.session,agentsFileEntries:a.agentsFileEntries,claudeFileEntries:a.claudeFileEntries,rebuildSystemMessage:a.rebuildSystemMessage,autoCompactThresholdSource:r}}function Bo(e,t,n,r,i,a,o,s,c,l){try{let u=t.getSessionId(),d=e.load(u),f=l?.snapshotId??d?.sandboxSnapshotId;e.save(Vo({session:t,sessionId:u,sessionName:n??d?.name,cwd:r,history:i,createdAt:d?.createdAt,backgroundState:a,memoryState:o,skillActivationState:s,contextReferenceState:c,...f===void 0?{}:{sandboxSnapshotId:f}}))}catch{}}function Vo(e){return{id:e.sessionId,...e.sessionName===void 0?{}:{name:e.sessionName},cwd:e.cwd,createdAt:e.createdAt??new Date().toISOString(),updatedAt:new Date().toISOString(),messages:e.session.getHistory(),history:e.history,systemPrompt:e.session.getSystemMessage(),toolSchemas:e.session.getToolSchemas(),...e.sandboxSnapshotId===void 0?{}:{sandboxSnapshotId:e.sandboxSnapshotId},...Ho(e.backgroundState),...Uo(e.memoryState),...Wo(e.skillActivationState),...Go(e.contextReferenceState)}}function Ho(e){return e?{backgroundTasks:[...e.tasks],backgroundTaskEvents:[...e.events],backgroundJobGroups:[...e.groups??[]],backgroundJobGroupEvents:[...e.groupEvents??[]]}:{}}function Uo(e){return e?{memoryEvents:[...e.events],usedMemoryReferences:[...e.usedReferences]}:{}}function Wo(e){return e?{skillActivationEvents:[...e.events]}:{}}function Go(e){return e?{contextReferences:[...e.references]}:{}}function Ko(e){return e.source===`skill`||e.source===`plugin`&&e.skillContent?`skill`:`builtin-command`}function qo(e){let t=e.source===`skill`||e.source===`plugin`&&!!e.skillContent;return{name:e.name,kind:Ko(e),description:e.description,userInvocable:e.userInvocable!==!1,modelInvocable:e.modelInvocable===!0||t&&e.disableModelInvocation!==!0,...e.argumentHint?{argumentHint:e.argumentHint}:{},...e.safety?{safety:e.safety}:{}}}var Jo=class{sources=[];addSource(e){this.sources.push(e)}replaceSource(e,t){this.sources=this.sources.filter(t=>t.name!==e),t!==void 0&&this.sources.push(t)}addModule(e){for(let t of e.commandSources??[])this.addSource(t)}getCommands(e){let t=[];for(let e of this.sources)t.push(...e.getCommands());if(!e)return t;let n=e.toLowerCase();return t.filter(e=>e.name.toLowerCase().startsWith(n))}resolveQualifiedName(e){let t=this.getCommands().filter(t=>t.source===`plugin`&&t.name.includes(`:`)&&t.name.endsWith(`:${e}`));return t.length===1?t[0].name:null}getSubcommands(e){let t=e.toLowerCase();for(let e of this.sources)for(let n of e.getCommands())if(n.name.toLowerCase()===t&&n.subcommands)return n.subcommands;return[]}getCapabilityDescriptors(){return this.getCommands().map(e=>qo(e))}},Yo=class{commands;constructor(e){this.commands=new Map;for(let t of e??Xo())this.commands.set(t.name,t)}register(e){this.commands.set(e.name,e)}async execute(e,t,n){let r=this.getCommand(e);return r?await this.executeCommand(r,t,n):null}getCommand(e){return this.commands.get(e)}resolveRequiresPermission(e){return e.requiresPermission===void 0?e.safety!==`read-only`:e.requiresPermission}async executeCommand(e,t,n){return await e.execute(t,n)}listCommands(){return[...this.commands.values()]}listModelInvocableCommands(){return this.listCommands().filter(e=>e.modelInvocable===!0).map(e=>({name:e.name,kind:`builtin-command`,description:e.description,userInvocable:e.userInvocable!==!1,modelInvocable:!0,...e.argumentHint?{argumentHint:e.argumentHint}:{},...e.safety?{safety:e.safety}:{},requiresPermission:this.resolveRequiresPermission(e)}))}isModelInvocable(e){return this.commands.get(e)?.modelInvocable===!0}async executeModelInvocable(e,t,n){return this.isModelInvocable(e)?this.execute(e,t,n):null}hasCommand(e){return this.commands.has(e)}};function Xo(){return[]}function Zo(e){return{name:e.name,description:e.description,source:`builtin`,...e.subcommands?{subcommands:[...e.subcommands]}:{},...e.argumentHint?{argumentHint:e.argumentHint}:{},...e.modelInvocable===void 0?{}:{modelInvocable:e.modelInvocable},...e.userInvocable===void 0?{}:{userInvocable:e.userInvocable},...e.safety?{safety:e.safety}:{}}}var Qo=class{name=`builtin`;commands;constructor(e=Xo()){this.commands=e.map(Zo)}getCommands(){return this.commands}};function $o(){let e=Xo();return{name:`sdk-builtin`,commandSources:[new Qo(e)],systemCommands:e}}function es(e,t,n){return{...e,providers:{...e.providers??{},[t]:n}}}function ts(e,t){if(!e.providers?.[t])throw Error(`Provider profile "${t}" was not found`);return{...e,currentProvider:t}}function ns(e,t,n={}){if(!e.providers?.[t])throw Error(`Provider profile "${t}" was not found`);let r={...e.providers};if(delete r[t],n.replacementCurrentProvider!==void 0&&r[n.replacementCurrentProvider]===void 0)throw Error(`Provider profile "${n.replacementCurrentProvider}" was not found`);let i={...e,providers:r};if(e.currentProvider!==t)return i;if(n.replacementCurrentProvider!==void 0)return{...i,currentProvider:n.replacementCurrentProvider};let a={...i};return delete a.currentProvider,a}function rs(e,t,n={}){if(!t.type)throw Error(`Provider profile "${e}" is missing type`);let r=n.providerDefinitions??[],i=(0,c.findProviderDefinition)(r,t.type);if(i===void 0&&r.length>0)throw Error(`Unknown provider "${t.type}". Supported providers: ${(0,c.formatSupportedProviderTypes)(r)}`);if(!t.model)throw Error(`Provider profile "${e}" is missing model`);let a=(0,c.getProviderCredentialRequirement)(i);if(a!==void 0&&!cs(t,i?.defaults,a))throw Error(`Provider profile "${e}" is missing ${us(a)}`)}function is(e,t={}){let n=as(e,t);return rs(e.profile,n,t),{...e.setCurrent&&{currentProvider:e.profile},providers:{[e.profile]:n}}}function as(e,t={}){let n=ss(e.type,t.providerDefinitions??[]);if(e.apiKey!==void 0&&e.apiKeyEnv===void 0&&console.warn(`API key stored as plain text in settings. Use --api-key-env for better security.`),e.apiKeyEnv!==void 0){let n=(t.env??process.env)[e.apiKeyEnv];if(n===void 0||n.length===0)throw Error(`Environment variable ${e.apiKeyEnv} is not set — set it before configuring (the profile will reference $ENV:${e.apiKeyEnv})`)}let r=e.apiKeyEnv===void 0?e.apiKey??n.apiKey:(0,c.formatEnvReference)(e.apiKeyEnv),i=e.baseURL??n.baseURL;return{type:e.type,model:e.model??n.model,...ds(r)&&{apiKey:r},...i!==void 0&&{baseURL:i},...e.timeout!==void 0&&{timeout:e.timeout}}}function os(e,t){let[n,r]=Object.entries(t.providers)[0]??[];if(!n||!r)return e;let i=es(e,n,r);return t.currentProvider?ts(i,t.currentProvider):i}function ss(e,t){return(0,c.findProviderDefinition)(t,e)?.defaults??{}}function cs(e,t,n){return n.anyOf.some(n=>(0,c.hasUsableSecretReference)(ls(n,e,t)))}function ls(e,t,n){return t[e]??n?.[e]}function us(e){return e.anyOf.join(` or `)}function ds(e){return e!==void 0&&e.length>0}async function fs(e,t,n,r){let i=n??e;if(!i)return{message:`No provider profile selected.`,success:!1};let a=t?.[i];if(!a)return{message:`Provider profile "${i}" was not found.`,success:!1};try{rs(i,a,{providerDefinitions:r.providerDefinitions})}catch(e){return{message:e instanceof Error?e.message:String(e),success:!1}}let o=await((a.type?(0,c.findProviderDefinition)(r.providerDefinitions,a.type):void 0)?.probeProfile??ps)(a);return{message:o.ok?`Provider "${i}" test passed: ${o.message}`:`Provider "${i}" test failed: ${o.message}; manual configuration can continue.`,success:!0,data:{providerTest:{profile:i}}}}async function ps(e){return{ok:!0,message:`Profile fields are valid; no endpoint probe configured.`}}function ms(e,t=[]){return hs(e,t)?`valid`:`incomplete`}function hs(e,t){if(typeof e.currentProvider==`string`){let n=e.providers?.[e.currentProvider];return gs(n?.type,n,t)}return!!(e.provider&&gs(e.provider.name,e.provider,t))}function gs(e,t,n){if(!t)return!1;if(!e)return(0,c.hasUsableSecretReference)(t.apiKey);let r=(0,c.findProviderDefinition)(n,e);if(r===void 0)return!1;let i=(0,c.getProviderCredentialRequirement)(r);return i===void 0?!0:_s(t,r,i)}function _s(e,t,n){return n.anyOf.some(n=>(0,c.hasUsableSecretReference)(vs(n,e,t)))}function vs(e,t,n){return t[e]??n.defaults?.[e]}function ys(e,t=[]){if(!(0,m.existsSync)(e))return`missing`;try{let n=(0,m.readFileSync)(e,`utf8`).trim();return n.length===0?`incomplete`:ms(JSON.parse(n),t)}catch{return`corrupt`}}function bs(e,t=new N){return e.reduce((e,n)=>{let r=xs(n,t);return r===void 0?e:Ss(e,r)},{})}function xs(e,t){if(!t.existsSync(e))return;let n=t.readFileSync(e,`utf8`);try{return JSON.parse(n)}catch(t){throw new Ri(e,t instanceof Error?t.message:String(t))}}function Ss(e,t){return{...e,...t,provider:e.provider!==void 0||t.provider!==void 0?{...e.provider,...t.provider}:void 0,providers:e.providers!==void 0||t.providers!==void 0?Cs(e.providers,t.providers):void 0}}function Cs(e,t){let n={...e??{}};for(let[e,r]of Object.entries(t??{}))n[e]={...n[e],...r};return n}function ws(e,t,n){let r=t??e.currentProvider;if(r!==void 0){let t=e.providers?.[r];if(t===void 0)throw Error(`Provider profile "${r}" was not found in providers`);if(!t.type)throw Error(`Provider profile "${r}" is missing type`);return(0,l.normalizeProviderConfig)({name:t.type,model:t.model,apiKey:t.apiKey,baseURL:t.baseURL,timeout:t.timeout,options:t.options},n)}let i=e.provider;if(i?.name)return(0,l.normalizeProviderConfig)({name:i.name,model:i.model,apiKey:i.apiKey,baseURL:i.baseURL,timeout:i.timeout,options:i.options},n)}function Ts(){return process.env.HOME??process.env.USERPROFILE??`/`}function Es(e){let t=Ts();return[(0,g.join)(t,`.robota`,`settings.json`),(0,g.join)(t,`.claude`,`settings.json`),(0,g.join)(e,`.robota`,`settings.json`),(0,g.join)(e,`.robota`,`settings.local.json`),(0,g.join)(e,`.claude`,`settings.json`),(0,g.join)(e,`.claude`,`settings.local.json`)]}function Ds(e,t={}){let n=t.settingsPaths??Es(e),r=Ns(n)??n[0];if(r===void 0)throw Error(`No settings path available for provider update`);return r}function X(e){return W(e)}function Os(e,t,n={}){let r=os(X(e),is(t,n));return G(e,r),r}function ks(e,t,n={}){let r=X(e),i=r.providers?.[t]!==void 0,a=n.knownProviders?.[t]!==void 0,o=i||a?{...r,currentProvider:t}:ts(r,t);return G(e,o),o}function As(e,t,n={}){let r=n.settingsPaths??Es(e),i=bs(r),a=n.providerOverride??i.currentProvider;if(typeof a!=`string`)throw Error(`Cannot update model: no active provider profile. Set "currentProvider" in settings.`);return js(r,a,t)}function js(e,t,n){let r=Ms(e,t)??e[0];if(r===void 0)throw Error(`No settings path available for model update`);let i=X(r),a=i.providers??{},o=a[t]??{},s={...i,providers:{...a,[t]:{...o,model:n}}};return G(r,s),{settingsPath:r,settings:s,profileName:t}}function Ms(e,t){for(let n=e.length-1;n>=0;--n){let r=e[n];if(r!==void 0&&X(r).providers?.[t]!==void 0)return r}}function Ns(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&X(n).currentProvider!==void 0)return n}}var Ps=class extends Error{constructor(e){super(e),this.name=`ProviderConfigError`}};function Fs(e){return bs(Es(e))}function Is(e,t=process.env){for(let n of e){let e=n.defaults;if(e?.apiKey===void 0||e.model===void 0||!(0,c.isEnvReference)(e.apiKey))continue;let r=e.apiKey.slice(c.ENV_REFERENCE_PREFIX.length).trim();if(r.length===0)continue;let i=t[r];if(!(i===void 0||i.length===0))return{name:n.type,model:e.model,apiKey:i,...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},...e.options!==void 0&&{options:e.options},source:`env-default`,sourceEnvVar:r}}}function Ls(e,t={}){let n=ws(Fs(e),t.providerOverride,t.providerDefinitions??[]);if(n!==void 0)return n;let r=Is(t.providerDefinitions??[],t.env);if(r!==void 0)return r;throw new Ps("No provider configuration found. Run `robota` to set up.")}function Rs(e,t,n={}){let r=n.providerDefinitions??[],i=Ls(e,{...n,providerDefinitions:r}),a=t??i.model;return(0,l.createProviderFromConfig)({...i,model:a},r)}var zs=class{name=`plugin`;plugins;constructor(e){this.plugins=e}getCommands(){let e=[];for(let t of this.plugins){for(let n of t.skills){let r=n.name.includes(`@`)?n.name.split(`@`)[0]:n.name;e.push({name:r,description:`(${t.manifest.name}) ${n.description}`,source:`plugin`,skillContent:n.skillContent,pluginDir:t.pluginDir})}for(let n of t.commands)e.push({name:n.name,description:n.description,source:`plugin`,skillContent:n.skillContent,pluginDir:t.pluginDir})}return e}};const Bs=f.AUTO_COMPACT_THRESHOLD,Vs=`autoCompactThreshold`;function Hs(e){return e.getContextState()}function Us(e){return e.getAutoCompactThreshold()}function Ws(e){return e.getAutoCompactThresholdSource?.()??`session`}function Gs(e,t,n){if(e.setAutoCompactThreshold){e.setAutoCompactThreshold(t,n);return}let r=e.getSession();if(!r.setAutoCompactThreshold)throw Error(`Command host does not support changing auto-compact threshold.`);r.setAutoCompactThreshold(t)}function Ks(e,t){let n=$s(e);return n?(n.write({...n.read(),[Vs]:t}),!0):!1}function qs(e){let t=$s(e);if(!t)return!1;let n={...t.read()};return delete n[Vs],t.write(n),!0}async function Js(e,t){let n=Hs(e),r=e.getSession().getMessageCount();return await e.compactContext(t),{before:n,after:Hs(e),beforeMessageCount:r,afterMessageCount:e.getSession().getMessageCount()}}function Ys(e){return e.listContextReferences?.()??[]}async function Xs(e,t){return e.addContextReference?e.addContextReference(t):{evicted:[],diagnostics:[`Command host does not support context reference additions.`]}}function Zs(e,t){return e.removeContextReference?.(t)??{}}function Qs(e){return e.clearContextReferences?.()??{removed:[]}}function $s(e){return e.getCommandHostAdapters?.().settings}function ec(e,t={}){let n=tc(e.type)??`provider`,r=new Set(t.existingProfileNames??[]);if(!r.has(n))return n;let i=2;for(;r.has(`${n}-${i}`);)i+=1;return`${n}-${i}`}function tc(e){let t=e?.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``);return t!==void 0&&t.length>0?t:void 0}function nc(e){return e.listCommands?.()??[]}function rc(e){return[`Available commands:`,...nc(e).flatMap(e=>{let t=e.displayName??e.name,n=`/${e.name}`,r=` ${(e.displayName?`${t} (${n})`:n).padEnd(32)} — ${e.description}`;return e.example?[r,` Example: ${e.example}`]:[r]})].join(`
96
- `)}function ic(){return[{name:`list`,description:`List background tasks`,source:`background`},{name:`read`,description:`Read a background task log page`,source:`background`},{name:`cancel`,description:`Cancel a running background task`,source:`background`},{name:`close`,description:`Dismiss a terminal background task`,source:`background`}]}function ac(e){let t=e.promptPreview??e.commandPreview??``,n=e.unread?` unread`:``,r=e.currentAction?` (${e.currentAction})`:``,i=e.timeoutReason?` timeout=${e.timeoutReason}`:``,a=e.lastActivityAt?` lastActivityAt=${e.lastActivityAt}`:``,o=cc(e),s=t?` — ${t}`:``;return`${e.id} [${e.status}${n}${i}${a}${o}] ${e.kind}:${e.label}${r}${s}`}function oc(e){return e.length===0?`No background tasks.`:[`Background tasks:`,...e.map(e=>` ${ac(e)}`)].join(`
97
- `)}function sc(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isNaN(t)?void 0:{offset:t}}function cc(e){let t=[];return e.worktreePath&&t.push(`worktree=${e.worktreePath}`),e.branchName&&t.push(`branch=${e.branchName}`),e.worktreeStatus&&t.push(`worktreeStatus="${lc(e.worktreeStatus)}"`),e.worktreeNextAction&&t.push(`next="${lc(e.worktreeNextAction)}"`),t.length===0?``:` ${t.join(` `)}`}function lc(e){let t=e.trim().replace(/\s+/g,` `);return t.length>160?`${t.slice(0,160)}...`:t}function uc(e,t){return e.listBackgroundTasks(t)}function dc(e,t,n){return e.readBackgroundTaskLog(t,n)}function fc(e,t,n){return e.cancelBackgroundTask(t,n)}function pc(e,t){return e.closeBackgroundTask(t)}const mc=[{code:`ko`,description:`Korean`},{code:`en`,description:`English`},{code:`ja`,description:`Japanese`},{code:`zh`,description:`Chinese`}];function hc(e=`language`){return mc.map(t=>({name:t.code,description:t.description,source:e}))}function gc(e){let t=e.trim().split(/\s+/)[0];return t!==void 0&&t.length>0?t:void 0}function _c(e=`language`){return`Usage: ${e} <code> (e.g., ko, en, ja, zh)`}const vc=[`plan`,`default`,`acceptEdits`,`bypassPermissions`];function yc(e=`mode`){return[{name:`plan`,description:`Plan only, no execution`,source:e},{name:`default`,description:`Ask before risky actions`,source:e},{name:`acceptEdits`,description:`Auto-approve file edits`,source:e},{name:`bypassPermissions`,description:`Skip all permission checks`,source:e}]}function bc(e){let t=e.trim().split(/\s+/)[0];return t!==void 0&&t.length>0?t:void 0}function xc(e){return vc.includes(e)}function Sc(){return`Invalid mode. Valid: ${vc.join(` | `)}`}function Cc(e){let t=e.getCommandHostAdapters?.().permissionMode;if(t!==void 0)return t;let n=e.getSession();return{getPermissionMode:()=>n.getPermissionMode(),setPermissionMode:e=>n.setPermissionMode(e),listSessionAllowedTools:()=>n.getSessionAllowedTools()}}function wc(e){return Cc(e).getPermissionMode()}function Tc(e,t){Cc(e).setPermissionMode(t)}function Ec(e){return Cc(e).listSessionAllowedTools()}function Dc(e){return{mode:wc(e),sessionAllowed:Ec(e)}}function Oc(e){let t=[`Permission mode: ${e.mode}`];return e.sessionAllowed.length>0?t.push(`Session-approved tools: ${e.sessionAllowed.join(`, `)}`):t.push(`No session-approved tools.`),t.join(`
98
- `)}const kc={enabled:!0,gitBranch:!0};function Ac(e=`statusline`){return[{name:`on`,description:`Show the status line`,source:e},{name:`off`,description:`Hide the status line`,source:e},{name:`reset`,description:`Restore default status-line fields`,source:e},{name:`git`,description:`Show or hide git branch field`,source:e}]}function jc(e){return(e.enabled===void 0||typeof e.enabled==`boolean`)&&(e.gitBranch===void 0||typeof e.gitBranch==`boolean`)}function Mc(e){let t=e.statusline;return Pc(t)?{enabled:typeof t.enabled==`boolean`?t.enabled:kc.enabled,gitBranch:typeof t.gitBranch==`boolean`?t.gitBranch:kc.gitBranch}:{...kc}}function Nc(e,t){let n=W(e),r={...Mc(n),...t};return n.statusline=r,G(e,n),r}function Pc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Fc(){return{type:`plugin-tui-requested`}}function Ic(){return{type:`plugin-registry-reload-requested`}}function Lc(e){return e.getCommandHostAdapters?.().plugin}function Rc(){return[{name:`manage`,description:`Open plugin manager`,source:`plugin-manager`},{name:`install`,description:`Install a plugin`,source:`plugin-manager`},{name:`uninstall`,description:`Uninstall a plugin`,source:`plugin-manager`},{name:`enable`,description:`Enable a plugin`,source:`plugin-manager`},{name:`disable`,description:`Disable a plugin`,source:`plugin-manager`},{name:`marketplace`,description:`Manage plugin marketplaces`,source:`plugin-manager`,subcommands:[{name:`add`,description:`Add marketplace source`,source:`plugin-manager`},{name:`remove`,description:`Remove marketplace source`,source:`plugin-manager`},{name:`update`,description:`Update marketplace source`,source:`plugin-manager`},{name:`list`,description:`List marketplace sources`,source:`plugin-manager`}]}]}function zc(e){if(e.clearConversationHistory!==void 0){e.clearConversationHistory();return}e.getSession().clearHistory()}function Bc(e){let t=e.trim();return t.length>0?t:void 0}function Vc(e){return{type:`session-renamed`,name:e}}function Hc(){return{type:`session-picker-requested`}}function Uc(){return{type:`session-exit-requested`}}function Wc(e){let t=e.getSession();return{sessionId:t.getSessionId(),messageCount:t.getMessageCount()}}function Gc(e){let t=e.validateCurrentSessionReplayLog?.();if(t!==void 0)return t;let n=e.getSession().getSessionId(),r=(0,g.join)(R(e.getCwd()).logs,`${n}.jsonl`),i=(0,f.loadSessionLogEntries)(r);return{logFile:r,entryCount:i.length,validation:(0,f.validateSessionReplayLogEntries)(i)}}function Kc(e){let t=e.validation.ok?`Session replay log is valid.`:`Session replay log has ${e.validation.issues.length} issue(s).`,n=[`Log: ${e.logFile}`,`Entries: ${e.entryCount}`];if(e.validation.ok)return[t,...n].join(`
99
- `);let r=e.validation.issues.map((e,t)=>{let n=qc(e);return`${t+1}. ${e.code}${n}: ${e.message}`});return[t,...n,``,...r].join(`
100
- `)}function qc(e){let t=[];return e.executionId!==void 0&&t.push(`execution=${e.executionId}`),e.round!==void 0&&t.push(`round=${e.round}`),e.toolCallId!==void 0&&t.push(`tool=${e.toolCallId}`),t.length>0?` (${t.join(`, `)})`:``}function Jc(e=`rewind`){return[{name:`list`,description:`List edit checkpoints`,source:e},{name:`inspect`,description:`Inspect captured files and restore plans`,source:e},{name:`restore`,description:`Restore code to a checkpoint`,source:e},{name:`code`,description:`Restore code to a checkpoint`,source:e},{name:`rollback`,description:`Rollback code through a checkpoint`,source:e}]}function Yc(e){return e.listEditCheckpoints()}function Xc(e,t){if(!e.inspectEditCheckpoint)throw Error(`Checkpoint inspection is not available in this command host.`);return e.inspectEditCheckpoint(t)}function Zc(e,t){return e.restoreEditCheckpoint(t)}function Qc(e,t){return e.rollbackEditCheckpoint(t)}const $c=[/\b(api[_-]?key|secret|token|password|private key)\b/i,/\b\d{3}-\d{2}-\d{4}\b/,/\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/,/주민등록|비밀번호|시크릿|토큰/u];function el(e){return $c.some(t=>t.test(e))}function tl(e){return(0,g.join)(e,`.robota`,`memory`)}function nl(){return{version:1,records:[]}}var rl=class{fs;path;now;constructor(e,t=()=>new Date,n=new N){this.fs=n,this.path=(0,g.join)(tl(e),`pending.json`),this.now=t}getPath(){return this.path}list(e){let t=this.read().records;return e?t.filter(t=>t.status===e):t}get(e){return this.read().records.find(t=>t.id===e)}upsert(e,t,n){let r=this.read(),i=this.now().toISOString(),a=r.records.findIndex(t=>t.id===e.id),o={...e,status:t,updatedAt:i,decisionReason:n};a>=0?r.records[a]={...r.records[a],...o}:r.records.push(o),this.write(r)}mark(e,t,n){let r=this.read(),i=r.records.findIndex(t=>t.id===e);if(i<0)throw Error(`Memory candidate not found: ${e}`);let a={...r.records[i],status:t,updatedAt:this.now().toISOString(),decisionReason:n};return r.records[i]=a,this.write(r),a}read(){if(!this.fs.existsSync(this.path))return nl();try{return{version:1,records:JSON.parse(this.fs.readFileSync(this.path,`utf8`)).records??[]}}catch{return nl()}}write(e){this.fs.mkdirSync((0,g.dirname)(this.path),{recursive:!0}),this.fs.writeFileSync(this.path,JSON.stringify(e,null,2),`utf8`)}};function il(e=`memory`){return[{name:`list`,description:`List project memory topics`,source:e},{name:`show`,description:`Show project memory index or a topic`,source:e},{name:`add`,description:`Save durable project memory`,source:e},{name:`pending`,description:`List pending memory candidates`,source:e},{name:`approve`,description:`Approve a pending memory candidate`,source:e},{name:`reject`,description:`Reject a pending memory candidate`,source:e},{name:`used`,description:`Show memory references used in the current turn`,source:e}]}function al(e,t){return new vo(e,t)}function ol(e,t){return new rl(e,t)}function sl(e,t){let n=e.getCwd();return{project:al(n,t),pending:ol(n,t)}}function cl(e){return uo(e)}function ll(e){return el(e)}function ul(e){return e.getUsedMemoryReferences()}function dl(e,t,n=()=>new Date){e.recordMemoryEvent({...t,at:n().toISOString()})}function fl(e,t,n){let r=t?t.split(/\s+/):[],i=e;return i=i.replace(/\$ARGUMENTS\[(\d+)]/g,(e,t)=>r[Number(t)]??``),i=i.replace(/\$ARGUMENTS/g,t),i=i.replace(/\$(\d)(?!\d|\w|\[)/g,(e,t)=>r[Number(t)]??``),i=i.replace(/\$\{CLAUDE_SESSION_ID}/g,n?.sessionId??``),i=i.replace(/\$\{CLAUDE_SKILL_DIR}/g,n?.skillDir??``),i}async function pl(e,t){let n=/!`([^`]+)`/g;if(!n.test(e))return e;n.lastIndex=0;let r=e,i,a=[];for(;(i=n.exec(e))!==null;)a.push({full:i[0],command:i[1]});for(let{full:e,command:n}of a){let i=``;if(t)try{i=t(n)}catch{i=``}r=r.replace(e,i)}return r}async function ml(e,t,n,r){return e.skillContent?fl(await pl(e.skillContent,n.shellExec),t,r):null}async function hl(e,t,n,r){let i=await ml(e,t,n,r);if(i){let n=t||e.description;return`<skill name="${e.name}">\n${i}\n</skill>\n\nExecute the "${e.name}" skill: ${n}`}return`Use the "${e.name}" skill: ${t||e.description}`}async function gl(e,t,n,r){if(e.context===`fork`){if(!n.runInFork)throw Error(`Fork execution is not available. Agent runtime deps may not be initialized.`);let i=await ml(e,t,n,r)??`Use the "${e.name}" skill: ${t||e.description}`,a={};return e.agent&&(a.agent=e.agent),e.allowedTools&&(a.allowedTools=e.allowedTools),{mode:`fork`,result:await n.runInFork(i,a)}}return{mode:`inject`,prompt:await hl(e,t,n,r)}}function _l(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function vl(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function yl(e,t){let n=t.trim();return n.length>0?`${e} ${n}`:e}function bl(e){if(!e?.startsWith(`/`))return;let t=e.slice(1).trim().split(/\s+/)[0];return t&&t.length>0?t:void 0}var xl=class{getSession;getSessionId;onSubmit;onApplyResult;recordSkillActivation;runSkillInFork;onForkSkill;onBlockingCommand;shellExec;commandExecutor;skillCommandSource;commandHostAdapters;commandInvocationSource=`user`;constructor(e,t,n,r,i,a,o,s,c,l,u,d){this.getSession=r,this.getSessionId=i,this.onSubmit=a,this.onApplyResult=o,this.recordSkillActivation=s,this.runSkillInFork=c,this.onForkSkill=l,this.onBlockingCommand=u,this.shellExec=d,this.commandExecutor=new Yo(e.flatMap(e=>e.systemCommands??[])),this.skillCommandSource=new Li(t),this.commandHostAdapters=n}getCommandInvocationSource(){return this.commandInvocationSource}getCommandHostAdapters(){return this.commandHostAdapters??{}}listCommands(){return this.commandExecutor.listCommands().map(e=>({name:e.name,...e.displayName===void 0?{}:{displayName:e.displayName},description:e.description,...e.example===void 0?{}:{example:e.example}}))}listSkills(){return this.skillCommandSource.getCommands().map(e=>({name:e.name,description:e.description,source:e.source,modelInvocable:e.disableModelInvocation!==!0,userInvocable:e.userInvocable!==!1,...e.argumentHint===void 0?{}:{argumentHint:e.argumentHint},...e.context===void 0?{}:{context:e.context},...e.agent===void 0?{}:{agent:e.agent}}))}listModelInvocableCommands(){return this.commandExecutor.listModelInvocableCommands().map(e=>({name:e.name,description:e.description}))}findSkillCommand(e){let t=_l(e);return this.skillCommandSource.getCommands().find(e=>e.name.toLowerCase()===t.toLowerCase())}async executeCommand(e,t){let n=vl(e),r=this.commandExecutor.getCommand(n),i=t.trim();if(!r){let e=this.findSkillCommand(n),t=this.commandExecutor.getCommand(`skills`);return!e||!t?null:this.executeCommandWithSource(`user`,t,yl(e.name,i))}return this.executeCommandWithSource(`user`,r,i)}async executeCommandWithSource(e,t,n){let r=this.commandInvocationSource;this.commandInvocationSource=e;try{return t.lifecycle===`blocking`?this.onBlockingCommand(()=>this.executeForegroundCommand(t,n)):await this.commandExecutor.executeCommand(t,this.getSession(),n)}finally{this.commandInvocationSource=r}}async executeModelCommand(e,t){let n=this.commandInvocationSource;this.commandInvocationSource=`model`;try{return await this.commandExecutor.executeModelInvocable(e,this.getSession(),t)}finally{this.commandInvocationSource=n}}async executeSkillCommandByName(e,t,n){let r=this.findSkillCommand(e);if(!r)return null;if(n.invocationSource===`model`){if(r.disableModelInvocation===!0)return{success:!1,message:`Skill is not model-invocable: ${r.name}`};let e=await this.executeSkillWithActivation(r,t,`model-tool`);return{success:!0,message:`Skill activated: ${r.name}`,data:{skill:r.name,mode:e.mode,...e.prompt===void 0?{}:{prompt:e.prompt},...e.result===void 0?{}:{result:e.result}}}}return await this.executeUserResolvedSkillCommand(r,t,n.displayInput,n.rawInput,`user-slash`),{success:!0,message:``,data:{skill:r.name,sessionExecution:!0},effects:[{type:`session-execution-started`}]}}async executeUserResolvedSkillCommand(e,t,n,r,i){if(e.userInvocable===!1)throw Error(`Skill is not user-invocable: ${e.name}`);let a=bl(r);if(e.context===`fork`)return this.onForkSkill(e,t,n,a,i);let o=await this.executeSkillWithActivation(e,t,i,a);return o.mode===`inject`?(o.prompt&&await this.onSubmit(o.prompt,n,r),o):(await this.onApplyResult(o.result??`(empty response)`),o)}async executeSkillWithActivation(e,t,n,r){this.emitSkillActivation(e,n,`started`,r);try{let i=await gl(e,t,{runInFork:(e,t)=>this.runSkillInFork(e,t),...this.shellExec?{shellExec:this.shellExec}:{}},{sessionId:this.getSessionId()});return this.emitSkillActivation(e,n,`completed`,r,{appendHistory:!1}),i}catch(t){let i=t instanceof Error?t:Error(String(t));throw this.emitSkillActivation(e,n,`failed`,r,{error:i.message}),i}}emitSkillActivation(e,t,n,r,i={}){let a=Or({skill:e,invocation:t,status:n,...r===void 0?{}:{qualifiedName:r},...i.error===void 0?{}:{error:i.error}});this.recordSkillActivation(a,i.appendHistory??n!==`completed`)}async executeForegroundCommand(e,t){try{return await this.commandExecutor.executeCommand(e,this.getSession(),t)}catch(e){return{success:!1,message:`Error: ${e instanceof Error?e.message:String(e)}`}}}};function Sl(){let e=(0,g.join)((0,_.homedir)(),`.robota`,`org-policy.json`);if(!(0,m.existsSync)(e))return null;try{let t=(0,m.readFileSync)(e,`utf8`);return JSON.parse(t)}catch{return null}}function Cl(e,t){return`${e}${t?`\nContact your administrator: ${t}`:``}`}function wl(e){return e?!e.startsWith(`$ENV:`):!1}var Tl=class extends Yt{session=null;listeners=new Map;initialized=!1;initPromise=null;sessionStore;sessionName;cwd;pendingRestoreMessages=null;resumeSessionId;forkSession;autoCompactThresholdSource=`default`;shutdownPromise=null;sandboxClient;sandboxSnapshotId;agentsFileEntries=[];claudeFileEntries=[];rebuildSystemMessage=null;providerDefinitions=[];orgPolicy=null;bgTracker;histTracker;skillRouter;execCtrl;constructor(e){super(),this.sessionStore=e.sessionStore,this.sessionName=e.sessionName,this.cwd=(`cwd`in e?e.cwd:void 0)??``,this.resumeSessionId=e.resumeSessionId,this.forkSession=e.forkSession??!1,this.sandboxClient=`sandboxClient`in e?e.sandboxClient:void 0,this.sandboxSnapshotId=`sandboxSnapshotId`in e?e.sandboxSnapshotId:void 0;let t=this.cwd,n=null;`session`in e&&e.session&&t&&(n=new z({cwd:t})),this.bgTracker=new Ft(()=>this.getBackgroundTaskManager(),(e,t)=>this.execCtrl.emitExecutionWorkspaceUpdated(e,t),e=>this.emit(`background_task_event`,e),e=>this.emit(`background_job_group_event`,e),()=>this.persistCurrentSession(),(e,t)=>this.requestWakeup(e,t),e=>this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(e)))),this.histTracker=new Mr(t,()=>this.getSessionOrThrow().getSessionId(),()=>this.execCtrl.executing,()=>this.persistCurrentSession(),e=>this.emit(`skill_activation`,e),e=>this.emit(`memory_event`,e),n);let r=[...`commandModules`in e?e.commandModules??[]:[]],i=`commandHostAdapters`in e?e.commandHostAdapters:void 0,a=`shellExec`in e?e.shellExec:void 0;this.skillRouter=new xl(r,t,i,()=>this,()=>this.session?.getSessionId()??``,(e,t,n)=>this.submit(e,t,n),e=>this.execCtrl.applyForkSkillResult(e),(e,t)=>this.histTracker.recordSkillActivationEvent(e,t),(e,t)=>ur(e,t,this.getSessionOrThrow()),(e,t,n,r,i)=>this.execCtrl.executeForkSkillCommand(e,t,n,r,i,(e,t,n)=>this.submit(e,t,n)),e=>this.execCtrl.executeForegroundCommand(e,(e,t,n)=>this.submit(e,t,n)),a),this.execCtrl=new cr(this.histTracker,this.skillRouter,{getSession:()=>this.session,getSessionOrThrow:()=>this.getSessionOrThrow(),getCwd:()=>this.getCwd(),getContextState:()=>this.getContextState(),getExecutionWorkspaceSnapshot:()=>this.getExecutionWorkspaceSnapshot(),emit:(e,...t)=>this.emit(e,...t),persistSession:()=>this.persistCurrentSession()}),`providerDefinitions`in e&&(this.providerDefinitions=e.providerDefinitions??[]),`orgPolicy`in e&&(this.orgPolicy=e.orgPolicy??null);let o=this.configureInjectedSession(e);this.restoreSessionRecordIfNeeded(e),this.startAsyncInitializationIfNeeded(e,o),this.initialized&&this.bgTracker.subscribe(this.session),this.initialized&&this.persistCurrentSession()}configureInjectedSession(e){return`session`in e&&e.session?(this.session=e.session,this.autoCompactThresholdSource=`session`,this.initialized=!0,!0):!1}restoreSessionRecordIfNeeded(e){if(!e.resumeSessionId||!this.sessionStore)return;let t=Lr(this.sessionStore,e.resumeSessionId,this.session);this.histTracker.restoreState({history:t.history,memoryEvents:t.memoryEvents,usedMemoryReferences:t.usedMemoryReferences,contextReferences:t.contextReferences,skillActivationEvents:t.skillActivationEvents}),t.sessionName&&(this.sessionName=t.sessionName),this.bgTracker.restoreState({tasks:t.backgroundTasks,taskEvents:t.backgroundTaskEvents,groups:t.backgroundJobGroups,groupEvents:t.backgroundJobGroupEvents}),this.pendingRestoreMessages=t.pendingRestoreMessages,this.sandboxSnapshotId=this.forkSession?void 0:t.sandboxSnapshotId,this.session&&t.pendingRestoreMessages===null&&(this.session.syncContextFromHistory(),this.emit(`context_update`,this.getContextState()))}startAsyncInitializationIfNeeded(e,t){if(t)return;let n=e;this.initPromise=this.initializeAsync(n)}async initializeAsync(e){let t=await zo(e,{sandboxSnapshotId:this.sandboxSnapshotId,resumeSessionId:this.resumeSessionId,pendingRestoreMessages:this.pendingRestoreMessages,onTextDelta:e=>this.execCtrl.handleTextDelta(e),onContextUpdate:e=>this.emit(`context_update`,e),onCompactEvent:e=>this.execCtrl.handleCompactEvent(e),onToolExecution:e=>this.execCtrl.handleToolExecution(e),executeModelCommand:(e,t)=>this.executeModelCommand(e,t),isModelCommandInvocable:e=>this.skillRouter.commandExecutor.isModelInvocable(e),commandDescriptors:this.skillRouter.commandExecutor.listModelInvocableCommands(),setEditCheckpointStore:e=>this.histTracker.setEditCheckpointStore(e)});this.session=t.session,this.agentsFileEntries=t.agentsFileEntries,this.claudeFileEntries=t.claudeFileEntries,this.rebuildSystemMessage=t.rebuildSystemMessage,this.autoCompactThresholdSource=t.autoCompactThresholdSource,this.histTracker.recordSystemContextFiles([...t.agentsFileEntries,...t.claudeFileEntries]),this.pendingRestoreMessages=null,this.initialized=!0,this.bgTracker.subscribe(this.session),this.persistCurrentSession(),this.emit(`context_update`,this.getContextState())}async ensureInitialized(){!this.initialized&&this.initPromise&&await this.initPromise}getSessionOrThrow(){if(!this.session)throw Error(`InteractiveSession not initialized. Call submit() or await initialization.`);return this.session}getCwd(){if(!this.cwd)throw Error(`cwd is not set — provide cwd in session options`);return this.cwd}get sessionId(){return this.session?.getSessionId()??``}on(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t)}off(e,t){this.listeners.get(e)?.delete(t)}emit(e,...t){let n=this.listeners.get(e);if(n)for(let e of n)e(...t)}async submit(e,t,n,r={}){if(await this.ensureInitialized(),this.execCtrl.shuttingDown)throw Error(`Interactive session is shutting down.`);if(this.execCtrl.executing){this.execCtrl.pendingPrompt=e,this.execCtrl.pendingDisplayInput=t,this.execCtrl.pendingRawInput=n,this.execCtrl.pendingTurnOptions=r;return}await this.execCtrl.executePrompt(e,t,n,this.agentsFileEntries,this.claudeFileEntries,this.rebuildSystemMessage,(e,t)=>{this.agentsFileEntries=e,this.claudeFileEntries=t,this.histTracker.recordSystemContextFiles([...e,...t])},(e,t,n,r)=>this.submit(e,t,n,r),r)}requestWakeup(e,t){this.execCtrl.shuttingDown||this.execCtrl.wakeTaskIds.has(t)||(this.execCtrl.wakeTaskIds.add(t),this.submit(e,void 0,void 0,{turnSource:`agent-wakeup`,wakeTaskId:t}))}abort(){this.execCtrl.clearPendingQueue(),this.session?.abort()}shutdown(e={}){return this.shutdownPromise?this.shutdownPromise:(this.execCtrl.shuttingDown=!0,this.shutdownPromise=(async()=>{await this.ensureInitialized(),this.execCtrl.clearPendingQueue();let t=this.session;t?.abort(),await this.getBackgroundTaskManager()?.shutdown(e.message??`Session shutdown`),this.bgTracker.dispose(),await this.captureSandboxSnapshot(),this.persistCurrentSession(),await t?.shutdown({reason:e.reason??`other`}),this.listeners.clear()})(),this.shutdownPromise)}get isInitialized(){return this.initialized}getAutoCompactThresholdSource(){return this.autoCompactThresholdSource}getAutoCompactThreshold(){return this.getSessionOrThrow().getAutoCompactThreshold()}getSession(){return this.getSessionOrThrow()}getAgentJobCapability(){return this}setAutoCompactThreshold(e,t=`session`){this.getSessionOrThrow().setAutoCompactThreshold(e),this.autoCompactThresholdSource=t,this.emit(`context_update`,this.getContextState()),this.persistCurrentSession()}clearConversationHistory(){this.getSessionOrThrow().clearHistory(),this.histTracker.clearHistory(),this.persistCurrentSession(),this.emit(`context_update`,this.getContextState())}getName(){return this.sessionName}attachTransport(e){e.attach(this)}setName(e){if(this.sessionName=e,this.sessionStore&&this.session)try{let t=this.getSessionOrThrow().getSessionId(),n=this.sessionStore.load(t);n&&(n.name=e,n.updatedAt=new Date().toISOString(),this.sessionStore.save(n))}catch{}}getBackgroundTaskManager(){if(this.session)return Re(this.session)??j(this.session)?.backgroundTaskManager}async captureSandboxSnapshot(){if(this.sandboxClient?.snapshot)try{this.sandboxSnapshotId=await this.sandboxClient.snapshot()}catch(e){let t=e instanceof Error?e:Error(String(e));this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Sandbox snapshot error: ${t.message}`))),this.emit(`error`,t)}}persistCurrentSession(){if(!this.sessionStore||!this.session)return;let e=this.bgTracker.getState(),t=this.histTracker.getState();Bo(this.sessionStore,this.session,this.sessionName,this.cwd??``,t.history,{tasks:e.tasks,events:e.taskEvents,groups:e.groups,groupEvents:e.groupEvents},{events:t.memoryEvents,usedReferences:t.usedMemoryReferences},{events:t.skillActivationEvents},{references:t.contextReferences},{snapshotId:this.sandboxSnapshotId})}async switchProvider(e){let t=this.getSessionOrThrow(),n=this.getCwd(),r=Ls(n,{providerOverride:e,providerDefinitions:this.providerDefinitions}),i=Rs(n,void 0,{providerOverride:e,providerDefinitions:this.providerDefinitions});t.swapProvider(i,r.model)}async executeCommand(e,t){if(this.orgPolicy?.blockedCommands?.includes(e))return{message:Cl(`Command /${e} is blocked by your organization policy.`,this.orgPolicy.adminContact),success:!1};let n=await super.executeCommand(e,t);if(n===null)return null;let r=n.effects?.find(e=>e.type===`provider-hot-swap-requested`);if(r){let{orgPolicy:e}=this;return e?.allowedProviders&&!e.allowedProviders.includes(r.profileName)?{message:Cl(`Provider "${r.profileName}" is not allowed by your organization policy. Allowed: ${e.allowedProviders.join(`, `)}.`,e.adminContact),success:!1}:(await this.switchProvider(r.profileName),{...n,effects:n.effects?.filter(e=>e.type!==`provider-hot-swap-requested`)})}return n}};function El(e,t=new N){let n=R(e);return new Al(n.sessions,n.logs,t)}function Dl(e,t){return(e?.list()??[]).filter(e=>e.cwd===t).sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()).map(e=>({id:e.id,...e.name===void 0?{}:{name:e.name},cwd:e.cwd,updatedAt:e.updatedAt,messageCount:e.messages.length,preview:jl(e.messages)}))}function Ol(e,t){return Dl(e,t)[0]?.id}function kl(e,t){return(e?.list()??[]).find(e=>e.id===t||e.name===t)?.id}var Al=class{store;logsDir;fs;constructor(e,t,n=new N){this.store=new f.SessionStore(e),this.logsDir=t,this.fs=n}save(e){this.store.save(Ml(e))}load(e){let t=this.store.load(e);return t===void 0?this.loadFromReplayLog(e):Nl(t)}list(){let e=this.store.list().map(Nl),t=new Set(e.map(e=>e.id));for(let n of this.listReplayLogRecords())t.has(n.id)||e.push(n);return e.sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime())}delete(e){this.store.delete(e)}loadFromReplayLog(e){if(!this.logsDir)return;let t=(0,f.replaySessionLogEntries)((0,f.loadSessionLogEntries)((0,g.join)(this.logsDir,`${e}.jsonl`)));if(!t.sessionId||t.messages.length===0)return;let n=t.backgroundTaskEvents,r=t.backgroundJobGroupEvents;return{id:t.sessionId,cwd:t.cwd??``,createdAt:t.createdAt??t.updatedAt??new Date(0).toISOString(),updatedAt:t.updatedAt??t.createdAt??new Date(0).toISOString(),messages:t.messages,history:t.history,backgroundTasks:Pl(n),backgroundTaskEvents:n,backgroundJobGroups:Il(r),backgroundJobGroupEvents:r,skillActivationEvents:[],memoryEvents:t.memoryEvents}}listReplayLogRecords(){return!this.logsDir||!this.fs.existsSync(this.logsDir)?[]:this.fs.readdirSync(this.logsDir).filter(e=>e.endsWith(`.jsonl`)).map(e=>this.loadFromReplayLog(e.slice(0,-6))).filter(e=>e!==void 0)}};function jl(e){for(let t of[...e].reverse())if(t.role===`assistant`&&typeof t.content==`string`)return t.content.replace(/[\n\r]+/g,` `).trim();return``}function Ml(e){return{...e}}function Nl(e){return{id:e.id,...e.name===void 0?{}:{name:e.name},cwd:e.cwd,createdAt:e.createdAt,updatedAt:e.updatedAt,messages:e.messages,...e.history===void 0?{}:{history:e.history},...e.systemPrompt===void 0?{}:{systemPrompt:e.systemPrompt},...e.toolSchemas===void 0?{}:{toolSchemas:e.toolSchemas},...e.backgroundTasks===void 0?{}:{backgroundTasks:e.backgroundTasks},...e.backgroundTaskEvents===void 0?{}:{backgroundTaskEvents:e.backgroundTaskEvents},...e.backgroundJobGroups===void 0?{}:{backgroundJobGroups:e.backgroundJobGroups},...e.backgroundJobGroupEvents===void 0?{}:{backgroundJobGroupEvents:e.backgroundJobGroupEvents},...e.skillActivationEvents===void 0?{}:{skillActivationEvents:e.skillActivationEvents},...e.memoryEvents===void 0?{}:{memoryEvents:e.memoryEvents},...e.usedMemoryReferences===void 0?{}:{usedMemoryReferences:e.usedMemoryReferences},...e.contextReferences===void 0?{}:{contextReferences:e.contextReferences},...e.sandboxSnapshotId===void 0?{}:{sandboxSnapshotId:e.sandboxSnapshotId}}}function Pl(e){let t=new Map;for(let n of e){let e=Fl(n);e&&t.set(e.id,e)}return[...t.values()]}function Fl(e){switch(e.type){case`background_task_created`:case`background_task_started`:case`background_task_updated`:case`background_task_completed`:case`background_task_failed`:case`background_task_cancelled`:return e.task;default:return}}function Il(e){let t=new Map;for(let n of e)t.set(n.group.id,n.group);return[...t.values()]}function Ll(e){let t=new Tl({cwd:e.cwd??process.cwd(),provider:e.provider,permissionMode:e.permissionMode??`bypassPermissions`,maxTurns:e.maxTurns,permissionHandler:e.permissionHandler,additionalTools:e.additionalTools,...e.responseFormat?{responseFormat:e.responseFormat}:{}});return e.onTextDelta&&t.on(`text_delta`,e.onTextDelta),async e=>new Promise((n,r)=>{let i=e=>{s(),n(e.response)},a=e=>{s(),n(e.response)},o=e=>{s(),r(e)},s=()=>{t.off(`complete`,i),t.off(`interrupted`,a),t.off(`error`,o)};t.on(`complete`,i),t.on(`interrupted`,a),t.on(`error`,o),t.submit(e).catch(e=>{s(),r(e instanceof Error?e:Error(String(e)))})})}const Rl=[`preferences`,`view-state`,`memory-projections`,`task-associations`,`workflow-metadata`,`inspection-index`],zl=[{category:`preferences`,purpose:`User-local UI and display preferences.`,mayExecuteCommands:!1},{category:`view-state`,purpose:`Last selected panels, filters, and navigation state.`,mayExecuteCommands:!1},{category:`memory-projections`,purpose:`Inspectable local memory item projections and user choices.`,mayExecuteCommands:!1},{category:`task-associations`,purpose:`User-local associations between sessions, tasks, and background items.`,mayExecuteCommands:!1},{category:`workflow-metadata`,purpose:`Transparent workflow metadata that is not repo-owned.`,mayExecuteCommands:!1},{category:`inspection-index`,purpose:`Category and item summaries for user inspection and deletion.`,mayExecuteCommands:!1}];function Bl(e){return e.toISOString()}function Vl(e,t){if(t.trim().length===0)throw Error(`${e} must not be empty.`);if(!g.default.isAbsolute(t))throw Error(`${e} must be an absolute path: ${t}`)}function Hl(){return process.env.HOME??(0,_.homedir)()}function Ul(e,t){let n=g.default.relative(e,t);return n===``||!n.startsWith(`..`)&&!g.default.isAbsolute(n)}async function Wl(e,t){let n=e;for(;g.default.dirname(n)!==n;)try{let r=await t.realpath(n),i=g.default.relative(n,e);return g.default.resolve(r,i)}catch{n=g.default.dirname(n)}try{return await t.realpath(n)}catch{return g.default.resolve(e)}}async function Gl(e){let t=e.fsAsync??new P,n=g.default.resolve(e.activeRepositoryRoot);Vl(`activeRepositoryRoot`,n);let r=e.storageRoot===void 0?g.default.join(e.homeDir??Hl(),`.robota`):e.storageRoot;Vl(`userLocalStorageRoot`,r);let i=g.default.resolve(r),a=await Wl(i,t);if(Ul(await Wl(n,t),a))throw Error(`User-local storage root must be outside the active repository: ${i}`);return i}function Kl(e,t){return g.default.join(e,t)}async function ql(e,t,n){let r=Kl(e,t),i;try{i=await n.readdir(r,{withFileTypes:!0})}catch{return[]}return(await Promise.all(i.map(async i=>{let a=g.default.join(r,i.name),o=await n.stat(a),s=i.name;return{root:e,category:t,key:s,summary:`${t}/${s}`,source:`user-local-storage`,scope:`user`,storageLocation:a,createdAt:Bl(new Date(o.birthtimeMs)),lastUsedAt:Bl(new Date(o.mtimeMs)),enabled:!0,deleteAvailable:!0,disableAvailable:!1}}))).sort((e,t)=>e.key.localeCompare(t.key))}async function Jl(e){let t=e.fsAsync??new P,n=await Gl(e),r=g.default.resolve(e.activeRepositoryRoot),i=e.createDirectories??!0;return i&&await t.mkdir(n,{recursive:!0}),{root:n,activeRepositoryRoot:r,categories:await Promise.all(zl.map(async e=>{let r=Kl(n,e.category);i&&await t.mkdir(r,{recursive:!0});let a=await ql(n,e.category,t);return{category:e.category,purpose:e.purpose,mayExecuteCommands:e.mayExecuteCommands,storageLocation:r,itemCount:a.length,items:a}})),generatedAt:Bl((e.now??(()=>new Date))())}}const Yl=[`view-preference`,`last-visible-cwd`,`background-selection`,`task-association`,`display-preference`,`inspection-choice`],Xl=`.json`,Zl=/^[a-z0-9][a-z0-9._-]*$/u,Ql={"view-preference":`May affect UI panel, filter, density, or sorting display/navigation only.`,"last-visible-cwd":`May display or preselect an already visible workspace context only.`,"background-selection":`May restore the selected background entry in local UI only.`,"task-association":`May group visible tasks by a local association only.`,"display-preference":`May affect local text wrapping, compactness, or visibility only.`,"inspection-choice":`May affect inspection display choices only.`};function $l(e){return e.toISOString()}function eu(e){return Yl.includes(e)}function tu(e){if(!eu(e))throw Error(`Unsupported user-local memory category: ${e}`);return e}function nu(e,t){let n=t.trim();if(n.length===0)throw Error(`${e} must not be empty.`);if(n.length>80||!Zl.test(n))throw Error(`${e} must use lowercase letters, numbers, dots, underscores, or hyphens: ${t}`);return n}function ru(e,t,n){let r=t.trim().replace(/\s+/g,` `);if(r.length===0)throw Error(`${e} must not be empty.`);return r.length>n?r.slice(0,n):r}function iu(e){return ru(`value`,e,240)}function au(e,t){return`${e}__${t}${Xl}`}async function ou(e){let t=await Gl(e);return{root:t,memoryRoot:g.default.join(t,`memory-projections`)}}function su(e,t){let n=JSON.parse(e),r=Z(n,`category`);if(n.schemaVersion!==1)throw Error(`Unsupported user-local memory schema at ${t}`);return{schemaVersion:1,category:tu(r),key:Z(n,`key`),value:Z(n,`value`),summary:Z(n,`summary`),source:Z(n,`source`),scope:Z(n,`scope`),createdAt:Z(n,`createdAt`),lastUsedAt:Z(n,`lastUsedAt`),enabled:cu(n,`enabled`)}}function Z(e,t){let n=e[t];if(typeof n!=`string`)throw Error(`Invalid user-local memory field: ${t}`);return n}function cu(e,t){let n=e[t];if(typeof n!=`boolean`)throw Error(`Invalid user-local memory field: ${t}`);return n}function lu(e,t,n){return{root:e,category:n.category,key:n.key,summary:n.summary,valueSummary:iu(n.value),source:n.source,scope:n.scope,storageLocation:t,createdAt:n.createdAt,lastUsedAt:n.lastUsedAt,enabled:n.enabled,displayNavigationRule:Ql[n.category],commandExecutionEffect:`none`,deleteAvailable:!0,disableAvailable:!0}}async function uu(e,t,n){return lu(e,t,su(await n.readFile(t,`utf8`),t))}async function du(e){let t=tu(e.category),n=nu(`key`,e.key),{root:r,memoryRoot:i}=await ou(e);return{root:r,storageLocation:g.default.join(i,au(t,n))}}async function fu(e){let t=e.fsAsync??new P,n=tu(e.category),r=nu(`key`,e.key),i=ru(`summary`,e.summary,240),a=ru(`source`,e.source,80),o=ru(`scope`,e.scope??`user`,120),s=iu(e.value),c=$l((e.now??(()=>new Date))()),{root:l,memoryRoot:u}=await ou(e),d=g.default.join(u,au(n,r)),f=c;try{f=su(await t.readFile(d,`utf8`),d).createdAt}catch(e){if(e instanceof Error&&e.message.includes(`ENOENT`))f=c;else throw e}let p={schemaVersion:1,category:n,key:r,value:s,summary:i,source:a,scope:o,createdAt:f,lastUsedAt:c,enabled:!0};return await t.mkdir(u,{recursive:!0}),await t.writeFile(d,`${JSON.stringify(p,null,2)}\n`,`utf8`),lu(l,d,p)}async function pu(e){let t=e.fsAsync??new P,{root:n,memoryRoot:r}=await ou(e),i;try{i=await t.readdir(r,{withFileTypes:!0})}catch{i=[]}let a=await Promise.all(i.filter(e=>e.isFile()&&e.name.endsWith(Xl)).map(e=>uu(n,g.default.join(r,e.name),t)));return{root:n,activeRepositoryRoot:g.default.resolve(e.activeRepositoryRoot),items:a.sort((e,t)=>`${e.category}/${e.key}`.localeCompare(`${t.category}/${t.key}`))}}async function mu(e){let t=e.fsAsync??new P,{root:n,storageLocation:r}=await du(e);return uu(n,r,t)}async function hu(e){let t=e.fsAsync??new P,{root:n,storageLocation:r}=await du(e),i={...su(await t.readFile(r,`utf8`),r),enabled:!1,lastUsedAt:$l((e.now??(()=>new Date))())};return await t.writeFile(r,`${JSON.stringify(i,null,2)}\n`,`utf8`),lu(n,r,i)}async function gu(e){let t=e.fsAsync??new P,{storageLocation:n}=await du(e);return await t.rm(n),{category:e.category,key:e.key,deleted:!0}}async function _u(e){let t=await mu(e);return t.enabled?t:null}const vu=[`test`,`typecheck`,`build`],yu={idle:{checkpoint_created:`checkpointed`,cancelled:`cancelled`},checkpointed:{edits_started:`editing`,cancelled:`cancelled`},editing:{edits_applied:`verifying`,verify_failed:`failed`,cancelled:`cancelled`},verifying:{verify_passed:`passed`,verify_failed:`failed`,cancelled:`cancelled`},passed:{},failed:{rollback_completed:`rolled_back`,cancelled:`cancelled`},rolled_back:{},cancelled:{}};function bu(e){return e?Array.from(new Set(e.map(e=>e.trim()).filter(Boolean))):[]}function xu(e){return e.flatMap(e=>vu.map(t=>({id:`package-${t}:${e}`,phase:`verify`,description:`Run ${t} for ${e} in a child process against the new on-disk tree.`,required:!0,command:`pnpm --filter ${e} ${t}`})))}function Su(){return[{id:`checkpoint`,phase:`checkpoint`,description:`Create a recoverable turn-level checkpoint before the first mutation.`,required:!0},{id:`atomic-edit`,phase:`edit`,description:`Apply Write/Edit mutations through same-directory temp files and atomic rename.`,required:!0},{id:`handoff`,phase:`handoff`,description:`Keep the current process on already-loaded code and run verification child processes against disk.`,required:!0}]}function Cu(e){return{id:`harness-verify`,phase:`verify`,description:`Run Robota harness verification as the local CI-like gate.`,required:!0,command:`pnpm harness:verify -- --base-ref ${e} --skip-record-check`}}function wu(){return{id:`rollback-on-failure`,phase:`recover`,description:`Use the existing edit checkpoint restore path if verification fails.`,required:!0}}function Tu(e){if(e.changedFiles.length===0)throw Error(`Self-hosting verification requires at least one changed file.`);let t=e.baseRef??`origin/develop`,n=bu(e.packageScopes),r=[...Su(),...xu(n),Cu(t),wu()];return{changedFiles:[...e.changedFiles],packageScopes:n,baseRef:t,steps:r}}function Eu(e,t){let n=yu[e][t];if(!n)throw Error(`Invalid self-hosting loop transition: ${e} -> ${t}`);return n}function Du(e){return e}function Ou(e){if(!e||e.length===0)return;let[t,...n]=e;if(t!==void 0)return[t,...n]}function ku(e){let t=Ou(e),n=t===void 0?d.z.string().describe(`Registered model-invocable command name to execute`):d.z.enum(t).describe(`Registered model-invocable command name to execute`);return d.z.object({command:n,args:d.z.string().optional().describe(`Arguments to pass to the command`)})}function Au(e){if(e.commandNames!==void 0)return e.commandNames;if(e.commandDescriptors!==void 0)return e.commandDescriptors.map(e=>A(e.name))}function ju(e){return`- ${A(e.name)}${e.argumentHint?` ${e.argumentHint}`:``}: ${e.description}`}function Mu(e){let t=`Executes a registered model-invocable Robota command through the command registry. Accepted command names and argument grammar come from registered command descriptors.`;return e===void 0||e.length===0?t:[t,`Use the registered command descriptors below as the authority for when to call this tool.`,``,`Registered model-invocable commands:`,...e.map(ju)].join(`
101
- `)}function Nu(e){let t=ku(Au(e));return(0,u.createZodFunctionTool)(`ExecuteCommand`,Mu(e.commandDescriptors),Du(t),async n=>{let r=t.parse(n),i=A(r.command);return e.isModelInvocable(i)?ut(i,await e.execute(i,r.args??``)):JSON.stringify({success:!1,command:i,error:`Command is not model-invocable: ${i}`})})}function Pu(e){return/^\/\S/.test(e)}function Fu(e){let t=e.slice(1).trim().split(/\s+/);return{name:t[0]??``,args:t.slice(1).filter(e=>e.length>0)}}function Iu(e){if(!Pu(e))return{type:`user-message`,text:e};let{name:t,args:n}=Fu(e);return{type:`slash-command`,name:t,args:n}}function Lu(e,t){return t.type===`pick`?{type:`pick`,id:e,title:`/${e}`,items:t.getItems()}:{type:`confirm`,id:e,message:t.message}}function Ru(e,t){return t.type===`cancelled`?null:e.type===`pick`&&t.type===`pick`?[t.item.value]:e.type===`confirm`&&t.type===`confirm`?[]:null}function zu(e){return e.map(e=>({name:e.name,description:e.description}))}function Bu(e,t){let n=``,r=e=>{n+=e,t.write({type:`assistant-chunk`,chunk:e})},i=()=>{t.write({type:`assistant-done`,fullText:n}),n=``,t.setBusy(!1)},a=e=>{t.write({type:`tool-call`,id:e.executionId??e.toolName,name:e.toolName,args:e.firstArg})},o=e=>{t.write({type:`tool-result`,id:e.executionId??e.toolName,name:e.toolName,result:e.toolResultData??e.result})},s=e=>{t.setBusy(!1),t.write({type:`error`,error:e})},c=()=>{t.setBusy(!1)};return e.on(`text_delta`,r),e.on(`complete`,i),e.on(`tool_start`,a),e.on(`tool_end`,o),e.on(`error`,s),e.on(`interrupted`,c),()=>{e.off(`text_delta`,r),e.off(`complete`,i),e.off(`tool_start`,a),e.off(`tool_end`,o),e.off(`error`,s),e.off(`interrupted`,c)}}function Vu(e){let{channel:t,commandModules:n,_testSession:r}=e,i=null,a=null,o={};for(let e of n)e.interactionHints&&Object.assign(o,e.interactionHints);async function s(e){if(!i)return;let n=Iu(e);if(n.type===`user-message`){t.write({type:`user-message`,text:e}),t.setBusy(!0),await i.submit(e);return}let{name:r,args:a}=n,s=o[r],c=a;if(s&&a.length===0){let e=Ru(s,await t.requestAction(Lu(r,s)));if(e===null)return;c=e}let l=await i.executeCommand(r,c.join(` `));l?t.write({type:`command-result`,name:r,output:l.message}):t.write({type:`error`,error:Error(`Unknown command "/${r}". Type /help for help.`)})}return{async start(){if(r)i=r;else{let{provider:t,cwd:r,sessionStore:a}=e;if(!t)throw Error(`createInteractiveRuntime: provider is required`);if(!r)throw Error(`createInteractiveRuntime: cwd is required`);i=new Tl({provider:t,cwd:r,sessionStore:a,commandModules:n})}a=Bu(i,t);let o=i.listCommands();t.setAvailableCommands(zu(o)),t.onSubmit(s),await t.start()},async stop(){a?.(),await t.stop(),await i?.shutdown(),i=null}}}const Hu=[`Allow once`,`Allow for this session`,`Deny`];function Uu(e){let t=Object.entries(e);return t.length===0?`(no arguments)`:t.map(([e,t])=>`${e}: ${typeof t==`string`?t:JSON.stringify(t)}`).join(`, `)}async function Wu(e,t,n){e.writeLine(``),e.writeError(`[Permission Required] Tool: ${t}`),e.writeLine(` ${Uu(n)}`),e.writeLine(``);let r=await e.select(Hu,0);return r===1?`allow-session`:r===0}const Gu={usedTokens:0,maxTokens:2e5,usedPercentage:0,remainingPercentage:100},Ku={sessionId:`test-session-id`,updatedAt:new Date().toISOString(),entries:[]},qu={id:``,parentSessionId:`test-session-id`,waitPolicy:`wait_all`,taskIds:[],status:`completed`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),results:[]};function Ju(e){return{submit:()=>Promise.resolve(),abort:()=>{},cancelQueue:()=>{},shutdown:()=>Promise.resolve(),isExecuting:()=>!1,getPendingPrompt:()=>null,getMessages:()=>[],getContextState:()=>({...Gu}),getSession:()=>({getSessionId:()=>`test-session-id`}),getCwd:()=>`/workspace`,executeCommand:()=>Promise.resolve(null),listCommands:()=>[],on:()=>{},off:()=>{},listBackgroundTasks:()=>[],getBackgroundTask:()=>void 0,cancelBackgroundTask:()=>Promise.resolve(),closeBackgroundTask:()=>Promise.resolve(),sendBackgroundTask:()=>Promise.resolve(),readBackgroundTaskLog:()=>Promise.resolve({taskId:``,lines:[]}),listBackgroundJobGroups:()=>[],getBackgroundJobGroup:()=>void 0,createBackgroundJobGroup:()=>({...qu}),waitBackgroundJobGroup:()=>Promise.resolve({...qu}),getExecutionWorkspaceSnapshot:()=>({...Ku}),listAgentDefinitions:()=>[],listAgentJobs:()=>[],spawnAgentJob:()=>Promise.resolve({id:`agent_1`,type:`general-purpose`,label:`general-purpose`,parentSessionId:`test-session-id`,status:`running`,mode:`background`,depth:1,cwd:`/workspace`,promptPreview:``,updatedAt:new Date().toISOString()}),sendAgentJob:()=>Promise.resolve(),cancelAgentJob:()=>Promise.resolve(),closeAgentJob:()=>Promise.resolve(),...e}}function Yu(){let e=zi();return{deleted:Ui(e),path:e}}function Xu(e){try{let t=Zu(e);if(!t)return;let n=(0,m.readFileSync)((0,g.join)(t,`HEAD`),`utf8`).trim();if(!n)return;if(n.startsWith(`ref: `)){let e=n.slice(5).trim();return e.startsWith(`refs/heads/`)?e.slice(11):e}return n.slice(0,7)}catch{return}}function Zu(e){let t=(0,g.resolve)(e),n=(0,g.dirname)(t);for(;n!==t;){let e=Qu((0,g.join)(t,`.git`),t);if(e)return e;t=n,n=(0,g.dirname)(t)}return Qu((0,g.join)(t,`.git`),t)}function Qu(e,t){if(!(0,m.existsSync)(e))return;let n=(0,m.lstatSync)(e);if(n.isDirectory())return e;if(!n.isFile())return;let r=(0,m.readFileSync)(e,`utf8`).trim();if(!r.startsWith(`gitdir:`))return;let i=r.slice(7).trim();return(0,g.isAbsolute)(i)?i:(0,g.resolve)(t,i)}function $u(e,t){let n=td(e),r=td(t);if(n===void 0||r===void 0)return Math.sign(e.localeCompare(t));let i=$(n.major,r.major)||$(n.minor,r.minor)||$(n.patch,r.patch);return i===0?nd(n.prerelease,r.prerelease):i}function ed(e,t){return $u(e,t)>0}function td(e){let[t,n]=(e.trim().replace(/^v/,``).split(`+`)[0]??``).split(`-`,2),[r,i,a]=t.split(`.`),o=Q(r),s=Q(i),c=Q(a);if(!(o===void 0||s===void 0||c===void 0))return{major:o,minor:s,patch:c,prerelease:n?n.split(`.`):[]}}function Q(e){if(!(e===void 0||!/^\d+$/.test(e)))return Number(e)}function $(e,t){return Math.sign(e-t)}function nd(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return 1;if(t.length===0)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(n===void 0)return-1;if(i===void 0)return 1;let a=rd(n,i);if(a!==0)return a}return 0}function rd(e,t){let n=Q(e),r=Q(t);return n!==void 0&&r!==void 0?$(n,r):n===void 0?r===void 0?Math.sign(e.localeCompare(t)):1:-1}function id(e){let t=(0,g.dirname)((0,ee.fileURLToPath)(e)),n=[(0,g.join)(t,`..`,`..`,`package.json`),(0,g.join)(t,`..`,`package.json`)];for(let e of n)try{let t=(0,m.readFileSync)(e,`utf-8`),n=JSON.parse(t);if(n.version!==void 0&&n.name!==void 0)return n.version}catch{continue}return`0.0.0`}function ad(e=process.env.HOME??process.env.USERPROFILE??`/`){return(0,g.join)(e,`.robota`,`update-check.json`)}function od(e){if((0,m.existsSync)(e))try{return xd(JSON.parse((0,m.readFileSync)(e,`utf8`)))}catch{return}}function sd(e,t){(0,m.mkdirSync)((0,g.dirname)(e),{recursive:!0}),(0,m.writeFileSync)(e,JSON.stringify(t,null,2)+`
102
- `,`utf8`)}async function cd(e){if(e.disabled===!0)return{status:`skipped`,reason:`disabled`};let t=e.packageName??`@robota-sdk/agent-cli`,n=e.cachePath??ad(),r=e.now??new Date,i=e.ttlMs??864e5;if(e.force!==!0){let a=od(n);if(a!==void 0&&_d(a,r,i,t))return hd(a,e.currentVersion)}let a=await ld(e,t,n,r);return typeof a==`string`?gd(e.currentVersion,a):a}async function ld(e,t,n,r){let i=await vd({fetchImpl:e.fetchImpl??fetch,packageName:t,registryUrl:e.registryUrl??`https://registry.npmjs.org`,timeoutMs:e.timeoutMs??1500});return i.ok?(ud(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,latestVersion:i.version}),i.version):(ud(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,errorMessage:i.errorMessage}),{status:`error`,errorMessage:i.errorMessage})}function ud(e,t){try{sd(e,t)}catch{}}async function dd(e){let t=await cd(e);return t.status===`update_available`?t.notice:void 0}function fd(e){return e.printMode===!1&&e.disableUpdateCheck===!1}function pd(e){return[`Robota update available: ${e.currentVersion} -> ${e.latestVersion}.`,`Run ${e.installCommand}`].join(` `)}function md(e){return e.status===`update_available`?pd(e.notice):e.status===`current`?`Robota is up to date (${e.currentVersion}).`:e.status===`skipped`?`Robota update check skipped.`:`Robota update check failed: ${e.errorMessage}`}function hd(e,t){return e.errorMessage===void 0?e.latestVersion===void 0?{status:`error`,errorMessage:`Cached update check has no latest version`}:gd(t,e.latestVersion):{status:`error`,errorMessage:e.errorMessage}}function gd(e,t){return ed(t,e)?{status:`update_available`,notice:{currentVersion:e,latestVersion:t,installCommand:`npm install -g '@robota-sdk/agent-cli@latest'`}}:{status:`current`,currentVersion:e,latestVersion:t}}function _d(e,t,n,r){if(e.packageName!==r)return!1;let i=Date.parse(e.checkedAt);return Number.isFinite(i)?t.getTime()-i<n:!1}async function vd(e){try{return{ok:!0,version:await yd(e)}}catch(e){return{ok:!1,errorMessage:e instanceof Error?e.message:String(e)}}}async function yd(e){let t=new AbortController,n=setTimeout(()=>t.abort(),e.timeoutMs);try{let n=bd(e.registryUrl,e.packageName),r=await e.fetchImpl(n,{headers:{accept:`application/json`},signal:t.signal});if(!r.ok)throw Error(`registry responded with HTTP ${r.status}`);let i=(await r.json())[`dist-tags`]?.latest;if(typeof i!=`string`||i.trim().length===0)throw Error(`registry metadata is missing dist-tags.latest`);return i}finally{clearTimeout(n)}}function bd(e,t){return`${e.replace(/\/+$/,``)}/${encodeURIComponent(t)}`}function xd(e){if(!Sd(e))return;let t=e;if(typeof t.packageName==`string`&&typeof t.checkedAt==`string`&&typeof t.currentVersion==`string`&&(t.latestVersion===void 0||typeof t.latestVersion==`string`)&&(t.errorMessage===void 0||typeof t.errorMessage==`string`))return{packageName:t.packageName,checkedAt:t.checkedAt,currentVersion:t.currentVersion,...t.latestVersion!==void 0&&{latestVersion:t.latestVersion},...t.errorMessage!==void 0&&{errorMessage:t.errorMessage}}}function Sd(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Cd(e){let t=zi(),n={settings:{read:()=>W(t),write:e=>G(t,e)}},r=e.backgroundTaskRunners??(0,l.createDefaultBackgroundTaskRunners)(),i=e.commandModules??[],a=e.commandHostAdapters??n,o=`sessionStore`in e?e.sessionStore:El(e.cwd);return{cwd:e.cwd,provider:e.provider,commandModules:i,commandHostAdapters:a,backgroundTaskRunners:r,subagentRunnerFactory:e.subagentRunnerFactory,sessionStore:o,transportRegistry:e.transportRegistry,reloadPluginCommandSource:e.reloadPluginCommandSource??(()=>{}),createSession(t){return new Tl({cwd:e.cwd,provider:e.provider,backgroundTaskRunners:r,subagentRunnerFactory:e.subagentRunnerFactory,commandModules:i,commandHostAdapters:a,permissionMode:t.permissionMode,maxTurns:t.maxTurns,sessionStore:t.sessionStore,sessionName:t.sessionName,bare:t.bare,allowedTools:t.allowedTools,deniedTools:t.deniedTools,model:t.model,appendSystemPrompt:t.appendSystemPrompt,systemPrompt:t.systemPrompt,shellExec:t.shellExec,agentName:t.agentName,orgPolicy:e.orgPolicy,additionalTools:t.additionalTools,resumeSessionId:t.resumeSessionId,...t.responseFormat?{responseFormat:t.responseFormat}:{}})}}}function wd(e){let t=Cd({cwd:e.cwd??process.cwd(),provider:e.provider,sessionStore:void 0,commandHostAdapters:{settings:{read:()=>({}),write:()=>{}}}}),n=t.createSession.bind(t);return{...t,createSession(e){return n({bare:!0,...e})}}}exports.AUTO_COMPACT_THRESHOLD_SETTINGS_KEY=Vs,exports.AgentExecutor=Gi,exports.BACKGROUND_COMMAND_DESCRIPTION=`List and control background tasks`,exports.BACKGROUND_COMMAND_USAGE=`Usage: background list | background read <task-id> [offset] | background cancel <task-id> | background close <task-id>`,exports.BUILT_IN_AGENTS=et,exports.BackgroundJobOrchestrator=ne,exports.BuiltinCommandSource=Qo,exports.BundlePluginInstaller=Do,exports.BundlePluginLoader=Eo,exports.CLEAR_COMMAND_DESCRIPTION=`Clear conversation history`,exports.CLI_UPDATE_CACHE_TTL_MS=864e5,exports.CLI_UPDATE_PACKAGE_NAME=`@robota-sdk/agent-cli`,exports.CLI_UPDATE_REGISTRY_URL=`https://registry.npmjs.org`,exports.CLI_UPDATE_TIMEOUT_MS=1500,exports.COST_COMMAND_DESCRIPTION=`Show session token usage and estimated cost. /cost budget <amount> sets a monthly budget.`,exports.CommandRegistry=Jo,exports.DEFAULT_AUTO_COMPACT_THRESHOLD=Bs,exports.DEFAULT_STATUS_LINE_COMMAND_SETTINGS=kc,exports.EXECUTION_ORIGIN_METADATA_KEYS=S,exports.EXIT_COMMAND_DESCRIPTION=`Exit CLI`,exports.EditCheckpointStore=z,exports.HELP_COMMAND_DESCRIPTION=`Show available commands`,exports.InteractiveSession=Tl,exports.LANGUAGE_COMMAND_ARGUMENT_HINT=`<code>`,exports.LANGUAGE_COMMAND_DESCRIPTION=`Set response language`,exports.MEMORY_COMMAND_ARGUMENT_HINT=`list | show [topic] | add <user|feedback|project|reference> <topic> <text> | pending | approve <id> | reject <id> | used`,exports.MEMORY_COMMAND_DESCRIPTION=`Project memory command. Use it to inspect project memory when stored context may help, save durable preferences, project conventions, feedback, or references worth reusing across sessions, review pending candidates, and report memory provenance. Do not store secrets, credentials, or transient facts.`,exports.MEMORY_COMMAND_USAGE=`Usage: memory list | memory show [topic] | memory add <user|feedback|project|reference> <topic> <text> | memory pending | memory approve <id> | memory reject <id> | memory used`,exports.MEMORY_INDEX_MAX_BYTES=co,exports.MEMORY_INDEX_MAX_LINES=200,exports.MODEL_COMMAND_TOOL_PREFIX=it,exports.MarketplaceClient=jo,exports.PERMISSIONS_COMMAND_DESCRIPTION=`Show/change permission mode and permission rules`,exports.PERMISSION_MODE_ARGUMENT_HINT=`plan | default | acceptEdits | bypassPermissions`,exports.PERMISSION_MODE_COMMAND_DESCRIPTION=`Show/change permission mode`,exports.PLUGIN_COMMAND_ARGUMENT_HINT=`manage | install <name@marketplace> | uninstall <name@marketplace> | enable <name@marketplace> | disable <name@marketplace> | marketplace <action>`,exports.PLUGIN_COMMAND_DESCRIPTION=`Manage plugins`,exports.PROVIDER_SAFE_TOOL_NAME_PATTERN=at,exports.PluginCommandSource=zs,exports.PluginSettingsStore=So,exports.ProjectMemoryStore=vo,exports.PromptExecutor=qi,exports.ProviderConfigError=Ps,exports.RECOMMENDED_RESPONSE_LANGUAGES=mc,exports.RELOAD_PLUGINS_COMMAND_DESCRIPTION=`Reload all plugin resources`,exports.RENAME_COMMAND_DESCRIPTION=`Rename the current session`,exports.RENAME_COMMAND_USAGE=`Usage: rename <name>`,exports.RESUME_COMMAND_DESCRIPTION=`Resume a previous session`,exports.REWIND_COMMAND_ARGUMENT_HINT=`list | inspect CHECKPOINT_ID | restore CHECKPOINT_ID | code CHECKPOINT_ID | rollback CHECKPOINT_ID`,exports.REWIND_COMMAND_DESCRIPTION=`List, inspect, restore, or rollback edit checkpoints.`,exports.STATUSLINE_COMMAND_ARGUMENT_HINT=`on | off | reset | git on | git off`,exports.STATUSLINE_COMMAND_DESCRIPTION=`Configure TUI status-line visibility and fields such as model, context, tokens, session, and git branch.`,exports.SettingsParseError=Ri,exports.SkillCommandSource=Li,exports.SystemCommandExecutor=Yo,exports.USER_LOCAL_MEMORY_CATEGORIES=Yl,exports.USER_LOCAL_STORAGE_CATEGORIES=Rl,exports.USER_LOCAL_STORAGE_CATEGORY_DEFINITIONS=zl,exports.VALIDATE_SESSION_COMMAND_DESCRIPTION=`Validate current session replay log`,exports.VALID_PERMISSION_MODES=vc,exports.addCommandContextReference=Xs,exports.applyActiveModelChange=As,exports.applyProviderConfiguration=Os,exports.applyProviderSwitch=ks,exports.applyStatusLineSettings=Nc,exports.assembleSubagentPrompt=rt,exports.buildBackgroundCommandSubcommands=ic,exports.buildLanguageCommandSubcommands=hc,exports.buildMemoryCommandSubcommands=il,exports.buildPermissionModeSubcommands=yc,exports.buildPluginCommandSubcommands=Rc,exports.buildPromptWithFileReferences=mn,exports.buildProviderProfile=as,exports.buildProviderSetupPatch=is,exports.buildRewindCommandSubcommands=Jc,exports.buildStatusLineCommandSubcommands=Ac,exports.cancelCommandBackgroundTask=fc,exports.checkForCliUpdate=cd,exports.checkSettingsDocument=ms,exports.checkSettingsFile=ys,exports.clearCommandContextReferences=Qs,exports.clearContextReferences=an,exports.clearConversationHistory=zc,exports.closeCommandBackgroundTask=pc,exports.compactCommandContext=Js,exports.compareSemverVersions=$u,exports.createAgentRuntime=Cd,exports.createAgentTool=Pt,exports.createBackgroundGroupExecutionEntryId=ue,exports.createBackgroundProcessTool=yi,exports.createBackgroundTaskExecutionEntryId=w,exports.createBuiltinCommandModule=$o,exports.createCommandExecutionTool=Nu,exports.createCommandMemoryStores=sl,exports.createCommandPendingMemoryStore=ol,exports.createCommandProjectMemoryStore=al,exports.createContextReferenceItem=tn,exports.createDefaultTools=Wr,exports.createExecutionOriginMetadata=T,exports.createExecutionWorkspaceSnapshot=fe,exports.createExecutionWorkspaceTaskSpawner=Ne,exports.createInProcessSubagentRunner=wt,exports.createInteractiveRuntime=Vu,exports.createLineDetailPage=O,exports.createMainThreadDetailPage=Ae,exports.createMainThreadExecutionEntryId=C,exports.createModelCommandToolProjection=ct,exports.createPluginRegistryReloadRequestedEffect=Ic,exports.createPluginTuiRequestedEffect=Fc,exports.createProjectSessionStore=El,exports.createProjectedCommandExecutionTools=dt,exports.createPromptFileReferenceHistoryEntry=_n,exports.createProviderFromSettings=Rs,exports.createProviderSafeModelCommandToolName=st,exports.createQuery=Ll,exports.createSessionExitRequestedEffect=Uc,exports.createSessionPickerRequestedEffect=Hc,exports.createSessionRenamedEffect=Vc,exports.createStatelessRuntime=wd,exports.createSubagentLogger=fa,exports.createSubagentSession=vt,exports.createSystemCommands=Xo,exports.createTestInteractiveSession=Ju,exports.deleteProviderProfile=ns,exports.deleteSettings=Ui,exports.deleteUserLocalMemoryItem=gu,exports.disableUserLocalMemoryItem=hu,exports.discoverTaskFiles=no,exports.evaluateReversibleToolSafety=Zi,exports.executeSkill=gl,exports.formatCliUpdateCheckMessage=md,exports.formatCliUpdateNotice=pd,exports.formatCommandBackgroundTask=ac,exports.formatCommandBackgroundTaskList=oc,exports.formatCommandHelpMessage=rc,exports.formatCommandPermissionsMessage=Oc,exports.formatCommandSessionReplayValidationReport=Kc,Object.defineProperty(exports,"formatEnvReference",{enumerable:!0,get:function(){return c.formatEnvReference}}),exports.formatInvalidPermissionModeMessage=Sc,exports.formatLanguageUsageMessage=_c,exports.formatOrgPolicyViolationMessage=Cl,exports.formatProjectedModelCommandToolPromptDescription=lt,exports.formatPromptFileReferenceDiagnostics=gn,exports.formatTaskContext=ao,exports.getBuiltInAgent=k,exports.getForkWorkerSuffix=nt,exports.getProviderSettingsPaths=Es,exports.getStartupCliUpdateNotice=dd,exports.getSubagentSuffix=tt,exports.getUserSettingsPath=zi,exports.getUserUpdateCheckCachePath=ad,exports.hasBlockingPromptFileReferenceDiagnostics=hn,exports.hasSensitiveCommandMemoryContent=ll,Object.defineProperty(exports,"hasUsableSecretReference",{enumerable:!0,get:function(){return c.hasUsableSecretReference}}),exports.inspectCommandEditCheckpoint=Xc,exports.inspectUserLocalMemoryItem=mu,exports.inspectUserLocalStorage=Jl,exports.isApiKeyPlaintext=wl,exports.isCommandMemoryType=cl,Object.defineProperty(exports,"isEnvReference",{enumerable:!0,get:function(){return c.isEnvReference}}),exports.isMemoryType=uo,exports.isNewerSemverVersion=ed,exports.isPermissionMode=xc,exports.isSlashCommand=Pu,exports.isStatusLineCommandSettingsPatch=jc,exports.listActiveContextReferences=on,exports.listCommandBackgroundTasks=uc,exports.listCommandContextReferences=Ys,exports.listCommandEditCheckpoints=Yc,exports.listCommandSessionAllowedTools=Ec,exports.listCommandUsedMemoryReferences=ul,exports.listResumableSessionSummaries=Dl,exports.listUserLocalMemoryItems=pu,exports.loadOrgPolicy=Sl,exports.loadTaskContext=oo,exports.mergeProviderPatch=os,exports.mergeProviders=Cs,exports.mergeSettings=Ss,exports.normalizeModelCommandName=A,exports.parseCommandBackgroundLogCursor=sc,exports.parseExecutionWorkspaceEntryId=de,exports.parseFrontmatter=Ni,exports.parseInput=Iu,exports.parseLanguageArgument=gc,exports.parsePermissionModeArgument=bc,exports.parsePromptFileReferences=xn,exports.parseSessionNameArgument=Bc,exports.parseTaskFile=ro,exports.planSelfHostingVerification=Tu,exports.preprocessShellCommands=pl,exports.probeProviderProfile=ps,exports.projectPaths=R,exports.promptForApproval=Wu,exports.readAutoCompactThreshold=Us,exports.readAutoCompactThresholdSource=Ws,exports.readCommandBackgroundTaskLog=dc,exports.readCommandContextState=Hs,exports.readCommandPermissionMode=wc,exports.readCommandPermissionsState=Dc,exports.readCommandSessionInfo=Wc,exports.readCurrentGitBranch=to,exports.readEnabledUserLocalMemoryItem=_u,exports.readMergedProviderSettings=Fs,exports.readMergedProviderSettingsFromPaths=bs,exports.readPackageVersion=id,exports.readProviderSettings=Ls,exports.readSettings=W,exports.readStatusLineSettings=Mc,exports.readUpdateCheckCache=od,exports.recordCommandMemoryEvent=dl,exports.removeCommandContextReference=Zs,exports.removeContextReference=rn,exports.resetAutoCompactThresholdSetting=qs,exports.resetUserConfig=Yu,exports.resolveActiveProvider=ws,exports.resolveEnvDefaultProvider=Is,Object.defineProperty(exports,"resolveEnvReference",{enumerable:!0,get:function(){return c.resolveEnvReference}}),exports.resolveGitBranch=Xu,exports.resolveLatestSessionId=Ol,exports.resolvePermissionModeAdapter=Cc,exports.resolvePluginCommandAdapter=Lc,exports.resolvePromptFileReferencePaths=On,exports.resolvePromptFileReferences=Dn,exports.resolveProviderSettingsWriteTargetPath=Ds,exports.resolveSessionIdByIdOrName=kl,exports.resolveSettingsPathForScope=Bi,exports.resolveSubagentLogDir=pa,exports.resolveUserLocalStorageRoot=Gl,exports.restoreCommandEditCheckpoint=Zc,exports.retrieveAgentToolDeps=j,exports.rollbackCommandEditCheckpoint=Qc,exports.sanitizeProviderProfileName=tc,exports.selectRelevantTasks=io,exports.setCommandAutoCompactThreshold=Gs,exports.setCurrentProvider=ts,exports.setUserLocalMemoryItem=fu,exports.shouldRunStartupCliUpdateCheck=fd,exports.storeAgentToolDeps=kt,exports.substituteVariables=fl,exports.suggestProviderProfileName=ec,exports.summarizeBackgroundJobGroup=se,exports.testProviderProfileCommand=fs,exports.toContextReferenceRecords=sn,exports.toPromptFileReferenceRecords=F,exports.tokeniseSlashCommand=Fu,exports.transitionSelfHostingLoop=Eu,exports.updateModelInSettings=Vi,exports.updateTaskFileStatus=so,exports.upsertContextReference=nn,exports.upsertProviderProfile=es,exports.userPaths=mr,exports.validateCommandSessionReplayLog=Gc,exports.validateProviderProfile=rs,exports.wrapEditCheckpointTools=Ei,exports.wrapReversibleExecutionTools=Qi,exports.writeAutoCompactThresholdSetting=Ks,exports.writeCommandPermissionMode=Tc,exports.writeSettings=G,exports.writeUpdateCheckCache=sd;
94
+ `),s=wo(o),c=new So(e).loadStartupMemory().content||void 0,l=uo(e);return{agentsMd:a,claudeMd:o,memoryMd:c,taskContext:l.trim().length>0?l:void 0,compactInstructions:s,agentsFileEntries:r,claudeFileEntries:i}}var Eo=class{settingsPath;fs;constructor(e,t=new N){this.settingsPath=e,this.fs=t}readAll(){if(!this.fs.existsSync(this.settingsPath))return{};try{let e=this.fs.readFileSync(this.settingsPath,`utf-8`),t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return{}}}writeAll(e){let t=(0,g.dirname)(this.settingsPath);this.fs.existsSync(t)||this.fs.mkdirSync(t,{recursive:!0}),this.fs.writeFileSync(this.settingsPath,JSON.stringify(e,null,2),`utf-8`)}getEnabledPlugins(){let e=this.readAll().enabledPlugins;return typeof e==`object`&&e?e:{}}setPluginEnabled(e,t){let n=this.readAll(),r=this.getEnabledPluginsFrom(n);r[e]=t,n.enabledPlugins=r,this.writeAll(n)}removePluginEntry(e){let t=this.readAll(),n=this.getEnabledPluginsFrom(t);delete n[e],t.enabledPlugins=n,this.writeAll(t)}getMarketplaceSources(){let e=this.readAll().extraKnownMarketplaces;return typeof e==`object`&&e?e:{}}setMarketplaceSource(e,t){let n=this.readAll(),r=this.getMarketplaceSourcesFrom(n);r[e]={source:t},n.extraKnownMarketplaces=r,this.writeAll(n)}removeMarketplaceSource(e){let t=this.readAll(),n=this.getMarketplaceSourcesFrom(t);delete n[e],t.extraKnownMarketplaces=n,this.writeAll(t)}getEnabledPluginsFrom(e){let t=e.enabledPlugins;return typeof t==`object`&&t?t:{}}getMarketplaceSourcesFrom(e){let t=e.extraKnownMarketplaces;return typeof t==`object`&&t?t:{}}};function Do(e){let t=e.trimStart();if(!t.startsWith(`---`))return{metadata:{},content:e};let n=t.indexOf(`---`,3);if(n===-1)return{metadata:{},content:e};let r=t.slice(3,n).trim(),i=t.slice(n+3).trimStart(),a={};for(let e of r.split(`
95
+ `)){let t=e.indexOf(`:`);if(t===-1)continue;let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();typeof r==`string`&&r.startsWith(`[`)&&r.endsWith(`]`)&&(r=r.slice(1,-1).split(`,`).map(e=>e.trim()).filter(e=>e.length>0)),n&&(a[n]=r)}return{metadata:a,content:i}}function Oo(e){if(typeof e!=`object`||!e)return null;let t=e;if(typeof t.name!=`string`||typeof t.version!=`string`||typeof t.description!=`string`)return null;let n=typeof t.features==`object`&&t.features!==null?t.features:{};return{name:t.name,version:t.version,description:t.description,features:{commands:n.commands===!0?!0:void 0,agents:n.agents===!0?!0:void 0,skills:n.skills===!0?!0:void 0,hooks:n.hooks===!0?!0:void 0,mcp:n.mcp===!0?!0:void 0}}}function ko(e,t=new N){if(!t.existsSync(e))return[];try{return t.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name).sort()}catch{return[]}}var Ao=class{pluginsDir;enabledPlugins;fs;constructor(e,t,n=new N){this.pluginsDir=e,this.enabledPlugins=t??{},this.fs=n}loadPluginsSync(){return this.discoverAndLoad()}async loadAll(){return this.discoverAndLoad()}discoverAndLoad(){let e=(0,g.join)(this.pluginsDir,`cache`);if(!this.fs.existsSync(e))return[];let t=[],n=ko(e,this.fs);for(let r of n){let n=(0,g.join)(e,r),i=ko(n,this.fs);for(let e of i){let i=(0,g.join)(n,e),a=ko(i,this.fs);if(a.length===0)continue;let o=a[a.length-1],s=(0,g.join)(i,o),c=(0,g.join)(s,`.claude-plugin`,`plugin.json`);if(!this.fs.existsSync(c))continue;let l=this.readManifest(c);if(!l)continue;let u=`${l.name}@${r}`;if(this.isDisabled(u,l.name))continue;let d=this.loadPlugin(s,l);t.push(d)}}return t}readManifest(e){let t=this.fs.readFileSync(e,`utf-8`);return Oo(JSON.parse(t))}isDisabled(e,t){return e in this.enabledPlugins?this.enabledPlugins[e]===!1:t in this.enabledPlugins?this.enabledPlugins[t]===!1:!1}loadPlugin(e,t){return{manifest:t,skills:this.loadSkills(e,t.name),commands:this.loadCommands(e,t.name),hooks:this.loadHooks(e),mcpConfig:this.loadMcpConfig(e),agents:this.loadAgents(e),pluginDir:e}}loadSkills(e,t){let n=(0,g.join)(e,`skills`);if(!this.fs.existsSync(n))return[];let r=this.fs.readdirSync(n,{withFileTypes:!0}),i=[];for(let e of r){if(!e.isDirectory())continue;let t=(0,g.join)(n,e.name,`SKILL.md`);if(!this.fs.existsSync(t))continue;let{metadata:r,content:a}=Do(this.fs.readFileSync(t,`utf-8`)),o=typeof r.description==`string`?r.description:``,s={name:e.name,description:o,skillContent:a,...r};i.push(s)}return i}loadCommands(e,t){let n=(0,g.join)(e,`commands`);if(!this.fs.existsSync(n))return[];let r=this.fs.readdirSync(n,{withFileTypes:!0}),i=[];for(let e of r){if(!e.isFile()||!e.name.endsWith(`.md`))continue;let{metadata:r,content:a}=Do(this.fs.readFileSync((0,g.join)(n,e.name),`utf-8`)),o=typeof r.name==`string`?r.name:e.name.replace(/\.md$/,``),s=typeof r.description==`string`?r.description:``;i.push({...r,name:`${t}:${o}`,description:s,skillContent:a})}return i}loadHooks(e){let t=(0,g.join)(e,`hooks`,`hooks.json`);if(!this.fs.existsSync(t))return{};let n=this.fs.readFileSync(t,`utf-8`),r=JSON.parse(n);return typeof r==`object`&&r?r:{}}loadMcpConfig(e){let t=(0,g.join)(e,`.mcp.json`);if(!this.fs.existsSync(t))return;let n=this.fs.readFileSync(t,`utf-8`);return JSON.parse(n)}loadAgents(e){let t=(0,g.join)(e,`agents`);return this.fs.existsSync(t)?this.fs.readdirSync(t,{withFileTypes:!0}).filter(e=>e.isDirectory()||e.name.endsWith(`.md`)).map(e=>e.name.replace(/\.md$/,``)):[]}},jo=class{pluginsDir;cacheDir;registryPath;settingsStore;marketplaceClient;exec;fs;constructor(e){this.pluginsDir=e.pluginsDir,this.cacheDir=(0,g.join)(this.pluginsDir,`cache`),this.registryPath=(0,g.join)(this.pluginsDir,`installed_plugins.json`),this.settingsStore=e.settingsStore,this.marketplaceClient=e.marketplaceClient,this.exec=e.exec,this.fs=e.fs??new N}async install(e,t){let n=this.marketplaceClient.fetchManifest(t).plugins.find(t=>t.name===e);if(!n)throw Error(`Plugin "${e}" not found in marketplace "${t}"`);let r=this.resolveVersion(n,t),i=(0,g.join)(this.cacheDir,t,e,r);if(this.fs.existsSync(i))throw Error(`Plugin "${e}" version "${r}" is already installed from "${t}"`);this.resolveAndInstall(n.source,t,e,i);let a=`${e}@${t}`,o=this.readRegistry();o[a]={pluginName:e,marketplace:t,version:r,installPath:i,installedAt:new Date().toISOString()},this.writeRegistry(o)}async uninstall(e){let t=this.readRegistry(),n=t[e];if(!n)throw Error(`Plugin "${e}" is not installed`);this.fs.existsSync(n.installPath)&&this.fs.rmSync(n.installPath,{recursive:!0,force:!0}),delete t[e],this.writeRegistry(t),this.settingsStore.removePluginEntry(e)}async enable(e){this.settingsStore.setPluginEnabled(e,!0)}async disable(e){this.settingsStore.setPluginEnabled(e,!1)}getInstalledPlugins(){return this.readRegistry()}getPluginsByMarketplace(e){let t=this.readRegistry();return Object.values(t).filter(t=>t.marketplace===e)}resolveVersion(e,t){let n=e;return typeof n.version==`string`&&n.version?n.version:this.marketplaceClient.getMarketplaceSha(t)}normalizeSource(e){if(typeof e==`string`)return e;let t=e;return!t.type&&typeof t.source==`string`?{...t,type:t.source}:e}resolveAndInstall(e,t,n,r){this.fs.mkdirSync(r,{recursive:!0});let i=this.normalizeSource(e);try{if(typeof i==`string`){let e=(0,g.join)(this.marketplaceClient.getMarketplaceDir(t),i);if(!this.fs.existsSync(e))throw Error(`Plugin source path "${i}" not found in marketplace "${t}"`);this.fs.cpSync(e,r,{recursive:!0})}else if(i.type===`github`){let e=`https://github.com/${i.repo}.git`;this.cloneToDir(e,r,n)}else if(i.type===`url`&&typeof i.url==`string`&&i.url.endsWith(`.git`))this.cloneToDir(i.url,r,n);else if(i.type===`url`)throw Error(`URL source "${i.url}" is not a git repository (must end with .git)`);else throw Error(`Unknown source type: ${JSON.stringify(i)}`)}catch(e){throw this.fs.existsSync(r)&&this.fs.rmSync(r,{recursive:!0,force:!0}),e}}cloneToDir(e,t,n){this.fs.rmSync(t,{recursive:!0,force:!0});let r=`git clone --depth 1 ${e} ${t}`;try{this.exec(r,{timeout:6e4,stdio:`pipe`})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to clone plugin "${n}": ${t}`)}}readRegistry(){if(!this.fs.existsSync(this.registryPath))return{};try{let e=this.fs.readFileSync(this.registryPath,`utf-8`),t=JSON.parse(e);return typeof t==`object`&&t?t:{}}catch{return{}}}writeRegistry(e){let t=(0,g.dirname)(this.registryPath);this.fs.existsSync(t)||this.fs.mkdirSync(t,{recursive:!0}),this.fs.writeFileSync(this.registryPath,JSON.stringify(e,null,2),`utf-8`)}};function Y(e,t=new N){if(!t.existsSync(e))return{};try{let n=t.readFileSync(e,`utf-8`),r=JSON.parse(n);return typeof r==`object`&&r?r:{}}catch{return{}}}function Mo(e,t,n=new N){let r=(0,g.dirname)(e);n.existsSync(r)||n.mkdirSync(r,{recursive:!0}),n.writeFileSync(e,JSON.stringify(t,null,2),`utf-8`)}function No(e,t,n=new N){let r=(0,g.join)(e,`installed_plugins.json`);if(!n.existsSync(r))return;let i;try{let e=n.readFileSync(r,`utf-8`),t=JSON.parse(e);if(typeof t!=`object`||!t)return;i=t}catch{return}let a=!1;for(let[e,r]of Object.entries(i))r.marketplace===t&&(r.installPath&&n.existsSync(r.installPath)&&n.rmSync(r.installPath,{recursive:!0,force:!0}),delete i[e],a=!0);if(a){let e=(0,g.dirname)(r);n.existsSync(e)||n.mkdirSync(e,{recursive:!0}),n.writeFileSync(r,JSON.stringify(i,null,2),`utf-8`)}}const Po=6e4;var Fo=class{pluginsDir;exec;marketplacesDir;registryPath;fs;constructor(e){this.pluginsDir=e.pluginsDir,this.exec=e.exec,this.marketplacesDir=(0,g.join)(this.pluginsDir,`marketplaces`),this.registryPath=(0,g.join)(this.pluginsDir,`known_marketplaces.json`),this.fs=e.fs??new N}addMarketplace(e){let t=`temp-`+Date.now().toString(36),n=(0,g.join)(this.marketplacesDir,t);if(this.fs.mkdirSync(this.marketplacesDir,{recursive:!0}),e.type===`local`){if(!this.fs.existsSync(e.path))throw Error(`Local marketplace path does not exist: ${e.path}`);this.fs.cpSync(e.path,n,{recursive:!0})}else{let t=`git clone --depth 1 ${this.resolveCloneUrl(e)} ${n}`;try{this.exec(t,{timeout:Po,stdio:`pipe`})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to clone marketplace: ${t}`)}}let r=(0,g.join)(n,`.claude-plugin`,`marketplace.json`);if(!this.fs.existsSync(r))throw this.fs.rmSync(n,{recursive:!0,force:!0}),Error(e.type===`local`?`Local directory does not contain .claude-plugin/marketplace.json`:`Cloned repository does not contain .claude-plugin/marketplace.json`);let i=this.readManifestFromPath(r).name;if(!i)throw this.fs.rmSync(n,{recursive:!0,force:!0}),Error(`Marketplace manifest does not contain a "name" field`);let a=Y(this.registryPath,this.fs);if(a[i])throw this.fs.rmSync(n,{recursive:!0,force:!0}),Error(`Marketplace "${i}" already exists`);let o=(0,g.join)(this.marketplacesDir,i);return this.fs.renameSync(n,o),a[i]={source:e,installLocation:o,lastUpdated:new Date().toISOString()},Mo(this.registryPath,a,this.fs),i}removeMarketplace(e){let t=Y(this.registryPath,this.fs),n=t[e];if(!n)throw Error(`Marketplace "${e}" not found`);No(this.pluginsDir,e,this.fs),this.fs.existsSync(n.installLocation)&&this.fs.rmSync(n.installLocation,{recursive:!0,force:!0}),delete t[e],Mo(this.registryPath,t,this.fs)}updateMarketplace(e){let t=Y(this.registryPath,this.fs),n=t[e];if(!n)throw Error(`Marketplace "${e}" not found`);if(!this.fs.existsSync(n.installLocation))throw Error(`Marketplace directory for "${e}" does not exist`);if(n.source.type===`local`){let e=n.source;if(!this.fs.existsSync(e.path))throw Error(`Local marketplace path does not exist: ${e.path}`);this.fs.rmSync(n.installLocation,{recursive:!0,force:!0}),this.fs.cpSync(e.path,n.installLocation,{recursive:!0})}else{let t=`git -C ${n.installLocation} pull`;try{this.exec(t,{timeout:Po,stdio:`pipe`})}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Failed to update marketplace "${e}": ${n}`)}}n.lastUpdated=new Date().toISOString(),Mo(this.registryPath,t,this.fs)}listMarketplaces(){let e=Y(this.registryPath,this.fs);return Object.entries(e).map(([e,t])=>({name:e,source:t.source,lastUpdated:t.lastUpdated}))}fetchManifest(e){let t=Y(this.registryPath,this.fs)[e];if(!t)throw Error(`Marketplace "${e}" not found`);let n=(0,g.join)(t.installLocation,`.claude-plugin`,`marketplace.json`);if(!this.fs.existsSync(n))throw Error(`Marketplace "${e}" does not contain .claude-plugin/marketplace.json`);return this.readManifestFromPath(n)}getMarketplaceDir(e){let t=Y(this.registryPath,this.fs)[e];if(!t)throw Error(`Marketplace "${e}" not found`);return t.installLocation}getMarketplaceSha(e){let t=this.getMarketplaceDir(e);try{return this.exec(`git -C ${t} rev-parse HEAD`,{timeout:Po,stdio:`pipe`}).toString().trim().slice(0,12)}catch{return`unknown`}}listAvailablePlugins(){let e=[],t=this.listMarketplaces();for(let{name:n}of t)try{let t=this.fetchManifest(n);for(let r of t.plugins)e.push({...r,marketplace:n})}catch{}return e}resolveCloneUrl(e){switch(e.type){case`github`:return`https://github.com/${e.repo}.git`;case`git`:return e.url;case`local`:throw Error(`Local source type does not use git cloning`);case`url`:throw Error(`URL marketplace source is not yet supported`)}}readManifestFromPath(e){let t=this.fs.readFileSync(e,`utf-8`),n=JSON.parse(t);if(typeof n!=`object`||!n)throw Error(`Invalid marketplace manifest: not an object`);if(typeof n.name!=`string`)throw Error(`Invalid marketplace manifest: missing "name" field`);return n}};function Io(e){let t=(0,g.join)((0,g.dirname)((0,g.dirname)(e.pluginDir)),`data`,e.manifest.name);return{CLAUDE_PLUGIN_ROOT:e.pluginDir,CLAUDE_PLUGIN_PATH:e.pluginDir,CLAUDE_PLUGIN_DATA:t}}function Lo(e,t){return Array.isArray(e.hooks)?{...e,hooks:e.hooks.map(e=>typeof e.command==`string`?{...e,command:e.command.replace(/\$\{CLAUDE_PLUGIN_ROOT\}/g,t)}:e)}:e}function Ro(e){let t={};for(let n of e){let e=n.hooks;if(!e)continue;let r=Io(n),i=e.hooks??e;for(let[e,a]of Object.entries(i)){if(!Array.isArray(a))continue;t[e]||(t[e]=[]);let i=a.map(e=>{let t=Lo(e,n.pluginDir);return t.env=r,t});t[e].push(...i)}}return t}function zo(e,t){if(Object.keys(t).length===0)return e;let n={};for(let[e,r]of Object.entries(t))n[e]=[...r];if(e)for(let[t,r]of Object.entries(e))Array.isArray(r)&&(n[t]||(n[t]=[]),n[t].push(...r));return n}async function Bo(e){let t=e.cwd,[n,r,i]=await Promise.all([e.config?Promise.resolve(e.config):Ga(t),e.bare?Promise.resolve({agentsMd:``,claudeMd:``,agentsFileEntries:[],claudeFileEntries:[]}):To(t),e.bare?Promise.resolve({type:`unknown`,language:`unknown`}):Ir(t)]),a=e.language?{...n,language:e.language}:n,o=new Ao((0,g.join)((0,_.homedir)(),`.robota`,`plugins`));if(!e.bare)try{let e=o.loadPluginsSync();if(e.length>0){let t=Ro(e);a={...a,hooks:zo(a.hooks,t)}}}catch{}let s=R(t);await Ho(e)||await Vo(e,t);let c=e.resumeSessionId&&!e.forkSession?e.resumeSessionId:void 0,{session:l,rebuildSystemMessage:u}=ma({config:a,cwd:t,context:r,projectInfo:i,permissionMode:e.permissionMode,maxTurns:e.maxTurns,terminal:Xn,sessionLogger:new f.FileSessionLogger(s.logs),permissionHandler:e.permissionHandler,provider:e.provider,onTextDelta:e.onTextDelta,onContextUpdate:e.onContextUpdate,onCompactEvent:e.onCompactEvent,onToolExecution:e.onToolExecution,sessionId:c,allowedTools:e.allowedTools,deniedTools:e.deniedTools,model:e.model,appendSystemPrompt:e.appendSystemPrompt,...e.persona===void 0?{}:{persona:e.persona},...e.systemPrompt?{systemPromptBuilder:()=>e.systemPrompt}:{},backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,...e.commandModules?.some(e=>e.sessionRequirements?.includes(`agent-runtime`))?{enableAgentRuntime:!0}:{},...e.enableParallelSubagents===void 0?{}:{enableParallelSubagents:e.enableParallelSubagents},...e.selfVerification===void 0?{}:{selfVerification:e.selfVerification},...e.commandModules||e.commandDescriptors?{commandDescriptors:[...e.commandDescriptors??[],...e.commandModules?.flatMap(e=>e.commandDescriptors??[])??[]]}:{},modelCommandExecutor:e.modelCommandExecutor,isModelCommandInvocable:e.isModelCommandInvocable,editCheckpointRecorder:e.editCheckpointRecorder,reversibleExecution:e.reversibleExecution,sandboxClient:e.sandboxClient,agentName:e.agentName,...e.activePresetId===void 0?{}:{activePresetId:e.activePresetId},...e.additionalTools?{additionalTools:e.additionalTools}:{},...e.responseFormat?{responseFormat:e.responseFormat}:{}});return{session:l,agentsFileEntries:r.agentsFileEntries??[],claudeFileEntries:r.claudeFileEntries??[],rebuildSystemMessage:u}}async function Vo(e,t){if(e.workspaceManifest){if(!e.sandboxClient)throw Error(`workspaceManifest requires sandboxClient.`);await(0,u.applyWorkspaceManifest)(e.sandboxClient,e.workspaceManifest,{hostRoot:t,...e.sandboxWorkspaceRoot?{targetRoot:e.sandboxWorkspaceRoot}:{}})}}async function Ho(e){if(!e.sandboxSnapshotId)return!1;if(!e.sandboxClient?.restore)throw Error(`sandboxSnapshotId requires sandboxClient with restore().`);return await e.sandboxClient.restore(e.sandboxSnapshotId),!0}async function Uo(e,t){let n=e.config??await Ga(e.cwd),r=n.autoCompactThreshold===void 0?`default`:`settings`,i=new z({cwd:e.cwd});t.setEditCheckpointStore(i);let a=await Bo({cwd:e.cwd,provider:e.provider,config:n,permissionMode:e.permissionMode,maxTurns:e.maxTurns,permissionHandler:e.permissionHandler,resumeSessionId:t.resumeSessionId,forkSession:e.forkSession,onTextDelta:t.onTextDelta,onContextUpdate:t.onContextUpdate,onCompactEvent:t.onCompactEvent,onToolExecution:t.onToolExecution,bare:e.bare,allowedTools:e.allowedTools,deniedTools:e.deniedTools,model:e.model,appendSystemPrompt:e.appendSystemPrompt,...e.persona===void 0?{}:{persona:e.persona},...e.systemPrompt?{systemPrompt:e.systemPrompt}:{},language:e.language,backgroundTaskRunners:e.backgroundTaskRunners,subagentRunnerFactory:e.subagentRunnerFactory,...e.commandModules?{commandModules:e.commandModules}:{},editCheckpointRecorder:i,...e.reversibleExecution?{reversibleExecution:e.reversibleExecution}:{},...e.sandboxClient?{sandboxClient:e.sandboxClient}:{},...e.workspaceManifest?{workspaceManifest:e.workspaceManifest}:{},...e.sandboxWorkspaceRoot?{sandboxWorkspaceRoot:e.sandboxWorkspaceRoot}:{},...t.sandboxSnapshotId?{sandboxSnapshotId:t.sandboxSnapshotId}:{},...e.agentName?{agentName:e.agentName}:{},...e.activePresetId===void 0?{}:{activePresetId:e.activePresetId},...e.enableParallelSubagents===void 0?{}:{enableParallelSubagents:e.enableParallelSubagents},...e.selfVerification===void 0?{}:{selfVerification:e.selfVerification},...e.additionalTools?{additionalTools:e.additionalTools}:{},...e.responseFormat?{responseFormat:e.responseFormat}:{},commandDescriptors:t.commandDescriptors,...t.commandDescriptors.length>0?{modelCommandExecutor:t.executeModelCommand,isModelCommandInvocable:t.isModelCommandInvocable}:{}});if(t.pendingRestoreMessages){for(let e of t.pendingRestoreMessages)Lr(a.session,e);a.session.syncContextFromHistory()}return{session:a.session,agentsFileEntries:a.agentsFileEntries,claudeFileEntries:a.claudeFileEntries,rebuildSystemMessage:a.rebuildSystemMessage,autoCompactThresholdSource:r}}function Wo(e,t,n,r,i,a,o,s,c,l){try{let u=t.getSessionId(),d=e.load(u),f=l?.snapshotId??d?.sandboxSnapshotId;e.save(Go({session:t,sessionId:u,sessionName:n??d?.name,cwd:r,history:i,createdAt:d?.createdAt,backgroundState:a,memoryState:o,skillActivationState:s,contextReferenceState:c,...f===void 0?{}:{sandboxSnapshotId:f}}))}catch{}}function Go(e){return{id:e.sessionId,...e.sessionName===void 0?{}:{name:e.sessionName},cwd:e.cwd,createdAt:e.createdAt??new Date().toISOString(),updatedAt:new Date().toISOString(),messages:e.session.getHistory(),history:e.history,systemPrompt:e.session.getSystemMessage(),toolSchemas:e.session.getToolSchemas(),...e.sandboxSnapshotId===void 0?{}:{sandboxSnapshotId:e.sandboxSnapshotId},...Ko(e.backgroundState),...qo(e.memoryState),...Jo(e.skillActivationState),...Yo(e.contextReferenceState)}}function Ko(e){return e?{backgroundTasks:[...e.tasks],backgroundTaskEvents:[...e.events],backgroundJobGroups:[...e.groups??[]],backgroundJobGroupEvents:[...e.groupEvents??[]]}:{}}function qo(e){return e?{memoryEvents:[...e.events],usedMemoryReferences:[...e.usedReferences]}:{}}function Jo(e){return e?{skillActivationEvents:[...e.events]}:{}}function Yo(e){return e?{contextReferences:[...e.references]}:{}}function Xo(e){return e.source===`skill`||e.source===`plugin`&&e.skillContent?`skill`:`builtin-command`}function Zo(e){let t=e.source===`skill`||e.source===`plugin`&&!!e.skillContent;return{name:e.name,kind:Xo(e),description:e.description,userInvocable:e.userInvocable!==!1,modelInvocable:e.modelInvocable===!0||t&&e.disableModelInvocation!==!0,...e.argumentHint?{argumentHint:e.argumentHint}:{},...e.safety?{safety:e.safety}:{}}}var Qo=class{sources=[];addSource(e){this.sources.push(e)}replaceSource(e,t){this.sources=this.sources.filter(t=>t.name!==e),t!==void 0&&this.sources.push(t)}addModule(e){for(let t of e.commandSources??[])this.addSource(t)}getCommands(e){let t=[];for(let e of this.sources)t.push(...e.getCommands());if(!e)return t;let n=e.toLowerCase();return t.filter(e=>e.name.toLowerCase().startsWith(n))}resolveQualifiedName(e){let t=this.getCommands().filter(t=>t.source===`plugin`&&t.name.includes(`:`)&&t.name.endsWith(`:${e}`));return t.length===1?t[0].name:null}getSubcommands(e){let t=e.toLowerCase();for(let e of this.sources)for(let n of e.getCommands())if(n.name.toLowerCase()===t&&n.subcommands)return n.subcommands;return[]}getCapabilityDescriptors(){return this.getCommands().map(e=>Zo(e))}},$o=class{commands;constructor(e){this.commands=new Map;for(let t of e??es())this.commands.set(t.name,t)}register(e){this.commands.set(e.name,e)}replaceCommands(e){this.commands.clear();for(let t of e)this.commands.set(t.name,t)}async execute(e,t,n){let r=this.getCommand(e);return r?await this.executeCommand(r,t,n):null}getCommand(e){return this.commands.get(e)}resolveRequiresPermission(e){return e.requiresPermission===void 0?e.safety!==`read-only`:e.requiresPermission}async executeCommand(e,t,n){return await e.execute(t,n)}listCommands(){return[...this.commands.values()]}listModelInvocableCommands(){return this.listCommands().filter(e=>e.modelInvocable===!0).map(e=>({name:e.name,kind:`builtin-command`,description:e.description,userInvocable:e.userInvocable!==!1,modelInvocable:!0,...e.argumentHint?{argumentHint:e.argumentHint}:{},...e.safety?{safety:e.safety}:{},requiresPermission:this.resolveRequiresPermission(e)}))}isModelInvocable(e){return this.commands.get(e)?.modelInvocable===!0}async executeModelInvocable(e,t,n){return this.isModelInvocable(e)?this.execute(e,t,n):null}hasCommand(e){return this.commands.has(e)}};function es(){return[]}function ts(e){return{name:e.name,description:e.description,source:`builtin`,...e.subcommands?{subcommands:[...e.subcommands]}:{},...e.argumentHint?{argumentHint:e.argumentHint}:{},...e.modelInvocable===void 0?{}:{modelInvocable:e.modelInvocable},...e.userInvocable===void 0?{}:{userInvocable:e.userInvocable},...e.safety?{safety:e.safety}:{}}}var ns=class{name=`builtin`;commands;constructor(e=es()){this.commands=e.map(ts)}getCommands(){return this.commands}};function rs(){let e=es();return{name:`sdk-builtin`,commandSources:[new ns(e)],systemCommands:e}}function is(e,t,n){return{...e,providers:{...e.providers??{},[t]:n}}}function as(e,t){if(!e.providers?.[t])throw Error(`Provider profile "${t}" was not found`);return{...e,currentProvider:t}}function os(e,t,n={}){if(!e.providers?.[t])throw Error(`Provider profile "${t}" was not found`);let r={...e.providers};if(delete r[t],n.replacementCurrentProvider!==void 0&&r[n.replacementCurrentProvider]===void 0)throw Error(`Provider profile "${n.replacementCurrentProvider}" was not found`);let i={...e,providers:r};if(e.currentProvider!==t)return i;if(n.replacementCurrentProvider!==void 0)return{...i,currentProvider:n.replacementCurrentProvider};let a={...i};return delete a.currentProvider,a}function ss(e,t,n={}){if(!t.type)throw Error(`Provider profile "${e}" is missing type`);let r=n.providerDefinitions??[],i=(0,c.findProviderDefinition)(r,t.type);if(i===void 0&&r.length>0)throw Error(`Unknown provider "${t.type}". Supported providers: ${(0,c.formatSupportedProviderTypes)(r)}`);if(!t.model)throw Error(`Provider profile "${e}" is missing model`);let a=(0,c.getProviderCredentialRequirement)(i);if(a!==void 0&&!fs(t,i?.defaults,a))throw Error(`Provider profile "${e}" is missing ${ms(a)}`)}function cs(e,t={}){let n=ls(e,t);return ss(e.profile,n,t),{...e.setCurrent&&{currentProvider:e.profile},providers:{[e.profile]:n}}}function ls(e,t={}){let n=ds(e.type,t.providerDefinitions??[]);if(e.apiKey!==void 0&&e.apiKeyEnv===void 0&&console.warn(`API key stored as plain text in settings. Use --api-key-env for better security.`),e.apiKeyEnv!==void 0){let n=(t.env??process.env)[e.apiKeyEnv];if(n===void 0||n.length===0)throw Error(`Environment variable ${e.apiKeyEnv} is not set — set it before configuring (the profile will reference $ENV:${e.apiKeyEnv})`)}let r=e.apiKeyEnv===void 0?e.apiKey??n.apiKey:(0,c.formatEnvReference)(e.apiKeyEnv),i=e.baseURL??n.baseURL;return{type:e.type,model:e.model??n.model,...hs(r)&&{apiKey:r},...i!==void 0&&{baseURL:i},...e.timeout!==void 0&&{timeout:e.timeout}}}function us(e,t){let[n,r]=Object.entries(t.providers)[0]??[];if(!n||!r)return e;let i=is(e,n,r);return t.currentProvider?as(i,t.currentProvider):i}function ds(e,t){return(0,c.findProviderDefinition)(t,e)?.defaults??{}}function fs(e,t,n){return n.anyOf.some(n=>(0,c.hasUsableSecretReference)(ps(n,e,t)))}function ps(e,t,n){return t[e]??n?.[e]}function ms(e){return e.anyOf.join(` or `)}function hs(e){return e!==void 0&&e.length>0}async function gs(e,t,n,r){let i=n??e;if(!i)return{message:`No provider profile selected.`,success:!1};let a=t?.[i];if(!a)return{message:`Provider profile "${i}" was not found.`,success:!1};try{ss(i,a,{providerDefinitions:r.providerDefinitions})}catch(e){return{message:e instanceof Error?e.message:String(e),success:!1}}let o=await((a.type?(0,c.findProviderDefinition)(r.providerDefinitions,a.type):void 0)?.probeProfile??_s)(a);return{message:o.ok?`Provider "${i}" test passed: ${o.message}`:`Provider "${i}" test failed: ${o.message}; manual configuration can continue.`,success:!0,data:{providerTest:{profile:i}}}}async function _s(e){return{ok:!0,message:`Profile fields are valid; no endpoint probe configured.`}}function vs(e,t=[]){return ys(e,t)?`valid`:`incomplete`}function ys(e,t){if(typeof e.currentProvider==`string`){let n=e.providers?.[e.currentProvider];return bs(n?.type,n,t)}return!!(e.provider&&bs(e.provider.name,e.provider,t))}function bs(e,t,n){if(!t)return!1;if(!e)return(0,c.hasUsableSecretReference)(t.apiKey);let r=(0,c.findProviderDefinition)(n,e);if(r===void 0)return!1;let i=(0,c.getProviderCredentialRequirement)(r);return i===void 0?!0:xs(t,r,i)}function xs(e,t,n){return n.anyOf.some(n=>(0,c.hasUsableSecretReference)(Ss(n,e,t)))}function Ss(e,t,n){return t[e]??n.defaults?.[e]}function Cs(e,t=[]){if(!(0,m.existsSync)(e))return`missing`;try{let n=(0,m.readFileSync)(e,`utf8`).trim();return n.length===0?`incomplete`:vs(JSON.parse(n),t)}catch{return`corrupt`}}function ws(e,t=new N){return e.reduce((e,n)=>{let r=Ts(n,t);return r===void 0?e:Es(e,r)},{})}function Ts(e,t){if(!t.existsSync(e))return;let n=t.readFileSync(e,`utf8`);try{return JSON.parse(n)}catch(t){throw new Hi(e,t instanceof Error?t.message:String(t))}}function Es(e,t){return{...e,...t,provider:e.provider!==void 0||t.provider!==void 0?{...e.provider,...t.provider}:void 0,providers:e.providers!==void 0||t.providers!==void 0?Ds(e.providers,t.providers):void 0}}function Ds(e,t){let n={...e??{}};for(let[e,r]of Object.entries(t??{}))n[e]={...n[e],...r};return n}function Os(e,t,n){let r=t??e.currentProvider;if(r!==void 0){let t=e.providers?.[r];if(t===void 0)throw Error(`Provider profile "${r}" was not found in providers`);if(!t.type)throw Error(`Provider profile "${r}" is missing type`);return(0,l.normalizeProviderConfig)({name:t.type,model:t.model,apiKey:t.apiKey,baseURL:t.baseURL,timeout:t.timeout,options:t.options},n)}let i=e.provider;if(i?.name)return(0,l.normalizeProviderConfig)({name:i.name,model:i.model,apiKey:i.apiKey,baseURL:i.baseURL,timeout:i.timeout,options:i.options},n)}function ks(){return process.env.HOME??process.env.USERPROFILE??`/`}function As(e){let t=ks();return[(0,g.join)(t,`.robota`,`settings.json`),(0,g.join)(t,`.claude`,`settings.json`),(0,g.join)(e,`.robota`,`settings.json`),(0,g.join)(e,`.robota`,`settings.local.json`),(0,g.join)(e,`.claude`,`settings.json`),(0,g.join)(e,`.claude`,`settings.local.json`)]}function js(e,t={}){let n=t.settingsPaths??As(e),r=Ls(n)??n[0];if(r===void 0)throw Error(`No settings path available for provider update`);return r}function X(e){return W(e)}function Ms(e,t,n={}){let r=us(X(e),cs(t,n));return G(e,r),r}function Ns(e,t,n={}){let r=X(e),i=r.providers?.[t]!==void 0,a=n.knownProviders?.[t]!==void 0,o=i||a?{...r,currentProvider:t}:as(r,t);return G(e,o),o}function Ps(e,t,n={}){let r=n.settingsPaths??As(e),i=ws(r),a=n.providerOverride??i.currentProvider;if(typeof a!=`string`)throw Error(`Cannot update model: no active provider profile. Set "currentProvider" in settings.`);return Fs(r,a,t)}function Fs(e,t,n){let r=Is(e,t)??e[0];if(r===void 0)throw Error(`No settings path available for model update`);let i=X(r),a=i.providers??{},o=a[t]??{},s={...i,providers:{...a,[t]:{...o,model:n}}};return G(r,s),{settingsPath:r,settings:s,profileName:t}}function Is(e,t){for(let n=e.length-1;n>=0;--n){let r=e[n];if(r!==void 0&&X(r).providers?.[t]!==void 0)return r}}function Ls(e){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n!==void 0&&X(n).currentProvider!==void 0)return n}}var Rs=class extends Error{constructor(e){super(e),this.name=`ProviderConfigError`}};function zs(e){return ws(As(e))}function Bs(e,t=process.env){for(let n of e){let e=n.defaults;if(e?.apiKey===void 0||e.model===void 0||!(0,c.isEnvReference)(e.apiKey))continue;let r=e.apiKey.slice(c.ENV_REFERENCE_PREFIX.length).trim();if(r.length===0)continue;let i=t[r];if(!(i===void 0||i.length===0))return{name:n.type,model:e.model,apiKey:i,...e.baseURL!==void 0&&{baseURL:e.baseURL},...e.timeout!==void 0&&{timeout:e.timeout},...e.options!==void 0&&{options:e.options},source:`env-default`,sourceEnvVar:r}}}function Vs(e,t={}){let n=Os(zs(e),t.providerOverride,t.providerDefinitions??[]);if(n!==void 0)return n;let r=Bs(t.providerDefinitions??[],t.env);if(r!==void 0)return r;throw new Rs("No provider configuration found. Run `robota` to set up.")}function Hs(e,t,n={}){let r=n.providerDefinitions??[],i=Vs(e,{...n,providerDefinitions:r}),a=t??i.model;return(0,l.createProviderFromConfig)({...i,model:a},r)}var Us=class{name=`plugin`;plugins;constructor(e){this.plugins=e}getCommands(){let e=[];for(let t of this.plugins){for(let n of t.skills){let r=n.name.includes(`@`)?n.name.split(`@`)[0]:n.name;e.push({name:r,description:`(${t.manifest.name}) ${n.description}`,source:`plugin`,skillContent:n.skillContent,pluginDir:t.pluginDir})}for(let n of t.commands)e.push({name:n.name,description:n.description,source:`plugin`,skillContent:n.skillContent,pluginDir:t.pluginDir})}return e}};function Ws(e,t,n){let r=e;if(t!==void 0){let e=new Set(t);r=r.filter(t=>e.has(t.name))}if(n!==void 0){let e=new Set(n);r=r.filter(t=>!e.has(t.name))}return r}const Gs=f.AUTO_COMPACT_THRESHOLD,Ks=`autoCompactThreshold`;function qs(e){return e.getContextState()}function Js(e){return e.getAutoCompactThreshold()}function Ys(e){return e.getAutoCompactThresholdSource?.()??`session`}function Xs(e,t,n){if(e.setAutoCompactThreshold){e.setAutoCompactThreshold(t,n);return}let r=e.getSession();if(!r.setAutoCompactThreshold)throw Error(`Command host does not support changing auto-compact threshold.`);r.setAutoCompactThreshold(t)}function Zs(e,t){let n=ic(e);return n?(n.write({...n.read(),[Ks]:t}),!0):!1}function Qs(e){let t=ic(e);if(!t)return!1;let n={...t.read()};return delete n[Ks],t.write(n),!0}async function $s(e,t){let n=qs(e),r=e.getSession().getMessageCount();return await e.compactContext(t),{before:n,after:qs(e),beforeMessageCount:r,afterMessageCount:e.getSession().getMessageCount()}}function ec(e){return e.listContextReferences?.()??[]}async function tc(e,t){return e.addContextReference?e.addContextReference(t):{evicted:[],diagnostics:[`Command host does not support context reference additions.`]}}function nc(e,t){return e.removeContextReference?.(t)??{}}function rc(e){return e.clearContextReferences?.()??{removed:[]}}function ic(e){return e.getCommandHostAdapters?.().settings}function ac(e,t={}){let n=oc(e.type)??`provider`,r=new Set(t.existingProfileNames??[]);if(!r.has(n))return n;let i=2;for(;r.has(`${n}-${i}`);)i+=1;return`${n}-${i}`}function oc(e){let t=e?.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``);return t!==void 0&&t.length>0?t:void 0}function sc(e){return e.listCommands?.()??[]}function cc(e){return[`Available commands:`,...sc(e).flatMap(e=>{let t=e.displayName??e.name,n=`/${e.name}`,r=` ${(e.displayName?`${t} (${n})`:n).padEnd(32)} — ${e.description}`;return e.example?[r,` Example: ${e.example}`]:[r]})].join(`
96
+ `)}function lc(){return[{name:`list`,description:`List background tasks`,source:`background`},{name:`read`,description:`Read a background task log page`,source:`background`},{name:`cancel`,description:`Cancel a running background task`,source:`background`},{name:`close`,description:`Dismiss a terminal background task`,source:`background`}]}function uc(e){let t=e.promptPreview??e.commandPreview??``,n=e.unread?` unread`:``,r=e.currentAction?` (${e.currentAction})`:``,i=e.timeoutReason?` timeout=${e.timeoutReason}`:``,a=e.lastActivityAt?` lastActivityAt=${e.lastActivityAt}`:``,o=pc(e),s=t?` — ${t}`:``;return`${e.id} [${e.status}${n}${i}${a}${o}] ${e.kind}:${e.label}${r}${s}`}function dc(e){return e.length===0?`No background tasks.`:[`Background tasks:`,...e.map(e=>` ${uc(e)}`)].join(`
97
+ `)}function fc(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isNaN(t)?void 0:{offset:t}}function pc(e){let t=[];return e.worktreePath&&t.push(`worktree=${e.worktreePath}`),e.branchName&&t.push(`branch=${e.branchName}`),e.worktreeStatus&&t.push(`worktreeStatus="${mc(e.worktreeStatus)}"`),e.worktreeNextAction&&t.push(`next="${mc(e.worktreeNextAction)}"`),t.length===0?``:` ${t.join(` `)}`}function mc(e){let t=e.trim().replace(/\s+/g,` `);return t.length>160?`${t.slice(0,160)}...`:t}function hc(e,t){return e.listBackgroundTasks(t)}function gc(e,t,n){return e.readBackgroundTaskLog(t,n)}function _c(e,t,n){return e.cancelBackgroundTask(t,n)}function vc(e,t){return e.closeBackgroundTask(t)}const yc=[{code:`ko`,description:`Korean`},{code:`en`,description:`English`},{code:`ja`,description:`Japanese`},{code:`zh`,description:`Chinese`}];function bc(e=`language`){return yc.map(t=>({name:t.code,description:t.description,source:e}))}function xc(e){let t=e.trim().split(/\s+/)[0];return t!==void 0&&t.length>0?t:void 0}function Sc(e=`language`){return`Usage: ${e} <code> (e.g., ko, en, ja, zh)`}const Cc=[`plan`,`default`,`acceptEdits`,`bypassPermissions`];function wc(e=`mode`){return[{name:`plan`,description:`Plan only, no execution`,source:e},{name:`default`,description:`Ask before risky actions`,source:e},{name:`acceptEdits`,description:`Auto-approve file edits`,source:e},{name:`bypassPermissions`,description:`Skip all permission checks`,source:e}]}function Tc(e){let t=e.trim().split(/\s+/)[0];return t!==void 0&&t.length>0?t:void 0}function Ec(e){return Cc.includes(e)}function Dc(){return`Invalid mode. Valid: ${Cc.join(` | `)}`}function Oc(e){let t=e.getCommandHostAdapters?.().permissionMode;if(t!==void 0)return t;let n=e.getSession();return{getPermissionMode:()=>n.getPermissionMode(),setPermissionMode:e=>n.setPermissionMode(e),listSessionAllowedTools:()=>n.getSessionAllowedTools()}}function kc(e){return Oc(e).getPermissionMode()}function Ac(e,t){Oc(e).setPermissionMode(t)}function jc(e){return Oc(e).listSessionAllowedTools()}function Mc(e){return{mode:kc(e),sessionAllowed:jc(e)}}function Nc(e){let t=[`Permission mode: ${e.mode}`];return e.sessionAllowed.length>0?t.push(`Session-approved tools: ${e.sessionAllowed.join(`, `)}`):t.push(`No session-approved tools.`),t.join(`
98
+ `)}async function Pc(e,t,n){let r=[],i=[];e.getSession().setActivePresetId?.(t),n.permissionMode===void 0?i.push(`permissionMode`):(Ac(e,n.permissionMode),r.push(`permissionMode`));let a={...n.model!==void 0&&{model:n.model},...n.effort!==void 0&&{effort:n.effort},...n.temperature!==void 0&&{temperature:n.temperature},...n.maxOutputTokens!==void 0&&{maxOutputTokens:n.maxOutputTokens}};for(let e of[`model`,`effort`,`temperature`,`maxOutputTokens`])n[e]===void 0?i.push(e):r.push(e);return Object.keys(a).length>0&&await e.getSession().applyModelOptions?.(a),n.persona===void 0?i.push(`persona`):(e.applyPersona?.(n.persona),r.push(`persona`)),n.enabledCommandModules!==void 0||n.disabledCommandModules!==void 0?(e.applyCommandModuleSelection?.(n.enabledCommandModules,n.disabledCommandModules),r.push(`commandModules`)):i.push(`commandModules`),n.enableParallelSubagents===void 0?i.push(`enableParallelSubagents`):(e.getSession().setParallelSubagentsEnabled?.(n.enableParallelSubagents),r.push(`enableParallelSubagents`)),n.selfVerification===void 0?i.push(`selfVerification`):(e.applySelfVerification?.(n.selfVerification),r.push(`selfVerification`)),{applied:r,skipped:i}}const Fc={enabled:!0,gitBranch:!0};function Ic(e=`statusline`){return[{name:`on`,description:`Show the status line`,source:e},{name:`off`,description:`Hide the status line`,source:e},{name:`reset`,description:`Restore default status-line fields`,source:e},{name:`git`,description:`Show or hide git branch field`,source:e}]}function Lc(e){return(e.enabled===void 0||typeof e.enabled==`boolean`)&&(e.gitBranch===void 0||typeof e.gitBranch==`boolean`)}function Rc(e){let t=e.statusline;return Bc(t)?{enabled:typeof t.enabled==`boolean`?t.enabled:Fc.enabled,gitBranch:typeof t.gitBranch==`boolean`?t.gitBranch:Fc.gitBranch}:{...Fc}}function zc(e,t){let n=W(e),r={...Rc(n),...t};return n.statusline=r,G(e,n),r}function Bc(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Vc(){return{type:`plugin-tui-requested`}}function Hc(){return{type:`plugin-registry-reload-requested`}}function Uc(e){return e.getCommandHostAdapters?.().plugin}function Wc(){return[{name:`manage`,description:`Open plugin manager`,source:`plugin-manager`},{name:`install`,description:`Install a plugin`,source:`plugin-manager`},{name:`uninstall`,description:`Uninstall a plugin`,source:`plugin-manager`},{name:`enable`,description:`Enable a plugin`,source:`plugin-manager`},{name:`disable`,description:`Disable a plugin`,source:`plugin-manager`},{name:`marketplace`,description:`Manage plugin marketplaces`,source:`plugin-manager`,subcommands:[{name:`add`,description:`Add marketplace source`,source:`plugin-manager`},{name:`remove`,description:`Remove marketplace source`,source:`plugin-manager`},{name:`update`,description:`Update marketplace source`,source:`plugin-manager`},{name:`list`,description:`List marketplace sources`,source:`plugin-manager`}]}]}function Gc(e){if(e.clearConversationHistory!==void 0){e.clearConversationHistory();return}e.getSession().clearHistory()}function Kc(e){let t=e.trim();return t.length>0?t:void 0}function qc(e){return{type:`session-renamed`,name:e}}function Jc(){return{type:`session-picker-requested`}}function Yc(){return{type:`session-exit-requested`}}function Xc(e){let t=e.getSession();return{sessionId:t.getSessionId(),messageCount:t.getMessageCount()}}function Zc(e){let t=e.validateCurrentSessionReplayLog?.();if(t!==void 0)return t;let n=e.getSession().getSessionId(),r=(0,g.join)(R(e.getCwd()).logs,`${n}.jsonl`),i=(0,f.loadSessionLogEntries)(r);return{logFile:r,entryCount:i.length,validation:(0,f.validateSessionReplayLogEntries)(i)}}function Qc(e){let t=e.validation.ok?`Session replay log is valid.`:`Session replay log has ${e.validation.issues.length} issue(s).`,n=[`Log: ${e.logFile}`,`Entries: ${e.entryCount}`];if(e.validation.ok)return[t,...n].join(`
99
+ `);let r=e.validation.issues.map((e,t)=>{let n=$c(e);return`${t+1}. ${e.code}${n}: ${e.message}`});return[t,...n,``,...r].join(`
100
+ `)}function $c(e){let t=[];return e.executionId!==void 0&&t.push(`execution=${e.executionId}`),e.round!==void 0&&t.push(`round=${e.round}`),e.toolCallId!==void 0&&t.push(`tool=${e.toolCallId}`),t.length>0?` (${t.join(`, `)})`:``}function el(e=`rewind`){return[{name:`list`,description:`List edit checkpoints`,source:e},{name:`inspect`,description:`Inspect captured files and restore plans`,source:e},{name:`restore`,description:`Restore code to a checkpoint`,source:e},{name:`code`,description:`Restore code to a checkpoint`,source:e},{name:`rollback`,description:`Rollback code through a checkpoint`,source:e}]}function tl(e){return e.listEditCheckpoints()}function nl(e,t){if(!e.inspectEditCheckpoint)throw Error(`Checkpoint inspection is not available in this command host.`);return e.inspectEditCheckpoint(t)}function rl(e,t){return e.restoreEditCheckpoint(t)}function il(e,t){return e.rollbackEditCheckpoint(t)}const al=[/\b(api[_-]?key|secret|token|password|private key)\b/i,/\b\d{3}-\d{2}-\d{4}\b/,/\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/,/주민등록|비밀번호|시크릿|토큰/u];function ol(e){return al.some(t=>t.test(e))}function sl(e){return(0,g.join)(e,`.robota`,`memory`)}function cl(){return{version:1,records:[]}}var ll=class{fs;path;now;constructor(e,t=()=>new Date,n=new N){this.fs=n,this.path=(0,g.join)(sl(e),`pending.json`),this.now=t}getPath(){return this.path}list(e){let t=this.read().records;return e?t.filter(t=>t.status===e):t}get(e){return this.read().records.find(t=>t.id===e)}upsert(e,t,n){let r=this.read(),i=this.now().toISOString(),a=r.records.findIndex(t=>t.id===e.id),o={...e,status:t,updatedAt:i,decisionReason:n};a>=0?r.records[a]={...r.records[a],...o}:r.records.push(o),this.write(r)}mark(e,t,n){let r=this.read(),i=r.records.findIndex(t=>t.id===e);if(i<0)throw Error(`Memory candidate not found: ${e}`);let a={...r.records[i],status:t,updatedAt:this.now().toISOString(),decisionReason:n};return r.records[i]=a,this.write(r),a}read(){if(!this.fs.existsSync(this.path))return cl();try{return{version:1,records:JSON.parse(this.fs.readFileSync(this.path,`utf8`)).records??[]}}catch{return cl()}}write(e){this.fs.mkdirSync((0,g.dirname)(this.path),{recursive:!0}),this.fs.writeFileSync(this.path,JSON.stringify(e,null,2),`utf8`)}};function ul(e=`memory`){return[{name:`list`,description:`List project memory topics`,source:e},{name:`show`,description:`Show project memory index or a topic`,source:e},{name:`add`,description:`Save durable project memory`,source:e},{name:`pending`,description:`List pending memory candidates`,source:e},{name:`approve`,description:`Approve a pending memory candidate`,source:e},{name:`reject`,description:`Reject a pending memory candidate`,source:e},{name:`used`,description:`Show memory references used in the current turn`,source:e}]}function dl(e,t){return new So(e,t)}function fl(e,t){return new ll(e,t)}function pl(e,t){let n=e.getCwd();return{project:dl(n,t),pending:fl(n,t)}}function ml(e){return ho(e)}function hl(e){return ol(e)}function gl(e){return e.getUsedMemoryReferences()}function _l(e,t,n=()=>new Date){e.recordMemoryEvent({...t,at:n().toISOString()})}function vl(e,t,n){let r=t?t.split(/\s+/):[],i=e;return i=i.replace(/\$ARGUMENTS\[(\d+)]/g,(e,t)=>r[Number(t)]??``),i=i.replace(/\$ARGUMENTS/g,t),i=i.replace(/\$(\d)(?!\d|\w|\[)/g,(e,t)=>r[Number(t)]??``),i=i.replace(/\$\{CLAUDE_SESSION_ID}/g,n?.sessionId??``),i=i.replace(/\$\{CLAUDE_SKILL_DIR}/g,n?.skillDir??``),i}async function yl(e,t){let n=/!`([^`]+)`/g;if(!n.test(e))return e;n.lastIndex=0;let r=e,i,a=[];for(;(i=n.exec(e))!==null;)a.push({full:i[0],command:i[1]});for(let{full:e,command:n}of a){let i=``;if(t)try{i=t(n)}catch{i=``}r=r.replace(e,i)}return r}async function bl(e,t,n,r){return e.skillContent?vl(await yl(e.skillContent,n.shellExec),t,r):null}async function xl(e,t,n,r){let i=await bl(e,t,n,r);if(i){let n=t||e.description;return`<skill name="${e.name}">\n${i}\n</skill>\n\nExecute the "${e.name}" skill: ${n}`}return`Use the "${e.name}" skill: ${t||e.description}`}async function Sl(e,t,n,r){if(e.context===`fork`){if(!n.runInFork)throw Error(`Fork execution is not available. Agent runtime deps may not be initialized.`);let i=await bl(e,t,n,r)??`Use the "${e.name}" skill: ${t||e.description}`,a={};return e.agent&&(a.agent=e.agent),e.allowedTools&&(a.allowedTools=e.allowedTools),{mode:`fork`,result:await n.runInFork(i,a)}}return{mode:`inject`,prompt:await xl(e,t,n,r)}}function Cl(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function wl(e){return e.trim().replace(/^\/+/,``).split(/\s+/)[0]??``}function Tl(e,t){let n=t.trim();return n.length>0?`${e} ${n}`:e}function El(e){if(!e?.startsWith(`/`))return;let t=e.slice(1).trim().split(/\s+/)[0];return t&&t.length>0?t:void 0}var Dl=class{getSession;getSessionId;onSubmit;onApplyResult;recordSkillActivation;runSkillInFork;onForkSkill;onBlockingCommand;shellExec;commandExecutor;allCommandModules;skillCommandSource;commandHostAdapters;commandInvocationSource=`user`;constructor(e,t,n,r,i,a,o,s,c,l,u,d){this.getSession=r,this.getSessionId=i,this.onSubmit=a,this.onApplyResult=o,this.recordSkillActivation=s,this.runSkillInFork=c,this.onForkSkill=l,this.onBlockingCommand=u,this.shellExec=d,this.allCommandModules=e,this.commandExecutor=new $o(e.flatMap(e=>e.systemCommands??[])),this.skillCommandSource=new Vi(t),this.commandHostAdapters=n}reapplyCommandModuleSelection(e,t){let n=Ws(this.allCommandModules,e,t);this.commandExecutor.replaceCommands(n.flatMap(e=>e.systemCommands??[]))}getCommandInvocationSource(){return this.commandInvocationSource}getCommandHostAdapters(){return this.commandHostAdapters??{}}listCommands(){return this.commandExecutor.listCommands().map(e=>({name:e.name,...e.displayName===void 0?{}:{displayName:e.displayName},description:e.description,...e.example===void 0?{}:{example:e.example}}))}listSkills(){return this.skillCommandSource.getCommands().map(e=>({name:e.name,description:e.description,source:e.source,modelInvocable:e.disableModelInvocation!==!0,userInvocable:e.userInvocable!==!1,...e.argumentHint===void 0?{}:{argumentHint:e.argumentHint},...e.context===void 0?{}:{context:e.context},...e.agent===void 0?{}:{agent:e.agent}}))}listModelInvocableCommands(){return this.commandExecutor.listModelInvocableCommands().map(e=>({name:e.name,description:e.description}))}findSkillCommand(e){let t=Cl(e);return this.skillCommandSource.getCommands().find(e=>e.name.toLowerCase()===t.toLowerCase())}async executeCommand(e,t){let n=wl(e),r=this.commandExecutor.getCommand(n),i=t.trim();if(!r){let e=this.findSkillCommand(n),t=this.commandExecutor.getCommand(`skills`);return!e||!t?null:this.executeCommandWithSource(`user`,t,Tl(e.name,i))}return this.executeCommandWithSource(`user`,r,i)}async executeCommandWithSource(e,t,n){let r=this.commandInvocationSource;this.commandInvocationSource=e;try{return t.lifecycle===`blocking`?this.onBlockingCommand(()=>this.executeForegroundCommand(t,n)):await this.commandExecutor.executeCommand(t,this.getSession(),n)}finally{this.commandInvocationSource=r}}async executeModelCommand(e,t){let n=this.commandInvocationSource;this.commandInvocationSource=`model`;try{return await this.commandExecutor.executeModelInvocable(e,this.getSession(),t)}finally{this.commandInvocationSource=n}}async executeSkillCommandByName(e,t,n){let r=this.findSkillCommand(e);if(!r)return null;if(n.invocationSource===`model`){if(r.disableModelInvocation===!0)return{success:!1,message:`Skill is not model-invocable: ${r.name}`};let e=await this.executeSkillWithActivation(r,t,`model-tool`);return{success:!0,message:`Skill activated: ${r.name}`,data:{skill:r.name,mode:e.mode,...e.prompt===void 0?{}:{prompt:e.prompt},...e.result===void 0?{}:{result:e.result}}}}return await this.executeUserResolvedSkillCommand(r,t,n.displayInput,n.rawInput,`user-slash`),{success:!0,message:``,data:{skill:r.name,sessionExecution:!0},effects:[{type:`session-execution-started`}]}}async executeUserResolvedSkillCommand(e,t,n,r,i){if(e.userInvocable===!1)throw Error(`Skill is not user-invocable: ${e.name}`);let a=El(r);if(e.context===`fork`)return this.onForkSkill(e,t,n,a,i);let o=await this.executeSkillWithActivation(e,t,i,a);return o.mode===`inject`?(o.prompt&&await this.onSubmit(o.prompt,n,r),o):(await this.onApplyResult(o.result??`(empty response)`),o)}async executeSkillWithActivation(e,t,n,r){this.emitSkillActivation(e,n,`started`,r);try{let i=await Sl(e,t,{runInFork:(e,t)=>this.runSkillInFork(e,t),...this.shellExec?{shellExec:this.shellExec}:{}},{sessionId:this.getSessionId()});return this.emitSkillActivation(e,n,`completed`,r,{appendHistory:!1}),i}catch(t){let i=t instanceof Error?t:Error(String(t));throw this.emitSkillActivation(e,n,`failed`,r,{error:i.message}),i}}emitSkillActivation(e,t,n,r,i={}){let a=kr({skill:e,invocation:t,status:n,...r===void 0?{}:{qualifiedName:r},...i.error===void 0?{}:{error:i.error}});this.recordSkillActivation(a,i.appendHistory??n!==`completed`)}async executeForegroundCommand(e,t){try{return await this.commandExecutor.executeCommand(e,this.getSession(),t)}catch(e){return{success:!1,message:`Error: ${e instanceof Error?e.message:String(e)}`}}}};function Ol(){let e=(0,g.join)((0,_.homedir)(),`.robota`,`org-policy.json`);if(!(0,m.existsSync)(e))return null;try{let t=(0,m.readFileSync)(e,`utf8`);return JSON.parse(t)}catch{return null}}function kl(e,t){return`${e}${t?`\nContact your administrator: ${t}`:``}`}function Al(e){return e?!e.startsWith(`$ENV:`):!1}var jl=class extends Xt{session=null;listeners=new Map;initialized=!1;initPromise=null;sessionStore;sessionName;cwd;pendingRestoreMessages=null;resumeSessionId;forkSession;autoCompactThresholdSource=`default`;shutdownPromise=null;sandboxClient;sandboxSnapshotId;agentsFileEntries=[];claudeFileEntries=[];rebuildSystemMessage=null;providerDefinitions=[];orgPolicy=null;bgTracker;histTracker;skillRouter;execCtrl;constructor(e){super(),this.sessionStore=e.sessionStore,this.sessionName=e.sessionName,this.cwd=(`cwd`in e?e.cwd:void 0)??``,this.resumeSessionId=e.resumeSessionId,this.forkSession=e.forkSession??!1,this.sandboxClient=`sandboxClient`in e?e.sandboxClient:void 0,this.sandboxSnapshotId=`sandboxSnapshotId`in e?e.sandboxSnapshotId:void 0;let t=this.cwd,n=null;`session`in e&&e.session&&t&&(n=new z({cwd:t})),this.bgTracker=new It(()=>this.getBackgroundTaskManager(),(e,t)=>this.execCtrl.emitExecutionWorkspaceUpdated(e,t),e=>this.emit(`background_task_event`,e),e=>this.emit(`background_job_group_event`,e),()=>this.persistCurrentSession(),(e,t)=>this.requestWakeup(e,t),e=>this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(e)))),this.histTracker=new Nr(t,()=>this.getSessionOrThrow().getSessionId(),()=>this.execCtrl.executing,()=>this.persistCurrentSession(),e=>this.emit(`skill_activation`,e),e=>this.emit(`memory_event`,e),n);let r=[...`commandModules`in e?e.commandModules??[]:[]],i=`commandHostAdapters`in e?e.commandHostAdapters:void 0,a=`shellExec`in e?e.shellExec:void 0;this.skillRouter=new Dl(r,t,i,()=>this,()=>this.session?.getSessionId()??``,(e,t,n)=>this.submit(e,t,n),e=>this.execCtrl.applyForkSkillResult(e),(e,t)=>this.histTracker.recordSkillActivationEvent(e,t),(e,t)=>dr(e,t,this.getSessionOrThrow()),(e,t,n,r,i)=>this.execCtrl.executeForkSkillCommand(e,t,n,r,i,(e,t,n)=>this.submit(e,t,n)),e=>this.execCtrl.executeForegroundCommand(e,(e,t,n)=>this.submit(e,t,n)),a),this.execCtrl=new lr(this.histTracker,this.skillRouter,{getSession:()=>this.session,getSessionOrThrow:()=>this.getSessionOrThrow(),getCwd:()=>this.getCwd(),getContextState:()=>this.getContextState(),getExecutionWorkspaceSnapshot:()=>this.getExecutionWorkspaceSnapshot(),emit:(e,...t)=>this.emit(e,...t),persistSession:()=>this.persistCurrentSession()}),`providerDefinitions`in e&&(this.providerDefinitions=e.providerDefinitions??[]),`orgPolicy`in e&&(this.orgPolicy=e.orgPolicy??null);let o=this.configureInjectedSession(e);this.restoreSessionRecordIfNeeded(e),this.startAsyncInitializationIfNeeded(e,o),this.initialized&&this.bgTracker.subscribe(this.session),this.initialized&&this.persistCurrentSession()}configureInjectedSession(e){return`session`in e&&e.session?(this.session=e.session,this.autoCompactThresholdSource=`session`,this.initialized=!0,!0):!1}restoreSessionRecordIfNeeded(e){if(!e.resumeSessionId||!this.sessionStore)return;let t=Rr(this.sessionStore,e.resumeSessionId,this.session);this.histTracker.restoreState({history:t.history,memoryEvents:t.memoryEvents,usedMemoryReferences:t.usedMemoryReferences,contextReferences:t.contextReferences,skillActivationEvents:t.skillActivationEvents}),t.sessionName&&(this.sessionName=t.sessionName),this.bgTracker.restoreState({tasks:t.backgroundTasks,taskEvents:t.backgroundTaskEvents,groups:t.backgroundJobGroups,groupEvents:t.backgroundJobGroupEvents}),this.pendingRestoreMessages=t.pendingRestoreMessages,this.sandboxSnapshotId=this.forkSession?void 0:t.sandboxSnapshotId,this.session&&t.pendingRestoreMessages===null&&(this.session.syncContextFromHistory(),this.emit(`context_update`,this.getContextState()))}startAsyncInitializationIfNeeded(e,t){if(t)return;let n=e;this.initPromise=this.initializeAsync(n)}async initializeAsync(e){let t=await Uo(e,{sandboxSnapshotId:this.sandboxSnapshotId,resumeSessionId:this.resumeSessionId,pendingRestoreMessages:this.pendingRestoreMessages,onTextDelta:e=>this.execCtrl.handleTextDelta(e),onContextUpdate:e=>this.emit(`context_update`,e),onCompactEvent:e=>this.execCtrl.handleCompactEvent(e),onToolExecution:e=>this.execCtrl.handleToolExecution(e),executeModelCommand:(e,t)=>this.executeModelCommand(e,t),isModelCommandInvocable:e=>this.skillRouter.commandExecutor.isModelInvocable(e),commandDescriptors:this.skillRouter.commandExecutor.listModelInvocableCommands(),setEditCheckpointStore:e=>this.histTracker.setEditCheckpointStore(e)});this.session=t.session,this.agentsFileEntries=t.agentsFileEntries,this.claudeFileEntries=t.claudeFileEntries,this.rebuildSystemMessage=t.rebuildSystemMessage,this.autoCompactThresholdSource=t.autoCompactThresholdSource,this.histTracker.recordSystemContextFiles([...t.agentsFileEntries,...t.claudeFileEntries]),this.pendingRestoreMessages=null,this.initialized=!0,this.bgTracker.subscribe(this.session),this.persistCurrentSession(),this.emit(`context_update`,this.getContextState())}async ensureInitialized(){!this.initialized&&this.initPromise&&await this.initPromise}getSessionOrThrow(){if(!this.session)throw Error(`InteractiveSession not initialized. Call submit() or await initialization.`);return this.session}getCwd(){if(!this.cwd)throw Error(`cwd is not set — provide cwd in session options`);return this.cwd}get sessionId(){return this.session?.getSessionId()??``}on(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t)}off(e,t){this.listeners.get(e)?.delete(t)}emit(e,...t){let n=this.listeners.get(e);if(n)for(let e of n)e(...t)}async submit(e,t,n,r={}){if(await this.ensureInitialized(),this.execCtrl.shuttingDown)throw Error(`Interactive session is shutting down.`);if(this.execCtrl.executing){this.execCtrl.pendingPrompt=e,this.execCtrl.pendingDisplayInput=t,this.execCtrl.pendingRawInput=n,this.execCtrl.pendingTurnOptions=r;return}await this.execCtrl.executePrompt(e,t,n,this.agentsFileEntries,this.claudeFileEntries,this.rebuildSystemMessage,(e,t)=>{this.agentsFileEntries=e,this.claudeFileEntries=t,this.histTracker.recordSystemContextFiles([...e,...t])},(e,t,n,r)=>this.submit(e,t,n,r),r)}requestWakeup(e,t){this.execCtrl.shuttingDown||this.execCtrl.wakeTaskIds.has(t)||(this.execCtrl.wakeTaskIds.add(t),this.submit(e,void 0,void 0,{turnSource:`agent-wakeup`,wakeTaskId:t}))}abort(){this.execCtrl.clearPendingQueue(),this.session?.abort()}shutdown(e={}){return this.shutdownPromise?this.shutdownPromise:(this.execCtrl.shuttingDown=!0,this.shutdownPromise=(async()=>{await this.ensureInitialized(),this.execCtrl.clearPendingQueue();let t=this.session;t?.abort(),await this.getBackgroundTaskManager()?.shutdown(e.message??`Session shutdown`),this.bgTracker.dispose(),await this.captureSandboxSnapshot(),this.persistCurrentSession(),await t?.shutdown({reason:e.reason??`other`}),this.listeners.clear()})(),this.shutdownPromise)}get isInitialized(){return this.initialized}getAutoCompactThresholdSource(){return this.autoCompactThresholdSource}getAutoCompactThreshold(){return this.getSessionOrThrow().getAutoCompactThreshold()}getSession(){return this.getSessionOrThrow()}applyPersona(e){if(this.rebuildSystemMessage===null)return;let t=this.agentsFileEntries.map(e=>e.content).join(`
101
+
102
+ `),n=this.claudeFileEntries.map(e=>e.content).join(`
103
+
104
+ `),r=this.rebuildSystemMessage(t,n,{persona:e});this.getSessionOrThrow().updateSystemMessage(r)}applySelfVerification(e){if(this.rebuildSystemMessage===null)return;let t=this.agentsFileEntries.map(e=>e.content).join(`
105
+
106
+ `),n=this.claudeFileEntries.map(e=>e.content).join(`
107
+
108
+ `),r=this.rebuildSystemMessage(t,n,{selfVerification:e});this.getSessionOrThrow().updateSystemMessage(r)}applyCommandModuleSelection(e,t){this.skillRouter.reapplyCommandModuleSelection(e,t)}getAgentJobCapability(){return this}setAutoCompactThreshold(e,t=`session`){this.getSessionOrThrow().setAutoCompactThreshold(e),this.autoCompactThresholdSource=t,this.emit(`context_update`,this.getContextState()),this.persistCurrentSession()}clearConversationHistory(){this.getSessionOrThrow().clearHistory(),this.histTracker.clearHistory(),this.persistCurrentSession(),this.emit(`context_update`,this.getContextState())}getName(){return this.sessionName}attachTransport(e){e.attach(this)}setName(e){if(this.sessionName=e,this.sessionStore&&this.session)try{let t=this.getSessionOrThrow().getSessionId(),n=this.sessionStore.load(t);n&&(n.name=e,n.updatedAt=new Date().toISOString(),this.sessionStore.save(n))}catch{}}getBackgroundTaskManager(){if(this.session)return Re(this.session)??j(this.session)?.backgroundTaskManager}async captureSandboxSnapshot(){if(this.sandboxClient?.snapshot)try{this.sandboxSnapshotId=await this.sandboxClient.snapshot()}catch(e){let t=e instanceof Error?e:Error(String(e));this.histTracker.append((0,c.messageToHistoryEntry)((0,c.createSystemMessage)(`Sandbox snapshot error: ${t.message}`))),this.emit(`error`,t)}}persistCurrentSession(){if(!this.sessionStore||!this.session)return;let e=this.bgTracker.getState(),t=this.histTracker.getState();Wo(this.sessionStore,this.session,this.sessionName,this.cwd??``,t.history,{tasks:e.tasks,events:e.taskEvents,groups:e.groups,groupEvents:e.groupEvents},{events:t.memoryEvents,usedReferences:t.usedMemoryReferences},{events:t.skillActivationEvents},{references:t.contextReferences},{snapshotId:this.sandboxSnapshotId})}async switchProvider(e){let t=this.getSessionOrThrow(),n=this.getCwd(),r=Vs(n,{providerOverride:e,providerDefinitions:this.providerDefinitions}),i=Hs(n,void 0,{providerOverride:e,providerDefinitions:this.providerDefinitions});t.swapProvider(i,r.model)}async executeCommand(e,t){if(this.orgPolicy?.blockedCommands?.includes(e))return{message:kl(`Command /${e} is blocked by your organization policy.`,this.orgPolicy.adminContact),success:!1};let n=await super.executeCommand(e,t);if(n===null)return null;let r=n.effects?.find(e=>e.type===`provider-hot-swap-requested`);if(r){let{orgPolicy:e}=this;return e?.allowedProviders&&!e.allowedProviders.includes(r.profileName)?{message:kl(`Provider "${r.profileName}" is not allowed by your organization policy. Allowed: ${e.allowedProviders.join(`, `)}.`,e.adminContact),success:!1}:(await this.switchProvider(r.profileName),{...n,effects:n.effects?.filter(e=>e.type!==`provider-hot-swap-requested`)})}return n}};function Ml(e,t=new N){let n=R(e);return new Ll(n.sessions,n.logs,t)}function Nl(e=new N){return new Ll(hr().sessions,void 0,e)}function Pl(e,t){return(e?.list()??[]).filter(e=>e.cwd===t).sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()).map(e=>({id:e.id,...e.name===void 0?{}:{name:e.name},cwd:e.cwd,updatedAt:e.updatedAt,messageCount:e.messages.length,preview:Rl(e.messages)}))}function Fl(e,t){return Pl(e,t)[0]?.id}function Il(e,t){return(e?.list()??[]).find(e=>e.id===t||e.name===t)?.id}var Ll=class{store;logsDir;fs;constructor(e,t,n=new N){this.store=new f.SessionStore(e),this.logsDir=t,this.fs=n}save(e){this.store.save(zl(e))}load(e){let t=this.store.load(e);return t===void 0?this.loadFromReplayLog(e):Bl(t)}list(){let e=this.store.list().map(Bl),t=new Set(e.map(e=>e.id));for(let n of this.listReplayLogRecords())t.has(n.id)||e.push(n);return e.sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime())}delete(e){this.store.delete(e)}loadFromReplayLog(e){if(!this.logsDir)return;let t=(0,f.replaySessionLogEntries)((0,f.loadSessionLogEntries)((0,g.join)(this.logsDir,`${e}.jsonl`)));if(!t.sessionId||t.messages.length===0)return;let n=t.backgroundTaskEvents,r=t.backgroundJobGroupEvents;return{id:t.sessionId,cwd:t.cwd??``,createdAt:t.createdAt??t.updatedAt??new Date(0).toISOString(),updatedAt:t.updatedAt??t.createdAt??new Date(0).toISOString(),messages:t.messages,history:t.history,backgroundTasks:Vl(n),backgroundTaskEvents:n,backgroundJobGroups:Ul(r),backgroundJobGroupEvents:r,skillActivationEvents:[],memoryEvents:t.memoryEvents}}listReplayLogRecords(){return!this.logsDir||!this.fs.existsSync(this.logsDir)?[]:this.fs.readdirSync(this.logsDir).filter(e=>e.endsWith(`.jsonl`)).map(e=>this.loadFromReplayLog(e.slice(0,-6))).filter(e=>e!==void 0)}};function Rl(e){for(let t of[...e].reverse())if(t.role===`assistant`&&typeof t.content==`string`)return t.content.replace(/[\n\r]+/g,` `).trim();return``}function zl(e){return{...e}}function Bl(e){return{id:e.id,...e.name===void 0?{}:{name:e.name},cwd:e.cwd,createdAt:e.createdAt,updatedAt:e.updatedAt,messages:e.messages,...e.history===void 0?{}:{history:e.history},...e.systemPrompt===void 0?{}:{systemPrompt:e.systemPrompt},...e.toolSchemas===void 0?{}:{toolSchemas:e.toolSchemas},...e.backgroundTasks===void 0?{}:{backgroundTasks:e.backgroundTasks},...e.backgroundTaskEvents===void 0?{}:{backgroundTaskEvents:e.backgroundTaskEvents},...e.backgroundJobGroups===void 0?{}:{backgroundJobGroups:e.backgroundJobGroups},...e.backgroundJobGroupEvents===void 0?{}:{backgroundJobGroupEvents:e.backgroundJobGroupEvents},...e.skillActivationEvents===void 0?{}:{skillActivationEvents:e.skillActivationEvents},...e.memoryEvents===void 0?{}:{memoryEvents:e.memoryEvents},...e.usedMemoryReferences===void 0?{}:{usedMemoryReferences:e.usedMemoryReferences},...e.contextReferences===void 0?{}:{contextReferences:e.contextReferences},...e.sandboxSnapshotId===void 0?{}:{sandboxSnapshotId:e.sandboxSnapshotId}}}function Vl(e){let t=new Map;for(let n of e){let e=Hl(n);e&&t.set(e.id,e)}return[...t.values()]}function Hl(e){switch(e.type){case`background_task_created`:case`background_task_started`:case`background_task_updated`:case`background_task_completed`:case`background_task_failed`:case`background_task_cancelled`:return e.task;default:return}}function Ul(e){let t=new Map;for(let n of e)t.set(n.group.id,n.group);return[...t.values()]}function Wl(e){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).slice(0,60)}async function Gl(e,t){let n=t.slice(0,200),r=await e.chat([(0,c.createSystemMessage)(`You generate short session titles. Respond with ONLY a 3-5 word lowercase-hyphenated title (e.g. refactor-auth-middleware). No explanation, no punctuation, no quotes.`),(0,c.createUserMessage)(n)],{maxTokens:20}),i=Wl(typeof r.content==`string`?r.content:``);return!i||i.length<3?Wl(t):i}function Kl(e){let t=new jl({cwd:e.cwd??process.cwd(),provider:e.provider,permissionMode:e.permissionMode??`bypassPermissions`,maxTurns:e.maxTurns,permissionHandler:e.permissionHandler,additionalTools:e.additionalTools,...e.responseFormat?{responseFormat:e.responseFormat}:{}});return e.onTextDelta&&t.on(`text_delta`,e.onTextDelta),async e=>new Promise((n,r)=>{let i=e=>{s(),n(e.response)},a=e=>{s(),n(e.response)},o=e=>{s(),r(e)},s=()=>{t.off(`complete`,i),t.off(`interrupted`,a),t.off(`error`,o)};t.on(`complete`,i),t.on(`interrupted`,a),t.on(`error`,o),t.submit(e).catch(e=>{s(),r(e instanceof Error?e:Error(String(e)))})})}const ql=[`preferences`,`view-state`,`memory-projections`,`task-associations`,`workflow-metadata`,`inspection-index`],Jl=[{category:`preferences`,purpose:`User-local UI and display preferences.`,mayExecuteCommands:!1},{category:`view-state`,purpose:`Last selected panels, filters, and navigation state.`,mayExecuteCommands:!1},{category:`memory-projections`,purpose:`Inspectable local memory item projections and user choices.`,mayExecuteCommands:!1},{category:`task-associations`,purpose:`User-local associations between sessions, tasks, and background items.`,mayExecuteCommands:!1},{category:`workflow-metadata`,purpose:`Transparent workflow metadata that is not repo-owned.`,mayExecuteCommands:!1},{category:`inspection-index`,purpose:`Category and item summaries for user inspection and deletion.`,mayExecuteCommands:!1}];function Yl(e){return e.toISOString()}function Xl(e,t){if(t.trim().length===0)throw Error(`${e} must not be empty.`);if(!g.default.isAbsolute(t))throw Error(`${e} must be an absolute path: ${t}`)}function Zl(){return process.env.HOME??(0,_.homedir)()}function Ql(e,t){let n=g.default.relative(e,t);return n===``||!n.startsWith(`..`)&&!g.default.isAbsolute(n)}async function $l(e,t){let n=e;for(;g.default.dirname(n)!==n;)try{let r=await t.realpath(n),i=g.default.relative(n,e);return g.default.resolve(r,i)}catch{n=g.default.dirname(n)}try{return await t.realpath(n)}catch{return g.default.resolve(e)}}async function eu(e){let t=e.fsAsync??new P,n=g.default.resolve(e.activeRepositoryRoot);Xl(`activeRepositoryRoot`,n);let r=e.storageRoot===void 0?g.default.join(e.homeDir??Zl(),`.robota`):e.storageRoot;Xl(`userLocalStorageRoot`,r);let i=g.default.resolve(r),a=await $l(i,t);if(Ql(await $l(n,t),a))throw Error(`User-local storage root must be outside the active repository: ${i}`);return i}function tu(e,t){return g.default.join(e,t)}async function nu(e,t,n){let r=tu(e,t),i;try{i=await n.readdir(r,{withFileTypes:!0})}catch{return[]}return(await Promise.all(i.map(async i=>{let a=g.default.join(r,i.name),o=await n.stat(a),s=i.name;return{root:e,category:t,key:s,summary:`${t}/${s}`,source:`user-local-storage`,scope:`user`,storageLocation:a,createdAt:Yl(new Date(o.birthtimeMs)),lastUsedAt:Yl(new Date(o.mtimeMs)),enabled:!0,deleteAvailable:!0,disableAvailable:!1}}))).sort((e,t)=>e.key.localeCompare(t.key))}async function ru(e){let t=e.fsAsync??new P,n=await eu(e),r=g.default.resolve(e.activeRepositoryRoot),i=e.createDirectories??!0;return i&&await t.mkdir(n,{recursive:!0}),{root:n,activeRepositoryRoot:r,categories:await Promise.all(Jl.map(async e=>{let r=tu(n,e.category);i&&await t.mkdir(r,{recursive:!0});let a=await nu(n,e.category,t);return{category:e.category,purpose:e.purpose,mayExecuteCommands:e.mayExecuteCommands,storageLocation:r,itemCount:a.length,items:a}})),generatedAt:Yl((e.now??(()=>new Date))())}}const iu=[`view-preference`,`last-visible-cwd`,`background-selection`,`task-association`,`display-preference`,`inspection-choice`],au=`.json`,ou=/^[a-z0-9][a-z0-9._-]*$/u,su={"view-preference":`May affect UI panel, filter, density, or sorting display/navigation only.`,"last-visible-cwd":`May display or preselect an already visible workspace context only.`,"background-selection":`May restore the selected background entry in local UI only.`,"task-association":`May group visible tasks by a local association only.`,"display-preference":`May affect local text wrapping, compactness, or visibility only.`,"inspection-choice":`May affect inspection display choices only.`};function cu(e){return e.toISOString()}function lu(e){return iu.includes(e)}function uu(e){if(!lu(e))throw Error(`Unsupported user-local memory category: ${e}`);return e}function du(e,t){let n=t.trim();if(n.length===0)throw Error(`${e} must not be empty.`);if(n.length>80||!ou.test(n))throw Error(`${e} must use lowercase letters, numbers, dots, underscores, or hyphens: ${t}`);return n}function fu(e,t,n){let r=t.trim().replace(/\s+/g,` `);if(r.length===0)throw Error(`${e} must not be empty.`);return r.length>n?r.slice(0,n):r}function pu(e){return fu(`value`,e,240)}function mu(e,t){return`${e}__${t}${au}`}async function hu(e){let t=await eu(e);return{root:t,memoryRoot:g.default.join(t,`memory-projections`)}}function gu(e,t){let n=JSON.parse(e),r=Z(n,`category`);if(n.schemaVersion!==1)throw Error(`Unsupported user-local memory schema at ${t}`);return{schemaVersion:1,category:uu(r),key:Z(n,`key`),value:Z(n,`value`),summary:Z(n,`summary`),source:Z(n,`source`),scope:Z(n,`scope`),createdAt:Z(n,`createdAt`),lastUsedAt:Z(n,`lastUsedAt`),enabled:_u(n,`enabled`)}}function Z(e,t){let n=e[t];if(typeof n!=`string`)throw Error(`Invalid user-local memory field: ${t}`);return n}function _u(e,t){let n=e[t];if(typeof n!=`boolean`)throw Error(`Invalid user-local memory field: ${t}`);return n}function vu(e,t,n){return{root:e,category:n.category,key:n.key,summary:n.summary,valueSummary:pu(n.value),source:n.source,scope:n.scope,storageLocation:t,createdAt:n.createdAt,lastUsedAt:n.lastUsedAt,enabled:n.enabled,displayNavigationRule:su[n.category],commandExecutionEffect:`none`,deleteAvailable:!0,disableAvailable:!0}}async function yu(e,t,n){return vu(e,t,gu(await n.readFile(t,`utf8`),t))}async function bu(e){let t=uu(e.category),n=du(`key`,e.key),{root:r,memoryRoot:i}=await hu(e);return{root:r,storageLocation:g.default.join(i,mu(t,n))}}async function xu(e){let t=e.fsAsync??new P,n=uu(e.category),r=du(`key`,e.key),i=fu(`summary`,e.summary,240),a=fu(`source`,e.source,80),o=fu(`scope`,e.scope??`user`,120),s=pu(e.value),c=cu((e.now??(()=>new Date))()),{root:l,memoryRoot:u}=await hu(e),d=g.default.join(u,mu(n,r)),f=c;try{f=gu(await t.readFile(d,`utf8`),d).createdAt}catch(e){if(e instanceof Error&&e.message.includes(`ENOENT`))f=c;else throw e}let p={schemaVersion:1,category:n,key:r,value:s,summary:i,source:a,scope:o,createdAt:f,lastUsedAt:c,enabled:!0};return await t.mkdir(u,{recursive:!0}),await t.writeFile(d,`${JSON.stringify(p,null,2)}\n`,`utf8`),vu(l,d,p)}async function Su(e){let t=e.fsAsync??new P,{root:n,memoryRoot:r}=await hu(e),i;try{i=await t.readdir(r,{withFileTypes:!0})}catch{i=[]}let a=await Promise.all(i.filter(e=>e.isFile()&&e.name.endsWith(au)).map(e=>yu(n,g.default.join(r,e.name),t)));return{root:n,activeRepositoryRoot:g.default.resolve(e.activeRepositoryRoot),items:a.sort((e,t)=>`${e.category}/${e.key}`.localeCompare(`${t.category}/${t.key}`))}}async function Cu(e){let t=e.fsAsync??new P,{root:n,storageLocation:r}=await bu(e);return yu(n,r,t)}async function wu(e){let t=e.fsAsync??new P,{root:n,storageLocation:r}=await bu(e),i={...gu(await t.readFile(r,`utf8`),r),enabled:!1,lastUsedAt:cu((e.now??(()=>new Date))())};return await t.writeFile(r,`${JSON.stringify(i,null,2)}\n`,`utf8`),vu(n,r,i)}async function Tu(e){let t=e.fsAsync??new P,{storageLocation:n}=await bu(e);return await t.rm(n),{category:e.category,key:e.key,deleted:!0}}async function Eu(e){let t=await Cu(e);return t.enabled?t:null}const Du=[`test`,`typecheck`,`build`],Ou={idle:{checkpoint_created:`checkpointed`,cancelled:`cancelled`},checkpointed:{edits_started:`editing`,cancelled:`cancelled`},editing:{edits_applied:`verifying`,verify_failed:`failed`,cancelled:`cancelled`},verifying:{verify_passed:`passed`,verify_failed:`failed`,cancelled:`cancelled`},passed:{},failed:{rollback_completed:`rolled_back`,cancelled:`cancelled`},rolled_back:{},cancelled:{}};function ku(e){return e?Array.from(new Set(e.map(e=>e.trim()).filter(Boolean))):[]}function Au(e){return e.flatMap(e=>Du.map(t=>({id:`package-${t}:${e}`,phase:`verify`,description:`Run ${t} for ${e} in a child process against the new on-disk tree.`,required:!0,command:`pnpm --filter ${e} ${t}`})))}function ju(){return[{id:`checkpoint`,phase:`checkpoint`,description:`Create a recoverable turn-level checkpoint before the first mutation.`,required:!0},{id:`atomic-edit`,phase:`edit`,description:`Apply Write/Edit mutations through same-directory temp files and atomic rename.`,required:!0},{id:`handoff`,phase:`handoff`,description:`Keep the current process on already-loaded code and run verification child processes against disk.`,required:!0}]}function Mu(e){return{id:`harness-verify`,phase:`verify`,description:`Run Robota harness verification as the local CI-like gate.`,required:!0,command:`pnpm harness:verify -- --base-ref ${e} --skip-record-check`}}function Nu(){return{id:`rollback-on-failure`,phase:`recover`,description:`Use the existing edit checkpoint restore path if verification fails.`,required:!0}}function Pu(e){if(e.changedFiles.length===0)throw Error(`Self-hosting verification requires at least one changed file.`);let t=e.baseRef??`origin/develop`,n=ku(e.packageScopes),r=[...ju(),...Au(n),Mu(t),Nu()];return{changedFiles:[...e.changedFiles],packageScopes:n,baseRef:t,steps:r}}function Fu(e,t){let n=Ou[e][t];if(!n)throw Error(`Invalid self-hosting loop transition: ${e} -> ${t}`);return n}function Iu(e){return e}function Lu(e){if(!e||e.length===0)return;let[t,...n]=e;if(t!==void 0)return[t,...n]}function Ru(e){let t=Lu(e),n=t===void 0?d.z.string().describe(`Registered model-invocable command name to execute`):d.z.enum(t).describe(`Registered model-invocable command name to execute`);return d.z.object({command:n,args:d.z.string().optional().describe(`Arguments to pass to the command`)})}function zu(e){if(e.commandNames!==void 0)return e.commandNames;if(e.commandDescriptors!==void 0)return e.commandDescriptors.map(e=>A(e.name))}function Bu(e){return`- ${A(e.name)}${e.argumentHint?` ${e.argumentHint}`:``}: ${e.description}`}function Vu(e){let t=`Executes a registered model-invocable Robota command through the command registry. Accepted command names and argument grammar come from registered command descriptors.`;return e===void 0||e.length===0?t:[t,`Use the registered command descriptors below as the authority for when to call this tool.`,``,`Registered model-invocable commands:`,...e.map(Bu)].join(`
109
+ `)}function Hu(e){let t=Ru(zu(e));return(0,u.createZodFunctionTool)(`ExecuteCommand`,Vu(e.commandDescriptors),Iu(t),async n=>{let r=t.parse(n),i=A(r.command);return e.isModelInvocable(i)?dt(i,await e.execute(i,r.args??``)):JSON.stringify({success:!1,command:i,error:`Command is not model-invocable: ${i}`})})}function Uu(e){return/^\/\S/.test(e)}function Wu(e){let t=e.slice(1).trim().split(/\s+/);return{name:t[0]??``,args:t.slice(1).filter(e=>e.length>0)}}function Gu(e){if(!Uu(e))return{type:`user-message`,text:e};let{name:t,args:n}=Wu(e);return{type:`slash-command`,name:t,args:n}}function Ku(e,t){return t.type===`pick`?{type:`pick`,id:e,title:`/${e}`,items:t.getItems()}:{type:`confirm`,id:e,message:t.message}}function qu(e,t){return t.type===`cancelled`?null:e.type===`pick`&&t.type===`pick`?[t.item.value]:e.type===`confirm`&&t.type===`confirm`?[]:null}function Ju(e){return e.map(e=>({name:e.name,description:e.description}))}function Yu(e,t){let n=``,r=e=>{n+=e,t.write({type:`assistant-chunk`,chunk:e})},i=()=>{t.write({type:`assistant-done`,fullText:n}),n=``,t.setBusy(!1)},a=e=>{t.write({type:`tool-call`,id:e.executionId??e.toolName,name:e.toolName,args:e.firstArg})},o=e=>{t.write({type:`tool-result`,id:e.executionId??e.toolName,name:e.toolName,result:e.toolResultData??e.result})},s=e=>{t.setBusy(!1),t.write({type:`error`,error:e})},c=()=>{t.setBusy(!1)};return e.on(`text_delta`,r),e.on(`complete`,i),e.on(`tool_start`,a),e.on(`tool_end`,o),e.on(`error`,s),e.on(`interrupted`,c),()=>{e.off(`text_delta`,r),e.off(`complete`,i),e.off(`tool_start`,a),e.off(`tool_end`,o),e.off(`error`,s),e.off(`interrupted`,c)}}function Xu(e){let{channel:t,commandModules:n,_testSession:r}=e,i=null,a=null,o={};for(let e of n)e.interactionHints&&Object.assign(o,e.interactionHints);async function s(e){if(!i)return;let n=Gu(e);if(n.type===`user-message`){t.write({type:`user-message`,text:e}),t.setBusy(!0),await i.submit(e);return}let{name:r,args:a}=n,s=o[r],c=a;if(s&&a.length===0){let e=qu(s,await t.requestAction(Ku(r,s)));if(e===null)return;c=e}let l=await i.executeCommand(r,c.join(` `));l?t.write({type:`command-result`,name:r,output:l.message}):t.write({type:`error`,error:Error(`Unknown command "/${r}". Type /help for help.`)})}return{async start(){if(r)i=r;else{let{provider:t,cwd:r,sessionStore:a}=e;if(!t)throw Error(`createInteractiveRuntime: provider is required`);if(!r)throw Error(`createInteractiveRuntime: cwd is required`);i=new jl({provider:t,cwd:r,sessionStore:a,commandModules:n})}a=Yu(i,t);let o=i.listCommands();t.setAvailableCommands(Ju(o)),t.onSubmit(s),await t.start()},async stop(){a?.(),await t.stop(),await i?.shutdown(),i=null}}}const Zu=[`Allow once`,`Allow for this session`,`Deny`];function Qu(e){let t=Object.entries(e);return t.length===0?`(no arguments)`:t.map(([e,t])=>`${e}: ${typeof t==`string`?t:JSON.stringify(t)}`).join(`, `)}async function $u(e,t,n){e.writeLine(``),e.writeError(`[Permission Required] Tool: ${t}`),e.writeLine(` ${Qu(n)}`),e.writeLine(``);let r=await e.select(Zu,0);return r===1?`allow-session`:r===0}const ed={usedTokens:0,maxTokens:2e5,usedPercentage:0,remainingPercentage:100},td={sessionId:`test-session-id`,updatedAt:new Date().toISOString(),entries:[]},nd={id:``,parentSessionId:`test-session-id`,waitPolicy:`wait_all`,taskIds:[],status:`completed`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),results:[]};function rd(e){return{submit:()=>Promise.resolve(),abort:()=>{},cancelQueue:()=>{},shutdown:()=>Promise.resolve(),isExecuting:()=>!1,getPendingPrompt:()=>null,getMessages:()=>[],getContextState:()=>({...ed}),getSession:()=>({getSessionId:()=>`test-session-id`}),getCwd:()=>`/workspace`,executeCommand:()=>Promise.resolve(null),listCommands:()=>[],on:()=>{},off:()=>{},listBackgroundTasks:()=>[],getBackgroundTask:()=>void 0,cancelBackgroundTask:()=>Promise.resolve(),closeBackgroundTask:()=>Promise.resolve(),sendBackgroundTask:()=>Promise.resolve(),readBackgroundTaskLog:()=>Promise.resolve({taskId:``,lines:[]}),listBackgroundJobGroups:()=>[],getBackgroundJobGroup:()=>void 0,createBackgroundJobGroup:()=>({...nd}),waitBackgroundJobGroup:()=>Promise.resolve({...nd}),getExecutionWorkspaceSnapshot:()=>({...td}),listAgentDefinitions:()=>[],listAgentJobs:()=>[],spawnAgentJob:()=>Promise.resolve({id:`agent_1`,type:`general-purpose`,label:`general-purpose`,parentSessionId:`test-session-id`,status:`running`,mode:`background`,depth:1,cwd:`/workspace`,promptPreview:``,updatedAt:new Date().toISOString()}),sendAgentJob:()=>Promise.resolve(),cancelAgentJob:()=>Promise.resolve(),closeAgentJob:()=>Promise.resolve(),...e}}function id(){let e=Ui();return{deleted:qi(e),path:e}}function ad(e){try{let t=od(e);if(!t)return;let n=(0,m.readFileSync)((0,g.join)(t,`HEAD`),`utf8`).trim();if(!n)return;if(n.startsWith(`ref: `)){let e=n.slice(5).trim();return e.startsWith(`refs/heads/`)?e.slice(11):e}return n.slice(0,7)}catch{return}}function od(e){let t=(0,g.resolve)(e),n=(0,g.dirname)(t);for(;n!==t;){let e=sd((0,g.join)(t,`.git`),t);if(e)return e;t=n,n=(0,g.dirname)(t)}return sd((0,g.join)(t,`.git`),t)}function sd(e,t){if(!(0,m.existsSync)(e))return;let n=(0,m.lstatSync)(e);if(n.isDirectory())return e;if(!n.isFile())return;let r=(0,m.readFileSync)(e,`utf8`).trim();if(!r.startsWith(`gitdir:`))return;let i=r.slice(7).trim();return(0,g.isAbsolute)(i)?i:(0,g.resolve)(t,i)}function cd(e,t){let n=ud(e),r=ud(t);if(n===void 0||r===void 0)return Math.sign(e.localeCompare(t));let i=$(n.major,r.major)||$(n.minor,r.minor)||$(n.patch,r.patch);return i===0?dd(n.prerelease,r.prerelease):i}function ld(e,t){return cd(e,t)>0}function ud(e){let[t,n]=(e.trim().replace(/^v/,``).split(`+`)[0]??``).split(`-`,2),[r,i,a]=t.split(`.`),o=Q(r),s=Q(i),c=Q(a);if(!(o===void 0||s===void 0||c===void 0))return{major:o,minor:s,patch:c,prerelease:n?n.split(`.`):[]}}function Q(e){if(!(e===void 0||!/^\d+$/.test(e)))return Number(e)}function $(e,t){return Math.sign(e-t)}function dd(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return 1;if(t.length===0)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(n===void 0)return-1;if(i===void 0)return 1;let a=fd(n,i);if(a!==0)return a}return 0}function fd(e,t){let n=Q(e),r=Q(t);return n!==void 0&&r!==void 0?$(n,r):n===void 0?r===void 0?Math.sign(e.localeCompare(t)):1:-1}function pd(e){let t=(0,g.dirname)((0,ee.fileURLToPath)(e)),n=[(0,g.join)(t,`..`,`..`,`package.json`),(0,g.join)(t,`..`,`package.json`)];for(let e of n)try{let t=(0,m.readFileSync)(e,`utf-8`),n=JSON.parse(t);if(n.version!==void 0&&n.name!==void 0)return n.version}catch{continue}return`0.0.0`}function md(e=process.env.HOME??process.env.USERPROFILE??`/`){return(0,g.join)(e,`.robota`,`update-check.json`)}function hd(e){if((0,m.existsSync)(e))try{return Ad(JSON.parse((0,m.readFileSync)(e,`utf8`)))}catch{return}}function gd(e,t){(0,m.mkdirSync)((0,g.dirname)(e),{recursive:!0}),(0,m.writeFileSync)(e,JSON.stringify(t,null,2)+`
110
+ `,`utf8`)}async function _d(e){if(e.disabled===!0)return{status:`skipped`,reason:`disabled`};let t=e.packageName??`@robota-sdk/agent-cli`,n=e.cachePath??md(),r=e.now??new Date,i=e.ttlMs??864e5;if(e.force!==!0){let a=hd(n);if(a!==void 0&&Ed(a,r,i,t))return wd(a,e.currentVersion)}let a=await vd(e,t,n,r);return typeof a==`string`?Td(e.currentVersion,a):a}async function vd(e,t,n,r){let i=await Dd({fetchImpl:e.fetchImpl??fetch,packageName:t,registryUrl:e.registryUrl??`https://registry.npmjs.org`,timeoutMs:e.timeoutMs??1500});return i.ok?(yd(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,latestVersion:i.version}),i.version):(yd(n,{packageName:t,checkedAt:r.toISOString(),currentVersion:e.currentVersion,errorMessage:i.errorMessage}),{status:`error`,errorMessage:i.errorMessage})}function yd(e,t){try{gd(e,t)}catch{}}async function bd(e){let t=await _d(e);return t.status===`update_available`?t.notice:void 0}function xd(e){return e.printMode===!1&&e.disableUpdateCheck===!1}function Sd(e){return[`Robota update available: ${e.currentVersion} -> ${e.latestVersion}.`,`Run ${e.installCommand}`].join(` `)}function Cd(e){return e.status===`update_available`?Sd(e.notice):e.status===`current`?`Robota is up to date (${e.currentVersion}).`:e.status===`skipped`?`Robota update check skipped.`:`Robota update check failed: ${e.errorMessage}`}function wd(e,t){return e.errorMessage===void 0?e.latestVersion===void 0?{status:`error`,errorMessage:`Cached update check has no latest version`}:Td(t,e.latestVersion):{status:`error`,errorMessage:e.errorMessage}}function Td(e,t){return ld(t,e)?{status:`update_available`,notice:{currentVersion:e,latestVersion:t,installCommand:`npm install -g '@robota-sdk/agent-cli@latest'`}}:{status:`current`,currentVersion:e,latestVersion:t}}function Ed(e,t,n,r){if(e.packageName!==r)return!1;let i=Date.parse(e.checkedAt);return Number.isFinite(i)?t.getTime()-i<n:!1}async function Dd(e){try{return{ok:!0,version:await Od(e)}}catch(e){return{ok:!1,errorMessage:e instanceof Error?e.message:String(e)}}}async function Od(e){let t=new AbortController,n=setTimeout(()=>t.abort(),e.timeoutMs);try{let n=kd(e.registryUrl,e.packageName),r=await e.fetchImpl(n,{headers:{accept:`application/json`},signal:t.signal});if(!r.ok)throw Error(`registry responded with HTTP ${r.status}`);let i=(await r.json())[`dist-tags`]?.latest;if(typeof i!=`string`||i.trim().length===0)throw Error(`registry metadata is missing dist-tags.latest`);return i}finally{clearTimeout(n)}}function kd(e,t){return`${e.replace(/\/+$/,``)}/${encodeURIComponent(t)}`}function Ad(e){if(!jd(e))return;let t=e;if(typeof t.packageName==`string`&&typeof t.checkedAt==`string`&&typeof t.currentVersion==`string`&&(t.latestVersion===void 0||typeof t.latestVersion==`string`)&&(t.errorMessage===void 0||typeof t.errorMessage==`string`))return{packageName:t.packageName,checkedAt:t.checkedAt,currentVersion:t.currentVersion,...t.latestVersion!==void 0&&{latestVersion:t.latestVersion},...t.errorMessage!==void 0&&{errorMessage:t.errorMessage}}}function jd(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Md(e){let t=Ui(),n={settings:{read:()=>W(t),write:e=>G(t,e)}},r=e.backgroundTaskRunners??(0,l.createDefaultBackgroundTaskRunners)(),i=e.commandModules??[],a=e.commandHostAdapters??n,o=`sessionStore`in e?e.sessionStore:Ml(e.cwd);return{cwd:e.cwd,provider:e.provider,commandModules:i,commandHostAdapters:a,backgroundTaskRunners:r,subagentRunnerFactory:e.subagentRunnerFactory,sessionStore:o,transportRegistry:e.transportRegistry,reloadPluginCommandSource:e.reloadPluginCommandSource??(()=>{}),createSession(t){return new jl({cwd:e.cwd,provider:e.provider,backgroundTaskRunners:r,subagentRunnerFactory:e.subagentRunnerFactory,commandModules:i,commandHostAdapters:a,permissionMode:t.permissionMode,maxTurns:t.maxTurns,sessionStore:t.sessionStore,sessionName:t.sessionName,bare:t.bare,allowedTools:t.allowedTools,deniedTools:t.deniedTools,model:t.model,appendSystemPrompt:t.appendSystemPrompt,systemPrompt:t.systemPrompt,shellExec:t.shellExec,agentName:t.agentName,orgPolicy:e.orgPolicy,additionalTools:t.additionalTools,resumeSessionId:t.resumeSessionId,...t.responseFormat?{responseFormat:t.responseFormat}:{}})}}}function Nd(e){let t=Md({cwd:e.cwd??process.cwd(),provider:e.provider,sessionStore:void 0,commandHostAdapters:{settings:{read:()=>({}),write:()=>{}}}}),n=t.createSession.bind(t);return{...t,createSession(e){return n({bare:!0,...e})}}}exports.AUTO_COMPACT_THRESHOLD_SETTINGS_KEY=Ks,exports.AgentExecutor=Yi,exports.BACKGROUND_COMMAND_DESCRIPTION=`List and control background tasks`,exports.BACKGROUND_COMMAND_USAGE=`Usage: background list | background read <task-id> [offset] | background cancel <task-id> | background close <task-id>`,exports.BUILT_IN_AGENTS=tt,exports.BackgroundJobOrchestrator=ne,exports.BuiltinCommandSource=ns,exports.BundlePluginInstaller=jo,exports.BundlePluginLoader=Ao,exports.CLEAR_COMMAND_DESCRIPTION=`Clear conversation history`,exports.CLI_UPDATE_CACHE_TTL_MS=864e5,exports.CLI_UPDATE_PACKAGE_NAME=`@robota-sdk/agent-cli`,exports.CLI_UPDATE_REGISTRY_URL=`https://registry.npmjs.org`,exports.CLI_UPDATE_TIMEOUT_MS=1500,exports.COST_COMMAND_DESCRIPTION=`Show session token usage and estimated cost. /cost budget <amount> sets a monthly budget.`,exports.CommandRegistry=Qo,exports.DEFAULT_AUTO_COMPACT_THRESHOLD=Gs,exports.DEFAULT_STATUS_LINE_COMMAND_SETTINGS=Fc,exports.EXECUTION_ORIGIN_METADATA_KEYS=S,exports.EXIT_COMMAND_DESCRIPTION=`Exit CLI`,exports.EditCheckpointStore=z,exports.HELP_COMMAND_DESCRIPTION=`Show available commands`,exports.InteractiveSession=jl,exports.LANGUAGE_COMMAND_ARGUMENT_HINT=`<code>`,exports.LANGUAGE_COMMAND_DESCRIPTION=`Set response language`,exports.MEMORY_COMMAND_ARGUMENT_HINT=`list | show [topic] | add <user|feedback|project|reference> <topic> <text> | pending | approve <id> | reject <id> | used`,exports.MEMORY_COMMAND_DESCRIPTION=`Project memory command. Use it to inspect project memory when stored context may help, save durable preferences, project conventions, feedback, or references worth reusing across sessions, review pending candidates, and report memory provenance. Do not store secrets, credentials, or transient facts.`,exports.MEMORY_COMMAND_USAGE=`Usage: memory list | memory show [topic] | memory add <user|feedback|project|reference> <topic> <text> | memory pending | memory approve <id> | memory reject <id> | memory used`,exports.MEMORY_INDEX_MAX_BYTES=po,exports.MEMORY_INDEX_MAX_LINES=200,exports.MODEL_COMMAND_TOOL_PREFIX=at,exports.MarketplaceClient=Fo,exports.PERMISSIONS_COMMAND_DESCRIPTION=`Show/change permission mode and permission rules`,exports.PERMISSION_MODE_ARGUMENT_HINT=`plan | default | acceptEdits | bypassPermissions`,exports.PERMISSION_MODE_COMMAND_DESCRIPTION=`Show/change permission mode`,exports.PLUGIN_COMMAND_ARGUMENT_HINT=`manage | install <name@marketplace> | uninstall <name@marketplace> | enable <name@marketplace> | disable <name@marketplace> | marketplace <action>`,exports.PLUGIN_COMMAND_DESCRIPTION=`Manage plugins`,exports.PROVIDER_SAFE_TOOL_NAME_PATTERN=ot,exports.PluginCommandSource=Us,exports.PluginSettingsStore=Eo,exports.ProjectMemoryStore=So,exports.PromptExecutor=Zi,exports.ProviderConfigError=Rs,exports.RECOMMENDED_RESPONSE_LANGUAGES=yc,exports.RELOAD_PLUGINS_COMMAND_DESCRIPTION=`Reload all plugin resources`,exports.RENAME_COMMAND_DESCRIPTION=`Rename the current session`,exports.RENAME_COMMAND_USAGE=`Usage: rename <name>`,exports.RESUME_COMMAND_DESCRIPTION=`Resume a previous session`,exports.REWIND_COMMAND_ARGUMENT_HINT=`list | inspect CHECKPOINT_ID | restore CHECKPOINT_ID | code CHECKPOINT_ID | rollback CHECKPOINT_ID`,exports.REWIND_COMMAND_DESCRIPTION=`List, inspect, restore, or rollback edit checkpoints.`,exports.STATUSLINE_COMMAND_ARGUMENT_HINT=`on | off | reset | git on | git off`,exports.STATUSLINE_COMMAND_DESCRIPTION=`Configure TUI status-line visibility and fields such as model, context, tokens, session, and git branch.`,exports.SettingsParseError=Hi,exports.SkillCommandSource=Vi,exports.SystemCommandExecutor=$o,exports.USER_LOCAL_MEMORY_CATEGORIES=iu,exports.USER_LOCAL_STORAGE_CATEGORIES=ql,exports.USER_LOCAL_STORAGE_CATEGORY_DEFINITIONS=Jl,exports.VALIDATE_SESSION_COMMAND_DESCRIPTION=`Validate current session replay log`,exports.VALID_PERMISSION_MODES=Cc,exports.addCommandContextReference=tc,exports.applyActiveModelChange=Ps,exports.applyPresetToSession=Pc,exports.applyProviderConfiguration=Ms,exports.applyProviderSwitch=Ns,exports.applyStatusLineSettings=zc,exports.assembleSubagentPrompt=it,exports.buildBackgroundCommandSubcommands=lc,exports.buildLanguageCommandSubcommands=bc,exports.buildMemoryCommandSubcommands=ul,exports.buildPermissionModeSubcommands=wc,exports.buildPluginCommandSubcommands=Wc,exports.buildPromptWithFileReferences=hn,exports.buildProviderProfile=ls,exports.buildProviderSetupPatch=cs,exports.buildRewindCommandSubcommands=el,exports.buildStatusLineCommandSubcommands=Ic,exports.cancelCommandBackgroundTask=_c,exports.checkForCliUpdate=_d,exports.checkSettingsDocument=vs,exports.checkSettingsFile=Cs,exports.clearCommandContextReferences=rc,exports.clearContextReferences=on,exports.clearConversationHistory=Gc,exports.closeCommandBackgroundTask=vc,exports.compactCommandContext=$s,exports.compareSemverVersions=cd,exports.createAgentRuntime=Md,exports.createAgentTool=Ft,exports.createBackgroundGroupExecutionEntryId=T,exports.createBackgroundProcessTool=Si,exports.createBackgroundTaskExecutionEntryId=w,exports.createBuiltinCommandModule=rs,exports.createCommandExecutionTool=Hu,exports.createCommandMemoryStores=pl,exports.createCommandPendingMemoryStore=fl,exports.createCommandProjectMemoryStore=dl,exports.createContextReferenceItem=nn,exports.createDefaultTools=Gr,exports.createExecutionOriginMetadata=E,exports.createExecutionWorkspaceSnapshot=de,exports.createExecutionWorkspaceTaskSpawner=Ne,exports.createInProcessSubagentRunner=Tt,exports.createInteractiveRuntime=Xu,exports.createLineDetailPage=Ae,exports.createMainThreadDetailPage=ke,exports.createMainThreadExecutionEntryId=C,exports.createModelCommandToolProjection=lt,exports.createPluginRegistryReloadRequestedEffect=Hc,exports.createPluginTuiRequestedEffect=Vc,exports.createProjectSessionStore=Ml,exports.createProjectedCommandExecutionTools=ft,exports.createPromptFileReferenceHistoryEntry=vn,exports.createProviderFromSettings=Hs,exports.createProviderSafeModelCommandToolName=ct,exports.createQuery=Kl,exports.createSessionExitRequestedEffect=Yc,exports.createSessionPickerRequestedEffect=Jc,exports.createSessionRenamedEffect=qc,exports.createStatelessRuntime=Nd,exports.createSubagentLogger=ga,exports.createSubagentSession=yt,exports.createSystemCommands=es,exports.createTestInteractiveSession=rd,exports.createUserSessionStore=Nl,exports.deleteProviderProfile=os,exports.deleteSettings=qi,exports.deleteUserLocalMemoryItem=Tu,exports.disableUserLocalMemoryItem=wu,exports.discoverTaskFiles=oo,exports.evaluateReversibleToolSafety=ta,exports.executeSkill=Sl,exports.formatCliUpdateCheckMessage=Cd,exports.formatCliUpdateNotice=Sd,exports.formatCommandBackgroundTask=uc,exports.formatCommandBackgroundTaskList=dc,exports.formatCommandHelpMessage=cc,exports.formatCommandPermissionsMessage=Nc,exports.formatCommandSessionReplayValidationReport=Qc,Object.defineProperty(exports,"formatEnvReference",{enumerable:!0,get:function(){return c.formatEnvReference}}),exports.formatInvalidPermissionModeMessage=Dc,exports.formatLanguageUsageMessage=Sc,exports.formatOrgPolicyViolationMessage=kl,exports.formatProjectedModelCommandToolPromptDescription=ut,exports.formatPromptFileReferenceDiagnostics=_n,exports.formatTaskContext=lo,exports.generateSessionName=Gl,exports.getBuiltInAgent=k,exports.getForkWorkerSuffix=rt,exports.getProviderSettingsPaths=As,exports.getStartupCliUpdateNotice=bd,exports.getSubagentSuffix=nt,exports.getUserSettingsPath=Ui,exports.getUserUpdateCheckCachePath=md,exports.hasBlockingPromptFileReferenceDiagnostics=gn,exports.hasSensitiveCommandMemoryContent=hl,Object.defineProperty(exports,"hasUsableSecretReference",{enumerable:!0,get:function(){return c.hasUsableSecretReference}}),exports.inspectCommandEditCheckpoint=nl,exports.inspectUserLocalMemoryItem=Cu,exports.inspectUserLocalStorage=ru,exports.isApiKeyPlaintext=Al,exports.isCommandMemoryType=ml,Object.defineProperty(exports,"isEnvReference",{enumerable:!0,get:function(){return c.isEnvReference}}),exports.isMemoryType=ho,exports.isNewerSemverVersion=ld,exports.isPermissionMode=Ec,exports.isSlashCommand=Uu,exports.isStatusLineCommandSettingsPatch=Lc,exports.listActiveContextReferences=sn,exports.listCommandBackgroundTasks=hc,exports.listCommandContextReferences=ec,exports.listCommandEditCheckpoints=tl,exports.listCommandSessionAllowedTools=jc,exports.listCommandUsedMemoryReferences=gl,exports.listResumableSessionSummaries=Pl,exports.listUserLocalMemoryItems=Su,exports.loadOrgPolicy=Ol,exports.loadTaskContext=uo,exports.mergeProviderPatch=us,exports.mergeProviders=Ds,exports.mergeSettings=Es,exports.normalizeModelCommandName=A,exports.parseCommandBackgroundLogCursor=fc,exports.parseExecutionWorkspaceEntryId=ue,exports.parseFrontmatter=Li,exports.parseInput=Gu,exports.parseLanguageArgument=xc,exports.parsePermissionModeArgument=Tc,exports.parsePromptFileReferences=Sn,exports.parseSessionNameArgument=Kc,exports.parseTaskFile=so,exports.planSelfHostingVerification=Pu,exports.preprocessShellCommands=yl,exports.probeProviderProfile=_s,exports.projectPaths=R,exports.promptForApproval=$u,exports.readAutoCompactThreshold=Js,exports.readAutoCompactThresholdSource=Ys,exports.readCommandBackgroundTaskLog=gc,exports.readCommandContextState=qs,exports.readCommandPermissionMode=kc,exports.readCommandPermissionsState=Mc,exports.readCommandSessionInfo=Xc,exports.readCurrentGitBranch=ao,exports.readEnabledUserLocalMemoryItem=Eu,exports.readMergedProviderSettings=zs,exports.readMergedProviderSettingsFromPaths=ws,exports.readPackageVersion=pd,exports.readProviderSettings=Vs,exports.readSettings=W,exports.readStatusLineSettings=Rc,exports.readUpdateCheckCache=hd,exports.recordCommandMemoryEvent=_l,exports.removeCommandContextReference=nc,exports.removeContextReference=an,exports.resetAutoCompactThresholdSetting=Qs,exports.resetUserConfig=id,exports.resolveActiveProvider=Os,exports.resolveEnvDefaultProvider=Bs,Object.defineProperty(exports,"resolveEnvReference",{enumerable:!0,get:function(){return c.resolveEnvReference}}),exports.resolveGitBranch=ad,exports.resolveLatestSessionId=Fl,exports.resolvePermissionModeAdapter=Oc,exports.resolvePluginCommandAdapter=Uc,exports.resolvePromptFileReferencePaths=kn,exports.resolvePromptFileReferences=On,exports.resolveProviderSettingsWriteTargetPath=js,exports.resolveSessionIdByIdOrName=Il,exports.resolveSettingsPathForScope=Wi,exports.resolveSubagentLogDir=_a,exports.resolveUserLocalStorageRoot=eu,exports.restoreCommandEditCheckpoint=rl,exports.retrieveAgentToolDeps=j,exports.rollbackCommandEditCheckpoint=il,exports.sanitizeProviderProfileName=oc,exports.selectRelevantTasks=co,exports.setCommandAutoCompactThreshold=Xs,exports.setCurrentProvider=as,exports.setUserLocalMemoryItem=xu,exports.shouldRunStartupCliUpdateCheck=xd,exports.storeAgentToolDeps=At,exports.substituteVariables=vl,exports.suggestProviderProfileName=ac,exports.summarizeBackgroundJobGroup=se,exports.testProviderProfileCommand=gs,exports.toContextReferenceRecords=cn,exports.toPromptFileReferenceRecords=F,exports.tokeniseSlashCommand=Wu,exports.transitionSelfHostingLoop=Fu,exports.updateModelInSettings=Gi,exports.updateTaskFileStatus=fo,exports.upsertContextReference=rn,exports.upsertProviderProfile=is,exports.userPaths=hr,exports.validateCommandSessionReplayLog=Zc,exports.validateProviderProfile=ss,exports.wrapEditCheckpointTools=Ai,exports.wrapReversibleExecutionTools=na,exports.writeAutoCompactThresholdSetting=Zs,exports.writeCommandPermissionMode=Ac,exports.writeSettings=G,exports.writeUpdateCheckCache=gd;